{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./node_modules/moment/moment.js","webpack:///./node_modules/jquery/dist/jquery.js","webpack:///./node_modules/inherits/inherits_browser.js","webpack:///(webpack)/buildin/module.js","webpack:///./node_modules/safe-buffer/index.js","webpack:///./node_modules/buffer/index.js","webpack:///./node_modules/jszip/lib/utils.js","webpack:///./node_modules/bn.js/lib/bn.js","webpack:///./node_modules/lodash/lodash.js","webpack:///(webpack)/buildin/global.js","webpack:///./node_modules/jszip/lib/stream/GenericWorker.js","webpack:///./node_modules/minimalistic-assert/index.js","webpack:///./node_modules/elliptic/lib/elliptic/utils.js","webpack:///./node_modules/process/browser.js","webpack:///./node_modules/hash.js/lib/hash/utils.js","webpack:///./node_modules/xlsx-populate/lib/ArgHandler.js","webpack:///./node_modules/jszip/lib/support.js","webpack:///./node_modules/pako/lib/utils/common.js","webpack:///./node_modules/xlsx-populate/lib/xmlq.js","webpack:///./node_modules/cipher-base/index.js","webpack:///./node_modules/readable-stream/lib/_stream_duplex.js","webpack:///./node_modules/jszip/lib/utf8.js","webpack:///./node_modules/xlsx-populate/lib/addressConverter.js","webpack:///./node_modules/randombytes/browser.js","webpack:///./node_modules/sha.js/hash.js","webpack:///./node_modules/stream-browserify/index.js","webpack:///./node_modules/core-util-is/lib/util.js","webpack:///./node_modules/jszip/lib/external.js","webpack:///./node_modules/create-hash/browser.js","webpack:///./node_modules/buffer-xor/index.js","webpack:///./node_modules/hash.js/lib/hash/common.js","webpack:///./node_modules/asn1.js/lib/asn1.js","webpack:///./node_modules/asn1.js/lib/asn1/base/index.js","webpack:///./node_modules/encoding-japanese/src/config.js","webpack:///./node_modules/encoding-japanese/src/util.js","webpack:///./node_modules/timers-browserify/main.js","webpack:///./node_modules/xlsx-populate/lib/externals.js","webpack:///./node_modules/process-nextick-args/index.js","webpack:///./node_modules/string_decoder/lib/string_decoder.js","webpack:///./node_modules/jszip/lib/nodejsUtils.js","webpack:///./node_modules/xlsx-populate/lib/regexify.js","webpack:///./node_modules/browserify-aes/aes.js","webpack:///./node_modules/evp_bytestokey/index.js","webpack:///./node_modules/elliptic/lib/elliptic/curve/base.js","webpack:///./node_modules/parse-asn1/index.js","webpack:///./node_modules/encoding-japanese/src/encoding-table.js","webpack:///./node_modules/encoding-japanese/src/encoding-detect.js","webpack:///./node_modules/events/events.js","webpack:///./node_modules/readable-stream/readable-browser.js","webpack:///./node_modules/readable-stream/node_modules/safe-buffer/index.js","webpack:///./node_modules/readable-stream/lib/_stream_writable.js","webpack:///./node_modules/jszip/lib/compressedObject.js","webpack:///./node_modules/jszip/lib/crc32.js","webpack:///./node_modules/pako/lib/zlib/messages.js","webpack:///./node_modules/xlsx-populate/lib/colorIndexes.js","webpack:///./node_modules/md5.js/index.js","webpack:///./node_modules/ripemd160/index.js","webpack:///./node_modules/sha.js/index.js","webpack:///./node_modules/des.js/lib/des.js","webpack:///./node_modules/browserify-aes/browser.js","webpack:///./node_modules/browserify-aes/modes/index.js","webpack:///./node_modules/brorand/index.js","webpack:///./node_modules/browserify-rsa/index.js","webpack:///./node_modules/elliptic/lib/elliptic.js","webpack:///./node_modules/elliptic/lib/elliptic/curves.js","webpack:///./node_modules/hash.js/lib/hash.js","webpack:///./node_modules/moment/locale/ja.js","webpack:///./node_modules/papaparse/papaparse.min.js","webpack:///./node_modules/encoding-japanese/src/index.js","webpack:///./node_modules/setimmediate/setImmediate.js","webpack:///./node_modules/moment/locale/af.js","webpack:///./node_modules/moment/locale/ar.js","webpack:///./node_modules/moment/locale/ar-dz.js","webpack:///./node_modules/moment/locale/ar-kw.js","webpack:///./node_modules/moment/locale/ar-ly.js","webpack:///./node_modules/moment/locale/ar-ma.js","webpack:///./node_modules/moment/locale/ar-sa.js","webpack:///./node_modules/moment/locale/ar-tn.js","webpack:///./node_modules/moment/locale/az.js","webpack:///./node_modules/moment/locale/be.js","webpack:///./node_modules/moment/locale/bg.js","webpack:///./node_modules/moment/locale/bm.js","webpack:///./node_modules/moment/locale/bn.js","webpack:///./node_modules/moment/locale/bo.js","webpack:///./node_modules/moment/locale/br.js","webpack:///./node_modules/moment/locale/bs.js","webpack:///./node_modules/moment/locale/ca.js","webpack:///./node_modules/moment/locale/cs.js","webpack:///./node_modules/moment/locale/cv.js","webpack:///./node_modules/moment/locale/cy.js","webpack:///./node_modules/moment/locale/da.js","webpack:///./node_modules/moment/locale/de.js","webpack:///./node_modules/moment/locale/de-at.js","webpack:///./node_modules/moment/locale/de-ch.js","webpack:///./node_modules/moment/locale/dv.js","webpack:///./node_modules/moment/locale/el.js","webpack:///./node_modules/moment/locale/en-SG.js","webpack:///./node_modules/moment/locale/en-au.js","webpack:///./node_modules/moment/locale/en-ca.js","webpack:///./node_modules/moment/locale/en-gb.js","webpack:///./node_modules/moment/locale/en-ie.js","webpack:///./node_modules/moment/locale/en-il.js","webpack:///./node_modules/moment/locale/en-nz.js","webpack:///./node_modules/moment/locale/eo.js","webpack:///./node_modules/moment/locale/es.js","webpack:///./node_modules/moment/locale/es-do.js","webpack:///./node_modules/moment/locale/es-us.js","webpack:///./node_modules/moment/locale/et.js","webpack:///./node_modules/moment/locale/eu.js","webpack:///./node_modules/moment/locale/fa.js","webpack:///./node_modules/moment/locale/fi.js","webpack:///./node_modules/moment/locale/fo.js","webpack:///./node_modules/moment/locale/fr.js","webpack:///./node_modules/moment/locale/fr-ca.js","webpack:///./node_modules/moment/locale/fr-ch.js","webpack:///./node_modules/moment/locale/fy.js","webpack:///./node_modules/moment/locale/ga.js","webpack:///./node_modules/moment/locale/gd.js","webpack:///./node_modules/moment/locale/gl.js","webpack:///./node_modules/moment/locale/gom-latn.js","webpack:///./node_modules/moment/locale/gu.js","webpack:///./node_modules/moment/locale/he.js","webpack:///./node_modules/moment/locale/hi.js","webpack:///./node_modules/moment/locale/hr.js","webpack:///./node_modules/moment/locale/hu.js","webpack:///./node_modules/moment/locale/hy-am.js","webpack:///./node_modules/moment/locale/id.js","webpack:///./node_modules/moment/locale/is.js","webpack:///./node_modules/moment/locale/it.js","webpack:///./node_modules/moment/locale/it-ch.js","webpack:///./node_modules/moment/locale/jv.js","webpack:///./node_modules/moment/locale/ka.js","webpack:///./node_modules/moment/locale/kk.js","webpack:///./node_modules/moment/locale/km.js","webpack:///./node_modules/moment/locale/kn.js","webpack:///./node_modules/moment/locale/ko.js","webpack:///./node_modules/moment/locale/ku.js","webpack:///./node_modules/moment/locale/ky.js","webpack:///./node_modules/moment/locale/lb.js","webpack:///./node_modules/moment/locale/lo.js","webpack:///./node_modules/moment/locale/lt.js","webpack:///./node_modules/moment/locale/lv.js","webpack:///./node_modules/moment/locale/me.js","webpack:///./node_modules/moment/locale/mi.js","webpack:///./node_modules/moment/locale/mk.js","webpack:///./node_modules/moment/locale/ml.js","webpack:///./node_modules/moment/locale/mn.js","webpack:///./node_modules/moment/locale/mr.js","webpack:///./node_modules/moment/locale/ms.js","webpack:///./node_modules/moment/locale/ms-my.js","webpack:///./node_modules/moment/locale/mt.js","webpack:///./node_modules/moment/locale/my.js","webpack:///./node_modules/moment/locale/nb.js","webpack:///./node_modules/moment/locale/ne.js","webpack:///./node_modules/moment/locale/nl.js","webpack:///./node_modules/moment/locale/nl-be.js","webpack:///./node_modules/moment/locale/nn.js","webpack:///./node_modules/moment/locale/pa-in.js","webpack:///./node_modules/moment/locale/pl.js","webpack:///./node_modules/moment/locale/pt.js","webpack:///./node_modules/moment/locale/pt-br.js","webpack:///./node_modules/moment/locale/ro.js","webpack:///./node_modules/moment/locale/ru.js","webpack:///./node_modules/moment/locale/sd.js","webpack:///./node_modules/moment/locale/se.js","webpack:///./node_modules/moment/locale/si.js","webpack:///./node_modules/moment/locale/sk.js","webpack:///./node_modules/moment/locale/sl.js","webpack:///./node_modules/moment/locale/sq.js","webpack:///./node_modules/moment/locale/sr.js","webpack:///./node_modules/moment/locale/sr-cyrl.js","webpack:///./node_modules/moment/locale/ss.js","webpack:///./node_modules/moment/locale/sv.js","webpack:///./node_modules/moment/locale/sw.js","webpack:///./node_modules/moment/locale/ta.js","webpack:///./node_modules/moment/locale/te.js","webpack:///./node_modules/moment/locale/tet.js","webpack:///./node_modules/moment/locale/tg.js","webpack:///./node_modules/moment/locale/th.js","webpack:///./node_modules/moment/locale/tl-ph.js","webpack:///./node_modules/moment/locale/tlh.js","webpack:///./node_modules/moment/locale/tr.js","webpack:///./node_modules/moment/locale/tzl.js","webpack:///./node_modules/moment/locale/tzm.js","webpack:///./node_modules/moment/locale/tzm-latn.js","webpack:///./node_modules/moment/locale/ug-cn.js","webpack:///./node_modules/moment/locale/uk.js","webpack:///./node_modules/moment/locale/ur.js","webpack:///./node_modules/moment/locale/uz.js","webpack:///./node_modules/moment/locale/uz-latn.js","webpack:///./node_modules/moment/locale/vi.js","webpack:///./node_modules/moment/locale/x-pseudo.js","webpack:///./node_modules/moment/locale/yo.js","webpack:///./node_modules/moment/locale/zh-cn.js","webpack:///./node_modules/moment/locale/zh-hk.js","webpack:///./node_modules/moment/locale/zh-tw.js","webpack:///./node_modules/jszip/lib/index.js","webpack:///./node_modules/isarray/index.js","webpack:///./node_modules/jszip/lib/readable-stream-browser.js","webpack:///./node_modules/readable-stream/lib/_stream_readable.js","webpack:///./node_modules/readable-stream/lib/internal/streams/stream-browser.js","webpack:///./node_modules/readable-stream/lib/internal/streams/destroy.js","webpack:///./node_modules/readable-stream/lib/_stream_transform.js","webpack:///./node_modules/jszip/lib/base64.js","webpack:///./node_modules/jszip/lib/stream/StreamHelper.js","webpack:///./node_modules/jszip/lib/defaults.js","webpack:///./node_modules/jszip/lib/stream/DataWorker.js","webpack:///./node_modules/jszip/lib/stream/DataLengthProbe.js","webpack:///./node_modules/jszip/lib/stream/Crc32Probe.js","webpack:///./node_modules/jszip/lib/compressions.js","webpack:///./node_modules/pako/lib/zlib/adler32.js","webpack:///./node_modules/pako/lib/zlib/crc32.js","webpack:///./node_modules/pako/lib/utils/strings.js","webpack:///./node_modules/pako/lib/zlib/zstream.js","webpack:///./node_modules/pako/lib/zlib/constants.js","webpack:///./node_modules/jszip/lib/signature.js","webpack:///./node_modules/jszip/lib/reader/readerFor.js","webpack:///./node_modules/jszip/lib/reader/ArrayReader.js","webpack:///./node_modules/jszip/lib/reader/DataReader.js","webpack:///./node_modules/jszip/lib/reader/Uint8ArrayReader.js","webpack:///(webpack)/buildin/amd-options.js","webpack:///./node_modules/xlsx-populate/lib/Cell.js","webpack:///./node_modules/xlsx-populate/lib/dateConverter.js","webpack:///./node_modules/xlsx-populate/lib/FormulaError.js","webpack:///./node_modules/xlsx-populate/lib/Style.js","webpack:///./node_modules/xlsx-populate/lib/RichText.js","webpack:///./node_modules/xlsx-populate/lib/Relationships.js","webpack:///./node_modules/hash-base/index.js","webpack:///./node_modules/sha.js/sha256.js","webpack:///./node_modules/sha.js/sha512.js","webpack:///./node_modules/create-hmac/browser.js","webpack:///./node_modules/create-hash/md5.js","webpack:///./node_modules/pbkdf2/browser.js","webpack:///./node_modules/pbkdf2/lib/precondition.js","webpack:///./node_modules/pbkdf2/lib/default-encoding.js","webpack:///./node_modules/pbkdf2/lib/sync-browser.js","webpack:///./node_modules/browserify-aes/modes/ctr.js","webpack:///./node_modules/browserify-aes/incr32.js","webpack:///./node_modules/browserify-aes/authCipher.js","webpack:///./node_modules/browserify-aes/streamCipher.js","webpack:///./node_modules/diffie-hellman/lib/generatePrime.js","webpack:///./node_modules/miller-rabin/lib/mr.js","webpack:///./node_modules/minimalistic-crypto-utils/lib/utils.js","webpack:///./node_modules/elliptic/lib/elliptic/curve/index.js","webpack:///./node_modules/hash.js/lib/hash/sha/common.js","webpack:///./node_modules/hash.js/lib/hash/sha/256.js","webpack:///./node_modules/hash.js/lib/hash/sha/512.js","webpack:///./node_modules/asn1.js/lib/asn1/base/buffer.js","webpack:///./node_modules/asn1.js/lib/asn1/constants/index.js","webpack:///./node_modules/asn1.js/lib/asn1/decoders/der.js","webpack:///./node_modules/asn1.js/lib/asn1/encoders/der.js","webpack:///./node_modules/public-encrypt/mgf.js","webpack:///./node_modules/public-encrypt/xor.js","webpack:///./node_modules/public-encrypt/withPublic.js","webpack:///./node_modules/xlsx-populate/lib/XmlParser.js","webpack:///./node_modules/xlsx-populate/lib/XmlBuilder.js","webpack:///./node_modules/encoding-japanese/src/utf8-to-jis-table.js","webpack:///./node_modules/encoding-japanese/src/utf8-to-jisx0212-table.js","webpack:///./node_modules/encoding-japanese/src/jis-to-utf8-table.js","webpack:///./node_modules/encoding-japanese/src/jisx0212-to-utf8-table.js","webpack:///./node_modules/encoding-japanese/src/encoding-convert.js","webpack:///./node_modules/encoding-japanese/src/kana-case-table.js","webpack:///./app/javascript/packs/price_calendar.js","webpack:///./app/javascript/packs/price_calendar_readonly.js","webpack:///./app/javascript/packs/optional_price.js","webpack:///./app/javascript/packs/use_report.js","webpack:///./node_modules/fullcalendar/dist/fullcalendar.js","webpack:///./node_modules/xlsx-populate/lib/XlsxPopulate.js","webpack:///./node_modules/dexie/dist/dexie.es.js","webpack:///./node_modules/moment/locale sync ^\\.\\/.*$","webpack:///./node_modules/jszip/lib/object.js","webpack:///./node_modules/base64-js/index.js","webpack:///./node_modules/ieee754/index.js","webpack:///./node_modules/readable-stream/lib/internal/streams/BufferList.js","webpack:///./node_modules/util-deprecate/browser.js","webpack:///./node_modules/readable-stream/lib/_stream_passthrough.js","webpack:///./node_modules/readable-stream/writable-browser.js","webpack:///./node_modules/readable-stream/duplex-browser.js","webpack:///./node_modules/readable-stream/transform.js","webpack:///./node_modules/readable-stream/passthrough.js","webpack:///./node_modules/set-immediate-shim/index.js","webpack:///./node_modules/lie/lib/browser.js","webpack:///./node_modules/immediate/lib/browser.js","webpack:///./node_modules/jszip/lib/stream/ConvertWorker.js","webpack:///./node_modules/jszip/lib/nodejs/NodejsStreamOutputAdapter.js","webpack:///./node_modules/jszip/lib/zipObject.js","webpack:///./node_modules/jszip/lib/generate/index.js","webpack:///./node_modules/jszip/lib/flate.js","webpack:///./node_modules/pako/index.js","webpack:///./node_modules/pako/lib/deflate.js","webpack:///./node_modules/pako/lib/zlib/deflate.js","webpack:///./node_modules/pako/lib/zlib/trees.js","webpack:///./node_modules/pako/lib/inflate.js","webpack:///./node_modules/pako/lib/zlib/inflate.js","webpack:///./node_modules/pako/lib/zlib/inffast.js","webpack:///./node_modules/pako/lib/zlib/inftrees.js","webpack:///./node_modules/pako/lib/zlib/gzheader.js","webpack:///./node_modules/jszip/lib/generate/ZipFileWorker.js","webpack:///./node_modules/jszip/lib/nodejs/NodejsStreamInputAdapter.js","webpack:///./node_modules/jszip/lib/load.js","webpack:///./node_modules/jszip/lib/zipEntries.js","webpack:///./node_modules/jszip/lib/reader/StringReader.js","webpack:///./node_modules/jszip/lib/reader/NodeBufferReader.js","webpack:///./node_modules/jszip/lib/zipEntry.js","webpack:///./node_modules/xlsx-populate/lib/Workbook.js","webpack:///./node_modules/xlsx-populate/lib/blank.js","webpack:///./node_modules/xlsx-populate/lib/Sheet.js","webpack:///./node_modules/xlsx-populate/lib/RichTextFragment.js","webpack:///./node_modules/xlsx-populate/lib/Row.js","webpack:///./node_modules/xlsx-populate/lib/Column.js","webpack:///./node_modules/xlsx-populate/lib/Range.js","webpack:///./node_modules/xlsx-populate/lib/PageBreaks.js","webpack:///./node_modules/xlsx-populate/lib/ContentTypes.js","webpack:///./node_modules/xlsx-populate/lib/AppProperties.js","webpack:///./node_modules/xlsx-populate/lib/CoreProperties.js","webpack:///./node_modules/xlsx-populate/lib/SharedStrings.js","webpack:///./node_modules/xlsx-populate/lib/StyleSheet.js","webpack:///./node_modules/xlsx-populate/lib/Encryptor.js","webpack:///./node_modules/cfb/cfb.js","webpack:///./node_modules/crypto-browserify/index.js","webpack:///./node_modules/sha.js/sha.js","webpack:///./node_modules/sha.js/sha1.js","webpack:///./node_modules/sha.js/sha224.js","webpack:///./node_modules/sha.js/sha384.js","webpack:///./node_modules/create-hmac/legacy.js","webpack:///./node_modules/browserify-sign/algos.js","webpack:///./node_modules/pbkdf2/lib/async.js","webpack:///./node_modules/browserify-cipher/browser.js","webpack:///./node_modules/browserify-des/index.js","webpack:///./node_modules/des.js/lib/des/utils.js","webpack:///./node_modules/des.js/lib/des/cipher.js","webpack:///./node_modules/des.js/lib/des/des.js","webpack:///./node_modules/des.js/lib/des/cbc.js","webpack:///./node_modules/des.js/lib/des/ede.js","webpack:///./node_modules/browserify-aes/encrypter.js","webpack:///./node_modules/browserify-aes/modes/ecb.js","webpack:///./node_modules/browserify-aes/modes/cbc.js","webpack:///./node_modules/browserify-aes/modes/cfb.js","webpack:///./node_modules/browserify-aes/modes/cfb8.js","webpack:///./node_modules/browserify-aes/modes/cfb1.js","webpack:///./node_modules/browserify-aes/modes/ofb.js","webpack:///./node_modules/browserify-aes/ghash.js","webpack:///./node_modules/browserify-aes/decrypter.js","webpack:///./node_modules/browserify-des/modes.js","webpack:///./node_modules/diffie-hellman/browser.js","webpack:///./node_modules/diffie-hellman/lib/dh.js","webpack:///./node_modules/browserify-sign/browser/index.js","webpack:///./node_modules/browserify-sign/browser/sign.js","webpack:///./node_modules/elliptic/lib/elliptic/curve/short.js","webpack:///./node_modules/elliptic/lib/elliptic/curve/mont.js","webpack:///./node_modules/elliptic/lib/elliptic/curve/edwards.js","webpack:///./node_modules/hash.js/lib/hash/sha.js","webpack:///./node_modules/hash.js/lib/hash/sha/1.js","webpack:///./node_modules/hash.js/lib/hash/sha/224.js","webpack:///./node_modules/hash.js/lib/hash/sha/384.js","webpack:///./node_modules/hash.js/lib/hash/ripemd.js","webpack:///./node_modules/hash.js/lib/hash/hmac.js","webpack:///./node_modules/elliptic/lib/elliptic/precomputed/secp256k1.js","webpack:///./node_modules/elliptic/lib/elliptic/ec/index.js","webpack:///./node_modules/hmac-drbg/lib/hmac-drbg.js","webpack:///./node_modules/elliptic/lib/elliptic/ec/key.js","webpack:///./node_modules/elliptic/lib/elliptic/ec/signature.js","webpack:///./node_modules/elliptic/lib/elliptic/eddsa/index.js","webpack:///./node_modules/elliptic/lib/elliptic/eddsa/key.js","webpack:///./node_modules/elliptic/lib/elliptic/eddsa/signature.js","webpack:///./node_modules/parse-asn1/asn1.js","webpack:///./node_modules/asn1.js/lib/asn1/api.js","webpack:///./node_modules/vm-browserify/index.js","webpack:///./node_modules/asn1.js/lib/asn1/base/reporter.js","webpack:///./node_modules/asn1.js/lib/asn1/base/node.js","webpack:///./node_modules/asn1.js/lib/asn1/constants/der.js","webpack:///./node_modules/asn1.js/lib/asn1/decoders/index.js","webpack:///./node_modules/asn1.js/lib/asn1/decoders/pem.js","webpack:///./node_modules/asn1.js/lib/asn1/encoders/index.js","webpack:///./node_modules/asn1.js/lib/asn1/encoders/pem.js","webpack:///./node_modules/parse-asn1/certificate.js","webpack:///./node_modules/parse-asn1/fixProc.js","webpack:///./node_modules/browserify-sign/browser/verify.js","webpack:///./node_modules/create-ecdh/browser.js","webpack:///./node_modules/public-encrypt/browser.js","webpack:///./node_modules/public-encrypt/publicEncrypt.js","webpack:///./node_modules/public-encrypt/privateDecrypt.js","webpack:///./node_modules/randomfill/browser.js","webpack:///./node_modules/sax/lib/sax.js","webpack:///./app/javascript/packs/header.js","webpack:///./app/javascript/packs/welcome.js","webpack:///./app/javascript/packs/user.js","webpack:///./app/javascript/packs/user_menu.js","webpack:///./app/javascript/packs/datetimepicker.js","webpack:///./app/javascript/packs/calendar_base_params.js","webpack:///./app/javascript/packs/closed_day_calendar.js","webpack:///./app/javascript/packs/price_common.js","webpack:///./app/javascript/packs/reservation_calendar.js","webpack:///./app/javascript/packs/preview_image.js","webpack:///./app/javascript/packs/mail_template.js","webpack:///./app/javascript/packs/excel.js","webpack:///./app/javascript/packs/slideshow.js","webpack:///./app/javascript/packs/slick.js","webpack:///./app/javascript/packs/reservation.js","webpack:///./app/javascript/packs/reservation_slot.js","webpack:///./app/javascript/packs/object_assign.js","webpack:///./app/javascript/packs/select2.js","webpack:///./app/javascript/packs/promise.js","webpack:///./app/javascript/packs/room.js","webpack:///./app/javascript/packs/fixture.js","webpack:///./app/javascript/packs/raffle_calendar.js","webpack:///./app/javascript/packs/common.js","webpack:///./app/javascript/packs/facility_room_select.js","webpack:///./app/javascript/packs/facility.js","webpack:///./app/javascript/packs/group.js","webpack:///./app/javascript/packs/requested_setting.js","webpack:///./app/javascript/packs/user_type_setting.js","webpack:///./app/javascript/packs/use_report_template.js","webpack:///./node_modules/@rails/activestorage/app/assets/javascripts/activestorage.js","webpack:///./node_modules/popper.js/dist/esm/popper.js","webpack:///./app/javascript/packs/application.js","webpack:///./node_modules/@rails/ujs/lib/assets/compiled/rails-ujs.js","webpack:///./node_modules/turbolinks/dist/turbolinks.js","webpack:///./app/javascript/channels/index.js","webpack:///./app/javascript/channels sync _channel\\.js$","webpack:///./node_modules/trix/dist/trix.js","webpack:///./node_modules/bootstrap4-datetimepicker/src/js/bootstrap-datetimepicker.js","webpack:///./node_modules/bootstrap/dist/js/bootstrap.js","webpack:///./node_modules/slick-carousel/slick/slick.js","webpack:///./node_modules/select2/dist/js/select2.js","webpack:///./node_modules/@rails/actiontext/app/javascript/actiontext/attachment_upload.js","webpack:///./node_modules/@rails/actiontext/app/javascript/actiontext/index.js"],"names":["installedModules","__webpack_require__","moduleId","exports","module","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","factory","_typeof","iterator","obj","constructor","hookCallback","some","hooks","apply","arguments","isArray","input","Array","toString","isObject","isUndefined","isNumber","isDate","Date","map","arr","fn","res","length","push","hasOwnProp","a","b","extend","valueOf","createUTC","format","locale","strict","createLocalOrUTC","utc","getParsingFlags","_pf","empty","unusedTokens","unusedInput","overflow","charsLeftOver","nullInput","invalidMonth","invalidFormat","userInvalidated","iso","parsedDateParts","meridiem","rfc2822","weekdayMismatch","isValid","_isValid","flags","parsedParts","isNowValid","isNaN","_d","getTime","invalidWeekday","_strict","undefined","bigHour","isFrozen","createInvalid","NaN","fun","this","len","momentProperties","copyConfig","to","from","prop","val","_isAMomentObject","_i","_f","_l","_tzm","_isUTC","_offset","_locale","updateInProgress","Moment","config","updateOffset","isMoment","absFloor","number","Math","ceil","floor","toInt","argumentForCoercion","coercedNumber","isFinite","compareArrays","array1","array2","dontConvert","min","lengthDiff","abs","diffs","warn","msg","suppressDeprecationWarnings","console","deprecate","firstTime","deprecationHandler","arg","args","slice","join","Error","stack","keys","deprecations","deprecateSimple","isFunction","Function","mergeConfigs","parentConfig","childConfig","Locale","set","aliases","addUnitAlias","unit","shorthand","lowerCase","toLowerCase","normalizeUnits","units","normalizeObjectUnits","inputObject","normalizedProp","normalizedInput","priorities","addUnitPriority","priority","zeroFill","targetLength","forceSign","absNumber","zerosToFill","pow","max","substr","formattingTokens","localFormattingTokens","formatFunctions","formatTokenFunctions","addFormatToken","token","padded","ordinal","callback","func","localeData","formatMoment","expandFormat","array","match","replace","mom","output","makeFormatFunction","invalidDate","replaceLongDateFormatTokens","longDateFormat","lastIndex","test","match1","match2","match3","match4","match6","match1to2","match3to4","match5to6","match1to3","match1to4","match1to6","matchUnsigned","matchSigned","matchOffset","matchShortOffset","matchWord","regexes","addRegexToken","regex","strictRegex","isStrict","getParseRegexForToken","RegExp","regexEscape","matched","p1","p2","p3","p4","tokens","addParseToken","addWeekParseToken","_w","addTimeToArrayFromToken","_a","YEAR","MONTH","DATE","HOUR","MINUTE","SECOND","MILLISECOND","WEEK","WEEKDAY","daysInYear","year","isLeapYear","y","parseTwoDigitYear","parseInt","indexOf","getSetYear","makeGetSet","keepTime","set$1","month","date","daysInMonth","x","modMonth","monthsShort","months","monthsShortRegex","monthsRegex","monthsParse","MONTHS_IN_FORMAT","defaultLocaleMonths","split","defaultLocaleMonthsShort","setMonth","dayOfMonth","getSetMonth","defaultMonthsShortRegex","defaultMonthsRegex","computeMonthsParse","cmpLenRev","shortPieces","longPieces","mixedPieces","sort","_monthsRegex","_monthsShortRegex","_monthsStrictRegex","_monthsShortStrictRegex","createUTCDate","UTC","getUTCFullYear","setUTCFullYear","firstWeekOffset","dow","doy","fwd","getUTCDay","dayOfYearFromWeeks","week","weekday","resYear","resDayOfYear","dayOfYear","weekOfYear","resWeek","weekOffset","weeksInYear","weekOffsetNext","shiftWeekdays","ws","concat","weekdaysMin","weekdaysShort","weekdays","weekdaysMinRegex","weekdaysShortRegex","weekdaysRegex","weekdaysParse","defaultLocaleWeekdays","defaultLocaleWeekdaysShort","defaultLocaleWeekdaysMin","defaultWeekdaysRegex","defaultWeekdaysShortRegex","defaultWeekdaysMinRegex","computeWeekdaysParse","minp","shortp","longp","minPieces","day","_weekdaysRegex","_weekdaysShortRegex","_weekdaysMinRegex","_weekdaysStrictRegex","_weekdaysShortStrictRegex","_weekdaysMinStrictRegex","hFormat","hours","lowercase","minutes","matchMeridiem","_meridiemParse","seconds","kInput","_isPm","isPM","_meridiem","pos","pos1","pos2","globalLocale","getSetHour","baseConfig","calendar","sameDay","nextDay","nextWeek","lastDay","lastWeek","sameElse","LTS","LT","L","LL","LLL","LLLL","dayOfMonthOrdinalParse","relativeTime","future","past","ss","mm","h","hh","dd","M","MM","yy","meridiemParse","locales","localeFamilies","normalizeLocale","loadLocale","oldLocale","_abbr","getSetGlobalLocale","e","values","data","getLocale","defineLocale","abbr","_config","parentLocale","forEach","names","j","next","chooseLocale","checkOverflow","_overflowDayOfYear","_overflowWeeks","_overflowWeekday","defaults","configFromArray","currentDate","expectedWeekday","yearToUse","nowValue","now","_useUTC","getUTCMonth","getUTCDate","getFullYear","getMonth","getDate","currentDateArray","w","weekYear","temp","weekdayOverflow","GG","W","E","createLocal","_week","curWeek","gg","_dayOfYear","dayOfYearFromWeekInfo","_nextDay","ms","setFullYear","getDay","setUTCMinutes","getUTCMinutes","extendedIsoRegex","basicIsoRegex","tzRegex","isoDates","isoTimes","aspNetJsonRegex","configFromISO","allowTime","dateFormat","timeFormat","tzFormat","string","exec","configFromStringAndFormat","untruncateYear","yearStr","obsOffsets","UT","GMT","EDT","EST","CDT","CST","MDT","MST","PDT","PST","configFromRFC2822","monthStr","dayStr","hourStr","minuteStr","secondStr","result","parsedArray","weekdayStr","parsedInput","checkWeekday","obsOffset","militaryOffset","numOffset","hm","calculateOffset","ISO_8601","RFC_2822","skipped","stringLength","totalParsedInputLength","hour","isPm","meridiemHour","meridiemFixWrap","prepareConfig","preparse","tempConfig","bestMoment","scoreToBeat","currentScore","score","configFromStringAndArray","createFromInputFallback","configFromString","minute","second","millisecond","configFromObject","configFromInput","isUTC","getOwnPropertyNames","k","isObjectEmpty","add","prototypeMin","other","prototypeMax","pickBy","moments","ordering","Duration","duration","years","quarters","quarter","weeks","isoWeek","days","milliseconds","unitHasDecimal","parseFloat","isDurationValid","_milliseconds","_days","_months","_data","_bubble","isDuration","absRound","round","offset","separator","utcOffset","sign","offsetFromString","chunkOffset","matcher","matches","parts","cloneWithOffset","model","diff","clone","setTime","local","getDateOffset","getTimezoneOffset","isUtc","aspNetRegex","isoRegex","createDuration","ret","diffRes","base","parseIso","isBefore","positiveMomentsDifference","inp","isAfter","createAdder","direction","period","tmp","addSubtract","isAdding","invalid","subtract","monthDiff","wholeMonthDiff","anchor","newLocaleData","defaultFormat","defaultFormatUtc","lang","MS_PER_SECOND","MS_PER_MINUTE","MS_PER_HOUR","MS_PER_400_YEARS","mod$1","dividend","divisor","localStartOfDate","utcStartOfDate","addWeekYearFormatToken","getSetWeekYearHelper","weeksTarget","dayOfYearData","isoWeekYear","_dayOfMonthOrdinalParse","_ordinalParse","_dayOfMonthOrdinalParseLenient","getSetDayOfMonth","getSetMinute","getSetSecond","parseMs","getSetMillisecond","proto","preParsePostFormat","time","formats","sod","startOf","calendarFormat","asFloat","that","zoneDelta","endOf","startOfDate","isoWeekday","inputString","postformat","withoutSuffix","humanize","fromNow","toNow","invalidAt","localInput","isBetween","inclusivity","localFrom","localTo","isSame","inputMs","isSameOrAfter","isSameOrBefore","parsingFlags","prioritized","unitsObj","u","getPrioritizedUnits","toArray","toObject","toDate","toISOString","keepOffset","inspect","zone","isLocal","prefix","suffix","toJSON","unix","creationData","isoWeeks","weekInfo","isoWeeksInYear","parseWeekday","parseIsoWeekday","keepLocalTime","keepMinutes","localAdjust","_changeInProgress","parseZone","tZone","hasAlignedHourOffset","isDST","isUtcOffset","zoneAbbr","zoneName","dates","isDSTShifted","_isDSTShifted","proto$1","get$1","index","field","setter","listMonthsImpl","out","listWeekdaysImpl","localeSorted","shift","_calendar","_longDateFormat","formatUpper","toUpperCase","_invalidDate","_ordinal","isFuture","_relativeTime","pastFuture","source","isFormat","_monthsShort","monthName","_monthsParseExact","ii","llc","toLocaleLowerCase","_monthsParse","_longMonthsParse","_shortMonthsParse","firstDayOfYear","firstDayOfWeek","_weekdays","_weekdaysMin","_weekdaysShort","weekdayName","_weekdaysParseExact","_weekdaysParse","_shortWeekdaysParse","_minWeekdaysParse","_fullWeekdaysParse","charAt","isLower","langData","mathAbs","addSubtract$1","absCeil","daysToMonths","monthsToDays","makeAs","alias","as","asMilliseconds","asSeconds","asMinutes","asHours","asDays","asWeeks","asMonths","asQuarters","asYears","makeGetter","thresholds","abs$1","toISOString$1","Y","D","toFixed","total","totalSign","ymSign","daysSign","hmsSign","proto$2","monthsFromDays","withSuffix","posNegDuration","relativeTime$1","toIsoString","version","updateLocale","tmpLocale","relativeTimeRounding","roundingFunction","relativeTimeThreshold","threshold","limit","myMoment","HTML5_FMT","DATETIME_LOCAL","DATETIME_LOCAL_SECONDS","DATETIME_LOCAL_MS","TIME","TIME_SECONDS","TIME_MS","global","document","window","noGlobal","getProto","getPrototypeOf","_slice","class2type","hasOwn","fnToString","ObjectFunctionString","support","nodeType","isWindow","preservedScriptAttributes","type","src","nonce","noModule","DOMEval","code","node","doc","script","createElement","text","getAttribute","setAttribute","head","appendChild","parentNode","removeChild","toType","jQuery","selector","context","init","rtrim","isArrayLike","jquery","num","pushStack","elems","merge","prevObject","each","elem","first","eq","last","end","splice","options","copy","copyIsArray","target","deep","isPlainObject","expando","random","isReady","error","noop","Ctor","isEmptyObject","globalEval","trim","makeArray","results","inArray","grep","invert","callbackExpect","guid","Sizzle","Expr","getText","isXML","tokenize","compile","select","outermostContext","sortInput","hasDuplicate","setDocument","docElem","documentIsHTML","rbuggyQSA","rbuggyMatches","contains","preferredDoc","dirruns","done","classCache","createCache","tokenCache","compilerCache","nonnativeSelectorCache","sortOrder","pop","push_native","list","booleans","whitespace","identifier","attributes","pseudos","rwhitespace","rcomma","rcombinators","rdescend","rpseudo","ridentifier","matchExpr","rhtml","rinputs","rheader","rnative","rquickExpr","rsibling","runescape","funescape","_","escaped","escapedWhitespace","high","String","fromCharCode","rcssescape","fcssescape","ch","asCodePoint","charCodeAt","unloadHandler","inDisabledFieldset","addCombinator","disabled","nodeName","dir","childNodes","els","seed","nid","groups","newSelector","newContext","ownerDocument","getElementById","id","getElementsByTagName","getElementsByClassName","qsa","toSelector","testContext","querySelectorAll","qsaError","removeAttribute","cache","cacheLength","markFunction","assert","el","addHandle","attrs","handler","attrHandle","siblingCheck","cur","sourceIndex","nextSibling","createInputPseudo","createButtonPseudo","createDisabledPseudo","isDisabled","createPositionalPseudo","argument","matchIndexes","namespace","namespaceURI","documentElement","hasCompare","subWindow","defaultView","top","addEventListener","attachEvent","className","createComment","getById","getElementsByName","filter","attrId","find","getAttributeNode","tag","innerHTML","matchesSelector","webkitMatchesSelector","mozMatchesSelector","oMatchesSelector","msMatchesSelector","disconnectedMatch","compareDocumentPosition","adown","bup","compare","sortDetached","aup","ap","bp","unshift","expr","elements","attr","specified","escape","sel","uniqueSort","duplicates","detectDuplicates","sortStable","textContent","firstChild","nodeValue","selectors","createPseudo","relative","preFilter","excess","unquoted","nodeNameSelector","pattern","operator","check","what","simple","forward","ofType","xml","uniqueCache","outerCache","nodeIndex","start","parent","useCache","lastChild","uniqueID","pseudo","setFilters","idx","unmatched","elemLang","hash","location","activeElement","hasFocus","href","tabIndex","checked","selected","selectedIndex","radio","checkbox","file","password","image","submit","reset","combinator","skip","checkNonElements","doneName","oldCache","newCache","elementMatcher","matchers","condense","newUnmatched","mapped","setMatcher","postFilter","postFinder","postSelector","preMap","postMap","preexisting","contexts","multipleContexts","matcherIn","matcherOut","matcherFromTokens","checkContext","leadingRelative","implicitRelative","matchContext","matchAnyContext","filters","parseOnly","soFar","preFilters","cached","setMatchers","elementMatchers","bySet","byElement","superMatcher","outermost","matchedCount","setMatched","contextBackup","dirrunsUnique","matcherFromGroupMatchers","compiled","defaultValue","unique","isXMLDoc","escapeSelector","_dir","until","truncate","is","_siblings","rneedsContext","needsContext","rsingleTag","winnow","qualifier","not","self","rootjQuery","root","parseHTML","ready","rparentsprev","guaranteedUnique","children","contents","prev","sibling","has","targets","closest","prevAll","addBack","parents","parentsUntil","nextAll","nextUntil","prevUntil","siblings","contentDocument","content","reverse","rnothtmlwhite","Identity","v","Thrower","ex","adoptValue","resolve","reject","noValue","method","promise","fail","then","Callbacks","flag","createOptions","firing","memory","_fired","_locked","queue","firingIndex","fire","once","stopOnFalse","remove","disable","lock","locked","fireWith","fired","Deferred","tuples","_state","_promise","state","always","deferred","pipe","fns","newDefer","tuple","returned","progress","notify","onFulfilled","onRejected","onProgress","maxDepth","depth","special","mightThrow","TypeError","notifyWith","resolveWith","process","exceptionHook","stackTrace","rejectWith","getStackHook","setTimeout","stateString","when","singleValue","remaining","resolveContexts","resolveValues","master","updateFunc","rerrorNames","message","readyException","readyList","completed","removeEventListener","readyWait","wait","readyState","doScroll","access","chainable","emptyGet","raw","bulk","rmsPrefix","rdashAlpha","fcamelCase","all","letter","camelCase","acceptData","owner","Data","uid","configurable","hasData","dataPriv","dataUser","rbrace","rmultiDash","dataAttr","JSON","parse","getData","removeData","_removeData","dequeue","startLength","_queueHooks","stop","clearQueue","count","defer","pnum","rcssNum","cssExpand","isAttached","composed","getRootNode","isHiddenWithinTree","style","display","css","swap","old","adjustCSS","valueParts","tween","adjusted","scale","maxIterations","currentValue","initial","cssNumber","initialInUnit","defaultDisplayMap","getDefaultDisplay","body","showHide","show","hide","toggle","rcheckableType","rtagName","rscriptType","wrapMap","option","thead","col","tr","td","_default","getAll","setGlobalEval","refElements","optgroup","tbody","tfoot","colgroup","caption","th","div","buildFragment","scripts","selection","ignored","wrap","attached","fragment","createDocumentFragment","nodes","htmlPrefilter","createTextNode","checkClone","cloneNode","noCloneChecked","rkeyEvent","rmouseEvent","rtypenamespace","returnTrue","returnFalse","expectSync","err","safeActiveElement","_on","types","one","origFn","event","off","leverageNative","notAsync","saved","isTrigger","delegateType","stopPropagation","stopImmediatePropagation","preventDefault","trigger","Event","handleObjIn","eventHandle","events","handleObj","handlers","namespaces","origType","elemData","handle","triggered","dispatch","bindType","delegateCount","setup","mappedTypes","origCount","teardown","removeEvent","nativeEvent","handlerQueue","fix","delegateTarget","preDispatch","isPropagationStopped","currentTarget","isImmediatePropagationStopped","rnamespace","postDispatch","_handlers","matchedHandlers","matchedSelectors","button","addProp","hook","originalEvent","writable","load","noBubble","click","beforeunload","returnValue","props","isDefaultPrevented","defaultPrevented","relatedTarget","timeStamp","isSimulated","altKey","bubbles","cancelable","changedTouches","ctrlKey","detail","eventPhase","metaKey","pageX","pageY","shiftKey","view","charCode","keyCode","buttons","clientX","clientY","offsetX","offsetY","pointerId","pointerType","screenX","screenY","targetTouches","toElement","touches","which","focus","blur","mouseenter","mouseleave","pointerenter","pointerleave","orig","related","on","rxhtmlTag","rnoInnerhtml","rchecked","rcleanScript","manipulationTarget","disableScript","restoreScript","cloneCopyEvent","dest","pdataOld","pdataCur","udataOld","udataCur","fixInput","domManip","collection","hasScripts","iNoClone","valueIsFunction","html","_evalUrl","_remove","keepData","cleanData","dataAndEvents","deepDataAndEvents","srcElements","destElements","inPage","detach","append","prepend","insertBefore","before","after","replaceWith","replaceChild","appendTo","prependTo","insertAfter","replaceAll","original","insert","rnumnonpx","getStyles","opener","getComputedStyle","rboxStyle","curCSS","computed","width","minWidth","maxWidth","getPropertyValue","pixelBoxStyles","addGetHookIf","conditionFn","hookFn","computeStyleTests","container","cssText","divStyle","pixelPositionVal","reliableMarginLeftVal","roundPixelMeasures","marginLeft","right","pixelBoxStylesVal","boxSizingReliableVal","position","scrollboxSizeVal","offsetWidth","measure","backgroundClip","clearCloneStyle","boxSizingReliable","pixelPosition","reliableMarginLeft","scrollboxSize","cssPrefixes","emptyStyle","vendorProps","finalPropName","_final","cssProps","capName","vendorPropName","rdisplayswap","rcustomProp","cssShow","visibility","cssNormalTransform","letterSpacing","fontWeight","setPositiveNumber","boxModelAdjustment","dimension","box","isBorderBox","styles","computedVal","extra","delta","getWidthOrHeight","valueIsBorderBox","offsetProp","getClientRects","Tween","easing","cssHooks","opacity","origName","isCustomProp","setProperty","getBoundingClientRect","scrollboxSizeBuggy","left","margin","padding","border","expand","expanded","propHooks","run","percent","eased","step","fx","scrollTop","scrollLeft","linear","swing","cos","PI","fxNow","inProgress","rfxtypes","rrun","schedule","hidden","requestAnimationFrame","interval","tick","createFxNow","genFx","includeWidth","height","createTween","animation","Animation","tweeners","properties","stopped","prefilters","currentTime","startTime","tweens","opts","specialEasing","originalProperties","originalOptions","gotoEnd","propFilter","complete","timer","anim","tweener","oldfire","propTween","restoreDisplay","isBox","dataShow","unqueued","overflowX","overflowY","prefilter","speed","opt","speeds","fadeTo","animate","optall","doAnimation","finish","stopQueue","timers","cssFn","slideDown","slideUp","slideToggle","fadeIn","fadeOut","fadeToggle","slow","fast","delay","timeout","clearTimeout","checkOn","optSelected","radioValue","boolHook","removeAttr","nType","attrHooks","bool","attrNames","lowercaseName","rfocusable","rclickable","stripAndCollapse","getClass","classesToArray","removeProp","propFix","tabindex","addClass","classes","curValue","clazz","finalValue","removeClass","toggleClass","stateVal","isValidValue","classNames","hasClass","rreturn","valHooks","optionSet","focusin","rfocusMorph","stopPropagationCallback","onlyHandlers","bubbleType","ontype","lastElement","eventPath","parentWindow","simulate","triggerHandler","attaches","rquery","parseXML","DOMParser","parseFromString","rbracket","rCRLF","rsubmitterTypes","rsubmittable","buildParams","traditional","param","valueOrFunction","encodeURIComponent","serialize","serializeArray","r20","rhash","rantiCache","rheaders","rnoContent","rprotocol","transports","allTypes","originAnchor","addToPrefiltersOrTransports","structure","dataTypeExpression","dataType","dataTypes","inspectPrefiltersOrTransports","jqXHR","inspected","seekingTransport","prefilterOrFactory","dataTypeOrTransport","ajaxExtend","flatOptions","ajaxSettings","active","lastModified","etag","url","protocol","processData","async","contentType","accepts","json","responseFields","converters","ajaxSetup","settings","ajaxPrefilter","ajaxTransport","ajax","transport","cacheURL","responseHeadersString","responseHeaders","timeoutTimer","urlAnchor","fireGlobals","uncached","callbackContext","globalEventContext","completeDeferred","_statusCode","statusCode","requestHeaders","requestHeadersNames","strAbort","getResponseHeader","getAllResponseHeaders","setRequestHeader","overrideMimeType","mimeType","status","abort","statusText","finalText","crossDomain","host","hasContent","ifModified","headers","beforeSend","success","send","nativeStatusText","responses","isSuccess","response","modified","ct","finalDataType","firstDataType","ajaxHandleResponses","conv2","current","conv","dataFilter","ajaxConvert","getJSON","getScript","wrapAll","firstElementChild","wrapInner","htmlIsFunction","unwrap","visible","offsetHeight","xhr","XMLHttpRequest","xhrSuccessStatus","0","1223","xhrSupported","cors","_callback","errorCallback","open","username","xhrFields","onload","onerror","onabort","ontimeout","onreadystatechange","responseType","responseText","binary","_callback2","scriptAttrs","charset","scriptCharset","evt","oldCallbacks","rjsonp","jsonp","jsonpCallback","originalSettings","callbackName","overwritten","responseContainer","jsonProp","createHTMLDocument","implementation","keepScripts","parsed","params","animated","setOffset","curPosition","curLeft","curCSSTop","curTop","curOffset","curCSSLeft","curElem","using","rect","win","pageYOffset","pageXOffset","offsetParent","parentOffset","scrollTo","Height","Width","defaultExtra","funcName","hover","fnOver","fnOut","unbind","delegate","undelegate","proxy","holdReady","hold","parseJSON","isNumeric","_jQuery","_$","$","noConflict","ctor","superCtor","super_","TempCtor","webpackPolyfill","paths","buffer","Buffer","copyProps","dst","SafeBuffer","encodingOrOffset","alloc","allocUnsafe","allocUnsafeSlow","size","fill","encoding","buf","SlowBuffer","base64","ieee754","kMaxLength","TYPED_ARRAY_SUPPORT","createBuffer","RangeError","Uint8Array","__proto__","ArrayBuffer","byteOffset","byteLength","fromArrayLike","fromArrayBuffer","isEncoding","actual","write","fromString","isBuffer","fromObject","assertSize","isView","loweredCase","utf8ToBytes","base64ToBytes","slowToString","hexSlice","utf8Slice","asciiSlice","latin1Slice","base64Slice","utf16leSlice","bidirectionalIndexOf","arrayIndexOf","lastIndexOf","indexSize","arrLength","valLength","read","readUInt16BE","foundIndex","found","hexWrite","Number","strLen","utf8Write","blitBuffer","asciiWrite","str","byteArray","asciiToBytes","latin1Write","base64Write","ucs2Write","hi","lo","utf16leToBytes","fromByteArray","secondByte","thirdByte","fourthByte","tempCodePoint","firstByte","codePoint","bytesPerSequence","codePoints","MAX_ARGUMENTS_LENGTH","decodeCodePointsArray","INSPECT_MAX_BYTES","foo","subarray","typedArraySupport","poolSize","_augment","species","_isBuffer","swap16","swap32","swap64","equals","thisStart","thisEnd","thisCopy","targetCopy","includes","_arr","toHex","bytes","checkOffset","ext","checkInt","objectWriteUInt16","littleEndian","objectWriteUInt32","checkIEEE754","writeFloat","noAssert","writeDouble","newBuf","sliceLen","readUIntLE","mul","readUIntBE","readUInt8","readUInt16LE","readUInt32LE","readUInt32BE","readIntLE","readIntBE","readInt8","readInt16LE","readInt16BE","readInt32LE","readInt32BE","readFloatLE","readFloatBE","readDoubleLE","readDoubleBE","writeUIntLE","writeUIntBE","writeUInt8","writeUInt16LE","writeUInt16BE","writeUInt32LE","writeUInt32BE","writeIntLE","sub","writeIntBE","writeInt8","writeInt16LE","writeInt16BE","writeInt32LE","writeInt32BE","writeFloatLE","writeFloatBE","writeDoubleLE","writeDoubleBE","targetStart","INVALID_BASE64_RE","Infinity","leadSurrogate","toByteArray","stringtrim","base64clean","nodejsUtils","setImmediate","external","identity","stringToArrayLike","newBlob","part","checkSupport","Blob","builder","BlobBuilder","WebKitBlobBuilder","MozBlobBuilder","MSBlobBuilder","getBlob","arrayToStringHelper","stringifyByChunk","chunk","stringifyByChar","resultStr","applyCanBeUsed","uint8array","nodebuffer","allocBuffer","arrayLikeToString","getTypeOf","canUseApply","arrayLikeToArrayLike","arrayFrom","arrayTo","applyFromCharCode","transform","newBufferFrom","transformTo","outputType","inputType","arraybuffer","MAX_VALUE_16BITS","MAX_VALUE_32BITS","pretty","inherits","Obj","prepareContent","inputData","isBinary","isOptimizedBinaryString","isBase64","Promise","blob","FileReader","reader","readAsArrayBuffer","decode","BN","endian","isBN","negative","words","red","_init","wordSize","parseHex","parseBase","cmp","_initNumber","_initArray","_parseHex","_parseBase","strip","limbLen","limbPow","mod","word","imuln","_iaddn","_expand","_normSign","zeros","groupSizes","groupBases","smallMulTo","carry","ncarry","rword","maxJ","groupSize","groupBase","isZero","modn","idivn","toNumber","toBuffer","toArrayLike","ArrayType","reqLength","q","andln","iushrn","clz32","_countBits","_zeroBits","bitLength","zeroBits","toTwos","inotn","iaddn","fromTwos","testn","notn","ineg","isNeg","neg","iuor","ior","or","uor","iuand","iand","and","uand","iuxor","ixor","xor","uxor","bytesNeeded","bitsLeft","setn","bit","wbit","iadd","isub","comb10MulTo","mid","a0","al0","ah0","a1","al1","ah1","a2","al2","ah2","a3","al3","ah3","a4","al4","ah4","a5","al5","ah5","a6","al6","ah6","a7","al7","ah7","a8","al8","ah8","a9","al9","ah9","b0","bl0","bh0","b1","bl1","bh1","b2","bl2","bh2","b3","bl3","bh3","b4","bl4","bh4","b5","bl5","bh5","b6","bl6","bh6","b7","bl7","bh7","b8","bl8","bh8","b9","bl9","bh9","w0","imul","w1","w2","w3","w4","w5","w6","w7","w8","w9","w10","w11","w12","w13","w14","w15","w16","w17","w18","jumboMulTo","FFTM","mulp","mulTo","hncarry","bigMulTo","makeRBT","N","revBin","rb","permute","rbt","rws","iws","rtws","itws","rtwdf","itwdf","sin","rtwdf_","itwdf_","re","ie","ro","io","rx","guessLen13b","odd","conjugate","normalize13b","convert13b","stub","ph","rwst","iwst","nrws","nrwst","niwst","rmws","mulf","muln","sqr","isqr","toBitArray","iushln","bits","carryMask","newCarry","ishln","hint","extended","mask","maskedWords","ishrn","shln","ushln","shrn","ushrn","imaskn","maskn","isubn","addn","subn","iabs","_ishlnsubmul","_wordDiv","bhi","qj","divmod","positive","divn","umod","divRound","dm","half","r2","acc","egcd","A","B","C","g","isEven","yp","xp","im","isOdd","jm","gcd","_invmp","x1","x2","cmpn","invm","bincn","ucmp","gtn","gt","gten","gte","ltn","lt","lten","lte","eqn","Red","toRed","ctx","convertTo","_forceRed","fromRed","convertFrom","forceRed","redAdd","redIAdd","redSub","redISub","redShl","shl","redMul","_verify2","redIMul","redSqr","_verify1","redISqr","redSqrt","sqrt","redInvm","redNeg","redPow","primes","k256","p224","p192","p25519","MPrime","_tmp","K256","P224","P192","P25519","prime","_prime","Mont","imod","rinv","minv","ireduce","rlen","imulK","outLen","mod3","nOne","lpow","z","inv","wnd","currentLen","mont","LARGE_ARRAY_SIZE","CORE_ERROR_TEXT","FUNC_ERROR_TEXT","HASH_UNDEFINED","MAX_MEMOIZE_SIZE","PLACEHOLDER","CLONE_DEEP_FLAG","CLONE_FLAT_FLAG","CLONE_SYMBOLS_FLAG","COMPARE_PARTIAL_FLAG","COMPARE_UNORDERED_FLAG","WRAP_BIND_FLAG","WRAP_BIND_KEY_FLAG","WRAP_CURRY_BOUND_FLAG","WRAP_CURRY_FLAG","WRAP_CURRY_RIGHT_FLAG","WRAP_PARTIAL_FLAG","WRAP_PARTIAL_RIGHT_FLAG","WRAP_ARY_FLAG","WRAP_REARG_FLAG","WRAP_FLIP_FLAG","DEFAULT_TRUNC_LENGTH","DEFAULT_TRUNC_OMISSION","HOT_COUNT","HOT_SPAN","LAZY_FILTER_FLAG","LAZY_MAP_FLAG","INFINITY","MAX_SAFE_INTEGER","MAX_INTEGER","NAN","MAX_ARRAY_LENGTH","MAX_ARRAY_INDEX","HALF_MAX_ARRAY_LENGTH","wrapFlags","argsTag","arrayTag","asyncTag","boolTag","dateTag","domExcTag","errorTag","funcTag","genTag","mapTag","numberTag","nullTag","objectTag","proxyTag","regexpTag","setTag","stringTag","symbolTag","undefinedTag","weakMapTag","weakSetTag","arrayBufferTag","dataViewTag","float32Tag","float64Tag","int8Tag","int16Tag","int32Tag","uint8Tag","uint8ClampedTag","uint16Tag","uint32Tag","reEmptyStringLeading","reEmptyStringMiddle","reEmptyStringTrailing","reEscapedHtml","reUnescapedHtml","reHasEscapedHtml","reHasUnescapedHtml","reEscape","reEvaluate","reInterpolate","reIsDeepProp","reIsPlainProp","rePropName","reRegExpChar","reHasRegExpChar","reTrim","reTrimStart","reTrimEnd","reWrapComment","reWrapDetails","reSplitDetails","reAsciiWord","reEscapeChar","reEsTemplate","reFlags","reIsBadHex","reIsBinary","reIsHostCtor","reIsOctal","reIsUint","reLatin","reNoMatch","reUnescapedString","rsComboRange","rsComboMarksRange","rsBreakRange","rsMathOpRange","rsAstral","rsBreak","rsCombo","rsDigits","rsDingbat","rsLower","rsMisc","rsFitz","rsNonAstral","rsRegional","rsSurrPair","rsUpper","rsMiscLower","rsMiscUpper","reOptMod","rsSeq","rsEmoji","rsSymbol","reApos","reComboMark","reUnicode","reUnicodeWord","reHasUnicode","reHasUnicodeWord","contextProps","templateCounter","typedArrayTags","cloneableTags","stringEscapes","freeParseFloat","freeParseInt","freeGlobal","freeSelf","freeExports","freeModule","moduleExports","freeProcess","nodeUtil","require","binding","nodeIsArrayBuffer","isArrayBuffer","nodeIsDate","nodeIsMap","isMap","nodeIsRegExp","isRegExp","nodeIsSet","isSet","nodeIsTypedArray","isTypedArray","thisArg","arrayAggregator","iteratee","accumulator","arrayEach","arrayEachRight","arrayEvery","predicate","arrayFilter","resIndex","arrayIncludes","baseIndexOf","arrayIncludesWith","comparator","arrayMap","arrayPush","arrayReduce","initAccum","arrayReduceRight","arraySome","asciiSize","baseProperty","baseFindKey","eachFunc","baseFindIndex","fromIndex","fromRight","strictIndexOf","baseIsNaN","baseIndexOfWith","baseMean","baseSum","basePropertyOf","baseReduce","baseTimes","baseUnary","baseValues","cacheHas","charsStartIndex","strSymbols","chrSymbols","charsEndIndex","deburrLetter","escapeHtmlChar","escapeStringChar","chr","hasUnicode","mapToArray","overArg","replaceHolders","placeholder","setToArray","setToPairs","stringSize","unicodeSize","stringToArray","unicodeToArray","asciiToArray","unescapeHtmlChar","runInContext","pick","arrayProto","funcProto","objectProto","coreJsData","funcToString","idCounter","maskSrcKey","IE_PROTO","nativeObjectToString","objectCtorString","oldDash","reIsNative","_Symbol","getPrototype","objectCreate","propertyIsEnumerable","spreadableSymbol","isConcatSpreadable","symIterator","symToStringTag","getNative","ctxClearTimeout","ctxNow","ctxSetTimeout","nativeCeil","nativeFloor","nativeGetSymbols","getOwnPropertySymbols","nativeIsBuffer","nativeIsFinite","nativeJoin","nativeKeys","nativeMax","nativeMin","nativeNow","nativeParseInt","nativeRandom","nativeReverse","DataView","Map","Set","WeakMap","nativeCreate","metaMap","realNames","dataViewCtorString","toSource","mapCtorString","promiseCtorString","setCtorString","weakMapCtorString","symbolProto","symbolValueOf","symbolToString","lodash","isObjectLike","LazyWrapper","LodashWrapper","wrapperClone","baseCreate","baseLodash","chainAll","__wrapped__","__actions__","__chain__","__index__","__values__","__dir__","__filtered__","__iteratees__","__takeCount__","__views__","Hash","entries","clear","entry","ListCache","MapCache","SetCache","__data__","Stack","arrayLikeKeys","inherited","isArr","isArg","isArguments","isBuff","isType","skipIndexes","isIndex","arraySample","baseRandom","arraySampleSize","shuffleSelf","copyArray","baseClamp","arrayShuffle","assignMergeValue","baseAssignValue","assignValue","objValue","assocIndexOf","baseAggregator","baseEach","baseAssign","copyObject","baseAt","lower","upper","baseClone","bitmask","customizer","isDeep","isFlat","isFull","initCloneArray","getTag","isFunc","cloneBuffer","initCloneObject","getSymbolsIn","copySymbolsIn","keysIn","baseAssignIn","getSymbols","copySymbols","cloneArrayBuffer","dataView","cloneDataView","cloneTypedArray","regexp","cloneRegExp","symbol","initCloneByTag","stacked","subValue","getAllKeysIn","getAllKeys","baseConformsTo","baseDelay","baseDifference","isCommon","valuesLength","outer","valuesIndex","templateSettings","getMapData","pairs","createBaseEach","baseForOwn","baseEachRight","baseForOwnRight","baseEvery","baseExtremum","isSymbol","baseFilter","baseFlatten","isFlattenable","baseFor","createBaseFor","baseForRight","baseFunctions","baseGet","path","castPath","toKey","baseGetAllKeys","keysFunc","symbolsFunc","baseGetTag","isOwn","unmasked","getRawTag","objectToString","baseGt","baseHas","baseHasIn","baseIntersection","arrays","othLength","othIndex","caches","maxLength","seen","baseInvoke","baseIsArguments","baseIsEqual","equalFunc","objIsArr","othIsArr","objTag","othTag","objIsObj","othIsObj","isSameTag","equalArrays","convert","isPartial","equalByTag","objIsWrapped","othIsWrapped","objUnwrapped","othUnwrapped","objProps","objLength","skipCtor","othValue","compared","objCtor","othCtor","equalObjects","baseIsEqualDeep","baseIsMatch","matchData","noCustomizer","srcValue","baseIsNative","baseIteratee","baseMatchesProperty","baseMatches","baseKeys","isPrototype","baseKeysIn","nativeKeysIn","isProto","baseLt","baseMap","getMatchData","matchesStrictComparable","isKey","isStrictComparable","hasIn","baseMerge","srcIndex","mergeFunc","safeGet","newValue","isTyped","isArrayLikeObject","toPlainObject","baseMergeDeep","baseNth","baseOrderBy","iteratees","orders","getIteratee","comparer","baseSortBy","objCriteria","criteria","othCriteria","ordersLength","compareAscending","order","compareMultiple","basePickBy","baseSet","basePullAll","basePullAt","indexes","previous","baseUnset","baseRepeat","baseRest","setToString","overRest","baseSample","baseSampleSize","nested","baseSetData","baseSetToString","constant","baseShuffle","baseSlice","baseSome","baseSortedIndex","retHighest","low","baseSortedIndexBy","valIsNaN","valIsNull","valIsSymbol","valIsUndefined","othIsDefined","othIsNull","othIsReflexive","othIsSymbol","setLow","baseSortedUniq","baseToNumber","baseToString","baseUniq","createSet","seenIndex","baseUpdate","updater","baseWhile","isDrop","baseWrapperValue","actions","action","baseXor","baseZipObject","assignFunc","valsLength","castArrayLikeObject","castFunction","stringToPath","castRest","castSlice","arrayBuffer","typedArray","valIsDefined","valIsReflexive","composeArgs","partials","holders","isCurried","argsIndex","argsLength","holdersLength","leftIndex","leftLength","rangeLength","isUncurried","composeArgsRight","holdersIndex","rightIndex","rightLength","isNew","createAggregator","initializer","createAssigner","assigner","sources","guard","isIterateeCall","iterable","createCaseFirst","methodName","trailing","createCompounder","deburr","createCtor","thisBinding","createFind","findIndexFunc","createFlow","flatRest","funcs","prereq","thru","wrapper","getFuncName","isLaziable","plant","createHybrid","partialsRight","holdersRight","argPos","ary","arity","isAry","isBind","isBindKey","isFlip","getHolder","holdersCount","countHolders","newHolders","createRecurry","oldArray","reorder","createInverter","toIteratee","baseInverter","createMathOperation","createOver","arrayFunc","createPadding","chars","charsLength","createRange","toFinite","baseRange","createRelationalOperation","wrapFunc","isCurry","newData","setData","setWrapToString","createRound","precision","toInteger","pair","createToPairs","baseToPairs","createWrap","srcBitmask","newBitmask","isCombo","mergeData","createCurry","createPartial","createBind","customDefaultsAssignIn","customDefaultsMerge","customOmitClone","arrValue","flatten","otherFunc","isKeyable","getValue","stubArray","hasPath","hasFunc","isLength","ctorString","isMaskable","stubFalse","otherArgs","shortOut","reference","details","insertWrapDetails","updateWrapDetails","getWrapDetails","lastCalled","stamp","rand","memoize","memoizeCapped","quote","subString","difference","differenceBy","differenceWith","findIndex","findLastIndex","intersection","intersectionBy","intersectionWith","pull","pullAll","pullAt","union","unionBy","unionWith","unzip","group","unzipWith","without","xorBy","xorWith","zip","zipWith","chain","interceptor","wrapperAt","countBy","findLast","forEachRight","groupBy","invokeMap","keyBy","partition","sortBy","bindKey","debounce","lastArgs","lastThis","maxWait","timerId","lastCallTime","lastInvokeTime","leading","maxing","invokeFunc","shouldInvoke","timeSinceLastCall","timerExpired","trailingEdge","timeWaiting","remainingWait","debounced","isInvoking","leadingEdge","cancel","flush","resolver","memoized","Cache","negate","overArgs","transforms","funcsLength","partial","partialRight","rearg","isError","isInteger","isString","iteratorToArray","remainder","toLength","assign","assignIn","assignInWith","assignWith","at","propsIndex","propsLength","defaultsDeep","mergeWith","invertBy","invoke","omit","basePick","toPairs","toPairsIn","capitalize","upperFirst","kebabCase","lowerFirst","snakeCase","startCase","upperCase","hasUnicodeWord","unicodeWords","asciiWords","attempt","bindAll","methodNames","flow","flowRight","methodOf","mixin","over","overEvery","overSome","basePropertyDeep","range","rangeRight","augend","addend","divide","multiply","multiplier","multiplicand","minuend","subtrahend","castArray","compact","cond","conforms","baseConforms","curry","curryRight","drop","dropRight","dropRightWhile","dropWhile","baseFill","flatMap","flatMapDeep","flatMapDepth","flattenDeep","flattenDepth","flip","fromPairs","functions","functionsIn","mapKeys","mapValues","matchesProperty","nthArg","omitBy","orderBy","propertyOf","pullAllBy","pullAllWith","rest","sampleSize","setWith","shuffle","sortedUniq","sortedUniqBy","spread","tail","take","takeRight","takeRightWhile","takeWhile","tap","throttle","toPath","isArrLike","unary","uniq","uniqBy","uniqWith","unset","update","updateWith","valuesIn","zipObject","zipObjectDeep","entriesIn","extendWith","clamp","cloneDeep","cloneDeepWith","cloneWith","conformsTo","defaultTo","endsWith","escapeRegExp","every","findKey","findLastKey","forIn","forInRight","forOwn","forOwnRight","inRange","baseInRange","isBoolean","isElement","isEmpty","isEqual","isEqualWith","isMatch","isMatchWith","isNative","isNil","isNull","isSafeInteger","isWeakMap","isWeakSet","strictLastIndexOf","maxBy","mean","meanBy","minBy","stubObject","stubString","stubTrue","nth","pad","strLength","padEnd","padStart","radix","floating","reduce","reduceRight","repeat","sample","sortedIndex","sortedIndexBy","sortedIndexOf","sortedLastIndex","sortedLastIndexBy","sortedLastIndexOf","startsWith","sum","sumBy","template","isEscaping","isEvaluating","imports","importsKeys","importsValues","interpolate","reDelimiters","evaluate","sourceURL","escapeValue","interpolateValue","esTemplateValue","evaluateValue","variable","times","toLower","toSafeInteger","toUpper","trimEnd","trimStart","omission","search","substring","newEnd","unescape","uniqueId","eachRight","VERSION","isFilter","takeName","dropName","checkIteratee","isTaker","lodashFunc","retUnwrapped","isLazy","useLazy","isHybrid","isUnwrapped","onlyLazy","chainName","isRight","getView","iterLength","takeCount","iterIndex","commit","wrapped","GenericWorker","streamInfo","generatedError","extraStreamInfo","isPaused","isFinished","isLocked","_listeners","emit","cleanUp","listener","registerPrevious","mergeStreamInfo","processChunk","pause","resume","withError","withStreamInfo","me","equal","utils","minAssert","minUtils","zero2","encode","getNAF","naf","getJSF","k1","k2","jsf","d1","d2","u1","u2","m8","m14","m24","cachedProperty","computer","parseBytes","intFromLE","cachedSetTimeout","cachedClearTimeout","defaultSetTimout","defaultClearTimeout","runTimeout","currentQueue","draining","queueIndex","cleanUpNextTick","drainQueue","marker","runClearTimeout","Item","nextTick","title","browser","env","argv","versions","addListener","removeListener","removeAllListeners","prependListener","prependOnceListener","listeners","cwd","chdir","umask","isSurrogatePair","htonl","zero8","enc","toHex32","join32","split32","rotr32","rotl32","sum32","sum32_3","sum32_4","sum32_5","sum64","ah","al","bh","sum64_hi","bl","sum64_lo","sum64_4_hi","cl","dh","dl","sum64_4_lo","sum64_5_hi","eh","sum64_5_lo","rotr64_hi","rotr64_lo","shr64_hi","shr64_lo","_defineProperties","descriptor","ArgHandler","instance","Constructor","_classCallCheck","_name","_cases","protoProps","staticProps","_argsMatchTypes","nodestream","Readable","TYPED_OK","Uint16Array","Int32Array","_has","shrinkBuf","fnTyped","arraySet","src_offs","dest_offs","flattenChunks","chunks","fnUntyped","setTyped","Buf8","Buf16","Buf32","child","appendChildIfNotFound","findChild","getChildAttribute","attribute","hasChild","insertInOrder","nodeOrder","childIndex","setAttributes","setChildAttributes","_this","removeChildIfEmpty","Transform","StringDecoder","CipherBase","hashMode","_finalOrDigest","__final","_decoder","_encoding","inputEnc","outputEnc","outData","_update","_toString","setAutoPadding","getAuthTag","setAuthTag","setAAD","_transform","_flush","fin","pna","objectKeys","Duplex","util","Writable","readable","allowHalfOpen","onend","_writableState","ended","onEndNT","highWaterMark","_readableState","destroyed","_destroy","cb","_utf8len","Utf8DecodeWorker","leftOver","Utf8EncodeWorker","utf8encode","c2","m_pos","str_len","buf_len","string2buf","utf8decode","c_len","utf16buf","buf2string","previousData","nextBoundary","utf8border","usableData","meta","ADDRESS_REGEX","columnNameToNumber","columnNumberToName","modulo","fromAddress","address","ref","sheetName","startColumnAnchored","startColumnName","startColumnNumber","startRowAnchored","startRowNumber","endColumnAnchored","endColumnName","endColumnNumber","endRowAnchored","endRowNumber","columnAnchored","columnName","columnNumber","rowAnchored","rowNumber","toAddress","MAX_BYTES","MAX_UINT32","crypto","msCrypto","getRandomValues","generated","blockSize","finalSize","_block","_finalSize","_blockSize","_len","block","accum","assigned","digest","rem","lowBits","highBits","_hash","Stream","EE","EventEmitter","PassThrough","ondata","ondrain","_isStdio","onclose","didOnEnd","destroy","er","cleanup","listenerCount","isNullOrUndefined","isPrimitive","ES6Promise","MD5","RIPEMD160","sha","Base","alg","BlockHash","pending","pendingTotal","outSize","hmacStrength","padLength","_delta8","_delta32","_pad","_digest","asn1","bignum","define","constants","decoders","encoders","Reporter","DecoderBuffer","EncoderBuffer","Node","EncodingTable","UNKNOWN_CHARACTER","HAS_TYPED","CAN_CHARCODE_APPLY","CAN_CHARCODE_APPLY_TYPED","APPLY_BUFFER_SIZE","APPLY_BUFFER_SIZE_OK","EncodingNames","UTF32","UTF32BE","UTF32LE","UTF16","UTF16BE","UTF16LE","BINARY","ASCII","JIS","UTF8","EUCJP","SJIS","UNICODE","EncodingAliases","EncodingOrders","getKeys","init_JIS_TO_UTF8_TABLE","JIS_TO_UTF8_TABLE","UTF8_TO_JIS_TABLE","JISX0212_TO_UTF8_TABLE","UTF8_TO_JISX0212_TABLE","assignEncodingName","encodingLen","expect","aliasNames","hit","codeToString_fast","codeToString_chunked","codeToString_slow","stringToBuffer","stringToCode","codeToBuffer","bufferToCode","base64EncodeChars","base64DecodeChars","base64EncodePadding","base64encode","c1","c3","base64decode","c4","Timeout","clearFn","_id","_clearFn","scope","setInterval","clearInterval","close","unref","enroll","item","msecs","_idleTimeoutId","_idleTimeout","unenroll","_unrefActive","_onTimeout","clearImmediate","JSZip","arg1","arg2","arg3","nb","nenc","retried","_normalizeEncoding","normalizeEncoding","utf16Text","utf16End","fillLast","utf8FillLast","base64Text","base64End","simpleWrite","simpleEnd","lastNeed","lastTotal","lastChar","utf8CheckByte","_byte","utf8CheckExtraBytes","utf8CheckIncomplete","isNode","isStream","asUInt32Array","scrubVec","cryptBlock","keySchedule","SUB_MIX","SBOX","nRounds","t0","t1","t2","t3","SUB_MIX0","SUB_MIX1","SUB_MIX2","SUB_MIX3","s0","s1","s2","s3","ksRow","RCON","G","INV_SBOX","INV_SUB_MIX","xi","sx","x4","x8","AES","_key","_reset","keySize","keyWords","ksRows","invKeySchedule","ik","ksR","tt","_nRounds","_keySchedule","_invKeySchedule","encryptBlockRaw","encryptBlock","decryptBlock","m1","scrub","salt","keyBits","ivLen","keyLen","iv","used","keyStart","ivStart","BaseCurve","conf","zero","two","pointFromJSON","gRed","_wnafT1","_wnafT2","_wnafT3","_wnafT4","adjustCount","redN","_maxwellTrick","BasePoint","curve","precomputed","point","validate","_fixedNafMul","doubles","_getDoubles","I","repr","nafW","jpoint","mixedAdd","points","toP","_wnafMul","nafPoints","_getNAFPoints","dblp","_wnafMulAdd","defW","coeffs","jacobianResult","wndWidth","comb","toJ","ja","jb","decodePoint","pointFromX","encodeCompressed","_encode","getX","getY","precompute","power","beta","_getBeta","_hasDoubles","dbl","aesid","fixProc","ciphers","compat","parseKeys","passphrase","subtype","ndata","stripped","certificate","tbsCertificate","subjectPublicKeyInfo","PublicKey","algorithm","RSAPublicKey","subjectPublicKey","subjectPrivateKey","pub_key","DSAparam","decrypt","kde","kdeparams","iters","algo","cipher","cipherText","keylen","pbkdf2Sync","createDecipheriv","EncryptedPrivateKey","PrivateKey","RSAPrivateKey","privateKey","ECPrivateKey","priv_key","DSAPrivateKey","parameters","signature","isBINARY","isASCII","isJIS","esc1","esc2","isEUCJP","isSJIS","isUTF8","isUTF16","isUTF16BE","isUTF16LE","isUTF32","isUNICODE","ReflectOwnKeys","R","Reflect","ReflectApply","receiver","ownKeys","NumberIsNaN","_events","_eventsCount","_maxListeners","defaultMaxListeners","$getMaxListeners","_addListener","existing","warning","newListener","warned","emitter","_onceWrap","wrapFn","evlistener","unwrapListeners","arrayClone","setMaxListeners","getMaxListeners","doError","originalListener","spliceOne","rawListeners","eventNames","CorkedRequest","corkReq","pendingcb","corkedRequestsFree","onCorkedFinish","asyncWrite","WritableState","internalUtil","OurUint8Array","realHasInstance","destroyImpl","nop","stream","isDuplex","objectMode","writableObjectMode","hwm","writableHwm","writableHighWaterMark","defaultHwm","finalCalled","needDrain","ending","finished","noDecode","decodeStrings","defaultEncoding","writing","corked","sync","bufferProcessing","onwrite","writecb","writelen","onwriteStateUpdate","finishMaybe","errorEmitted","onwriteError","needFinish","bufferedRequest","clearBuffer","afterWrite","lastBufferedRequest","prefinished","bufferedRequestCount","_write","writev","_writev","doWrite","onwriteDrain","holder","allBuffers","isBuf","callFinal","need","prefinish","getBuffer","hasInstance","_uint8ArrayToBuffer","writeAfterEnd","valid","validChunk","newChunk","decodeChunk","writeOrBuffer","cork","uncork","setDefaultEncoding","endWritable","_undestroy","undestroy","DataWorker","DataLengthProbe","Crc32Probe","CompressedObject","compressedSize","uncompressedSize","crc32","compression","compressedContent","getContentWorker","worker","uncompressWorker","getCompressedWorker","createWorkerFrom","uncompressedWorker","compressionOptions","compressWorker","crcTable","table","makeTable","crc","crc32str","2","1","HashBase","ARRAY16","_b","_c","rotl","fnF","fnG","fnH","fnI","_blockOffset","_length","zl","zr","sl","sr","hl","hr","_e","fn1","fn2","fn3","fn4","fn5","ar","br","cr","dr","tl","Algorithm","sha1","sha224","sha256","sha384","sha512","Cipher","DES","CBC","EDE","deciphers","modes","createCipher","createCipheriv","Cipheriv","createDecipher","Decipher","Decipheriv","listCiphers","getCiphers","modeModules","ECB","CFB","CFB8","CFB1","OFB","CTR","GCM","Rand","generate","_rand","getBytes","getByte","randomBytes","crt","priv","blinds","getr","blinder","bn","modulus","publicExponent","unblinder","blind","blinded","prime1","prime2","qinv","coefficient","exponent1","m2","exponent2","elliptic","curves","ec","eddsa","pre","PresetCurve","edwards","isInfinity","defineCurve","lambda","basis","common","ripemd","hmac","ripemd160","moment","ll","lll","llll","f","postMessage","dynamicTyping","dynamicTypingFunction","WORKERS_SUPPORTED","URL","webkitURL","BLOB_URL","createObjectURL","Worker","onmessage","userStep","userChunk","userComplete","userError","workerId","NODE_STREAM_INPUT","download","File","unparse","delimiter","BAD_DELIMITERS","quotes","skipEmptyLines","newline","quoteChar","header","columns","escapeChar","U","fields","stringify","RECORD_SEP","UNIT_SEP","BYTE_ORDER_MARK","LocalChunkSize","RemoteChunkSize","DefaultDelimiter","Parser","ParserHandle","NetworkStreamer","FileStreamer","StringStreamer","ReadableStreamStreamer","files","inputElem","instanceConfig","reason","_handle","_finished","_completed","_halted","_input","_baseIndex","_partialLine","_rowCount","_start","_nextChunk","isFirstChunk","_completeResults","errors","chunkSize","streamer","parseChunk","beforeFirstChunk","paused","aborted","cursor","preview","WORKER_ID","_sendError","_readChunk","_chunkLoaded","withCredentials","_chunkError","downloadRequestHeaders","webkitSlice","mozSlice","FileReaderSync","readAsText","_streamData","_streamEnd","_streamError","_checkIsFinished","_streamCleanUp","transformHeader","row","comments","successful","bestDelimiter","delimitersToGuess","getCharIndex","O","T","F","fastMode","S","nextDelim","quoteSearch","linebreak","truncated","terminate","EncodingDetect","EncodingConvert","KanaCaseTable","Encoding","detect","encodings","urlEncode","alpha","urlDecode","base64Encode","base64Decode","codeToString","toHankakuCase","asString","toZenkakuCase","toHiraganaCase","toKatakanaCase","toHankanaCase","HANKANA_TABLE","HANKANA_SONANTS","HANKANA_MARKS","toZenkanaCase","ZENKANA_TABLE","toHankakuSpace","toZenkakuSpace","registerImmediate","channel","messagePrefix","onGlobalMessage","nextHandle","tasksByHandle","currentlyRunningATask","attachTo","runIfPresent","importScripts","postMessageIsAsynchronous","oldOnMessage","canUsePostMessage","MessageChannel","port1","port2","task","symbolMap","numberMap","pluralForm","plurals","pluralize","weekdaysParseExact","suffixes","5","8","70","80","7","20","50","3","4","100","6","9","10","30","60","90","relativeTimeWithPlural","forms","standalone","lastDigit","last2Digits","relativeTimeWithMutation","mutationTable","softMutation","mutation","lastNumber","translate","monthsParseExact","plural","monthsStrictRegex","monthsShortStrictRegex","longMonthsParse","shortMonthsParse","processRelativeTime","monthsNominativeEl","monthsGenitiveEl","momentToFormat","_monthsGenitiveEl","_monthsNominativeEl","calendarEl","_calendarEl","monthsShortDot","numbersPast","numbersFuture","verbalNumber","monthsShortWithDots","monthsShortWithoutDots","weekEndings","40","isUpper","eifelerRegelAppliesToNumber","translateSingular","relativeTimeWithSingular","translator","correctGrammaticalCase","wordKey","relativeTimeMr","monthsNominative","monthsSubjective","12","13","numbersNouns","numberNoun","hundred","ten","numberAsNoun","processHoursFunction","comment","newObj","loadAsync","ReadableState","EElistenerCount","debugUtil","debug","debuglog","BufferList","kProxyEvents","readableObjectMode","readableHwm","readableHighWaterMark","pipes","pipesCount","flowing","endEmitted","reading","needReadable","emittedReadable","readableListening","resumeScheduled","awaitDrain","readingMore","decoder","_read","readableAddChunk","addToFront","skipChunkCheck","emitReadable","onEofChunk","chunkInvalid","addChunk","maybeReadMore","needMoreData","setEncoding","MAX_HWM","howMuchToRead","computeNewHighWaterMark","emitReadable_","maybeReadMore_","nReadingNextTick","resume_","fromList","hasStrings","copyFromBufferString","copyFromBuffer","fromListPartial","endReadable","endReadableNT","xs","nOrig","doRead","pipeOpts","endFn","stdout","stderr","unpipe","onunpipe","unpipeInfo","hasUnpiped","onfinish","cleanedUp","pipeOnDrain","increasedAwaitDrain","dests","ev","_fromList","emitErrorNT","readableDestroyed","writableDestroyed","afterTransform","ts","_transformState","transforming","writechunk","rs","needTransform","writeencoding","_this2","err2","_keyStr","chr1","chr2","chr3","enc1","enc2","enc3","enc4","remainingBytes","resultIndex","totalLength","ConvertWorker","NodejsStreamOutputAdapter","_accumulate","helper","updateCallback","dataArray","chunkType","_internalType","resultType","_outputType","_mimeType","transformZipOutput","StreamHelper","internalType","_worker","accumulate","updateCb","toNodejsStream","createFolders","unixPermissions","dosPermissions","dataP","dataIsReady","_tickScheduled","_tickAndRepeat","_tick","nextIndex","propName","STORE","magic","DEFLATE","adler","STR_APPLY_OK","STR_APPLY_UIA_OK","__","buf2binstring","binstring2buf","next_in","avail_in","total_in","next_out","avail_out","total_out","data_type","Z_NO_FLUSH","Z_PARTIAL_FLUSH","Z_SYNC_FLUSH","Z_FULL_FLUSH","Z_FINISH","Z_BLOCK","Z_TREES","Z_OK","Z_STREAM_END","Z_NEED_DICT","Z_ERRNO","Z_STREAM_ERROR","Z_DATA_ERROR","Z_BUF_ERROR","Z_NO_COMPRESSION","Z_BEST_SPEED","Z_BEST_COMPRESSION","Z_DEFAULT_COMPRESSION","Z_FILTERED","Z_HUFFMAN_ONLY","Z_RLE","Z_FIXED","Z_DEFAULT_STRATEGY","Z_BINARY","Z_TEXT","Z_UNKNOWN","Z_DEFLATED","LOCAL_FILE_HEADER","CENTRAL_FILE_HEADER","CENTRAL_DIRECTORY_END","ZIP64_CENTRAL_DIRECTORY_LOCATOR","ZIP64_CENTRAL_DIRECTORY_END","DATA_DESCRIPTOR","ArrayReader","StringReader","NodeBufferReader","Uint8ArrayReader","DataReader","byteAt","lastIndexOfSignature","sig","sig0","sig1","sig2","sig3","readAndCheckSignature","readData","checkIndex","newIndex","setIndex","readInt","readString","readDate","dostime","__webpack_amd_options__","addressConverter","dateConverter","regexify","xmlq","FormulaError","Style","RichText","Cell","styleId","_row","sheet","activeCell","includeSheetName","anchored","column","hostSharedFormulaId","_formulaRef","_sharedFormulaId","_value","_formulaType","_formula","clearCellsUsingSharedFormula","_columnNumber","replacement","replaced","formula","_this3","hyperlink","_this4","dataValidation","cell","rowOffset","columnOffset","_this5","_style","workbook","styleSheet","createStyle","_styleId","numRows","numCols","rangeTo","relativeCell","nameValues","_this6","getInstanceWithCellRef","addPageBreak","sharedRef","_remainingAttributes","sharedStrings","getIndexForString","dateToNumber","toXml","vNode","fNode","_remainingFormulaAttributes","si","_remainingChildren","nodeOrColumnNumber","_parseNode","updateMaxSharedFormulaId","sharedIndex","getStringByIndex","_vNode","tNode","getError","_vNode2","dateBase","incorrectLeapDate","dateOnly","setHours","numberToDate","fullDays","partialMilliseconds","setDate","_error","DIV0","NA","NAME","NULL","NUM","REF","VALUE","_defineProperty","colorIndexes","xfNode","fontNode","fillNode","borderNode","_styleSheet","_xfNode","_fontNode","_fillNode","_borderNode","getterName","setterName","color","rgb","theme","indexed","tint","bold","italic","uNode","underline","strikethrough","alignment","_getFontVerticalAlignment","subscript","_setFontVerticalAlignment","superscript","family","genericFamily","_getColor","_setColor","scheme","horizontal","justifyLastLine","indent","vertical","wrapText","shrinkToFit","readingOrder","textDirection","textRotation","_getTextRotation","_setTextRotation","patternFillNode","gradientFillNode","patternType","foreground","background","gradientType","stops","angle","degree","bottom","_patternFill","gradientFill","fillStop","patternFill","side","sideNode","sideResult","up","diagonalUp","down","diagonalDown","setting","_getBorder","_setBorder","diagonal","numFmtId","getNumberFormatCode","formatCode","getNumberFormatId","RichTextFragment","_node","_cell","_remainingNodes","newRichText","removeUnsupportedNodes","Relationships","_getStartingId","targetMode","Id","_nextId","Type","Target","TargetMode","xmlns","_finalized","throwIfNotStringOrBuffer","K","Sha256","maj","sigma0","sigma1","gamma0","_g","_h","T1","T2","H","Sha512","Ch","xl","Gamma0","Gamma0l","Gamma1","Gamma1l","getCarry","_ah","_bh","_ch","_dh","_eh","_fh","_gh","_hh","_al","_bl","_cl","_dl","_el","_fl","_gl","_hl","fh","gh","fl","gl","xh","gamma0l","gamma1","gamma1l","Wi7h","Wi7l","Wi16h","Wi16l","Wil","Wih","majh","majl","sigma0h","sigma0l","sigma1h","sigma1l","Kih","Kil","chh","chl","t1l","t1h","t2l","t2h","writeInt64BE","Legacy","md5","ZEROS","Hmac","blocksize","_alg","ipad","_ipad","opad","_opad","pbkdf2","checkBuffer","iterations","MAX_ALLOC","checkParameters","sizes","rmd160","saltLen","getDigest","ipad1","ipad2","DK","block1","destPos","hLen","incr32","getBlock","_cipher","_prev","encrypt","chunkNum","_cache","aes","GHASH","StreamCipher","ck","_ghash","_finID","ghash","toPad","ivBits","calcIv","_secCache","_decrypt","_alen","_mode","_authTag","_called","rump","xorTest","findPrime","simpleSieve","fermatTest","TWENTYFOUR","millerRabin","ONE","TWO","FIVE","TEN","THREE","ELEVEN","FOUR","_getPrimes","gen","n2","brorand","MillerRabin","_randbelow","min_bytes","_randrange","rone","n1","rn1","getDivisor","ch32","maj32","p32","ft_1","s0_256","s1_256","g0_256","g1_256","shaCommon","sha256_K","SHA256","sha512_K","SHA512","ch64_hi","yh","yl","zh","ch64_lo","maj64_hi","maj64_lo","s0_512_hi","s0_512_lo","s1_512_hi","s1_512_lo","g0_512_hi","g0_512_lo","g1_512_hi","g1_512_lo","_prepareBlock","c0_hi","c0_lo","c1_hi","c1_lo","c2_hi","c2_lo","c3_hi","c3_lo","c4_hi","c4_lo","T1_hi","T1_lo","T2_hi","T2_lo","reporter","save","restore","_reporterState","_reverse","der","DERDecoder","entity","tree","DERNode","derDecodeTag","cls","tagClass","primitive","oct","tagStr","derDecodeLen","_decode","_peekTag","any","decodedTag","_decodeTag","_skipUntilEnd","_decodeList","possibleEnd","_decodeStr","unused","numstr","_isNumstr","printstr","_isPrintstr","_decodeObjid","identifiers","ident","subident","_decodeTime","mon","sec","_decodeNull","_decodeBool","_decodeInt","_use","_getDecoder","DEREncoder","_encodeComposite","encodedTag","tagByName","tagClassByName","encodeTag","_createEncoderBuffer","lenOctets","_encodeStr","_encodeObjid","objid","_encodeTime","getUTCHours","getUTCSeconds","_encodeNull","_encodeInt","numArray","_encodeBool","_getEncoder","_skipDefault","dataBuffer","_baseState","defaultBuffer","_encodeValue","createHash","i2ops","paddedMsg","sax","externals","allWhitespaceRegex","XmlParser","xmlText","parser","ontext","_covertToNumberIfNumber","onopentagstart","onclosetag","onattribute","XmlBuilder","_build","_escapeString","isAttribute","SJISToUTF8","u3","jis","utf8","EUCJPToUTF8","JISToUTF8","UTF8ToSJIS","UTF8ToEUCJP","UTF8ToJIS","esc","UNICODEToUTF8","UTF8ToUNICODE","UNICODEToUTF16","bom","utf16","optBom","UNICODEToUTF16BE","UNICODEToUTF16LE","UTF16BEToUNICODE","UTF16LEToUNICODE","UTF16ToUNICODE","isLE","UTF16BEToUTF16LE","UTF8ToUTF16","UTF16ToUTF8","UTF8ToUTF16BE","UTF16BEToUTF8","UTF8ToUTF16LE","UTF16LEToUTF8","JISToSJIS","JISToEUCJP","SJISToJIS","SJISToEUCJP","EUCJPToJIS","EUCJPToSJIS","UTF16ToUTF16BE","UTF16BEToUTF16","UTF16ToUTF16LE","UTF16LEToUTF16","UTF16LEToUTF16BE","UNICODEToJIS","JISToUNICODE","UNICODEToEUCJP","EUCJPToUNICODE","UNICODEToSJIS","SJISToUNICODE","JISToUTF16","UTF16ToJIS","JISToUTF16BE","UTF16BEToJIS","JISToUTF16LE","UTF16LEToJIS","EUCJPToUTF16","UTF16ToEUCJP","EUCJPToUTF16BE","UTF16BEToEUCJP","EUCJPToUTF16LE","UTF16LEToEUCJP","SJISToUTF16","UTF16ToSJIS","SJISToUTF16BE","UTF16BEToSJIS","SJISToUTF16LE","UTF16LEToSJIS","g_prices","is_prices_edit","is_prices_show","is_optional_prices_edit","is_optional_prices_show","reservation_method","prices_name","prices_edit_action","show_update_prices","room_id","start_on_value","prices_show_json_path","prices","show_render_calendar","show_render_optional_prices","is_select_price","select_price_facility","select_price_room","select_price_start_on","button_copy_selected_price","select_price_facility_save","select_price_room_save","select_price_start_on_save","select_prices_init","prices_show_update_prices","facility_id","set_select_option","option_data","default_value","newOption","Option","facility_rooms","select_price_availables","rooms","room_start_on","room","start_on","select2","source_room_id","prices_edit_path","prices_edit_room_id","select_prices_fini","prices_by_date_type","date_type","prices_dt","price","confirm_editing","is_editing","input_values","optional_prices_is_editing","confirm","price_calendar_date_no","price_calendar_week","no","calendar_base_params","center","minTime","maxTime","selectHelper","ignoreTimezone","editable","droppable","displayEventEnd","eventColor","eventTextColor","jsEvent","resource","createEvent","eventDrop","revertFunc","ui","eventResize","eventClick","calEvent","columnHeaderText","fullCalendar","eventForm","yen","err_msg","prompt","alert","checkin","checkout","set_hidden_values","set_calendar_value","this_calendar","get_calendar_events_from_input_values","createEvent_common","temporary_key","get_key","arrayData1","arrayData2","arrayData3","arrayData4","arrayData5","deleteNo","dataflg","datas","delete_no_id_values","arrayDate1","arrayDate2","arrayDate3","arrayDate4","arrayDate5","el1","el2","el3","el4","el5","el6","el7","change","this_el","calendaradd","tableCnt","noChkCnt","this_td","chkCnt","setWidth","this_tdsp","this_table","calendarclear","chkCnt2","moveFlg","step2","this_el2","this_calendar2","events2","sort_compare_asc","sort_prices_by_time","same_prices","pa1","pa2","price_calendar_td","render_checkboxes","date_types","render_calendar","tdsp","price_calendar_tdsp","merged_prices","prices_array","prices_a","merged_price_a","prices_b_array","prices_b","prices_b_date_type","index_b","merge_prices","create_fullcalendar_events","render_calendars","price_calendar_readonly_date_no","price_calendar_readonly_date_jp","price_calendar","price_to_fullcalendar_event","selectable","date_type_tr_sel","time_select_control_sel","close_hour_select_sel","close_min_select_sel","select_option_59_el","select_el","enable_min_59","min_el","g_ope","enable_all_close_2359","optional_prices_edit","g_optional_prices","optional_price","close_seconds","g_close_seconds_end_of_day","close_min_el","init_close_2359","close_hour","start_on_min","el_yen","chk_yen","eos1","array_os","ecs1","array_cs","st","ed","su","el_unit_seconds","el_max_yen","eos2","ecs2","el1_unit","array_unit","el2_unit","el1_max_yen","array_max_yen","el2_max_yen","btns","holiday","monday","tuesday","wednesday","thursday","friday","saturday","sunday","el11","el12","el13","el14","el15","el21","el22","el23","el24","el25","optional_price_by_date_type","date_type_jp","optional_price_date_types","open_time","close_time","unit_seconds","max_yen","date_types_week","date_types_date","checkbox_date_week_select","tr_fields_optional_price","time_select_column","selector_optional_price_time_select","input_optional_price","selector_optional_price","time_select_optional_price_exists","select_optional_price_unit_seconds","clicked_reservation_id","__WEBPACK_EXTERNAL_MODULE_0__","__WEBPACK_EXTERNAL_MODULE_3__","extendStatics","setPrototypeOf","__extends","undistributeHeight","getScrollbarWidths","widths","leftRightWidth","clientWidth","bottomWidth","clientHeight","sanitizeScrollbarWidth","_isLeftRtlScrollbars","getIsLeftRtlScrollbars","compensateScroll","rowEls","scrollbarWidths","uncompensateScroll","disableCursor","enableCursor","distributeHeight","availableHeight","shouldRedistribute","minOffset1","minOffset2","flexEls","flexOffsets","flexHeights","usedHeight","minOffset","naturalOffset","outerHeight","newHeight","matchCellWidths","maxInnerWidth","innerEl","innerWidth","outerWidth","subtractInnerElHeight","outerEl","both","getScrollParent","scrollParent","getOuterRect","origin","getClientRect","getCssFloat","getContentRect","compareByFieldSpec","obj1","obj2","fieldSpec","obj1fallback","obj2fallback","val1","val2","flexibleCompare","localeCompare","computeGreatestUnit","unitsDesc","computeRangeAs","isInt","durationHasTime","dur","Boolean","log","isPrimaryMouseButton","getEvX","getEvY","getEvIsTouch","preventSelection","allowSelection","intersectRects","rect1","rect2","constrainPoint","getRectCenter","diffPoints","point1","point2","parseFieldSpecs","specs","compareByFieldSpecs","fieldSpecs","dayIDs","diffDayTime","stripTime","diffDay","diffByUnit","computeDurationGreatestUnit","durationInput","divideRangeByDuration","divideDurationByDuration","dur1","dur2","months1","months2","multiplyDuration","isNativeDate","isTimeString","hasOwnPropMethod","htmlEscape","mergeProps","propObjs","complexProps","complexObjs","copyOwnProps","name_1","applyAll","thisObj","removeMatching","testFunc","removeCnt","removeExact","exactVal","isArraysEqual","firstDefined","stripHtmlEntities","cssToStr","statements","attrsToStr","capitaliseFirstLetter","compareNumbers","immediate","timestamp","later","callNow","moment_ext_1","UnzonedRange","startInput","endInput","isStart","isEnd","stripZone","startMs","endMs","invertRanges","ranges","constraintRange","dateRange","invertedRanges","compareUnzonedRanges","intersect","otherRange","newRange","intersectsWith","containsRange","innerRange","containsDate","constrainDate","getStart","getEnd","range1","range2","tslib_1","ParsableModelMixin_1","Class_1","EventDefParser_1","EventSource","_super","uuid","rawInput","applyProps","normalizeId","fetch","timezone","removeEventDefsById","eventDefId","removeAllEventDefs","getPrimitive","otherSource","parseEventDefs","rawEventDefs","eventDef","eventDefs","parseEventDef","calendarTransform","sourceTransform","eventDataTransform","applyManualStandardProps","rawProps","defineStandardProps","copyVerbatimStandardProps","mixInto","backgroundColor","borderColor","textColor","startEditable","durationEditable","rendering","overlap","constraint","allDayDefault","Mixin_1","ListenerMixin","listenTo","eventName","getListenerNamespace","stopListeningTo","listenerId","EventDef_1","EventInstance_1","EventDateProfile_1","SingleEventDef","buildInstances","buildInstance","dateProfile","isAllDay","def","rezone","superSuccess","miscProps","allDay","util_1","ambigDateOfMonthRegex","ambigTimeOrZoneRegex","newMomentProto","oldMomentProto","oldMomentFormat","formatStr","momentExt","makeMoment","parseAsUTC","isAmbigTime","isAmbigZone","ambigMatch","isSingleString","_ambigTime","_ambigZone","_fullCalendar","hasTime","weekCalc","_fullCalendar_weekCalc","dayHours","wasAmbigTime","hasZone","tzo","ComponentFootprint","unzonedRange","toLegacy","msToMoment","EmitterMixin","_prepareIntercept","intercept","triggerWith","hasHandlers","Interaction","component","_getView","Mixin","destClass","mixOver","UnzonedRange_1","EventDateProfile","buildUnzonedRange","forcedAllDay","forceEventDuration","getDefaultEventEnd","isStandardProp","HitDragListener","handleInteractionStart","subjectRect","origPoint","subjectEl","hitsNeeded","computeScrollBounds","origHit","queryHit","subjectCenter","coordAdjust","handleDragStart","handleHitOver","handleDrag","dx","dy","isHitsEqual","handleHitOut","handleDragEnd","handleHitDone","isOrig","handleInteractionEnd","isCancelled","hitsNotNeeded","handleScrollEnd","isDragging","releaseHits","prepareHits","hit0","hit1","isHitPropsWithin","subHit","superHit","internalApiVersion","date_formatting_1","formatDate","formatRange","queryMostGranularFormatUnit","locale_1","datepickerLocale","getMomentLocaleData","populateInstanceComputableOptions","util_2","eventDefsToEventInstances","eventFootprintToComponentFootprint","eventInstanceToEventRange","eventInstanceToUnzonedRange","eventRangeToEventFootprint","EmitterMixin_1","ListenerMixin_1","Model_1","Model","Constraints_1","Constraints","DateProfileGenerator_1","DateProfileGenerator","ComponentFootprint_1","BusinessHourGenerator_1","BusinessHourGenerator","EventPeriod_1","EventPeriod","EventManager_1","EventManager","EventDef","EventDefMutation_1","EventDefMutation","EventDefParser","EventInstance","EventRange_1","EventRange","RecurringEventDef_1","RecurringEventDef","SingleEventDef_1","EventDefDateMutation_1","EventDefDateMutation","EventSourceParser_1","EventSourceParser","EventSource_1","ThemeRegistry_1","defineThemeSystem","getThemeSystemClass","EventInstanceGroup_1","EventInstanceGroup","ArrayEventSource_1","ArrayEventSource","FuncEventSource_1","FuncEventSource","JsonFeedEventSource_1","JsonFeedEventSource","EventFootprint_1","EventFootprint","Class","CoordCache_1","CoordCache","Iterator_1","Iterator","DragListener_1","DragListener","HitDragListener_1","MouseFollower_1","MouseFollower","ParsableModelMixin","Popover_1","Popover","Promise_1","TaskQueue_1","TaskQueue","RenderQueue_1","RenderQueue","Scroller_1","Scroller","Theme_1","Theme","Component_1","Component","DateComponent_1","DateComponent","InteractiveDateComponent_1","InteractiveDateComponent","Calendar_1","Calendar","View_1","View","ViewRegistry_1","defineView","getViewConfig","DayTableMixin_1","DayTableMixin","BusinessHourRenderer_1","BusinessHourRenderer","EventRenderer_1","EventRenderer","FillRenderer_1","FillRenderer","HelperRenderer_1","HelperRenderer","ExternalDropping_1","ExternalDropping","EventResizing_1","EventResizing","EventPointing_1","EventPointing","EventDragging_1","EventDragging","DateSelecting_1","DateSelecting","DateClicking_1","DateClicking","Interaction_1","StandardInteractionsMixin_1","StandardInteractionsMixin","AgendaView_1","AgendaView","TimeGrid_1","TimeGrid","TimeGridEventRenderer_1","TimeGridEventRenderer","TimeGridFillRenderer_1","TimeGridFillRenderer","TimeGridHelperRenderer_1","TimeGridHelperRenderer","DayGrid_1","DayGrid","DayGridEventRenderer_1","DayGridEventRenderer","DayGridFillRenderer_1","DayGridFillRenderer","DayGridHelperRenderer_1","DayGridHelperRenderer","BasicView_1","BasicView","BasicViewDateProfileGenerator_1","BasicViewDateProfileGenerator","MonthView_1","MonthView","MonthViewDateProfileGenerator_1","MonthViewDateProfileGenerator","ListView_1","ListView","ListEventPointing_1","ListEventPointing","ListEventRenderer_1","ListEventRenderer","eventInstances","eventInstance","eventRange","eventFootprint","componentFootprint","getAllEventRanges","sliceNormalRenderRanges","sliceRenderRanges","isInverse","sliceInverseRenderRanges","slicedRange","slicedEventRanges","unzonedRanges","ownerDef","getEventDef","hasInverseRendering","explicitEventDef","PromiseStub","construct","executor","attachImmediatelyResolvingThen","attachImmediatelyRejectingThen","onResolve","onReject","optionsManager","processIconOverride","iconOverrideOption","setIconOverride","iconOverrideHash","iconClassesCopy","buttonName","iconClasses","applyIconOverridePrefix","iconOverridePrefix","getIconClass","baseIconClass","getCustomButtonIconClass","customButtonProps","iconOverrideCustomButtonOption","exportHooks","touchMouseIgnoreWait","globalEmitter","neededCount","GlobalEmitter","isTouching","mouseIgnoreDepth","needed","unneeded","touchstart","handleTouchStart","touchcancel","handleTouchCancel","touchend","handleTouchEnd","mousedown","handleMouseDown","mousemove","handleMouseMove","mouseup","handleMouseUp","handleClick","selectstart","handleSelectStart","contextmenu","handleContextMenu","handleTouchMoveProxy","handleTouchMove","passive","handleScrollProxy","handleScroll","stopTouch","shouldIgnoreMouse","skipMouseIgnore","startTouchMouseIgnore","viewHash","views","viewName","viewConfig","options_1","localeOptionHash","dpComputableOptions","buttonText","dpOptions","prevText","nextText","today","currentText","monthYearFormat","showMonthAfterYear","yearSuffix","momComputableOptions","dayOfMonthFormat","momOptions","fcOptions","isRTL","mediumTimeFormat","smallTimeFormat","extraSmallTimeFormat","hourFormat","noMeridiemTimeFormat","instanceComputableOptions","smallDayDateFormat","weekFormat","weekNumberTitle","smallWeekFormat","localeCode","newFcOptions","mergeOptions","globalDefaults","dpLocaleCode","weekHeader","jqDatePicker","datepicker","regional","en","setDefaults","englishDefaults","titleRangeSeparator","defaultTimedEventDuration","defaultAllDayEventDuration","nextDayThreshold","columnHeader","aspectRatio","weekends","weekNumbers","weekNumberCalculation","scrollTime","showNonCurrentDates","lazyFetching","startParam","endParam","timezoneParam","prevYear","nextYear","allDayText","agendaEventMinHeight","dragOpacity","dragRevertDuration","dragScroll","unselectAuto","dropAccept","eventOrder","eventLimit","eventLimitText","eventLimitClick","dayPopoverFormat","handleWindowResize","windowResizeDelay","longPressDelay","rtlDefaults","buttonIcons","themeButtonIcons","complexOptions","optionObjs","getEventLegacy","members","SubClass","eventInput","generateId","rawId","getRendering","hasBgRendering","getConstraint","getOverlap","isStartExplicitlyEditable","isDurationExplicitlyEditable","isExplicitlyEditable","applyMiscProps","sourceClasses","registerClass","EventSourceClass","eventSource","createFromRawProps","largeUnit","dateMutation","defMutation","dateProps","standardProps","verbatimStandardProps","createFromDiff","mutateSingle","origDateProfile","buildNewDateProfile","setDateMutation","clearEnd","forceTimed","forceAllDay","dateProfile0","dateProfile1","dateDelta","endDelta","subtractDates","date1","date0","setDateDelta","setEndDelta","eventDateProfile","shouldRezone","startDelta","applyTimezone","setStartDelta","render","renderEl","applyOverflow","scrollEl","setHeight","lockOverflow","scrollWidth","scrollHeight","getScrollTop","setScrollTop","getClientWidth","getClientHeight","GlobalEmitter_1","_view","_options","segSelector","dateSelectingClass","dateClicking","dateClickingClass","dateSelecting","eventPointingClass","eventPointing","eventDraggingClass","eventDragging","eventResizingClass","eventResizing","externalDroppingClass","externalDropping","setElement","bindToEl","bindAllSegHandlersToEl","removeElement","endInteractions","executeEventUnrender","bindGlobalHandlers","bindToDocument","unbindGlobalHandlers","unbindFromDocument","bindDateHandlerToEl","eventInteraction","bindSegHandlerToEl","segEl","seg","shouldIgnoreEventPointing","shouldIgnoreTouch","isSelected","selectedEvent","isResizing","canStartSelection","canStartResize","isEventDefDraggable","footprint","isEventDefResizable","canStartDrag","isEventDefSelected","interaction","isEventDefStartEditable","isEditable","isEventDefGenerallyEditable","isEventDefResizableFromStart","isEventDefResizableFromEnd","isResizable","diffDates","isEventInstanceGroupAllowed","eventInstanceGroup","eventFootprints","eventRangesToEventFootprints","validUnzonedRange","constraints","isExternalInstanceGroupAllowed","isSelectionFootprintAllowed","viewSpec","batchRenderDepth","initRenderQueue","initHiddenDays","dateProfileGenerator","dateProfileGeneratorClass","bindBaseRenderHandlers","eventOrderSpecs","renderQueue","onRenderQueueStart","onRenderQueueStop","startBatchRender","stopBatchRender","freezeContentHeight","addScroll","queryScroll","updateViewSize","popScroll","thawContentHeight","requestRender","actionType","whenSizeUpdated","isRunning","computeTitle","currentRangeUnit","currentUnzonedRange","activeUnzonedRange","isRangeAllDay","computeTitleFormat","currentDateProfile","newDateProfile","build","unsetDate","fetchInitialEvents","usesMinMaxTime","requestEvents","bindEventChanges","resetEvents","unbindEventChanges","setEvents","eventsPayload","unsetEvents","requestDateRender","executeDateRender","requestDateUnrender","executeDateUnrender","isDateInit","startNowIndicator","unselect","stopNowIndicator","triggerViewRender","triggerViewDestroy","publiclyTrigger","requestEventsRender","executeEventRender","triggerAfterEventsRendered","requestEventsUnrender","triggerBeforeEventsDestroyed","requestBusinessHoursRender","businessHourGenerator","renderBusinessHours","requestBusinessHoursUnrender","unrenderBusinessHours","processUnselect","handleDocumentMousedown","getNowIndicatorUnit","initialNowDate","getNow","initialNowQueriedMs","nowIndicatorTimeoutID","nowIndicatorIntervalID","updateNowIndicator","isDatesRendered","unrenderNowIndicator","renderNowIndicator","isNowIndicatorRendered","updateSize","totalHeight","isAuto","isResize","scroll","queuedScroll","applyQueuedScroll","applyScroll","queryDateScroll","computeInitialDateScroll","applyDateScroll","reportEventDrop","eventMutation","undoFunc","eventManager","mutateEventsWithId","triggerEventDrop","reportExternalDrop","singleEventDef","isEvent","isSticky","addEventDef","triggerExternalDrop","reportEventResize","resizeDelta","triggerEventResize","renderSelectionFootprint","reportSelection","triggerSelect","footprintToDateProfile","unrenderSelection","selectEventInstance","selectedEventInstance","unselectEventInstance","getEventSegs","processRangeUnselect","processEventUnselect","ignore","triggerBaseRendered","triggerBaseUnrendered","triggerDayClick","dayEl","isDateInOtherMonth","getUnzonedRangeOption","parseUnzonedRange","hiddenDays","isHiddenDayHash","dayCnt","trimHiddenDays","inputUnzonedRange","skipHiddenDays","isHiddenDay","inc","isExclusive","watch","deps","initialEvents","intervalStart","intervalEnd","fillRenderer","rangeUpdated","displayEventTime","eventTimeFormat","computeEventTimeFormat","computeDisplayEventTime","computeDisplayEventEnd","instanceGroup","eventRanges","_getDateProfile","bgRanges","fgRanges","renderBgRanges","renderFgRanges","unrender","unrenderBgRanges","unrenderFgRanges","segs","eventFootprintsToSegs","renderFgSegEls","renderFgSegs","fgSegs","unrenderFgSegs","renderBgSegs","bgSegs","unrenderBgSegs","getSegs","renderSegs","getClasses","getBgClasses","getCss","getBgColor","filterEl","filterEventRenderEl","disableResizing","hasEventRenderHandlers","hasPublicHandlers","renderedSegs","beforeFgSegHtml","fgSegHtml","getSegClasses","isDraggable","legacy","custom","getTimeText","displayEnd","_getTimeText","objs","getStylingObjs","eventClassName","getSkinCss","getBorderColor","getTextColor","eventBackgroundColor","eventBorderColor","getFallbackStylingObjs","sortEventSegs","compareEventSegs","seg1","seg2","f1","f2","cf1","cf2","r1","englishMoment","PART_SEPARATOR","SPECIAL_TOKEN_MARKER","MAYBE_MARKER","MAYBE_REGEXP","specialTokens","largeTokenMap","fakeFormatString","processMaybeMarkers","renderFakeFormatStringParts","renderFakeFormatString","getParsedFormatString","date2","parsedFormat","leftI","rightI","middleI","sameUnits","unzonedDate1","unzonedDate2","renderedParts1","renderedParts2","leftStr","rightStr","middleStr1","middleStr2","middleStr","renderParsedFormat","parsedFormatStrCache","chunkFormatString","buildFakeFormatString","buildSameUnits","parseFormatString","chunker","splitStringLiteral","maybe","tokenInfo","fakePart","fakeParts","m0","candidate","best","_watchers","_props","applyGlobalWatchers","constructed","_globalWatchArgs","newProps","setProps","oldProps","changeset","changedProps","changedCnt","depList","startFunc","stopFunc","unwatch","_watchDeps","watcher","queuedChangeCnt","depCnt","satisfyCnt","bindTuples","isCallingStop","depName","isOptional","onDepChange","flash","propDefs","standardPropMap","manualProps","endTime","zonedDayStart","instanceStart","instanceEnd","unzonedDate","unzonedEnd","instances","dowHash","setDow","dowNumbers","msToUtcMoment","buildPrev","prevDate","dateIncrement","buildNext","nextDate","forceToValid","currentInfo","renderUnzonedRange","isDateAllDay","buildValidRange","buildCurrentRangeInfo","buildRenderRange","adjustActiveRange","buildDateIncrement","dayCount","durationUnit","buildRangeFromDuration","buildRangeFromDayCount","buildCustomVisibleRange","getFallbackDuration","dateIncrementInput","dateIncrementDuration","computeRes","customAlignment","runningCount","visibleUnzonedRange","fallback","setRawEventDefs","currentTimezone","StandardTheme_1","JqueryUiTheme_1","themeClassHash","themeName","themeClass","themeSetting","isHorizontal","isVertical","forcedOffsetParentEl","offsetParentEl","boundingRect","queryBoundingRect","buildElHorizontals","buildElVerticals","lefts","rights","tops","bottoms","ensureBuilt","getHorizontalIndex","leftOffset","getVerticalIndex","topOffset","getLeftOffset","getLeftPosition","getRightOffset","getRightPosition","getWidth","getTopOffset","topIndex","getTopPosition","getBottomOffset","getBottomPosition","getHeight","scrollParentEl","isPointInBounds","isLeftInBounds","isTopInBounds","isInteracting","isDistanceSurpassed","isDelayEnded","isTouch","isGeneric","shouldCancelTouchScroll","scrollAlwaysKills","isAutoScroll","scrollSensitivity","scrollSpeed","scrollIntervalMs","startInteraction","extraOptions","minDistance","distance","originX","originY","bindHandlers","initAutoScroll","startDelay","handleDistanceSurpassed","endInteraction","endDrag","delayTimeoutId","destroyAutoScroll","unbindHandlers","drag","handleMove","dragstop","touchmove","handleTouchScroll","startDrag","updateAutoScroll","initialEv","handleDelayEnd","handleDebouncedScroll","endAutoScroll","scrollBounds","topCloseness","bottomCloseness","leftCloseness","rightCloseness","sensitivity","bounds","topVel","leftVel","setScrollVel","scrollTopVel","scrollLeftVel","constrainScrollVel","scrollIntervalId","scrollIntervalFunc","frac","updateDayTable","daysPerRow","firstDay","rowCnt","dayIndex","dayIndices","dayDates","breakOnWeeks","updateDayTableCols","colCnt","computeColCnt","colHeadFormat","computeColHeadFormat","getCellDate","getCellDayIndex","getCellRange","getColDayIndex","getDateDayIndex","dayOffset","sliceRangeByRow","rowFirst","rowLast","segFirst","segLast","normalRange","computeDayRange","rangeFirst","rangeLast","firstRowDayIndex","lastRowDayIndex","sliceRangeByDay","renderHeadHtml","renderHeadTrHtml","renderHeadIntroHtml","renderIntroHtml","renderHeadDateCellsHtml","htmls","renderHeadDateCellHtml","colspan","otherAttrs","innerHtml","isDateValid","getDayClasses","buildGotoAnchorHtml","forceOff","renderBgTrHtml","renderBgIntroHtml","renderBgCellsHtml","renderBgCellHtml","bookendCells","trEl","introHtml","buildEventInstanceGroup","hasAllDayBusinessHours","renderEventFootprints","fillSegTag","elsByFill","renderFootprint","componentFootprintToSegs","buildSegEls","attachSegEls","reportEls","buildSegHtml","eventRenderer","renderComponentFootprint","fabricateEventFootprint","renderEventDraggingFootprints","sourceSeg","renderEventResizingFootprints","extraClassNames","helperEls","dummyInstance","dummyEvent","handleMouseover","handleMouseout","mousedOverSeg","cellWeekNumbersVisible","bottomCoordPadding","isRigid","leftCol","rightCol","renderDates","renderGrid","unrenderDates","removeSegPopover","headContainerEl","renderDayRowHtml","cellEls","rowCoordCache","colCoordCache","getCellEl","getIsNumbersVisible","renderNumberTrHtml","getIsDayNumbersVisible","renderNumberIntroHtml","renderNumberCellsHtml","renderNumberCellHtml","weekCalcFirstDoW","isDayNumberVisible","getCellHit","getHitFootprint","getHitEl","getOwnEventSegs","popoverSegs","renderDrag","renderHighlight","helperRenderer","unrenderDrag","unrenderHighlight","renderEventResize","unrenderEventResize","segPopover","limitRows","levelLimit","rowLevelLimit","rowStructs","unlimitRow","computeRowLevelLimit","limitRow","trHeight","rowHeight","trEls","tbodyEl","iterInnerHeights","childNode","levelSegs","cellMatrix","limitedNodes","segsBelow","totalSegsBelow","colSegsBelow","rowspan","segMoreNodes","moreTd","moreWrap","moreLink","rowStruct","moreNodes","emptyCellsUntil","endCol","getCellSegs","renderMoreLink","segLevels","moreEls","limitedEls","hiddenSegs","getMoreLinkText","clickOption","moreEl","allSegs","reslicedAllSegs","resliceDaySegs","reslicedHiddenSegs","showSegPopover","zoomTo","topEl","renderSegPopoverContent","parentEl","autoHide","viewportConstrain","triggerBeforeEventSegsDestroyed","triggerAfterEventSegsRendered","segContainer","dayDate","dayStart","dayEnd","dayRange","newSegs","startLevel","segMatrix","level","eventRendererClass","businessHourRendererClass","helperRendererClass","fillRendererClass","dayGrid","instantiateDayGrid","hasRigidRows","colWeekNumbersVisible","addChild","scroller","weekNumberStyleAttr","weekStart","dayGridClass","renderSkeleton","dayGridContainerEl","dayGridEl","renderSkeletonHtml","unrenderSkeleton","weekNumberWidth","scrollerHeight","headRowEl","computeScrollerHeight","setGridHeight","peerEventRanges","getPeerEventInstances","peerEventFootprints","constraintVal","overlapVal","eventAllowFunc","isFootprintAllowed","getEventInstancesWithoutId","selectAllowFunc","getEventInstances","subjectEventInstance","constraintFootprints","overlapEventFootprints","constraintValToFootprints","isFootprintWithinConstraints","collectOverlapEventFootprints","overlapFunc","isOverlapsAllowedByFunc","overlapEventInstance","overlapEventDef","subjectLegacyInstance","isOverlapEventInstancesAllowed","footprintContainsFootprint","buildCurrentBusinessFootprints","parseEventDefToInstances","eventInstancesToFootprints","parseFootprints","getEventInstancesWithId","targetFootprint","footprintsIntersect","currentPeriod","eventRangeToEventFootprints","outerFootprint","innerFootprint","footprint0","footprint1","BUSINESS_HOUR_EVENT_DEFAULTS","rawComplexDef","buildEventDefs","rawDefs","requireDow","defs","buildEventDef","rawDef","fullRawDef","pendingCnt","freezeDepth","stuntedReleaseCnt","releaseCnt","requestsByUid","eventDefsByUid","eventDefsById","eventInstanceGroupsById","isWithinRange","requestSources","freeze","requestSource","thaw","request","addEventDefs","tryRelease","purgeSource","removeEventDef","purgeAllSources","completedCnt","getEventDefByUid","eventDefUid","getEventDefsById","addEventInstance","removeEventInstancesForDef","matchingInstances","currentEventInstance","release","whenReleased","stickySource","otherSources","force","setPeriod","addSource","removeSource","doomedSource","removeAllSources","refetchSource","refetchAllSources","getSources","multiQuerySources","matchInputs","matchingSources","querySources","matchInput","getSourceById","source1","eventPeriod","unbindPeriod","bindPeriod","eventId","eventDefMutation","undoFuncs","buildMutatedEventInstanceGroup","defCopy","allInstances","StandardTheme","widget","widgetHeader","widgetContent","buttonGroup","cornerLeft","cornerRight","stateDefault","stateActive","stateDisabled","stateHover","stateDown","popoverHeader","popoverContent","headerRow","dayRow","listView","JqueryUiTheme","pushLoading","popLoading","onSuccess","onError","requestParams","buildRequestParams","AJAX_DEFAULTS","callbackRes","errorThrown","customRequestParams","items","proxyCall","sourceEl","isFollowing","isHidden","isAnimating","y0","x0","topDelta","leftDelta","updatePosition","shouldRevert","revertDuration","top0","left0","getEl","additionalClass","zIndex","sourceOffset","documentMousedown","viewportTop","viewportLeft","viewportOffset","windowEl","viewportEl","tryStart","getIsIdle","canRunNext","runRemaining","runTask","waitsByNamespace","taskFunc","waitMs","waitNamespace","delayWait","clearWait","compoundTask","startWait","spawnWait","waitId","newTask","shouldAppend","hitsNeededDepth","childrenByUid","businessHourRenderer","callChildren","_getCalendar","convertEventsPayloadToLegacyArray","getBusinessHourSegs","getOwnBusinessHourSegs","iterChildren","showEventsWithId","hideEventsWithId","renderedHelper","getSafeHitFootprint","eventFootprintToSegs","gotoOptions","finalOptions","getAllDayHtml","noThemeHighlight","currentRangeAs","startDay","endTimeMS","endDay","isMultiDayRange","legacyEvents","Toolbar_1","OptionsManager_1","ViewSpecManager_1","overrides","loadingLevel","ignoreUpdateViewSize","freezeContentHeightDepth","viewsByType","viewSpecManager","initMomentInternals","initCurrentDate","initEventManager","triggerInfo","optHandler","newOptionHash","instantiateView","viewType","spec","getViewSpec","isValidViewType","changeView","dateOrRange","recordOverrides","visibleRange","renderView","newDate","getUnitViewSpec","defaultDateInput","prevInfo","nextInfo","gotoDate","zonedDateInput","incrementDate","contentEl","elementVisible","calcSize","initialRender","customAction","themeSystem","widgetClass","businessHours","initToolbars","renderHeader","renderFooter","resize","windowResizeProxy","windowResize","clearView","toolbarsManager","bindViewHandlers","setToolbarsTitle","updateToolbarButtons","unbindViewHandlers","newView","oldView","currentView","reinitView","getSuggestedViewHeight","suggestedViewHeight","isHeightAuto","_calcSize","contentHeightInput","heightInput","queryToolbarsHeight","forceFreezeContentHeight","computeHeaderOptions","footer","computeFooterOptions","extraClasses","layout","setToolbarOptions","todayInfo","toolbar","zonedStartInput","zonedEndInput","buildSelectFootprint","monthNames","monthNamesShort","dayNames","dayNamesShort","localizeMoment","getIsAmbigTimezone","adjustedZonedDate","zonedDate","timeAdjust","ignoreEnd","humanizeDuration","rangeInput","rawSources","singleRawSource","rawSource","getEventEnd","zonedStart","rerenderEvents","refetchEvents","renderEvents","eventInputs","renderEvent","removeEvents","legacyQuery","legacyInstances","idMap","filterLegacyEventInstances","clientEvents","legacyEventInstances","updateEvents","eventPropsArray","updateEvent","eventProps","getEventSources","getEventSourceById","addEventSource","sourceInput","removeEventSources","sourceMultiQuery","removeEventSource","sourceQuery","refetchEventSources","legacyEventInstance","dragListener","dragstart","sortstart","accept","listenToExternalDrag","stick","dataAttrPrefix","getDraggedElMeta","interactionStart","hitOver","mutatedEventInstanceGroup","isAllowed","hitFootprint","computeExternalDrop","hitOut","hitDone","interactionEnd","buildDragListener","resizeMutation","dragStart","segResizeStart","origHitFootprint","computeEventStartResizeMutation","computeEventEndResizeMutation","segResizeStop","startFootprint","endFootprint","origEventFootprint","origRange","getSelectionDelay","handleMousedown","buildSelectListener","mouseFollower","segDragStart","origFootprint","computeEventDropMutation","segDragStop","computeEventDateMutation","getDelay","selectionFootprint","computeSelection","wholeFootprint","computeSelectionFootprint","dayClickHit","agendaTimeGridMethods","agendaDayGridMethods","timeGrid","instantiateTimeGrid","timeGridClass","timeGridWrapEl","timeGridEl","axisStyleAttr","axisWidth","colEls","noScrollRowEls","bottomRuleEl","getTotalSlatHeight","computeTimeTop","dayEventsPayload","timedEventsPayload","groupEventFootprintsByAllDay","timed","weekText","AGENDA_STOCK_SUB_DURATIONS","processOptions","sliceRangeByTimes","segRange","dayRanges","slotDuration","snapDuration","snapsPerSlot","labelFormat","labelInterval","computeLabelInterval","slotsPerLabel","renderSlats","renderColumns","unrenderColumns","slatContainerEl","renderSlatRowHtml","slatEls","slatCoordCache","slotDate","isLabeled","axisHtml","slotTime","slotIterator","renderContentSkeleton","unrenderContentSkeleton","skeletonEl","cellHtml","contentSkeletonEl","colContainerEls","helperContainerEls","fgContainerEls","bgContainerEls","highlightContainerEls","businessContainerEls","groupSegsByCol","segsByCol","attachSegsByCol","containerEls","computeDateTop","nowIndicatorEls","updateSegVerticals","businessSegs","startOfDayDate","slatIndex","slatRemainder","slatCoverage","computeSegVerticals","assignSegVerticals","eventMinHeight","generateSegVerticalCss","colIndex","slatTop","slatHeight","localSnapIndex","snapTop","snapBottom","snap","computeSnapTime","snapIndex","renderFgSegsIntoContainers","updateFgSegCoords","timeText","fullTimeText","startTimeText","isResizableFromStart","isResizableFromEnd","skinCss","zonedEnd","computeFgSegHorizontals","assignFgSegHorizontals","levels","level0","forwardSegs","computeSlotSegCollisions","computeForwardSlotSegs","buildSlotSegLevels","computeSlotSegPressures","computeFgSegForwardBack","seriesBackwardPressure","seriesBackwardCoord","forwardCoord","sortForwardSegs","backwardCoord","compareForwardSegs","forwardPressure","generateFgSegHorizontalCss","shouldOverlap","forwardSeg","otherSegs","helperNodes","renderSegRows","rowNode","segRows","groupSegRows","renderSegRow","rowSegs","buildSegLevels","levelCnt","loneCellMatrix","isDaySegCollision","compareDaySegCols","titleHtml","timeHtml","otherSeg","skeletonTopEl","skeletonTop","rowEl","renderFillRow","startCol","viewEnd","renderEmptyMessage","renderSegList","daySegs","segsByDay","groupSegsByDay","tableEl","dayHeaderHtml","mainFormat","altFormat","bgColor","_element","singleRes","element","Toolbar","toolbarOptions","viewsWithButtons","newToolbarOptions","sections","renderSection","sectionEl","buttonStr","calendarCustomButtons","calendarButtonTextOverrides","calendarButtonText","buttonGroupStr","groupEl","groupChildren","isOnlyButtons","buttonClick","buttonIcon","buttonInnerHtml","buttonClasses","buttonEl","buttonAriaAttr","buttonTextOverride","buttonTextDefault","updateTitle","activateButton","deactivateButton","disableButton","enableButton","getViewsWithButtons","OptionsManager","dynamicOverrides","compute","optionName","optionCnt","localeDefaults","dirDefaults","rawOptions","clearCache","ViewSpecManager","viewSpecCache","buildViewSpec","viewTypes","singleUnit","requestedViewType","viewOverrides","specChain","defaultsChain","overridesChain","buildViewSpecOptions","buildViewSpecButtonText","queryButtonText","buttonTextKey","Bootstrap3Theme_1","Bootstrap4Theme_1","Bootstrap3Theme","tableGrid","tableList","tableListHeading","popover","Bootstrap4Theme","fixedWeekCount","allDaySlot","slotEventOverlap","listDayFormat","noEventsMessage","listDayAltFormat","Workbook","XlsxPopulate","fromBlankAsync","fromDataAsync","fromFileAsync","MIME_TYPE","_global","extension","_hasOwn","setProp","functionOrGetSet","derive","Child","Parent","getOwnPropertyDescriptor","override","origFunc","overridedFactory","asap","arrayToObject","extractor","nameAndValue","trycatcher","tryCatch","getByKeyPath","keyPath","rv","innerObj","setByKeyPath","currentKeyPath","remainingKeyPath","shallowClone","intrinsicTypes","deepClone","getObjectDiff","prfx","iteratorSymbol","getIteratorOf","NO_CHAR_ARRAY","getArrayOf","arrayLike","it","setDebug","libraryFilter","NEEDS_THROW_FOR_STACK","getErrorWithStack","prettyStack","exception","numIgnoredFrames","frame","idbDomErrorNames","errorList","defaultTexts","VersionChanged","DatabaseClosed","Abort","TransactionInactive","DexieError","ModifyError","failures","successCount","failedKeys","BulkError","getMultiErrorMessage","_stack","errnames","BaseException","exceptions","fullName","msgOrInner","inner","Syntax","SyntaxError","Range","exceptionMap","fullNameExceptions","mirror","pureFunctionChain","callBoth","on1","on2","hookCreatingChain","onsuccess","res2","hookDeletingChain","hookUpdatingChain","modifications","reverseStoppableEventChain","promisableChain","thiz","INTERNAL","LONG_STACKS_CLIP_LIMIT","ZONE_ECHO_LIMIT","nativePromiseInstanceAndProto","P","resolvedNativePromise","nativePromiseProto","resolvedGlobalPromise","nativePromiseThen","NativePromise","AsyncFunction","patchGlobalPromise","stack_being_generated","schedulePhysicalTick","physicalTick","MutationObserver","hiddenDiv","observe","asap$1","microtickQueue","needsNewPhysicalTick","isOutsideMicroTick","unhandledErrors","rejectingErrors","currentFulfiller","rejectionMapper","globalPSD","unhandleds","onunhandled","globalError","pgp","finalize","uh","PSD","numScheduledCalls","tickFinalizers","onuncatched","_lib","psd","_PSD","_stackHolder","_numPrev","handleRejection","executePromiseTask","shouldExecuteTick","beginMicroTickScope","_then","propagateAllListeners","endMicroTickScope","thenProp","microTaskId","totalEchoes","possibleAwait","decrementExpectedAwaits","propagateToListener","Listener","nativeAwaitCompatibleWrap","linkToPreviousPromise","origProp","getPropertyDescriptor","addPossiblyUnhandledError","finalizePhysicalTick","callListener","markErrorAsHandled","numPrev","wasRootExec","callbacks","unhandledErrs","finalizers","PromiseReject","errorCatcher","outerScope","switchToZone","onFinally","getStack","stacks","errorName","failure","snapShot","onPossibleParallellAsync","race","newPSD","newScope","usePSD","scheduler","follow","zoneProps","finalizer","run_at_end_of_this_or_next_physical_tick","awaits","echoes","taskCounter","zoneStack","zoneEchoes","zone_id_counter","props$$1","globalEnv","PromiseProp","nthen","getPatchedPromiseThen","gthen","incrementExpectedAwaits","sourceTaskId","possiblePromise","rejection","zoneLeaveEcho","targetZone","bEnteringZone","job","currentZone","GlobalPromise","targetEnv","outerZone","origThen","onResolved","UNHANDLEDREJECTION","eventData","initEvent","CustomEvent","dispatchEvent","PromiseRejectionEvent","onunhandledrejection","Events","evs","subscriber","subscribe","addEventType","chainFunction","defaultFunction","cfg","subscribers","unsubscribe","InvalidArgument","dbNamesDB","maxString","maxKey","IDBKeyRange","only","minKey","INVALID_KEY_ARGUMENT","STRING_EXPECTED","connections","isIEOrEdge","navigator","userAgent","hasIEDeleteObjectStoreBug","hangsOnDeleteLargeKeyRange","dexieStackFrameFilter","Dexie","dbName","dbReadyResolve","cancelOpen","hasGetAll","dependencies","addons","autoOpen","indexedDB","globalSchema","_dbSchema","dbStoreNames","allTables","idbdb","dbOpenError","isBeingOpened","onReadyBeingFired","openComplete","READWRITE","db","dbReadyPromise","openCanceller","autoSchema","hasNativeGetDatabaseNames","getNativeGetDatabaseNamesFn","Version","versionNumber","_cfg","storesSource","dbschema","tables","contentUpgrade","stores","runUpgraders","oldVersion","idbtrans","trans","_createTransaction","_completion","rejectTransaction","_reject","tableName","createTable","primKey","populate","oldVersionStruct","Upgrade","anyContentUpgraderHasRun","oldSchema","newSchema","adjustToExistingIndexNames","del","oldDef","newDef","recreate","oldIndexes","idxByName","newIndexes","idxName","oldIdx","newIdx","getSchemaDiff","store","objectStore","addIndex","deleteIndex","objectStoreNames","storeName","deleteObjectStore","deleteRemovedTables","runQueue","createMissingTables","updateTablesAndIndexes","createObjectStore","autoIncrement","auto","createIndex","multiEntry","multi","extractTransactionArgs","_tableArgs_","scopeFunc","Table","tableSchema","optionalTrans","schema","_tx","BulkErrorHandlerCatchAll","supportHooks","hookedEventRejectHandler","eventRejectHandler","_bulkDelete","idbstore","keysOrTuples","hasDeleteHook","deletingHook","lastItem","hookCtx","errorHandler","successHandler","hookedEventSuccessHandler","req","_hookCtx","Transaction","storeNames","_reculock","_blockedFuncs","_resolve","_waitingFor","_waitingQueue","_spinCount","wasActive","WhereClause","orCollection","_ctx","Collection","whereClause","keyRangeGenerator","keyRange","whereCtx","isPrimKey","keysOnly","replayFilter","justLimit","valueMapper","isPlainKeyRange","ignoreLimitFilter","lowerVersionFirst","setApiOnPlace","tableNames","iterate","wrappedFn","advancer","key1","key2","ascending","descending","simpleCompare","simpleCompareReverse","combine","filter1","filter2","indexNames","indexName","dexieName","indexSpec","WorkerGlobalScope","fireOnBlocked","_vcFired","Schema","verno","versionInstance","_stores","storesSpec","_parseStoresSpec","upgrade","upgradeFunction","outSchema","instanceTemplate","IndexSpec","parseIndexSyntax","compound","TableSchema","_allTables","parentTransaction","_whenReady","letThrough","resolveDbReady","upgradeTransaction","MissingAPI","onblocked","onupgradeneeded","transaction","_allowEmptyDB","delreq","deleteDatabase","NoSuchDatabase","safariMultiStoreFix","dotted","idbindex","readGlobalSchema","onversionchange","dbnames","put","vip","fireRemainders","remainders","hasArguments","doDelete","backendDB","isOpen","hasBeenClosed","hasFailed","dynamicallyOpened","bSticky","_transaction","onlyIfCompatible","SubTransaction","enterTransactionScope","transless","promiseFollowed","decrementor","awaitIterator","PrematureCommit","InvalidTable","_trans","writeLocked","tempTransaction","_idbstore","NotFound","keyOrCrit","where","indexOrCrit","keyPaths","compoundIndex","ix","kp","simpleIndex","toCollection","filterFunction","mapToClass","mappedClass","applyStructure","readHook","defineClass","bulkDelete","keys$$1","deleting","anyOf","bulkPut","objects","numObjs","creating","updating","eventSuccessHandler","effectiveKeys","objectLookup","modify","objsToAdd","keysToAdd","bulkAdd","lastAddedKey","lastEffectiveKey","creatingHook","effectiveKey","keyToUse","updatingHook","keyOrObject","_lock","lockOwnerFor","_unlock","fnAndPSD","OpenFailed","oncomplete","bWriteLock","ReadOnly","_root","waitFor","spin","currentWaitPromise","collectionOrWhereClause","emptyCollection","nextCasing","lowerKey","upperNeedle","lowerNeedle","llp","lwrKeyChar","addIgnoreCaseAlgorithm","needles","upperNeedles","lowerNeedles","nextKeySuffix","needlesLen","initDirection","upperFactory","lowerFactory","needleBounds","needle","bound","_ondirectionchange","firstPossibleNeedle","_addAlgorithm","advance","lowestPossibleCasing","casing","between","includeLower","includeUpper","above","lowerBound","aboveOrEqual","below","upperBound","belowOrEqual","startsWithIgnoreCase","equalsIgnoreCase","anyOfIgnoreCase","startsWithAnyOfIgnoreCase","notEqual","inAnyRange","includeLowers","includeUppers","noneOf","sortDirection","rangeSorter","keyIsBeyondCurrentEntry","keyIsBeforeCurrentEntry","checkKey","keyWithinCurrentRange","startsWithAnyOf","addFilter","addReplayFilter","isLimitFilter","curr","getIndexOrStore","openCursor","idxOrStore","openKeyCursor","iter","resolved","resolveboth","primaryKey","_iterate","lastPart","getval","sorter","aVal","bVal","readingHook","_offset2","offsetLeft","rowsLeft","bIncludeStopEntry","addMatchFilter","desc","eachKey","eachUniqueKey","eachPrimaryKey","primaryKeys","uniqueKeys","firstKey","lastKey","distinct","strKey","changes","modifyer","origItem","objectDiff","additionalChanges","numKeys","anythingModified","origChanges","iterationComplete","failKeys","currentKey","doReject","checkFinished","thisContext","bDelete","countReq","delReq","CHUNKSIZE","totalCount","nextChunk","newVersion","member","parseType","hookSuccessHandler","hookErrorHandler","callNext","getNext","keyPathSrc","getDatabaseNames","webkitGetDatabaseNames","databaseName","exists","NoSuchDatabaseError","ignoreTransaction","generatorFn","spawn","currentTransaction","promiseOrFunction","optionalTimeout","delByKeyPath","MultiModifyError","Modify","mozIndexedDB","webkitIndexedDB","msIndexedDB","webkitIDBKeyRange","semVer","domError","localStorage","getItem","removeItem","webpackContext","webpackContextResolve","ZipObject","NodejsStreamInputAdapter","fileAdd","forceTrailingSlash","parentFolder","folderAdd","isUnicodeString","zipObjectContent","optimizedBinaryString","lastSlash","filename","relativePath","folder","newFolder","kids","generateInternalStream","streamFiles","platform","encodeFileName","generateWorker","generateAsync","onUpdate","generateNodeStream","b64","lens","getLens","validLen","placeHoldersLen","Arr","_byteLength","curByte","revLookup","uint8","extraBytes","len2","encodeChunk","lookup","mLen","nBytes","eLen","eMax","eBias","nBits","rt","LN2","trace","REJECTED","FULFILLED","PENDING","outcome","safelyResolveThenable","QueueItem","callFulfilled","otherCallFulfilled","callRejected","otherCallRejected","getThen","thenable","called","allResolver","outValue","scheduleDrain","Mutation","WebKitMutationObserver","observer","characterData","scriptEl","oldQueue","destType","_helper","_dataBinary","internalStream","askUnicodeString","_decompressWorker","nodeStream","_compressWorker","removedMethods","removedFn","compressions","ZipFileWorker","zipFileWorker","entriesCount","fileCompression","zipCompression","compressionName","getCompression","USE_TYPEDARRAY","Uint32Array","pako","ARRAY_TYPE","FlateWorker","_pako","_pakoAction","_pakoOptions","_createPako","onData","zlib_deflate","strings","ZStream","Deflate","windowBits","memLevel","strategy","gzip","strm","deflateInit2","deflateSetHeader","dictionary","dict","deflateSetDictionary","_dict_set","deflate","deflator","onEnd","deflateEnd","deflateRaw","configuration_table","trees","adler32","MAX_MEM_LEVEL","MAX_WBITS","DEF_MEM_LEVEL","L_CODES","LITERALS","D_CODES","BL_CODES","HEAP_SIZE","MAX_BITS","MIN_MATCH","MAX_MATCH","MIN_LOOKAHEAD","PRESET_DICT","INIT_STATE","EXTRA_STATE","NAME_STATE","COMMENT_STATE","HCRC_STATE","BUSY_STATE","FINISH_STATE","BS_NEED_MORE","BS_BLOCK_DONE","BS_FINISH_STARTED","BS_FINISH_DONE","OS_CODE","errorCode","rank","flush_pending","pending_buf","pending_out","flush_block_only","_tr_flush_block","block_start","strstart","put_byte","putShortMSB","longest_match","cur_match","chain_length","max_chain_length","scan","best_len","prev_length","nice_match","w_size","_win","wmask","w_mask","strend","scan_end1","scan_end","good_match","lookahead","match_start","fill_window","more","_w_size","window_size","hash_size","ins_h","hash_shift","hash_mask","deflate_fast","hash_head","bflush","match_length","_tr_tally","max_lazy_match","last_lit","deflate_slow","max_insert","prev_match","match_available","Config","good_length","max_lazy","nice_length","max_chain","DeflateState","pending_buf_size","gzhead","gzindex","last_flush","w_bits","hash_bits","dyn_ltree","dyn_dtree","bl_tree","l_desc","d_desc","bl_desc","bl_count","heap","heap_len","heap_max","l_buf","lit_bufsize","d_buf","opt_len","static_len","bi_buf","bi_valid","deflateResetKeep","_tr_init","deflateReset","max_block_size","max_start","deflateInit","old_flush","beg","hcrc","os","bstate","deflate_huff","deflate_rle","_tr_align","_tr_stored_block","avail","tmpDict","dictLength","deflateInfo","STORED_BLOCK","STATIC_TREES","DYN_TREES","LENGTH_CODES","Buf_size","MAX_BL_BITS","END_BLOCK","REP_3_6","REPZ_3_10","REPZ_11_138","extra_lbits","extra_dbits","extra_blbits","bl_order","static_ltree","static_dtree","_dist_code","_length_code","base_length","static_l_desc","static_d_desc","static_bl_desc","base_dist","StaticTreeDesc","static_tree","extra_bits","extra_base","max_length","has_stree","TreeDesc","dyn_tree","stat_desc","max_code","d_code","dist","put_short","send_bits","send_code","bi_reverse","gen_codes","next_code","init_block","bi_windup","smaller","_n2","_m2","pqdownheap","compress_block","ltree","dtree","lc","lx","build_tree","stree","xbits","gen_bitlen","scan_tree","curlen","prevlen","nextlen","max_count","min_count","send_tree","static_init_done","stored_len","copy_block","tr_static_init","opt_lenb","static_lenb","max_blindex","black_mask","detect_data_type","build_bl_tree","lcodes","dcodes","blcodes","send_all_trees","bi_flush","zlib_inflate","GZheader","Inflate","inflateInit2","inflateGetHeader","inflateSetDictionary","inflate","inflator","next_out_utf8","utf8str","allowBufError","inflateEnd","inflateRaw","ungzip","inflate_fast","inflate_table","CODES","LENS","DISTS","Z_MEM_ERROR","HEAD","FLAGS","OS","EXLEN","EXTRA","COMMENT","HCRC","DICTID","DICT","TYPE","TYPEDO","STORED","COPY_","COPY","TABLE","LENLENS","CODELENS","LEN_","LEN","LENEXT","DIST","DISTEXT","MATCH","LIT","CHECK","LENGTH","DONE","BAD","MEM","SYNC","ENOUGH_LENS","ENOUGH_DISTS","DEF_WBITS","zswap32","InflateState","havedict","dmax","wbits","wsize","whave","wnext","lencode","distcode","lenbits","distbits","ncode","nlen","ndist","have","work","lendyn","distdyn","sane","back","was","inflateResetKeep","inflateReset","inflateReset2","lenfix","distfix","virgin","fixedtables","sym","updatewindow","inflateInit","_in","_out","from_source","here_bits","here_op","here_val","last_bits","last_op","last_val","here","hbuf","inf_leave","xflags","extra_len","inflateInfo","s_window","lcode","dcode","lmask","dmask","op","dolen","dodist","lbase","lext","dbase","dext","lens_index","codes","table_index","incr","huff","base_index","MAXBITS","offs","extra_index","decToHex","dec","hex","generateZipParts","streamedContent","streamingEnded","dosTime","dosDate","useCustomEncoding","encodedFileName","utfEncodedFileName","encodedComment","utfEncodedComment","useUTF8ForFileName","useUTF8ForComment","extraFields","unicodePathExtraField","unicodeCommentExtraField","dataInfo","bitflag","isDir","extFileAttr","versionMadeBy","fileRecord","dirRecord","generateDataDescriptors","bytesWritten","zipComment","zipPlatform","contentBuffer","dirRecords","currentSourceOffset","currentFile","_sources","currentFilePercent","remainingFiles","openedSource","record","closedSource","localDirLength","centralDirLength","dirEnd","generateCentralDirectoryEnd","prepareNextSource","_upstreamEnded","_bindStream","_stream","ZipEntries","checkEntryCRC32","zipEntry","decompressed","checkCRC32","decodeFileName","zipEntries","promises","fileNameStr","fileCommentStr","readerFor","ZipEntry","loadOptions","checkSignature","expectedSignature","isSignature","askedIndex","currentIndex","readBlockEndOfCentral","diskNumber","diskWithCentralDirStart","centralDirRecordsOnThisDisk","centralDirRecords","centralDirSize","centralDirOffset","zipCommentLength","decodeParamType","decodeContent","readBlockZip64EndOfCentral","zip64EndOfCentralSize","zip64ExtensibleData","extraFieldId","extraFieldLength","extraFieldValue","extraDataSize","readBlockZip64EndOfCentralLocator","diskWithZip64CentralDirStart","relativeOffsetEndOfZip64CentralDir","disksCount","readLocalFiles","localHeaderOffset","readLocalPart","handleUTF8","processAttributes","readCentralDir","zip64","readCentralPart","readEndOfCentral","endOfCentralDirOffset","expectedEndOfCentralDirOffset","prepareReader","crc32fn","isEncrypted","bitFlag","useUTF8","localExtraFieldsLength","fileNameLength","fileName","compressionMethod","findCompression","extraFieldsLength","fileCommentLength","diskNumberStart","internalFileAttributes","externalFileAttributes","readExtraFields","parseZIP64ExtraField","fileComment","madeBy","extraReader","upath","findExtraFieldUnicodePath","fileNameByteArray","ucomment","findExtraFieldUnicodeComment","commentByteArray","upathField","ucommentField","fs","blank","Sheet","ContentTypes","AppProperties","CoreProperties","SharedStrings","StyleSheet","Encryptor","zipFileOpts","xmlParser","xmlBuilder","encryptor","badSheetNameChars","_initAsync","readFile","_activeSheet","_sheets","tabSelected","indexOrBeforeSheet","_addSheet","scopedDefinedName","refersTo","visibleSheets","activeSheet","_setSheetRefs","definedNamesNode","_autoFilter","localSheetId","_sheetsNode","sheetPath","sheetRelsPath","sheetXmls","toXmls","_relationships","findById","_zip","relationshipsXml","relationships","_contentTypes","_appProperties","_coreProperties","_sharedStrings","_convertBufferToOutput","sheetNameOrIndex","outputAsync","writeFile","sheetScope","definedNameNode","localSheet","cloneXml","chld","fromXml","sheetNode","relationshipNode","getTemplateNodes","_char","relationship","sheetIdNode","sheetId","_maxSheetId","_getTemplateNodes","_convertInputToBufferAsync","decryptAsync","decrypted","_parseNodesAsync","contentTypesNode","appPropertiesNode","corePropertiesNode","relationshipsNode","sharedStringsNode","styleSheetNode","workbookNode","findByType","findByPartName","sheetRelationshipsNode","_parseSheetRefs","_this7","texts","parseAsync","_this8","bookViewsNode","workbookViewNode","activeTabId","activeTab","_this9","fileReader","Row","Column","PageBreaks","idNode","sheetViewNode","_getOrCreateSheetViewNode","selectionNode","cellAddress","columnNameOrNumber","sqref","_columns","colNode","existingColNode","_colNodes","beforeColNode","afterColNode","deleteSheet","_rows","showGridLines","_idNode","sheets","moveSheet","startCell","endCell","startColumnNameOrNumber","endColumnNameOrNumber","tabColorNode","_sheetPrNode","tabColor","_this10","minRowNumber","maxRowNumber","minColumnNumber","maxColumnNumber","minUsedColumnNumber","maxUsedColumnNumber","_workbook","_pageBreaks","colBreaks","rowBreaks","sharedFormulaId","_this11","hyperlinkNode","_hyperlinks","internal","nodeAttributes","email","subject","emailSubject","encodeURI","tooltip","_maxSharedFormulaId","_this12","_mergeCells","_this13","_dataValidations","allowBlank","showInputMessage","promptTitle","showErrorMessage","errorTitle","formula1","formula2","atrributes","_this14","_colsNode","_hyperlinksNode","_printOptionsNode","_pageMarginsNode","_pageMarginsPresetName","_pageMarginsPresets","_mergeCellsNode","_dataValidationsNode","breaks","_this15","supportedAttributeNames","checkAttributeName","_getCheckAttributeNameHelper","attributeName","attributeEnabled","printOptions","_this16","enabled","_this17","pageMarginsPreset","checkRange","_getCheckRangeHelper","attributeValue","attributeNumberValue","attributeStringValue","pageMargins","_this18","presetName","checkPresetName","presetAttributes","_this19","supportedStates","supportedActivePanes","checkStateName","checkActivePane","paneNode","paneAttributes","activePane","_this20","xSplit","ySplit","topLeftCell","panes","functionName","valueType","valueMin","valueMax","checkType","_getCheckTypeHelper","sheetViewsNode","workbookViewId","_this21","_sheetDataNode","mergeCellNodes","mergeCellNode","dataValidationNodes","dataValidationNode","hyperlinkNodes","normal","wide","narrow","manualBreakCount","_colBreaksNode","_rowBreaksNode","richText","_richText","_valueNode","hasLineSeparator","_sheet","_cells","rowStyleId","columnStyleId","existingColumnStyleId","customHeight","ht","_createStyleIfNeeded","_createCellStylesIfNeeded","customFormat","horizontalPageBreaks","sharesFormula","forEachExistingColumnNumber","cellNode","forEachExistingRow","hasStyle","hasCell","_width","customWidth","verticalPageBreaks","_startCell","_endCell","_findRangeExtent","ri","ci","_minRowNumber","_minColumnNumber","autoFilter","_numRows","_numColumns","getSharedRefFormula","incrementMaxSharedFormulaId","setSharedFormula","_merged","merged","initialValue","_maxRowNumber","_maxColumnNumber","man","brk","isManual","partName","PartName","ContentType","docSecurityNode","allowedProperties","author","creator","description","keywords","category","_properties","_stringArray","_indexMap","_cacheExistingSharedStrings","uniqueCount","STANDARD_CODES","11","14","15","16","17","18","19","21","22","37","38","39","45","46","47","48","49","_cacheNumberFormats","sourceId","sourceXfNode","_cellXfsNode","applyFont","fontId","_fontsNode","applyFill","fillId","_fillsNode","applyBorder","borderId","_bordersNode","_numberFormatCodesById","_numberFormatIdsByCode","_nextNumFormatId","_numFmtsNode","cfb","ENCRYPTION_INFO_PREFIX","BLOCK_KEYS","dataIntegrity","hmacKey","hmacValue","verifierHash","packageKey","encryptionInfo","cipherAlgorithm","cipherChaining","saltValue","hashAlgorithm","hashSize","spinCount","encryptedPackage","_cryptPackage","hmacKeyIV","_createIV","encryptedHmacKey","_crypt","_hmac","hmacValueIV","encryptedHmacValue","_convertPasswordToKey","encryptedKeyValue","verifierHashInput","verifierHashInputKey","encryptedVerifierHashInput","verifierHashValue","verifierHashValueKey","encryptedVerifierHashValue","encryptionInfoBuffer","_buildEncryptionInfo","cfb_new","cfb_add","cfb_del","FileIndex","encryptedPackageBuffer","_parseEncryptionInfoAsync","encryptionInfoNode","saltSize","uri","encryptionInfoXml","keyDataNode","keyEncryptorsNode","keyEncryptorNode","encryptedKeyNode","hashes","getHashes","buffers","createHmac","_len2","_key2","outputChunks","inputChunk","outputChunk","_createUInt32LEBuffer","bufferSize","blockKey","passwordBuffer","keyBytes","Base64","e1","e2","e3","e4","has_buf","Buffer_from","nbfs","new_raw_buf","new_unsafe_buf","s2a","chr0","__toBuffer","bufs","___toBuffer","__utf16le","__readUInt16LE","___utf16le","__hexlify","___hexlify","__bconcat","maxlen","bconcat","__readUInt8","__readInt16LE","__readUInt32LE","__readInt32LE","ReadShift","oI","oS","CRC32","__writeUInt32LE","__writeInt32LE","WriteShift","cc","CheckField","hexstr","fld","prep_blob","read_shift","chk","write_shift","new_buf","sz","signed_crc_table","bstr","crc32_buf_8","dirname","write_dos_date","hms","getHours","getMinutes","getSeconds","ymd","parse_extra_field","tgt","mtime","atime","ctime","mt","get_fs","parse_zip","mver","nmfs","difat_sec_cnt","dir_start","minifat_start","difat_start","ssz","fat_addrs","mv","HEADER_SIGNATURE","check_get_mver","check_shifts","dir_cnt","sectors","nsectors","sectorify","sleuth_fat","cnt","ENDOFCHAIN","sector","sector_list","chkd","buf_chain","jj","addr","make_sector_list","Paths","FullPaths","mini","minifat_store","pl","namelen","clsid","read_date","storage","get_sector_list","get_mfat_entry","read_directory","FI","FP","dad","build_full_paths","payload","MSSZ","init_cfb","CLSID","nm","rebuild_cfb","seed_cfb","gc","_file","HEADER_CLSID","Z","namecmp","elt","_opts","fileType","cdirs","start_cd","fcnt","fp","fi","crcs","sz_cd","namebuf","outbuf","_zlib","deflateRawSync","_deflate","write_zip","mini_size","fat_size","flen","mfat_cnt","fat_base","fat_cnt","difat_cnt","HEADER_SIG","chainit","consts","DIFSECT","FATSECT","_nm","MAXREGSECT","FREESECT","HEADER_MINOR_VERSION","MAXREGSID","NOSTREAM","EntryTypes","a2s","CLEN_ORDER","LEN_LN","DST_LN","use_typed_arrays","bitswap8","bit_swap_n","rev","read_bits_2","read_bits_3","read_bits_5","read_bits_7","read_bits_n","realloc","zero_fill_array","_deflateRaw","boff","clens","cmap","MAX","ccode","ctree","cleni","fix_lmap","fix_dmap","dlens","dyn_lmap","dyn_dmap","dyn_cmap","dyn_len_1","dyn_len_2","dyn","_HLIT","_HDIST","_HCLEN","read_bits_4","hcodes","h1","h2","_inflate","usz","woff","OL","max_len_1","max_len_2","len_eb","dst_eb","warn_or_throw","wrn","csz","efsz","fcsz","EF","parse_local_file","meth","setMilliseconds","setMinutes","setSeconds","parse_dos_date","_csz","_usz","ef","InflRaw","InflateRaw","_processChunk","_finishFlushFlag","bytesRead","_inflateRawSync","_crc32","unsafe","fpath","cfb_gc","UCFullPaths","UCPaths","UCPath","readFileSync","read_file","writeFileSync","cfb_mov","old_name","new_name","use_zlib","zlib","_inflateRaw","DO_NOT_EXPORT_CFB","rng","pseudoRandomBytes","prng","algos","algoKeys","DiffieHellmanGroup","createDiffieHellmanGroup","getDiffieHellman","createDiffieHellman","DiffieHellman","createSign","Sign","createVerify","Verify","createECDH","publicEncrypt","privateEncrypt","publicDecrypt","privateDecrypt","rf","randomFill","randomFillSync","createCredentials","Sha","rotl30","ft","Sha1","rotl5","Sha224","Sha384","ZERO_BUF","subtle","toBrowser","checks","browserPbkdf2","importKey","deriveBits","resolvePromise","prom","checkNative","resp","aesModes","desModes","ebtk","suite","des","instantiate","modeName","_des","des3","ip","inL","inR","outL","outR","rip","pc1","r28shl","pc2table","pc2","sTable","substitute","permuteTable","padSplit","bufferOff","_updateDecrypt","_updateEncrypt","_buffer","_flushBuffer","inputOff","outputOff","_finalEncrypt","_finalDecrypt","_unpad","DESState","_desState","deriveKeys","shiftTable","kL","kR","inOff","outOff","_encrypt","lStart","rStart","keyL","keyR","CBCState","_cbcInit","_cbcState","superProto","EDEState","k3","_edeState","MODES","AuthCipher","Splitter","_autopadding","thing","PADDING","setTo","padBuff","encryptStart","encryptByte","byteParam","shiftIn","ZEROES","fromArray","_multiply","lsbVi","Vi","Zi","abl","_last","unpad","autoPadding","DH","ENCODINGS","generator","genc","generatePrime","SEVEN","setPublicKey","pub","_pub","setPrivateKey","_priv","primeCache","malleable","setGenerator","__prime","_primeLen","_primeCode","formatReturnValue","checkPrime","__gen","generateKeys","_gen","getPublicKey","computeSecret","secret","getPrime","front","getPrivateKey","getGenerator","verify","algorithms","_hashType","_tag","_signType","EC","getKey","hlen","hbits","bits2int","bits2octets","obits","makeKey","kv","makeR","hashType","signType","curveId","keyFromPrivate","toDER","ecSign","dsaSign","ShortCurve","tinv","zeroA","threeA","endo","_getEndomorphism","_endoWnafT1","_endoWnafT2","Point","isRed","inf","JPoint","zOne","betas","_getEndoRoots","lambdas","vec","_getEndoBasis","ntinv","prevR","aprxSqrt","y1","y2","len1","_endoSplit","v1","v2","q1","q2","ax","rhs","_endoWnafMulAdd","npoints","ncoeffs","fromJSON","endoMul","obj2point","nx","ny","ys1","dyinv","mulAdd","jmulAdd","_precompute","zinv","zinv2","ay","pz2","z2","h3","nz","jx","jy","jz","jz4","jyd","jx2","jyd2","jyd4","dny","_zeroDbl","_threeDbl","_dbl","xx","yyyy","yyyy8","c8","gamma","beta4","beta8","ggamma8","jy2","jxd4","jyd8","trpl","zz","ee","yyu4","kbase","z3","pz3","eqXToP","zs","xc","MontCurve","i4","a24","normalize","aa","bb","diffAdd","da","jumlAdd","EdwardsCurve","twisted","mOneA","oneC","_mulA","_mulC","lhs","pointFromY","_extDbl","nt","_projDbl","_extAdd","_projAdd","zi","sha1_K","SHA1","SHA224","SHA384","Kh","Ah","Bh","Dh","Eh","rh","sh","HmacDRBG","KeyPair","Signature","nh","keyPair","fromPrivate","keyFromPublic","fromPublic","genKeyPair","drbg","pers","persEnc","entropy","entropyEnc","ns2","_truncateToN","truncOnly","bkey","getPrivate","ns1","kpX","recoveryParam","canonical","sinv","getPublic","recoverPubKey","isYOdd","isSecondKey","rInv","getKeyRecoveryParam","Q","Qprime","predResist","minEntropy","_reseed","reseedInterval","V","nonceEnc","kmac","reseed","addEnc","_importPrivate","privEnc","_importPublic","pubEnc","_importDER","Position","place","getLength","octetLen","rmPadding","constructLength","octets","slen","backHalf","EDDSA","pointClass","encodingLength","keyFromSecret","hashInt","Rencoded","encodePoint","s_","pubBytes","makeSignature","SG","fromSecret","lastIx","normed","xIsOdd","encodeInt","decodeInt","isPoint","_secret","_pubBytes","privBytes","getSecret","_R","_S","_Rencoded","_Sencoded","Sencoded","toBytes","seq","use","AlgorithmIdentifier","bitstr","null_","optional","PrivateKeyInfo","octstr","EncryptedPrivateKeyInfo","explicit","ECParameters","choice","namedCurve","Entity","_createNamed","named","runInThisContext","_initNamed","Object_keys","defineProp","globals","Context","Script","iframe","contentWindow","wEval","eval","wExecScript","execScript","winKeys","runInNewContext","createContext","isContext","createScript","ReporterError","rethrow","pathLen","enterKey","exitKey","leaveKey","enterObject","leaveObject","wrapResult","captureStackTrace","tags","methods","reverseArgs","useDecoder","implicit","_wrap","stateProps","cstate","_useArgs","newKey","prevObj","present","prevKey","_decodeGeneric","_decodeChoice","track","_getUse","_encodeChoice","_encodePrimitive","pem","PEMDecoder","lines","label","PEMEncoder","asn","Time","utcTime","utctime","generalTime","gentime","AttributeTypeValue","SubjectPublicKeyInfo","RelativeDistinguishedName","setof","RDNSequence","seqof","Name","rdnSequence","Validity","Extension","TBSCertificate","X509Certificate","findProc","startRegex","fullRegex","evp","okey","cipherKey","checkValue","pubkey","ecVerify","unpacked","montp","dsaVerify","padNum","ECDH","secp256k1","secp224r1","prime256v1","prime192v1","ed25519","secp384r1","secp521r1","curveType","p256","secp256r1","secp192r1","p384","p521","inenc","mgf","withPublic","publicKey","iHash","hLen2","ps","dblen","maskedDb","maskedSeed","oaep","nonZero","pkcs1","zBuffer","dif","oldBrowser","safeBuffer","randombytes","kBufferMaxLength","kMaxUint32","assertOffset","actualFill","ourBuf","uint","SAXParser","SAXStream","createStream","MAX_BUFFER_LENGTH","clearBuffers","bufferCheckPosition","lowercasetags","looseCase","closed","closedRoot","sawRoot","noscript","BEGIN","strictEntities","ENTITIES","XML_ENTITIES","attribList","rootNS","trackPosition","line","EVENTS","_end","BEGIN_WHITESPACE","beginWhiteSpace","TEXT","starti","textNode","isWhitespace","strictFail","TEXT_ENTITY","OPEN_WAKA","startTagPosition","SCRIPT","SCRIPT_ENDING","CLOSE_TAG","SGML_DECL","sgmlDecl","nameStart","OPEN_TAG","tagName","PROC_INST","procInstName","procInstBody","CDATA","emitNode","cdata","DOCTYPE","doctype","isQuote","SGML_DECL_QUOTED","DOCTYPE_DTD","DOCTYPE_QUOTED","DOCTYPE_DTD_QUOTED","COMMENT_ENDING","COMMENT_ENDED","textopts","CDATA_ENDING","CDATA_ENDING_2","PROC_INST_ENDING","PROC_INST_BODY","nameBody","newTag","openTag","OPEN_TAG_SLASH","ATTRIB","closeTag","attribName","attribValue","ATTRIB_NAME","ATTRIB_VALUE","attrib","ATTRIB_NAME_SAW_WHITE","ATTRIB_VALUE_QUOTED","ATTRIB_VALUE_UNQUOTED","ATTRIB_VALUE_ENTITY_Q","ATTRIB_VALUE_CLOSED","isAttribEnd","ATTRIB_VALUE_ENTITY_U","CLOSE_TAG_SAW_WHITE","notMatch","returnState","parseEntity","entityBody","entityStart","maxAllowed","maxActual","closeText","checkBufferLength","streamWraps","_parser","SD","XML_NAMESPACE","XMLNS_NAMESPACE","stringFromCharCode","fromCodePoint","STATE","COMMENT_STARTING","qname","qualName","qn","selfClosing","nv","isSelfClosing","closeTo","entityLC","numStr","highSurrogate","lowSurrogate","MAX_SIZE","codeUnits","toggleButton","buttonElement","selectElement","all_checkbox","updateSubmitButtonState","anyChecked","checkboxes","submit_btn","error_message","loadingGif","checked_all","form","querySelector","URLSearchParams","FormData","ok","revokeObjectURL","facilityIds","facilityid","searchInput","noMatchMessage","hasMatch","mynumber_updated","mynumber_user_id","close_flg","old_mynumber","mynumber","data_stringify","data_json","my_status","my_expires_on","modal","targetId","datetimepicker","dayViewHeaderFormat","showClose","titleFormat","columnFormat","contentHeight","timeGridEventMinHeight","unselectCancel","weekMode","slotMinutes","snapMinutes","events_url","pathname","end_on","closed_day","textStatus","reload","disableDragging","$this","$form","prices_edit","prices_show","optional_prices_show","select_price","AJAX_STATUS_NONE","AJAX_STATUS_INPROGRESS","AJAX_STATUS_RETRIGGER","AJAX_STATUS_WAIT_TO_RENDER","g_calendar_events","data_to_render","render_timeout_id","fullcalendar_events_handler","calendar_el","get_id","console_log","ajax_log","log_data","events_log","render_events","ajax_id","ajax_error_handler","ajax_complete_handler","ajax_success_handler","trigger_event_ajax","ajax_data","user_id","requested_setting_id","timeout_id","query","add_date","defaultDate","eventRender","role","formattedDate","eventStatus","iconElement","type_array","post_type","delete_type","method_type","RESERVATION_NEW_ENTRY_PARAM","dayClick","selectedCell","allEvents","eventDetailsContainer","selectedDateContainer","s_DATE","eventElement","background_color","lastEvent","scrollIntoView","behavior","application_starts_at_modal","application_ends_at_modal","raffle_ineligible_notice","notice","ajax_method","previewImage","img","Image","readAsDataURL","mail_template_keyword_to_clipboard","keyword","elm","selectNodeContents","getSelection","removeAllRanges","addRange","setSelectionRange","execCommand","getWorkbook","cells","msSaveOrOpenBlob","generateBlob","slick","dots","slidesToShow","arrows","autoplay","autoplaySpeed","centerMode","slidesToScroll","infinite","initialSlide","variableWidth","centerPadding","$el","reservation_to_clipboard","$copydata","$copytmp","$exemption_percent","selectNode","$target","repeat_type","start_at","end_at","keypress","$checkbox","do_all","do_id","do_id_checked","checkbox_manual_payment","confirm_payment_block","approve","confirm_payment","step_progress","footer_left","footer_right","action_type","confirm_button","reason_field","g_reservation_slot","is_search_form","is_export_form","is_export_reservable_form","search_form_fini","ReservationForm","model_name","form_root_sel","submit_sel","form_el","disp_block_el","disp_block_sel","control_el","control_sel","control_arr_el","control_arr_sel","all_el","all_sel","submit_el","all_val","all_checked","select2_controls","facility","room_name","term","select2_arg","ajax_arg","prev_facility_id","set_select_options","all_facility_requested_settings","init_checkbox_all","search_form_init","start_on_el","end_on_el","switch_export_background","start_time","end_time","nroom","reservable_slot_background_threshold","is_background","rails","refreshCSRFTokens","nextSource","keysArray","nextKey","add_all_users","reservation_take_method","processResults","multiple","raffle_id","dropdownParent","_37","_12","_59","_99","makeRequestCallFromTimer","requestFlush","room_is_group_changed","reservation_method_changed","lock_type_load_setting","pre_edit_room_submit","sort_by_text","val_a1","val_a2","val_b1","val_b2","use_report_el","use_report_template_id_el","val_group","val_method","msgFlg","g_belongs_to_group","g_previous_reservation_take_method","checkMoveFlg","requested_setting_toggleButton","fixture_type","raffle_calendar_el","raffle_calendar","roomInfo","media","sidenav_change","sidenav_container_width","sidenav","use_report_model","use_report_form_sel","use_report_form_el","g_rooms_use_report_templates","do_submit","map_el","btoa","dialog_sel","update_room_use_report","button_yes","button_no","showModal","adjust_room_list","$rooms","delete_facility_room","searchParams","history","replaceState","raffle_application_start_type_changed","raffle_date_type_changed","facility_raffle_publication_date_types","icon","classList","Papa","use_report_template_options_el","set_use_report_template_options_order_id","order_id","use_report_template_option_title","set_remove_use_report_template_option_hander","add_use_report_template_option","use_report_template_id","confirmation_text","option_template_el","option_el","g_use_report_template_options","g_max_confirmations","g_use_report_template_id","sparkMd5","createCommonjsModule","hex_chr","md5cycle","md5blk","md5blks","md5blk_array","md51","rhex","toUtf8","hexToBinaryString","SparkMD5","targetArray","sourceArray","begin","appendBinary","_buff","buff","_finish","getState","setState","hashBinary","returnUInt8Array","utf8Str2ArrayBuffer","md51_array","classCallCheck","createClass","defineProperties","fileSlice","FileChecksum","chunkCount","chunkIndex","md5Buffer","fileReaderDidLoad","fileReaderDidError","readNextChunk","binaryDigest","base64digest","findElement","eventInit","toArray$1","BlobRecord","checksum","content_type","byte_size","csrfToken","getMetaValue","requestDidLoad","requestDidError","direct_upload","directUploadData","_xhr","BlobUpload","_blob$directUploadDat","DirectUpload","upload","messages","DirectUploadController","directUpload","hiddenInput","insertAdjacentElement","dispatchError","signed_id","loaded","uploadRequestDidProgress","inputSelector","DirectUploadsController","inputs","controllers","createDirectUploadControllers","startNextController","controller","processingAttribute","submitButtonsByForm","started","didClick","didSubmitForm","didSubmitRemoteElement","handleFormSubmissionEvent","hasAttribute","enable","submitForm","ActiveStorage","isBrowser","timeoutDuration","longerTimeoutBrowsers","scheduled","functionToCheck","getStyleComputedProperty","getParentNode","_getStyleComputedProp","getReferenceNode","referenceNode","isIE11","MSInputMethodContext","documentMode","isIE10","isIE","getOffsetParent","noOffsetParent","nextElementSibling","getRoot","findCommonOffsetParent","element1","element2","DOCUMENT_POSITION_FOLLOWING","setStart","setEnd","commonAncestorContainer","element1root","getScroll","upperSide","scrollingElement","getBordersSize","axis","sideA","sideB","getSize","computedStyle","getWindowSizes","_extends","offsets","horizScrollbar","vertScrollbar","getOffsetRectRelativeToArbitraryNode","fixedPosition","isHTML","childrenRect","parentRect","borderTopWidth","borderLeftWidth","marginTop","modifier","includeScroll","getFixedPositionOffsetParent","parentElement","getBoundaries","popper","boundariesElement","boundaries","excludeScroll","relativeOffset","innerHeight","getViewportOffsetRectRelativeToArtbitraryNode","boundariesNode","isFixed","_getWindowSizes","isPaddingNumber","computeAutoPlacement","placement","refRect","rects","sortedAreas","area","_ref","filteredAreas","_ref2","computedPlacement","variation","getReferenceOffsets","getOuterSizes","marginBottom","marginRight","getOppositePlacement","getPopperOffsets","referenceOffsets","popperRect","popperOffsets","isHoriz","mainSide","secondarySide","measurement","secondaryMeasurement","runModifiers","modifiers","ends","isModifierEnabled","modifierName","getSupportedPropertyName","prefixes","upperProp","toCheck","getWindow","setupEventListeners","updateBound","scrollElement","attachToScrollParents","scrollParents","isBody","eventsEnabled","disableEventListeners","cancelAnimationFrame","scheduleUpdate","setStyles","isFirefox","isModifierRequired","requestingName","requestedName","requesting","isRequired","_requesting","requested","placements","validPlacements","clockwise","counter","BEHAVIORS","FLIP","CLOCKWISE","COUNTERCLOCKWISE","parseOffset","basePlacement","useHeight","fragments","frag","divider","splitRegex","ops","mergeWithPrevious","toValue","index2","Defaults","positionFixed","removeOnDestroy","onCreate","shiftvariation","_data$offsets","shiftOffsets","preventOverflow","transformProp","popperStyles","primary","escapeWithReference","secondary","keepTogether","opSide","arrow","_data$offsets$arrow","arrowElement","sideCapitalized","altSide","arrowElementSize","popperMarginSide","popperBorderSide","sideValue","flipped","originalPlacement","placementOpposite","flipOrder","refOffsets","overlapsRef","overflowsLeft","overflowsRight","overflowsTop","overflowsBottom","overflowsBoundaries","flippedVariationByRef","flipVariations","flippedVariationByContent","flipVariationsByContent","flippedVariation","getOppositeVariation","subtractLength","computeStyle","legacyGpuAccelerationOption","gpuAcceleration","offsetParentRect","shouldRound","noRound","referenceWidth","popperWidth","isVariation","horizontalToInteger","verticalToInteger","getRoundedOffsets","devicePixelRatio","prefixedProperty","willChange","invertTop","invertLeft","arrowStyles","applyStyle","onLoad","modifierOptions","Popper","isDestroyed","isCreated","enableEventListeners","Utils","PopperUtils","Rails","linkClickSelector","buttonClickSelector","exclude","inputChangeSelector","formSubmitSelector","formInputClickSelector","formDisableSelector","formEnableSelector","fileInputSelector","linkDisableSelector","buttonDisableSelector","loadCSPNonce","cspNonce","Element","csrfParam","CSRFProtection","initCustomEvent","stopEverything","eventType","AcceptHeaders","createXHR","prepareOptions","processResponse","OPENED","isCrossDomain","serializeElement","additionalParam","formElements","allowAction","handleConfirm","answer","disableFormElement","disableFormElements","disableLinkElement","enableFormElement","enableFormElements","enableLinkElement","isXhrRedirect","handleDisabledElement","enableElement","disableElement","originalText","handleMethod","formContent","isRemote","handleRemote","enctype","formSubmitButtonClick","formNoValidate","preventInsignificantClick","insignificantMetaClick","_rails_loaded","Turbolinks","supported","pushState","visit","setProgressBarDelay","ELEMENT_NODE","Location","absoluteURL","requestURL","getOrigin","getPath","getPathComponents","getLastPathComponent","getExtension","isPrefixedBy","isEqualTo","toCacheKey","_t","HttpRequest","requestCanceled","requestTimedOut","requestFailed","requestLoaded","requestProgressed","referrer","NETWORK_FAILURE","TIMEOUT_FAILURE","sent","notifyApplicationBeforeRequestStart","setProgress","requestStarted","lengthComputable","endRequest","requestCompletedWithResponse","failed","requestFailedWithStatusCode","notifyApplicationAfterRequestEnd","onprogress","requestFinished","_t2","ProgressBar","trickle","stylesheetElement","createStylesheetElement","progressElement","createProgressElement","defaultCSS","installStylesheetElement","installProgressElement","startTrickling","hiding","fadeProgressElement","uninstallProgressElement","stopTrickling","setValue","refresh","trickleInterval","_t3","BrowserAdapter","showProgressBar","progressBar","visitProposedToLocationWithAction","startVisitToLocationWithAction","visitStarted","issueRequest","changeHistory","loadCachedSnapshot","visitRequestStarted","hasCachedSnapshot","showProgressBarAfterDelay","visitRequestProgressed","visitRequestCompleted","loadResponse","visitRequestFailedWithStatusCode","visitRequestFinished","hideProgressBar","visitCompleted","followRedirect","pageInvalidated","progressBarTimeout","progressBarDelay","_t4","History","onPageLoad","onPopState","shouldHandlePopState","turbolinks","restorationIdentifier","historyPoppedToLocationWithRestorationIdentifier","pageLoaded","pageIsLoaded","HeadDetails","outerHTML","tracked","fromHeadElement","hasElementWithKey","getTrackedElementSignature","getScriptElementsNotInDetails","getElementsMatchingTypeNotInDetails","getStylesheetElementsNotInDetails","getProvisionalElements","findMetaElementByName","Snapshot","headDetails","bodyElement","fromHTMLString","fromHTMLElement","getRootLocation","getSetting","getCacheControlValue","getElementForAnchor","getPermanentElements","getPermanentElementById","getPermanentElementsPresentInSnapshot","findFirstAutofocusableElement","hasAnchor","isPreviewable","isCacheable","isVisitable","Renderer","viewWillRender","newBody","viewRendered","invalidateView","viewInvalidated","createScriptElement","__super__","SnapshotRenderer","currentSnapshot","newSnapshot","isPreview","currentHeadDetails","newHeadDetails","currentBody","shouldRender","mergeHead","replaceBody","focusFirstAutofocusableElement","copyNewHeadStylesheetElements","copyNewHeadScriptElements","removeCurrentHeadProvisionalElements","copyNewHeadProvisionalElements","relocateCurrentBodyPermanentElements","activateNewBodyScriptElements","assignNewBody","replacePlaceholderElementsWithClonedPermanentElements","trackedElementsAreIdentical","getNewHeadStylesheetElements","getNewHeadScriptElements","getCurrentHeadProvisionalElements","getNewHeadProvisionalElements","getCurrentBodyPermanentElements","permanentElement","getNewBodyScriptElements","_t5","_t6","ErrorRenderer","newHead","replaceHeadAndBody","activateBodyScriptElements","getScriptElements","htmlElement","getSnapshot","snapshot","markAsPreview","renderSnapshot","renderError","_t7","ScrollManager","onScroll","scrollToElement","scrollToPosition","scrollPositionChanged","SnapshotCache","snapshots","touch","_t8","Visit","performScroll","adapter","timingMetrics","recordTimingMetric","cancelRender","visitFailed","historyChanged","shouldIssueRequest","getCachedSnapshot","getCachedSnapshotForLocation","cacheSnapshot","visitRendered","redirectedToLocation","followedRedirect","replaceHistoryWithLocationAndRestorationIdentifier","scrolled","scrollToRestoredPosition","scrollToTop","scrollToAnchor","restorationData","scrollPosition","getTimingMetrics","snapshotCached","_t9","Controller","clickBubbled","clickCaptured","scrollManager","startHistory","stopHistory","applicationAllowsVisitingLocation","locationIsVisitable","getRestorationDataForIdentifier","startVisit","pushHistoryWithLocationAndRestorationIdentifier","shouldCacheSnapshot","notifyApplicationBeforeCachingSnapshot","lastRenderedLocation","getCurrentRestorationData","notifyApplicationBeforeRender","currentVisit","notifyApplicationAfterRender","notifyApplicationAfterPageLoad","clickEventIsSignificant","getVisitableLinkForNode","getVisitableLocationForLink","applicationAllowsFollowingLinkToLocation","getActionForLink","notifyApplicationAfterClickingLinkToLocation","notifyApplicationBeforeVisitingLocation","notifyApplicationAfterVisitingLocation","timing","createVisit","isContentEditable","nodeIsVisitable","currentScript","channels","webpackEmptyContext","_handled","_deferreds","_setImmediateFn","_setUnhandledRejectionFn","customElements","registerElement","uid_","takeRecords","nodes_","removeTransientObservers","callback_","subtree","enqueue","records_","addedNodes","removedNodes","previousSibling","attributeNamespace","oldValue","transientObservedNodes","JsMutationObserver","ShadowDOMPolyfill","wrapIfNeeded","childList","attributeOldValue","attributeFilter","characterDataOldValue","removeListeners","addListeners","disconnect","addListeners_","removeListeners_","addTransientObserver","handleEvent","attrName","relatedNode","attrChange","MutationEvent","ADDITION","prevValue","_isPolyfilled","performance","webkitRequestAnimationFrame","mozRequestAnimationFrame","webkitCancelAnimationFrame","mozCancelAnimationFrame","WebComponents","CustomElements","addModule","initializeModules","hasNative","useNative","register","HTMLImports","shadowRoot","olderShadowRoot","IMPORT_LINK_TYPE","forDocumentTree","forSubtree","__upgraded__","__attached","attachedCallback","detachedCallback","dom","_URL","localName","DOCUMENT_FRAGMENT_NODE","groupEnd","__observer","baseURI","hasPolyfillMutations","hasThrottledAttached","createShadowRoot","watchShadow","__watched","upgradeDocumentTree","upgradeDocument","upgradeSubtree","upgradeAll","createdCallback","HTMLElement","HTMLTemplateElement","decorate","getRegisteredDefinition","upgradeWithDefinition","implementPrototype","_polyfilled","attributeChangedCallback","createElementNS","__name","lifecycle","ancestry","registry","reservedTagList","readyTime","elapsed","unwrapIfNeeded","__importsParsingHook","eager","Trix","ZERO_WIDTH_SPACE","NON_BREAKING_SPACE","OBJECT_REPLACEMENT_CHARACTER","composesExistingText","forcesObjectResizing","supportsInputEvents","InputEvent","BasicObject","proxyMethod","toMethod","toProperty","fromJSONString","hasSameConstructorAs","contentsForInspection","toJSONString","toUTF16String","UTF16String","getCacheKey","normalizeSpaces","normalizeNewlines","breakableWhitespacePattern","squishBreakableWhitespace","escapeHTML","summarizeStringChange","added","removed","_n","utf16String","codepoints","fromCodepoints","objectsAreEqual","arraysAreEqual","arrayStartsWith","spliceArray","summarizeArrayChange","getAllAttributeNames","getTextAttributeNames","getBlockAttributeNames","getBlockConfig","blockAttributes","getTextConfig","textAttributes","getListAttributeNames","listAttribute","_s","onElement","matchingSelector","withCallback","inPhase","findClosestElementFromNode","handleEventOnce","triggerEvent","elementMatchesSelector","untilNode","findInnerElement","innerElementIsActive","elementContainsNode","findNodeFromContainerAndOffset","TEXT_NODE","findElementFromContainerAndOffset","findChildIndexOfNode","removeNode","walkTree","onlyNodesOfType","usingFilter","expandEntityReferences","NodeFilter","SHOW_ELEMENT","SHOW_TEXT","SHOW_COMMENT","SHOW_ALL","createTreeWalker","makeElement","contenteditable","dataset","getBlockTagNames","blockTagNames","nodeIsBlockContainer","nodeIsBlockStartComment","nodeProbablyIsBlockContainer","nodeIsBlockStart","nodeIsCommentNode","COMMENT_NODE","nodeIsCursorTarget","nodeIsTextNode","trixCursorTarget","nodeIsAttachmentElement","AttachmentView","attachmentSelector","nodeIsEmptyTextNode","normalizeRange","rangeIsCollapsed","rangesAreEqual","initialize","connect","initialized","connectedCallback","disconnectedCallback","_n3","getDOMSelection","rangeCount","getDOMRange","getRangeAt","setDOMRange","selectionChangeObserver","startContainer","endContainer","dataTransferIsPlainText","dataTransferIsWritable","keyEventIsKeyboardCommand","fromCommonAttributesOfObjects","getKeysCommonToHash","ObjectGroup","asTree","groupObjects","canBeGrouped","canBeGroupedWith","getObjects","getDepth","ObjectMap","ElementStore","trixStoreKey","Operation","isPerforming","performing","hasPerformed","performed","hasSucceeded","succeeded","getPromise","perform","ucs2String","ucs2Length","fromUCS2String","offsetToUCS2Offset","offsetFromUCS2Offset","codePointAt","attachFiles","bullets","captionPlaceholder","heading1","link","numbers","outdent","redo","strike","undo","unlink","urlPlaceholder","GB","KB","MB","PB","TB","attachment","attachmentCaption","attachmentCaptionEditor","attachmentMetadata","attachmentMetadataContainer","attachmentName","attachmentProgress","attachmentSize","attachmentToolbar","attachmentGallery","nestable","terminal","breakOnReturn","plaintext","bulletList","bullet","numberList","exclusive","fileSize","formatter","inheritable","fontStyle","groupTagName","frozen","serializers","Document","fromHTML","toSerializableDocument","DocumentView","deserializers","serializeToContentType","deserializeFromContentType","getDefaultHTML","undoInterval","attachments","presentation","keyNames","27","68","72","79","level2Enabled","getLevel","pickFiles","fileInputId","ObjectView","childViews","rootView","getNodes","createNodes","invalidate","parentView","invalidateViewForObject","findViewForObject","findOrCreateCachedChildView","getCachedViewForObject","recordChildView","createChildView","cacheViewForObject","viewClass","ObjectGroupView","getAllChildViews","findElementForObject","getViewCache","isViewCachingEnabled","viewCache","shouldCacheViews","enableViewCaching","disableViewCaching","garbageCollectCachedViews","objectGroup","getChildViews","createContainerElement","_t10","didMutate","mutations","findSignificantMutations","elementDidMutate","getMutationSummary","mutationIsSignificant","nodeIsMutable","nodesModifiedByMutation","nodeIsSignificant","getTextMutationSummary","getTextChangesFromCharacterData","additions","deletions","getTextChangesFromChildList","textAdded","textDeleted","getMutationsByType","_t11","FileVerificationOperation","InputController","mutationObserver","handlerFor","editorWillSyncDocumentView","editorDidSyncDocumentView","inputControllerDidRequestRender","requestReparse","inputControllerDidRequestReparse","handleInput","inputControllerWillAttachFiles","responder","insertFiles","inputControllerWillHandleInput","inputControllerDidHandleInput","Level0InputController","resetInputSummary","setInputSummary","inputSummary","isComposing","inputControllerDidAllowUnhandledInput","mutationIsExpected","preferDocument","didDelete","getSelectedRange","positionIsBlockBreak","compositionInput","getEndData","keydown","didInput","keyName","inputControllerDidReceiveKeyboardCommand","inputControllerWillPerformTyping","insertString","selectionIsExpanded","textInput","setSelectedRange","dragenter","serializeSelectionToDataTransfer","dataTransfer","draggedRange","inputControllerDidStartDrag","dragover","canAcceptDataTransfer","draggingPoint","inputControllerDidReceiveDragOverPoint","dragend","inputControllerDidCancelDrag","setLocationRangeFromPointRange","inputControllerWillMoveText","moveTextFromRange","insertDocument","cut","clipboardData","inputControllerWillCutText","deleteInDirection","paste","testClipboardData","clipboard","getPastedHTMLUsingHiddenElement","inputControllerWillPaste","insertHTML","inputControllerDidPaste","insertText","Text","textForStringWithAttributes","getAsFile","insertFile","compositionstart","getCompositionInput","compositionupdate","compositionend","beforeinput","backspace","insertLineBreak","tab","canIncreaseNestingLevel","increaseNestingLevel","selectionIsInCursorTarget","moveCursorInDirection","control","canDecreaseNestingLevel","decreaseNestingLevel","expandSelectionInDirection","alt","isEnded","getSelectedDocument","Files","inputController","isSignificant","insertPlaceholder","selectPlaceholder","forgetPlaceholder","canApplyToDocument","Level2InputController","scheduledRender","composing","reparse","scheduleRender","afterRender","withEvent","inputTypes","selectionContainsAttachments","dragging","ArrowLeft","shouldManageMovingCursorInDirection","ArrowRight","Backspace","shouldManageDeletingInDirection","Tab","deleteByComposition","recordUndoEntry","deleteByCut","deleteByDrag","withTargetDOMRange","deleteByDragRange","deleteCompositionText","deleteContent","deleteContentBackward","deleteContentForward","deleteEntireSoftLine","deleteHardLineBackward","deleteHardLineForward","deleteSoftLineBackward","deleteSoftLineForward","deleteWordBackward","deleteWordForward","formatBackColor","activateAttributeIfSupported","formatBold","toggleAttributeIfSupported","formatFontColor","formatFontName","formatIndent","formatItalic","formatJustifyCenter","formatJustifyFull","formatJustifyLeft","formatJustifyRight","formatOutdent","formatRemove","getCurrentAttributes","removeCurrentAttribute","formatSetBlockTextDirection","formatSetInlineTextDirection","formatStrikeThrough","formatSubscript","formatSuperscript","formatUnderline","historyRedo","inputControllerWillPerformRedo","historyUndo","inputControllerWillPerformUndo","insertCompositionText","insertFromComposition","insertFromDrop","insertFromPaste","insertFromYank","insertLink","insertOrderedList","insertParagraph","insertReplacementText","insertTranspose","insertUnorderedList","inputControllerWillPerformFormatting","toggleCurrentAttribute","setCurrentAttribute","getTargetDOMRange","minLength","getTargetRanges","startOffset","endOffset","AttachmentEditorController","attachmentPiece","didBlurCaption","didChangeCaption","didInputCaption","didKeyDownCaption","didClickActionButton","didClickToolbar","install","undos","makeElementMutable","addToolbar","installCaptionEditor","uninstall","savePendingCaption","didUninstallAttachmentEditor","pendingCaption","attachmentEditorDidRequestUpdatingAttributesForAttachment","attachmentEditorDidRequestRemovingAttributeForAttachment","trixMutable","getFilename","getFormattedFilesize","getCaption","editCaption","attachmentEditorDidRequestRemovalOfAttachment","attachmentEditorDidRequestDeselectingAttachment","uploadProgressDelegate","piece","createContentNodes","getClassName","getHref","getContent","createCaptionElement","isPending","getUploadProgress","getCaptionConfig","getType","trixAttachment","trixContentType","getContentType","trixId","trixAttributes","trixSerialize","findProgressElement","attachmentDidChangeUploadProgress","PreviewableAttachmentView","previewDelegate","updateAttributesForImage","getURL","getPreviewURL","attachmentDidChangeAttributes","PieceView","getAttributes","textConfig","createAttachmentNodes","createStringNodes","preserveSpaces","styleProperty","isLast","isFirst","followsWhitespace","_t12","TextView","getPieces","BlockView","getLastAttribute","shouldAddExtraNewlineElement","getBlockBreakPosition","elementStore","shadowElement","getBlocks","isSynced","createDocumentFragmentForSync","didSync","CompositionController","composition","didClickAttachment","didBlur","didFocus","documentView","focused","compositionControllerDidFocus","blurPromise","compositionControllerDidBlur","findAttachmentForElement","compositionControllerDidSelectAttachment","getSerializableElement","isEditingAttachment","revision","canSyncDocumentView","compositionControllerWillSyncDocumentView","compositionControllerDidSyncDocumentView","compositionControllerDidRender","rerenderViewForObject","refreshViewCache","attachmentEditor","installAttachmentEditorForAttachment","uninstallAttachmentEditor","getAttachmentPieceForAttachment","compositionControllerWillUpdateAttachment","updateAttributesForAttachment","removeAttributeForAttachment","compositionControllerDidRequestRemovalOfAttachment","compositionControllerDidRequestDeselectingAttachment","getAttachmentById","ToolbarController","didKeyDownDialogInput","didClickDialogButton","didClickAttributeButton","resetDialogInputs","toolbarDidClickButton","getDialog","toggleDialog","toolbarDidInvokeAction","toolbarDidToggleAttribute","refreshAttributeButtons","hideDialog","updateActions","refreshActionButtons","eachActionButton","updateAttributes","eachAttributeButton","dialogIsVisible","applyKeyboardCommand","showDialog","toolbarWillShowDialog","toolbarDidShowDialog","willValidate","checkValidity","toolbarDidUpdateAttribute","toolbarDidRemoveAttribute","toolbarDidHideDialog","_t13","ImagePreloadOperation","naturalWidth","naturalHeight","_t14","Attachment","releaseFile","didChangeAttributes","previewablePattern","attachmentForFile","attributesForFile","setFile","filesize","preloadURL","getFilesize","getFile","preloadFile","releasePreloadedFile","uploadProgress","setUploadProgress","previewURL","preloadingURL","setPreviewURL","attachmentDidChangePreviewURL","preload","fileObjectURL","_t15","Piece","registerType","copyWithAttributes","copyWithAdditionalAttributes","copyWithoutAttribute","getAttributesHash","getCommonAttributes","pieceList","getPieceAtIndex","eachPiece","hasSameStringValueAsPiece","hasSameAttributesAsPiece","isBlockBreak","isSerializable","canBeConsolidatedWith","_t16","AttachmentPiece","ensureAttachmentExclusivelyHasAttribute","removeProhibitedAttributes","permittedAttributes","toConsole","StringPiece","consolidateWith","splitAtOffset","SplittableList","eachObject","insertObjectAtIndex","insertSplittableListAtIndex","insertSplittableListAtPosition","splitObjectAtPosition","editObjectAtIndex","replaceObjectAtIndex","removeObjectAtIndex","getObjectAtIndex","getSplittableListInRange","splitObjectsAtRange","selectSplittableList","removeObjectsInRange","transformObjectsInRange","getObjectAtPosition","findIndexAndOffsetAtPosition","consolidate","consolidateFromIndexToIndex","findPositionAtIndexAndOffset","getEndPosition","endPosition","_t17","textForAttachmentWithAttributes","copyWithPieceList","copyUsingObjectMap","appendText","insertTextAtPosition","removeTextAtRange","replaceTextAtRange","moveTextFromRangeToPosition","getTextAtRange","addAttributeAtRange","addAttributesAtRange","removeAttributeAtRange","setAttributesAtRange","getAttributesAtPosition","getCommonAttributesAtRange","getExpandedRangeForAttributeAtOffset","getStringAtRange","getStringAtPosition","startsWithString","endsWithString","getAttachmentPieces","getAttachments","getAttachmentAndPositionById","getRangeOfAttachment","getPieceAtPosition","toSerializableText","Block","copyWithText","copyWithoutText","copyWithoutAttributes","addAttribute","removeLastAttribute","getAttributeLevel","getAttributeAtLevel","hasAttributes","getLastNestableAttribute","getNestableAttributes","getNestingLevel","getListItemAttributes","isListItem","isTerminalBlock","breaksOnReturn","findLineBreakInDirectionFromPosition","getTextWithoutBlockBreak","blockBreak","HTMLSanitizer","allowedAttributes","sanitize","sanitizeElements","normalizeListElementNesting","getHTML","getBody","nextNode","currentNode","sanitizeElement","previousElementSibling","HTMLParser","referenceElement","blocks","blockElements","processedElements","getDocument","createHiddenContainer","containerElement","processNode","translateBlockElementMarginsToNewlines","removeHiddenContainer","FILTER_REJECT","FILTER_ACCEPT","processTextNode","appendBlockForElement","processElement","isBlockElement","currentBlockElement","isInsignificantTextNode","getBlockAttributes","currentBlock","appendBlockForAttributesWithElement","findParentBlockElement","appendEmptyBlock","appendStringWithAttributes","getTextAttributes","appendAttachmentWithAttributes","isExtraBR","appendPiece","appendStringToTextAtIndex","prependStringToTextAtIndex","findBlockElementAncestors","whiteSpace","getMarginOfDefaultBlockElement","getMarginOfBlockElementAtIndex","blockList","getBlockAtIndex","consolidateBlocks","copyUsingObjectsFromDocument","copyWithBaseBlockAttributes","replaceBlock","insertDocumentAtRange","locationFromPosition","getBlockAtPosition","mergeDocumentAtRange","getBaseBlockAttributes","getBlockCount","insertTextAtRange","locationRangeFromRange","getDocumentAtRange","eachBlockAtRange","eachBlock","getTextAtIndex","insertBlockBreakAtRange","applyBlockAttributeAtRange","expandRangeToLineBreaksAndSplitBlocks","removeLastListAttributeAtRange","exceptAttributeName","convertLineBreaksToBlockBreaksInRange","removeBlockAttributesAtRange","removeLastTerminalAttributeAtRange","consolidateBlocksAtRange","positionFromLocation","getTextAtPosition","getCharacterAtPosition","getEditCount","editCount","getCommonAttributesAtPosition","getRangeOfCommonAttributeAtPosition","getLocationRangeOfAttachment","findRangesForBlockAttribute","findRangesForTextAttribute","withValue","locationRangeFromPosition","rangeFromLocationRange","getTexts","LineBreakInsertion","startPosition","startLocation","endLocation","previousCharacter","nextCharacter","shouldInsertBlockBreak","shouldBreakFormattedBlock","shouldDecreaseListLevel","shouldPrependListItem","shouldRemoveLastBlockAttribute","Composition","currentAttributes","refreshAttachments","compositionDidChangeDocument","selectedRange","loadSnapshot","compositionWillLoadSnapshot","setSelection","compositionDidLoadSnapshot","notifyDelegateOfInsertionAtRange","insertBlock","getCurrentTextAttributes","insertBlockBreak","decreaseListLevel","removeLastBlockAttribute","breakFormattedBlock","replaceHTML","getLocationRange","compositionShouldAcceptFile","insertAttachments","insertAttachment","canDecreaseBlockAttributeLevel","decreaseBlockAttributeLevel","getExpandedRangeInDirection","getAttachmentAtRange","editAttachment","removeAttachment","stopEditingAttachment","placeholderPosition","getPosition","hasCurrentAttribute","canSetCurrentAttribute","canSetCurrentBlockAttribute","canSetCurrentTextAttribute","setBlockAttribute","setTextAttribute","notifyDelegateOfCurrentAttributesChange","removeBlockAttribute","updateCurrentAttributes","removeTextAttribute","getPreviousBlock","ignoreLock","freezeSelection","thawSelection","hasFrozenSelection","compositionDidRequestChangingSelectionToLocationRange","getSelectionManager","setLocationRange","targetLocationRange","withTargetLocationRange","withTargetRange","createLocationRangeFromDOMRange","translateUTF16PositionFromOffset","editingAttachment","expandSelectionForEditing","expandSelectionAroundCommonAttribute","getSelectedAttachments","positionIsCursorTarget","locationIsCursorTarget","compositionDidRemoveAttachment","compositionDidAddAttachment","compositionDidEditAttachment","compositionDidChangeAttachmentPreviewURL","compositionDidStartEditingAttachment","compositionDidStopEditingAttachment","compositionDidChangeCurrentAttributes","compositionDidPerformInsertionAtRange","_t18","UndoManager","undoEntries","redoEntries","consolidatable","createEntry","canUndo","canRedo","attachmentGalleryFilter","applyBlockAttribute","findRangesOfBlocks","findRangesOfPieces","moveSelectedRangeForward","_t19","Editor","selectionManager","undoManager","loadDocument","loadHTML","loadJSON","getClientRectAtPosition","getClientRectAtLocationRange","activateAttribute","attributeIsActive","canActivateAttribute","deactivateAttribute","_t20","ManagedAttachment","attachmentManager","requestRemovalOfAttachment","_t21","AttachmentManager","managedAttachments","manageAttachment","attachmentIsManaged","attachmentManagerDidRequestRemovalOfAttachment","unmanageAttachment","LocationMapper","findLocationFromContainerAndOffset","findAttachmentElementParentForNode","findContainerAndOffsetFromLocation","findNodeAndOffsetFromLocation","getSignificantNodesForIndex","PointMapper","createDOMRangeFromPoint","caretPositionFromPoint","offsetNode","caretRangeFromPoint","createTextRange","moveToPoint","getClientRectsForDOMRange","SelectionChangeObserver","selectionManagers","registerSelectionManager","unregisterSelectionManager","notifySelectionManagersOfSelectionChange","selectionDidChange","domRange","SelectionManager","didMouseDown","locationMapper","pointMapper","lockCount","currentLocationRange","lockedLocationRange","createDOMRangeFromLocationRange","updateCurrentLocationRange","getLocationAtPoint","unlock","clearSelection","selectionIsCollapsed","collapsed","domRangeWithinElement","pauseTemporarily","locationRangeDidChange","EditorController","editorElement","compositionController","toolbarController","toolbarElement","editor","notifyEditorElement","handlingInput","updateCurrentActions","pasting","pastedRange","attachmentLocationRange","loadingSnapshot","isFocused","requestedLocationRange","compositionRevisionWhenLocationRangeRequested","renderedCompositionRevision","runEditorFilters","requestedRender","recordTypingUndoEntry","recordFormattingUndoEntry","locationRangeBeforeDrag","invokeAction","selectionFrozen","dialogName","canInvokeAction","actionIsExternal","actionName","getCurrentActions","currentActions","updateInputElement","setInputElementValue","documentChangedSinceLastRender","getUndoContext","getLocationContext","getTimeContext","queryCommandSupported","inputElement","editorController","registerResetListener","unregisterResetListener","resetListener","resetBubbled","dateTimePicker","viewDate","use24Hours","actualFormat","parseFormats","currentViewMode","eData","dataOptions","picker","minViewModeNumber","datePickerModes","clsName","navFnc","navStep","viewModes","verticalModes","horizontalModes","toolbarPlacements","keyMap","33","34","32","84","keyState","hasTimeZone","tz","timeZone","getMoment","returnMoment","useStrict","isEnabled","granularity","hasDate","getTemplate","topRow","middleRow","bottomRow","hoursView","minutesView","secondsView","headTemplate","contTemplate","dateView","icons","calendarWeeks","timeView","tooltips","incrementHour","pickHour","decrementHour","incrementMinute","pickMinute","decrementMinute","incrementSecond","pickSecond","decrementSecond","togglePeriod","collapse","showTodayButton","sideBySide","selectTime","showClear","inline","toolbarPlacement","widgetPositioning","widgetParent","notifyEvent","oldDate","viewUpdate","showMode","targetMoment","disabledDates","testDate","enabledDates","isInEnabledDates","minDate","maxDate","daysOfWeekDisabled","disabledHours","isInDisabledHours","enabledHours","isInEnabledHours","disabledTimeIntervals","fillDate","daysView","daysViewHeader","clsNames","prevMonth","selectMonth","nextMonth","monthsView","monthsViewHeader","selectYear","yearsView","yearsViewHeader","startYear","endYear","prevDecade","selectDecade","nextDecade","updateYears","endDecadeYear","decadesView","decadesViewHeader","startDecade","endDecade","startedAt","minDateDecade","maxDateDecade","prevCentury","nextCentury","updateDecades","fillTime","timeComponents","currentHour","fillHours","currentMinute","stepping","fillMinutes","currentSecond","fillSeconds","keepInvalid","transitioning","collapseData","parseInputDate","inputDate","pickerSwitch","selectDay","keepOpen","incrementHours","incrementMinutes","incrementSeconds","decrementHours","decrementMinutes","decrementSeconds","togglePicker","$parent","showPicker","showHours","showMinutes","showSeconds","selectHour","selectMinute","selectSecond","todaysDate","doAction","currentMoment","ignoreReadonly","useCurrent","fillDow","spans","fillMonths","focusOnShow","keyBindKeys","allModifiersPressed","pressedKeys","pressedModifiers","keyBinds","keyup","parsedDate","indexGivenDates","givenDatesArray","givenDatesIndexed","dDate","indexGivenHours","givenHoursArray","givenHoursIndexed","initFormatting","formatInput","formatInput2","extraFormats","allowInputToggle","newOptions","newFormat","newZone","previousValue","tries","useCurrentOptions","viewMode","datepickerInput","dateOptions","isInstance","thisMethods","pageUp","pageDown","enter","_createClass","_objectSpread","TRANSITION_END","transitionEndEmulator","Util","triggerTransitionEnd","getUID","getSelectorFromElement","hrefAttr","getTransitionDurationFromElement","transitionDuration","transitionDelay","floatTransitionDuration","floatTransitionDelay","reflow","supportsTransitionEnd","typeCheckConfig","componentName","configTypes","expectedTypes","findShadowRoot","attachShadow","ShadowRoot","emulateTransitionEnd","JQUERY_NO_CONFLICT","CLOSE","CLOSED","CLICK_DATA_API","ClassName","Alert","_proto","rootElement","_getRootElement","_triggerCloseEvent","_removeElement","dispose","closeEvent","_destroyElement","_jQueryInterface","$element","_handleDismiss","alertInstance","JQUERY_NO_CONFLICT$1","ClassName$1","Selector$1","Event$1","FOCUS_BLUR_DATA_API","Button","triggerChangeEvent","addAriaPressed","NAME$2","EVENT_KEY$2","JQUERY_NO_CONFLICT$2","Default","keyboard","slide","DefaultType","Direction","Event$2","SLIDE","SLID","KEYDOWN","MOUSEENTER","MOUSELEAVE","TOUCHSTART","TOUCHMOVE","TOUCHEND","POINTERDOWN","POINTERUP","DRAG_START","LOAD_DATA_API","ClassName$2","Selector$2","ACTIVE","ACTIVE_ITEM","ITEM","ITEM_IMG","NEXT_PREV","INDICATORS","DATA_SLIDE","DATA_RIDE","PointerType","TOUCH","PEN","Carousel","_items","_interval","_activeElement","_isPaused","_isSliding","touchTimeout","touchStartX","touchDeltaX","_getConfig","_indicatorsElement","_touchSupported","maxTouchPoints","_pointerEvent","PointerEvent","MSPointerEvent","_addEventListeners","_slide","nextWhenVisible","cycle","visibilityState","activeIndex","_getItemIndex","_handleSwipe","absDeltax","_keydown","_addTouchEventListeners","move","_getItemByDirection","isNextDirection","isPrevDirection","lastItemIndex","itemIndex","_triggerSlideEvent","eventDirectionName","targetIndex","slideEvent","_setActiveIndicatorElement","indicators","nextIndicator","directionalClassName","orderClassName","activeElementIndex","nextElement","nextElementIndex","isCycling","slidEvent","nextElementInterval","defaultInterval","ride","_dataApiClickHandler","slideIndex","carousels","$carousel","NAME$3","JQUERY_NO_CONFLICT$3","Default$1","DefaultType$1","Event$3","SHOW","SHOWN","HIDE","HIDDEN","ClassName$3","Dimension","Selector$3","ACTIVES","DATA_TOGGLE","Collapse","_isTransitioning","_triggerArray","toggleList","filterElement","foundElem","_selector","_parent","_getParent","_addAriaAndCollapsedClass","actives","activesData","startEvent","_getDimension","setTransitioning","scrollSize","triggerArrayLength","isTransitioning","_getTargetFromElement","triggerArray","$trigger","NAME$4","JQUERY_NO_CONFLICT$4","REGEXP_KEYDOWN","ARROW_UP_KEYCODE","Event$4","CLICK","KEYDOWN_DATA_API","KEYUP_DATA_API","ClassName$4","Selector$4","AttachmentMap","Default$2","boundary","DefaultType$2","Dropdown","_popper","_menu","_getMenuElement","_inNavbar","_detectNavbar","_getParentFromElement","isActive","_clearMenus","showEvent","_getPopperConfig","hideEvent","_getPlacement","$parentDropdown","_getOffset","popperConfig","toggles","clickEvent","dropdownMenu","_dataApiKeydownHandler","JQUERY_NO_CONFLICT$5","Default$3","backdrop","DefaultType$3","Event$5","FOCUSIN","RESIZE","CLICK_DISMISS","KEYDOWN_DISMISS","MOUSEUP_DISMISS","MOUSEDOWN_DISMISS","ClassName$5","Selector$5","DIALOG","MODAL_BODY","DATA_DISMISS","FIXED_CONTENT","STICKY_CONTENT","Modal","_dialog","_backdrop","_isShown","_isBodyOverflowing","_ignoreBackdropClick","_scrollbarWidth","_checkScrollbar","_setScrollbar","_adjustDialog","_setEscapeEvent","_setResizeEvent","_showBackdrop","_showElement","transition","_hideModal","handleUpdate","_enforceFocus","shownEvent","transitionComplete","_resetAdjustments","_resetScrollbar","_removeBackdrop","backdropTransitionDuration","callbackRemove","_backdropTransitionDuration","isModalOverflowing","paddingLeft","paddingRight","_getScrollbarWidth","fixedContent","stickyContent","actualPadding","calculatedPadding","actualMargin","calculatedMargin","scrollDiv","scrollbarWidth","uriAttrs","DefaultWhitelist","em","h4","h5","h6","li","ol","small","span","sup","strong","ul","SAFE_URL_PATTERN","DATA_URL_PATTERN","sanitizeHtml","unsafeHtml","whiteList","sanitizeFn","createdDocument","whitelistKeys","_loop","elName","attributeList","whitelistedAttributes","allowedAttributeList","regExp","attrRegex","allowedAttribute","NAME$6","JQUERY_NO_CONFLICT$6","BSCLS_PREFIX_REGEX","DISALLOWED_ATTRIBUTES","DefaultType$4","fallbackPlacement","AttachmentMap$1","AUTO","TOP","RIGHT","BOTTOM","LEFT","Default$4","HoverState","Event$6","INSERTED","FOCUSOUT","ClassName$6","Selector$6","Trigger","Tooltip","_isEnabled","_timeout","_hoverState","_activeTrigger","tip","_setListeners","toggleEnabled","dataKey","DATA_KEY","_getDelegateConfig","_isWithActiveTrigger","_enter","_leave","getTipElement","EVENT_KEY","isWithContent","isInTheDom","tipId","setContent","_getAttachment","addAttachmentClass","_getContainer","_handlePopperPlacementChange","_fixTransition","prevHoverState","_cleanTipClass","getTitle","CLASS_PREFIX","setElementContent","eventIn","eventOut","_fixTitle","titleType","dataAttributes","$tip","tabClass","popperData","popperInstance","initConfigAnimation","NAME$7","JQUERY_NO_CONFLICT$7","BSCLS_PREFIX_REGEX$1","Default$5","DefaultType$5","ClassName$7","Selector$7","Event$7","_Tooltip","subClass","superClass","_getContent","CLASS_PREFIX$1","NAME$8","JQUERY_NO_CONFLICT$8","Default$6","DefaultType$6","Event$8","ACTIVATE","SCROLL","ClassName$8","Selector$8","DATA_SPY","NAV_LIST_GROUP","NAV_LINKS","NAV_ITEMS","LIST_ITEMS","DROPDOWN","DROPDOWN_ITEMS","DROPDOWN_TOGGLE","OffsetMethod","ScrollSpy","_scrollElement","_offsets","_targets","_activeTarget","_scrollHeight","_process","autoMethod","offsetMethod","offsetBase","_getScrollTop","_getScrollHeight","targetSelector","targetBCR","_getOffsetHeight","maxScroll","_activate","_clear","queries","$link","scrollSpys","$spy","JQUERY_NO_CONFLICT$9","Event$9","ClassName$9","Selector$9","listElement","itemSelector","hiddenEvent","_transitionComplete","dropdownChild","dropdownElement","dropdownToggleList","JQUERY_NO_CONFLICT$a","Event$a","ClassName$a","DefaultType$7","autohide","Default$7","Selector$a","Toast","withoutTimeout","_close","Scrollspy","Slick","instanceUid","dataSettings","accessibility","adaptiveHeight","appendArrows","appendDots","asNavFor","prevArrow","nextArrow","cssEase","customPaging","slider","dotsClass","draggable","edgeFriction","fade","focusOnSelect","focusOnChange","lazyLoad","mobileFirst","pauseOnHover","pauseOnFocus","pauseOnDotsHover","respondTo","responsive","rows","rtl","slidesPerRow","swipe","swipeToSlide","touchMove","touchThreshold","useCSS","useTransform","verticalSwiping","waitForAnimate","initials","animating","autoPlayTimer","currentDirection","currentLeft","currentSlide","$dots","listWidth","listHeight","loadIndex","$nextArrow","$prevArrow","scrolling","slideCount","slideWidth","$slideTrack","$slides","sliding","slideOffset","swipeLeft","swiping","$list","touchObject","transformsEnabled","unslicked","activeBreakpoint","animType","animProp","breakpoints","breakpointSettings","cssTransitions","focussed","interrupted","positionProp","rowCount","shouldClick","$slider","$slidesCache","transformType","transitionType","visibilityChange","windowWidth","windowTimer","mozHidden","webkitHidden","autoPlay","autoPlayClear","autoPlayIterator","changeSlide","clickHandler","selectHandler","setPosition","swipeHandler","dragHandler","keyHandler","htmlExpr","registerBreakpoints","activateADA","addSlide","slickAdd","markup","addBefore","unload","reinit","animateHeight","targetHeight","animateSlide","targetLeft","animProps","animStart","applyTransition","disableTransition","getNavTarget","slideHandler","slideTo","buildArrows","buildDots","dot","getDotCount","buildOut","setupInfinite","updateDots","setSlideClasses","buildRows","newSlides","numOfSlides","originalSlides","slidesPerSection","checkResponsive","forceUpdate","breakpoint","targetBreakpoint","respondToWidth","triggerBreakpoint","sliderWidth","unslick","dontAnimate","indexOffset","checkNavigable","navigables","prevNavigable","getNavigableIndexes","cleanUpEvents","interrupt","cleanUpSlideEvents","orientationChange","cleanUpRows","fadeSlide","fadeSlideOut","filterSlides","slickFilter","focusHandler","$sf","getCurrent","slickCurrentSlide","breakPoint","pagerQty","getLeft","verticalHeight","targetSlide","coef","verticalOffset","getOption","slickGetOption","getSlick","getSlideCount","swipedSlide","centerOffset","goTo","slickGoTo","creation","startLoad","loadSlider","initializeEvents","updateArrows","initADA","numDotGroups","tabControlIndexes","slideControlIndex","ariaButtonControl","mappedSlideIndex","initArrowEvents","initDotEvents","initSlideEvents","initUI","loadRange","rangeStart","rangeEnd","loadImages","imagesScope","imageSource","imageSrcSet","imageSizes","imageToLoad","prevSlide","nextSlide","progressiveLazyLoad","slickNext","slickPause","play","slickPlay","postSlide","slickPrev","tryCount","$imgsToLoad","initializing","lastVisibleIndex","currentBreakpoint","responsiveSettings","windowDelay","removeSlide","slickRemove","removeBefore","removeAll","setCSS","positionProps","setDimensions","setFade","setOption","slickSetOption","bodyStyle","WebkitTransition","MozTransition","msTransition","OTransform","perspectiveProperty","webkitPerspective","MozTransform","MozPerspective","webkitTransform","msTransform","allSlides","evenCoef","infiniteCount","targetElement","animSlide","oldSlide","slideLeft","navTarget","swipeDirection","xDist","yDist","swipeAngle","startX","curX","startY","curY","atan2","swipeEnd","swipeLength","edgeHit","minSwipe","fingerCount","swipeStart","swipeMove","positionOffset","verticalSwipeLength","unfilterSlides","slickUnfilter","fromBreakpoint","S2","amd","requirejs","undef","main","_req","makeMap","defined","waiting","defining","aps","jsSuffixRegExp","hasProp","baseName","nameParts","nameSegment","mapValue","foundMap","foundI","foundStarMap","starI","baseParts","starMap","nodeIdCompat","makeRequire","relName","forceSync","makeLoad","callDep","splitPrefix","makeRelParts","makeConfig","relParts","plugin","relResourceName","pr","cjsModule","usingExports","callbackType","_defined","getMethods","theClass","Extend","ChildClass","SuperClass","__hasProp","BaseConstructor","Decorate","DecoratorClass","decoratedMethods","superMethods","DecoratedClass","argCount","calledConstructor","displayName","superMethod","calledMethod","originalMethod","decoratedMethod","Observable","_type","generateChars","_convertData","originalKey","dataLevel","hasScroll","escapeMarkup","replaceMap","'","appendMany","$nodes","$jqNodes","__cache","GetUniqueElementId","select2Id","StoreData","GetData","RemoveData","Results","dataAdapter","$results","displayMessage","hideLoading","$message","hideMessages","$options","$option","$dropdown","highlightFirstItem","$selected","ensureHighlightVisible","setClasses","selectedIds","showLoading","loading","loadingMore","$loading","_resultId","$children","$child","$childrenContainer","$container","$highlighted","getHighlightedResults","$next","currentOffset","nextTop","nextOffset","nextBottom","mousewheel","deltaY","isAtTop","isAtBottom","offsetDelta","BACKSPACE","TAB","ENTER","SHIFT","CTRL","ALT","ESC","SPACE","PAGE_UP","PAGE_DOWN","END","HOME","UP","DOWN","DELETE","KEYS","BaseSelection","$selection","_tabindex","resultsId","_handleBlur","_attachCloseHandler","_detachCloseHandler","$select","SingleSelection","$rendered","selectionContainer","formatted","MultipleSelection","$selections","Placeholder","decorated","normalizePlaceholder","createPlaceholder","$placeholder","singlePlaceholder","AllowClear","_handleClear","_handleKeyboardClear","$clear","previousVal","unselectData","prevented","$remove","Search","$search","$searchContainer","_transferTabIndex","_keyUpPrevented","$previousChoice","searchRemoveChoice","msie","disableInputEvents","handleSearch","searchHadFocus","resizeSearch","EventRelay","relayEvents","preventableEvents","Translation","translation","loadPath","translations","BaseAdapter","generateResultId","SelectAdapter","currentData","addOptions","innerText","normalizedData","_normalizeItem","ArrayAdapter","_dataToConvert","convertToOptions","$existing","existingIds","onlyItem","$existingOption","existingData","$newOption","AjaxAdapter","ajaxOptions","_applyDefaults","$request","_request","_queryTimeout","Tags","createTag","insertTag","_removeOldTags","page","checkChildren","Tokenizer","tokenizer","dropdown","tokenData","separators","termChar","MinimumInputLength","$e","minimumInputLength","minimum","MaximumInputLength","maximumInputLength","maximum","MaximumSelectionLength","maximumSelectionLength","_checkIfMaximumSelected","successCallback","showSearch","HidePlaceholder","removePlaceholder","modifiedData","InfiniteScroll","lastParams","$loadingMore","createLoadingMore","showLoadingMore","loadMoreIfNeeded","isLoadMoreVisible","loadMore","pagination","AttachBody","$dropdownParent","_showDropdown","_attachPositioningHandler","_bindContainerResultHandlers","_hideDropdown","_detachPositioningHandler","$dropdownContainer","_containerResultsHandlersBound","_positionDropdown","_resizeDropdown","scrollEvent","resizeEvent","orientationEvent","$watchers","$window","isCurrentlyAbove","isCurrentlyBelow","newDirection","viewport","enoughRoomAbove","enoughRoomBelow","$offsetParent","isConnected","MinimumResultsForSearch","minimumResultsForSearch","countResults","SelectOnClose","_handleSelectOnClose","originalSelect2Event","$highlightedResults","CloseOnSelect","_selectTriggered","errorLoading","inputTooLong","overChars","inputTooShort","maximumSelected","noResults","searching","removeAllItems","ResultsList","SelectionSearch","DIACRITICS","SelectData","ArrayData","AjaxData","DropdownSearch","EnglishTranslation","tokenSeparators","Query","amdBase","initSelection","InitSelection","resultsAdapter","selectOnClose","dropdownAdapter","SearchableDropdown","closeOnSelect","dropdownCssClass","dropdownCss","adaptDropdownCssClass","DropdownCSS","selectionAdapter","allowClear","containerCssClass","containerCss","adaptContainerCssClass","ContainerCSS","language","_resolveLanguage","uniqueLanguages","_processTranslations","stripDiacritics","amdLanguageBase","dropdownAutoWidth","scrollAfterSelect","templateResult","templateSelection","applyFromElement","optionLanguage","defaultLanguage","elementLanguage","parentLanguage","languages","resolvedLanguages","baseLanguage","languageData","convertedData","Options","fromElement","InputCompat","excludedData","upperCaseLetter","dataName","dataValue","Select2","_generateId","DataAdapter","_placeContainer","SelectionAdapter","DropdownAdapter","ResultsAdapter","_bindAdapters","_registerDomEvents","_registerDataEvents","_registerSelectionEvents","_registerDropdownEvents","_registerResultsEvents","_registerEvents","initialData","_syncAttributes","_resolveWidth","WIDTH","styleWidth","elementWidth","_syncA","_syncS","_syncSubtree","MozMutationObserver","_observer","nonRelayEvents","toggleDropdown","_isChangeMutation","changed","actualTrigger","preTriggerMap","preTriggerName","preTriggerArgs","newVal","detachEvent","instanceOptions","AttachmentUpload","directUploadUrl","directUploadDidComplete","sgid","attachable_sgid","createBlobUrl","signedId","blobUrlTemplate"],"mappings":"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,OAAQ,IACR,OAAQ,IACR,OAAQ,IACR,OAAQ,IACR,OAAQ,IACR,OAAQ,IACR,OAAQ,IACR,OAAQ,IACR,OAAQ,IACR,OAAQ,IACR,OAAQ,IACR,OAAQ,IACR,OAAQ,IACR,OAAQ,IACR,OAAQ,IACR,OAAQ,IACR,OAAQ,IACR,OAAQ,IACR,OAAQ,IACR,OAAQ,IACR,OAAQ,IACR,OAAQ,IACR,OAAQ,IACR,OAAQ,IACR,OAAQ,IACR,OAAQ,IACR,OAAQ,IACR,OAAQ,IACR,OAAQ,IACR,OAAQ,IACR,OAAQ,IACR,OAAQ,IACR,OAAQ,IACR,OAAQ,IACR,OAAQ,IACR,OAAQ,IACR,OAAQ,IACR,OAAQ,IACR,OAAQ,IACR,OAAQ,IACR,OAAQ,IACR,OAAQ,IACR,OAAQ,KACR,OAAQ,KACR,OAAQ,KACR,OAAQ,KACR,OAAQ,KAER,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV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,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,IAChRC,EAAK,CAAC,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,IAChRC,EAAK,CAAC,GAAI,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,EAAG,GAAI,EAAG,GAAI,GAAI,GAAI,GAAI,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,GAAI,GAAI,EAAG,GAAI,GAAI,GAAI,GAAI,EAAG,EAAG,GAC3RC,EAAK,CAAC,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,EAAG,EAAG,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,GAAI,GAAI,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,GAAI,EAA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U,GACV,SAAU,GACV,SAAU,GACV,SAAU,GACV,SAAU,GACV,SAAU,GACV,SAAU,GACV,SAAU,GACV,SAAU,GACV,SAAU,GACV,SAAU,GACV,SAAU,GACV,SAAU,GACV,SAAU,GACV,SAAU,GACV,SAAU,GACV,SAAU,GACV,SAAU,GACV,SAAU,GACV,SAAU,GACV,SAAU,GACV,SAAU,GACV,SAAU,GACV,SAAU,GACV,SAAU,GACV,SAAU,GACV,SAAU,GACV,SAAU,GACV,SAAU,GACV,SAAU,GACV,SAAU,GACV,SAAU,GACV,SAAU,GACV,SAAU,GACV,SAAU,GACV,SAAU,GACV,SAAU,GACV,SAAU,GACV,SAAU,GACV,SAAU,GACV,SAAU,GACV,SAAU,GACV,SAAU,GACV,SAAU,GACV,SAAU,GACV,SAAU,GACV,SAAU,GACV,SAAU,GACV,SAAU,GACV,SAAU,GACV,SAAU,GACV,SAAU,GACV,SAAU,GACV,SAAU,GACV,SAAU,GACV,SAAU,GACV,SAAU,GACV,SAAU,GACV,SAAU,GACV,SAAU,GACV,SAAU,GACV,SAAU,GACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,MAAQ,KACR,SAAU,KACV,MAAQ,KACR,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,MAAQ,KACR,MAAQ,KACR,MAAQ,KACR,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,MAAQ,KACR,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,MAAQ,KACR,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,MAAQ,KACR,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,MAAQ,KACR,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,MAAQ,KACR,MAAQ,KACR,MAAQ,KACR,MAAQ,KACR,MAAQ,KACR,MAAQ,KACR,MAAQ,KACR,MAAQ,KACR,MAAQ,KACR,MAAQ,KACR,MAAQ,KACR,MAAQ,KACR,MAAQ,KACR,MAAQ,KACR,MAAQ,KACR,MAAQ,KACR,MAAQ,KACR,MAAQ,KACR,MAAQ,KACR,MAAQ,KACR,MAAQ,KACR,MAAQ,KACR,MAAQ,KACR,MAAQ,KACR,MAAQ,KACR,MAAQ,KACR,MAAQ,KACR,MAAQ,KACR,MAAQ,KACR,MAAQ,KACR,MAAQ,KACR,MAAQ,KACR,MAAQ,KACR,MAAQ,KACR,MAAQ,KACR,MAAQ,KACR,MAAQ,KACR,MAAQ,KACR,MAAQ,KACR,MAAQ,KACR,MAAQ,KACR,MAAQ,KACR,MAAQ,KACR,MAAQ,KACR,MAAQ,KACR,MAAQ,KACR,MAAQ,KACR,MAAQ,KACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,QAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,KACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,QAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,KACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,KACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,QAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,OAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,QAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,QAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,QAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,QAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,KACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,QAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,QAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,KACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,OAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,KACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MAEV,SAAU,KACV,SAAU,KACV,SAAU,Q,cCjuOZC,EAAOD,QAAU,CACf,MAAQ,KACR,MAAQ,KACR,MAAQ,KACR,MAAQ,KACR,MAAQ,KACR,MAAQ,KACR,MAAQ,KACR,MAAQ,KACR,IAAM,KACN,MAAQ,KACR,MAAQ,KACR,MAAQ,KACR,MAAQ,KACR,MAAQ,KACR,MAAQ,KACR,MAAQ,KACR,MAAQ,KACR,MAAQ,KACR,SAAU,KACV,MAAQ,KACR,SAAU,KACV,MAAQ,KACR,MAAQ,KACR,MAAQ,KACR,MAAQ,KACR,MAAQ,KACR,MAAQ,KACR,MAAQ,KACR,MAAQ,KACR,MAAQ,KACR,MAAQ,KACR,MAAQ,KACR,MAAQ,KACR,MAAQ,KACR,MAAQ,KACR,MAAQ,KACR,MAAQ,KACR,MAAQ,KACR,MAAQ,KACR,MAAQ,KACR,MAAQ,KACR,MAAQ,KACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,MAAQ,MACR,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,QAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,QAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,QAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,KACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,QAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,KACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,QAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,KACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,QAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,QAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,KACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SAAU,MACV,SA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AAI,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,EAAG,EAAG,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,GAAI,GAAI,EAAG,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,EAAG,EAAG,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,GAAI,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,EAAG,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,EAAG,EAAG,GAAI,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,GAAI,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,EAAG,GAAI,EAAG,GAAI,GAAI,EAAG,EAAG,GAAI,GAAI,EAAG,GAAI,EAAG,EAAG,EAAG,EAAG,E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AAqE,CAAC,kEAAmE,oEAAqE,CAAC,mEAAoE,oEAAqE,CAAC,mEAAoE,oEAAqE,CAAC,mEAAoE,oEAAqE,CAAC,mEAAoE,oEAAqE,CAAC,mEAAoE,oEAAqE,CAAC,mEAAoE,oEAAqE,CAAC,mEAAoE,oEAAqE,CAAC,mEAAoE,oEAAqE,CAAC,mEAAoE,oEAAqE,CAAC,mEAAoE,oEAAqE,CAAC,mEAAoE,oEAAqE,CAAC,mEAAoE,oEAAqE,CAAC,mEAAoE,mEAAoE,CAAC,mEAAoE,oEAAqE,CAAC,mEAAoE,oEAAqE,CAAC,mEAAoE,oEAAqE,CAAC,mEAAoE,oEAAqE,CAAC,mEAAoE,mEAAoE,CAAC,mEAAoE,oEAAqE,CAAC,mEAAoE,oEAAqE,CAAC,mEAAoE,kEAAmE,CAAC,mEAAoE,oEAAqE,CAAC,mEAAoE,oEAAqE,CAAC,mEAAoE,oEAAqE,CAAC,mEAAoE,oEAAqE,CAAC,kEAAmE,oEAAqE,CAAC,mEAAoE,oEAAqE,CAAC,mEAAoE,oEAAqE,CAAC,mEAAoE,oEAAqE,CAAC,mEAAoE,oEAAqE,CAAC,mEAAoE,oEAAqE,CAAC,mEAAoE,oEAAqE,CAAC,mEAAoE,oEAAqE,CAAC,mEAAoE,oEAAqE,CAAC,mEAAoE,oEAAqE,CAAC,mEAAoE,oEAAqE,CAAC,mEAAoE,oEAAqE,CAAC,mEAAoE,oEAAqE,CAAC,mEAAoE,oEAAqE,CAAC,mEAAoE,oEAAqE,CAAC,mEAAoE,oEAAqE,CAAC,mEAAoE,oEAAqE,CAAC,mEAAoE,mEAAoE,CAAC,mEAAoE,oEAAqE,CAAC,kEAAmE,oEAAqE,CAAC,mEAAoE,oEAAqE,CAAC,mEAAoE,sEAEtsR/a,IAAK,CACHj8B,IAAK,EACLg3C,OAAQ,CAAC,CAAC,mEAAoE,oEAAqE,CAAC,mEAAoE,oEAAqE,CAAC,mEAAoE,oEAAqE,CAAC,mEAAoE,oEAAqE,CAAC,mEAAoE,oEAAqE,CAAC,mEAAoE,mEAAoE,CAAC,mEAAoE,oEAAqE,CAAC,mEAAoE,oEAAqE,CAAC,mEAAoE,oEAAqE,CAAC,mEAAoE,oEAAqE,CAAC,mEAAoE,mEAAoE,CAAC,mEAAoE,oEAAqE,CAAC,mEAAoE,oEAAqE,CAAC,mEAAoE,oEAAqE,CAAC,mEAAoE,oEAAqE,CAAC,mEAAoE,oEAAqE,CAAC,mEAAoE,mEAAoE,CAAC,mEAAoE,oEAAqE,CAAC,mEAAoE,oEAAqE,CAAC,mEAAoE,mEAAoE,CAAC,mEAAoE,oEAAqE,CAAC,kEAAmE,oEAAqE,CAAC,mEAAoE,oEAAqE,CAAC,mEAAoE,oEAAqE,CAAC,mEAAoE,oEAAqE,CAAC,mEAAoE,oEAAqE,CAAC,mEAAoE,oEAAqE,CAAC,mEAAoE,oEAAqE,CAAC,mEAAoE,mEAAoE,CAAC,mEAAoE,mEAAoE,CAAC,mEAAoE,oEAAqE,CAAC,mEAAoE,oEAAqE,CAAC,mEAAoE,oEAAqE,CAAC,mEAAoE,oEAAqE,CAAC,mEAAoE,oEAAqE,CAAC,mEAAoE,oEAAqE,CAAC,mEAAoE,oEAAqE,CAAC,mEAAoE,oEAAqE,CAAC,mEAAoE,oEAAqE,CAAC,mEAAoE,oEAAqE,CAAC,mEAAoE,oEAAqE,CAAC,mEAAoE,oEAAqE,CAAC,mEAAoE,oEAAqE,CAAC,mEAAoE,oEAAqE,CAAC,mEAAoE,oEAAqE,CAAC,mEAAoE,oEAAqE,CAAC,mEAAoE,oEAAqE,CAAC,mEAAoE,oEAAqE,CAAC,mEAAoE,mEAAoE,CAAC,mEAAoE,oEAAqE,CAAC,mEAAoE,mEAAoE,CAAC,mEAAoE,oEAAqE,CAAC,mEAAoE,oEAAqE,CAAC,mEAAoE,oEAAqE,CAAC,mEAAoE,oEAAqE,CAAC,mEAAoE,oEAAqE,CAAC,mEAAoE,oEAAqE,CAAC,mEAAoE,oEAAqE,CAAC,kEAAmE,oEAAqE,CAAC,mEAAoE,oEAAqE,CAAC,mEAAoE,oEAAqE,CAAC,mEAAoE,mEAAoE,CAAC,mEAAoE,mEAAoE,CAAC,mEAAoE,oEAAqE,CAAC,mEAAoE,oEAAqE,CAAC,kEAAmE,oEAAqE,CAAC,mEAAoE,oEAAqE,CAAC,mEAAoE,mEAAoE,CAAC,mEAAoE,oEAAqE,CAAC,mEAAoE,mEAAoE,CAAC,mEAAoE,oEAAqE,CAAC,kEAAmE,oEAAqE,CAAC,mEAAoE,oEAAqE,CAAC,mEAAoE,oEAAqE,CAAC,mEAAoE,oEAAqE,CAAC,iEAAkE,oEAAqE,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IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,IACV,SAAU,IACV,OAAQ,IACR,OAAQ,IACR,OAAQ,IACR,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,OAAQ,IACR,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,OAAQ,IACR,OAAQ,IACR,OAAQ,IACR,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,OAAQ,IACR,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,KACV,SAAU,KACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,OAAQ,IACR,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,KACV,SAAU,KACV,SAAU,IACV,SAAU,IACV,OAAQ,IACR,OAAQ,IACR,OAAQ,IACR,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,OAAQ,IACR,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,OAAQ,IACR,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,OAAQ,IACR,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,KACV,SAAU,IACV,SAAU,IACV,OAAQ,IACR,OAAQ,IACR,OAAQ,IACR,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,OAAQ,IACR,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,KACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,OAAQ,IACR,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,OAAQ,IACR,OAAQ,IACR,OAAQ,IACR,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,OAAQ,IACR,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,OAAQ,IACR,SAAU,IACV,SAAU,IACV,OAAQ,IACR,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,KACV,OAAQ,KACR,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,OAAQ,IACR,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,KACV,SAAU,KACV,SAAU,IACV,SAAU,IACV,OAAQ,IACR,OAAQ,IACR,OAAQ,IACR,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,OAAQ,IACR,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,KACV,SAAU,IACV,SAAU,IACV,OAAQ,IACR,OAAQ,IACR,OAAQ,IACR,SAAU,IACV,SAAU,IACV,SAAU,IACV,OAAQ,IACR,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,KACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,OAAQ,IACR,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,KACV,SAAU,IACV,SAAU,IACV,OAAQ,IACR,OAAQ,IACR,OAAQ,IACR,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,OAAQ,IACR,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,OAAQ,IACR,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,OAAQ,IACR,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,KACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,OAAQ,IACR,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,KACV,SAAU,IACV,SAAU,IACV,OAAQ,IACR,OAAQ,IACR,OAAQ,IACR,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,OAAQ,IACR,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,KACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,IACV,SAAU,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","file":"js/application-5f15c88ae3f31bf05b02.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/packs/\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 428);\n","function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n//! moment.js\n;\n\n(function (global, factory) {\n  (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) === 'object' && typeof module !== 'undefined' ? module.exports = factory() : typeof define === 'function' && define.amd ? define(factory) : global.moment = factory();\n})(this, function () {\n  'use strict';\n\n  var hookCallback;\n\n  function hooks() {\n    return hookCallback.apply(null, arguments);\n  } // This is done to register the method called with moment()\n  // without creating circular dependencies.\n\n\n  function setHookCallback(callback) {\n    hookCallback = callback;\n  }\n\n  function isArray(input) {\n    return input instanceof Array || Object.prototype.toString.call(input) === '[object Array]';\n  }\n\n  function isObject(input) {\n    // IE8 will treat undefined and null as object if it wasn't for\n    // input != null\n    return input != null && Object.prototype.toString.call(input) === '[object Object]';\n  }\n\n  function isObjectEmpty(obj) {\n    if (Object.getOwnPropertyNames) {\n      return Object.getOwnPropertyNames(obj).length === 0;\n    } else {\n      var k;\n\n      for (k in obj) {\n        if (obj.hasOwnProperty(k)) {\n          return false;\n        }\n      }\n\n      return true;\n    }\n  }\n\n  function isUndefined(input) {\n    return input === void 0;\n  }\n\n  function isNumber(input) {\n    return typeof input === 'number' || Object.prototype.toString.call(input) === '[object Number]';\n  }\n\n  function isDate(input) {\n    return input instanceof Date || Object.prototype.toString.call(input) === '[object Date]';\n  }\n\n  function map(arr, fn) {\n    var res = [],\n        i;\n\n    for (i = 0; i < arr.length; ++i) {\n      res.push(fn(arr[i], i));\n    }\n\n    return res;\n  }\n\n  function hasOwnProp(a, b) {\n    return Object.prototype.hasOwnProperty.call(a, b);\n  }\n\n  function extend(a, b) {\n    for (var i in b) {\n      if (hasOwnProp(b, i)) {\n        a[i] = b[i];\n      }\n    }\n\n    if (hasOwnProp(b, 'toString')) {\n      a.toString = b.toString;\n    }\n\n    if (hasOwnProp(b, 'valueOf')) {\n      a.valueOf = b.valueOf;\n    }\n\n    return a;\n  }\n\n  function createUTC(input, format, locale, strict) {\n    return createLocalOrUTC(input, format, locale, strict, true).utc();\n  }\n\n  function defaultParsingFlags() {\n    // We need to deep clone this object.\n    return {\n      empty: false,\n      unusedTokens: [],\n      unusedInput: [],\n      overflow: -2,\n      charsLeftOver: 0,\n      nullInput: false,\n      invalidMonth: null,\n      invalidFormat: false,\n      userInvalidated: false,\n      iso: false,\n      parsedDateParts: [],\n      meridiem: null,\n      rfc2822: false,\n      weekdayMismatch: false\n    };\n  }\n\n  function getParsingFlags(m) {\n    if (m._pf == null) {\n      m._pf = defaultParsingFlags();\n    }\n\n    return m._pf;\n  }\n\n  var some;\n\n  if (Array.prototype.some) {\n    some = Array.prototype.some;\n  } else {\n    some = function some(fun) {\n      var t = Object(this);\n      var len = t.length >>> 0;\n\n      for (var i = 0; i < len; i++) {\n        if (i in t && fun.call(this, t[i], i, t)) {\n          return true;\n        }\n      }\n\n      return false;\n    };\n  }\n\n  function isValid(m) {\n    if (m._isValid == null) {\n      var flags = getParsingFlags(m);\n      var parsedParts = some.call(flags.parsedDateParts, function (i) {\n        return i != null;\n      });\n      var isNowValid = !isNaN(m._d.getTime()) && flags.overflow < 0 && !flags.empty && !flags.invalidMonth && !flags.invalidWeekday && !flags.weekdayMismatch && !flags.nullInput && !flags.invalidFormat && !flags.userInvalidated && (!flags.meridiem || flags.meridiem && parsedParts);\n\n      if (m._strict) {\n        isNowValid = isNowValid && flags.charsLeftOver === 0 && flags.unusedTokens.length === 0 && flags.bigHour === undefined;\n      }\n\n      if (Object.isFrozen == null || !Object.isFrozen(m)) {\n        m._isValid = isNowValid;\n      } else {\n        return isNowValid;\n      }\n    }\n\n    return m._isValid;\n  }\n\n  function createInvalid(flags) {\n    var m = createUTC(NaN);\n\n    if (flags != null) {\n      extend(getParsingFlags(m), flags);\n    } else {\n      getParsingFlags(m).userInvalidated = true;\n    }\n\n    return m;\n  } // Plugins that add properties should also add the key here (null value),\n  // so we can properly clone ourselves.\n\n\n  var momentProperties = hooks.momentProperties = [];\n\n  function copyConfig(to, from) {\n    var i, prop, val;\n\n    if (!isUndefined(from._isAMomentObject)) {\n      to._isAMomentObject = from._isAMomentObject;\n    }\n\n    if (!isUndefined(from._i)) {\n      to._i = from._i;\n    }\n\n    if (!isUndefined(from._f)) {\n      to._f = from._f;\n    }\n\n    if (!isUndefined(from._l)) {\n      to._l = from._l;\n    }\n\n    if (!isUndefined(from._strict)) {\n      to._strict = from._strict;\n    }\n\n    if (!isUndefined(from._tzm)) {\n      to._tzm = from._tzm;\n    }\n\n    if (!isUndefined(from._isUTC)) {\n      to._isUTC = from._isUTC;\n    }\n\n    if (!isUndefined(from._offset)) {\n      to._offset = from._offset;\n    }\n\n    if (!isUndefined(from._pf)) {\n      to._pf = getParsingFlags(from);\n    }\n\n    if (!isUndefined(from._locale)) {\n      to._locale = from._locale;\n    }\n\n    if (momentProperties.length > 0) {\n      for (i = 0; i < momentProperties.length; i++) {\n        prop = momentProperties[i];\n        val = from[prop];\n\n        if (!isUndefined(val)) {\n          to[prop] = val;\n        }\n      }\n    }\n\n    return to;\n  }\n\n  var updateInProgress = false; // Moment prototype object\n\n  function Moment(config) {\n    copyConfig(this, config);\n    this._d = new Date(config._d != null ? config._d.getTime() : NaN);\n\n    if (!this.isValid()) {\n      this._d = new Date(NaN);\n    } // Prevent infinite loop in case updateOffset creates new moment\n    // objects.\n\n\n    if (updateInProgress === false) {\n      updateInProgress = true;\n      hooks.updateOffset(this);\n      updateInProgress = false;\n    }\n  }\n\n  function isMoment(obj) {\n    return obj instanceof Moment || obj != null && obj._isAMomentObject != null;\n  }\n\n  function absFloor(number) {\n    if (number < 0) {\n      // -0 -> 0\n      return Math.ceil(number) || 0;\n    } else {\n      return Math.floor(number);\n    }\n  }\n\n  function toInt(argumentForCoercion) {\n    var coercedNumber = +argumentForCoercion,\n        value = 0;\n\n    if (coercedNumber !== 0 && isFinite(coercedNumber)) {\n      value = absFloor(coercedNumber);\n    }\n\n    return value;\n  } // compare two arrays, return the number of differences\n\n\n  function compareArrays(array1, array2, dontConvert) {\n    var len = Math.min(array1.length, array2.length),\n        lengthDiff = Math.abs(array1.length - array2.length),\n        diffs = 0,\n        i;\n\n    for (i = 0; i < len; i++) {\n      if (dontConvert && array1[i] !== array2[i] || !dontConvert && toInt(array1[i]) !== toInt(array2[i])) {\n        diffs++;\n      }\n    }\n\n    return diffs + lengthDiff;\n  }\n\n  function warn(msg) {\n    if (hooks.suppressDeprecationWarnings === false && typeof console !== 'undefined' && console.warn) {\n      console.warn('Deprecation warning: ' + msg);\n    }\n  }\n\n  function deprecate(msg, fn) {\n    var firstTime = true;\n    return extend(function () {\n      if (hooks.deprecationHandler != null) {\n        hooks.deprecationHandler(null, msg);\n      }\n\n      if (firstTime) {\n        var args = [];\n        var arg;\n\n        for (var i = 0; i < arguments.length; i++) {\n          arg = '';\n\n          if (_typeof(arguments[i]) === 'object') {\n            arg += '\\n[' + i + '] ';\n\n            for (var key in arguments[0]) {\n              arg += key + ': ' + arguments[0][key] + ', ';\n            }\n\n            arg = arg.slice(0, -2); // Remove trailing comma and space\n          } else {\n            arg = arguments[i];\n          }\n\n          args.push(arg);\n        }\n\n        warn(msg + '\\nArguments: ' + Array.prototype.slice.call(args).join('') + '\\n' + new Error().stack);\n        firstTime = false;\n      }\n\n      return fn.apply(this, arguments);\n    }, fn);\n  }\n\n  var deprecations = {};\n\n  function deprecateSimple(name, msg) {\n    if (hooks.deprecationHandler != null) {\n      hooks.deprecationHandler(name, msg);\n    }\n\n    if (!deprecations[name]) {\n      warn(msg);\n      deprecations[name] = true;\n    }\n  }\n\n  hooks.suppressDeprecationWarnings = false;\n  hooks.deprecationHandler = null;\n\n  function isFunction(input) {\n    return input instanceof Function || Object.prototype.toString.call(input) === '[object Function]';\n  }\n\n  function set(config) {\n    var prop, i;\n\n    for (i in config) {\n      prop = config[i];\n\n      if (isFunction(prop)) {\n        this[i] = prop;\n      } else {\n        this['_' + i] = prop;\n      }\n    }\n\n    this._config = config; // Lenient ordinal parsing accepts just a number in addition to\n    // number + (possibly) stuff coming from _dayOfMonthOrdinalParse.\n    // TODO: Remove \"ordinalParse\" fallback in next major release.\n\n    this._dayOfMonthOrdinalParseLenient = new RegExp((this._dayOfMonthOrdinalParse.source || this._ordinalParse.source) + '|' + /\\d{1,2}/.source);\n  }\n\n  function mergeConfigs(parentConfig, childConfig) {\n    var res = extend({}, parentConfig),\n        prop;\n\n    for (prop in childConfig) {\n      if (hasOwnProp(childConfig, prop)) {\n        if (isObject(parentConfig[prop]) && isObject(childConfig[prop])) {\n          res[prop] = {};\n          extend(res[prop], parentConfig[prop]);\n          extend(res[prop], childConfig[prop]);\n        } else if (childConfig[prop] != null) {\n          res[prop] = childConfig[prop];\n        } else {\n          delete res[prop];\n        }\n      }\n    }\n\n    for (prop in parentConfig) {\n      if (hasOwnProp(parentConfig, prop) && !hasOwnProp(childConfig, prop) && isObject(parentConfig[prop])) {\n        // make sure changes to properties don't modify parent config\n        res[prop] = extend({}, res[prop]);\n      }\n    }\n\n    return res;\n  }\n\n  function Locale(config) {\n    if (config != null) {\n      this.set(config);\n    }\n  }\n\n  var keys;\n\n  if (Object.keys) {\n    keys = Object.keys;\n  } else {\n    keys = function keys(obj) {\n      var i,\n          res = [];\n\n      for (i in obj) {\n        if (hasOwnProp(obj, i)) {\n          res.push(i);\n        }\n      }\n\n      return res;\n    };\n  }\n\n  var defaultCalendar = {\n    sameDay: '[Today at] LT',\n    nextDay: '[Tomorrow at] LT',\n    nextWeek: 'dddd [at] LT',\n    lastDay: '[Yesterday at] LT',\n    lastWeek: '[Last] dddd [at] LT',\n    sameElse: 'L'\n  };\n\n  function calendar(key, mom, now) {\n    var output = this._calendar[key] || this._calendar['sameElse'];\n    return isFunction(output) ? output.call(mom, now) : output;\n  }\n\n  var defaultLongDateFormat = {\n    LTS: 'h:mm:ss A',\n    LT: 'h:mm A',\n    L: 'MM/DD/YYYY',\n    LL: 'MMMM D, YYYY',\n    LLL: 'MMMM D, YYYY h:mm A',\n    LLLL: 'dddd, MMMM D, YYYY h:mm A'\n  };\n\n  function longDateFormat(key) {\n    var format = this._longDateFormat[key],\n        formatUpper = this._longDateFormat[key.toUpperCase()];\n\n    if (format || !formatUpper) {\n      return format;\n    }\n\n    this._longDateFormat[key] = formatUpper.replace(/MMMM|MM|DD|dddd/g, function (val) {\n      return val.slice(1);\n    });\n    return this._longDateFormat[key];\n  }\n\n  var defaultInvalidDate = 'Invalid date';\n\n  function invalidDate() {\n    return this._invalidDate;\n  }\n\n  var defaultOrdinal = '%d';\n  var defaultDayOfMonthOrdinalParse = /\\d{1,2}/;\n\n  function ordinal(number) {\n    return this._ordinal.replace('%d', number);\n  }\n\n  var defaultRelativeTime = {\n    future: 'in %s',\n    past: '%s ago',\n    s: 'a few seconds',\n    ss: '%d seconds',\n    m: 'a minute',\n    mm: '%d minutes',\n    h: 'an hour',\n    hh: '%d hours',\n    d: 'a day',\n    dd: '%d days',\n    M: 'a month',\n    MM: '%d months',\n    y: 'a year',\n    yy: '%d years'\n  };\n\n  function relativeTime(number, withoutSuffix, string, isFuture) {\n    var output = this._relativeTime[string];\n    return isFunction(output) ? output(number, withoutSuffix, string, isFuture) : output.replace(/%d/i, number);\n  }\n\n  function pastFuture(diff, output) {\n    var format = this._relativeTime[diff > 0 ? 'future' : 'past'];\n    return isFunction(format) ? format(output) : format.replace(/%s/i, output);\n  }\n\n  var aliases = {};\n\n  function addUnitAlias(unit, shorthand) {\n    var lowerCase = unit.toLowerCase();\n    aliases[lowerCase] = aliases[lowerCase + 's'] = aliases[shorthand] = unit;\n  }\n\n  function normalizeUnits(units) {\n    return typeof units === 'string' ? aliases[units] || aliases[units.toLowerCase()] : undefined;\n  }\n\n  function normalizeObjectUnits(inputObject) {\n    var normalizedInput = {},\n        normalizedProp,\n        prop;\n\n    for (prop in inputObject) {\n      if (hasOwnProp(inputObject, prop)) {\n        normalizedProp = normalizeUnits(prop);\n\n        if (normalizedProp) {\n          normalizedInput[normalizedProp] = inputObject[prop];\n        }\n      }\n    }\n\n    return normalizedInput;\n  }\n\n  var priorities = {};\n\n  function addUnitPriority(unit, priority) {\n    priorities[unit] = priority;\n  }\n\n  function getPrioritizedUnits(unitsObj) {\n    var units = [];\n\n    for (var u in unitsObj) {\n      units.push({\n        unit: u,\n        priority: priorities[u]\n      });\n    }\n\n    units.sort(function (a, b) {\n      return a.priority - b.priority;\n    });\n    return units;\n  }\n\n  function zeroFill(number, targetLength, forceSign) {\n    var absNumber = '' + Math.abs(number),\n        zerosToFill = targetLength - absNumber.length,\n        sign = number >= 0;\n    return (sign ? forceSign ? '+' : '' : '-') + Math.pow(10, Math.max(0, zerosToFill)).toString().substr(1) + absNumber;\n  }\n\n  var formattingTokens = /(\\[[^\\[]*\\])|(\\\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|YYYYYY|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g;\n  var localFormattingTokens = /(\\[[^\\[]*\\])|(\\\\)?(LTS|LT|LL?L?L?|l{1,4})/g;\n  var formatFunctions = {};\n  var formatTokenFunctions = {}; // token:    'M'\n  // padded:   ['MM', 2]\n  // ordinal:  'Mo'\n  // callback: function () { this.month() + 1 }\n\n  function addFormatToken(token, padded, ordinal, callback) {\n    var func = callback;\n\n    if (typeof callback === 'string') {\n      func = function func() {\n        return this[callback]();\n      };\n    }\n\n    if (token) {\n      formatTokenFunctions[token] = func;\n    }\n\n    if (padded) {\n      formatTokenFunctions[padded[0]] = function () {\n        return zeroFill(func.apply(this, arguments), padded[1], padded[2]);\n      };\n    }\n\n    if (ordinal) {\n      formatTokenFunctions[ordinal] = function () {\n        return this.localeData().ordinal(func.apply(this, arguments), token);\n      };\n    }\n  }\n\n  function removeFormattingTokens(input) {\n    if (input.match(/\\[[\\s\\S]/)) {\n      return input.replace(/^\\[|\\]$/g, '');\n    }\n\n    return input.replace(/\\\\/g, '');\n  }\n\n  function makeFormatFunction(format) {\n    var array = format.match(formattingTokens),\n        i,\n        length;\n\n    for (i = 0, length = array.length; i < length; i++) {\n      if (formatTokenFunctions[array[i]]) {\n        array[i] = formatTokenFunctions[array[i]];\n      } else {\n        array[i] = removeFormattingTokens(array[i]);\n      }\n    }\n\n    return function (mom) {\n      var output = '',\n          i;\n\n      for (i = 0; i < length; i++) {\n        output += isFunction(array[i]) ? array[i].call(mom, format) : array[i];\n      }\n\n      return output;\n    };\n  } // format date using native date object\n\n\n  function formatMoment(m, format) {\n    if (!m.isValid()) {\n      return m.localeData().invalidDate();\n    }\n\n    format = expandFormat(format, m.localeData());\n    formatFunctions[format] = formatFunctions[format] || makeFormatFunction(format);\n    return formatFunctions[format](m);\n  }\n\n  function expandFormat(format, locale) {\n    var i = 5;\n\n    function replaceLongDateFormatTokens(input) {\n      return locale.longDateFormat(input) || input;\n    }\n\n    localFormattingTokens.lastIndex = 0;\n\n    while (i >= 0 && localFormattingTokens.test(format)) {\n      format = format.replace(localFormattingTokens, replaceLongDateFormatTokens);\n      localFormattingTokens.lastIndex = 0;\n      i -= 1;\n    }\n\n    return format;\n  }\n\n  var match1 = /\\d/; //       0 - 9\n\n  var match2 = /\\d\\d/; //      00 - 99\n\n  var match3 = /\\d{3}/; //     000 - 999\n\n  var match4 = /\\d{4}/; //    0000 - 9999\n\n  var match6 = /[+-]?\\d{6}/; // -999999 - 999999\n\n  var match1to2 = /\\d\\d?/; //       0 - 99\n\n  var match3to4 = /\\d\\d\\d\\d?/; //     999 - 9999\n\n  var match5to6 = /\\d\\d\\d\\d\\d\\d?/; //   99999 - 999999\n\n  var match1to3 = /\\d{1,3}/; //       0 - 999\n\n  var match1to4 = /\\d{1,4}/; //       0 - 9999\n\n  var match1to6 = /[+-]?\\d{1,6}/; // -999999 - 999999\n\n  var matchUnsigned = /\\d+/; //       0 - inf\n\n  var matchSigned = /[+-]?\\d+/; //    -inf - inf\n\n  var matchOffset = /Z|[+-]\\d\\d:?\\d\\d/gi; // +00:00 -00:00 +0000 -0000 or Z\n\n  var matchShortOffset = /Z|[+-]\\d\\d(?::?\\d\\d)?/gi; // +00 -00 +00:00 -00:00 +0000 -0000 or Z\n\n  var matchTimestamp = /[+-]?\\d+(\\.\\d{1,3})?/; // 123456789 123456789.123\n  // any word (or two) characters or numbers including two/three word month in arabic.\n  // includes scottish gaelic two word and hyphenated months\n\n  var matchWord = /[0-9]{0,256}['a-z\\u00A0-\\u05FF\\u0700-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFF07\\uFF10-\\uFFEF]{1,256}|[\\u0600-\\u06FF\\/]{1,256}(\\s*?[\\u0600-\\u06FF]{1,256}){1,2}/i;\n  var regexes = {};\n\n  function addRegexToken(token, regex, strictRegex) {\n    regexes[token] = isFunction(regex) ? regex : function (isStrict, localeData) {\n      return isStrict && strictRegex ? strictRegex : regex;\n    };\n  }\n\n  function getParseRegexForToken(token, config) {\n    if (!hasOwnProp(regexes, token)) {\n      return new RegExp(unescapeFormat(token));\n    }\n\n    return regexes[token](config._strict, config._locale);\n  } // Code from http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript\n\n\n  function unescapeFormat(s) {\n    return regexEscape(s.replace('\\\\', '').replace(/\\\\(\\[)|\\\\(\\])|\\[([^\\]\\[]*)\\]|\\\\(.)/g, function (matched, p1, p2, p3, p4) {\n      return p1 || p2 || p3 || p4;\n    }));\n  }\n\n  function regexEscape(s) {\n    return s.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n  }\n\n  var tokens = {};\n\n  function addParseToken(token, callback) {\n    var i,\n        func = callback;\n\n    if (typeof token === 'string') {\n      token = [token];\n    }\n\n    if (isNumber(callback)) {\n      func = function func(input, array) {\n        array[callback] = toInt(input);\n      };\n    }\n\n    for (i = 0; i < token.length; i++) {\n      tokens[token[i]] = func;\n    }\n  }\n\n  function addWeekParseToken(token, callback) {\n    addParseToken(token, function (input, array, config, token) {\n      config._w = config._w || {};\n      callback(input, config._w, config, token);\n    });\n  }\n\n  function addTimeToArrayFromToken(token, input, config) {\n    if (input != null && hasOwnProp(tokens, token)) {\n      tokens[token](input, config._a, config, token);\n    }\n  }\n\n  var YEAR = 0;\n  var MONTH = 1;\n  var DATE = 2;\n  var HOUR = 3;\n  var MINUTE = 4;\n  var SECOND = 5;\n  var MILLISECOND = 6;\n  var WEEK = 7;\n  var WEEKDAY = 8; // FORMATTING\n\n  addFormatToken('Y', 0, 0, function () {\n    var y = this.year();\n    return y <= 9999 ? '' + y : '+' + y;\n  });\n  addFormatToken(0, ['YY', 2], 0, function () {\n    return this.year() % 100;\n  });\n  addFormatToken(0, ['YYYY', 4], 0, 'year');\n  addFormatToken(0, ['YYYYY', 5], 0, 'year');\n  addFormatToken(0, ['YYYYYY', 6, true], 0, 'year'); // ALIASES\n\n  addUnitAlias('year', 'y'); // PRIORITIES\n\n  addUnitPriority('year', 1); // PARSING\n\n  addRegexToken('Y', matchSigned);\n  addRegexToken('YY', match1to2, match2);\n  addRegexToken('YYYY', match1to4, match4);\n  addRegexToken('YYYYY', match1to6, match6);\n  addRegexToken('YYYYYY', match1to6, match6);\n  addParseToken(['YYYYY', 'YYYYYY'], YEAR);\n  addParseToken('YYYY', function (input, array) {\n    array[YEAR] = input.length === 2 ? hooks.parseTwoDigitYear(input) : toInt(input);\n  });\n  addParseToken('YY', function (input, array) {\n    array[YEAR] = hooks.parseTwoDigitYear(input);\n  });\n  addParseToken('Y', function (input, array) {\n    array[YEAR] = parseInt(input, 10);\n  }); // HELPERS\n\n  function daysInYear(year) {\n    return isLeapYear(year) ? 366 : 365;\n  }\n\n  function isLeapYear(year) {\n    return year % 4 === 0 && year % 100 !== 0 || year % 400 === 0;\n  } // HOOKS\n\n\n  hooks.parseTwoDigitYear = function (input) {\n    return toInt(input) + (toInt(input) > 68 ? 1900 : 2000);\n  }; // MOMENTS\n\n\n  var getSetYear = makeGetSet('FullYear', true);\n\n  function getIsLeapYear() {\n    return isLeapYear(this.year());\n  }\n\n  function makeGetSet(unit, keepTime) {\n    return function (value) {\n      if (value != null) {\n        set$1(this, unit, value);\n        hooks.updateOffset(this, keepTime);\n        return this;\n      } else {\n        return get(this, unit);\n      }\n    };\n  }\n\n  function get(mom, unit) {\n    return mom.isValid() ? mom._d['get' + (mom._isUTC ? 'UTC' : '') + unit]() : NaN;\n  }\n\n  function set$1(mom, unit, value) {\n    if (mom.isValid() && !isNaN(value)) {\n      if (unit === 'FullYear' && isLeapYear(mom.year()) && mom.month() === 1 && mom.date() === 29) {\n        mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value, mom.month(), daysInMonth(value, mom.month()));\n      } else {\n        mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value);\n      }\n    }\n  } // MOMENTS\n\n\n  function stringGet(units) {\n    units = normalizeUnits(units);\n\n    if (isFunction(this[units])) {\n      return this[units]();\n    }\n\n    return this;\n  }\n\n  function stringSet(units, value) {\n    if (_typeof(units) === 'object') {\n      units = normalizeObjectUnits(units);\n      var prioritized = getPrioritizedUnits(units);\n\n      for (var i = 0; i < prioritized.length; i++) {\n        this[prioritized[i].unit](units[prioritized[i].unit]);\n      }\n    } else {\n      units = normalizeUnits(units);\n\n      if (isFunction(this[units])) {\n        return this[units](value);\n      }\n    }\n\n    return this;\n  }\n\n  function mod(n, x) {\n    return (n % x + x) % x;\n  }\n\n  var indexOf;\n\n  if (Array.prototype.indexOf) {\n    indexOf = Array.prototype.indexOf;\n  } else {\n    indexOf = function indexOf(o) {\n      // I know\n      var i;\n\n      for (i = 0; i < this.length; ++i) {\n        if (this[i] === o) {\n          return i;\n        }\n      }\n\n      return -1;\n    };\n  }\n\n  function daysInMonth(year, month) {\n    if (isNaN(year) || isNaN(month)) {\n      return NaN;\n    }\n\n    var modMonth = mod(month, 12);\n    year += (month - modMonth) / 12;\n    return modMonth === 1 ? isLeapYear(year) ? 29 : 28 : 31 - modMonth % 7 % 2;\n  } // FORMATTING\n\n\n  addFormatToken('M', ['MM', 2], 'Mo', function () {\n    return this.month() + 1;\n  });\n  addFormatToken('MMM', 0, 0, function (format) {\n    return this.localeData().monthsShort(this, format);\n  });\n  addFormatToken('MMMM', 0, 0, function (format) {\n    return this.localeData().months(this, format);\n  }); // ALIASES\n\n  addUnitAlias('month', 'M'); // PRIORITY\n\n  addUnitPriority('month', 8); // PARSING\n\n  addRegexToken('M', match1to2);\n  addRegexToken('MM', match1to2, match2);\n  addRegexToken('MMM', function (isStrict, locale) {\n    return locale.monthsShortRegex(isStrict);\n  });\n  addRegexToken('MMMM', function (isStrict, locale) {\n    return locale.monthsRegex(isStrict);\n  });\n  addParseToken(['M', 'MM'], function (input, array) {\n    array[MONTH] = toInt(input) - 1;\n  });\n  addParseToken(['MMM', 'MMMM'], function (input, array, config, token) {\n    var month = config._locale.monthsParse(input, token, config._strict); // if we didn't find a month name, mark the date as invalid.\n\n\n    if (month != null) {\n      array[MONTH] = month;\n    } else {\n      getParsingFlags(config).invalidMonth = input;\n    }\n  }); // LOCALES\n\n  var MONTHS_IN_FORMAT = /D[oD]?(\\[[^\\[\\]]*\\]|\\s)+MMMM?/;\n  var defaultLocaleMonths = 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_');\n\n  function localeMonths(m, format) {\n    if (!m) {\n      return isArray(this._months) ? this._months : this._months['standalone'];\n    }\n\n    return isArray(this._months) ? this._months[m.month()] : this._months[(this._months.isFormat || MONTHS_IN_FORMAT).test(format) ? 'format' : 'standalone'][m.month()];\n  }\n\n  var defaultLocaleMonthsShort = 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_');\n\n  function localeMonthsShort(m, format) {\n    if (!m) {\n      return isArray(this._monthsShort) ? this._monthsShort : this._monthsShort['standalone'];\n    }\n\n    return isArray(this._monthsShort) ? this._monthsShort[m.month()] : this._monthsShort[MONTHS_IN_FORMAT.test(format) ? 'format' : 'standalone'][m.month()];\n  }\n\n  function handleStrictParse(monthName, format, strict) {\n    var i,\n        ii,\n        mom,\n        llc = monthName.toLocaleLowerCase();\n\n    if (!this._monthsParse) {\n      // this is not used\n      this._monthsParse = [];\n      this._longMonthsParse = [];\n      this._shortMonthsParse = [];\n\n      for (i = 0; i < 12; ++i) {\n        mom = createUTC([2000, i]);\n        this._shortMonthsParse[i] = this.monthsShort(mom, '').toLocaleLowerCase();\n        this._longMonthsParse[i] = this.months(mom, '').toLocaleLowerCase();\n      }\n    }\n\n    if (strict) {\n      if (format === 'MMM') {\n        ii = indexOf.call(this._shortMonthsParse, llc);\n        return ii !== -1 ? ii : null;\n      } else {\n        ii = indexOf.call(this._longMonthsParse, llc);\n        return ii !== -1 ? ii : null;\n      }\n    } else {\n      if (format === 'MMM') {\n        ii = indexOf.call(this._shortMonthsParse, llc);\n\n        if (ii !== -1) {\n          return ii;\n        }\n\n        ii = indexOf.call(this._longMonthsParse, llc);\n        return ii !== -1 ? ii : null;\n      } else {\n        ii = indexOf.call(this._longMonthsParse, llc);\n\n        if (ii !== -1) {\n          return ii;\n        }\n\n        ii = indexOf.call(this._shortMonthsParse, llc);\n        return ii !== -1 ? ii : null;\n      }\n    }\n  }\n\n  function localeMonthsParse(monthName, format, strict) {\n    var i, mom, regex;\n\n    if (this._monthsParseExact) {\n      return handleStrictParse.call(this, monthName, format, strict);\n    }\n\n    if (!this._monthsParse) {\n      this._monthsParse = [];\n      this._longMonthsParse = [];\n      this._shortMonthsParse = [];\n    } // TODO: add sorting\n    // Sorting makes sure if one month (or abbr) is a prefix of another\n    // see sorting in computeMonthsParse\n\n\n    for (i = 0; i < 12; i++) {\n      // make the regex if we don't have it already\n      mom = createUTC([2000, i]);\n\n      if (strict && !this._longMonthsParse[i]) {\n        this._longMonthsParse[i] = new RegExp('^' + this.months(mom, '').replace('.', '') + '$', 'i');\n        this._shortMonthsParse[i] = new RegExp('^' + this.monthsShort(mom, '').replace('.', '') + '$', 'i');\n      }\n\n      if (!strict && !this._monthsParse[i]) {\n        regex = '^' + this.months(mom, '') + '|^' + this.monthsShort(mom, '');\n        this._monthsParse[i] = new RegExp(regex.replace('.', ''), 'i');\n      } // test the regex\n\n\n      if (strict && format === 'MMMM' && this._longMonthsParse[i].test(monthName)) {\n        return i;\n      } else if (strict && format === 'MMM' && this._shortMonthsParse[i].test(monthName)) {\n        return i;\n      } else if (!strict && this._monthsParse[i].test(monthName)) {\n        return i;\n      }\n    }\n  } // MOMENTS\n\n\n  function setMonth(mom, value) {\n    var dayOfMonth;\n\n    if (!mom.isValid()) {\n      // No op\n      return mom;\n    }\n\n    if (typeof value === 'string') {\n      if (/^\\d+$/.test(value)) {\n        value = toInt(value);\n      } else {\n        value = mom.localeData().monthsParse(value); // TODO: Another silent failure?\n\n        if (!isNumber(value)) {\n          return mom;\n        }\n      }\n    }\n\n    dayOfMonth = Math.min(mom.date(), daysInMonth(mom.year(), value));\n\n    mom._d['set' + (mom._isUTC ? 'UTC' : '') + 'Month'](value, dayOfMonth);\n\n    return mom;\n  }\n\n  function getSetMonth(value) {\n    if (value != null) {\n      setMonth(this, value);\n      hooks.updateOffset(this, true);\n      return this;\n    } else {\n      return get(this, 'Month');\n    }\n  }\n\n  function getDaysInMonth() {\n    return daysInMonth(this.year(), this.month());\n  }\n\n  var defaultMonthsShortRegex = matchWord;\n\n  function monthsShortRegex(isStrict) {\n    if (this._monthsParseExact) {\n      if (!hasOwnProp(this, '_monthsRegex')) {\n        computeMonthsParse.call(this);\n      }\n\n      if (isStrict) {\n        return this._monthsShortStrictRegex;\n      } else {\n        return this._monthsShortRegex;\n      }\n    } else {\n      if (!hasOwnProp(this, '_monthsShortRegex')) {\n        this._monthsShortRegex = defaultMonthsShortRegex;\n      }\n\n      return this._monthsShortStrictRegex && isStrict ? this._monthsShortStrictRegex : this._monthsShortRegex;\n    }\n  }\n\n  var defaultMonthsRegex = matchWord;\n\n  function monthsRegex(isStrict) {\n    if (this._monthsParseExact) {\n      if (!hasOwnProp(this, '_monthsRegex')) {\n        computeMonthsParse.call(this);\n      }\n\n      if (isStrict) {\n        return this._monthsStrictRegex;\n      } else {\n        return this._monthsRegex;\n      }\n    } else {\n      if (!hasOwnProp(this, '_monthsRegex')) {\n        this._monthsRegex = defaultMonthsRegex;\n      }\n\n      return this._monthsStrictRegex && isStrict ? this._monthsStrictRegex : this._monthsRegex;\n    }\n  }\n\n  function computeMonthsParse() {\n    function cmpLenRev(a, b) {\n      return b.length - a.length;\n    }\n\n    var shortPieces = [],\n        longPieces = [],\n        mixedPieces = [],\n        i,\n        mom;\n\n    for (i = 0; i < 12; i++) {\n      // make the regex if we don't have it already\n      mom = createUTC([2000, i]);\n      shortPieces.push(this.monthsShort(mom, ''));\n      longPieces.push(this.months(mom, ''));\n      mixedPieces.push(this.months(mom, ''));\n      mixedPieces.push(this.monthsShort(mom, ''));\n    } // Sorting makes sure if one month (or abbr) is a prefix of another it\n    // will match the longer piece.\n\n\n    shortPieces.sort(cmpLenRev);\n    longPieces.sort(cmpLenRev);\n    mixedPieces.sort(cmpLenRev);\n\n    for (i = 0; i < 12; i++) {\n      shortPieces[i] = regexEscape(shortPieces[i]);\n      longPieces[i] = regexEscape(longPieces[i]);\n    }\n\n    for (i = 0; i < 24; i++) {\n      mixedPieces[i] = regexEscape(mixedPieces[i]);\n    }\n\n    this._monthsRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n    this._monthsShortRegex = this._monthsRegex;\n    this._monthsStrictRegex = new RegExp('^(' + longPieces.join('|') + ')', 'i');\n    this._monthsShortStrictRegex = new RegExp('^(' + shortPieces.join('|') + ')', 'i');\n  }\n\n  function createDate(y, m, d, h, M, s, ms) {\n    // can't just apply() to create a date:\n    // https://stackoverflow.com/q/181348\n    var date; // the date constructor remaps years 0-99 to 1900-1999\n\n    if (y < 100 && y >= 0) {\n      // preserve leap years using a full 400 year cycle, then reset\n      date = new Date(y + 400, m, d, h, M, s, ms);\n\n      if (isFinite(date.getFullYear())) {\n        date.setFullYear(y);\n      }\n    } else {\n      date = new Date(y, m, d, h, M, s, ms);\n    }\n\n    return date;\n  }\n\n  function createUTCDate(y) {\n    var date; // the Date.UTC function remaps years 0-99 to 1900-1999\n\n    if (y < 100 && y >= 0) {\n      var args = Array.prototype.slice.call(arguments); // preserve leap years using a full 400 year cycle, then reset\n\n      args[0] = y + 400;\n      date = new Date(Date.UTC.apply(null, args));\n\n      if (isFinite(date.getUTCFullYear())) {\n        date.setUTCFullYear(y);\n      }\n    } else {\n      date = new Date(Date.UTC.apply(null, arguments));\n    }\n\n    return date;\n  } // start-of-first-week - start-of-year\n\n\n  function firstWeekOffset(year, dow, doy) {\n    var // first-week day -- which january is always in the first week (4 for iso, 1 for other)\n    fwd = 7 + dow - doy,\n        // first-week day local weekday -- which local weekday is fwd\n    fwdlw = (7 + createUTCDate(year, 0, fwd).getUTCDay() - dow) % 7;\n    return -fwdlw + fwd - 1;\n  } // https://en.wikipedia.org/wiki/ISO_week_date#Calculating_a_date_given_the_year.2C_week_number_and_weekday\n\n\n  function dayOfYearFromWeeks(year, week, weekday, dow, doy) {\n    var localWeekday = (7 + weekday - dow) % 7,\n        weekOffset = firstWeekOffset(year, dow, doy),\n        dayOfYear = 1 + 7 * (week - 1) + localWeekday + weekOffset,\n        resYear,\n        resDayOfYear;\n\n    if (dayOfYear <= 0) {\n      resYear = year - 1;\n      resDayOfYear = daysInYear(resYear) + dayOfYear;\n    } else if (dayOfYear > daysInYear(year)) {\n      resYear = year + 1;\n      resDayOfYear = dayOfYear - daysInYear(year);\n    } else {\n      resYear = year;\n      resDayOfYear = dayOfYear;\n    }\n\n    return {\n      year: resYear,\n      dayOfYear: resDayOfYear\n    };\n  }\n\n  function weekOfYear(mom, dow, doy) {\n    var weekOffset = firstWeekOffset(mom.year(), dow, doy),\n        week = Math.floor((mom.dayOfYear() - weekOffset - 1) / 7) + 1,\n        resWeek,\n        resYear;\n\n    if (week < 1) {\n      resYear = mom.year() - 1;\n      resWeek = week + weeksInYear(resYear, dow, doy);\n    } else if (week > weeksInYear(mom.year(), dow, doy)) {\n      resWeek = week - weeksInYear(mom.year(), dow, doy);\n      resYear = mom.year() + 1;\n    } else {\n      resYear = mom.year();\n      resWeek = week;\n    }\n\n    return {\n      week: resWeek,\n      year: resYear\n    };\n  }\n\n  function weeksInYear(year, dow, doy) {\n    var weekOffset = firstWeekOffset(year, dow, doy),\n        weekOffsetNext = firstWeekOffset(year + 1, dow, doy);\n    return (daysInYear(year) - weekOffset + weekOffsetNext) / 7;\n  } // FORMATTING\n\n\n  addFormatToken('w', ['ww', 2], 'wo', 'week');\n  addFormatToken('W', ['WW', 2], 'Wo', 'isoWeek'); // ALIASES\n\n  addUnitAlias('week', 'w');\n  addUnitAlias('isoWeek', 'W'); // PRIORITIES\n\n  addUnitPriority('week', 5);\n  addUnitPriority('isoWeek', 5); // PARSING\n\n  addRegexToken('w', match1to2);\n  addRegexToken('ww', match1to2, match2);\n  addRegexToken('W', match1to2);\n  addRegexToken('WW', match1to2, match2);\n  addWeekParseToken(['w', 'ww', 'W', 'WW'], function (input, week, config, token) {\n    week[token.substr(0, 1)] = toInt(input);\n  }); // HELPERS\n  // LOCALES\n\n  function localeWeek(mom) {\n    return weekOfYear(mom, this._week.dow, this._week.doy).week;\n  }\n\n  var defaultLocaleWeek = {\n    dow: 0,\n    // Sunday is the first day of the week.\n    doy: 6 // The week that contains Jan 6th is the first week of the year.\n\n  };\n\n  function localeFirstDayOfWeek() {\n    return this._week.dow;\n  }\n\n  function localeFirstDayOfYear() {\n    return this._week.doy;\n  } // MOMENTS\n\n\n  function getSetWeek(input) {\n    var week = this.localeData().week(this);\n    return input == null ? week : this.add((input - week) * 7, 'd');\n  }\n\n  function getSetISOWeek(input) {\n    var week = weekOfYear(this, 1, 4).week;\n    return input == null ? week : this.add((input - week) * 7, 'd');\n  } // FORMATTING\n\n\n  addFormatToken('d', 0, 'do', 'day');\n  addFormatToken('dd', 0, 0, function (format) {\n    return this.localeData().weekdaysMin(this, format);\n  });\n  addFormatToken('ddd', 0, 0, function (format) {\n    return this.localeData().weekdaysShort(this, format);\n  });\n  addFormatToken('dddd', 0, 0, function (format) {\n    return this.localeData().weekdays(this, format);\n  });\n  addFormatToken('e', 0, 0, 'weekday');\n  addFormatToken('E', 0, 0, 'isoWeekday'); // ALIASES\n\n  addUnitAlias('day', 'd');\n  addUnitAlias('weekday', 'e');\n  addUnitAlias('isoWeekday', 'E'); // PRIORITY\n\n  addUnitPriority('day', 11);\n  addUnitPriority('weekday', 11);\n  addUnitPriority('isoWeekday', 11); // PARSING\n\n  addRegexToken('d', match1to2);\n  addRegexToken('e', match1to2);\n  addRegexToken('E', match1to2);\n  addRegexToken('dd', function (isStrict, locale) {\n    return locale.weekdaysMinRegex(isStrict);\n  });\n  addRegexToken('ddd', function (isStrict, locale) {\n    return locale.weekdaysShortRegex(isStrict);\n  });\n  addRegexToken('dddd', function (isStrict, locale) {\n    return locale.weekdaysRegex(isStrict);\n  });\n  addWeekParseToken(['dd', 'ddd', 'dddd'], function (input, week, config, token) {\n    var weekday = config._locale.weekdaysParse(input, token, config._strict); // if we didn't get a weekday name, mark the date as invalid\n\n\n    if (weekday != null) {\n      week.d = weekday;\n    } else {\n      getParsingFlags(config).invalidWeekday = input;\n    }\n  });\n  addWeekParseToken(['d', 'e', 'E'], function (input, week, config, token) {\n    week[token] = toInt(input);\n  }); // HELPERS\n\n  function parseWeekday(input, locale) {\n    if (typeof input !== 'string') {\n      return input;\n    }\n\n    if (!isNaN(input)) {\n      return parseInt(input, 10);\n    }\n\n    input = locale.weekdaysParse(input);\n\n    if (typeof input === 'number') {\n      return input;\n    }\n\n    return null;\n  }\n\n  function parseIsoWeekday(input, locale) {\n    if (typeof input === 'string') {\n      return locale.weekdaysParse(input) % 7 || 7;\n    }\n\n    return isNaN(input) ? null : input;\n  } // LOCALES\n\n\n  function shiftWeekdays(ws, n) {\n    return ws.slice(n, 7).concat(ws.slice(0, n));\n  }\n\n  var defaultLocaleWeekdays = 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_');\n\n  function localeWeekdays(m, format) {\n    var weekdays = isArray(this._weekdays) ? this._weekdays : this._weekdays[m && m !== true && this._weekdays.isFormat.test(format) ? 'format' : 'standalone'];\n    return m === true ? shiftWeekdays(weekdays, this._week.dow) : m ? weekdays[m.day()] : weekdays;\n  }\n\n  var defaultLocaleWeekdaysShort = 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_');\n\n  function localeWeekdaysShort(m) {\n    return m === true ? shiftWeekdays(this._weekdaysShort, this._week.dow) : m ? this._weekdaysShort[m.day()] : this._weekdaysShort;\n  }\n\n  var defaultLocaleWeekdaysMin = 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_');\n\n  function localeWeekdaysMin(m) {\n    return m === true ? shiftWeekdays(this._weekdaysMin, this._week.dow) : m ? this._weekdaysMin[m.day()] : this._weekdaysMin;\n  }\n\n  function handleStrictParse$1(weekdayName, format, strict) {\n    var i,\n        ii,\n        mom,\n        llc = weekdayName.toLocaleLowerCase();\n\n    if (!this._weekdaysParse) {\n      this._weekdaysParse = [];\n      this._shortWeekdaysParse = [];\n      this._minWeekdaysParse = [];\n\n      for (i = 0; i < 7; ++i) {\n        mom = createUTC([2000, 1]).day(i);\n        this._minWeekdaysParse[i] = this.weekdaysMin(mom, '').toLocaleLowerCase();\n        this._shortWeekdaysParse[i] = this.weekdaysShort(mom, '').toLocaleLowerCase();\n        this._weekdaysParse[i] = this.weekdays(mom, '').toLocaleLowerCase();\n      }\n    }\n\n    if (strict) {\n      if (format === 'dddd') {\n        ii = indexOf.call(this._weekdaysParse, llc);\n        return ii !== -1 ? ii : null;\n      } else if (format === 'ddd') {\n        ii = indexOf.call(this._shortWeekdaysParse, llc);\n        return ii !== -1 ? ii : null;\n      } else {\n        ii = indexOf.call(this._minWeekdaysParse, llc);\n        return ii !== -1 ? ii : null;\n      }\n    } else {\n      if (format === 'dddd') {\n        ii = indexOf.call(this._weekdaysParse, llc);\n\n        if (ii !== -1) {\n          return ii;\n        }\n\n        ii = indexOf.call(this._shortWeekdaysParse, llc);\n\n        if (ii !== -1) {\n          return ii;\n        }\n\n        ii = indexOf.call(this._minWeekdaysParse, llc);\n        return ii !== -1 ? ii : null;\n      } else if (format === 'ddd') {\n        ii = indexOf.call(this._shortWeekdaysParse, llc);\n\n        if (ii !== -1) {\n          return ii;\n        }\n\n        ii = indexOf.call(this._weekdaysParse, llc);\n\n        if (ii !== -1) {\n          return ii;\n        }\n\n        ii = indexOf.call(this._minWeekdaysParse, llc);\n        return ii !== -1 ? ii : null;\n      } else {\n        ii = indexOf.call(this._minWeekdaysParse, llc);\n\n        if (ii !== -1) {\n          return ii;\n        }\n\n        ii = indexOf.call(this._weekdaysParse, llc);\n\n        if (ii !== -1) {\n          return ii;\n        }\n\n        ii = indexOf.call(this._shortWeekdaysParse, llc);\n        return ii !== -1 ? ii : null;\n      }\n    }\n  }\n\n  function localeWeekdaysParse(weekdayName, format, strict) {\n    var i, mom, regex;\n\n    if (this._weekdaysParseExact) {\n      return handleStrictParse$1.call(this, weekdayName, format, strict);\n    }\n\n    if (!this._weekdaysParse) {\n      this._weekdaysParse = [];\n      this._minWeekdaysParse = [];\n      this._shortWeekdaysParse = [];\n      this._fullWeekdaysParse = [];\n    }\n\n    for (i = 0; i < 7; i++) {\n      // make the regex if we don't have it already\n      mom = createUTC([2000, 1]).day(i);\n\n      if (strict && !this._fullWeekdaysParse[i]) {\n        this._fullWeekdaysParse[i] = new RegExp('^' + this.weekdays(mom, '').replace('.', '\\\\.?') + '$', 'i');\n        this._shortWeekdaysParse[i] = new RegExp('^' + this.weekdaysShort(mom, '').replace('.', '\\\\.?') + '$', 'i');\n        this._minWeekdaysParse[i] = new RegExp('^' + this.weekdaysMin(mom, '').replace('.', '\\\\.?') + '$', 'i');\n      }\n\n      if (!this._weekdaysParse[i]) {\n        regex = '^' + this.weekdays(mom, '') + '|^' + this.weekdaysShort(mom, '') + '|^' + this.weekdaysMin(mom, '');\n        this._weekdaysParse[i] = new RegExp(regex.replace('.', ''), 'i');\n      } // test the regex\n\n\n      if (strict && format === 'dddd' && this._fullWeekdaysParse[i].test(weekdayName)) {\n        return i;\n      } else if (strict && format === 'ddd' && this._shortWeekdaysParse[i].test(weekdayName)) {\n        return i;\n      } else if (strict && format === 'dd' && this._minWeekdaysParse[i].test(weekdayName)) {\n        return i;\n      } else if (!strict && this._weekdaysParse[i].test(weekdayName)) {\n        return i;\n      }\n    }\n  } // MOMENTS\n\n\n  function getSetDayOfWeek(input) {\n    if (!this.isValid()) {\n      return input != null ? this : NaN;\n    }\n\n    var day = this._isUTC ? this._d.getUTCDay() : this._d.getDay();\n\n    if (input != null) {\n      input = parseWeekday(input, this.localeData());\n      return this.add(input - day, 'd');\n    } else {\n      return day;\n    }\n  }\n\n  function getSetLocaleDayOfWeek(input) {\n    if (!this.isValid()) {\n      return input != null ? this : NaN;\n    }\n\n    var weekday = (this.day() + 7 - this.localeData()._week.dow) % 7;\n    return input == null ? weekday : this.add(input - weekday, 'd');\n  }\n\n  function getSetISODayOfWeek(input) {\n    if (!this.isValid()) {\n      return input != null ? this : NaN;\n    } // behaves the same as moment#day except\n    // as a getter, returns 7 instead of 0 (1-7 range instead of 0-6)\n    // as a setter, sunday should belong to the previous week.\n\n\n    if (input != null) {\n      var weekday = parseIsoWeekday(input, this.localeData());\n      return this.day(this.day() % 7 ? weekday : weekday - 7);\n    } else {\n      return this.day() || 7;\n    }\n  }\n\n  var defaultWeekdaysRegex = matchWord;\n\n  function weekdaysRegex(isStrict) {\n    if (this._weekdaysParseExact) {\n      if (!hasOwnProp(this, '_weekdaysRegex')) {\n        computeWeekdaysParse.call(this);\n      }\n\n      if (isStrict) {\n        return this._weekdaysStrictRegex;\n      } else {\n        return this._weekdaysRegex;\n      }\n    } else {\n      if (!hasOwnProp(this, '_weekdaysRegex')) {\n        this._weekdaysRegex = defaultWeekdaysRegex;\n      }\n\n      return this._weekdaysStrictRegex && isStrict ? this._weekdaysStrictRegex : this._weekdaysRegex;\n    }\n  }\n\n  var defaultWeekdaysShortRegex = matchWord;\n\n  function weekdaysShortRegex(isStrict) {\n    if (this._weekdaysParseExact) {\n      if (!hasOwnProp(this, '_weekdaysRegex')) {\n        computeWeekdaysParse.call(this);\n      }\n\n      if (isStrict) {\n        return this._weekdaysShortStrictRegex;\n      } else {\n        return this._weekdaysShortRegex;\n      }\n    } else {\n      if (!hasOwnProp(this, '_weekdaysShortRegex')) {\n        this._weekdaysShortRegex = defaultWeekdaysShortRegex;\n      }\n\n      return this._weekdaysShortStrictRegex && isStrict ? this._weekdaysShortStrictRegex : this._weekdaysShortRegex;\n    }\n  }\n\n  var defaultWeekdaysMinRegex = matchWord;\n\n  function weekdaysMinRegex(isStrict) {\n    if (this._weekdaysParseExact) {\n      if (!hasOwnProp(this, '_weekdaysRegex')) {\n        computeWeekdaysParse.call(this);\n      }\n\n      if (isStrict) {\n        return this._weekdaysMinStrictRegex;\n      } else {\n        return this._weekdaysMinRegex;\n      }\n    } else {\n      if (!hasOwnProp(this, '_weekdaysMinRegex')) {\n        this._weekdaysMinRegex = defaultWeekdaysMinRegex;\n      }\n\n      return this._weekdaysMinStrictRegex && isStrict ? this._weekdaysMinStrictRegex : this._weekdaysMinRegex;\n    }\n  }\n\n  function computeWeekdaysParse() {\n    function cmpLenRev(a, b) {\n      return b.length - a.length;\n    }\n\n    var minPieces = [],\n        shortPieces = [],\n        longPieces = [],\n        mixedPieces = [],\n        i,\n        mom,\n        minp,\n        shortp,\n        longp;\n\n    for (i = 0; i < 7; i++) {\n      // make the regex if we don't have it already\n      mom = createUTC([2000, 1]).day(i);\n      minp = this.weekdaysMin(mom, '');\n      shortp = this.weekdaysShort(mom, '');\n      longp = this.weekdays(mom, '');\n      minPieces.push(minp);\n      shortPieces.push(shortp);\n      longPieces.push(longp);\n      mixedPieces.push(minp);\n      mixedPieces.push(shortp);\n      mixedPieces.push(longp);\n    } // Sorting makes sure if one weekday (or abbr) is a prefix of another it\n    // will match the longer piece.\n\n\n    minPieces.sort(cmpLenRev);\n    shortPieces.sort(cmpLenRev);\n    longPieces.sort(cmpLenRev);\n    mixedPieces.sort(cmpLenRev);\n\n    for (i = 0; i < 7; i++) {\n      shortPieces[i] = regexEscape(shortPieces[i]);\n      longPieces[i] = regexEscape(longPieces[i]);\n      mixedPieces[i] = regexEscape(mixedPieces[i]);\n    }\n\n    this._weekdaysRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n    this._weekdaysShortRegex = this._weekdaysRegex;\n    this._weekdaysMinRegex = this._weekdaysRegex;\n    this._weekdaysStrictRegex = new RegExp('^(' + longPieces.join('|') + ')', 'i');\n    this._weekdaysShortStrictRegex = new RegExp('^(' + shortPieces.join('|') + ')', 'i');\n    this._weekdaysMinStrictRegex = new RegExp('^(' + minPieces.join('|') + ')', 'i');\n  } // FORMATTING\n\n\n  function hFormat() {\n    return this.hours() % 12 || 12;\n  }\n\n  function kFormat() {\n    return this.hours() || 24;\n  }\n\n  addFormatToken('H', ['HH', 2], 0, 'hour');\n  addFormatToken('h', ['hh', 2], 0, hFormat);\n  addFormatToken('k', ['kk', 2], 0, kFormat);\n  addFormatToken('hmm', 0, 0, function () {\n    return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2);\n  });\n  addFormatToken('hmmss', 0, 0, function () {\n    return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2) + zeroFill(this.seconds(), 2);\n  });\n  addFormatToken('Hmm', 0, 0, function () {\n    return '' + this.hours() + zeroFill(this.minutes(), 2);\n  });\n  addFormatToken('Hmmss', 0, 0, function () {\n    return '' + this.hours() + zeroFill(this.minutes(), 2) + zeroFill(this.seconds(), 2);\n  });\n\n  function meridiem(token, lowercase) {\n    addFormatToken(token, 0, 0, function () {\n      return this.localeData().meridiem(this.hours(), this.minutes(), lowercase);\n    });\n  }\n\n  meridiem('a', true);\n  meridiem('A', false); // ALIASES\n\n  addUnitAlias('hour', 'h'); // PRIORITY\n\n  addUnitPriority('hour', 13); // PARSING\n\n  function matchMeridiem(isStrict, locale) {\n    return locale._meridiemParse;\n  }\n\n  addRegexToken('a', matchMeridiem);\n  addRegexToken('A', matchMeridiem);\n  addRegexToken('H', match1to2);\n  addRegexToken('h', match1to2);\n  addRegexToken('k', match1to2);\n  addRegexToken('HH', match1to2, match2);\n  addRegexToken('hh', match1to2, match2);\n  addRegexToken('kk', match1to2, match2);\n  addRegexToken('hmm', match3to4);\n  addRegexToken('hmmss', match5to6);\n  addRegexToken('Hmm', match3to4);\n  addRegexToken('Hmmss', match5to6);\n  addParseToken(['H', 'HH'], HOUR);\n  addParseToken(['k', 'kk'], function (input, array, config) {\n    var kInput = toInt(input);\n    array[HOUR] = kInput === 24 ? 0 : kInput;\n  });\n  addParseToken(['a', 'A'], function (input, array, config) {\n    config._isPm = config._locale.isPM(input);\n    config._meridiem = input;\n  });\n  addParseToken(['h', 'hh'], function (input, array, config) {\n    array[HOUR] = toInt(input);\n    getParsingFlags(config).bigHour = true;\n  });\n  addParseToken('hmm', function (input, array, config) {\n    var pos = input.length - 2;\n    array[HOUR] = toInt(input.substr(0, pos));\n    array[MINUTE] = toInt(input.substr(pos));\n    getParsingFlags(config).bigHour = true;\n  });\n  addParseToken('hmmss', function (input, array, config) {\n    var pos1 = input.length - 4;\n    var pos2 = input.length - 2;\n    array[HOUR] = toInt(input.substr(0, pos1));\n    array[MINUTE] = toInt(input.substr(pos1, 2));\n    array[SECOND] = toInt(input.substr(pos2));\n    getParsingFlags(config).bigHour = true;\n  });\n  addParseToken('Hmm', function (input, array, config) {\n    var pos = input.length - 2;\n    array[HOUR] = toInt(input.substr(0, pos));\n    array[MINUTE] = toInt(input.substr(pos));\n  });\n  addParseToken('Hmmss', function (input, array, config) {\n    var pos1 = input.length - 4;\n    var pos2 = input.length - 2;\n    array[HOUR] = toInt(input.substr(0, pos1));\n    array[MINUTE] = toInt(input.substr(pos1, 2));\n    array[SECOND] = toInt(input.substr(pos2));\n  }); // LOCALES\n\n  function localeIsPM(input) {\n    // IE8 Quirks Mode & IE7 Standards Mode do not allow accessing strings like arrays\n    // Using charAt should be more compatible.\n    return (input + '').toLowerCase().charAt(0) === 'p';\n  }\n\n  var defaultLocaleMeridiemParse = /[ap]\\.?m?\\.?/i;\n\n  function localeMeridiem(hours, minutes, isLower) {\n    if (hours > 11) {\n      return isLower ? 'pm' : 'PM';\n    } else {\n      return isLower ? 'am' : 'AM';\n    }\n  } // MOMENTS\n  // Setting the hour should keep the time, because the user explicitly\n  // specified which hour they want. So trying to maintain the same hour (in\n  // a new timezone) makes sense. Adding/subtracting hours does not follow\n  // this rule.\n\n\n  var getSetHour = makeGetSet('Hours', true);\n  var baseConfig = {\n    calendar: defaultCalendar,\n    longDateFormat: defaultLongDateFormat,\n    invalidDate: defaultInvalidDate,\n    ordinal: defaultOrdinal,\n    dayOfMonthOrdinalParse: defaultDayOfMonthOrdinalParse,\n    relativeTime: defaultRelativeTime,\n    months: defaultLocaleMonths,\n    monthsShort: defaultLocaleMonthsShort,\n    week: defaultLocaleWeek,\n    weekdays: defaultLocaleWeekdays,\n    weekdaysMin: defaultLocaleWeekdaysMin,\n    weekdaysShort: defaultLocaleWeekdaysShort,\n    meridiemParse: defaultLocaleMeridiemParse\n  }; // internal storage for locale config files\n\n  var locales = {};\n  var localeFamilies = {};\n  var globalLocale;\n\n  function normalizeLocale(key) {\n    return key ? key.toLowerCase().replace('_', '-') : key;\n  } // pick the locale from the array\n  // try ['en-au', 'en-gb'] as 'en-au', 'en-gb', 'en', as in move through the list trying each\n  // substring from most specific to least, but move to the next array item if it's a more specific variant than the current root\n\n\n  function chooseLocale(names) {\n    var i = 0,\n        j,\n        next,\n        locale,\n        split;\n\n    while (i < names.length) {\n      split = normalizeLocale(names[i]).split('-');\n      j = split.length;\n      next = normalizeLocale(names[i + 1]);\n      next = next ? next.split('-') : null;\n\n      while (j > 0) {\n        locale = loadLocale(split.slice(0, j).join('-'));\n\n        if (locale) {\n          return locale;\n        }\n\n        if (next && next.length >= j && compareArrays(split, next, true) >= j - 1) {\n          //the next array item is better than a shallower substring of this one\n          break;\n        }\n\n        j--;\n      }\n\n      i++;\n    }\n\n    return globalLocale;\n  }\n\n  function loadLocale(name) {\n    var oldLocale = null; // TODO: Find a better way to register and load all the locales in Node\n\n    if (!locales[name] && typeof module !== 'undefined' && module && module.exports) {\n      try {\n        oldLocale = globalLocale._abbr;\n        var aliasedRequire = require;\n        aliasedRequire('./locale/' + name);\n        getSetGlobalLocale(oldLocale);\n      } catch (e) {}\n    }\n\n    return locales[name];\n  } // This function will load locale and then set the global locale.  If\n  // no arguments are passed in, it will simply return the current global\n  // locale key.\n\n\n  function getSetGlobalLocale(key, values) {\n    var data;\n\n    if (key) {\n      if (isUndefined(values)) {\n        data = getLocale(key);\n      } else {\n        data = defineLocale(key, values);\n      }\n\n      if (data) {\n        // moment.duration._locale = moment._locale = data;\n        globalLocale = data;\n      } else {\n        if (typeof console !== 'undefined' && console.warn) {\n          //warn user if arguments are passed but the locale could not be set\n          console.warn('Locale ' + key + ' not found. Did you forget to load it?');\n        }\n      }\n    }\n\n    return globalLocale._abbr;\n  }\n\n  function defineLocale(name, config) {\n    if (config !== null) {\n      var locale,\n          parentConfig = baseConfig;\n      config.abbr = name;\n\n      if (locales[name] != null) {\n        deprecateSimple('defineLocaleOverride', 'use moment.updateLocale(localeName, config) to change ' + 'an existing locale. moment.defineLocale(localeName, ' + 'config) should only be used for creating a new locale ' + 'See http://momentjs.com/guides/#/warnings/define-locale/ for more info.');\n        parentConfig = locales[name]._config;\n      } else if (config.parentLocale != null) {\n        if (locales[config.parentLocale] != null) {\n          parentConfig = locales[config.parentLocale]._config;\n        } else {\n          locale = loadLocale(config.parentLocale);\n\n          if (locale != null) {\n            parentConfig = locale._config;\n          } else {\n            if (!localeFamilies[config.parentLocale]) {\n              localeFamilies[config.parentLocale] = [];\n            }\n\n            localeFamilies[config.parentLocale].push({\n              name: name,\n              config: config\n            });\n            return null;\n          }\n        }\n      }\n\n      locales[name] = new Locale(mergeConfigs(parentConfig, config));\n\n      if (localeFamilies[name]) {\n        localeFamilies[name].forEach(function (x) {\n          defineLocale(x.name, x.config);\n        });\n      } // backwards compat for now: also set the locale\n      // make sure we set the locale AFTER all child locales have been\n      // created, so we won't end up with the child locale set.\n\n\n      getSetGlobalLocale(name);\n      return locales[name];\n    } else {\n      // useful for testing\n      delete locales[name];\n      return null;\n    }\n  }\n\n  function updateLocale(name, config) {\n    if (config != null) {\n      var locale,\n          tmpLocale,\n          parentConfig = baseConfig; // MERGE\n\n      tmpLocale = loadLocale(name);\n\n      if (tmpLocale != null) {\n        parentConfig = tmpLocale._config;\n      }\n\n      config = mergeConfigs(parentConfig, config);\n      locale = new Locale(config);\n      locale.parentLocale = locales[name];\n      locales[name] = locale; // backwards compat for now: also set the locale\n\n      getSetGlobalLocale(name);\n    } else {\n      // pass null for config to unupdate, useful for tests\n      if (locales[name] != null) {\n        if (locales[name].parentLocale != null) {\n          locales[name] = locales[name].parentLocale;\n        } else if (locales[name] != null) {\n          delete locales[name];\n        }\n      }\n    }\n\n    return locales[name];\n  } // returns locale data\n\n\n  function getLocale(key) {\n    var locale;\n\n    if (key && key._locale && key._locale._abbr) {\n      key = key._locale._abbr;\n    }\n\n    if (!key) {\n      return globalLocale;\n    }\n\n    if (!isArray(key)) {\n      //short-circuit everything else\n      locale = loadLocale(key);\n\n      if (locale) {\n        return locale;\n      }\n\n      key = [key];\n    }\n\n    return chooseLocale(key);\n  }\n\n  function listLocales() {\n    return keys(locales);\n  }\n\n  function checkOverflow(m) {\n    var overflow;\n    var a = m._a;\n\n    if (a && getParsingFlags(m).overflow === -2) {\n      overflow = a[MONTH] < 0 || a[MONTH] > 11 ? MONTH : a[DATE] < 1 || a[DATE] > daysInMonth(a[YEAR], a[MONTH]) ? DATE : a[HOUR] < 0 || a[HOUR] > 24 || a[HOUR] === 24 && (a[MINUTE] !== 0 || a[SECOND] !== 0 || a[MILLISECOND] !== 0) ? HOUR : a[MINUTE] < 0 || a[MINUTE] > 59 ? MINUTE : a[SECOND] < 0 || a[SECOND] > 59 ? SECOND : a[MILLISECOND] < 0 || a[MILLISECOND] > 999 ? MILLISECOND : -1;\n\n      if (getParsingFlags(m)._overflowDayOfYear && (overflow < YEAR || overflow > DATE)) {\n        overflow = DATE;\n      }\n\n      if (getParsingFlags(m)._overflowWeeks && overflow === -1) {\n        overflow = WEEK;\n      }\n\n      if (getParsingFlags(m)._overflowWeekday && overflow === -1) {\n        overflow = WEEKDAY;\n      }\n\n      getParsingFlags(m).overflow = overflow;\n    }\n\n    return m;\n  } // Pick the first defined of two or three arguments.\n\n\n  function defaults(a, b, c) {\n    if (a != null) {\n      return a;\n    }\n\n    if (b != null) {\n      return b;\n    }\n\n    return c;\n  }\n\n  function currentDateArray(config) {\n    // hooks is actually the exported moment object\n    var nowValue = new Date(hooks.now());\n\n    if (config._useUTC) {\n      return [nowValue.getUTCFullYear(), nowValue.getUTCMonth(), nowValue.getUTCDate()];\n    }\n\n    return [nowValue.getFullYear(), nowValue.getMonth(), nowValue.getDate()];\n  } // convert an array to a date.\n  // the array should mirror the parameters below\n  // note: all values past the year are optional and will default to the lowest possible value.\n  // [year, month, day , hour, minute, second, millisecond]\n\n\n  function configFromArray(config) {\n    var i,\n        date,\n        input = [],\n        currentDate,\n        expectedWeekday,\n        yearToUse;\n\n    if (config._d) {\n      return;\n    }\n\n    currentDate = currentDateArray(config); //compute day of the year from weeks and weekdays\n\n    if (config._w && config._a[DATE] == null && config._a[MONTH] == null) {\n      dayOfYearFromWeekInfo(config);\n    } //if the day of the year is set, figure out what it is\n\n\n    if (config._dayOfYear != null) {\n      yearToUse = defaults(config._a[YEAR], currentDate[YEAR]);\n\n      if (config._dayOfYear > daysInYear(yearToUse) || config._dayOfYear === 0) {\n        getParsingFlags(config)._overflowDayOfYear = true;\n      }\n\n      date = createUTCDate(yearToUse, 0, config._dayOfYear);\n      config._a[MONTH] = date.getUTCMonth();\n      config._a[DATE] = date.getUTCDate();\n    } // Default to current date.\n    // * if no year, month, day of month are given, default to today\n    // * if day of month is given, default month and year\n    // * if month is given, default only year\n    // * if year is given, don't default anything\n\n\n    for (i = 0; i < 3 && config._a[i] == null; ++i) {\n      config._a[i] = input[i] = currentDate[i];\n    } // Zero out whatever was not defaulted, including time\n\n\n    for (; i < 7; i++) {\n      config._a[i] = input[i] = config._a[i] == null ? i === 2 ? 1 : 0 : config._a[i];\n    } // Check for 24:00:00.000\n\n\n    if (config._a[HOUR] === 24 && config._a[MINUTE] === 0 && config._a[SECOND] === 0 && config._a[MILLISECOND] === 0) {\n      config._nextDay = true;\n      config._a[HOUR] = 0;\n    }\n\n    config._d = (config._useUTC ? createUTCDate : createDate).apply(null, input);\n    expectedWeekday = config._useUTC ? config._d.getUTCDay() : config._d.getDay(); // Apply timezone offset from input. The actual utcOffset can be changed\n    // with parseZone.\n\n    if (config._tzm != null) {\n      config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);\n    }\n\n    if (config._nextDay) {\n      config._a[HOUR] = 24;\n    } // check for mismatching day of week\n\n\n    if (config._w && typeof config._w.d !== 'undefined' && config._w.d !== expectedWeekday) {\n      getParsingFlags(config).weekdayMismatch = true;\n    }\n  }\n\n  function dayOfYearFromWeekInfo(config) {\n    var w, weekYear, week, weekday, dow, doy, temp, weekdayOverflow;\n    w = config._w;\n\n    if (w.GG != null || w.W != null || w.E != null) {\n      dow = 1;\n      doy = 4; // TODO: We need to take the current isoWeekYear, but that depends on\n      // how we interpret now (local, utc, fixed offset). So create\n      // a now version of current config (take local/utc/offset flags, and\n      // create now).\n\n      weekYear = defaults(w.GG, config._a[YEAR], weekOfYear(createLocal(), 1, 4).year);\n      week = defaults(w.W, 1);\n      weekday = defaults(w.E, 1);\n\n      if (weekday < 1 || weekday > 7) {\n        weekdayOverflow = true;\n      }\n    } else {\n      dow = config._locale._week.dow;\n      doy = config._locale._week.doy;\n      var curWeek = weekOfYear(createLocal(), dow, doy);\n      weekYear = defaults(w.gg, config._a[YEAR], curWeek.year); // Default to current week.\n\n      week = defaults(w.w, curWeek.week);\n\n      if (w.d != null) {\n        // weekday -- low day numbers are considered next week\n        weekday = w.d;\n\n        if (weekday < 0 || weekday > 6) {\n          weekdayOverflow = true;\n        }\n      } else if (w.e != null) {\n        // local weekday -- counting starts from beginning of week\n        weekday = w.e + dow;\n\n        if (w.e < 0 || w.e > 6) {\n          weekdayOverflow = true;\n        }\n      } else {\n        // default to beginning of week\n        weekday = dow;\n      }\n    }\n\n    if (week < 1 || week > weeksInYear(weekYear, dow, doy)) {\n      getParsingFlags(config)._overflowWeeks = true;\n    } else if (weekdayOverflow != null) {\n      getParsingFlags(config)._overflowWeekday = true;\n    } else {\n      temp = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy);\n      config._a[YEAR] = temp.year;\n      config._dayOfYear = temp.dayOfYear;\n    }\n  } // iso 8601 regex\n  // 0000-00-00 0000-W00 or 0000-W00-0 + T + 00 or 00:00 or 00:00:00 or 00:00:00.000 + +00:00 or +0000 or +00)\n\n\n  var extendedIsoRegex = /^\\s*((?:[+-]\\d{6}|\\d{4})-(?:\\d\\d-\\d\\d|W\\d\\d-\\d|W\\d\\d|\\d\\d\\d|\\d\\d))(?:(T| )(\\d\\d(?::\\d\\d(?::\\d\\d(?:[.,]\\d+)?)?)?)([\\+\\-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/;\n  var basicIsoRegex = /^\\s*((?:[+-]\\d{6}|\\d{4})(?:\\d\\d\\d\\d|W\\d\\d\\d|W\\d\\d|\\d\\d\\d|\\d\\d))(?:(T| )(\\d\\d(?:\\d\\d(?:\\d\\d(?:[.,]\\d+)?)?)?)([\\+\\-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/;\n  var tzRegex = /Z|[+-]\\d\\d(?::?\\d\\d)?/;\n  var isoDates = [['YYYYYY-MM-DD', /[+-]\\d{6}-\\d\\d-\\d\\d/], ['YYYY-MM-DD', /\\d{4}-\\d\\d-\\d\\d/], ['GGGG-[W]WW-E', /\\d{4}-W\\d\\d-\\d/], ['GGGG-[W]WW', /\\d{4}-W\\d\\d/, false], ['YYYY-DDD', /\\d{4}-\\d{3}/], ['YYYY-MM', /\\d{4}-\\d\\d/, false], ['YYYYYYMMDD', /[+-]\\d{10}/], ['YYYYMMDD', /\\d{8}/], // YYYYMM is NOT allowed by the standard\n  ['GGGG[W]WWE', /\\d{4}W\\d{3}/], ['GGGG[W]WW', /\\d{4}W\\d{2}/, false], ['YYYYDDD', /\\d{7}/]]; // iso time formats and regexes\n\n  var isoTimes = [['HH:mm:ss.SSSS', /\\d\\d:\\d\\d:\\d\\d\\.\\d+/], ['HH:mm:ss,SSSS', /\\d\\d:\\d\\d:\\d\\d,\\d+/], ['HH:mm:ss', /\\d\\d:\\d\\d:\\d\\d/], ['HH:mm', /\\d\\d:\\d\\d/], ['HHmmss.SSSS', /\\d\\d\\d\\d\\d\\d\\.\\d+/], ['HHmmss,SSSS', /\\d\\d\\d\\d\\d\\d,\\d+/], ['HHmmss', /\\d\\d\\d\\d\\d\\d/], ['HHmm', /\\d\\d\\d\\d/], ['HH', /\\d\\d/]];\n  var aspNetJsonRegex = /^\\/?Date\\((\\-?\\d+)/i; // date from iso format\n\n  function configFromISO(config) {\n    var i,\n        l,\n        string = config._i,\n        match = extendedIsoRegex.exec(string) || basicIsoRegex.exec(string),\n        allowTime,\n        dateFormat,\n        timeFormat,\n        tzFormat;\n\n    if (match) {\n      getParsingFlags(config).iso = true;\n\n      for (i = 0, l = isoDates.length; i < l; i++) {\n        if (isoDates[i][1].exec(match[1])) {\n          dateFormat = isoDates[i][0];\n          allowTime = isoDates[i][2] !== false;\n          break;\n        }\n      }\n\n      if (dateFormat == null) {\n        config._isValid = false;\n        return;\n      }\n\n      if (match[3]) {\n        for (i = 0, l = isoTimes.length; i < l; i++) {\n          if (isoTimes[i][1].exec(match[3])) {\n            // match[2] should be 'T' or space\n            timeFormat = (match[2] || ' ') + isoTimes[i][0];\n            break;\n          }\n        }\n\n        if (timeFormat == null) {\n          config._isValid = false;\n          return;\n        }\n      }\n\n      if (!allowTime && timeFormat != null) {\n        config._isValid = false;\n        return;\n      }\n\n      if (match[4]) {\n        if (tzRegex.exec(match[4])) {\n          tzFormat = 'Z';\n        } else {\n          config._isValid = false;\n          return;\n        }\n      }\n\n      config._f = dateFormat + (timeFormat || '') + (tzFormat || '');\n      configFromStringAndFormat(config);\n    } else {\n      config._isValid = false;\n    }\n  } // RFC 2822 regex: For details see https://tools.ietf.org/html/rfc2822#section-3.3\n\n\n  var rfc2822 = /^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\\s)?(\\d{1,2})\\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\\s(\\d{2,4})\\s(\\d\\d):(\\d\\d)(?::(\\d\\d))?\\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\\d{4}))$/;\n\n  function extractFromRFC2822Strings(yearStr, monthStr, dayStr, hourStr, minuteStr, secondStr) {\n    var result = [untruncateYear(yearStr), defaultLocaleMonthsShort.indexOf(monthStr), parseInt(dayStr, 10), parseInt(hourStr, 10), parseInt(minuteStr, 10)];\n\n    if (secondStr) {\n      result.push(parseInt(secondStr, 10));\n    }\n\n    return result;\n  }\n\n  function untruncateYear(yearStr) {\n    var year = parseInt(yearStr, 10);\n\n    if (year <= 49) {\n      return 2000 + year;\n    } else if (year <= 999) {\n      return 1900 + year;\n    }\n\n    return year;\n  }\n\n  function preprocessRFC2822(s) {\n    // Remove comments and folding whitespace and replace multiple-spaces with a single space\n    return s.replace(/\\([^)]*\\)|[\\n\\t]/g, ' ').replace(/(\\s\\s+)/g, ' ').replace(/^\\s\\s*/, '').replace(/\\s\\s*$/, '');\n  }\n\n  function checkWeekday(weekdayStr, parsedInput, config) {\n    if (weekdayStr) {\n      // TODO: Replace the vanilla JS Date object with an indepentent day-of-week check.\n      var weekdayProvided = defaultLocaleWeekdaysShort.indexOf(weekdayStr),\n          weekdayActual = new Date(parsedInput[0], parsedInput[1], parsedInput[2]).getDay();\n\n      if (weekdayProvided !== weekdayActual) {\n        getParsingFlags(config).weekdayMismatch = true;\n        config._isValid = false;\n        return false;\n      }\n    }\n\n    return true;\n  }\n\n  var obsOffsets = {\n    UT: 0,\n    GMT: 0,\n    EDT: -4 * 60,\n    EST: -5 * 60,\n    CDT: -5 * 60,\n    CST: -6 * 60,\n    MDT: -6 * 60,\n    MST: -7 * 60,\n    PDT: -7 * 60,\n    PST: -8 * 60\n  };\n\n  function calculateOffset(obsOffset, militaryOffset, numOffset) {\n    if (obsOffset) {\n      return obsOffsets[obsOffset];\n    } else if (militaryOffset) {\n      // the only allowed military tz is Z\n      return 0;\n    } else {\n      var hm = parseInt(numOffset, 10);\n      var m = hm % 100,\n          h = (hm - m) / 100;\n      return h * 60 + m;\n    }\n  } // date and time from ref 2822 format\n\n\n  function configFromRFC2822(config) {\n    var match = rfc2822.exec(preprocessRFC2822(config._i));\n\n    if (match) {\n      var parsedArray = extractFromRFC2822Strings(match[4], match[3], match[2], match[5], match[6], match[7]);\n\n      if (!checkWeekday(match[1], parsedArray, config)) {\n        return;\n      }\n\n      config._a = parsedArray;\n      config._tzm = calculateOffset(match[8], match[9], match[10]);\n      config._d = createUTCDate.apply(null, config._a);\n\n      config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);\n\n      getParsingFlags(config).rfc2822 = true;\n    } else {\n      config._isValid = false;\n    }\n  } // date from iso format or fallback\n\n\n  function configFromString(config) {\n    var matched = aspNetJsonRegex.exec(config._i);\n\n    if (matched !== null) {\n      config._d = new Date(+matched[1]);\n      return;\n    }\n\n    configFromISO(config);\n\n    if (config._isValid === false) {\n      delete config._isValid;\n    } else {\n      return;\n    }\n\n    configFromRFC2822(config);\n\n    if (config._isValid === false) {\n      delete config._isValid;\n    } else {\n      return;\n    } // Final attempt, use Input Fallback\n\n\n    hooks.createFromInputFallback(config);\n  }\n\n  hooks.createFromInputFallback = deprecate('value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), ' + 'which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are ' + 'discouraged and will be removed in an upcoming major release. Please refer to ' + 'http://momentjs.com/guides/#/warnings/js-date/ for more info.', function (config) {\n    config._d = new Date(config._i + (config._useUTC ? ' UTC' : ''));\n  }); // constant that refers to the ISO standard\n\n  hooks.ISO_8601 = function () {}; // constant that refers to the RFC 2822 form\n\n\n  hooks.RFC_2822 = function () {}; // date from string and format string\n\n\n  function configFromStringAndFormat(config) {\n    // TODO: Move this to another part of the creation flow to prevent circular deps\n    if (config._f === hooks.ISO_8601) {\n      configFromISO(config);\n      return;\n    }\n\n    if (config._f === hooks.RFC_2822) {\n      configFromRFC2822(config);\n      return;\n    }\n\n    config._a = [];\n    getParsingFlags(config).empty = true; // This array is used to make a Date, either with `new Date` or `Date.UTC`\n\n    var string = '' + config._i,\n        i,\n        parsedInput,\n        tokens,\n        token,\n        skipped,\n        stringLength = string.length,\n        totalParsedInputLength = 0;\n    tokens = expandFormat(config._f, config._locale).match(formattingTokens) || [];\n\n    for (i = 0; i < tokens.length; i++) {\n      token = tokens[i];\n      parsedInput = (string.match(getParseRegexForToken(token, config)) || [])[0]; // console.log('token', token, 'parsedInput', parsedInput,\n      //         'regex', getParseRegexForToken(token, config));\n\n      if (parsedInput) {\n        skipped = string.substr(0, string.indexOf(parsedInput));\n\n        if (skipped.length > 0) {\n          getParsingFlags(config).unusedInput.push(skipped);\n        }\n\n        string = string.slice(string.indexOf(parsedInput) + parsedInput.length);\n        totalParsedInputLength += parsedInput.length;\n      } // don't parse if it's not a known token\n\n\n      if (formatTokenFunctions[token]) {\n        if (parsedInput) {\n          getParsingFlags(config).empty = false;\n        } else {\n          getParsingFlags(config).unusedTokens.push(token);\n        }\n\n        addTimeToArrayFromToken(token, parsedInput, config);\n      } else if (config._strict && !parsedInput) {\n        getParsingFlags(config).unusedTokens.push(token);\n      }\n    } // add remaining unparsed input length to the string\n\n\n    getParsingFlags(config).charsLeftOver = stringLength - totalParsedInputLength;\n\n    if (string.length > 0) {\n      getParsingFlags(config).unusedInput.push(string);\n    } // clear _12h flag if hour is <= 12\n\n\n    if (config._a[HOUR] <= 12 && getParsingFlags(config).bigHour === true && config._a[HOUR] > 0) {\n      getParsingFlags(config).bigHour = undefined;\n    }\n\n    getParsingFlags(config).parsedDateParts = config._a.slice(0);\n    getParsingFlags(config).meridiem = config._meridiem; // handle meridiem\n\n    config._a[HOUR] = meridiemFixWrap(config._locale, config._a[HOUR], config._meridiem);\n    configFromArray(config);\n    checkOverflow(config);\n  }\n\n  function meridiemFixWrap(locale, hour, meridiem) {\n    var isPm;\n\n    if (meridiem == null) {\n      // nothing to do\n      return hour;\n    }\n\n    if (locale.meridiemHour != null) {\n      return locale.meridiemHour(hour, meridiem);\n    } else if (locale.isPM != null) {\n      // Fallback\n      isPm = locale.isPM(meridiem);\n\n      if (isPm && hour < 12) {\n        hour += 12;\n      }\n\n      if (!isPm && hour === 12) {\n        hour = 0;\n      }\n\n      return hour;\n    } else {\n      // this is not supposed to happen\n      return hour;\n    }\n  } // date from string and array of format strings\n\n\n  function configFromStringAndArray(config) {\n    var tempConfig, bestMoment, scoreToBeat, i, currentScore;\n\n    if (config._f.length === 0) {\n      getParsingFlags(config).invalidFormat = true;\n      config._d = new Date(NaN);\n      return;\n    }\n\n    for (i = 0; i < config._f.length; i++) {\n      currentScore = 0;\n      tempConfig = copyConfig({}, config);\n\n      if (config._useUTC != null) {\n        tempConfig._useUTC = config._useUTC;\n      }\n\n      tempConfig._f = config._f[i];\n      configFromStringAndFormat(tempConfig);\n\n      if (!isValid(tempConfig)) {\n        continue;\n      } // if there is any input that was not parsed add a penalty for that format\n\n\n      currentScore += getParsingFlags(tempConfig).charsLeftOver; //or tokens\n\n      currentScore += getParsingFlags(tempConfig).unusedTokens.length * 10;\n      getParsingFlags(tempConfig).score = currentScore;\n\n      if (scoreToBeat == null || currentScore < scoreToBeat) {\n        scoreToBeat = currentScore;\n        bestMoment = tempConfig;\n      }\n    }\n\n    extend(config, bestMoment || tempConfig);\n  }\n\n  function configFromObject(config) {\n    if (config._d) {\n      return;\n    }\n\n    var i = normalizeObjectUnits(config._i);\n    config._a = map([i.year, i.month, i.day || i.date, i.hour, i.minute, i.second, i.millisecond], function (obj) {\n      return obj && parseInt(obj, 10);\n    });\n    configFromArray(config);\n  }\n\n  function createFromConfig(config) {\n    var res = new Moment(checkOverflow(prepareConfig(config)));\n\n    if (res._nextDay) {\n      // Adding is smart enough around DST\n      res.add(1, 'd');\n      res._nextDay = undefined;\n    }\n\n    return res;\n  }\n\n  function prepareConfig(config) {\n    var input = config._i,\n        format = config._f;\n    config._locale = config._locale || getLocale(config._l);\n\n    if (input === null || format === undefined && input === '') {\n      return createInvalid({\n        nullInput: true\n      });\n    }\n\n    if (typeof input === 'string') {\n      config._i = input = config._locale.preparse(input);\n    }\n\n    if (isMoment(input)) {\n      return new Moment(checkOverflow(input));\n    } else if (isDate(input)) {\n      config._d = input;\n    } else if (isArray(format)) {\n      configFromStringAndArray(config);\n    } else if (format) {\n      configFromStringAndFormat(config);\n    } else {\n      configFromInput(config);\n    }\n\n    if (!isValid(config)) {\n      config._d = null;\n    }\n\n    return config;\n  }\n\n  function configFromInput(config) {\n    var input = config._i;\n\n    if (isUndefined(input)) {\n      config._d = new Date(hooks.now());\n    } else if (isDate(input)) {\n      config._d = new Date(input.valueOf());\n    } else if (typeof input === 'string') {\n      configFromString(config);\n    } else if (isArray(input)) {\n      config._a = map(input.slice(0), function (obj) {\n        return parseInt(obj, 10);\n      });\n      configFromArray(config);\n    } else if (isObject(input)) {\n      configFromObject(config);\n    } else if (isNumber(input)) {\n      // from milliseconds\n      config._d = new Date(input);\n    } else {\n      hooks.createFromInputFallback(config);\n    }\n  }\n\n  function createLocalOrUTC(input, format, locale, strict, isUTC) {\n    var c = {};\n\n    if (locale === true || locale === false) {\n      strict = locale;\n      locale = undefined;\n    }\n\n    if (isObject(input) && isObjectEmpty(input) || isArray(input) && input.length === 0) {\n      input = undefined;\n    } // object construction must be done this way.\n    // https://github.com/moment/moment/issues/1423\n\n\n    c._isAMomentObject = true;\n    c._useUTC = c._isUTC = isUTC;\n    c._l = locale;\n    c._i = input;\n    c._f = format;\n    c._strict = strict;\n    return createFromConfig(c);\n  }\n\n  function createLocal(input, format, locale, strict) {\n    return createLocalOrUTC(input, format, locale, strict, false);\n  }\n\n  var prototypeMin = deprecate('moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/', function () {\n    var other = createLocal.apply(null, arguments);\n\n    if (this.isValid() && other.isValid()) {\n      return other < this ? this : other;\n    } else {\n      return createInvalid();\n    }\n  });\n  var prototypeMax = deprecate('moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/', function () {\n    var other = createLocal.apply(null, arguments);\n\n    if (this.isValid() && other.isValid()) {\n      return other > this ? this : other;\n    } else {\n      return createInvalid();\n    }\n  }); // Pick a moment m from moments so that m[fn](other) is true for all\n  // other. This relies on the function fn to be transitive.\n  //\n  // moments should either be an array of moment objects or an array, whose\n  // first element is an array of moment objects.\n\n  function pickBy(fn, moments) {\n    var res, i;\n\n    if (moments.length === 1 && isArray(moments[0])) {\n      moments = moments[0];\n    }\n\n    if (!moments.length) {\n      return createLocal();\n    }\n\n    res = moments[0];\n\n    for (i = 1; i < moments.length; ++i) {\n      if (!moments[i].isValid() || moments[i][fn](res)) {\n        res = moments[i];\n      }\n    }\n\n    return res;\n  } // TODO: Use [].sort instead?\n\n\n  function min() {\n    var args = [].slice.call(arguments, 0);\n    return pickBy('isBefore', args);\n  }\n\n  function max() {\n    var args = [].slice.call(arguments, 0);\n    return pickBy('isAfter', args);\n  }\n\n  var now = function now() {\n    return Date.now ? Date.now() : +new Date();\n  };\n\n  var ordering = ['year', 'quarter', 'month', 'week', 'day', 'hour', 'minute', 'second', 'millisecond'];\n\n  function isDurationValid(m) {\n    for (var key in m) {\n      if (!(indexOf.call(ordering, key) !== -1 && (m[key] == null || !isNaN(m[key])))) {\n        return false;\n      }\n    }\n\n    var unitHasDecimal = false;\n\n    for (var i = 0; i < ordering.length; ++i) {\n      if (m[ordering[i]]) {\n        if (unitHasDecimal) {\n          return false; // only allow non-integers for smallest unit\n        }\n\n        if (parseFloat(m[ordering[i]]) !== toInt(m[ordering[i]])) {\n          unitHasDecimal = true;\n        }\n      }\n    }\n\n    return true;\n  }\n\n  function isValid$1() {\n    return this._isValid;\n  }\n\n  function createInvalid$1() {\n    return createDuration(NaN);\n  }\n\n  function Duration(duration) {\n    var normalizedInput = normalizeObjectUnits(duration),\n        years = normalizedInput.year || 0,\n        quarters = normalizedInput.quarter || 0,\n        months = normalizedInput.month || 0,\n        weeks = normalizedInput.week || normalizedInput.isoWeek || 0,\n        days = normalizedInput.day || 0,\n        hours = normalizedInput.hour || 0,\n        minutes = normalizedInput.minute || 0,\n        seconds = normalizedInput.second || 0,\n        milliseconds = normalizedInput.millisecond || 0;\n    this._isValid = isDurationValid(normalizedInput); // representation for dateAddRemove\n\n    this._milliseconds = +milliseconds + seconds * 1e3 + // 1000\n    minutes * 6e4 + // 1000 * 60\n    hours * 1000 * 60 * 60; //using 1000 * 60 * 60 instead of 36e5 to avoid floating point rounding errors https://github.com/moment/moment/issues/2978\n    // Because of dateAddRemove treats 24 hours as different from a\n    // day when working around DST, we need to store them separately\n\n    this._days = +days + weeks * 7; // It is impossible to translate months into days without knowing\n    // which months you are are talking about, so we have to store\n    // it separately.\n\n    this._months = +months + quarters * 3 + years * 12;\n    this._data = {};\n    this._locale = getLocale();\n\n    this._bubble();\n  }\n\n  function isDuration(obj) {\n    return obj instanceof Duration;\n  }\n\n  function absRound(number) {\n    if (number < 0) {\n      return Math.round(-1 * number) * -1;\n    } else {\n      return Math.round(number);\n    }\n  } // FORMATTING\n\n\n  function offset(token, separator) {\n    addFormatToken(token, 0, 0, function () {\n      var offset = this.utcOffset();\n      var sign = '+';\n\n      if (offset < 0) {\n        offset = -offset;\n        sign = '-';\n      }\n\n      return sign + zeroFill(~~(offset / 60), 2) + separator + zeroFill(~~offset % 60, 2);\n    });\n  }\n\n  offset('Z', ':');\n  offset('ZZ', ''); // PARSING\n\n  addRegexToken('Z', matchShortOffset);\n  addRegexToken('ZZ', matchShortOffset);\n  addParseToken(['Z', 'ZZ'], function (input, array, config) {\n    config._useUTC = true;\n    config._tzm = offsetFromString(matchShortOffset, input);\n  }); // HELPERS\n  // timezone chunker\n  // '+10:00' > ['10',  '00']\n  // '-1530'  > ['-15', '30']\n\n  var chunkOffset = /([\\+\\-]|\\d\\d)/gi;\n\n  function offsetFromString(matcher, string) {\n    var matches = (string || '').match(matcher);\n\n    if (matches === null) {\n      return null;\n    }\n\n    var chunk = matches[matches.length - 1] || [];\n    var parts = (chunk + '').match(chunkOffset) || ['-', 0, 0];\n    var minutes = +(parts[1] * 60) + toInt(parts[2]);\n    return minutes === 0 ? 0 : parts[0] === '+' ? minutes : -minutes;\n  } // Return a moment from input, that is local/utc/zone equivalent to model.\n\n\n  function cloneWithOffset(input, model) {\n    var res, diff;\n\n    if (model._isUTC) {\n      res = model.clone();\n      diff = (isMoment(input) || isDate(input) ? input.valueOf() : createLocal(input).valueOf()) - res.valueOf(); // Use low-level api, because this fn is low-level api.\n\n      res._d.setTime(res._d.valueOf() + diff);\n\n      hooks.updateOffset(res, false);\n      return res;\n    } else {\n      return createLocal(input).local();\n    }\n  }\n\n  function getDateOffset(m) {\n    // On Firefox.24 Date#getTimezoneOffset returns a floating point.\n    // https://github.com/moment/moment/pull/1871\n    return -Math.round(m._d.getTimezoneOffset() / 15) * 15;\n  } // HOOKS\n  // This function will be called whenever a moment is mutated.\n  // It is intended to keep the offset in sync with the timezone.\n\n\n  hooks.updateOffset = function () {}; // MOMENTS\n  // keepLocalTime = true means only change the timezone, without\n  // affecting the local hour. So 5:31:26 +0300 --[utcOffset(2, true)]-->\n  // 5:31:26 +0200 It is possible that 5:31:26 doesn't exist with offset\n  // +0200, so we adjust the time as needed, to be valid.\n  //\n  // Keeping the time actually adds/subtracts (one hour)\n  // from the actual represented time. That is why we call updateOffset\n  // a second time. In case it wants us to change the offset again\n  // _changeInProgress == true case, then we have to adjust, because\n  // there is no such time in the given timezone.\n\n\n  function getSetOffset(input, keepLocalTime, keepMinutes) {\n    var offset = this._offset || 0,\n        localAdjust;\n\n    if (!this.isValid()) {\n      return input != null ? this : NaN;\n    }\n\n    if (input != null) {\n      if (typeof input === 'string') {\n        input = offsetFromString(matchShortOffset, input);\n\n        if (input === null) {\n          return this;\n        }\n      } else if (Math.abs(input) < 16 && !keepMinutes) {\n        input = input * 60;\n      }\n\n      if (!this._isUTC && keepLocalTime) {\n        localAdjust = getDateOffset(this);\n      }\n\n      this._offset = input;\n      this._isUTC = true;\n\n      if (localAdjust != null) {\n        this.add(localAdjust, 'm');\n      }\n\n      if (offset !== input) {\n        if (!keepLocalTime || this._changeInProgress) {\n          addSubtract(this, createDuration(input - offset, 'm'), 1, false);\n        } else if (!this._changeInProgress) {\n          this._changeInProgress = true;\n          hooks.updateOffset(this, true);\n          this._changeInProgress = null;\n        }\n      }\n\n      return this;\n    } else {\n      return this._isUTC ? offset : getDateOffset(this);\n    }\n  }\n\n  function getSetZone(input, keepLocalTime) {\n    if (input != null) {\n      if (typeof input !== 'string') {\n        input = -input;\n      }\n\n      this.utcOffset(input, keepLocalTime);\n      return this;\n    } else {\n      return -this.utcOffset();\n    }\n  }\n\n  function setOffsetToUTC(keepLocalTime) {\n    return this.utcOffset(0, keepLocalTime);\n  }\n\n  function setOffsetToLocal(keepLocalTime) {\n    if (this._isUTC) {\n      this.utcOffset(0, keepLocalTime);\n      this._isUTC = false;\n\n      if (keepLocalTime) {\n        this.subtract(getDateOffset(this), 'm');\n      }\n    }\n\n    return this;\n  }\n\n  function setOffsetToParsedOffset() {\n    if (this._tzm != null) {\n      this.utcOffset(this._tzm, false, true);\n    } else if (typeof this._i === 'string') {\n      var tZone = offsetFromString(matchOffset, this._i);\n\n      if (tZone != null) {\n        this.utcOffset(tZone);\n      } else {\n        this.utcOffset(0, true);\n      }\n    }\n\n    return this;\n  }\n\n  function hasAlignedHourOffset(input) {\n    if (!this.isValid()) {\n      return false;\n    }\n\n    input = input ? createLocal(input).utcOffset() : 0;\n    return (this.utcOffset() - input) % 60 === 0;\n  }\n\n  function isDaylightSavingTime() {\n    return this.utcOffset() > this.clone().month(0).utcOffset() || this.utcOffset() > this.clone().month(5).utcOffset();\n  }\n\n  function isDaylightSavingTimeShifted() {\n    if (!isUndefined(this._isDSTShifted)) {\n      return this._isDSTShifted;\n    }\n\n    var c = {};\n    copyConfig(c, this);\n    c = prepareConfig(c);\n\n    if (c._a) {\n      var other = c._isUTC ? createUTC(c._a) : createLocal(c._a);\n      this._isDSTShifted = this.isValid() && compareArrays(c._a, other.toArray()) > 0;\n    } else {\n      this._isDSTShifted = false;\n    }\n\n    return this._isDSTShifted;\n  }\n\n  function isLocal() {\n    return this.isValid() ? !this._isUTC : false;\n  }\n\n  function isUtcOffset() {\n    return this.isValid() ? this._isUTC : false;\n  }\n\n  function isUtc() {\n    return this.isValid() ? this._isUTC && this._offset === 0 : false;\n  } // ASP.NET json date format regex\n\n\n  var aspNetRegex = /^(\\-|\\+)?(?:(\\d*)[. ])?(\\d+)\\:(\\d+)(?:\\:(\\d+)(\\.\\d*)?)?$/; // from http://docs.closure-library.googlecode.com/git/closure_goog_date_date.js.source.html\n  // somewhat more in line with 4.4.3.2 2004 spec, but allows decimal anywhere\n  // and further modified to allow for strings containing both week and day\n\n  var isoRegex = /^(-|\\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;\n\n  function createDuration(input, key) {\n    var duration = input,\n        // matching against regexp is expensive, do it on demand\n    match = null,\n        sign,\n        ret,\n        diffRes;\n\n    if (isDuration(input)) {\n      duration = {\n        ms: input._milliseconds,\n        d: input._days,\n        M: input._months\n      };\n    } else if (isNumber(input)) {\n      duration = {};\n\n      if (key) {\n        duration[key] = input;\n      } else {\n        duration.milliseconds = input;\n      }\n    } else if (!!(match = aspNetRegex.exec(input))) {\n      sign = match[1] === '-' ? -1 : 1;\n      duration = {\n        y: 0,\n        d: toInt(match[DATE]) * sign,\n        h: toInt(match[HOUR]) * sign,\n        m: toInt(match[MINUTE]) * sign,\n        s: toInt(match[SECOND]) * sign,\n        ms: toInt(absRound(match[MILLISECOND] * 1000)) * sign // the millisecond decimal point is included in the match\n\n      };\n    } else if (!!(match = isoRegex.exec(input))) {\n      sign = match[1] === '-' ? -1 : 1;\n      duration = {\n        y: parseIso(match[2], sign),\n        M: parseIso(match[3], sign),\n        w: parseIso(match[4], sign),\n        d: parseIso(match[5], sign),\n        h: parseIso(match[6], sign),\n        m: parseIso(match[7], sign),\n        s: parseIso(match[8], sign)\n      };\n    } else if (duration == null) {\n      // checks for null or undefined\n      duration = {};\n    } else if (_typeof(duration) === 'object' && ('from' in duration || 'to' in duration)) {\n      diffRes = momentsDifference(createLocal(duration.from), createLocal(duration.to));\n      duration = {};\n      duration.ms = diffRes.milliseconds;\n      duration.M = diffRes.months;\n    }\n\n    ret = new Duration(duration);\n\n    if (isDuration(input) && hasOwnProp(input, '_locale')) {\n      ret._locale = input._locale;\n    }\n\n    return ret;\n  }\n\n  createDuration.fn = Duration.prototype;\n  createDuration.invalid = createInvalid$1;\n\n  function parseIso(inp, sign) {\n    // We'd normally use ~~inp for this, but unfortunately it also\n    // converts floats to ints.\n    // inp may be undefined, so careful calling replace on it.\n    var res = inp && parseFloat(inp.replace(',', '.')); // apply sign while we're at it\n\n    return (isNaN(res) ? 0 : res) * sign;\n  }\n\n  function positiveMomentsDifference(base, other) {\n    var res = {};\n    res.months = other.month() - base.month() + (other.year() - base.year()) * 12;\n\n    if (base.clone().add(res.months, 'M').isAfter(other)) {\n      --res.months;\n    }\n\n    res.milliseconds = +other - +base.clone().add(res.months, 'M');\n    return res;\n  }\n\n  function momentsDifference(base, other) {\n    var res;\n\n    if (!(base.isValid() && other.isValid())) {\n      return {\n        milliseconds: 0,\n        months: 0\n      };\n    }\n\n    other = cloneWithOffset(other, base);\n\n    if (base.isBefore(other)) {\n      res = positiveMomentsDifference(base, other);\n    } else {\n      res = positiveMomentsDifference(other, base);\n      res.milliseconds = -res.milliseconds;\n      res.months = -res.months;\n    }\n\n    return res;\n  } // TODO: remove 'name' arg after deprecation is removed\n\n\n  function createAdder(direction, name) {\n    return function (val, period) {\n      var dur, tmp; //invert the arguments, but complain about it\n\n      if (period !== null && !isNaN(+period)) {\n        deprecateSimple(name, 'moment().' + name + '(period, number) is deprecated. Please use moment().' + name + '(number, period). ' + 'See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info.');\n        tmp = val;\n        val = period;\n        period = tmp;\n      }\n\n      val = typeof val === 'string' ? +val : val;\n      dur = createDuration(val, period);\n      addSubtract(this, dur, direction);\n      return this;\n    };\n  }\n\n  function addSubtract(mom, duration, isAdding, updateOffset) {\n    var milliseconds = duration._milliseconds,\n        days = absRound(duration._days),\n        months = absRound(duration._months);\n\n    if (!mom.isValid()) {\n      // No op\n      return;\n    }\n\n    updateOffset = updateOffset == null ? true : updateOffset;\n\n    if (months) {\n      setMonth(mom, get(mom, 'Month') + months * isAdding);\n    }\n\n    if (days) {\n      set$1(mom, 'Date', get(mom, 'Date') + days * isAdding);\n    }\n\n    if (milliseconds) {\n      mom._d.setTime(mom._d.valueOf() + milliseconds * isAdding);\n    }\n\n    if (updateOffset) {\n      hooks.updateOffset(mom, days || months);\n    }\n  }\n\n  var add = createAdder(1, 'add');\n  var subtract = createAdder(-1, 'subtract');\n\n  function getCalendarFormat(myMoment, now) {\n    var diff = myMoment.diff(now, 'days', true);\n    return diff < -6 ? 'sameElse' : diff < -1 ? 'lastWeek' : diff < 0 ? 'lastDay' : diff < 1 ? 'sameDay' : diff < 2 ? 'nextDay' : diff < 7 ? 'nextWeek' : 'sameElse';\n  }\n\n  function calendar$1(time, formats) {\n    // We want to compare the start of today, vs this.\n    // Getting start-of-today depends on whether we're local/utc/offset or not.\n    var now = time || createLocal(),\n        sod = cloneWithOffset(now, this).startOf('day'),\n        format = hooks.calendarFormat(this, sod) || 'sameElse';\n    var output = formats && (isFunction(formats[format]) ? formats[format].call(this, now) : formats[format]);\n    return this.format(output || this.localeData().calendar(format, this, createLocal(now)));\n  }\n\n  function clone() {\n    return new Moment(this);\n  }\n\n  function isAfter(input, units) {\n    var localInput = isMoment(input) ? input : createLocal(input);\n\n    if (!(this.isValid() && localInput.isValid())) {\n      return false;\n    }\n\n    units = normalizeUnits(units) || 'millisecond';\n\n    if (units === 'millisecond') {\n      return this.valueOf() > localInput.valueOf();\n    } else {\n      return localInput.valueOf() < this.clone().startOf(units).valueOf();\n    }\n  }\n\n  function isBefore(input, units) {\n    var localInput = isMoment(input) ? input : createLocal(input);\n\n    if (!(this.isValid() && localInput.isValid())) {\n      return false;\n    }\n\n    units = normalizeUnits(units) || 'millisecond';\n\n    if (units === 'millisecond') {\n      return this.valueOf() < localInput.valueOf();\n    } else {\n      return this.clone().endOf(units).valueOf() < localInput.valueOf();\n    }\n  }\n\n  function isBetween(from, to, units, inclusivity) {\n    var localFrom = isMoment(from) ? from : createLocal(from),\n        localTo = isMoment(to) ? to : createLocal(to);\n\n    if (!(this.isValid() && localFrom.isValid() && localTo.isValid())) {\n      return false;\n    }\n\n    inclusivity = inclusivity || '()';\n    return (inclusivity[0] === '(' ? this.isAfter(localFrom, units) : !this.isBefore(localFrom, units)) && (inclusivity[1] === ')' ? this.isBefore(localTo, units) : !this.isAfter(localTo, units));\n  }\n\n  function isSame(input, units) {\n    var localInput = isMoment(input) ? input : createLocal(input),\n        inputMs;\n\n    if (!(this.isValid() && localInput.isValid())) {\n      return false;\n    }\n\n    units = normalizeUnits(units) || 'millisecond';\n\n    if (units === 'millisecond') {\n      return this.valueOf() === localInput.valueOf();\n    } else {\n      inputMs = localInput.valueOf();\n      return this.clone().startOf(units).valueOf() <= inputMs && inputMs <= this.clone().endOf(units).valueOf();\n    }\n  }\n\n  function isSameOrAfter(input, units) {\n    return this.isSame(input, units) || this.isAfter(input, units);\n  }\n\n  function isSameOrBefore(input, units) {\n    return this.isSame(input, units) || this.isBefore(input, units);\n  }\n\n  function diff(input, units, asFloat) {\n    var that, zoneDelta, output;\n\n    if (!this.isValid()) {\n      return NaN;\n    }\n\n    that = cloneWithOffset(input, this);\n\n    if (!that.isValid()) {\n      return NaN;\n    }\n\n    zoneDelta = (that.utcOffset() - this.utcOffset()) * 6e4;\n    units = normalizeUnits(units);\n\n    switch (units) {\n      case 'year':\n        output = monthDiff(this, that) / 12;\n        break;\n\n      case 'month':\n        output = monthDiff(this, that);\n        break;\n\n      case 'quarter':\n        output = monthDiff(this, that) / 3;\n        break;\n\n      case 'second':\n        output = (this - that) / 1e3;\n        break;\n      // 1000\n\n      case 'minute':\n        output = (this - that) / 6e4;\n        break;\n      // 1000 * 60\n\n      case 'hour':\n        output = (this - that) / 36e5;\n        break;\n      // 1000 * 60 * 60\n\n      case 'day':\n        output = (this - that - zoneDelta) / 864e5;\n        break;\n      // 1000 * 60 * 60 * 24, negate dst\n\n      case 'week':\n        output = (this - that - zoneDelta) / 6048e5;\n        break;\n      // 1000 * 60 * 60 * 24 * 7, negate dst\n\n      default:\n        output = this - that;\n    }\n\n    return asFloat ? output : absFloor(output);\n  }\n\n  function monthDiff(a, b) {\n    // difference in months\n    var wholeMonthDiff = (b.year() - a.year()) * 12 + (b.month() - a.month()),\n        // b is in (anchor - 1 month, anchor + 1 month)\n    anchor = a.clone().add(wholeMonthDiff, 'months'),\n        anchor2,\n        adjust;\n\n    if (b - anchor < 0) {\n      anchor2 = a.clone().add(wholeMonthDiff - 1, 'months'); // linear across the month\n\n      adjust = (b - anchor) / (anchor - anchor2);\n    } else {\n      anchor2 = a.clone().add(wholeMonthDiff + 1, 'months'); // linear across the month\n\n      adjust = (b - anchor) / (anchor2 - anchor);\n    } //check for negative zero, return zero if negative zero\n\n\n    return -(wholeMonthDiff + adjust) || 0;\n  }\n\n  hooks.defaultFormat = 'YYYY-MM-DDTHH:mm:ssZ';\n  hooks.defaultFormatUtc = 'YYYY-MM-DDTHH:mm:ss[Z]';\n\n  function toString() {\n    return this.clone().locale('en').format('ddd MMM DD YYYY HH:mm:ss [GMT]ZZ');\n  }\n\n  function toISOString(keepOffset) {\n    if (!this.isValid()) {\n      return null;\n    }\n\n    var utc = keepOffset !== true;\n    var m = utc ? this.clone().utc() : this;\n\n    if (m.year() < 0 || m.year() > 9999) {\n      return formatMoment(m, utc ? 'YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]' : 'YYYYYY-MM-DD[T]HH:mm:ss.SSSZ');\n    }\n\n    if (isFunction(Date.prototype.toISOString)) {\n      // native implementation is ~50x faster, use it when we can\n      if (utc) {\n        return this.toDate().toISOString();\n      } else {\n        return new Date(this.valueOf() + this.utcOffset() * 60 * 1000).toISOString().replace('Z', formatMoment(m, 'Z'));\n      }\n    }\n\n    return formatMoment(m, utc ? 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]' : 'YYYY-MM-DD[T]HH:mm:ss.SSSZ');\n  }\n  /**\n   * Return a human readable representation of a moment that can\n   * also be evaluated to get a new moment which is the same\n   *\n   * @link https://nodejs.org/dist/latest/docs/api/util.html#util_custom_inspect_function_on_objects\n   */\n\n\n  function inspect() {\n    if (!this.isValid()) {\n      return 'moment.invalid(/* ' + this._i + ' */)';\n    }\n\n    var func = 'moment';\n    var zone = '';\n\n    if (!this.isLocal()) {\n      func = this.utcOffset() === 0 ? 'moment.utc' : 'moment.parseZone';\n      zone = 'Z';\n    }\n\n    var prefix = '[' + func + '(\"]';\n    var year = 0 <= this.year() && this.year() <= 9999 ? 'YYYY' : 'YYYYYY';\n    var datetime = '-MM-DD[T]HH:mm:ss.SSS';\n    var suffix = zone + '[\")]';\n    return this.format(prefix + year + datetime + suffix);\n  }\n\n  function format(inputString) {\n    if (!inputString) {\n      inputString = this.isUtc() ? hooks.defaultFormatUtc : hooks.defaultFormat;\n    }\n\n    var output = formatMoment(this, inputString);\n    return this.localeData().postformat(output);\n  }\n\n  function from(time, withoutSuffix) {\n    if (this.isValid() && (isMoment(time) && time.isValid() || createLocal(time).isValid())) {\n      return createDuration({\n        to: this,\n        from: time\n      }).locale(this.locale()).humanize(!withoutSuffix);\n    } else {\n      return this.localeData().invalidDate();\n    }\n  }\n\n  function fromNow(withoutSuffix) {\n    return this.from(createLocal(), withoutSuffix);\n  }\n\n  function to(time, withoutSuffix) {\n    if (this.isValid() && (isMoment(time) && time.isValid() || createLocal(time).isValid())) {\n      return createDuration({\n        from: this,\n        to: time\n      }).locale(this.locale()).humanize(!withoutSuffix);\n    } else {\n      return this.localeData().invalidDate();\n    }\n  }\n\n  function toNow(withoutSuffix) {\n    return this.to(createLocal(), withoutSuffix);\n  } // If passed a locale key, it will set the locale for this\n  // instance.  Otherwise, it will return the locale configuration\n  // variables for this instance.\n\n\n  function locale(key) {\n    var newLocaleData;\n\n    if (key === undefined) {\n      return this._locale._abbr;\n    } else {\n      newLocaleData = getLocale(key);\n\n      if (newLocaleData != null) {\n        this._locale = newLocaleData;\n      }\n\n      return this;\n    }\n  }\n\n  var lang = deprecate('moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.', function (key) {\n    if (key === undefined) {\n      return this.localeData();\n    } else {\n      return this.locale(key);\n    }\n  });\n\n  function localeData() {\n    return this._locale;\n  }\n\n  var MS_PER_SECOND = 1000;\n  var MS_PER_MINUTE = 60 * MS_PER_SECOND;\n  var MS_PER_HOUR = 60 * MS_PER_MINUTE;\n  var MS_PER_400_YEARS = (365 * 400 + 97) * 24 * MS_PER_HOUR; // actual modulo - handles negative numbers (for dates before 1970):\n\n  function mod$1(dividend, divisor) {\n    return (dividend % divisor + divisor) % divisor;\n  }\n\n  function localStartOfDate(y, m, d) {\n    // the date constructor remaps years 0-99 to 1900-1999\n    if (y < 100 && y >= 0) {\n      // preserve leap years using a full 400 year cycle, then reset\n      return new Date(y + 400, m, d) - MS_PER_400_YEARS;\n    } else {\n      return new Date(y, m, d).valueOf();\n    }\n  }\n\n  function utcStartOfDate(y, m, d) {\n    // Date.UTC remaps years 0-99 to 1900-1999\n    if (y < 100 && y >= 0) {\n      // preserve leap years using a full 400 year cycle, then reset\n      return Date.UTC(y + 400, m, d) - MS_PER_400_YEARS;\n    } else {\n      return Date.UTC(y, m, d);\n    }\n  }\n\n  function startOf(units) {\n    var time;\n    units = normalizeUnits(units);\n\n    if (units === undefined || units === 'millisecond' || !this.isValid()) {\n      return this;\n    }\n\n    var startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;\n\n    switch (units) {\n      case 'year':\n        time = startOfDate(this.year(), 0, 1);\n        break;\n\n      case 'quarter':\n        time = startOfDate(this.year(), this.month() - this.month() % 3, 1);\n        break;\n\n      case 'month':\n        time = startOfDate(this.year(), this.month(), 1);\n        break;\n\n      case 'week':\n        time = startOfDate(this.year(), this.month(), this.date() - this.weekday());\n        break;\n\n      case 'isoWeek':\n        time = startOfDate(this.year(), this.month(), this.date() - (this.isoWeekday() - 1));\n        break;\n\n      case 'day':\n      case 'date':\n        time = startOfDate(this.year(), this.month(), this.date());\n        break;\n\n      case 'hour':\n        time = this._d.valueOf();\n        time -= mod$1(time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE), MS_PER_HOUR);\n        break;\n\n      case 'minute':\n        time = this._d.valueOf();\n        time -= mod$1(time, MS_PER_MINUTE);\n        break;\n\n      case 'second':\n        time = this._d.valueOf();\n        time -= mod$1(time, MS_PER_SECOND);\n        break;\n    }\n\n    this._d.setTime(time);\n\n    hooks.updateOffset(this, true);\n    return this;\n  }\n\n  function endOf(units) {\n    var time;\n    units = normalizeUnits(units);\n\n    if (units === undefined || units === 'millisecond' || !this.isValid()) {\n      return this;\n    }\n\n    var startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;\n\n    switch (units) {\n      case 'year':\n        time = startOfDate(this.year() + 1, 0, 1) - 1;\n        break;\n\n      case 'quarter':\n        time = startOfDate(this.year(), this.month() - this.month() % 3 + 3, 1) - 1;\n        break;\n\n      case 'month':\n        time = startOfDate(this.year(), this.month() + 1, 1) - 1;\n        break;\n\n      case 'week':\n        time = startOfDate(this.year(), this.month(), this.date() - this.weekday() + 7) - 1;\n        break;\n\n      case 'isoWeek':\n        time = startOfDate(this.year(), this.month(), this.date() - (this.isoWeekday() - 1) + 7) - 1;\n        break;\n\n      case 'day':\n      case 'date':\n        time = startOfDate(this.year(), this.month(), this.date() + 1) - 1;\n        break;\n\n      case 'hour':\n        time = this._d.valueOf();\n        time += MS_PER_HOUR - mod$1(time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE), MS_PER_HOUR) - 1;\n        break;\n\n      case 'minute':\n        time = this._d.valueOf();\n        time += MS_PER_MINUTE - mod$1(time, MS_PER_MINUTE) - 1;\n        break;\n\n      case 'second':\n        time = this._d.valueOf();\n        time += MS_PER_SECOND - mod$1(time, MS_PER_SECOND) - 1;\n        break;\n    }\n\n    this._d.setTime(time);\n\n    hooks.updateOffset(this, true);\n    return this;\n  }\n\n  function valueOf() {\n    return this._d.valueOf() - (this._offset || 0) * 60000;\n  }\n\n  function unix() {\n    return Math.floor(this.valueOf() / 1000);\n  }\n\n  function toDate() {\n    return new Date(this.valueOf());\n  }\n\n  function toArray() {\n    var m = this;\n    return [m.year(), m.month(), m.date(), m.hour(), m.minute(), m.second(), m.millisecond()];\n  }\n\n  function toObject() {\n    var m = this;\n    return {\n      years: m.year(),\n      months: m.month(),\n      date: m.date(),\n      hours: m.hours(),\n      minutes: m.minutes(),\n      seconds: m.seconds(),\n      milliseconds: m.milliseconds()\n    };\n  }\n\n  function toJSON() {\n    // new Date(NaN).toJSON() === null\n    return this.isValid() ? this.toISOString() : null;\n  }\n\n  function isValid$2() {\n    return isValid(this);\n  }\n\n  function parsingFlags() {\n    return extend({}, getParsingFlags(this));\n  }\n\n  function invalidAt() {\n    return getParsingFlags(this).overflow;\n  }\n\n  function creationData() {\n    return {\n      input: this._i,\n      format: this._f,\n      locale: this._locale,\n      isUTC: this._isUTC,\n      strict: this._strict\n    };\n  } // FORMATTING\n\n\n  addFormatToken(0, ['gg', 2], 0, function () {\n    return this.weekYear() % 100;\n  });\n  addFormatToken(0, ['GG', 2], 0, function () {\n    return this.isoWeekYear() % 100;\n  });\n\n  function addWeekYearFormatToken(token, getter) {\n    addFormatToken(0, [token, token.length], 0, getter);\n  }\n\n  addWeekYearFormatToken('gggg', 'weekYear');\n  addWeekYearFormatToken('ggggg', 'weekYear');\n  addWeekYearFormatToken('GGGG', 'isoWeekYear');\n  addWeekYearFormatToken('GGGGG', 'isoWeekYear'); // ALIASES\n\n  addUnitAlias('weekYear', 'gg');\n  addUnitAlias('isoWeekYear', 'GG'); // PRIORITY\n\n  addUnitPriority('weekYear', 1);\n  addUnitPriority('isoWeekYear', 1); // PARSING\n\n  addRegexToken('G', matchSigned);\n  addRegexToken('g', matchSigned);\n  addRegexToken('GG', match1to2, match2);\n  addRegexToken('gg', match1to2, match2);\n  addRegexToken('GGGG', match1to4, match4);\n  addRegexToken('gggg', match1to4, match4);\n  addRegexToken('GGGGG', match1to6, match6);\n  addRegexToken('ggggg', match1to6, match6);\n  addWeekParseToken(['gggg', 'ggggg', 'GGGG', 'GGGGG'], function (input, week, config, token) {\n    week[token.substr(0, 2)] = toInt(input);\n  });\n  addWeekParseToken(['gg', 'GG'], function (input, week, config, token) {\n    week[token] = hooks.parseTwoDigitYear(input);\n  }); // MOMENTS\n\n  function getSetWeekYear(input) {\n    return getSetWeekYearHelper.call(this, input, this.week(), this.weekday(), this.localeData()._week.dow, this.localeData()._week.doy);\n  }\n\n  function getSetISOWeekYear(input) {\n    return getSetWeekYearHelper.call(this, input, this.isoWeek(), this.isoWeekday(), 1, 4);\n  }\n\n  function getISOWeeksInYear() {\n    return weeksInYear(this.year(), 1, 4);\n  }\n\n  function getWeeksInYear() {\n    var weekInfo = this.localeData()._week;\n\n    return weeksInYear(this.year(), weekInfo.dow, weekInfo.doy);\n  }\n\n  function getSetWeekYearHelper(input, week, weekday, dow, doy) {\n    var weeksTarget;\n\n    if (input == null) {\n      return weekOfYear(this, dow, doy).year;\n    } else {\n      weeksTarget = weeksInYear(input, dow, doy);\n\n      if (week > weeksTarget) {\n        week = weeksTarget;\n      }\n\n      return setWeekAll.call(this, input, week, weekday, dow, doy);\n    }\n  }\n\n  function setWeekAll(weekYear, week, weekday, dow, doy) {\n    var dayOfYearData = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy),\n        date = createUTCDate(dayOfYearData.year, 0, dayOfYearData.dayOfYear);\n    this.year(date.getUTCFullYear());\n    this.month(date.getUTCMonth());\n    this.date(date.getUTCDate());\n    return this;\n  } // FORMATTING\n\n\n  addFormatToken('Q', 0, 'Qo', 'quarter'); // ALIASES\n\n  addUnitAlias('quarter', 'Q'); // PRIORITY\n\n  addUnitPriority('quarter', 7); // PARSING\n\n  addRegexToken('Q', match1);\n  addParseToken('Q', function (input, array) {\n    array[MONTH] = (toInt(input) - 1) * 3;\n  }); // MOMENTS\n\n  function getSetQuarter(input) {\n    return input == null ? Math.ceil((this.month() + 1) / 3) : this.month((input - 1) * 3 + this.month() % 3);\n  } // FORMATTING\n\n\n  addFormatToken('D', ['DD', 2], 'Do', 'date'); // ALIASES\n\n  addUnitAlias('date', 'D'); // PRIORITY\n\n  addUnitPriority('date', 9); // PARSING\n\n  addRegexToken('D', match1to2);\n  addRegexToken('DD', match1to2, match2);\n  addRegexToken('Do', function (isStrict, locale) {\n    // TODO: Remove \"ordinalParse\" fallback in next major release.\n    return isStrict ? locale._dayOfMonthOrdinalParse || locale._ordinalParse : locale._dayOfMonthOrdinalParseLenient;\n  });\n  addParseToken(['D', 'DD'], DATE);\n  addParseToken('Do', function (input, array) {\n    array[DATE] = toInt(input.match(match1to2)[0]);\n  }); // MOMENTS\n\n  var getSetDayOfMonth = makeGetSet('Date', true); // FORMATTING\n\n  addFormatToken('DDD', ['DDDD', 3], 'DDDo', 'dayOfYear'); // ALIASES\n\n  addUnitAlias('dayOfYear', 'DDD'); // PRIORITY\n\n  addUnitPriority('dayOfYear', 4); // PARSING\n\n  addRegexToken('DDD', match1to3);\n  addRegexToken('DDDD', match3);\n  addParseToken(['DDD', 'DDDD'], function (input, array, config) {\n    config._dayOfYear = toInt(input);\n  }); // HELPERS\n  // MOMENTS\n\n  function getSetDayOfYear(input) {\n    var dayOfYear = Math.round((this.clone().startOf('day') - this.clone().startOf('year')) / 864e5) + 1;\n    return input == null ? dayOfYear : this.add(input - dayOfYear, 'd');\n  } // FORMATTING\n\n\n  addFormatToken('m', ['mm', 2], 0, 'minute'); // ALIASES\n\n  addUnitAlias('minute', 'm'); // PRIORITY\n\n  addUnitPriority('minute', 14); // PARSING\n\n  addRegexToken('m', match1to2);\n  addRegexToken('mm', match1to2, match2);\n  addParseToken(['m', 'mm'], MINUTE); // MOMENTS\n\n  var getSetMinute = makeGetSet('Minutes', false); // FORMATTING\n\n  addFormatToken('s', ['ss', 2], 0, 'second'); // ALIASES\n\n  addUnitAlias('second', 's'); // PRIORITY\n\n  addUnitPriority('second', 15); // PARSING\n\n  addRegexToken('s', match1to2);\n  addRegexToken('ss', match1to2, match2);\n  addParseToken(['s', 'ss'], SECOND); // MOMENTS\n\n  var getSetSecond = makeGetSet('Seconds', false); // FORMATTING\n\n  addFormatToken('S', 0, 0, function () {\n    return ~~(this.millisecond() / 100);\n  });\n  addFormatToken(0, ['SS', 2], 0, function () {\n    return ~~(this.millisecond() / 10);\n  });\n  addFormatToken(0, ['SSS', 3], 0, 'millisecond');\n  addFormatToken(0, ['SSSS', 4], 0, function () {\n    return this.millisecond() * 10;\n  });\n  addFormatToken(0, ['SSSSS', 5], 0, function () {\n    return this.millisecond() * 100;\n  });\n  addFormatToken(0, ['SSSSSS', 6], 0, function () {\n    return this.millisecond() * 1000;\n  });\n  addFormatToken(0, ['SSSSSSS', 7], 0, function () {\n    return this.millisecond() * 10000;\n  });\n  addFormatToken(0, ['SSSSSSSS', 8], 0, function () {\n    return this.millisecond() * 100000;\n  });\n  addFormatToken(0, ['SSSSSSSSS', 9], 0, function () {\n    return this.millisecond() * 1000000;\n  }); // ALIASES\n\n  addUnitAlias('millisecond', 'ms'); // PRIORITY\n\n  addUnitPriority('millisecond', 16); // PARSING\n\n  addRegexToken('S', match1to3, match1);\n  addRegexToken('SS', match1to3, match2);\n  addRegexToken('SSS', match1to3, match3);\n  var token;\n\n  for (token = 'SSSS'; token.length <= 9; token += 'S') {\n    addRegexToken(token, matchUnsigned);\n  }\n\n  function parseMs(input, array) {\n    array[MILLISECOND] = toInt(('0.' + input) * 1000);\n  }\n\n  for (token = 'S'; token.length <= 9; token += 'S') {\n    addParseToken(token, parseMs);\n  } // MOMENTS\n\n\n  var getSetMillisecond = makeGetSet('Milliseconds', false); // FORMATTING\n\n  addFormatToken('z', 0, 0, 'zoneAbbr');\n  addFormatToken('zz', 0, 0, 'zoneName'); // MOMENTS\n\n  function getZoneAbbr() {\n    return this._isUTC ? 'UTC' : '';\n  }\n\n  function getZoneName() {\n    return this._isUTC ? 'Coordinated Universal Time' : '';\n  }\n\n  var proto = Moment.prototype;\n  proto.add = add;\n  proto.calendar = calendar$1;\n  proto.clone = clone;\n  proto.diff = diff;\n  proto.endOf = endOf;\n  proto.format = format;\n  proto.from = from;\n  proto.fromNow = fromNow;\n  proto.to = to;\n  proto.toNow = toNow;\n  proto.get = stringGet;\n  proto.invalidAt = invalidAt;\n  proto.isAfter = isAfter;\n  proto.isBefore = isBefore;\n  proto.isBetween = isBetween;\n  proto.isSame = isSame;\n  proto.isSameOrAfter = isSameOrAfter;\n  proto.isSameOrBefore = isSameOrBefore;\n  proto.isValid = isValid$2;\n  proto.lang = lang;\n  proto.locale = locale;\n  proto.localeData = localeData;\n  proto.max = prototypeMax;\n  proto.min = prototypeMin;\n  proto.parsingFlags = parsingFlags;\n  proto.set = stringSet;\n  proto.startOf = startOf;\n  proto.subtract = subtract;\n  proto.toArray = toArray;\n  proto.toObject = toObject;\n  proto.toDate = toDate;\n  proto.toISOString = toISOString;\n  proto.inspect = inspect;\n  proto.toJSON = toJSON;\n  proto.toString = toString;\n  proto.unix = unix;\n  proto.valueOf = valueOf;\n  proto.creationData = creationData;\n  proto.year = getSetYear;\n  proto.isLeapYear = getIsLeapYear;\n  proto.weekYear = getSetWeekYear;\n  proto.isoWeekYear = getSetISOWeekYear;\n  proto.quarter = proto.quarters = getSetQuarter;\n  proto.month = getSetMonth;\n  proto.daysInMonth = getDaysInMonth;\n  proto.week = proto.weeks = getSetWeek;\n  proto.isoWeek = proto.isoWeeks = getSetISOWeek;\n  proto.weeksInYear = getWeeksInYear;\n  proto.isoWeeksInYear = getISOWeeksInYear;\n  proto.date = getSetDayOfMonth;\n  proto.day = proto.days = getSetDayOfWeek;\n  proto.weekday = getSetLocaleDayOfWeek;\n  proto.isoWeekday = getSetISODayOfWeek;\n  proto.dayOfYear = getSetDayOfYear;\n  proto.hour = proto.hours = getSetHour;\n  proto.minute = proto.minutes = getSetMinute;\n  proto.second = proto.seconds = getSetSecond;\n  proto.millisecond = proto.milliseconds = getSetMillisecond;\n  proto.utcOffset = getSetOffset;\n  proto.utc = setOffsetToUTC;\n  proto.local = setOffsetToLocal;\n  proto.parseZone = setOffsetToParsedOffset;\n  proto.hasAlignedHourOffset = hasAlignedHourOffset;\n  proto.isDST = isDaylightSavingTime;\n  proto.isLocal = isLocal;\n  proto.isUtcOffset = isUtcOffset;\n  proto.isUtc = isUtc;\n  proto.isUTC = isUtc;\n  proto.zoneAbbr = getZoneAbbr;\n  proto.zoneName = getZoneName;\n  proto.dates = deprecate('dates accessor is deprecated. Use date instead.', getSetDayOfMonth);\n  proto.months = deprecate('months accessor is deprecated. Use month instead', getSetMonth);\n  proto.years = deprecate('years accessor is deprecated. Use year instead', getSetYear);\n  proto.zone = deprecate('moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/', getSetZone);\n  proto.isDSTShifted = deprecate('isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information', isDaylightSavingTimeShifted);\n\n  function createUnix(input) {\n    return createLocal(input * 1000);\n  }\n\n  function createInZone() {\n    return createLocal.apply(null, arguments).parseZone();\n  }\n\n  function preParsePostFormat(string) {\n    return string;\n  }\n\n  var proto$1 = Locale.prototype;\n  proto$1.calendar = calendar;\n  proto$1.longDateFormat = longDateFormat;\n  proto$1.invalidDate = invalidDate;\n  proto$1.ordinal = ordinal;\n  proto$1.preparse = preParsePostFormat;\n  proto$1.postformat = preParsePostFormat;\n  proto$1.relativeTime = relativeTime;\n  proto$1.pastFuture = pastFuture;\n  proto$1.set = set;\n  proto$1.months = localeMonths;\n  proto$1.monthsShort = localeMonthsShort;\n  proto$1.monthsParse = localeMonthsParse;\n  proto$1.monthsRegex = monthsRegex;\n  proto$1.monthsShortRegex = monthsShortRegex;\n  proto$1.week = localeWeek;\n  proto$1.firstDayOfYear = localeFirstDayOfYear;\n  proto$1.firstDayOfWeek = localeFirstDayOfWeek;\n  proto$1.weekdays = localeWeekdays;\n  proto$1.weekdaysMin = localeWeekdaysMin;\n  proto$1.weekdaysShort = localeWeekdaysShort;\n  proto$1.weekdaysParse = localeWeekdaysParse;\n  proto$1.weekdaysRegex = weekdaysRegex;\n  proto$1.weekdaysShortRegex = weekdaysShortRegex;\n  proto$1.weekdaysMinRegex = weekdaysMinRegex;\n  proto$1.isPM = localeIsPM;\n  proto$1.meridiem = localeMeridiem;\n\n  function get$1(format, index, field, setter) {\n    var locale = getLocale();\n    var utc = createUTC().set(setter, index);\n    return locale[field](utc, format);\n  }\n\n  function listMonthsImpl(format, index, field) {\n    if (isNumber(format)) {\n      index = format;\n      format = undefined;\n    }\n\n    format = format || '';\n\n    if (index != null) {\n      return get$1(format, index, field, 'month');\n    }\n\n    var i;\n    var out = [];\n\n    for (i = 0; i < 12; i++) {\n      out[i] = get$1(format, i, field, 'month');\n    }\n\n    return out;\n  } // ()\n  // (5)\n  // (fmt, 5)\n  // (fmt)\n  // (true)\n  // (true, 5)\n  // (true, fmt, 5)\n  // (true, fmt)\n\n\n  function listWeekdaysImpl(localeSorted, format, index, field) {\n    if (typeof localeSorted === 'boolean') {\n      if (isNumber(format)) {\n        index = format;\n        format = undefined;\n      }\n\n      format = format || '';\n    } else {\n      format = localeSorted;\n      index = format;\n      localeSorted = false;\n\n      if (isNumber(format)) {\n        index = format;\n        format = undefined;\n      }\n\n      format = format || '';\n    }\n\n    var locale = getLocale(),\n        shift = localeSorted ? locale._week.dow : 0;\n\n    if (index != null) {\n      return get$1(format, (index + shift) % 7, field, 'day');\n    }\n\n    var i;\n    var out = [];\n\n    for (i = 0; i < 7; i++) {\n      out[i] = get$1(format, (i + shift) % 7, field, 'day');\n    }\n\n    return out;\n  }\n\n  function listMonths(format, index) {\n    return listMonthsImpl(format, index, 'months');\n  }\n\n  function listMonthsShort(format, index) {\n    return listMonthsImpl(format, index, 'monthsShort');\n  }\n\n  function listWeekdays(localeSorted, format, index) {\n    return listWeekdaysImpl(localeSorted, format, index, 'weekdays');\n  }\n\n  function listWeekdaysShort(localeSorted, format, index) {\n    return listWeekdaysImpl(localeSorted, format, index, 'weekdaysShort');\n  }\n\n  function listWeekdaysMin(localeSorted, format, index) {\n    return listWeekdaysImpl(localeSorted, format, index, 'weekdaysMin');\n  }\n\n  getSetGlobalLocale('en', {\n    dayOfMonthOrdinalParse: /\\d{1,2}(th|st|nd|rd)/,\n    ordinal: function ordinal(number) {\n      var b = number % 10,\n          output = toInt(number % 100 / 10) === 1 ? 'th' : b === 1 ? 'st' : b === 2 ? 'nd' : b === 3 ? 'rd' : 'th';\n      return number + output;\n    }\n  }); // Side effect imports\n\n  hooks.lang = deprecate('moment.lang is deprecated. Use moment.locale instead.', getSetGlobalLocale);\n  hooks.langData = deprecate('moment.langData is deprecated. Use moment.localeData instead.', getLocale);\n  var mathAbs = Math.abs;\n\n  function abs() {\n    var data = this._data;\n    this._milliseconds = mathAbs(this._milliseconds);\n    this._days = mathAbs(this._days);\n    this._months = mathAbs(this._months);\n    data.milliseconds = mathAbs(data.milliseconds);\n    data.seconds = mathAbs(data.seconds);\n    data.minutes = mathAbs(data.minutes);\n    data.hours = mathAbs(data.hours);\n    data.months = mathAbs(data.months);\n    data.years = mathAbs(data.years);\n    return this;\n  }\n\n  function addSubtract$1(duration, input, value, direction) {\n    var other = createDuration(input, value);\n    duration._milliseconds += direction * other._milliseconds;\n    duration._days += direction * other._days;\n    duration._months += direction * other._months;\n    return duration._bubble();\n  } // supports only 2.0-style add(1, 's') or add(duration)\n\n\n  function add$1(input, value) {\n    return addSubtract$1(this, input, value, 1);\n  } // supports only 2.0-style subtract(1, 's') or subtract(duration)\n\n\n  function subtract$1(input, value) {\n    return addSubtract$1(this, input, value, -1);\n  }\n\n  function absCeil(number) {\n    if (number < 0) {\n      return Math.floor(number);\n    } else {\n      return Math.ceil(number);\n    }\n  }\n\n  function bubble() {\n    var milliseconds = this._milliseconds;\n    var days = this._days;\n    var months = this._months;\n    var data = this._data;\n    var seconds, minutes, hours, years, monthsFromDays; // if we have a mix of positive and negative values, bubble down first\n    // check: https://github.com/moment/moment/issues/2166\n\n    if (!(milliseconds >= 0 && days >= 0 && months >= 0 || milliseconds <= 0 && days <= 0 && months <= 0)) {\n      milliseconds += absCeil(monthsToDays(months) + days) * 864e5;\n      days = 0;\n      months = 0;\n    } // The following code bubbles up values, see the tests for\n    // examples of what that means.\n\n\n    data.milliseconds = milliseconds % 1000;\n    seconds = absFloor(milliseconds / 1000);\n    data.seconds = seconds % 60;\n    minutes = absFloor(seconds / 60);\n    data.minutes = minutes % 60;\n    hours = absFloor(minutes / 60);\n    data.hours = hours % 24;\n    days += absFloor(hours / 24); // convert days to months\n\n    monthsFromDays = absFloor(daysToMonths(days));\n    months += monthsFromDays;\n    days -= absCeil(monthsToDays(monthsFromDays)); // 12 months -> 1 year\n\n    years = absFloor(months / 12);\n    months %= 12;\n    data.days = days;\n    data.months = months;\n    data.years = years;\n    return this;\n  }\n\n  function daysToMonths(days) {\n    // 400 years have 146097 days (taking into account leap year rules)\n    // 400 years have 12 months === 4800\n    return days * 4800 / 146097;\n  }\n\n  function monthsToDays(months) {\n    // the reverse of daysToMonths\n    return months * 146097 / 4800;\n  }\n\n  function as(units) {\n    if (!this.isValid()) {\n      return NaN;\n    }\n\n    var days;\n    var months;\n    var milliseconds = this._milliseconds;\n    units = normalizeUnits(units);\n\n    if (units === 'month' || units === 'quarter' || units === 'year') {\n      days = this._days + milliseconds / 864e5;\n      months = this._months + daysToMonths(days);\n\n      switch (units) {\n        case 'month':\n          return months;\n\n        case 'quarter':\n          return months / 3;\n\n        case 'year':\n          return months / 12;\n      }\n    } else {\n      // handle milliseconds separately because of floating point math errors (issue #1867)\n      days = this._days + Math.round(monthsToDays(this._months));\n\n      switch (units) {\n        case 'week':\n          return days / 7 + milliseconds / 6048e5;\n\n        case 'day':\n          return days + milliseconds / 864e5;\n\n        case 'hour':\n          return days * 24 + milliseconds / 36e5;\n\n        case 'minute':\n          return days * 1440 + milliseconds / 6e4;\n\n        case 'second':\n          return days * 86400 + milliseconds / 1000;\n        // Math.floor prevents floating point math errors here\n\n        case 'millisecond':\n          return Math.floor(days * 864e5) + milliseconds;\n\n        default:\n          throw new Error('Unknown unit ' + units);\n      }\n    }\n  } // TODO: Use this.as('ms')?\n\n\n  function valueOf$1() {\n    if (!this.isValid()) {\n      return NaN;\n    }\n\n    return this._milliseconds + this._days * 864e5 + this._months % 12 * 2592e6 + toInt(this._months / 12) * 31536e6;\n  }\n\n  function makeAs(alias) {\n    return function () {\n      return this.as(alias);\n    };\n  }\n\n  var asMilliseconds = makeAs('ms');\n  var asSeconds = makeAs('s');\n  var asMinutes = makeAs('m');\n  var asHours = makeAs('h');\n  var asDays = makeAs('d');\n  var asWeeks = makeAs('w');\n  var asMonths = makeAs('M');\n  var asQuarters = makeAs('Q');\n  var asYears = makeAs('y');\n\n  function clone$1() {\n    return createDuration(this);\n  }\n\n  function get$2(units) {\n    units = normalizeUnits(units);\n    return this.isValid() ? this[units + 's']() : NaN;\n  }\n\n  function makeGetter(name) {\n    return function () {\n      return this.isValid() ? this._data[name] : NaN;\n    };\n  }\n\n  var milliseconds = makeGetter('milliseconds');\n  var seconds = makeGetter('seconds');\n  var minutes = makeGetter('minutes');\n  var hours = makeGetter('hours');\n  var days = makeGetter('days');\n  var months = makeGetter('months');\n  var years = makeGetter('years');\n\n  function weeks() {\n    return absFloor(this.days() / 7);\n  }\n\n  var round = Math.round;\n  var thresholds = {\n    ss: 44,\n    // a few seconds to seconds\n    s: 45,\n    // seconds to minute\n    m: 45,\n    // minutes to hour\n    h: 22,\n    // hours to day\n    d: 26,\n    // days to month\n    M: 11 // months to year\n\n  }; // helper function for moment.fn.from, moment.fn.fromNow, and moment.duration.fn.humanize\n\n  function substituteTimeAgo(string, number, withoutSuffix, isFuture, locale) {\n    return locale.relativeTime(number || 1, !!withoutSuffix, string, isFuture);\n  }\n\n  function relativeTime$1(posNegDuration, withoutSuffix, locale) {\n    var duration = createDuration(posNegDuration).abs();\n    var seconds = round(duration.as('s'));\n    var minutes = round(duration.as('m'));\n    var hours = round(duration.as('h'));\n    var days = round(duration.as('d'));\n    var months = round(duration.as('M'));\n    var years = round(duration.as('y'));\n    var a = seconds <= thresholds.ss && ['s', seconds] || seconds < thresholds.s && ['ss', seconds] || minutes <= 1 && ['m'] || minutes < thresholds.m && ['mm', minutes] || hours <= 1 && ['h'] || hours < thresholds.h && ['hh', hours] || days <= 1 && ['d'] || days < thresholds.d && ['dd', days] || months <= 1 && ['M'] || months < thresholds.M && ['MM', months] || years <= 1 && ['y'] || ['yy', years];\n    a[2] = withoutSuffix;\n    a[3] = +posNegDuration > 0;\n    a[4] = locale;\n    return substituteTimeAgo.apply(null, a);\n  } // This function allows you to set the rounding function for relative time strings\n\n\n  function getSetRelativeTimeRounding(roundingFunction) {\n    if (roundingFunction === undefined) {\n      return round;\n    }\n\n    if (typeof roundingFunction === 'function') {\n      round = roundingFunction;\n      return true;\n    }\n\n    return false;\n  } // This function allows you to set a threshold for relative time strings\n\n\n  function getSetRelativeTimeThreshold(threshold, limit) {\n    if (thresholds[threshold] === undefined) {\n      return false;\n    }\n\n    if (limit === undefined) {\n      return thresholds[threshold];\n    }\n\n    thresholds[threshold] = limit;\n\n    if (threshold === 's') {\n      thresholds.ss = limit - 1;\n    }\n\n    return true;\n  }\n\n  function humanize(withSuffix) {\n    if (!this.isValid()) {\n      return this.localeData().invalidDate();\n    }\n\n    var locale = this.localeData();\n    var output = relativeTime$1(this, !withSuffix, locale);\n\n    if (withSuffix) {\n      output = locale.pastFuture(+this, output);\n    }\n\n    return locale.postformat(output);\n  }\n\n  var abs$1 = Math.abs;\n\n  function sign(x) {\n    return (x > 0) - (x < 0) || +x;\n  }\n\n  function toISOString$1() {\n    // for ISO strings we do not use the normal bubbling rules:\n    //  * milliseconds bubble up until they become hours\n    //  * days do not bubble at all\n    //  * months bubble up until they become years\n    // This is because there is no context-free conversion between hours and days\n    // (think of clock changes)\n    // and also not between days and months (28-31 days per month)\n    if (!this.isValid()) {\n      return this.localeData().invalidDate();\n    }\n\n    var seconds = abs$1(this._milliseconds) / 1000;\n    var days = abs$1(this._days);\n    var months = abs$1(this._months);\n    var minutes, hours, years; // 3600 seconds -> 60 minutes -> 1 hour\n\n    minutes = absFloor(seconds / 60);\n    hours = absFloor(minutes / 60);\n    seconds %= 60;\n    minutes %= 60; // 12 months -> 1 year\n\n    years = absFloor(months / 12);\n    months %= 12; // inspired by https://github.com/dordille/moment-isoduration/blob/master/moment.isoduration.js\n\n    var Y = years;\n    var M = months;\n    var D = days;\n    var h = hours;\n    var m = minutes;\n    var s = seconds ? seconds.toFixed(3).replace(/\\.?0+$/, '') : '';\n    var total = this.asSeconds();\n\n    if (!total) {\n      // this is the same as C#'s (Noda) and python (isodate)...\n      // but not other JS (goog.date)\n      return 'P0D';\n    }\n\n    var totalSign = total < 0 ? '-' : '';\n    var ymSign = sign(this._months) !== sign(total) ? '-' : '';\n    var daysSign = sign(this._days) !== sign(total) ? '-' : '';\n    var hmsSign = sign(this._milliseconds) !== sign(total) ? '-' : '';\n    return totalSign + 'P' + (Y ? ymSign + Y + 'Y' : '') + (M ? ymSign + M + 'M' : '') + (D ? daysSign + D + 'D' : '') + (h || m || s ? 'T' : '') + (h ? hmsSign + h + 'H' : '') + (m ? hmsSign + m + 'M' : '') + (s ? hmsSign + s + 'S' : '');\n  }\n\n  var proto$2 = Duration.prototype;\n  proto$2.isValid = isValid$1;\n  proto$2.abs = abs;\n  proto$2.add = add$1;\n  proto$2.subtract = subtract$1;\n  proto$2.as = as;\n  proto$2.asMilliseconds = asMilliseconds;\n  proto$2.asSeconds = asSeconds;\n  proto$2.asMinutes = asMinutes;\n  proto$2.asHours = asHours;\n  proto$2.asDays = asDays;\n  proto$2.asWeeks = asWeeks;\n  proto$2.asMonths = asMonths;\n  proto$2.asQuarters = asQuarters;\n  proto$2.asYears = asYears;\n  proto$2.valueOf = valueOf$1;\n  proto$2._bubble = bubble;\n  proto$2.clone = clone$1;\n  proto$2.get = get$2;\n  proto$2.milliseconds = milliseconds;\n  proto$2.seconds = seconds;\n  proto$2.minutes = minutes;\n  proto$2.hours = hours;\n  proto$2.days = days;\n  proto$2.weeks = weeks;\n  proto$2.months = months;\n  proto$2.years = years;\n  proto$2.humanize = humanize;\n  proto$2.toISOString = toISOString$1;\n  proto$2.toString = toISOString$1;\n  proto$2.toJSON = toISOString$1;\n  proto$2.locale = locale;\n  proto$2.localeData = localeData;\n  proto$2.toIsoString = deprecate('toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)', toISOString$1);\n  proto$2.lang = lang; // Side effect imports\n  // FORMATTING\n\n  addFormatToken('X', 0, 0, 'unix');\n  addFormatToken('x', 0, 0, 'valueOf'); // PARSING\n\n  addRegexToken('x', matchSigned);\n  addRegexToken('X', matchTimestamp);\n  addParseToken('X', function (input, array, config) {\n    config._d = new Date(parseFloat(input, 10) * 1000);\n  });\n  addParseToken('x', function (input, array, config) {\n    config._d = new Date(toInt(input));\n  }); // Side effect imports\n\n  hooks.version = '2.24.0';\n  setHookCallback(createLocal);\n  hooks.fn = proto;\n  hooks.min = min;\n  hooks.max = max;\n  hooks.now = now;\n  hooks.utc = createUTC;\n  hooks.unix = createUnix;\n  hooks.months = listMonths;\n  hooks.isDate = isDate;\n  hooks.locale = getSetGlobalLocale;\n  hooks.invalid = createInvalid;\n  hooks.duration = createDuration;\n  hooks.isMoment = isMoment;\n  hooks.weekdays = listWeekdays;\n  hooks.parseZone = createInZone;\n  hooks.localeData = getLocale;\n  hooks.isDuration = isDuration;\n  hooks.monthsShort = listMonthsShort;\n  hooks.weekdaysMin = listWeekdaysMin;\n  hooks.defineLocale = defineLocale;\n  hooks.updateLocale = updateLocale;\n  hooks.locales = listLocales;\n  hooks.weekdaysShort = listWeekdaysShort;\n  hooks.normalizeUnits = normalizeUnits;\n  hooks.relativeTimeRounding = getSetRelativeTimeRounding;\n  hooks.relativeTimeThreshold = getSetRelativeTimeThreshold;\n  hooks.calendarFormat = getCalendarFormat;\n  hooks.prototype = proto; // currently HTML5 input type only supports 24-hour formats\n\n  hooks.HTML5_FMT = {\n    DATETIME_LOCAL: 'YYYY-MM-DDTHH:mm',\n    // <input type=\"datetime-local\" />\n    DATETIME_LOCAL_SECONDS: 'YYYY-MM-DDTHH:mm:ss',\n    // <input type=\"datetime-local\" step=\"1\" />\n    DATETIME_LOCAL_MS: 'YYYY-MM-DDTHH:mm:ss.SSS',\n    // <input type=\"datetime-local\" step=\"0.001\" />\n    DATE: 'YYYY-MM-DD',\n    // <input type=\"date\" />\n    TIME: 'HH:mm',\n    // <input type=\"time\" />\n    TIME_SECONDS: 'HH:mm:ss',\n    // <input type=\"time\" step=\"1\" />\n    TIME_MS: 'HH:mm:ss.SSS',\n    // <input type=\"time\" step=\"0.001\" />\n    WEEK: 'GGGG-[W]WW',\n    // <input type=\"week\" />\n    MONTH: 'YYYY-MM' // <input type=\"month\" />\n\n  };\n  return hooks;\n});","function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n/*!\n * jQuery JavaScript Library v3.4.1\n * https://jquery.com/\n *\n * Includes Sizzle.js\n * https://sizzlejs.com/\n *\n * Copyright JS Foundation and other contributors\n * Released under the MIT license\n * https://jquery.org/license\n *\n * Date: 2019-05-01T21:04Z\n */\n(function (global, factory) {\n  \"use strict\";\n\n  if ((typeof module === \"undefined\" ? \"undefined\" : _typeof(module)) === \"object\" && _typeof(module.exports) === \"object\") {\n    // For CommonJS and CommonJS-like environments where a proper `window`\n    // is present, execute the factory and get jQuery.\n    // For environments that do not have a `window` with a `document`\n    // (such as Node.js), expose a factory as module.exports.\n    // This accentuates the need for the creation of a real `window`.\n    // e.g. var jQuery = require(\"jquery\")(window);\n    // See ticket #14549 for more info.\n    module.exports = global.document ? factory(global, true) : function (w) {\n      if (!w.document) {\n        throw new Error(\"jQuery requires a window with a document\");\n      }\n\n      return factory(w);\n    };\n  } else {\n    factory(global);\n  } // Pass this if window is not defined yet\n\n})(typeof window !== \"undefined\" ? window : this, function (window, noGlobal) {\n  // Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1\n  // throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode\n  // arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common\n  // enough that all such attempts are guarded in a try block.\n  \"use strict\";\n\n  var arr = [];\n  var document = window.document;\n  var getProto = Object.getPrototypeOf;\n  var _slice = arr.slice;\n  var concat = arr.concat;\n  var push = arr.push;\n  var indexOf = arr.indexOf;\n  var class2type = {};\n  var toString = class2type.toString;\n  var hasOwn = class2type.hasOwnProperty;\n  var fnToString = hasOwn.toString;\n  var ObjectFunctionString = fnToString.call(Object);\n  var support = {};\n\n  var isFunction = function isFunction(obj) {\n    // Support: Chrome <=57, Firefox <=52\n    // In some browsers, typeof returns \"function\" for HTML <object> elements\n    // (i.e., `typeof document.createElement( \"object\" ) === \"function\"`).\n    // We don't want to classify *any* DOM node as a function.\n    return typeof obj === \"function\" && typeof obj.nodeType !== \"number\";\n  };\n\n  var isWindow = function isWindow(obj) {\n    return obj != null && obj === obj.window;\n  };\n\n  var preservedScriptAttributes = {\n    type: true,\n    src: true,\n    nonce: true,\n    noModule: true\n  };\n\n  function DOMEval(code, node, doc) {\n    doc = doc || document;\n    var i,\n        val,\n        script = doc.createElement(\"script\");\n    script.text = code;\n\n    if (node) {\n      for (i in preservedScriptAttributes) {\n        // Support: Firefox 64+, Edge 18+\n        // Some browsers don't support the \"nonce\" property on scripts.\n        // On the other hand, just using `getAttribute` is not enough as\n        // the `nonce` attribute is reset to an empty string whenever it\n        // becomes browsing-context connected.\n        // See https://github.com/whatwg/html/issues/2369\n        // See https://html.spec.whatwg.org/#nonce-attributes\n        // The `node.getAttribute` check was added for the sake of\n        // `jQuery.globalEval` so that it can fake a nonce-containing node\n        // via an object.\n        val = node[i] || node.getAttribute && node.getAttribute(i);\n\n        if (val) {\n          script.setAttribute(i, val);\n        }\n      }\n    }\n\n    doc.head.appendChild(script).parentNode.removeChild(script);\n  }\n\n  function toType(obj) {\n    if (obj == null) {\n      return obj + \"\";\n    } // Support: Android <=2.3 only (functionish RegExp)\n\n\n    return _typeof(obj) === \"object\" || typeof obj === \"function\" ? class2type[toString.call(obj)] || \"object\" : _typeof(obj);\n  }\n  /* global Symbol */\n  // Defining this global in .eslintrc.json would create a danger of using the global\n  // unguarded in another place, it seems safer to define global only for this module\n\n\n  var version = \"3.4.1\",\n      // Define a local copy of jQuery\n  jQuery = function jQuery(selector, context) {\n    // The jQuery object is actually just the init constructor 'enhanced'\n    // Need init if jQuery is called (just allow error to be thrown if not included)\n    return new jQuery.fn.init(selector, context);\n  },\n      // Support: Android <=4.0 only\n  // Make sure we trim BOM and NBSP\n  rtrim = /^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g;\n\n  jQuery.fn = jQuery.prototype = {\n    // The current version of jQuery being used\n    jquery: version,\n    constructor: jQuery,\n    // The default length of a jQuery object is 0\n    length: 0,\n    toArray: function toArray() {\n      return _slice.call(this);\n    },\n    // Get the Nth element in the matched element set OR\n    // Get the whole matched element set as a clean array\n    get: function get(num) {\n      // Return all the elements in a clean array\n      if (num == null) {\n        return _slice.call(this);\n      } // Return just the one element from the set\n\n\n      return num < 0 ? this[num + this.length] : this[num];\n    },\n    // Take an array of elements and push it onto the stack\n    // (returning the new matched element set)\n    pushStack: function pushStack(elems) {\n      // Build a new jQuery matched element set\n      var ret = jQuery.merge(this.constructor(), elems); // Add the old object onto the stack (as a reference)\n\n      ret.prevObject = this; // Return the newly-formed element set\n\n      return ret;\n    },\n    // Execute a callback for every element in the matched set.\n    each: function each(callback) {\n      return jQuery.each(this, callback);\n    },\n    map: function map(callback) {\n      return this.pushStack(jQuery.map(this, function (elem, i) {\n        return callback.call(elem, i, elem);\n      }));\n    },\n    slice: function slice() {\n      return this.pushStack(_slice.apply(this, arguments));\n    },\n    first: function first() {\n      return this.eq(0);\n    },\n    last: function last() {\n      return this.eq(-1);\n    },\n    eq: function eq(i) {\n      var len = this.length,\n          j = +i + (i < 0 ? len : 0);\n      return this.pushStack(j >= 0 && j < len ? [this[j]] : []);\n    },\n    end: function end() {\n      return this.prevObject || this.constructor();\n    },\n    // For internal use only.\n    // Behaves like an Array's method, not like a jQuery method.\n    push: push,\n    sort: arr.sort,\n    splice: arr.splice\n  };\n\n  jQuery.extend = jQuery.fn.extend = function () {\n    var options,\n        name,\n        src,\n        copy,\n        copyIsArray,\n        clone,\n        target = arguments[0] || {},\n        i = 1,\n        length = arguments.length,\n        deep = false; // Handle a deep copy situation\n\n    if (typeof target === \"boolean\") {\n      deep = target; // Skip the boolean and the target\n\n      target = arguments[i] || {};\n      i++;\n    } // Handle case when target is a string or something (possible in deep copy)\n\n\n    if (_typeof(target) !== \"object\" && !isFunction(target)) {\n      target = {};\n    } // Extend jQuery itself if only one argument is passed\n\n\n    if (i === length) {\n      target = this;\n      i--;\n    }\n\n    for (; i < length; i++) {\n      // Only deal with non-null/undefined values\n      if ((options = arguments[i]) != null) {\n        // Extend the base object\n        for (name in options) {\n          copy = options[name]; // Prevent Object.prototype pollution\n          // Prevent never-ending loop\n\n          if (name === \"__proto__\" || target === copy) {\n            continue;\n          } // Recurse if we're merging plain objects or arrays\n\n\n          if (deep && copy && (jQuery.isPlainObject(copy) || (copyIsArray = Array.isArray(copy)))) {\n            src = target[name]; // Ensure proper type for the source value\n\n            if (copyIsArray && !Array.isArray(src)) {\n              clone = [];\n            } else if (!copyIsArray && !jQuery.isPlainObject(src)) {\n              clone = {};\n            } else {\n              clone = src;\n            }\n\n            copyIsArray = false; // Never move original objects, clone them\n\n            target[name] = jQuery.extend(deep, clone, copy); // Don't bring in undefined values\n          } else if (copy !== undefined) {\n            target[name] = copy;\n          }\n        }\n      }\n    } // Return the modified object\n\n\n    return target;\n  };\n\n  jQuery.extend({\n    // Unique for each copy of jQuery on the page\n    expando: \"jQuery\" + (version + Math.random()).replace(/\\D/g, \"\"),\n    // Assume jQuery is ready without the ready module\n    isReady: true,\n    error: function error(msg) {\n      throw new Error(msg);\n    },\n    noop: function noop() {},\n    isPlainObject: function isPlainObject(obj) {\n      var proto, Ctor; // Detect obvious negatives\n      // Use toString instead of jQuery.type to catch host objects\n\n      if (!obj || toString.call(obj) !== \"[object Object]\") {\n        return false;\n      }\n\n      proto = getProto(obj); // Objects with no prototype (e.g., `Object.create( null )`) are plain\n\n      if (!proto) {\n        return true;\n      } // Objects with prototype are plain iff they were constructed by a global Object function\n\n\n      Ctor = hasOwn.call(proto, \"constructor\") && proto.constructor;\n      return typeof Ctor === \"function\" && fnToString.call(Ctor) === ObjectFunctionString;\n    },\n    isEmptyObject: function isEmptyObject(obj) {\n      var name;\n\n      for (name in obj) {\n        return false;\n      }\n\n      return true;\n    },\n    // Evaluates a script in a global context\n    globalEval: function globalEval(code, options) {\n      DOMEval(code, {\n        nonce: options && options.nonce\n      });\n    },\n    each: function each(obj, callback) {\n      var length,\n          i = 0;\n\n      if (isArrayLike(obj)) {\n        length = obj.length;\n\n        for (; i < length; i++) {\n          if (callback.call(obj[i], i, obj[i]) === false) {\n            break;\n          }\n        }\n      } else {\n        for (i in obj) {\n          if (callback.call(obj[i], i, obj[i]) === false) {\n            break;\n          }\n        }\n      }\n\n      return obj;\n    },\n    // Support: Android <=4.0 only\n    trim: function trim(text) {\n      return text == null ? \"\" : (text + \"\").replace(rtrim, \"\");\n    },\n    // results is for internal usage only\n    makeArray: function makeArray(arr, results) {\n      var ret = results || [];\n\n      if (arr != null) {\n        if (isArrayLike(Object(arr))) {\n          jQuery.merge(ret, typeof arr === \"string\" ? [arr] : arr);\n        } else {\n          push.call(ret, arr);\n        }\n      }\n\n      return ret;\n    },\n    inArray: function inArray(elem, arr, i) {\n      return arr == null ? -1 : indexOf.call(arr, elem, i);\n    },\n    // Support: Android <=4.0 only, PhantomJS 1 only\n    // push.apply(_, arraylike) throws on ancient WebKit\n    merge: function merge(first, second) {\n      var len = +second.length,\n          j = 0,\n          i = first.length;\n\n      for (; j < len; j++) {\n        first[i++] = second[j];\n      }\n\n      first.length = i;\n      return first;\n    },\n    grep: function grep(elems, callback, invert) {\n      var callbackInverse,\n          matches = [],\n          i = 0,\n          length = elems.length,\n          callbackExpect = !invert; // Go through the array, only saving the items\n      // that pass the validator function\n\n      for (; i < length; i++) {\n        callbackInverse = !callback(elems[i], i);\n\n        if (callbackInverse !== callbackExpect) {\n          matches.push(elems[i]);\n        }\n      }\n\n      return matches;\n    },\n    // arg is for internal usage only\n    map: function map(elems, callback, arg) {\n      var length,\n          value,\n          i = 0,\n          ret = []; // Go through the array, translating each of the items to their new values\n\n      if (isArrayLike(elems)) {\n        length = elems.length;\n\n        for (; i < length; i++) {\n          value = callback(elems[i], i, arg);\n\n          if (value != null) {\n            ret.push(value);\n          }\n        } // Go through every key on the object,\n\n      } else {\n        for (i in elems) {\n          value = callback(elems[i], i, arg);\n\n          if (value != null) {\n            ret.push(value);\n          }\n        }\n      } // Flatten any nested arrays\n\n\n      return concat.apply([], ret);\n    },\n    // A global GUID counter for objects\n    guid: 1,\n    // jQuery.support is not used in Core but other projects attach their\n    // properties to it so it needs to exist.\n    support: support\n  });\n\n  if (typeof Symbol === \"function\") {\n    jQuery.fn[Symbol.iterator] = arr[Symbol.iterator];\n  } // Populate the class2type map\n\n\n  jQuery.each(\"Boolean Number String Function Array Date RegExp Object Error Symbol\".split(\" \"), function (i, name) {\n    class2type[\"[object \" + name + \"]\"] = name.toLowerCase();\n  });\n\n  function isArrayLike(obj) {\n    // Support: real iOS 8.2 only (not reproducible in simulator)\n    // `in` check used to prevent JIT error (gh-2145)\n    // hasOwn isn't used here due to false negatives\n    // regarding Nodelist length in IE\n    var length = !!obj && \"length\" in obj && obj.length,\n        type = toType(obj);\n\n    if (isFunction(obj) || isWindow(obj)) {\n      return false;\n    }\n\n    return type === \"array\" || length === 0 || typeof length === \"number\" && length > 0 && length - 1 in obj;\n  }\n\n  var Sizzle =\n  /*!\n   * Sizzle CSS Selector Engine v2.3.4\n   * https://sizzlejs.com/\n   *\n   * Copyright JS Foundation and other contributors\n   * Released under the MIT license\n   * https://js.foundation/\n   *\n   * Date: 2019-04-08\n   */\n  function (window) {\n    var i,\n        support,\n        Expr,\n        getText,\n        isXML,\n        tokenize,\n        compile,\n        select,\n        outermostContext,\n        sortInput,\n        hasDuplicate,\n        // Local document vars\n    setDocument,\n        document,\n        docElem,\n        documentIsHTML,\n        rbuggyQSA,\n        rbuggyMatches,\n        matches,\n        contains,\n        // Instance-specific data\n    expando = \"sizzle\" + 1 * new Date(),\n        preferredDoc = window.document,\n        dirruns = 0,\n        done = 0,\n        classCache = createCache(),\n        tokenCache = createCache(),\n        compilerCache = createCache(),\n        nonnativeSelectorCache = createCache(),\n        sortOrder = function sortOrder(a, b) {\n      if (a === b) {\n        hasDuplicate = true;\n      }\n\n      return 0;\n    },\n        // Instance methods\n    hasOwn = {}.hasOwnProperty,\n        arr = [],\n        pop = arr.pop,\n        push_native = arr.push,\n        push = arr.push,\n        slice = arr.slice,\n        // Use a stripped-down indexOf as it's faster than native\n    // https://jsperf.com/thor-indexof-vs-for/5\n    indexOf = function indexOf(list, elem) {\n      var i = 0,\n          len = list.length;\n\n      for (; i < len; i++) {\n        if (list[i] === elem) {\n          return i;\n        }\n      }\n\n      return -1;\n    },\n        booleans = \"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped\",\n        // Regular expressions\n    // http://www.w3.org/TR/css3-selectors/#whitespace\n    whitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\",\n        // http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier\n    identifier = \"(?:\\\\\\\\.|[\\\\w-]|[^\\0-\\\\xa0])+\",\n        // Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors\n    attributes = \"\\\\[\" + whitespace + \"*(\" + identifier + \")(?:\" + whitespace + // Operator (capture 2)\n    \"*([*^$|!~]?=)\" + whitespace + // \"Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]\"\n    \"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\" + identifier + \"))|)\" + whitespace + \"*\\\\]\",\n        pseudos = \":(\" + identifier + \")(?:\\\\((\" + // To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:\n    // 1. quoted (capture 3; capture 4 or capture 5)\n    \"('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|\" + // 2. simple (capture 6)\n    \"((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\" + attributes + \")*)|\" + // 3. anything else (capture 2)\n    \".*\" + \")\\\\)|)\",\n        // Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter\n    rwhitespace = new RegExp(whitespace + \"+\", \"g\"),\n        rtrim = new RegExp(\"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" + whitespace + \"+$\", \"g\"),\n        rcomma = new RegExp(\"^\" + whitespace + \"*,\" + whitespace + \"*\"),\n        rcombinators = new RegExp(\"^\" + whitespace + \"*([>+~]|\" + whitespace + \")\" + whitespace + \"*\"),\n        rdescend = new RegExp(whitespace + \"|>\"),\n        rpseudo = new RegExp(pseudos),\n        ridentifier = new RegExp(\"^\" + identifier + \"$\"),\n        matchExpr = {\n      \"ID\": new RegExp(\"^#(\" + identifier + \")\"),\n      \"CLASS\": new RegExp(\"^\\\\.(\" + identifier + \")\"),\n      \"TAG\": new RegExp(\"^(\" + identifier + \"|[*])\"),\n      \"ATTR\": new RegExp(\"^\" + attributes),\n      \"PSEUDO\": new RegExp(\"^\" + pseudos),\n      \"CHILD\": new RegExp(\"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\" + whitespace + \"*(even|odd|(([+-]|)(\\\\d*)n|)\" + whitespace + \"*(?:([+-]|)\" + whitespace + \"*(\\\\d+)|))\" + whitespace + \"*\\\\)|)\", \"i\"),\n      \"bool\": new RegExp(\"^(?:\" + booleans + \")$\", \"i\"),\n      // For use in libraries implementing .is()\n      // We use this for POS matching in `select`\n      \"needsContext\": new RegExp(\"^\" + whitespace + \"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\" + whitespace + \"*((?:-\\\\d)?\\\\d*)\" + whitespace + \"*\\\\)|)(?=[^-]|$)\", \"i\")\n    },\n        rhtml = /HTML$/i,\n        rinputs = /^(?:input|select|textarea|button)$/i,\n        rheader = /^h\\d$/i,\n        rnative = /^[^{]+\\{\\s*\\[native \\w/,\n        // Easily-parseable/retrievable ID or TAG or CLASS selectors\n    rquickExpr = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,\n        rsibling = /[+~]/,\n        // CSS escapes\n    // http://www.w3.org/TR/CSS21/syndata.html#escaped-characters\n    runescape = new RegExp(\"\\\\\\\\([\\\\da-f]{1,6}\" + whitespace + \"?|(\" + whitespace + \")|.)\", \"ig\"),\n        funescape = function funescape(_, escaped, escapedWhitespace) {\n      var high = \"0x\" + escaped - 0x10000; // NaN means non-codepoint\n      // Support: Firefox<24\n      // Workaround erroneous numeric interpretation of +\"0x\"\n\n      return high !== high || escapedWhitespace ? escaped : high < 0 ? // BMP codepoint\n      String.fromCharCode(high + 0x10000) : // Supplemental Plane codepoint (surrogate pair)\n      String.fromCharCode(high >> 10 | 0xD800, high & 0x3FF | 0xDC00);\n    },\n        // CSS string/identifier serialization\n    // https://drafts.csswg.org/cssom/#common-serializing-idioms\n    rcssescape = /([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\0-\\x1f\\x7f-\\uFFFF\\w-]/g,\n        fcssescape = function fcssescape(ch, asCodePoint) {\n      if (asCodePoint) {\n        // U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER\n        if (ch === \"\\0\") {\n          return \"\\uFFFD\";\n        } // Control characters and (dependent upon position) numbers get escaped as code points\n\n\n        return ch.slice(0, -1) + \"\\\\\" + ch.charCodeAt(ch.length - 1).toString(16) + \" \";\n      } // Other potentially-special ASCII characters get backslash-escaped\n\n\n      return \"\\\\\" + ch;\n    },\n        // Used for iframes\n    // See setDocument()\n    // Removing the function wrapper causes a \"Permission Denied\"\n    // error in IE\n    unloadHandler = function unloadHandler() {\n      setDocument();\n    },\n        inDisabledFieldset = addCombinator(function (elem) {\n      return elem.disabled === true && elem.nodeName.toLowerCase() === \"fieldset\";\n    }, {\n      dir: \"parentNode\",\n      next: \"legend\"\n    }); // Optimize for push.apply( _, NodeList )\n\n\n    try {\n      push.apply(arr = slice.call(preferredDoc.childNodes), preferredDoc.childNodes); // Support: Android<4.0\n      // Detect silently failing push.apply\n\n      arr[preferredDoc.childNodes.length].nodeType;\n    } catch (e) {\n      push = {\n        apply: arr.length ? // Leverage slice if possible\n        function (target, els) {\n          push_native.apply(target, slice.call(els));\n        } : // Support: IE<9\n        // Otherwise append directly\n        function (target, els) {\n          var j = target.length,\n              i = 0; // Can't trust NodeList.length\n\n          while (target[j++] = els[i++]) {}\n\n          target.length = j - 1;\n        }\n      };\n    }\n\n    function Sizzle(selector, context, results, seed) {\n      var m,\n          i,\n          elem,\n          nid,\n          match,\n          groups,\n          newSelector,\n          newContext = context && context.ownerDocument,\n          // nodeType defaults to 9, since context defaults to document\n      nodeType = context ? context.nodeType : 9;\n      results = results || []; // Return early from calls with invalid selector or context\n\n      if (typeof selector !== \"string\" || !selector || nodeType !== 1 && nodeType !== 9 && nodeType !== 11) {\n        return results;\n      } // Try to shortcut find operations (as opposed to filters) in HTML documents\n\n\n      if (!seed) {\n        if ((context ? context.ownerDocument || context : preferredDoc) !== document) {\n          setDocument(context);\n        }\n\n        context = context || document;\n\n        if (documentIsHTML) {\n          // If the selector is sufficiently simple, try using a \"get*By*\" DOM method\n          // (excepting DocumentFragment context, where the methods don't exist)\n          if (nodeType !== 11 && (match = rquickExpr.exec(selector))) {\n            // ID selector\n            if (m = match[1]) {\n              // Document context\n              if (nodeType === 9) {\n                if (elem = context.getElementById(m)) {\n                  // Support: IE, Opera, Webkit\n                  // TODO: identify versions\n                  // getElementById can match elements by name instead of ID\n                  if (elem.id === m) {\n                    results.push(elem);\n                    return results;\n                  }\n                } else {\n                  return results;\n                } // Element context\n\n              } else {\n                // Support: IE, Opera, Webkit\n                // TODO: identify versions\n                // getElementById can match elements by name instead of ID\n                if (newContext && (elem = newContext.getElementById(m)) && contains(context, elem) && elem.id === m) {\n                  results.push(elem);\n                  return results;\n                }\n              } // Type selector\n\n            } else if (match[2]) {\n              push.apply(results, context.getElementsByTagName(selector));\n              return results; // Class selector\n            } else if ((m = match[3]) && support.getElementsByClassName && context.getElementsByClassName) {\n              push.apply(results, context.getElementsByClassName(m));\n              return results;\n            }\n          } // Take advantage of querySelectorAll\n\n\n          if (support.qsa && !nonnativeSelectorCache[selector + \" \"] && (!rbuggyQSA || !rbuggyQSA.test(selector)) && ( // Support: IE 8 only\n          // Exclude object elements\n          nodeType !== 1 || context.nodeName.toLowerCase() !== \"object\")) {\n            newSelector = selector;\n            newContext = context; // qSA considers elements outside a scoping root when evaluating child or\n            // descendant combinators, which is not what we want.\n            // In such cases, we work around the behavior by prefixing every selector in the\n            // list with an ID selector referencing the scope context.\n            // Thanks to Andrew Dupont for this technique.\n\n            if (nodeType === 1 && rdescend.test(selector)) {\n              // Capture the context ID, setting it first if necessary\n              if (nid = context.getAttribute(\"id\")) {\n                nid = nid.replace(rcssescape, fcssescape);\n              } else {\n                context.setAttribute(\"id\", nid = expando);\n              } // Prefix every selector in the list\n\n\n              groups = tokenize(selector);\n              i = groups.length;\n\n              while (i--) {\n                groups[i] = \"#\" + nid + \" \" + toSelector(groups[i]);\n              }\n\n              newSelector = groups.join(\",\"); // Expand context for sibling selectors\n\n              newContext = rsibling.test(selector) && testContext(context.parentNode) || context;\n            }\n\n            try {\n              push.apply(results, newContext.querySelectorAll(newSelector));\n              return results;\n            } catch (qsaError) {\n              nonnativeSelectorCache(selector, true);\n            } finally {\n              if (nid === expando) {\n                context.removeAttribute(\"id\");\n              }\n            }\n          }\n        }\n      } // All others\n\n\n      return select(selector.replace(rtrim, \"$1\"), context, results, seed);\n    }\n    /**\n     * Create key-value caches of limited size\n     * @returns {function(string, object)} Returns the Object data after storing it on itself with\n     *\tproperty name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)\n     *\tdeleting the oldest entry\n     */\n\n\n    function createCache() {\n      var keys = [];\n\n      function cache(key, value) {\n        // Use (key + \" \") to avoid collision with native prototype properties (see Issue #157)\n        if (keys.push(key + \" \") > Expr.cacheLength) {\n          // Only keep the most recent entries\n          delete cache[keys.shift()];\n        }\n\n        return cache[key + \" \"] = value;\n      }\n\n      return cache;\n    }\n    /**\n     * Mark a function for special use by Sizzle\n     * @param {Function} fn The function to mark\n     */\n\n\n    function markFunction(fn) {\n      fn[expando] = true;\n      return fn;\n    }\n    /**\n     * Support testing using an element\n     * @param {Function} fn Passed the created element and returns a boolean result\n     */\n\n\n    function assert(fn) {\n      var el = document.createElement(\"fieldset\");\n\n      try {\n        return !!fn(el);\n      } catch (e) {\n        return false;\n      } finally {\n        // Remove from its parent by default\n        if (el.parentNode) {\n          el.parentNode.removeChild(el);\n        } // release memory in IE\n\n\n        el = null;\n      }\n    }\n    /**\n     * Adds the same handler for all of the specified attrs\n     * @param {String} attrs Pipe-separated list of attributes\n     * @param {Function} handler The method that will be applied\n     */\n\n\n    function addHandle(attrs, handler) {\n      var arr = attrs.split(\"|\"),\n          i = arr.length;\n\n      while (i--) {\n        Expr.attrHandle[arr[i]] = handler;\n      }\n    }\n    /**\n     * Checks document order of two siblings\n     * @param {Element} a\n     * @param {Element} b\n     * @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b\n     */\n\n\n    function siblingCheck(a, b) {\n      var cur = b && a,\n          diff = cur && a.nodeType === 1 && b.nodeType === 1 && a.sourceIndex - b.sourceIndex; // Use IE sourceIndex if available on both nodes\n\n      if (diff) {\n        return diff;\n      } // Check if b follows a\n\n\n      if (cur) {\n        while (cur = cur.nextSibling) {\n          if (cur === b) {\n            return -1;\n          }\n        }\n      }\n\n      return a ? 1 : -1;\n    }\n    /**\n     * Returns a function to use in pseudos for input types\n     * @param {String} type\n     */\n\n\n    function createInputPseudo(type) {\n      return function (elem) {\n        var name = elem.nodeName.toLowerCase();\n        return name === \"input\" && elem.type === type;\n      };\n    }\n    /**\n     * Returns a function to use in pseudos for buttons\n     * @param {String} type\n     */\n\n\n    function createButtonPseudo(type) {\n      return function (elem) {\n        var name = elem.nodeName.toLowerCase();\n        return (name === \"input\" || name === \"button\") && elem.type === type;\n      };\n    }\n    /**\n     * Returns a function to use in pseudos for :enabled/:disabled\n     * @param {Boolean} disabled true for :disabled; false for :enabled\n     */\n\n\n    function createDisabledPseudo(disabled) {\n      // Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable\n      return function (elem) {\n        // Only certain elements can match :enabled or :disabled\n        // https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled\n        // https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled\n        if (\"form\" in elem) {\n          // Check for inherited disabledness on relevant non-disabled elements:\n          // * listed form-associated elements in a disabled fieldset\n          //   https://html.spec.whatwg.org/multipage/forms.html#category-listed\n          //   https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled\n          // * option elements in a disabled optgroup\n          //   https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled\n          // All such elements have a \"form\" property.\n          if (elem.parentNode && elem.disabled === false) {\n            // Option elements defer to a parent optgroup if present\n            if (\"label\" in elem) {\n              if (\"label\" in elem.parentNode) {\n                return elem.parentNode.disabled === disabled;\n              } else {\n                return elem.disabled === disabled;\n              }\n            } // Support: IE 6 - 11\n            // Use the isDisabled shortcut property to check for disabled fieldset ancestors\n\n\n            return elem.isDisabled === disabled || // Where there is no isDisabled, check manually\n\n            /* jshint -W018 */\n            elem.isDisabled !== !disabled && inDisabledFieldset(elem) === disabled;\n          }\n\n          return elem.disabled === disabled; // Try to winnow out elements that can't be disabled before trusting the disabled property.\n          // Some victims get caught in our net (label, legend, menu, track), but it shouldn't\n          // even exist on them, let alone have a boolean value.\n        } else if (\"label\" in elem) {\n          return elem.disabled === disabled;\n        } // Remaining elements are neither :enabled nor :disabled\n\n\n        return false;\n      };\n    }\n    /**\n     * Returns a function to use in pseudos for positionals\n     * @param {Function} fn\n     */\n\n\n    function createPositionalPseudo(fn) {\n      return markFunction(function (argument) {\n        argument = +argument;\n        return markFunction(function (seed, matches) {\n          var j,\n              matchIndexes = fn([], seed.length, argument),\n              i = matchIndexes.length; // Match elements found at the specified indexes\n\n          while (i--) {\n            if (seed[j = matchIndexes[i]]) {\n              seed[j] = !(matches[j] = seed[j]);\n            }\n          }\n        });\n      });\n    }\n    /**\n     * Checks a node for validity as a Sizzle context\n     * @param {Element|Object=} context\n     * @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value\n     */\n\n\n    function testContext(context) {\n      return context && typeof context.getElementsByTagName !== \"undefined\" && context;\n    } // Expose support vars for convenience\n\n\n    support = Sizzle.support = {};\n    /**\n     * Detects XML nodes\n     * @param {Element|Object} elem An element or a document\n     * @returns {Boolean} True iff elem is a non-HTML XML node\n     */\n\n    isXML = Sizzle.isXML = function (elem) {\n      var namespace = elem.namespaceURI,\n          docElem = (elem.ownerDocument || elem).documentElement; // Support: IE <=8\n      // Assume HTML when documentElement doesn't yet exist, such as inside loading iframes\n      // https://bugs.jquery.com/ticket/4833\n\n      return !rhtml.test(namespace || docElem && docElem.nodeName || \"HTML\");\n    };\n    /**\n     * Sets document-related variables once based on the current document\n     * @param {Element|Object} [doc] An element or document object to use to set the document\n     * @returns {Object} Returns the current document\n     */\n\n\n    setDocument = Sizzle.setDocument = function (node) {\n      var hasCompare,\n          subWindow,\n          doc = node ? node.ownerDocument || node : preferredDoc; // Return early if doc is invalid or already selected\n\n      if (doc === document || doc.nodeType !== 9 || !doc.documentElement) {\n        return document;\n      } // Update global variables\n\n\n      document = doc;\n      docElem = document.documentElement;\n      documentIsHTML = !isXML(document); // Support: IE 9-11, Edge\n      // Accessing iframe documents after unload throws \"permission denied\" errors (jQuery #13936)\n\n      if (preferredDoc !== document && (subWindow = document.defaultView) && subWindow.top !== subWindow) {\n        // Support: IE 11, Edge\n        if (subWindow.addEventListener) {\n          subWindow.addEventListener(\"unload\", unloadHandler, false); // Support: IE 9 - 10 only\n        } else if (subWindow.attachEvent) {\n          subWindow.attachEvent(\"onunload\", unloadHandler);\n        }\n      }\n      /* Attributes\n      ---------------------------------------------------------------------- */\n      // Support: IE<8\n      // Verify that getAttribute really returns attributes and not properties\n      // (excepting IE8 booleans)\n\n\n      support.attributes = assert(function (el) {\n        el.className = \"i\";\n        return !el.getAttribute(\"className\");\n      });\n      /* getElement(s)By*\n      ---------------------------------------------------------------------- */\n      // Check if getElementsByTagName(\"*\") returns only elements\n\n      support.getElementsByTagName = assert(function (el) {\n        el.appendChild(document.createComment(\"\"));\n        return !el.getElementsByTagName(\"*\").length;\n      }); // Support: IE<9\n\n      support.getElementsByClassName = rnative.test(document.getElementsByClassName); // Support: IE<10\n      // Check if getElementById returns elements by name\n      // The broken getElementById methods don't pick up programmatically-set names,\n      // so use a roundabout getElementsByName test\n\n      support.getById = assert(function (el) {\n        docElem.appendChild(el).id = expando;\n        return !document.getElementsByName || !document.getElementsByName(expando).length;\n      }); // ID filter and find\n\n      if (support.getById) {\n        Expr.filter[\"ID\"] = function (id) {\n          var attrId = id.replace(runescape, funescape);\n          return function (elem) {\n            return elem.getAttribute(\"id\") === attrId;\n          };\n        };\n\n        Expr.find[\"ID\"] = function (id, context) {\n          if (typeof context.getElementById !== \"undefined\" && documentIsHTML) {\n            var elem = context.getElementById(id);\n            return elem ? [elem] : [];\n          }\n        };\n      } else {\n        Expr.filter[\"ID\"] = function (id) {\n          var attrId = id.replace(runescape, funescape);\n          return function (elem) {\n            var node = typeof elem.getAttributeNode !== \"undefined\" && elem.getAttributeNode(\"id\");\n            return node && node.value === attrId;\n          };\n        }; // Support: IE 6 - 7 only\n        // getElementById is not reliable as a find shortcut\n\n\n        Expr.find[\"ID\"] = function (id, context) {\n          if (typeof context.getElementById !== \"undefined\" && documentIsHTML) {\n            var node,\n                i,\n                elems,\n                elem = context.getElementById(id);\n\n            if (elem) {\n              // Verify the id attribute\n              node = elem.getAttributeNode(\"id\");\n\n              if (node && node.value === id) {\n                return [elem];\n              } // Fall back on getElementsByName\n\n\n              elems = context.getElementsByName(id);\n              i = 0;\n\n              while (elem = elems[i++]) {\n                node = elem.getAttributeNode(\"id\");\n\n                if (node && node.value === id) {\n                  return [elem];\n                }\n              }\n            }\n\n            return [];\n          }\n        };\n      } // Tag\n\n\n      Expr.find[\"TAG\"] = support.getElementsByTagName ? function (tag, context) {\n        if (typeof context.getElementsByTagName !== \"undefined\") {\n          return context.getElementsByTagName(tag); // DocumentFragment nodes don't have gEBTN\n        } else if (support.qsa) {\n          return context.querySelectorAll(tag);\n        }\n      } : function (tag, context) {\n        var elem,\n            tmp = [],\n            i = 0,\n            // By happy coincidence, a (broken) gEBTN appears on DocumentFragment nodes too\n        results = context.getElementsByTagName(tag); // Filter out possible comments\n\n        if (tag === \"*\") {\n          while (elem = results[i++]) {\n            if (elem.nodeType === 1) {\n              tmp.push(elem);\n            }\n          }\n\n          return tmp;\n        }\n\n        return results;\n      }; // Class\n\n      Expr.find[\"CLASS\"] = support.getElementsByClassName && function (className, context) {\n        if (typeof context.getElementsByClassName !== \"undefined\" && documentIsHTML) {\n          return context.getElementsByClassName(className);\n        }\n      };\n      /* QSA/matchesSelector\n      ---------------------------------------------------------------------- */\n      // QSA and matchesSelector support\n      // matchesSelector(:active) reports false when true (IE9/Opera 11.5)\n\n\n      rbuggyMatches = []; // qSa(:focus) reports false when true (Chrome 21)\n      // We allow this because of a bug in IE8/9 that throws an error\n      // whenever `document.activeElement` is accessed on an iframe\n      // So, we allow :focus to pass through QSA all the time to avoid the IE error\n      // See https://bugs.jquery.com/ticket/13378\n\n      rbuggyQSA = [];\n\n      if (support.qsa = rnative.test(document.querySelectorAll)) {\n        // Build QSA regex\n        // Regex strategy adopted from Diego Perini\n        assert(function (el) {\n          // Select is set to empty string on purpose\n          // This is to test IE's treatment of not explicitly\n          // setting a boolean content attribute,\n          // since its presence should be enough\n          // https://bugs.jquery.com/ticket/12359\n          docElem.appendChild(el).innerHTML = \"<a id='\" + expando + \"'></a>\" + \"<select id='\" + expando + \"-\\r\\\\' msallowcapture=''>\" + \"<option selected=''></option></select>\"; // Support: IE8, Opera 11-12.16\n          // Nothing should be selected when empty strings follow ^= or $= or *=\n          // The test attribute must be unknown in Opera but \"safe\" for WinRT\n          // https://msdn.microsoft.com/en-us/library/ie/hh465388.aspx#attribute_section\n\n          if (el.querySelectorAll(\"[msallowcapture^='']\").length) {\n            rbuggyQSA.push(\"[*^$]=\" + whitespace + \"*(?:''|\\\"\\\")\");\n          } // Support: IE8\n          // Boolean attributes and \"value\" are not treated correctly\n\n\n          if (!el.querySelectorAll(\"[selected]\").length) {\n            rbuggyQSA.push(\"\\\\[\" + whitespace + \"*(?:value|\" + booleans + \")\");\n          } // Support: Chrome<29, Android<4.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+\n\n\n          if (!el.querySelectorAll(\"[id~=\" + expando + \"-]\").length) {\n            rbuggyQSA.push(\"~=\");\n          } // Webkit/Opera - :checked should return selected option elements\n          // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n          // IE8 throws error here and will not see later tests\n\n\n          if (!el.querySelectorAll(\":checked\").length) {\n            rbuggyQSA.push(\":checked\");\n          } // Support: Safari 8+, iOS 8+\n          // https://bugs.webkit.org/show_bug.cgi?id=136851\n          // In-page `selector#id sibling-combinator selector` fails\n\n\n          if (!el.querySelectorAll(\"a#\" + expando + \"+*\").length) {\n            rbuggyQSA.push(\".#.+[+~]\");\n          }\n        });\n        assert(function (el) {\n          el.innerHTML = \"<a href='' disabled='disabled'></a>\" + \"<select disabled='disabled'><option/></select>\"; // Support: Windows 8 Native Apps\n          // The type and name attributes are restricted during .innerHTML assignment\n\n          var input = document.createElement(\"input\");\n          input.setAttribute(\"type\", \"hidden\");\n          el.appendChild(input).setAttribute(\"name\", \"D\"); // Support: IE8\n          // Enforce case-sensitivity of name attribute\n\n          if (el.querySelectorAll(\"[name=d]\").length) {\n            rbuggyQSA.push(\"name\" + whitespace + \"*[*^$|!~]?=\");\n          } // FF 3.5 - :enabled/:disabled and hidden elements (hidden elements are still enabled)\n          // IE8 throws error here and will not see later tests\n\n\n          if (el.querySelectorAll(\":enabled\").length !== 2) {\n            rbuggyQSA.push(\":enabled\", \":disabled\");\n          } // Support: IE9-11+\n          // IE's :disabled selector does not pick up the children of disabled fieldsets\n\n\n          docElem.appendChild(el).disabled = true;\n\n          if (el.querySelectorAll(\":disabled\").length !== 2) {\n            rbuggyQSA.push(\":enabled\", \":disabled\");\n          } // Opera 10-11 does not throw on post-comma invalid pseudos\n\n\n          el.querySelectorAll(\"*,:x\");\n          rbuggyQSA.push(\",.*:\");\n        });\n      }\n\n      if (support.matchesSelector = rnative.test(matches = docElem.matches || docElem.webkitMatchesSelector || docElem.mozMatchesSelector || docElem.oMatchesSelector || docElem.msMatchesSelector)) {\n        assert(function (el) {\n          // Check to see if it's possible to do matchesSelector\n          // on a disconnected node (IE 9)\n          support.disconnectedMatch = matches.call(el, \"*\"); // This should fail with an exception\n          // Gecko does not error, returns false instead\n\n          matches.call(el, \"[s!='']:x\");\n          rbuggyMatches.push(\"!=\", pseudos);\n        });\n      }\n\n      rbuggyQSA = rbuggyQSA.length && new RegExp(rbuggyQSA.join(\"|\"));\n      rbuggyMatches = rbuggyMatches.length && new RegExp(rbuggyMatches.join(\"|\"));\n      /* Contains\n      ---------------------------------------------------------------------- */\n\n      hasCompare = rnative.test(docElem.compareDocumentPosition); // Element contains another\n      // Purposefully self-exclusive\n      // As in, an element does not contain itself\n\n      contains = hasCompare || rnative.test(docElem.contains) ? function (a, b) {\n        var adown = a.nodeType === 9 ? a.documentElement : a,\n            bup = b && b.parentNode;\n        return a === bup || !!(bup && bup.nodeType === 1 && (adown.contains ? adown.contains(bup) : a.compareDocumentPosition && a.compareDocumentPosition(bup) & 16));\n      } : function (a, b) {\n        if (b) {\n          while (b = b.parentNode) {\n            if (b === a) {\n              return true;\n            }\n          }\n        }\n\n        return false;\n      };\n      /* Sorting\n      ---------------------------------------------------------------------- */\n      // Document order sorting\n\n      sortOrder = hasCompare ? function (a, b) {\n        // Flag for duplicate removal\n        if (a === b) {\n          hasDuplicate = true;\n          return 0;\n        } // Sort on method existence if only one input has compareDocumentPosition\n\n\n        var compare = !a.compareDocumentPosition - !b.compareDocumentPosition;\n\n        if (compare) {\n          return compare;\n        } // Calculate position if both inputs belong to the same document\n\n\n        compare = (a.ownerDocument || a) === (b.ownerDocument || b) ? a.compareDocumentPosition(b) : // Otherwise we know they are disconnected\n        1; // Disconnected nodes\n\n        if (compare & 1 || !support.sortDetached && b.compareDocumentPosition(a) === compare) {\n          // Choose the first element that is related to our preferred document\n          if (a === document || a.ownerDocument === preferredDoc && contains(preferredDoc, a)) {\n            return -1;\n          }\n\n          if (b === document || b.ownerDocument === preferredDoc && contains(preferredDoc, b)) {\n            return 1;\n          } // Maintain original order\n\n\n          return sortInput ? indexOf(sortInput, a) - indexOf(sortInput, b) : 0;\n        }\n\n        return compare & 4 ? -1 : 1;\n      } : function (a, b) {\n        // Exit early if the nodes are identical\n        if (a === b) {\n          hasDuplicate = true;\n          return 0;\n        }\n\n        var cur,\n            i = 0,\n            aup = a.parentNode,\n            bup = b.parentNode,\n            ap = [a],\n            bp = [b]; // Parentless nodes are either documents or disconnected\n\n        if (!aup || !bup) {\n          return a === document ? -1 : b === document ? 1 : aup ? -1 : bup ? 1 : sortInput ? indexOf(sortInput, a) - indexOf(sortInput, b) : 0; // If the nodes are siblings, we can do a quick check\n        } else if (aup === bup) {\n          return siblingCheck(a, b);\n        } // Otherwise we need full lists of their ancestors for comparison\n\n\n        cur = a;\n\n        while (cur = cur.parentNode) {\n          ap.unshift(cur);\n        }\n\n        cur = b;\n\n        while (cur = cur.parentNode) {\n          bp.unshift(cur);\n        } // Walk down the tree looking for a discrepancy\n\n\n        while (ap[i] === bp[i]) {\n          i++;\n        }\n\n        return i ? // Do a sibling check if the nodes have a common ancestor\n        siblingCheck(ap[i], bp[i]) : // Otherwise nodes in our document sort first\n        ap[i] === preferredDoc ? -1 : bp[i] === preferredDoc ? 1 : 0;\n      };\n      return document;\n    };\n\n    Sizzle.matches = function (expr, elements) {\n      return Sizzle(expr, null, null, elements);\n    };\n\n    Sizzle.matchesSelector = function (elem, expr) {\n      // Set document vars if needed\n      if ((elem.ownerDocument || elem) !== document) {\n        setDocument(elem);\n      }\n\n      if (support.matchesSelector && documentIsHTML && !nonnativeSelectorCache[expr + \" \"] && (!rbuggyMatches || !rbuggyMatches.test(expr)) && (!rbuggyQSA || !rbuggyQSA.test(expr))) {\n        try {\n          var ret = matches.call(elem, expr); // IE 9's matchesSelector returns false on disconnected nodes\n\n          if (ret || support.disconnectedMatch || // As well, disconnected nodes are said to be in a document\n          // fragment in IE 9\n          elem.document && elem.document.nodeType !== 11) {\n            return ret;\n          }\n        } catch (e) {\n          nonnativeSelectorCache(expr, true);\n        }\n      }\n\n      return Sizzle(expr, document, null, [elem]).length > 0;\n    };\n\n    Sizzle.contains = function (context, elem) {\n      // Set document vars if needed\n      if ((context.ownerDocument || context) !== document) {\n        setDocument(context);\n      }\n\n      return contains(context, elem);\n    };\n\n    Sizzle.attr = function (elem, name) {\n      // Set document vars if needed\n      if ((elem.ownerDocument || elem) !== document) {\n        setDocument(elem);\n      }\n\n      var fn = Expr.attrHandle[name.toLowerCase()],\n          // Don't get fooled by Object.prototype properties (jQuery #13807)\n      val = fn && hasOwn.call(Expr.attrHandle, name.toLowerCase()) ? fn(elem, name, !documentIsHTML) : undefined;\n      return val !== undefined ? val : support.attributes || !documentIsHTML ? elem.getAttribute(name) : (val = elem.getAttributeNode(name)) && val.specified ? val.value : null;\n    };\n\n    Sizzle.escape = function (sel) {\n      return (sel + \"\").replace(rcssescape, fcssescape);\n    };\n\n    Sizzle.error = function (msg) {\n      throw new Error(\"Syntax error, unrecognized expression: \" + msg);\n    };\n    /**\n     * Document sorting and removing duplicates\n     * @param {ArrayLike} results\n     */\n\n\n    Sizzle.uniqueSort = function (results) {\n      var elem,\n          duplicates = [],\n          j = 0,\n          i = 0; // Unless we *know* we can detect duplicates, assume their presence\n\n      hasDuplicate = !support.detectDuplicates;\n      sortInput = !support.sortStable && results.slice(0);\n      results.sort(sortOrder);\n\n      if (hasDuplicate) {\n        while (elem = results[i++]) {\n          if (elem === results[i]) {\n            j = duplicates.push(i);\n          }\n        }\n\n        while (j--) {\n          results.splice(duplicates[j], 1);\n        }\n      } // Clear input after sorting to release objects\n      // See https://github.com/jquery/sizzle/pull/225\n\n\n      sortInput = null;\n      return results;\n    };\n    /**\n     * Utility function for retrieving the text value of an array of DOM nodes\n     * @param {Array|Element} elem\n     */\n\n\n    getText = Sizzle.getText = function (elem) {\n      var node,\n          ret = \"\",\n          i = 0,\n          nodeType = elem.nodeType;\n\n      if (!nodeType) {\n        // If no nodeType, this is expected to be an array\n        while (node = elem[i++]) {\n          // Do not traverse comment nodes\n          ret += getText(node);\n        }\n      } else if (nodeType === 1 || nodeType === 9 || nodeType === 11) {\n        // Use textContent for elements\n        // innerText usage removed for consistency of new lines (jQuery #11153)\n        if (typeof elem.textContent === \"string\") {\n          return elem.textContent;\n        } else {\n          // Traverse its children\n          for (elem = elem.firstChild; elem; elem = elem.nextSibling) {\n            ret += getText(elem);\n          }\n        }\n      } else if (nodeType === 3 || nodeType === 4) {\n        return elem.nodeValue;\n      } // Do not include comment or processing instruction nodes\n\n\n      return ret;\n    };\n\n    Expr = Sizzle.selectors = {\n      // Can be adjusted by the user\n      cacheLength: 50,\n      createPseudo: markFunction,\n      match: matchExpr,\n      attrHandle: {},\n      find: {},\n      relative: {\n        \">\": {\n          dir: \"parentNode\",\n          first: true\n        },\n        \" \": {\n          dir: \"parentNode\"\n        },\n        \"+\": {\n          dir: \"previousSibling\",\n          first: true\n        },\n        \"~\": {\n          dir: \"previousSibling\"\n        }\n      },\n      preFilter: {\n        \"ATTR\": function ATTR(match) {\n          match[1] = match[1].replace(runescape, funescape); // Move the given value to match[3] whether quoted or unquoted\n\n          match[3] = (match[3] || match[4] || match[5] || \"\").replace(runescape, funescape);\n\n          if (match[2] === \"~=\") {\n            match[3] = \" \" + match[3] + \" \";\n          }\n\n          return match.slice(0, 4);\n        },\n        \"CHILD\": function CHILD(match) {\n          /* matches from matchExpr[\"CHILD\"]\n          \t1 type (only|nth|...)\n          \t2 what (child|of-type)\n          \t3 argument (even|odd|\\d*|\\d*n([+-]\\d+)?|...)\n          \t4 xn-component of xn+y argument ([+-]?\\d*n|)\n          \t5 sign of xn-component\n          \t6 x of xn-component\n          \t7 sign of y-component\n          \t8 y of y-component\n          */\n          match[1] = match[1].toLowerCase();\n\n          if (match[1].slice(0, 3) === \"nth\") {\n            // nth-* requires argument\n            if (!match[3]) {\n              Sizzle.error(match[0]);\n            } // numeric x and y parameters for Expr.filter.CHILD\n            // remember that false/true cast respectively to 0/1\n\n\n            match[4] = +(match[4] ? match[5] + (match[6] || 1) : 2 * (match[3] === \"even\" || match[3] === \"odd\"));\n            match[5] = +(match[7] + match[8] || match[3] === \"odd\"); // other types prohibit arguments\n          } else if (match[3]) {\n            Sizzle.error(match[0]);\n          }\n\n          return match;\n        },\n        \"PSEUDO\": function PSEUDO(match) {\n          var excess,\n              unquoted = !match[6] && match[2];\n\n          if (matchExpr[\"CHILD\"].test(match[0])) {\n            return null;\n          } // Accept quoted arguments as-is\n\n\n          if (match[3]) {\n            match[2] = match[4] || match[5] || \"\"; // Strip excess characters from unquoted arguments\n          } else if (unquoted && rpseudo.test(unquoted) && ( // Get excess from tokenize (recursively)\n          excess = tokenize(unquoted, true)) && ( // advance to the next closing parenthesis\n          excess = unquoted.indexOf(\")\", unquoted.length - excess) - unquoted.length)) {\n            // excess is a negative index\n            match[0] = match[0].slice(0, excess);\n            match[2] = unquoted.slice(0, excess);\n          } // Return only captures needed by the pseudo filter method (type and argument)\n\n\n          return match.slice(0, 3);\n        }\n      },\n      filter: {\n        \"TAG\": function TAG(nodeNameSelector) {\n          var nodeName = nodeNameSelector.replace(runescape, funescape).toLowerCase();\n          return nodeNameSelector === \"*\" ? function () {\n            return true;\n          } : function (elem) {\n            return elem.nodeName && elem.nodeName.toLowerCase() === nodeName;\n          };\n        },\n        \"CLASS\": function CLASS(className) {\n          var pattern = classCache[className + \" \"];\n          return pattern || (pattern = new RegExp(\"(^|\" + whitespace + \")\" + className + \"(\" + whitespace + \"|$)\")) && classCache(className, function (elem) {\n            return pattern.test(typeof elem.className === \"string\" && elem.className || typeof elem.getAttribute !== \"undefined\" && elem.getAttribute(\"class\") || \"\");\n          });\n        },\n        \"ATTR\": function ATTR(name, operator, check) {\n          return function (elem) {\n            var result = Sizzle.attr(elem, name);\n\n            if (result == null) {\n              return operator === \"!=\";\n            }\n\n            if (!operator) {\n              return true;\n            }\n\n            result += \"\";\n            return operator === \"=\" ? result === check : operator === \"!=\" ? result !== check : operator === \"^=\" ? check && result.indexOf(check) === 0 : operator === \"*=\" ? check && result.indexOf(check) > -1 : operator === \"$=\" ? check && result.slice(-check.length) === check : operator === \"~=\" ? (\" \" + result.replace(rwhitespace, \" \") + \" \").indexOf(check) > -1 : operator === \"|=\" ? result === check || result.slice(0, check.length + 1) === check + \"-\" : false;\n          };\n        },\n        \"CHILD\": function CHILD(type, what, argument, first, last) {\n          var simple = type.slice(0, 3) !== \"nth\",\n              forward = type.slice(-4) !== \"last\",\n              ofType = what === \"of-type\";\n          return first === 1 && last === 0 ? // Shortcut for :nth-*(n)\n          function (elem) {\n            return !!elem.parentNode;\n          } : function (elem, context, xml) {\n            var cache,\n                uniqueCache,\n                outerCache,\n                node,\n                nodeIndex,\n                start,\n                dir = simple !== forward ? \"nextSibling\" : \"previousSibling\",\n                parent = elem.parentNode,\n                name = ofType && elem.nodeName.toLowerCase(),\n                useCache = !xml && !ofType,\n                diff = false;\n\n            if (parent) {\n              // :(first|last|only)-(child|of-type)\n              if (simple) {\n                while (dir) {\n                  node = elem;\n\n                  while (node = node[dir]) {\n                    if (ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1) {\n                      return false;\n                    }\n                  } // Reverse direction for :only-* (if we haven't yet done so)\n\n\n                  start = dir = type === \"only\" && !start && \"nextSibling\";\n                }\n\n                return true;\n              }\n\n              start = [forward ? parent.firstChild : parent.lastChild]; // non-xml :nth-child(...) stores cache data on `parent`\n\n              if (forward && useCache) {\n                // Seek `elem` from a previously-cached index\n                // ...in a gzip-friendly way\n                node = parent;\n                outerCache = node[expando] || (node[expando] = {}); // Support: IE <9 only\n                // Defend against cloned attroperties (jQuery gh-1709)\n\n                uniqueCache = outerCache[node.uniqueID] || (outerCache[node.uniqueID] = {});\n                cache = uniqueCache[type] || [];\n                nodeIndex = cache[0] === dirruns && cache[1];\n                diff = nodeIndex && cache[2];\n                node = nodeIndex && parent.childNodes[nodeIndex];\n\n                while (node = ++nodeIndex && node && node[dir] || ( // Fallback to seeking `elem` from the start\n                diff = nodeIndex = 0) || start.pop()) {\n                  // When found, cache indexes on `parent` and break\n                  if (node.nodeType === 1 && ++diff && node === elem) {\n                    uniqueCache[type] = [dirruns, nodeIndex, diff];\n                    break;\n                  }\n                }\n              } else {\n                // Use previously-cached element index if available\n                if (useCache) {\n                  // ...in a gzip-friendly way\n                  node = elem;\n                  outerCache = node[expando] || (node[expando] = {}); // Support: IE <9 only\n                  // Defend against cloned attroperties (jQuery gh-1709)\n\n                  uniqueCache = outerCache[node.uniqueID] || (outerCache[node.uniqueID] = {});\n                  cache = uniqueCache[type] || [];\n                  nodeIndex = cache[0] === dirruns && cache[1];\n                  diff = nodeIndex;\n                } // xml :nth-child(...)\n                // or :nth-last-child(...) or :nth(-last)?-of-type(...)\n\n\n                if (diff === false) {\n                  // Use the same loop as above to seek `elem` from the start\n                  while (node = ++nodeIndex && node && node[dir] || (diff = nodeIndex = 0) || start.pop()) {\n                    if ((ofType ? node.nodeName.toLowerCase() === name : node.nodeType === 1) && ++diff) {\n                      // Cache the index of each encountered element\n                      if (useCache) {\n                        outerCache = node[expando] || (node[expando] = {}); // Support: IE <9 only\n                        // Defend against cloned attroperties (jQuery gh-1709)\n\n                        uniqueCache = outerCache[node.uniqueID] || (outerCache[node.uniqueID] = {});\n                        uniqueCache[type] = [dirruns, diff];\n                      }\n\n                      if (node === elem) {\n                        break;\n                      }\n                    }\n                  }\n                }\n              } // Incorporate the offset, then check against cycle size\n\n\n              diff -= last;\n              return diff === first || diff % first === 0 && diff / first >= 0;\n            }\n          };\n        },\n        \"PSEUDO\": function PSEUDO(pseudo, argument) {\n          // pseudo-class names are case-insensitive\n          // http://www.w3.org/TR/selectors/#pseudo-classes\n          // Prioritize by case sensitivity in case custom pseudos are added with uppercase letters\n          // Remember that setFilters inherits from pseudos\n          var args,\n              fn = Expr.pseudos[pseudo] || Expr.setFilters[pseudo.toLowerCase()] || Sizzle.error(\"unsupported pseudo: \" + pseudo); // The user may use createPseudo to indicate that\n          // arguments are needed to create the filter function\n          // just as Sizzle does\n\n          if (fn[expando]) {\n            return fn(argument);\n          } // But maintain support for old signatures\n\n\n          if (fn.length > 1) {\n            args = [pseudo, pseudo, \"\", argument];\n            return Expr.setFilters.hasOwnProperty(pseudo.toLowerCase()) ? markFunction(function (seed, matches) {\n              var idx,\n                  matched = fn(seed, argument),\n                  i = matched.length;\n\n              while (i--) {\n                idx = indexOf(seed, matched[i]);\n                seed[idx] = !(matches[idx] = matched[i]);\n              }\n            }) : function (elem) {\n              return fn(elem, 0, args);\n            };\n          }\n\n          return fn;\n        }\n      },\n      pseudos: {\n        // Potentially complex pseudos\n        \"not\": markFunction(function (selector) {\n          // Trim the selector passed to compile\n          // to avoid treating leading and trailing\n          // spaces as combinators\n          var input = [],\n              results = [],\n              matcher = compile(selector.replace(rtrim, \"$1\"));\n          return matcher[expando] ? markFunction(function (seed, matches, context, xml) {\n            var elem,\n                unmatched = matcher(seed, null, xml, []),\n                i = seed.length; // Match elements unmatched by `matcher`\n\n            while (i--) {\n              if (elem = unmatched[i]) {\n                seed[i] = !(matches[i] = elem);\n              }\n            }\n          }) : function (elem, context, xml) {\n            input[0] = elem;\n            matcher(input, null, xml, results); // Don't keep the element (issue #299)\n\n            input[0] = null;\n            return !results.pop();\n          };\n        }),\n        \"has\": markFunction(function (selector) {\n          return function (elem) {\n            return Sizzle(selector, elem).length > 0;\n          };\n        }),\n        \"contains\": markFunction(function (text) {\n          text = text.replace(runescape, funescape);\n          return function (elem) {\n            return (elem.textContent || getText(elem)).indexOf(text) > -1;\n          };\n        }),\n        // \"Whether an element is represented by a :lang() selector\n        // is based solely on the element's language value\n        // being equal to the identifier C,\n        // or beginning with the identifier C immediately followed by \"-\".\n        // The matching of C against the element's language value is performed case-insensitively.\n        // The identifier C does not have to be a valid language name.\"\n        // http://www.w3.org/TR/selectors/#lang-pseudo\n        \"lang\": markFunction(function (lang) {\n          // lang value must be a valid identifier\n          if (!ridentifier.test(lang || \"\")) {\n            Sizzle.error(\"unsupported lang: \" + lang);\n          }\n\n          lang = lang.replace(runescape, funescape).toLowerCase();\n          return function (elem) {\n            var elemLang;\n\n            do {\n              if (elemLang = documentIsHTML ? elem.lang : elem.getAttribute(\"xml:lang\") || elem.getAttribute(\"lang\")) {\n                elemLang = elemLang.toLowerCase();\n                return elemLang === lang || elemLang.indexOf(lang + \"-\") === 0;\n              }\n            } while ((elem = elem.parentNode) && elem.nodeType === 1);\n\n            return false;\n          };\n        }),\n        // Miscellaneous\n        \"target\": function target(elem) {\n          var hash = window.location && window.location.hash;\n          return hash && hash.slice(1) === elem.id;\n        },\n        \"root\": function root(elem) {\n          return elem === docElem;\n        },\n        \"focus\": function focus(elem) {\n          return elem === document.activeElement && (!document.hasFocus || document.hasFocus()) && !!(elem.type || elem.href || ~elem.tabIndex);\n        },\n        // Boolean properties\n        \"enabled\": createDisabledPseudo(false),\n        \"disabled\": createDisabledPseudo(true),\n        \"checked\": function checked(elem) {\n          // In CSS3, :checked should return both checked and selected elements\n          // http://www.w3.org/TR/2011/REC-css3-selectors-20110929/#checked\n          var nodeName = elem.nodeName.toLowerCase();\n          return nodeName === \"input\" && !!elem.checked || nodeName === \"option\" && !!elem.selected;\n        },\n        \"selected\": function selected(elem) {\n          // Accessing this property makes selected-by-default\n          // options in Safari work properly\n          if (elem.parentNode) {\n            elem.parentNode.selectedIndex;\n          }\n\n          return elem.selected === true;\n        },\n        // Contents\n        \"empty\": function empty(elem) {\n          // http://www.w3.org/TR/selectors/#empty-pseudo\n          // :empty is negated by element (1) or content nodes (text: 3; cdata: 4; entity ref: 5),\n          //   but not by others (comment: 8; processing instruction: 7; etc.)\n          // nodeType < 6 works because attributes (2) do not appear as children\n          for (elem = elem.firstChild; elem; elem = elem.nextSibling) {\n            if (elem.nodeType < 6) {\n              return false;\n            }\n          }\n\n          return true;\n        },\n        \"parent\": function parent(elem) {\n          return !Expr.pseudos[\"empty\"](elem);\n        },\n        // Element/input types\n        \"header\": function header(elem) {\n          return rheader.test(elem.nodeName);\n        },\n        \"input\": function input(elem) {\n          return rinputs.test(elem.nodeName);\n        },\n        \"button\": function button(elem) {\n          var name = elem.nodeName.toLowerCase();\n          return name === \"input\" && elem.type === \"button\" || name === \"button\";\n        },\n        \"text\": function text(elem) {\n          var attr;\n          return elem.nodeName.toLowerCase() === \"input\" && elem.type === \"text\" && ( // Support: IE<8\n          // New HTML5 attribute values (e.g., \"search\") appear with elem.type === \"text\"\n          (attr = elem.getAttribute(\"type\")) == null || attr.toLowerCase() === \"text\");\n        },\n        // Position-in-collection\n        \"first\": createPositionalPseudo(function () {\n          return [0];\n        }),\n        \"last\": createPositionalPseudo(function (matchIndexes, length) {\n          return [length - 1];\n        }),\n        \"eq\": createPositionalPseudo(function (matchIndexes, length, argument) {\n          return [argument < 0 ? argument + length : argument];\n        }),\n        \"even\": createPositionalPseudo(function (matchIndexes, length) {\n          var i = 0;\n\n          for (; i < length; i += 2) {\n            matchIndexes.push(i);\n          }\n\n          return matchIndexes;\n        }),\n        \"odd\": createPositionalPseudo(function (matchIndexes, length) {\n          var i = 1;\n\n          for (; i < length; i += 2) {\n            matchIndexes.push(i);\n          }\n\n          return matchIndexes;\n        }),\n        \"lt\": createPositionalPseudo(function (matchIndexes, length, argument) {\n          var i = argument < 0 ? argument + length : argument > length ? length : argument;\n\n          for (; --i >= 0;) {\n            matchIndexes.push(i);\n          }\n\n          return matchIndexes;\n        }),\n        \"gt\": createPositionalPseudo(function (matchIndexes, length, argument) {\n          var i = argument < 0 ? argument + length : argument;\n\n          for (; ++i < length;) {\n            matchIndexes.push(i);\n          }\n\n          return matchIndexes;\n        })\n      }\n    };\n    Expr.pseudos[\"nth\"] = Expr.pseudos[\"eq\"]; // Add button/input type pseudos\n\n    for (i in {\n      radio: true,\n      checkbox: true,\n      file: true,\n      password: true,\n      image: true\n    }) {\n      Expr.pseudos[i] = createInputPseudo(i);\n    }\n\n    for (i in {\n      submit: true,\n      reset: true\n    }) {\n      Expr.pseudos[i] = createButtonPseudo(i);\n    } // Easy API for creating new setFilters\n\n\n    function setFilters() {}\n\n    setFilters.prototype = Expr.filters = Expr.pseudos;\n    Expr.setFilters = new setFilters();\n\n    tokenize = Sizzle.tokenize = function (selector, parseOnly) {\n      var matched,\n          match,\n          tokens,\n          type,\n          soFar,\n          groups,\n          preFilters,\n          cached = tokenCache[selector + \" \"];\n\n      if (cached) {\n        return parseOnly ? 0 : cached.slice(0);\n      }\n\n      soFar = selector;\n      groups = [];\n      preFilters = Expr.preFilter;\n\n      while (soFar) {\n        // Comma and first run\n        if (!matched || (match = rcomma.exec(soFar))) {\n          if (match) {\n            // Don't consume trailing commas as valid\n            soFar = soFar.slice(match[0].length) || soFar;\n          }\n\n          groups.push(tokens = []);\n        }\n\n        matched = false; // Combinators\n\n        if (match = rcombinators.exec(soFar)) {\n          matched = match.shift();\n          tokens.push({\n            value: matched,\n            // Cast descendant combinators to space\n            type: match[0].replace(rtrim, \" \")\n          });\n          soFar = soFar.slice(matched.length);\n        } // Filters\n\n\n        for (type in Expr.filter) {\n          if ((match = matchExpr[type].exec(soFar)) && (!preFilters[type] || (match = preFilters[type](match)))) {\n            matched = match.shift();\n            tokens.push({\n              value: matched,\n              type: type,\n              matches: match\n            });\n            soFar = soFar.slice(matched.length);\n          }\n        }\n\n        if (!matched) {\n          break;\n        }\n      } // Return the length of the invalid excess\n      // if we're just parsing\n      // Otherwise, throw an error or return tokens\n\n\n      return parseOnly ? soFar.length : soFar ? Sizzle.error(selector) : // Cache the tokens\n      tokenCache(selector, groups).slice(0);\n    };\n\n    function toSelector(tokens) {\n      var i = 0,\n          len = tokens.length,\n          selector = \"\";\n\n      for (; i < len; i++) {\n        selector += tokens[i].value;\n      }\n\n      return selector;\n    }\n\n    function addCombinator(matcher, combinator, base) {\n      var dir = combinator.dir,\n          skip = combinator.next,\n          key = skip || dir,\n          checkNonElements = base && key === \"parentNode\",\n          doneName = done++;\n      return combinator.first ? // Check against closest ancestor/preceding element\n      function (elem, context, xml) {\n        while (elem = elem[dir]) {\n          if (elem.nodeType === 1 || checkNonElements) {\n            return matcher(elem, context, xml);\n          }\n        }\n\n        return false;\n      } : // Check against all ancestor/preceding elements\n      function (elem, context, xml) {\n        var oldCache,\n            uniqueCache,\n            outerCache,\n            newCache = [dirruns, doneName]; // We can't set arbitrary data on XML nodes, so they don't benefit from combinator caching\n\n        if (xml) {\n          while (elem = elem[dir]) {\n            if (elem.nodeType === 1 || checkNonElements) {\n              if (matcher(elem, context, xml)) {\n                return true;\n              }\n            }\n          }\n        } else {\n          while (elem = elem[dir]) {\n            if (elem.nodeType === 1 || checkNonElements) {\n              outerCache = elem[expando] || (elem[expando] = {}); // Support: IE <9 only\n              // Defend against cloned attroperties (jQuery gh-1709)\n\n              uniqueCache = outerCache[elem.uniqueID] || (outerCache[elem.uniqueID] = {});\n\n              if (skip && skip === elem.nodeName.toLowerCase()) {\n                elem = elem[dir] || elem;\n              } else if ((oldCache = uniqueCache[key]) && oldCache[0] === dirruns && oldCache[1] === doneName) {\n                // Assign to newCache so results back-propagate to previous elements\n                return newCache[2] = oldCache[2];\n              } else {\n                // Reuse newcache so results back-propagate to previous elements\n                uniqueCache[key] = newCache; // A match means we're done; a fail means we have to keep checking\n\n                if (newCache[2] = matcher(elem, context, xml)) {\n                  return true;\n                }\n              }\n            }\n          }\n        }\n\n        return false;\n      };\n    }\n\n    function elementMatcher(matchers) {\n      return matchers.length > 1 ? function (elem, context, xml) {\n        var i = matchers.length;\n\n        while (i--) {\n          if (!matchers[i](elem, context, xml)) {\n            return false;\n          }\n        }\n\n        return true;\n      } : matchers[0];\n    }\n\n    function multipleContexts(selector, contexts, results) {\n      var i = 0,\n          len = contexts.length;\n\n      for (; i < len; i++) {\n        Sizzle(selector, contexts[i], results);\n      }\n\n      return results;\n    }\n\n    function condense(unmatched, map, filter, context, xml) {\n      var elem,\n          newUnmatched = [],\n          i = 0,\n          len = unmatched.length,\n          mapped = map != null;\n\n      for (; i < len; i++) {\n        if (elem = unmatched[i]) {\n          if (!filter || filter(elem, context, xml)) {\n            newUnmatched.push(elem);\n\n            if (mapped) {\n              map.push(i);\n            }\n          }\n        }\n      }\n\n      return newUnmatched;\n    }\n\n    function setMatcher(preFilter, selector, matcher, postFilter, postFinder, postSelector) {\n      if (postFilter && !postFilter[expando]) {\n        postFilter = setMatcher(postFilter);\n      }\n\n      if (postFinder && !postFinder[expando]) {\n        postFinder = setMatcher(postFinder, postSelector);\n      }\n\n      return markFunction(function (seed, results, context, xml) {\n        var temp,\n            i,\n            elem,\n            preMap = [],\n            postMap = [],\n            preexisting = results.length,\n            // Get initial elements from seed or context\n        elems = seed || multipleContexts(selector || \"*\", context.nodeType ? [context] : context, []),\n            // Prefilter to get matcher input, preserving a map for seed-results synchronization\n        matcherIn = preFilter && (seed || !selector) ? condense(elems, preMap, preFilter, context, xml) : elems,\n            matcherOut = matcher ? // If we have a postFinder, or filtered seed, or non-seed postFilter or preexisting results,\n        postFinder || (seed ? preFilter : preexisting || postFilter) ? // ...intermediate processing is necessary\n        [] : // ...otherwise use results directly\n        results : matcherIn; // Find primary matches\n\n        if (matcher) {\n          matcher(matcherIn, matcherOut, context, xml);\n        } // Apply postFilter\n\n\n        if (postFilter) {\n          temp = condense(matcherOut, postMap);\n          postFilter(temp, [], context, xml); // Un-match failing elements by moving them back to matcherIn\n\n          i = temp.length;\n\n          while (i--) {\n            if (elem = temp[i]) {\n              matcherOut[postMap[i]] = !(matcherIn[postMap[i]] = elem);\n            }\n          }\n        }\n\n        if (seed) {\n          if (postFinder || preFilter) {\n            if (postFinder) {\n              // Get the final matcherOut by condensing this intermediate into postFinder contexts\n              temp = [];\n              i = matcherOut.length;\n\n              while (i--) {\n                if (elem = matcherOut[i]) {\n                  // Restore matcherIn since elem is not yet a final match\n                  temp.push(matcherIn[i] = elem);\n                }\n              }\n\n              postFinder(null, matcherOut = [], temp, xml);\n            } // Move matched elements from seed to results to keep them synchronized\n\n\n            i = matcherOut.length;\n\n            while (i--) {\n              if ((elem = matcherOut[i]) && (temp = postFinder ? indexOf(seed, elem) : preMap[i]) > -1) {\n                seed[temp] = !(results[temp] = elem);\n              }\n            }\n          } // Add elements to results, through postFinder if defined\n\n        } else {\n          matcherOut = condense(matcherOut === results ? matcherOut.splice(preexisting, matcherOut.length) : matcherOut);\n\n          if (postFinder) {\n            postFinder(null, results, matcherOut, xml);\n          } else {\n            push.apply(results, matcherOut);\n          }\n        }\n      });\n    }\n\n    function matcherFromTokens(tokens) {\n      var checkContext,\n          matcher,\n          j,\n          len = tokens.length,\n          leadingRelative = Expr.relative[tokens[0].type],\n          implicitRelative = leadingRelative || Expr.relative[\" \"],\n          i = leadingRelative ? 1 : 0,\n          // The foundational matcher ensures that elements are reachable from top-level context(s)\n      matchContext = addCombinator(function (elem) {\n        return elem === checkContext;\n      }, implicitRelative, true),\n          matchAnyContext = addCombinator(function (elem) {\n        return indexOf(checkContext, elem) > -1;\n      }, implicitRelative, true),\n          matchers = [function (elem, context, xml) {\n        var ret = !leadingRelative && (xml || context !== outermostContext) || ((checkContext = context).nodeType ? matchContext(elem, context, xml) : matchAnyContext(elem, context, xml)); // Avoid hanging onto element (issue #299)\n\n        checkContext = null;\n        return ret;\n      }];\n\n      for (; i < len; i++) {\n        if (matcher = Expr.relative[tokens[i].type]) {\n          matchers = [addCombinator(elementMatcher(matchers), matcher)];\n        } else {\n          matcher = Expr.filter[tokens[i].type].apply(null, tokens[i].matches); // Return special upon seeing a positional matcher\n\n          if (matcher[expando]) {\n            // Find the next relative operator (if any) for proper handling\n            j = ++i;\n\n            for (; j < len; j++) {\n              if (Expr.relative[tokens[j].type]) {\n                break;\n              }\n            }\n\n            return setMatcher(i > 1 && elementMatcher(matchers), i > 1 && toSelector( // If the preceding token was a descendant combinator, insert an implicit any-element `*`\n            tokens.slice(0, i - 1).concat({\n              value: tokens[i - 2].type === \" \" ? \"*\" : \"\"\n            })).replace(rtrim, \"$1\"), matcher, i < j && matcherFromTokens(tokens.slice(i, j)), j < len && matcherFromTokens(tokens = tokens.slice(j)), j < len && toSelector(tokens));\n          }\n\n          matchers.push(matcher);\n        }\n      }\n\n      return elementMatcher(matchers);\n    }\n\n    function matcherFromGroupMatchers(elementMatchers, setMatchers) {\n      var bySet = setMatchers.length > 0,\n          byElement = elementMatchers.length > 0,\n          superMatcher = function superMatcher(seed, context, xml, results, outermost) {\n        var elem,\n            j,\n            matcher,\n            matchedCount = 0,\n            i = \"0\",\n            unmatched = seed && [],\n            setMatched = [],\n            contextBackup = outermostContext,\n            // We must always have either seed elements or outermost context\n        elems = seed || byElement && Expr.find[\"TAG\"](\"*\", outermost),\n            // Use integer dirruns iff this is the outermost matcher\n        dirrunsUnique = dirruns += contextBackup == null ? 1 : Math.random() || 0.1,\n            len = elems.length;\n\n        if (outermost) {\n          outermostContext = context === document || context || outermost;\n        } // Add elements passing elementMatchers directly to results\n        // Support: IE<9, Safari\n        // Tolerate NodeList properties (IE: \"length\"; Safari: <number>) matching elements by id\n\n\n        for (; i !== len && (elem = elems[i]) != null; i++) {\n          if (byElement && elem) {\n            j = 0;\n\n            if (!context && elem.ownerDocument !== document) {\n              setDocument(elem);\n              xml = !documentIsHTML;\n            }\n\n            while (matcher = elementMatchers[j++]) {\n              if (matcher(elem, context || document, xml)) {\n                results.push(elem);\n                break;\n              }\n            }\n\n            if (outermost) {\n              dirruns = dirrunsUnique;\n            }\n          } // Track unmatched elements for set filters\n\n\n          if (bySet) {\n            // They will have gone through all possible matchers\n            if (elem = !matcher && elem) {\n              matchedCount--;\n            } // Lengthen the array for every element, matched or not\n\n\n            if (seed) {\n              unmatched.push(elem);\n            }\n          }\n        } // `i` is now the count of elements visited above, and adding it to `matchedCount`\n        // makes the latter nonnegative.\n\n\n        matchedCount += i; // Apply set filters to unmatched elements\n        // NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`\n        // equals `i`), unless we didn't visit _any_ elements in the above loop because we have\n        // no element matchers and no seed.\n        // Incrementing an initially-string \"0\" `i` allows `i` to remain a string only in that\n        // case, which will result in a \"00\" `matchedCount` that differs from `i` but is also\n        // numerically zero.\n\n        if (bySet && i !== matchedCount) {\n          j = 0;\n\n          while (matcher = setMatchers[j++]) {\n            matcher(unmatched, setMatched, context, xml);\n          }\n\n          if (seed) {\n            // Reintegrate element matches to eliminate the need for sorting\n            if (matchedCount > 0) {\n              while (i--) {\n                if (!(unmatched[i] || setMatched[i])) {\n                  setMatched[i] = pop.call(results);\n                }\n              }\n            } // Discard index placeholder values to get only actual matches\n\n\n            setMatched = condense(setMatched);\n          } // Add matches to results\n\n\n          push.apply(results, setMatched); // Seedless set matches succeeding multiple successful matchers stipulate sorting\n\n          if (outermost && !seed && setMatched.length > 0 && matchedCount + setMatchers.length > 1) {\n            Sizzle.uniqueSort(results);\n          }\n        } // Override manipulation of globals by nested matchers\n\n\n        if (outermost) {\n          dirruns = dirrunsUnique;\n          outermostContext = contextBackup;\n        }\n\n        return unmatched;\n      };\n\n      return bySet ? markFunction(superMatcher) : superMatcher;\n    }\n\n    compile = Sizzle.compile = function (selector, match\n    /* Internal Use Only */\n    ) {\n      var i,\n          setMatchers = [],\n          elementMatchers = [],\n          cached = compilerCache[selector + \" \"];\n\n      if (!cached) {\n        // Generate a function of recursive functions that can be used to check each element\n        if (!match) {\n          match = tokenize(selector);\n        }\n\n        i = match.length;\n\n        while (i--) {\n          cached = matcherFromTokens(match[i]);\n\n          if (cached[expando]) {\n            setMatchers.push(cached);\n          } else {\n            elementMatchers.push(cached);\n          }\n        } // Cache the compiled function\n\n\n        cached = compilerCache(selector, matcherFromGroupMatchers(elementMatchers, setMatchers)); // Save selector and tokenization\n\n        cached.selector = selector;\n      }\n\n      return cached;\n    };\n    /**\n     * A low-level selection function that works with Sizzle's compiled\n     *  selector functions\n     * @param {String|Function} selector A selector or a pre-compiled\n     *  selector function built with Sizzle.compile\n     * @param {Element} context\n     * @param {Array} [results]\n     * @param {Array} [seed] A set of elements to match against\n     */\n\n\n    select = Sizzle.select = function (selector, context, results, seed) {\n      var i,\n          tokens,\n          token,\n          type,\n          find,\n          compiled = typeof selector === \"function\" && selector,\n          match = !seed && tokenize(selector = compiled.selector || selector);\n      results = results || []; // Try to minimize operations if there is only one selector in the list and no seed\n      // (the latter of which guarantees us context)\n\n      if (match.length === 1) {\n        // Reduce context if the leading compound selector is an ID\n        tokens = match[0] = match[0].slice(0);\n\n        if (tokens.length > 2 && (token = tokens[0]).type === \"ID\" && context.nodeType === 9 && documentIsHTML && Expr.relative[tokens[1].type]) {\n          context = (Expr.find[\"ID\"](token.matches[0].replace(runescape, funescape), context) || [])[0];\n\n          if (!context) {\n            return results; // Precompiled matchers will still verify ancestry, so step up a level\n          } else if (compiled) {\n            context = context.parentNode;\n          }\n\n          selector = selector.slice(tokens.shift().value.length);\n        } // Fetch a seed set for right-to-left matching\n\n\n        i = matchExpr[\"needsContext\"].test(selector) ? 0 : tokens.length;\n\n        while (i--) {\n          token = tokens[i]; // Abort if we hit a combinator\n\n          if (Expr.relative[type = token.type]) {\n            break;\n          }\n\n          if (find = Expr.find[type]) {\n            // Search, expanding context for leading sibling combinators\n            if (seed = find(token.matches[0].replace(runescape, funescape), rsibling.test(tokens[0].type) && testContext(context.parentNode) || context)) {\n              // If seed is empty or no tokens remain, we can return early\n              tokens.splice(i, 1);\n              selector = seed.length && toSelector(tokens);\n\n              if (!selector) {\n                push.apply(results, seed);\n                return results;\n              }\n\n              break;\n            }\n          }\n        }\n      } // Compile and execute a filtering function if one is not provided\n      // Provide `match` to avoid retokenization if we modified the selector above\n\n\n      (compiled || compile(selector, match))(seed, context, !documentIsHTML, results, !context || rsibling.test(selector) && testContext(context.parentNode) || context);\n      return results;\n    }; // One-time assignments\n    // Sort stability\n\n\n    support.sortStable = expando.split(\"\").sort(sortOrder).join(\"\") === expando; // Support: Chrome 14-35+\n    // Always assume duplicates if they aren't passed to the comparison function\n\n    support.detectDuplicates = !!hasDuplicate; // Initialize against the default document\n\n    setDocument(); // Support: Webkit<537.32 - Safari 6.0.3/Chrome 25 (fixed in Chrome 27)\n    // Detached nodes confoundingly follow *each other*\n\n    support.sortDetached = assert(function (el) {\n      // Should return 1, but returns 4 (following)\n      return el.compareDocumentPosition(document.createElement(\"fieldset\")) & 1;\n    }); // Support: IE<8\n    // Prevent attribute/property \"interpolation\"\n    // https://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx\n\n    if (!assert(function (el) {\n      el.innerHTML = \"<a href='#'></a>\";\n      return el.firstChild.getAttribute(\"href\") === \"#\";\n    })) {\n      addHandle(\"type|href|height|width\", function (elem, name, isXML) {\n        if (!isXML) {\n          return elem.getAttribute(name, name.toLowerCase() === \"type\" ? 1 : 2);\n        }\n      });\n    } // Support: IE<9\n    // Use defaultValue in place of getAttribute(\"value\")\n\n\n    if (!support.attributes || !assert(function (el) {\n      el.innerHTML = \"<input/>\";\n      el.firstChild.setAttribute(\"value\", \"\");\n      return el.firstChild.getAttribute(\"value\") === \"\";\n    })) {\n      addHandle(\"value\", function (elem, name, isXML) {\n        if (!isXML && elem.nodeName.toLowerCase() === \"input\") {\n          return elem.defaultValue;\n        }\n      });\n    } // Support: IE<9\n    // Use getAttributeNode to fetch booleans when getAttribute lies\n\n\n    if (!assert(function (el) {\n      return el.getAttribute(\"disabled\") == null;\n    })) {\n      addHandle(booleans, function (elem, name, isXML) {\n        var val;\n\n        if (!isXML) {\n          return elem[name] === true ? name.toLowerCase() : (val = elem.getAttributeNode(name)) && val.specified ? val.value : null;\n        }\n      });\n    }\n\n    return Sizzle;\n  }(window);\n\n  jQuery.find = Sizzle;\n  jQuery.expr = Sizzle.selectors; // Deprecated\n\n  jQuery.expr[\":\"] = jQuery.expr.pseudos;\n  jQuery.uniqueSort = jQuery.unique = Sizzle.uniqueSort;\n  jQuery.text = Sizzle.getText;\n  jQuery.isXMLDoc = Sizzle.isXML;\n  jQuery.contains = Sizzle.contains;\n  jQuery.escapeSelector = Sizzle.escape;\n\n  var dir = function dir(elem, _dir, until) {\n    var matched = [],\n        truncate = until !== undefined;\n\n    while ((elem = elem[_dir]) && elem.nodeType !== 9) {\n      if (elem.nodeType === 1) {\n        if (truncate && jQuery(elem).is(until)) {\n          break;\n        }\n\n        matched.push(elem);\n      }\n    }\n\n    return matched;\n  };\n\n  var _siblings = function siblings(n, elem) {\n    var matched = [];\n\n    for (; n; n = n.nextSibling) {\n      if (n.nodeType === 1 && n !== elem) {\n        matched.push(n);\n      }\n    }\n\n    return matched;\n  };\n\n  var rneedsContext = jQuery.expr.match.needsContext;\n\n  function nodeName(elem, name) {\n    return elem.nodeName && elem.nodeName.toLowerCase() === name.toLowerCase();\n  }\n\n  ;\n  var rsingleTag = /^<([a-z][^\\/\\0>:\\x20\\t\\r\\n\\f]*)[\\x20\\t\\r\\n\\f]*\\/?>(?:<\\/\\1>|)$/i; // Implement the identical functionality for filter and not\n\n  function winnow(elements, qualifier, not) {\n    if (isFunction(qualifier)) {\n      return jQuery.grep(elements, function (elem, i) {\n        return !!qualifier.call(elem, i, elem) !== not;\n      });\n    } // Single element\n\n\n    if (qualifier.nodeType) {\n      return jQuery.grep(elements, function (elem) {\n        return elem === qualifier !== not;\n      });\n    } // Arraylike of elements (jQuery, arguments, Array)\n\n\n    if (typeof qualifier !== \"string\") {\n      return jQuery.grep(elements, function (elem) {\n        return indexOf.call(qualifier, elem) > -1 !== not;\n      });\n    } // Filtered directly for both simple and complex selectors\n\n\n    return jQuery.filter(qualifier, elements, not);\n  }\n\n  jQuery.filter = function (expr, elems, not) {\n    var elem = elems[0];\n\n    if (not) {\n      expr = \":not(\" + expr + \")\";\n    }\n\n    if (elems.length === 1 && elem.nodeType === 1) {\n      return jQuery.find.matchesSelector(elem, expr) ? [elem] : [];\n    }\n\n    return jQuery.find.matches(expr, jQuery.grep(elems, function (elem) {\n      return elem.nodeType === 1;\n    }));\n  };\n\n  jQuery.fn.extend({\n    find: function find(selector) {\n      var i,\n          ret,\n          len = this.length,\n          self = this;\n\n      if (typeof selector !== \"string\") {\n        return this.pushStack(jQuery(selector).filter(function () {\n          for (i = 0; i < len; i++) {\n            if (jQuery.contains(self[i], this)) {\n              return true;\n            }\n          }\n        }));\n      }\n\n      ret = this.pushStack([]);\n\n      for (i = 0; i < len; i++) {\n        jQuery.find(selector, self[i], ret);\n      }\n\n      return len > 1 ? jQuery.uniqueSort(ret) : ret;\n    },\n    filter: function filter(selector) {\n      return this.pushStack(winnow(this, selector || [], false));\n    },\n    not: function not(selector) {\n      return this.pushStack(winnow(this, selector || [], true));\n    },\n    is: function is(selector) {\n      return !!winnow(this, // If this is a positional/relative selector, check membership in the returned set\n      // so $(\"p:first\").is(\"p:last\") won't return true for a doc with two \"p\".\n      typeof selector === \"string\" && rneedsContext.test(selector) ? jQuery(selector) : selector || [], false).length;\n    }\n  }); // Initialize a jQuery object\n  // A central reference to the root jQuery(document)\n\n  var rootjQuery,\n      // A simple way to check for HTML strings\n  // Prioritize #id over <tag> to avoid XSS via location.hash (#9521)\n  // Strict HTML recognition (#11290: must start with <)\n  // Shortcut simple #id case for speed\n  rquickExpr = /^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]+))$/,\n      init = jQuery.fn.init = function (selector, context, root) {\n    var match, elem; // HANDLE: $(\"\"), $(null), $(undefined), $(false)\n\n    if (!selector) {\n      return this;\n    } // Method init() accepts an alternate rootjQuery\n    // so migrate can support jQuery.sub (gh-2101)\n\n\n    root = root || rootjQuery; // Handle HTML strings\n\n    if (typeof selector === \"string\") {\n      if (selector[0] === \"<\" && selector[selector.length - 1] === \">\" && selector.length >= 3) {\n        // Assume that strings that start and end with <> are HTML and skip the regex check\n        match = [null, selector, null];\n      } else {\n        match = rquickExpr.exec(selector);\n      } // Match html or make sure no context is specified for #id\n\n\n      if (match && (match[1] || !context)) {\n        // HANDLE: $(html) -> $(array)\n        if (match[1]) {\n          context = context instanceof jQuery ? context[0] : context; // Option to run scripts is true for back-compat\n          // Intentionally let the error be thrown if parseHTML is not present\n\n          jQuery.merge(this, jQuery.parseHTML(match[1], context && context.nodeType ? context.ownerDocument || context : document, true)); // HANDLE: $(html, props)\n\n          if (rsingleTag.test(match[1]) && jQuery.isPlainObject(context)) {\n            for (match in context) {\n              // Properties of context are called as methods if possible\n              if (isFunction(this[match])) {\n                this[match](context[match]); // ...and otherwise set as attributes\n              } else {\n                this.attr(match, context[match]);\n              }\n            }\n          }\n\n          return this; // HANDLE: $(#id)\n        } else {\n          elem = document.getElementById(match[2]);\n\n          if (elem) {\n            // Inject the element directly into the jQuery object\n            this[0] = elem;\n            this.length = 1;\n          }\n\n          return this;\n        } // HANDLE: $(expr, $(...))\n\n      } else if (!context || context.jquery) {\n        return (context || root).find(selector); // HANDLE: $(expr, context)\n        // (which is just equivalent to: $(context).find(expr)\n      } else {\n        return this.constructor(context).find(selector);\n      } // HANDLE: $(DOMElement)\n\n    } else if (selector.nodeType) {\n      this[0] = selector;\n      this.length = 1;\n      return this; // HANDLE: $(function)\n      // Shortcut for document ready\n    } else if (isFunction(selector)) {\n      return root.ready !== undefined ? root.ready(selector) : // Execute immediately if ready is not present\n      selector(jQuery);\n    }\n\n    return jQuery.makeArray(selector, this);\n  }; // Give the init function the jQuery prototype for later instantiation\n\n\n  init.prototype = jQuery.fn; // Initialize central reference\n\n  rootjQuery = jQuery(document);\n  var rparentsprev = /^(?:parents|prev(?:Until|All))/,\n      // Methods guaranteed to produce a unique set when starting from a unique set\n  guaranteedUnique = {\n    children: true,\n    contents: true,\n    next: true,\n    prev: true\n  };\n  jQuery.fn.extend({\n    has: function has(target) {\n      var targets = jQuery(target, this),\n          l = targets.length;\n      return this.filter(function () {\n        var i = 0;\n\n        for (; i < l; i++) {\n          if (jQuery.contains(this, targets[i])) {\n            return true;\n          }\n        }\n      });\n    },\n    closest: function closest(selectors, context) {\n      var cur,\n          i = 0,\n          l = this.length,\n          matched = [],\n          targets = typeof selectors !== \"string\" && jQuery(selectors); // Positional selectors never match, since there's no _selection_ context\n\n      if (!rneedsContext.test(selectors)) {\n        for (; i < l; i++) {\n          for (cur = this[i]; cur && cur !== context; cur = cur.parentNode) {\n            // Always skip document fragments\n            if (cur.nodeType < 11 && (targets ? targets.index(cur) > -1 : // Don't pass non-elements to Sizzle\n            cur.nodeType === 1 && jQuery.find.matchesSelector(cur, selectors))) {\n              matched.push(cur);\n              break;\n            }\n          }\n        }\n      }\n\n      return this.pushStack(matched.length > 1 ? jQuery.uniqueSort(matched) : matched);\n    },\n    // Determine the position of an element within the set\n    index: function index(elem) {\n      // No argument, return index in parent\n      if (!elem) {\n        return this[0] && this[0].parentNode ? this.first().prevAll().length : -1;\n      } // Index in selector\n\n\n      if (typeof elem === \"string\") {\n        return indexOf.call(jQuery(elem), this[0]);\n      } // Locate the position of the desired element\n\n\n      return indexOf.call(this, // If it receives a jQuery object, the first element is used\n      elem.jquery ? elem[0] : elem);\n    },\n    add: function add(selector, context) {\n      return this.pushStack(jQuery.uniqueSort(jQuery.merge(this.get(), jQuery(selector, context))));\n    },\n    addBack: function addBack(selector) {\n      return this.add(selector == null ? this.prevObject : this.prevObject.filter(selector));\n    }\n  });\n\n  function sibling(cur, dir) {\n    while ((cur = cur[dir]) && cur.nodeType !== 1) {}\n\n    return cur;\n  }\n\n  jQuery.each({\n    parent: function parent(elem) {\n      var parent = elem.parentNode;\n      return parent && parent.nodeType !== 11 ? parent : null;\n    },\n    parents: function parents(elem) {\n      return dir(elem, \"parentNode\");\n    },\n    parentsUntil: function parentsUntil(elem, i, until) {\n      return dir(elem, \"parentNode\", until);\n    },\n    next: function next(elem) {\n      return sibling(elem, \"nextSibling\");\n    },\n    prev: function prev(elem) {\n      return sibling(elem, \"previousSibling\");\n    },\n    nextAll: function nextAll(elem) {\n      return dir(elem, \"nextSibling\");\n    },\n    prevAll: function prevAll(elem) {\n      return dir(elem, \"previousSibling\");\n    },\n    nextUntil: function nextUntil(elem, i, until) {\n      return dir(elem, \"nextSibling\", until);\n    },\n    prevUntil: function prevUntil(elem, i, until) {\n      return dir(elem, \"previousSibling\", until);\n    },\n    siblings: function siblings(elem) {\n      return _siblings((elem.parentNode || {}).firstChild, elem);\n    },\n    children: function children(elem) {\n      return _siblings(elem.firstChild);\n    },\n    contents: function contents(elem) {\n      if (typeof elem.contentDocument !== \"undefined\") {\n        return elem.contentDocument;\n      } // Support: IE 9 - 11 only, iOS 7 only, Android Browser <=4.3 only\n      // Treat the template element as a regular one in browsers that\n      // don't support it.\n\n\n      if (nodeName(elem, \"template\")) {\n        elem = elem.content || elem;\n      }\n\n      return jQuery.merge([], elem.childNodes);\n    }\n  }, function (name, fn) {\n    jQuery.fn[name] = function (until, selector) {\n      var matched = jQuery.map(this, fn, until);\n\n      if (name.slice(-5) !== \"Until\") {\n        selector = until;\n      }\n\n      if (selector && typeof selector === \"string\") {\n        matched = jQuery.filter(selector, matched);\n      }\n\n      if (this.length > 1) {\n        // Remove duplicates\n        if (!guaranteedUnique[name]) {\n          jQuery.uniqueSort(matched);\n        } // Reverse order for parents* and prev-derivatives\n\n\n        if (rparentsprev.test(name)) {\n          matched.reverse();\n        }\n      }\n\n      return this.pushStack(matched);\n    };\n  });\n  var rnothtmlwhite = /[^\\x20\\t\\r\\n\\f]+/g; // Convert String-formatted options into Object-formatted ones\n\n  function createOptions(options) {\n    var object = {};\n    jQuery.each(options.match(rnothtmlwhite) || [], function (_, flag) {\n      object[flag] = true;\n    });\n    return object;\n  }\n  /*\n   * Create a callback list using the following parameters:\n   *\n   *\toptions: an optional list of space-separated options that will change how\n   *\t\t\tthe callback list behaves or a more traditional option object\n   *\n   * By default a callback list will act like an event callback list and can be\n   * \"fired\" multiple times.\n   *\n   * Possible options:\n   *\n   *\tonce:\t\t\twill ensure the callback list can only be fired once (like a Deferred)\n   *\n   *\tmemory:\t\t\twill keep track of previous values and will call any callback added\n   *\t\t\t\t\tafter the list has been fired right away with the latest \"memorized\"\n   *\t\t\t\t\tvalues (like a Deferred)\n   *\n   *\tunique:\t\t\twill ensure a callback can only be added once (no duplicate in the list)\n   *\n   *\tstopOnFalse:\tinterrupt callings when a callback returns false\n   *\n   */\n\n\n  jQuery.Callbacks = function (options) {\n    // Convert options from String-formatted to Object-formatted if needed\n    // (we check in cache first)\n    options = typeof options === \"string\" ? createOptions(options) : jQuery.extend({}, options);\n\n    var // Flag to know if list is currently firing\n    firing,\n        // Last fire value for non-forgettable lists\n    memory,\n        // Flag to know if list was already fired\n    _fired,\n        // Flag to prevent firing\n    _locked,\n        // Actual callback list\n    list = [],\n        // Queue of execution data for repeatable lists\n    queue = [],\n        // Index of currently firing callback (modified by add/remove as needed)\n    firingIndex = -1,\n        // Fire callbacks\n    fire = function fire() {\n      // Enforce single-firing\n      _locked = _locked || options.once; // Execute callbacks for all pending executions,\n      // respecting firingIndex overrides and runtime changes\n\n      _fired = firing = true;\n\n      for (; queue.length; firingIndex = -1) {\n        memory = queue.shift();\n\n        while (++firingIndex < list.length) {\n          // Run callback and check for early termination\n          if (list[firingIndex].apply(memory[0], memory[1]) === false && options.stopOnFalse) {\n            // Jump to end and forget the data so .add doesn't re-fire\n            firingIndex = list.length;\n            memory = false;\n          }\n        }\n      } // Forget the data if we're done with it\n\n\n      if (!options.memory) {\n        memory = false;\n      }\n\n      firing = false; // Clean up if we're done firing for good\n\n      if (_locked) {\n        // Keep an empty list if we have data for future add calls\n        if (memory) {\n          list = []; // Otherwise, this object is spent\n        } else {\n          list = \"\";\n        }\n      }\n    },\n        // Actual Callbacks object\n    self = {\n      // Add a callback or a collection of callbacks to the list\n      add: function add() {\n        if (list) {\n          // If we have memory from a past run, we should fire after adding\n          if (memory && !firing) {\n            firingIndex = list.length - 1;\n            queue.push(memory);\n          }\n\n          (function add(args) {\n            jQuery.each(args, function (_, arg) {\n              if (isFunction(arg)) {\n                if (!options.unique || !self.has(arg)) {\n                  list.push(arg);\n                }\n              } else if (arg && arg.length && toType(arg) !== \"string\") {\n                // Inspect recursively\n                add(arg);\n              }\n            });\n          })(arguments);\n\n          if (memory && !firing) {\n            fire();\n          }\n        }\n\n        return this;\n      },\n      // Remove a callback from the list\n      remove: function remove() {\n        jQuery.each(arguments, function (_, arg) {\n          var index;\n\n          while ((index = jQuery.inArray(arg, list, index)) > -1) {\n            list.splice(index, 1); // Handle firing indexes\n\n            if (index <= firingIndex) {\n              firingIndex--;\n            }\n          }\n        });\n        return this;\n      },\n      // Check if a given callback is in the list.\n      // If no argument is given, return whether or not list has callbacks attached.\n      has: function has(fn) {\n        return fn ? jQuery.inArray(fn, list) > -1 : list.length > 0;\n      },\n      // Remove all callbacks from the list\n      empty: function empty() {\n        if (list) {\n          list = [];\n        }\n\n        return this;\n      },\n      // Disable .fire and .add\n      // Abort any current/pending executions\n      // Clear all callbacks and values\n      disable: function disable() {\n        _locked = queue = [];\n        list = memory = \"\";\n        return this;\n      },\n      disabled: function disabled() {\n        return !list;\n      },\n      // Disable .fire\n      // Also disable .add unless we have memory (since it would have no effect)\n      // Abort any pending executions\n      lock: function lock() {\n        _locked = queue = [];\n\n        if (!memory && !firing) {\n          list = memory = \"\";\n        }\n\n        return this;\n      },\n      locked: function locked() {\n        return !!_locked;\n      },\n      // Call all callbacks with the given context and arguments\n      fireWith: function fireWith(context, args) {\n        if (!_locked) {\n          args = args || [];\n          args = [context, args.slice ? args.slice() : args];\n          queue.push(args);\n\n          if (!firing) {\n            fire();\n          }\n        }\n\n        return this;\n      },\n      // Call all the callbacks with the given arguments\n      fire: function fire() {\n        self.fireWith(this, arguments);\n        return this;\n      },\n      // To know if the callbacks have already been called at least once\n      fired: function fired() {\n        return !!_fired;\n      }\n    };\n\n    return self;\n  };\n\n  function Identity(v) {\n    return v;\n  }\n\n  function Thrower(ex) {\n    throw ex;\n  }\n\n  function adoptValue(value, resolve, reject, noValue) {\n    var method;\n\n    try {\n      // Check for promise aspect first to privilege synchronous behavior\n      if (value && isFunction(method = value.promise)) {\n        method.call(value).done(resolve).fail(reject); // Other thenables\n      } else if (value && isFunction(method = value.then)) {\n        method.call(value, resolve, reject); // Other non-thenables\n      } else {\n        // Control `resolve` arguments by letting Array#slice cast boolean `noValue` to integer:\n        // * false: [ value ].slice( 0 ) => resolve( value )\n        // * true: [ value ].slice( 1 ) => resolve()\n        resolve.apply(undefined, [value].slice(noValue));\n      } // For Promises/A+, convert exceptions into rejections\n      // Since jQuery.when doesn't unwrap thenables, we can skip the extra checks appearing in\n      // Deferred#then to conditionally suppress rejection.\n\n    } catch (value) {\n      // Support: Android 4.0 only\n      // Strict mode functions invoked without .call/.apply get global-object context\n      reject.apply(undefined, [value]);\n    }\n  }\n\n  jQuery.extend({\n    Deferred: function Deferred(func) {\n      var tuples = [// action, add listener, callbacks,\n      // ... .then handlers, argument index, [final state]\n      [\"notify\", \"progress\", jQuery.Callbacks(\"memory\"), jQuery.Callbacks(\"memory\"), 2], [\"resolve\", \"done\", jQuery.Callbacks(\"once memory\"), jQuery.Callbacks(\"once memory\"), 0, \"resolved\"], [\"reject\", \"fail\", jQuery.Callbacks(\"once memory\"), jQuery.Callbacks(\"once memory\"), 1, \"rejected\"]],\n          _state = \"pending\",\n          _promise = {\n        state: function state() {\n          return _state;\n        },\n        always: function always() {\n          deferred.done(arguments).fail(arguments);\n          return this;\n        },\n        \"catch\": function _catch(fn) {\n          return _promise.then(null, fn);\n        },\n        // Keep pipe for back-compat\n        pipe: function pipe()\n        /* fnDone, fnFail, fnProgress */\n        {\n          var fns = arguments;\n          return jQuery.Deferred(function (newDefer) {\n            jQuery.each(tuples, function (i, tuple) {\n              // Map tuples (progress, done, fail) to arguments (done, fail, progress)\n              var fn = isFunction(fns[tuple[4]]) && fns[tuple[4]]; // deferred.progress(function() { bind to newDefer or newDefer.notify })\n              // deferred.done(function() { bind to newDefer or newDefer.resolve })\n              // deferred.fail(function() { bind to newDefer or newDefer.reject })\n\n              deferred[tuple[1]](function () {\n                var returned = fn && fn.apply(this, arguments);\n\n                if (returned && isFunction(returned.promise)) {\n                  returned.promise().progress(newDefer.notify).done(newDefer.resolve).fail(newDefer.reject);\n                } else {\n                  newDefer[tuple[0] + \"With\"](this, fn ? [returned] : arguments);\n                }\n              });\n            });\n            fns = null;\n          }).promise();\n        },\n        then: function then(onFulfilled, onRejected, onProgress) {\n          var maxDepth = 0;\n\n          function resolve(depth, deferred, handler, special) {\n            return function () {\n              var that = this,\n                  args = arguments,\n                  mightThrow = function mightThrow() {\n                var returned, then; // Support: Promises/A+ section 2.3.3.3.3\n                // https://promisesaplus.com/#point-59\n                // Ignore double-resolution attempts\n\n                if (depth < maxDepth) {\n                  return;\n                }\n\n                returned = handler.apply(that, args); // Support: Promises/A+ section 2.3.1\n                // https://promisesaplus.com/#point-48\n\n                if (returned === deferred.promise()) {\n                  throw new TypeError(\"Thenable self-resolution\");\n                } // Support: Promises/A+ sections 2.3.3.1, 3.5\n                // https://promisesaplus.com/#point-54\n                // https://promisesaplus.com/#point-75\n                // Retrieve `then` only once\n\n\n                then = returned && ( // Support: Promises/A+ section 2.3.4\n                // https://promisesaplus.com/#point-64\n                // Only check objects and functions for thenability\n                _typeof(returned) === \"object\" || typeof returned === \"function\") && returned.then; // Handle a returned thenable\n\n                if (isFunction(then)) {\n                  // Special processors (notify) just wait for resolution\n                  if (special) {\n                    then.call(returned, resolve(maxDepth, deferred, Identity, special), resolve(maxDepth, deferred, Thrower, special)); // Normal processors (resolve) also hook into progress\n                  } else {\n                    // ...and disregard older resolution values\n                    maxDepth++;\n                    then.call(returned, resolve(maxDepth, deferred, Identity, special), resolve(maxDepth, deferred, Thrower, special), resolve(maxDepth, deferred, Identity, deferred.notifyWith));\n                  } // Handle all other returned values\n\n                } else {\n                  // Only substitute handlers pass on context\n                  // and multiple values (non-spec behavior)\n                  if (handler !== Identity) {\n                    that = undefined;\n                    args = [returned];\n                  } // Process the value(s)\n                  // Default process is resolve\n\n\n                  (special || deferred.resolveWith)(that, args);\n                }\n              },\n                  // Only normal processors (resolve) catch and reject exceptions\n              process = special ? mightThrow : function () {\n                try {\n                  mightThrow();\n                } catch (e) {\n                  if (jQuery.Deferred.exceptionHook) {\n                    jQuery.Deferred.exceptionHook(e, process.stackTrace);\n                  } // Support: Promises/A+ section 2.3.3.3.4.1\n                  // https://promisesaplus.com/#point-61\n                  // Ignore post-resolution exceptions\n\n\n                  if (depth + 1 >= maxDepth) {\n                    // Only substitute handlers pass on context\n                    // and multiple values (non-spec behavior)\n                    if (handler !== Thrower) {\n                      that = undefined;\n                      args = [e];\n                    }\n\n                    deferred.rejectWith(that, args);\n                  }\n                }\n              }; // Support: Promises/A+ section 2.3.3.3.1\n              // https://promisesaplus.com/#point-57\n              // Re-resolve promises immediately to dodge false rejection from\n              // subsequent errors\n\n\n              if (depth) {\n                process();\n              } else {\n                // Call an optional hook to record the stack, in case of exception\n                // since it's otherwise lost when execution goes async\n                if (jQuery.Deferred.getStackHook) {\n                  process.stackTrace = jQuery.Deferred.getStackHook();\n                }\n\n                window.setTimeout(process);\n              }\n            };\n          }\n\n          return jQuery.Deferred(function (newDefer) {\n            // progress_handlers.add( ... )\n            tuples[0][3].add(resolve(0, newDefer, isFunction(onProgress) ? onProgress : Identity, newDefer.notifyWith)); // fulfilled_handlers.add( ... )\n\n            tuples[1][3].add(resolve(0, newDefer, isFunction(onFulfilled) ? onFulfilled : Identity)); // rejected_handlers.add( ... )\n\n            tuples[2][3].add(resolve(0, newDefer, isFunction(onRejected) ? onRejected : Thrower));\n          }).promise();\n        },\n        // Get a promise for this deferred\n        // If obj is provided, the promise aspect is added to the object\n        promise: function promise(obj) {\n          return obj != null ? jQuery.extend(obj, _promise) : _promise;\n        }\n      },\n          deferred = {}; // Add list-specific methods\n\n      jQuery.each(tuples, function (i, tuple) {\n        var list = tuple[2],\n            stateString = tuple[5]; // promise.progress = list.add\n        // promise.done = list.add\n        // promise.fail = list.add\n\n        _promise[tuple[1]] = list.add; // Handle state\n\n        if (stateString) {\n          list.add(function () {\n            // state = \"resolved\" (i.e., fulfilled)\n            // state = \"rejected\"\n            _state = stateString;\n          }, // rejected_callbacks.disable\n          // fulfilled_callbacks.disable\n          tuples[3 - i][2].disable, // rejected_handlers.disable\n          // fulfilled_handlers.disable\n          tuples[3 - i][3].disable, // progress_callbacks.lock\n          tuples[0][2].lock, // progress_handlers.lock\n          tuples[0][3].lock);\n        } // progress_handlers.fire\n        // fulfilled_handlers.fire\n        // rejected_handlers.fire\n\n\n        list.add(tuple[3].fire); // deferred.notify = function() { deferred.notifyWith(...) }\n        // deferred.resolve = function() { deferred.resolveWith(...) }\n        // deferred.reject = function() { deferred.rejectWith(...) }\n\n        deferred[tuple[0]] = function () {\n          deferred[tuple[0] + \"With\"](this === deferred ? undefined : this, arguments);\n          return this;\n        }; // deferred.notifyWith = list.fireWith\n        // deferred.resolveWith = list.fireWith\n        // deferred.rejectWith = list.fireWith\n\n\n        deferred[tuple[0] + \"With\"] = list.fireWith;\n      }); // Make the deferred a promise\n\n      _promise.promise(deferred); // Call given func if any\n\n\n      if (func) {\n        func.call(deferred, deferred);\n      } // All done!\n\n\n      return deferred;\n    },\n    // Deferred helper\n    when: function when(singleValue) {\n      var // count of uncompleted subordinates\n      remaining = arguments.length,\n          // count of unprocessed arguments\n      i = remaining,\n          // subordinate fulfillment data\n      resolveContexts = Array(i),\n          resolveValues = _slice.call(arguments),\n          // the master Deferred\n      master = jQuery.Deferred(),\n          // subordinate callback factory\n      updateFunc = function updateFunc(i) {\n        return function (value) {\n          resolveContexts[i] = this;\n          resolveValues[i] = arguments.length > 1 ? _slice.call(arguments) : value;\n\n          if (! --remaining) {\n            master.resolveWith(resolveContexts, resolveValues);\n          }\n        };\n      }; // Single- and empty arguments are adopted like Promise.resolve\n\n\n      if (remaining <= 1) {\n        adoptValue(singleValue, master.done(updateFunc(i)).resolve, master.reject, !remaining); // Use .then() to unwrap secondary thenables (cf. gh-3000)\n\n        if (master.state() === \"pending\" || isFunction(resolveValues[i] && resolveValues[i].then)) {\n          return master.then();\n        }\n      } // Multiple arguments are aggregated like Promise.all array elements\n\n\n      while (i--) {\n        adoptValue(resolveValues[i], updateFunc(i), master.reject);\n      }\n\n      return master.promise();\n    }\n  }); // These usually indicate a programmer mistake during development,\n  // warn about them ASAP rather than swallowing them by default.\n\n  var rerrorNames = /^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;\n\n  jQuery.Deferred.exceptionHook = function (error, stack) {\n    // Support: IE 8 - 9 only\n    // Console exists when dev tools are open, which can happen at any time\n    if (window.console && window.console.warn && error && rerrorNames.test(error.name)) {\n      window.console.warn(\"jQuery.Deferred exception: \" + error.message, error.stack, stack);\n    }\n  };\n\n  jQuery.readyException = function (error) {\n    window.setTimeout(function () {\n      throw error;\n    });\n  }; // The deferred used on DOM ready\n\n\n  var readyList = jQuery.Deferred();\n\n  jQuery.fn.ready = function (fn) {\n    readyList.then(fn) // Wrap jQuery.readyException in a function so that the lookup\n    // happens at the time of error handling instead of callback\n    // registration.\n    [\"catch\"](function (error) {\n      jQuery.readyException(error);\n    });\n    return this;\n  };\n\n  jQuery.extend({\n    // Is the DOM ready to be used? Set to true once it occurs.\n    isReady: false,\n    // A counter to track how many items to wait for before\n    // the ready event fires. See #6781\n    readyWait: 1,\n    // Handle when the DOM is ready\n    ready: function ready(wait) {\n      // Abort if there are pending holds or we're already ready\n      if (wait === true ? --jQuery.readyWait : jQuery.isReady) {\n        return;\n      } // Remember that the DOM is ready\n\n\n      jQuery.isReady = true; // If a normal DOM Ready event fired, decrement, and wait if need be\n\n      if (wait !== true && --jQuery.readyWait > 0) {\n        return;\n      } // If there are functions bound, to execute\n\n\n      readyList.resolveWith(document, [jQuery]);\n    }\n  });\n  jQuery.ready.then = readyList.then; // The ready event handler and self cleanup method\n\n  function completed() {\n    document.removeEventListener(\"DOMContentLoaded\", completed);\n    window.removeEventListener(\"load\", completed);\n    jQuery.ready();\n  } // Catch cases where $(document).ready() is called\n  // after the browser event has already occurred.\n  // Support: IE <=9 - 10 only\n  // Older IE sometimes signals \"interactive\" too soon\n\n\n  if (document.readyState === \"complete\" || document.readyState !== \"loading\" && !document.documentElement.doScroll) {\n    // Handle it asynchronously to allow scripts the opportunity to delay ready\n    window.setTimeout(jQuery.ready);\n  } else {\n    // Use the handy event callback\n    document.addEventListener(\"DOMContentLoaded\", completed); // A fallback to window.onload, that will always work\n\n    window.addEventListener(\"load\", completed);\n  } // Multifunctional method to get and set values of a collection\n  // The value/s can optionally be executed if it's a function\n\n\n  var access = function access(elems, fn, key, value, chainable, emptyGet, raw) {\n    var i = 0,\n        len = elems.length,\n        bulk = key == null; // Sets many values\n\n    if (toType(key) === \"object\") {\n      chainable = true;\n\n      for (i in key) {\n        access(elems, fn, i, key[i], true, emptyGet, raw);\n      } // Sets one value\n\n    } else if (value !== undefined) {\n      chainable = true;\n\n      if (!isFunction(value)) {\n        raw = true;\n      }\n\n      if (bulk) {\n        // Bulk operations run against the entire set\n        if (raw) {\n          fn.call(elems, value);\n          fn = null; // ...except when executing function values\n        } else {\n          bulk = fn;\n\n          fn = function fn(elem, key, value) {\n            return bulk.call(jQuery(elem), value);\n          };\n        }\n      }\n\n      if (fn) {\n        for (; i < len; i++) {\n          fn(elems[i], key, raw ? value : value.call(elems[i], i, fn(elems[i], key)));\n        }\n      }\n    }\n\n    if (chainable) {\n      return elems;\n    } // Gets\n\n\n    if (bulk) {\n      return fn.call(elems);\n    }\n\n    return len ? fn(elems[0], key) : emptyGet;\n  }; // Matches dashed string for camelizing\n\n\n  var rmsPrefix = /^-ms-/,\n      rdashAlpha = /-([a-z])/g; // Used by camelCase as callback to replace()\n\n  function fcamelCase(all, letter) {\n    return letter.toUpperCase();\n  } // Convert dashed to camelCase; used by the css and data modules\n  // Support: IE <=9 - 11, Edge 12 - 15\n  // Microsoft forgot to hump their vendor prefix (#9572)\n\n\n  function camelCase(string) {\n    return string.replace(rmsPrefix, \"ms-\").replace(rdashAlpha, fcamelCase);\n  }\n\n  var acceptData = function acceptData(owner) {\n    // Accepts only:\n    //  - Node\n    //    - Node.ELEMENT_NODE\n    //    - Node.DOCUMENT_NODE\n    //  - Object\n    //    - Any\n    return owner.nodeType === 1 || owner.nodeType === 9 || !+owner.nodeType;\n  };\n\n  function Data() {\n    this.expando = jQuery.expando + Data.uid++;\n  }\n\n  Data.uid = 1;\n  Data.prototype = {\n    cache: function cache(owner) {\n      // Check if the owner object already has a cache\n      var value = owner[this.expando]; // If not, create one\n\n      if (!value) {\n        value = {}; // We can accept data for non-element nodes in modern browsers,\n        // but we should not, see #8335.\n        // Always return an empty object.\n\n        if (acceptData(owner)) {\n          // If it is a node unlikely to be stringify-ed or looped over\n          // use plain assignment\n          if (owner.nodeType) {\n            owner[this.expando] = value; // Otherwise secure it in a non-enumerable property\n            // configurable must be true to allow the property to be\n            // deleted when data is removed\n          } else {\n            Object.defineProperty(owner, this.expando, {\n              value: value,\n              configurable: true\n            });\n          }\n        }\n      }\n\n      return value;\n    },\n    set: function set(owner, data, value) {\n      var prop,\n          cache = this.cache(owner); // Handle: [ owner, key, value ] args\n      // Always use camelCase key (gh-2257)\n\n      if (typeof data === \"string\") {\n        cache[camelCase(data)] = value; // Handle: [ owner, { properties } ] args\n      } else {\n        // Copy the properties one-by-one to the cache object\n        for (prop in data) {\n          cache[camelCase(prop)] = data[prop];\n        }\n      }\n\n      return cache;\n    },\n    get: function get(owner, key) {\n      return key === undefined ? this.cache(owner) : // Always use camelCase key (gh-2257)\n      owner[this.expando] && owner[this.expando][camelCase(key)];\n    },\n    access: function access(owner, key, value) {\n      // In cases where either:\n      //\n      //   1. No key was specified\n      //   2. A string key was specified, but no value provided\n      //\n      // Take the \"read\" path and allow the get method to determine\n      // which value to return, respectively either:\n      //\n      //   1. The entire cache object\n      //   2. The data stored at the key\n      //\n      if (key === undefined || key && typeof key === \"string\" && value === undefined) {\n        return this.get(owner, key);\n      } // When the key is not a string, or both a key and value\n      // are specified, set or extend (existing objects) with either:\n      //\n      //   1. An object of properties\n      //   2. A key and value\n      //\n\n\n      this.set(owner, key, value); // Since the \"set\" path can have two possible entry points\n      // return the expected data based on which path was taken[*]\n\n      return value !== undefined ? value : key;\n    },\n    remove: function remove(owner, key) {\n      var i,\n          cache = owner[this.expando];\n\n      if (cache === undefined) {\n        return;\n      }\n\n      if (key !== undefined) {\n        // Support array or space separated string of keys\n        if (Array.isArray(key)) {\n          // If key is an array of keys...\n          // We always set camelCase keys, so remove that.\n          key = key.map(camelCase);\n        } else {\n          key = camelCase(key); // If a key with the spaces exists, use it.\n          // Otherwise, create an array by matching non-whitespace\n\n          key = key in cache ? [key] : key.match(rnothtmlwhite) || [];\n        }\n\n        i = key.length;\n\n        while (i--) {\n          delete cache[key[i]];\n        }\n      } // Remove the expando if there's no more data\n\n\n      if (key === undefined || jQuery.isEmptyObject(cache)) {\n        // Support: Chrome <=35 - 45\n        // Webkit & Blink performance suffers when deleting properties\n        // from DOM nodes, so set to undefined instead\n        // https://bugs.chromium.org/p/chromium/issues/detail?id=378607 (bug restricted)\n        if (owner.nodeType) {\n          owner[this.expando] = undefined;\n        } else {\n          delete owner[this.expando];\n        }\n      }\n    },\n    hasData: function hasData(owner) {\n      var cache = owner[this.expando];\n      return cache !== undefined && !jQuery.isEmptyObject(cache);\n    }\n  };\n  var dataPriv = new Data();\n  var dataUser = new Data(); //\tImplementation Summary\n  //\n  //\t1. Enforce API surface and semantic compatibility with 1.9.x branch\n  //\t2. Improve the module's maintainability by reducing the storage\n  //\t\tpaths to a single mechanism.\n  //\t3. Use the same single mechanism to support \"private\" and \"user\" data.\n  //\t4. _Never_ expose \"private\" data to user code (TODO: Drop _data, _removeData)\n  //\t5. Avoid exposing implementation details on user objects (eg. expando properties)\n  //\t6. Provide a clear path for implementation upgrade to WeakMap in 2014\n\n  var rbrace = /^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,\n      rmultiDash = /[A-Z]/g;\n\n  function getData(data) {\n    if (data === \"true\") {\n      return true;\n    }\n\n    if (data === \"false\") {\n      return false;\n    }\n\n    if (data === \"null\") {\n      return null;\n    } // Only convert to a number if it doesn't change the string\n\n\n    if (data === +data + \"\") {\n      return +data;\n    }\n\n    if (rbrace.test(data)) {\n      return JSON.parse(data);\n    }\n\n    return data;\n  }\n\n  function dataAttr(elem, key, data) {\n    var name; // If nothing was found internally, try to fetch any\n    // data from the HTML5 data-* attribute\n\n    if (data === undefined && elem.nodeType === 1) {\n      name = \"data-\" + key.replace(rmultiDash, \"-$&\").toLowerCase();\n      data = elem.getAttribute(name);\n\n      if (typeof data === \"string\") {\n        try {\n          data = getData(data);\n        } catch (e) {} // Make sure we set the data so it isn't changed later\n\n\n        dataUser.set(elem, key, data);\n      } else {\n        data = undefined;\n      }\n    }\n\n    return data;\n  }\n\n  jQuery.extend({\n    hasData: function hasData(elem) {\n      return dataUser.hasData(elem) || dataPriv.hasData(elem);\n    },\n    data: function data(elem, name, _data) {\n      return dataUser.access(elem, name, _data);\n    },\n    removeData: function removeData(elem, name) {\n      dataUser.remove(elem, name);\n    },\n    // TODO: Now that all calls to _data and _removeData have been replaced\n    // with direct calls to dataPriv methods, these can be deprecated.\n    _data: function _data(elem, name, data) {\n      return dataPriv.access(elem, name, data);\n    },\n    _removeData: function _removeData(elem, name) {\n      dataPriv.remove(elem, name);\n    }\n  });\n  jQuery.fn.extend({\n    data: function data(key, value) {\n      var i,\n          name,\n          data,\n          elem = this[0],\n          attrs = elem && elem.attributes; // Gets all values\n\n      if (key === undefined) {\n        if (this.length) {\n          data = dataUser.get(elem);\n\n          if (elem.nodeType === 1 && !dataPriv.get(elem, \"hasDataAttrs\")) {\n            i = attrs.length;\n\n            while (i--) {\n              // Support: IE 11 only\n              // The attrs elements can be null (#14894)\n              if (attrs[i]) {\n                name = attrs[i].name;\n\n                if (name.indexOf(\"data-\") === 0) {\n                  name = camelCase(name.slice(5));\n                  dataAttr(elem, name, data[name]);\n                }\n              }\n            }\n\n            dataPriv.set(elem, \"hasDataAttrs\", true);\n          }\n        }\n\n        return data;\n      } // Sets multiple values\n\n\n      if (_typeof(key) === \"object\") {\n        return this.each(function () {\n          dataUser.set(this, key);\n        });\n      }\n\n      return access(this, function (value) {\n        var data; // The calling jQuery object (element matches) is not empty\n        // (and therefore has an element appears at this[ 0 ]) and the\n        // `value` parameter was not undefined. An empty jQuery object\n        // will result in `undefined` for elem = this[ 0 ] which will\n        // throw an exception if an attempt to read a data cache is made.\n\n        if (elem && value === undefined) {\n          // Attempt to get data from the cache\n          // The key will always be camelCased in Data\n          data = dataUser.get(elem, key);\n\n          if (data !== undefined) {\n            return data;\n          } // Attempt to \"discover\" the data in\n          // HTML5 custom data-* attrs\n\n\n          data = dataAttr(elem, key);\n\n          if (data !== undefined) {\n            return data;\n          } // We tried really hard, but the data doesn't exist.\n\n\n          return;\n        } // Set the data...\n\n\n        this.each(function () {\n          // We always store the camelCased key\n          dataUser.set(this, key, value);\n        });\n      }, null, value, arguments.length > 1, null, true);\n    },\n    removeData: function removeData(key) {\n      return this.each(function () {\n        dataUser.remove(this, key);\n      });\n    }\n  });\n  jQuery.extend({\n    queue: function queue(elem, type, data) {\n      var queue;\n\n      if (elem) {\n        type = (type || \"fx\") + \"queue\";\n        queue = dataPriv.get(elem, type); // Speed up dequeue by getting out quickly if this is just a lookup\n\n        if (data) {\n          if (!queue || Array.isArray(data)) {\n            queue = dataPriv.access(elem, type, jQuery.makeArray(data));\n          } else {\n            queue.push(data);\n          }\n        }\n\n        return queue || [];\n      }\n    },\n    dequeue: function dequeue(elem, type) {\n      type = type || \"fx\";\n\n      var queue = jQuery.queue(elem, type),\n          startLength = queue.length,\n          fn = queue.shift(),\n          hooks = jQuery._queueHooks(elem, type),\n          next = function next() {\n        jQuery.dequeue(elem, type);\n      }; // If the fx queue is dequeued, always remove the progress sentinel\n\n\n      if (fn === \"inprogress\") {\n        fn = queue.shift();\n        startLength--;\n      }\n\n      if (fn) {\n        // Add a progress sentinel to prevent the fx queue from being\n        // automatically dequeued\n        if (type === \"fx\") {\n          queue.unshift(\"inprogress\");\n        } // Clear up the last queue stop function\n\n\n        delete hooks.stop;\n        fn.call(elem, next, hooks);\n      }\n\n      if (!startLength && hooks) {\n        hooks.empty.fire();\n      }\n    },\n    // Not public - generate a queueHooks object, or return the current one\n    _queueHooks: function _queueHooks(elem, type) {\n      var key = type + \"queueHooks\";\n      return dataPriv.get(elem, key) || dataPriv.access(elem, key, {\n        empty: jQuery.Callbacks(\"once memory\").add(function () {\n          dataPriv.remove(elem, [type + \"queue\", key]);\n        })\n      });\n    }\n  });\n  jQuery.fn.extend({\n    queue: function queue(type, data) {\n      var setter = 2;\n\n      if (typeof type !== \"string\") {\n        data = type;\n        type = \"fx\";\n        setter--;\n      }\n\n      if (arguments.length < setter) {\n        return jQuery.queue(this[0], type);\n      }\n\n      return data === undefined ? this : this.each(function () {\n        var queue = jQuery.queue(this, type, data); // Ensure a hooks for this queue\n\n        jQuery._queueHooks(this, type);\n\n        if (type === \"fx\" && queue[0] !== \"inprogress\") {\n          jQuery.dequeue(this, type);\n        }\n      });\n    },\n    dequeue: function dequeue(type) {\n      return this.each(function () {\n        jQuery.dequeue(this, type);\n      });\n    },\n    clearQueue: function clearQueue(type) {\n      return this.queue(type || \"fx\", []);\n    },\n    // Get a promise resolved when queues of a certain type\n    // are emptied (fx is the type by default)\n    promise: function promise(type, obj) {\n      var tmp,\n          count = 1,\n          defer = jQuery.Deferred(),\n          elements = this,\n          i = this.length,\n          resolve = function resolve() {\n        if (! --count) {\n          defer.resolveWith(elements, [elements]);\n        }\n      };\n\n      if (typeof type !== \"string\") {\n        obj = type;\n        type = undefined;\n      }\n\n      type = type || \"fx\";\n\n      while (i--) {\n        tmp = dataPriv.get(elements[i], type + \"queueHooks\");\n\n        if (tmp && tmp.empty) {\n          count++;\n          tmp.empty.add(resolve);\n        }\n      }\n\n      resolve();\n      return defer.promise(obj);\n    }\n  });\n  var pnum = /[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/.source;\n  var rcssNum = new RegExp(\"^(?:([+-])=|)(\" + pnum + \")([a-z%]*)$\", \"i\");\n  var cssExpand = [\"Top\", \"Right\", \"Bottom\", \"Left\"];\n  var documentElement = document.documentElement;\n\n  var isAttached = function isAttached(elem) {\n    return jQuery.contains(elem.ownerDocument, elem);\n  },\n      composed = {\n    composed: true\n  }; // Support: IE 9 - 11+, Edge 12 - 18+, iOS 10.0 - 10.2 only\n  // Check attachment across shadow DOM boundaries when possible (gh-3504)\n  // Support: iOS 10.0-10.2 only\n  // Early iOS 10 versions support `attachShadow` but not `getRootNode`,\n  // leading to errors. We need to check for `getRootNode`.\n\n\n  if (documentElement.getRootNode) {\n    isAttached = function isAttached(elem) {\n      return jQuery.contains(elem.ownerDocument, elem) || elem.getRootNode(composed) === elem.ownerDocument;\n    };\n  }\n\n  var isHiddenWithinTree = function isHiddenWithinTree(elem, el) {\n    // isHiddenWithinTree might be called from jQuery#filter function;\n    // in that case, element will be second argument\n    elem = el || elem; // Inline style trumps all\n\n    return elem.style.display === \"none\" || elem.style.display === \"\" && // Otherwise, check computed style\n    // Support: Firefox <=43 - 45\n    // Disconnected elements can have computed display: none, so first confirm that elem is\n    // in the document.\n    isAttached(elem) && jQuery.css(elem, \"display\") === \"none\";\n  };\n\n  var swap = function swap(elem, options, callback, args) {\n    var ret,\n        name,\n        old = {}; // Remember the old values, and insert the new ones\n\n    for (name in options) {\n      old[name] = elem.style[name];\n      elem.style[name] = options[name];\n    }\n\n    ret = callback.apply(elem, args || []); // Revert the old values\n\n    for (name in options) {\n      elem.style[name] = old[name];\n    }\n\n    return ret;\n  };\n\n  function adjustCSS(elem, prop, valueParts, tween) {\n    var adjusted,\n        scale,\n        maxIterations = 20,\n        currentValue = tween ? function () {\n      return tween.cur();\n    } : function () {\n      return jQuery.css(elem, prop, \"\");\n    },\n        initial = currentValue(),\n        unit = valueParts && valueParts[3] || (jQuery.cssNumber[prop] ? \"\" : \"px\"),\n        // Starting value computation is required for potential unit mismatches\n    initialInUnit = elem.nodeType && (jQuery.cssNumber[prop] || unit !== \"px\" && +initial) && rcssNum.exec(jQuery.css(elem, prop));\n\n    if (initialInUnit && initialInUnit[3] !== unit) {\n      // Support: Firefox <=54\n      // Halve the iteration target value to prevent interference from CSS upper bounds (gh-2144)\n      initial = initial / 2; // Trust units reported by jQuery.css\n\n      unit = unit || initialInUnit[3]; // Iteratively approximate from a nonzero starting point\n\n      initialInUnit = +initial || 1;\n\n      while (maxIterations--) {\n        // Evaluate and update our best guess (doubling guesses that zero out).\n        // Finish if the scale equals or crosses 1 (making the old*new product non-positive).\n        jQuery.style(elem, prop, initialInUnit + unit);\n\n        if ((1 - scale) * (1 - (scale = currentValue() / initial || 0.5)) <= 0) {\n          maxIterations = 0;\n        }\n\n        initialInUnit = initialInUnit / scale;\n      }\n\n      initialInUnit = initialInUnit * 2;\n      jQuery.style(elem, prop, initialInUnit + unit); // Make sure we update the tween properties later on\n\n      valueParts = valueParts || [];\n    }\n\n    if (valueParts) {\n      initialInUnit = +initialInUnit || +initial || 0; // Apply relative offset (+=/-=) if specified\n\n      adjusted = valueParts[1] ? initialInUnit + (valueParts[1] + 1) * valueParts[2] : +valueParts[2];\n\n      if (tween) {\n        tween.unit = unit;\n        tween.start = initialInUnit;\n        tween.end = adjusted;\n      }\n    }\n\n    return adjusted;\n  }\n\n  var defaultDisplayMap = {};\n\n  function getDefaultDisplay(elem) {\n    var temp,\n        doc = elem.ownerDocument,\n        nodeName = elem.nodeName,\n        display = defaultDisplayMap[nodeName];\n\n    if (display) {\n      return display;\n    }\n\n    temp = doc.body.appendChild(doc.createElement(nodeName));\n    display = jQuery.css(temp, \"display\");\n    temp.parentNode.removeChild(temp);\n\n    if (display === \"none\") {\n      display = \"block\";\n    }\n\n    defaultDisplayMap[nodeName] = display;\n    return display;\n  }\n\n  function showHide(elements, show) {\n    var display,\n        elem,\n        values = [],\n        index = 0,\n        length = elements.length; // Determine new display value for elements that need to change\n\n    for (; index < length; index++) {\n      elem = elements[index];\n\n      if (!elem.style) {\n        continue;\n      }\n\n      display = elem.style.display;\n\n      if (show) {\n        // Since we force visibility upon cascade-hidden elements, an immediate (and slow)\n        // check is required in this first loop unless we have a nonempty display value (either\n        // inline or about-to-be-restored)\n        if (display === \"none\") {\n          values[index] = dataPriv.get(elem, \"display\") || null;\n\n          if (!values[index]) {\n            elem.style.display = \"\";\n          }\n        }\n\n        if (elem.style.display === \"\" && isHiddenWithinTree(elem)) {\n          values[index] = getDefaultDisplay(elem);\n        }\n      } else {\n        if (display !== \"none\") {\n          values[index] = \"none\"; // Remember what we're overwriting\n\n          dataPriv.set(elem, \"display\", display);\n        }\n      }\n    } // Set the display of the elements in a second loop to avoid constant reflow\n\n\n    for (index = 0; index < length; index++) {\n      if (values[index] != null) {\n        elements[index].style.display = values[index];\n      }\n    }\n\n    return elements;\n  }\n\n  jQuery.fn.extend({\n    show: function show() {\n      return showHide(this, true);\n    },\n    hide: function hide() {\n      return showHide(this);\n    },\n    toggle: function toggle(state) {\n      if (typeof state === \"boolean\") {\n        return state ? this.show() : this.hide();\n      }\n\n      return this.each(function () {\n        if (isHiddenWithinTree(this)) {\n          jQuery(this).show();\n        } else {\n          jQuery(this).hide();\n        }\n      });\n    }\n  });\n  var rcheckableType = /^(?:checkbox|radio)$/i;\n  var rtagName = /<([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)/i;\n  var rscriptType = /^$|^module$|\\/(?:java|ecma)script/i; // We have to close these tags to support XHTML (#13200)\n\n  var wrapMap = {\n    // Support: IE <=9 only\n    option: [1, \"<select multiple='multiple'>\", \"</select>\"],\n    // XHTML parsers do not magically insert elements in the\n    // same way that tag soup parsers do. So we cannot shorten\n    // this by omitting <tbody> or other required elements.\n    thead: [1, \"<table>\", \"</table>\"],\n    col: [2, \"<table><colgroup>\", \"</colgroup></table>\"],\n    tr: [2, \"<table><tbody>\", \"</tbody></table>\"],\n    td: [3, \"<table><tbody><tr>\", \"</tr></tbody></table>\"],\n    _default: [0, \"\", \"\"]\n  }; // Support: IE <=9 only\n\n  wrapMap.optgroup = wrapMap.option;\n  wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\n  wrapMap.th = wrapMap.td;\n\n  function getAll(context, tag) {\n    // Support: IE <=9 - 11 only\n    // Use typeof to avoid zero-argument method invocation on host objects (#15151)\n    var ret;\n\n    if (typeof context.getElementsByTagName !== \"undefined\") {\n      ret = context.getElementsByTagName(tag || \"*\");\n    } else if (typeof context.querySelectorAll !== \"undefined\") {\n      ret = context.querySelectorAll(tag || \"*\");\n    } else {\n      ret = [];\n    }\n\n    if (tag === undefined || tag && nodeName(context, tag)) {\n      return jQuery.merge([context], ret);\n    }\n\n    return ret;\n  } // Mark scripts as having already been evaluated\n\n\n  function setGlobalEval(elems, refElements) {\n    var i = 0,\n        l = elems.length;\n\n    for (; i < l; i++) {\n      dataPriv.set(elems[i], \"globalEval\", !refElements || dataPriv.get(refElements[i], \"globalEval\"));\n    }\n  }\n\n  var rhtml = /<|&#?\\w+;/;\n\n  function buildFragment(elems, context, scripts, selection, ignored) {\n    var elem,\n        tmp,\n        tag,\n        wrap,\n        attached,\n        j,\n        fragment = context.createDocumentFragment(),\n        nodes = [],\n        i = 0,\n        l = elems.length;\n\n    for (; i < l; i++) {\n      elem = elems[i];\n\n      if (elem || elem === 0) {\n        // Add nodes directly\n        if (toType(elem) === \"object\") {\n          // Support: Android <=4.0 only, PhantomJS 1 only\n          // push.apply(_, arraylike) throws on ancient WebKit\n          jQuery.merge(nodes, elem.nodeType ? [elem] : elem); // Convert non-html into a text node\n        } else if (!rhtml.test(elem)) {\n          nodes.push(context.createTextNode(elem)); // Convert html into DOM nodes\n        } else {\n          tmp = tmp || fragment.appendChild(context.createElement(\"div\")); // Deserialize a standard representation\n\n          tag = (rtagName.exec(elem) || [\"\", \"\"])[1].toLowerCase();\n          wrap = wrapMap[tag] || wrapMap._default;\n          tmp.innerHTML = wrap[1] + jQuery.htmlPrefilter(elem) + wrap[2]; // Descend through wrappers to the right content\n\n          j = wrap[0];\n\n          while (j--) {\n            tmp = tmp.lastChild;\n          } // Support: Android <=4.0 only, PhantomJS 1 only\n          // push.apply(_, arraylike) throws on ancient WebKit\n\n\n          jQuery.merge(nodes, tmp.childNodes); // Remember the top-level container\n\n          tmp = fragment.firstChild; // Ensure the created nodes are orphaned (#12392)\n\n          tmp.textContent = \"\";\n        }\n      }\n    } // Remove wrapper from fragment\n\n\n    fragment.textContent = \"\";\n    i = 0;\n\n    while (elem = nodes[i++]) {\n      // Skip elements already in the context collection (trac-4087)\n      if (selection && jQuery.inArray(elem, selection) > -1) {\n        if (ignored) {\n          ignored.push(elem);\n        }\n\n        continue;\n      }\n\n      attached = isAttached(elem); // Append to fragment\n\n      tmp = getAll(fragment.appendChild(elem), \"script\"); // Preserve script evaluation history\n\n      if (attached) {\n        setGlobalEval(tmp);\n      } // Capture executables\n\n\n      if (scripts) {\n        j = 0;\n\n        while (elem = tmp[j++]) {\n          if (rscriptType.test(elem.type || \"\")) {\n            scripts.push(elem);\n          }\n        }\n      }\n    }\n\n    return fragment;\n  }\n\n  (function () {\n    var fragment = document.createDocumentFragment(),\n        div = fragment.appendChild(document.createElement(\"div\")),\n        input = document.createElement(\"input\"); // Support: Android 4.0 - 4.3 only\n    // Check state lost if the name is set (#11217)\n    // Support: Windows Web Apps (WWA)\n    // `name` and `type` must use .setAttribute for WWA (#14901)\n\n    input.setAttribute(\"type\", \"radio\");\n    input.setAttribute(\"checked\", \"checked\");\n    input.setAttribute(\"name\", \"t\");\n    div.appendChild(input); // Support: Android <=4.1 only\n    // Older WebKit doesn't clone checked state correctly in fragments\n\n    support.checkClone = div.cloneNode(true).cloneNode(true).lastChild.checked; // Support: IE <=11 only\n    // Make sure textarea (and checkbox) defaultValue is properly cloned\n\n    div.innerHTML = \"<textarea>x</textarea>\";\n    support.noCloneChecked = !!div.cloneNode(true).lastChild.defaultValue;\n  })();\n\n  var rkeyEvent = /^key/,\n      rmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/,\n      rtypenamespace = /^([^.]*)(?:\\.(.+)|)/;\n\n  function returnTrue() {\n    return true;\n  }\n\n  function returnFalse() {\n    return false;\n  } // Support: IE <=9 - 11+\n  // focus() and blur() are asynchronous, except when they are no-op.\n  // So expect focus to be synchronous when the element is already active,\n  // and blur to be synchronous when the element is not already active.\n  // (focus and blur are always synchronous in other supported browsers,\n  // this just defines when we can count on it).\n\n\n  function expectSync(elem, type) {\n    return elem === safeActiveElement() === (type === \"focus\");\n  } // Support: IE <=9 only\n  // Accessing document.activeElement can throw unexpectedly\n  // https://bugs.jquery.com/ticket/13393\n\n\n  function safeActiveElement() {\n    try {\n      return document.activeElement;\n    } catch (err) {}\n  }\n\n  function _on(elem, types, selector, data, fn, one) {\n    var origFn, type; // Types can be a map of types/handlers\n\n    if (_typeof(types) === \"object\") {\n      // ( types-Object, selector, data )\n      if (typeof selector !== \"string\") {\n        // ( types-Object, data )\n        data = data || selector;\n        selector = undefined;\n      }\n\n      for (type in types) {\n        _on(elem, type, selector, data, types[type], one);\n      }\n\n      return elem;\n    }\n\n    if (data == null && fn == null) {\n      // ( types, fn )\n      fn = selector;\n      data = selector = undefined;\n    } else if (fn == null) {\n      if (typeof selector === \"string\") {\n        // ( types, selector, fn )\n        fn = data;\n        data = undefined;\n      } else {\n        // ( types, data, fn )\n        fn = data;\n        data = selector;\n        selector = undefined;\n      }\n    }\n\n    if (fn === false) {\n      fn = returnFalse;\n    } else if (!fn) {\n      return elem;\n    }\n\n    if (one === 1) {\n      origFn = fn;\n\n      fn = function fn(event) {\n        // Can use an empty set, since event contains the info\n        jQuery().off(event);\n        return origFn.apply(this, arguments);\n      }; // Use same guid so caller can remove using origFn\n\n\n      fn.guid = origFn.guid || (origFn.guid = jQuery.guid++);\n    }\n\n    return elem.each(function () {\n      jQuery.event.add(this, types, fn, data, selector);\n    });\n  }\n  /*\n   * Helper functions for managing events -- not part of the public interface.\n   * Props to Dean Edwards' addEvent library for many of the ideas.\n   */\n\n\n  jQuery.event = {\n    global: {},\n    add: function add(elem, types, handler, data, selector) {\n      var handleObjIn,\n          eventHandle,\n          tmp,\n          events,\n          t,\n          handleObj,\n          special,\n          handlers,\n          type,\n          namespaces,\n          origType,\n          elemData = dataPriv.get(elem); // Don't attach events to noData or text/comment nodes (but allow plain objects)\n\n      if (!elemData) {\n        return;\n      } // Caller can pass in an object of custom data in lieu of the handler\n\n\n      if (handler.handler) {\n        handleObjIn = handler;\n        handler = handleObjIn.handler;\n        selector = handleObjIn.selector;\n      } // Ensure that invalid selectors throw exceptions at attach time\n      // Evaluate against documentElement in case elem is a non-element node (e.g., document)\n\n\n      if (selector) {\n        jQuery.find.matchesSelector(documentElement, selector);\n      } // Make sure that the handler has a unique ID, used to find/remove it later\n\n\n      if (!handler.guid) {\n        handler.guid = jQuery.guid++;\n      } // Init the element's event structure and main handler, if this is the first\n\n\n      if (!(events = elemData.events)) {\n        events = elemData.events = {};\n      }\n\n      if (!(eventHandle = elemData.handle)) {\n        eventHandle = elemData.handle = function (e) {\n          // Discard the second event of a jQuery.event.trigger() and\n          // when an event is called after a page has unloaded\n          return typeof jQuery !== \"undefined\" && jQuery.event.triggered !== e.type ? jQuery.event.dispatch.apply(elem, arguments) : undefined;\n        };\n      } // Handle multiple events separated by a space\n\n\n      types = (types || \"\").match(rnothtmlwhite) || [\"\"];\n      t = types.length;\n\n      while (t--) {\n        tmp = rtypenamespace.exec(types[t]) || [];\n        type = origType = tmp[1];\n        namespaces = (tmp[2] || \"\").split(\".\").sort(); // There *must* be a type, no attaching namespace-only handlers\n\n        if (!type) {\n          continue;\n        } // If event changes its type, use the special event handlers for the changed type\n\n\n        special = jQuery.event.special[type] || {}; // If selector defined, determine special event api type, otherwise given type\n\n        type = (selector ? special.delegateType : special.bindType) || type; // Update special based on newly reset type\n\n        special = jQuery.event.special[type] || {}; // handleObj is passed to all event handlers\n\n        handleObj = jQuery.extend({\n          type: type,\n          origType: origType,\n          data: data,\n          handler: handler,\n          guid: handler.guid,\n          selector: selector,\n          needsContext: selector && jQuery.expr.match.needsContext.test(selector),\n          namespace: namespaces.join(\".\")\n        }, handleObjIn); // Init the event handler queue if we're the first\n\n        if (!(handlers = events[type])) {\n          handlers = events[type] = [];\n          handlers.delegateCount = 0; // Only use addEventListener if the special events handler returns false\n\n          if (!special.setup || special.setup.call(elem, data, namespaces, eventHandle) === false) {\n            if (elem.addEventListener) {\n              elem.addEventListener(type, eventHandle);\n            }\n          }\n        }\n\n        if (special.add) {\n          special.add.call(elem, handleObj);\n\n          if (!handleObj.handler.guid) {\n            handleObj.handler.guid = handler.guid;\n          }\n        } // Add to the element's handler list, delegates in front\n\n\n        if (selector) {\n          handlers.splice(handlers.delegateCount++, 0, handleObj);\n        } else {\n          handlers.push(handleObj);\n        } // Keep track of which events have ever been used, for event optimization\n\n\n        jQuery.event.global[type] = true;\n      }\n    },\n    // Detach an event or set of events from an element\n    remove: function remove(elem, types, handler, selector, mappedTypes) {\n      var j,\n          origCount,\n          tmp,\n          events,\n          t,\n          handleObj,\n          special,\n          handlers,\n          type,\n          namespaces,\n          origType,\n          elemData = dataPriv.hasData(elem) && dataPriv.get(elem);\n\n      if (!elemData || !(events = elemData.events)) {\n        return;\n      } // Once for each type.namespace in types; type may be omitted\n\n\n      types = (types || \"\").match(rnothtmlwhite) || [\"\"];\n      t = types.length;\n\n      while (t--) {\n        tmp = rtypenamespace.exec(types[t]) || [];\n        type = origType = tmp[1];\n        namespaces = (tmp[2] || \"\").split(\".\").sort(); // Unbind all events (on this namespace, if provided) for the element\n\n        if (!type) {\n          for (type in events) {\n            jQuery.event.remove(elem, type + types[t], handler, selector, true);\n          }\n\n          continue;\n        }\n\n        special = jQuery.event.special[type] || {};\n        type = (selector ? special.delegateType : special.bindType) || type;\n        handlers = events[type] || [];\n        tmp = tmp[2] && new RegExp(\"(^|\\\\.)\" + namespaces.join(\"\\\\.(?:.*\\\\.|)\") + \"(\\\\.|$)\"); // Remove matching events\n\n        origCount = j = handlers.length;\n\n        while (j--) {\n          handleObj = handlers[j];\n\n          if ((mappedTypes || origType === handleObj.origType) && (!handler || handler.guid === handleObj.guid) && (!tmp || tmp.test(handleObj.namespace)) && (!selector || selector === handleObj.selector || selector === \"**\" && handleObj.selector)) {\n            handlers.splice(j, 1);\n\n            if (handleObj.selector) {\n              handlers.delegateCount--;\n            }\n\n            if (special.remove) {\n              special.remove.call(elem, handleObj);\n            }\n          }\n        } // Remove generic event handler if we removed something and no more handlers exist\n        // (avoids potential for endless recursion during removal of special event handlers)\n\n\n        if (origCount && !handlers.length) {\n          if (!special.teardown || special.teardown.call(elem, namespaces, elemData.handle) === false) {\n            jQuery.removeEvent(elem, type, elemData.handle);\n          }\n\n          delete events[type];\n        }\n      } // Remove data and the expando if it's no longer used\n\n\n      if (jQuery.isEmptyObject(events)) {\n        dataPriv.remove(elem, \"handle events\");\n      }\n    },\n    dispatch: function dispatch(nativeEvent) {\n      // Make a writable jQuery.Event from the native event object\n      var event = jQuery.event.fix(nativeEvent);\n      var i,\n          j,\n          ret,\n          matched,\n          handleObj,\n          handlerQueue,\n          args = new Array(arguments.length),\n          handlers = (dataPriv.get(this, \"events\") || {})[event.type] || [],\n          special = jQuery.event.special[event.type] || {}; // Use the fix-ed jQuery.Event rather than the (read-only) native event\n\n      args[0] = event;\n\n      for (i = 1; i < arguments.length; i++) {\n        args[i] = arguments[i];\n      }\n\n      event.delegateTarget = this; // Call the preDispatch hook for the mapped type, and let it bail if desired\n\n      if (special.preDispatch && special.preDispatch.call(this, event) === false) {\n        return;\n      } // Determine handlers\n\n\n      handlerQueue = jQuery.event.handlers.call(this, event, handlers); // Run delegates first; they may want to stop propagation beneath us\n\n      i = 0;\n\n      while ((matched = handlerQueue[i++]) && !event.isPropagationStopped()) {\n        event.currentTarget = matched.elem;\n        j = 0;\n\n        while ((handleObj = matched.handlers[j++]) && !event.isImmediatePropagationStopped()) {\n          // If the event is namespaced, then each handler is only invoked if it is\n          // specially universal or its namespaces are a superset of the event's.\n          if (!event.rnamespace || handleObj.namespace === false || event.rnamespace.test(handleObj.namespace)) {\n            event.handleObj = handleObj;\n            event.data = handleObj.data;\n            ret = ((jQuery.event.special[handleObj.origType] || {}).handle || handleObj.handler).apply(matched.elem, args);\n\n            if (ret !== undefined) {\n              if ((event.result = ret) === false) {\n                event.preventDefault();\n                event.stopPropagation();\n              }\n            }\n          }\n        }\n      } // Call the postDispatch hook for the mapped type\n\n\n      if (special.postDispatch) {\n        special.postDispatch.call(this, event);\n      }\n\n      return event.result;\n    },\n    handlers: function handlers(event, _handlers) {\n      var i,\n          handleObj,\n          sel,\n          matchedHandlers,\n          matchedSelectors,\n          handlerQueue = [],\n          delegateCount = _handlers.delegateCount,\n          cur = event.target; // Find delegate handlers\n\n      if (delegateCount && // Support: IE <=9\n      // Black-hole SVG <use> instance trees (trac-13180)\n      cur.nodeType && // Support: Firefox <=42\n      // Suppress spec-violating clicks indicating a non-primary pointer button (trac-3861)\n      // https://www.w3.org/TR/DOM-Level-3-Events/#event-type-click\n      // Support: IE 11 only\n      // ...but not arrow key \"clicks\" of radio inputs, which can have `button` -1 (gh-2343)\n      !(event.type === \"click\" && event.button >= 1)) {\n        for (; cur !== this; cur = cur.parentNode || this) {\n          // Don't check non-elements (#13208)\n          // Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)\n          if (cur.nodeType === 1 && !(event.type === \"click\" && cur.disabled === true)) {\n            matchedHandlers = [];\n            matchedSelectors = {};\n\n            for (i = 0; i < delegateCount; i++) {\n              handleObj = _handlers[i]; // Don't conflict with Object.prototype properties (#13203)\n\n              sel = handleObj.selector + \" \";\n\n              if (matchedSelectors[sel] === undefined) {\n                matchedSelectors[sel] = handleObj.needsContext ? jQuery(sel, this).index(cur) > -1 : jQuery.find(sel, this, null, [cur]).length;\n              }\n\n              if (matchedSelectors[sel]) {\n                matchedHandlers.push(handleObj);\n              }\n            }\n\n            if (matchedHandlers.length) {\n              handlerQueue.push({\n                elem: cur,\n                handlers: matchedHandlers\n              });\n            }\n          }\n        }\n      } // Add the remaining (directly-bound) handlers\n\n\n      cur = this;\n\n      if (delegateCount < _handlers.length) {\n        handlerQueue.push({\n          elem: cur,\n          handlers: _handlers.slice(delegateCount)\n        });\n      }\n\n      return handlerQueue;\n    },\n    addProp: function addProp(name, hook) {\n      Object.defineProperty(jQuery.Event.prototype, name, {\n        enumerable: true,\n        configurable: true,\n        get: isFunction(hook) ? function () {\n          if (this.originalEvent) {\n            return hook(this.originalEvent);\n          }\n        } : function () {\n          if (this.originalEvent) {\n            return this.originalEvent[name];\n          }\n        },\n        set: function set(value) {\n          Object.defineProperty(this, name, {\n            enumerable: true,\n            configurable: true,\n            writable: true,\n            value: value\n          });\n        }\n      });\n    },\n    fix: function fix(originalEvent) {\n      return originalEvent[jQuery.expando] ? originalEvent : new jQuery.Event(originalEvent);\n    },\n    special: {\n      load: {\n        // Prevent triggered image.load events from bubbling to window.load\n        noBubble: true\n      },\n      click: {\n        // Utilize native event to ensure correct state for checkable inputs\n        setup: function setup(data) {\n          // For mutual compressibility with _default, replace `this` access with a local var.\n          // `|| data` is dead code meant only to preserve the variable through minification.\n          var el = this || data; // Claim the first handler\n\n          if (rcheckableType.test(el.type) && el.click && nodeName(el, \"input\")) {\n            // dataPriv.set( el, \"click\", ... )\n            leverageNative(el, \"click\", returnTrue);\n          } // Return false to allow normal processing in the caller\n\n\n          return false;\n        },\n        trigger: function trigger(data) {\n          // For mutual compressibility with _default, replace `this` access with a local var.\n          // `|| data` is dead code meant only to preserve the variable through minification.\n          var el = this || data; // Force setup before triggering a click\n\n          if (rcheckableType.test(el.type) && el.click && nodeName(el, \"input\")) {\n            leverageNative(el, \"click\");\n          } // Return non-false to allow normal event-path propagation\n\n\n          return true;\n        },\n        // For cross-browser consistency, suppress native .click() on links\n        // Also prevent it if we're currently inside a leveraged native-event stack\n        _default: function _default(event) {\n          var target = event.target;\n          return rcheckableType.test(target.type) && target.click && nodeName(target, \"input\") && dataPriv.get(target, \"click\") || nodeName(target, \"a\");\n        }\n      },\n      beforeunload: {\n        postDispatch: function postDispatch(event) {\n          // Support: Firefox 20+\n          // Firefox doesn't alert if the returnValue field is not set.\n          if (event.result !== undefined && event.originalEvent) {\n            event.originalEvent.returnValue = event.result;\n          }\n        }\n      }\n    }\n  }; // Ensure the presence of an event listener that handles manually-triggered\n  // synthetic events by interrupting progress until reinvoked in response to\n  // *native* events that it fires directly, ensuring that state changes have\n  // already occurred before other listeners are invoked.\n\n  function leverageNative(el, type, expectSync) {\n    // Missing expectSync indicates a trigger call, which must force setup through jQuery.event.add\n    if (!expectSync) {\n      if (dataPriv.get(el, type) === undefined) {\n        jQuery.event.add(el, type, returnTrue);\n      }\n\n      return;\n    } // Register the controller as a special universal handler for all event namespaces\n\n\n    dataPriv.set(el, type, false);\n    jQuery.event.add(el, type, {\n      namespace: false,\n      handler: function handler(event) {\n        var notAsync,\n            result,\n            saved = dataPriv.get(this, type);\n\n        if (event.isTrigger & 1 && this[type]) {\n          // Interrupt processing of the outer synthetic .trigger()ed event\n          // Saved data should be false in such cases, but might be a leftover capture object\n          // from an async native handler (gh-4350)\n          if (!saved.length) {\n            // Store arguments for use when handling the inner native event\n            // There will always be at least one argument (an event object), so this array\n            // will not be confused with a leftover capture object.\n            saved = _slice.call(arguments);\n            dataPriv.set(this, type, saved); // Trigger the native event and capture its result\n            // Support: IE <=9 - 11+\n            // focus() and blur() are asynchronous\n\n            notAsync = expectSync(this, type);\n            this[type]();\n            result = dataPriv.get(this, type);\n\n            if (saved !== result || notAsync) {\n              dataPriv.set(this, type, false);\n            } else {\n              result = {};\n            }\n\n            if (saved !== result) {\n              // Cancel the outer synthetic event\n              event.stopImmediatePropagation();\n              event.preventDefault();\n              return result.value;\n            } // If this is an inner synthetic event for an event with a bubbling surrogate\n            // (focus or blur), assume that the surrogate already propagated from triggering the\n            // native event and prevent that from happening again here.\n            // This technically gets the ordering wrong w.r.t. to `.trigger()` (in which the\n            // bubbling surrogate propagates *after* the non-bubbling base), but that seems\n            // less bad than duplication.\n\n          } else if ((jQuery.event.special[type] || {}).delegateType) {\n            event.stopPropagation();\n          } // If this is a native event triggered above, everything is now in order\n          // Fire an inner synthetic event with the original arguments\n\n        } else if (saved.length) {\n          // ...and capture the result\n          dataPriv.set(this, type, {\n            value: jQuery.event.trigger( // Support: IE <=9 - 11+\n            // Extend with the prototype to reset the above stopImmediatePropagation()\n            jQuery.extend(saved[0], jQuery.Event.prototype), saved.slice(1), this)\n          }); // Abort handling of the native event\n\n          event.stopImmediatePropagation();\n        }\n      }\n    });\n  }\n\n  jQuery.removeEvent = function (elem, type, handle) {\n    // This \"if\" is needed for plain objects\n    if (elem.removeEventListener) {\n      elem.removeEventListener(type, handle);\n    }\n  };\n\n  jQuery.Event = function (src, props) {\n    // Allow instantiation without the 'new' keyword\n    if (!(this instanceof jQuery.Event)) {\n      return new jQuery.Event(src, props);\n    } // Event object\n\n\n    if (src && src.type) {\n      this.originalEvent = src;\n      this.type = src.type; // Events bubbling up the document may have been marked as prevented\n      // by a handler lower down the tree; reflect the correct value.\n\n      this.isDefaultPrevented = src.defaultPrevented || src.defaultPrevented === undefined && // Support: Android <=2.3 only\n      src.returnValue === false ? returnTrue : returnFalse; // Create target properties\n      // Support: Safari <=6 - 7 only\n      // Target should not be a text node (#504, #13143)\n\n      this.target = src.target && src.target.nodeType === 3 ? src.target.parentNode : src.target;\n      this.currentTarget = src.currentTarget;\n      this.relatedTarget = src.relatedTarget; // Event type\n    } else {\n      this.type = src;\n    } // Put explicitly provided properties onto the event object\n\n\n    if (props) {\n      jQuery.extend(this, props);\n    } // Create a timestamp if incoming event doesn't have one\n\n\n    this.timeStamp = src && src.timeStamp || Date.now(); // Mark it as fixed\n\n    this[jQuery.expando] = true;\n  }; // jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding\n  // https://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html\n\n\n  jQuery.Event.prototype = {\n    constructor: jQuery.Event,\n    isDefaultPrevented: returnFalse,\n    isPropagationStopped: returnFalse,\n    isImmediatePropagationStopped: returnFalse,\n    isSimulated: false,\n    preventDefault: function preventDefault() {\n      var e = this.originalEvent;\n      this.isDefaultPrevented = returnTrue;\n\n      if (e && !this.isSimulated) {\n        e.preventDefault();\n      }\n    },\n    stopPropagation: function stopPropagation() {\n      var e = this.originalEvent;\n      this.isPropagationStopped = returnTrue;\n\n      if (e && !this.isSimulated) {\n        e.stopPropagation();\n      }\n    },\n    stopImmediatePropagation: function stopImmediatePropagation() {\n      var e = this.originalEvent;\n      this.isImmediatePropagationStopped = returnTrue;\n\n      if (e && !this.isSimulated) {\n        e.stopImmediatePropagation();\n      }\n\n      this.stopPropagation();\n    }\n  }; // Includes all common event props including KeyEvent and MouseEvent specific props\n\n  jQuery.each({\n    altKey: true,\n    bubbles: true,\n    cancelable: true,\n    changedTouches: true,\n    ctrlKey: true,\n    detail: true,\n    eventPhase: true,\n    metaKey: true,\n    pageX: true,\n    pageY: true,\n    shiftKey: true,\n    view: true,\n    \"char\": true,\n    code: true,\n    charCode: true,\n    key: true,\n    keyCode: true,\n    button: true,\n    buttons: true,\n    clientX: true,\n    clientY: true,\n    offsetX: true,\n    offsetY: true,\n    pointerId: true,\n    pointerType: true,\n    screenX: true,\n    screenY: true,\n    targetTouches: true,\n    toElement: true,\n    touches: true,\n    which: function which(event) {\n      var button = event.button; // Add which for key events\n\n      if (event.which == null && rkeyEvent.test(event.type)) {\n        return event.charCode != null ? event.charCode : event.keyCode;\n      } // Add which for click: 1 === left; 2 === middle; 3 === right\n\n\n      if (!event.which && button !== undefined && rmouseEvent.test(event.type)) {\n        if (button & 1) {\n          return 1;\n        }\n\n        if (button & 2) {\n          return 3;\n        }\n\n        if (button & 4) {\n          return 2;\n        }\n\n        return 0;\n      }\n\n      return event.which;\n    }\n  }, jQuery.event.addProp);\n  jQuery.each({\n    focus: \"focusin\",\n    blur: \"focusout\"\n  }, function (type, delegateType) {\n    jQuery.event.special[type] = {\n      // Utilize native event if possible so blur/focus sequence is correct\n      setup: function setup() {\n        // Claim the first handler\n        // dataPriv.set( this, \"focus\", ... )\n        // dataPriv.set( this, \"blur\", ... )\n        leverageNative(this, type, expectSync); // Return false to allow normal processing in the caller\n\n        return false;\n      },\n      trigger: function trigger() {\n        // Force setup before trigger\n        leverageNative(this, type); // Return non-false to allow normal event-path propagation\n\n        return true;\n      },\n      delegateType: delegateType\n    };\n  }); // Create mouseenter/leave events using mouseover/out and event-time checks\n  // so that event delegation works in jQuery.\n  // Do the same for pointerenter/pointerleave and pointerover/pointerout\n  //\n  // Support: Safari 7 only\n  // Safari sends mouseenter too often; see:\n  // https://bugs.chromium.org/p/chromium/issues/detail?id=470258\n  // for the description of the bug (it existed in older Chrome versions as well).\n\n  jQuery.each({\n    mouseenter: \"mouseover\",\n    mouseleave: \"mouseout\",\n    pointerenter: \"pointerover\",\n    pointerleave: \"pointerout\"\n  }, function (orig, fix) {\n    jQuery.event.special[orig] = {\n      delegateType: fix,\n      bindType: fix,\n      handle: function handle(event) {\n        var ret,\n            target = this,\n            related = event.relatedTarget,\n            handleObj = event.handleObj; // For mouseenter/leave call the handler if related is outside the target.\n        // NB: No relatedTarget if the mouse left/entered the browser window\n\n        if (!related || related !== target && !jQuery.contains(target, related)) {\n          event.type = handleObj.origType;\n          ret = handleObj.handler.apply(this, arguments);\n          event.type = fix;\n        }\n\n        return ret;\n      }\n    };\n  });\n  jQuery.fn.extend({\n    on: function on(types, selector, data, fn) {\n      return _on(this, types, selector, data, fn);\n    },\n    one: function one(types, selector, data, fn) {\n      return _on(this, types, selector, data, fn, 1);\n    },\n    off: function off(types, selector, fn) {\n      var handleObj, type;\n\n      if (types && types.preventDefault && types.handleObj) {\n        // ( event )  dispatched jQuery.Event\n        handleObj = types.handleObj;\n        jQuery(types.delegateTarget).off(handleObj.namespace ? handleObj.origType + \".\" + handleObj.namespace : handleObj.origType, handleObj.selector, handleObj.handler);\n        return this;\n      }\n\n      if (_typeof(types) === \"object\") {\n        // ( types-object [, selector] )\n        for (type in types) {\n          this.off(type, selector, types[type]);\n        }\n\n        return this;\n      }\n\n      if (selector === false || typeof selector === \"function\") {\n        // ( types [, fn] )\n        fn = selector;\n        selector = undefined;\n      }\n\n      if (fn === false) {\n        fn = returnFalse;\n      }\n\n      return this.each(function () {\n        jQuery.event.remove(this, types, fn, selector);\n      });\n    }\n  });\n  var\n  /* eslint-disable max-len */\n  // See https://github.com/eslint/eslint/issues/3229\n  rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)[^>]*)\\/>/gi,\n\n  /* eslint-enable */\n  // Support: IE <=10 - 11, Edge 12 - 13 only\n  // In IE/Edge using regex groups here causes severe slowdowns.\n  // See https://connect.microsoft.com/IE/feedback/details/1736512/\n  rnoInnerhtml = /<script|<style|<link/i,\n      // checked=\"checked\" or checked\n  rchecked = /checked\\s*(?:[^=]|=\\s*.checked.)/i,\n      rcleanScript = /^\\s*<!(?:\\[CDATA\\[|--)|(?:\\]\\]|--)>\\s*$/g; // Prefer a tbody over its parent table for containing new rows\n\n  function manipulationTarget(elem, content) {\n    if (nodeName(elem, \"table\") && nodeName(content.nodeType !== 11 ? content : content.firstChild, \"tr\")) {\n      return jQuery(elem).children(\"tbody\")[0] || elem;\n    }\n\n    return elem;\n  } // Replace/restore the type attribute of script elements for safe DOM manipulation\n\n\n  function disableScript(elem) {\n    elem.type = (elem.getAttribute(\"type\") !== null) + \"/\" + elem.type;\n    return elem;\n  }\n\n  function restoreScript(elem) {\n    if ((elem.type || \"\").slice(0, 5) === \"true/\") {\n      elem.type = elem.type.slice(5);\n    } else {\n      elem.removeAttribute(\"type\");\n    }\n\n    return elem;\n  }\n\n  function cloneCopyEvent(src, dest) {\n    var i, l, type, pdataOld, pdataCur, udataOld, udataCur, events;\n\n    if (dest.nodeType !== 1) {\n      return;\n    } // 1. Copy private data: events, handlers, etc.\n\n\n    if (dataPriv.hasData(src)) {\n      pdataOld = dataPriv.access(src);\n      pdataCur = dataPriv.set(dest, pdataOld);\n      events = pdataOld.events;\n\n      if (events) {\n        delete pdataCur.handle;\n        pdataCur.events = {};\n\n        for (type in events) {\n          for (i = 0, l = events[type].length; i < l; i++) {\n            jQuery.event.add(dest, type, events[type][i]);\n          }\n        }\n      }\n    } // 2. Copy user data\n\n\n    if (dataUser.hasData(src)) {\n      udataOld = dataUser.access(src);\n      udataCur = jQuery.extend({}, udataOld);\n      dataUser.set(dest, udataCur);\n    }\n  } // Fix IE bugs, see support tests\n\n\n  function fixInput(src, dest) {\n    var nodeName = dest.nodeName.toLowerCase(); // Fails to persist the checked state of a cloned checkbox or radio button.\n\n    if (nodeName === \"input\" && rcheckableType.test(src.type)) {\n      dest.checked = src.checked; // Fails to return the selected option to the default selected state when cloning options\n    } else if (nodeName === \"input\" || nodeName === \"textarea\") {\n      dest.defaultValue = src.defaultValue;\n    }\n  }\n\n  function domManip(collection, args, callback, ignored) {\n    // Flatten any nested arrays\n    args = concat.apply([], args);\n    var fragment,\n        first,\n        scripts,\n        hasScripts,\n        node,\n        doc,\n        i = 0,\n        l = collection.length,\n        iNoClone = l - 1,\n        value = args[0],\n        valueIsFunction = isFunction(value); // We can't cloneNode fragments that contain checked, in WebKit\n\n    if (valueIsFunction || l > 1 && typeof value === \"string\" && !support.checkClone && rchecked.test(value)) {\n      return collection.each(function (index) {\n        var self = collection.eq(index);\n\n        if (valueIsFunction) {\n          args[0] = value.call(this, index, self.html());\n        }\n\n        domManip(self, args, callback, ignored);\n      });\n    }\n\n    if (l) {\n      fragment = buildFragment(args, collection[0].ownerDocument, false, collection, ignored);\n      first = fragment.firstChild;\n\n      if (fragment.childNodes.length === 1) {\n        fragment = first;\n      } // Require either new content or an interest in ignored elements to invoke the callback\n\n\n      if (first || ignored) {\n        scripts = jQuery.map(getAll(fragment, \"script\"), disableScript);\n        hasScripts = scripts.length; // Use the original fragment for the last item\n        // instead of the first because it can end up\n        // being emptied incorrectly in certain situations (#8070).\n\n        for (; i < l; i++) {\n          node = fragment;\n\n          if (i !== iNoClone) {\n            node = jQuery.clone(node, true, true); // Keep references to cloned scripts for later restoration\n\n            if (hasScripts) {\n              // Support: Android <=4.0 only, PhantomJS 1 only\n              // push.apply(_, arraylike) throws on ancient WebKit\n              jQuery.merge(scripts, getAll(node, \"script\"));\n            }\n          }\n\n          callback.call(collection[i], node, i);\n        }\n\n        if (hasScripts) {\n          doc = scripts[scripts.length - 1].ownerDocument; // Reenable scripts\n\n          jQuery.map(scripts, restoreScript); // Evaluate executable scripts on first document insertion\n\n          for (i = 0; i < hasScripts; i++) {\n            node = scripts[i];\n\n            if (rscriptType.test(node.type || \"\") && !dataPriv.access(node, \"globalEval\") && jQuery.contains(doc, node)) {\n              if (node.src && (node.type || \"\").toLowerCase() !== \"module\") {\n                // Optional AJAX dependency, but won't run scripts if not present\n                if (jQuery._evalUrl && !node.noModule) {\n                  jQuery._evalUrl(node.src, {\n                    nonce: node.nonce || node.getAttribute(\"nonce\")\n                  });\n                }\n              } else {\n                DOMEval(node.textContent.replace(rcleanScript, \"\"), node, doc);\n              }\n            }\n          }\n        }\n      }\n    }\n\n    return collection;\n  }\n\n  function _remove(elem, selector, keepData) {\n    var node,\n        nodes = selector ? jQuery.filter(selector, elem) : elem,\n        i = 0;\n\n    for (; (node = nodes[i]) != null; i++) {\n      if (!keepData && node.nodeType === 1) {\n        jQuery.cleanData(getAll(node));\n      }\n\n      if (node.parentNode) {\n        if (keepData && isAttached(node)) {\n          setGlobalEval(getAll(node, \"script\"));\n        }\n\n        node.parentNode.removeChild(node);\n      }\n    }\n\n    return elem;\n  }\n\n  jQuery.extend({\n    htmlPrefilter: function htmlPrefilter(html) {\n      return html.replace(rxhtmlTag, \"<$1></$2>\");\n    },\n    clone: function clone(elem, dataAndEvents, deepDataAndEvents) {\n      var i,\n          l,\n          srcElements,\n          destElements,\n          clone = elem.cloneNode(true),\n          inPage = isAttached(elem); // Fix IE cloning issues\n\n      if (!support.noCloneChecked && (elem.nodeType === 1 || elem.nodeType === 11) && !jQuery.isXMLDoc(elem)) {\n        // We eschew Sizzle here for performance reasons: https://jsperf.com/getall-vs-sizzle/2\n        destElements = getAll(clone);\n        srcElements = getAll(elem);\n\n        for (i = 0, l = srcElements.length; i < l; i++) {\n          fixInput(srcElements[i], destElements[i]);\n        }\n      } // Copy the events from the original to the clone\n\n\n      if (dataAndEvents) {\n        if (deepDataAndEvents) {\n          srcElements = srcElements || getAll(elem);\n          destElements = destElements || getAll(clone);\n\n          for (i = 0, l = srcElements.length; i < l; i++) {\n            cloneCopyEvent(srcElements[i], destElements[i]);\n          }\n        } else {\n          cloneCopyEvent(elem, clone);\n        }\n      } // Preserve script evaluation history\n\n\n      destElements = getAll(clone, \"script\");\n\n      if (destElements.length > 0) {\n        setGlobalEval(destElements, !inPage && getAll(elem, \"script\"));\n      } // Return the cloned set\n\n\n      return clone;\n    },\n    cleanData: function cleanData(elems) {\n      var data,\n          elem,\n          type,\n          special = jQuery.event.special,\n          i = 0;\n\n      for (; (elem = elems[i]) !== undefined; i++) {\n        if (acceptData(elem)) {\n          if (data = elem[dataPriv.expando]) {\n            if (data.events) {\n              for (type in data.events) {\n                if (special[type]) {\n                  jQuery.event.remove(elem, type); // This is a shortcut to avoid jQuery.event.remove's overhead\n                } else {\n                  jQuery.removeEvent(elem, type, data.handle);\n                }\n              }\n            } // Support: Chrome <=35 - 45+\n            // Assign undefined instead of using delete, see Data#remove\n\n\n            elem[dataPriv.expando] = undefined;\n          }\n\n          if (elem[dataUser.expando]) {\n            // Support: Chrome <=35 - 45+\n            // Assign undefined instead of using delete, see Data#remove\n            elem[dataUser.expando] = undefined;\n          }\n        }\n      }\n    }\n  });\n  jQuery.fn.extend({\n    detach: function detach(selector) {\n      return _remove(this, selector, true);\n    },\n    remove: function remove(selector) {\n      return _remove(this, selector);\n    },\n    text: function text(value) {\n      return access(this, function (value) {\n        return value === undefined ? jQuery.text(this) : this.empty().each(function () {\n          if (this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9) {\n            this.textContent = value;\n          }\n        });\n      }, null, value, arguments.length);\n    },\n    append: function append() {\n      return domManip(this, arguments, function (elem) {\n        if (this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9) {\n          var target = manipulationTarget(this, elem);\n          target.appendChild(elem);\n        }\n      });\n    },\n    prepend: function prepend() {\n      return domManip(this, arguments, function (elem) {\n        if (this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9) {\n          var target = manipulationTarget(this, elem);\n          target.insertBefore(elem, target.firstChild);\n        }\n      });\n    },\n    before: function before() {\n      return domManip(this, arguments, function (elem) {\n        if (this.parentNode) {\n          this.parentNode.insertBefore(elem, this);\n        }\n      });\n    },\n    after: function after() {\n      return domManip(this, arguments, function (elem) {\n        if (this.parentNode) {\n          this.parentNode.insertBefore(elem, this.nextSibling);\n        }\n      });\n    },\n    empty: function empty() {\n      var elem,\n          i = 0;\n\n      for (; (elem = this[i]) != null; i++) {\n        if (elem.nodeType === 1) {\n          // Prevent memory leaks\n          jQuery.cleanData(getAll(elem, false)); // Remove any remaining nodes\n\n          elem.textContent = \"\";\n        }\n      }\n\n      return this;\n    },\n    clone: function clone(dataAndEvents, deepDataAndEvents) {\n      dataAndEvents = dataAndEvents == null ? false : dataAndEvents;\n      deepDataAndEvents = deepDataAndEvents == null ? dataAndEvents : deepDataAndEvents;\n      return this.map(function () {\n        return jQuery.clone(this, dataAndEvents, deepDataAndEvents);\n      });\n    },\n    html: function html(value) {\n      return access(this, function (value) {\n        var elem = this[0] || {},\n            i = 0,\n            l = this.length;\n\n        if (value === undefined && elem.nodeType === 1) {\n          return elem.innerHTML;\n        } // See if we can take a shortcut and just use innerHTML\n\n\n        if (typeof value === \"string\" && !rnoInnerhtml.test(value) && !wrapMap[(rtagName.exec(value) || [\"\", \"\"])[1].toLowerCase()]) {\n          value = jQuery.htmlPrefilter(value);\n\n          try {\n            for (; i < l; i++) {\n              elem = this[i] || {}; // Remove element nodes and prevent memory leaks\n\n              if (elem.nodeType === 1) {\n                jQuery.cleanData(getAll(elem, false));\n                elem.innerHTML = value;\n              }\n            }\n\n            elem = 0; // If using innerHTML throws an exception, use the fallback method\n          } catch (e) {}\n        }\n\n        if (elem) {\n          this.empty().append(value);\n        }\n      }, null, value, arguments.length);\n    },\n    replaceWith: function replaceWith() {\n      var ignored = []; // Make the changes, replacing each non-ignored context element with the new content\n\n      return domManip(this, arguments, function (elem) {\n        var parent = this.parentNode;\n\n        if (jQuery.inArray(this, ignored) < 0) {\n          jQuery.cleanData(getAll(this));\n\n          if (parent) {\n            parent.replaceChild(elem, this);\n          }\n        } // Force callback invocation\n\n      }, ignored);\n    }\n  });\n  jQuery.each({\n    appendTo: \"append\",\n    prependTo: \"prepend\",\n    insertBefore: \"before\",\n    insertAfter: \"after\",\n    replaceAll: \"replaceWith\"\n  }, function (name, original) {\n    jQuery.fn[name] = function (selector) {\n      var elems,\n          ret = [],\n          insert = jQuery(selector),\n          last = insert.length - 1,\n          i = 0;\n\n      for (; i <= last; i++) {\n        elems = i === last ? this : this.clone(true);\n        jQuery(insert[i])[original](elems); // Support: Android <=4.0 only, PhantomJS 1 only\n        // .get() because push.apply(_, arraylike) throws on ancient WebKit\n\n        push.apply(ret, elems.get());\n      }\n\n      return this.pushStack(ret);\n    };\n  });\n  var rnumnonpx = new RegExp(\"^(\" + pnum + \")(?!px)[a-z%]+$\", \"i\");\n\n  var getStyles = function getStyles(elem) {\n    // Support: IE <=11 only, Firefox <=30 (#15098, #14150)\n    // IE throws on elements created in popups\n    // FF meanwhile throws on frame elements through \"defaultView.getComputedStyle\"\n    var view = elem.ownerDocument.defaultView;\n\n    if (!view || !view.opener) {\n      view = window;\n    }\n\n    return view.getComputedStyle(elem);\n  };\n\n  var rboxStyle = new RegExp(cssExpand.join(\"|\"), \"i\");\n\n  (function () {\n    // Executing both pixelPosition & boxSizingReliable tests require only one layout\n    // so they're executed at the same time to save the second computation.\n    function computeStyleTests() {\n      // This is a singleton, we need to execute it only once\n      if (!div) {\n        return;\n      }\n\n      container.style.cssText = \"position:absolute;left:-11111px;width:60px;\" + \"margin-top:1px;padding:0;border:0\";\n      div.style.cssText = \"position:relative;display:block;box-sizing:border-box;overflow:scroll;\" + \"margin:auto;border:1px;padding:1px;\" + \"width:60%;top:1%\";\n      documentElement.appendChild(container).appendChild(div);\n      var divStyle = window.getComputedStyle(div);\n      pixelPositionVal = divStyle.top !== \"1%\"; // Support: Android 4.0 - 4.3 only, Firefox <=3 - 44\n\n      reliableMarginLeftVal = roundPixelMeasures(divStyle.marginLeft) === 12; // Support: Android 4.0 - 4.3 only, Safari <=9.1 - 10.1, iOS <=7.0 - 9.3\n      // Some styles come back with percentage values, even though they shouldn't\n\n      div.style.right = \"60%\";\n      pixelBoxStylesVal = roundPixelMeasures(divStyle.right) === 36; // Support: IE 9 - 11 only\n      // Detect misreporting of content dimensions for box-sizing:border-box elements\n\n      boxSizingReliableVal = roundPixelMeasures(divStyle.width) === 36; // Support: IE 9 only\n      // Detect overflow:scroll screwiness (gh-3699)\n      // Support: Chrome <=64\n      // Don't get tricked when zoom affects offsetWidth (gh-4029)\n\n      div.style.position = \"absolute\";\n      scrollboxSizeVal = roundPixelMeasures(div.offsetWidth / 3) === 12;\n      documentElement.removeChild(container); // Nullify the div so it wouldn't be stored in the memory and\n      // it will also be a sign that checks already performed\n\n      div = null;\n    }\n\n    function roundPixelMeasures(measure) {\n      return Math.round(parseFloat(measure));\n    }\n\n    var pixelPositionVal,\n        boxSizingReliableVal,\n        scrollboxSizeVal,\n        pixelBoxStylesVal,\n        reliableMarginLeftVal,\n        container = document.createElement(\"div\"),\n        div = document.createElement(\"div\"); // Finish early in limited (non-browser) environments\n\n    if (!div.style) {\n      return;\n    } // Support: IE <=9 - 11 only\n    // Style of cloned element affects source element cloned (#8908)\n\n\n    div.style.backgroundClip = \"content-box\";\n    div.cloneNode(true).style.backgroundClip = \"\";\n    support.clearCloneStyle = div.style.backgroundClip === \"content-box\";\n    jQuery.extend(support, {\n      boxSizingReliable: function boxSizingReliable() {\n        computeStyleTests();\n        return boxSizingReliableVal;\n      },\n      pixelBoxStyles: function pixelBoxStyles() {\n        computeStyleTests();\n        return pixelBoxStylesVal;\n      },\n      pixelPosition: function pixelPosition() {\n        computeStyleTests();\n        return pixelPositionVal;\n      },\n      reliableMarginLeft: function reliableMarginLeft() {\n        computeStyleTests();\n        return reliableMarginLeftVal;\n      },\n      scrollboxSize: function scrollboxSize() {\n        computeStyleTests();\n        return scrollboxSizeVal;\n      }\n    });\n  })();\n\n  function curCSS(elem, name, computed) {\n    var width,\n        minWidth,\n        maxWidth,\n        ret,\n        // Support: Firefox 51+\n    // Retrieving style before computed somehow\n    // fixes an issue with getting wrong values\n    // on detached elements\n    style = elem.style;\n    computed = computed || getStyles(elem); // getPropertyValue is needed for:\n    //   .css('filter') (IE 9 only, #12537)\n    //   .css('--customProperty) (#3144)\n\n    if (computed) {\n      ret = computed.getPropertyValue(name) || computed[name];\n\n      if (ret === \"\" && !isAttached(elem)) {\n        ret = jQuery.style(elem, name);\n      } // A tribute to the \"awesome hack by Dean Edwards\"\n      // Android Browser returns percentage for some values,\n      // but width seems to be reliably pixels.\n      // This is against the CSSOM draft spec:\n      // https://drafts.csswg.org/cssom/#resolved-values\n\n\n      if (!support.pixelBoxStyles() && rnumnonpx.test(ret) && rboxStyle.test(name)) {\n        // Remember the original values\n        width = style.width;\n        minWidth = style.minWidth;\n        maxWidth = style.maxWidth; // Put in the new values to get a computed value out\n\n        style.minWidth = style.maxWidth = style.width = ret;\n        ret = computed.width; // Revert the changed values\n\n        style.width = width;\n        style.minWidth = minWidth;\n        style.maxWidth = maxWidth;\n      }\n    }\n\n    return ret !== undefined ? // Support: IE <=9 - 11 only\n    // IE returns zIndex value as an integer.\n    ret + \"\" : ret;\n  }\n\n  function addGetHookIf(conditionFn, hookFn) {\n    // Define the hook, we'll check on the first run if it's really needed.\n    return {\n      get: function get() {\n        if (conditionFn()) {\n          // Hook not needed (or it's not possible to use it due\n          // to missing dependency), remove it.\n          delete this.get;\n          return;\n        } // Hook needed; redefine it so that the support test is not executed again.\n\n\n        return (this.get = hookFn).apply(this, arguments);\n      }\n    };\n  }\n\n  var cssPrefixes = [\"Webkit\", \"Moz\", \"ms\"],\n      emptyStyle = document.createElement(\"div\").style,\n      vendorProps = {}; // Return a vendor-prefixed property or undefined\n\n  function vendorPropName(name) {\n    // Check for vendor prefixed names\n    var capName = name[0].toUpperCase() + name.slice(1),\n        i = cssPrefixes.length;\n\n    while (i--) {\n      name = cssPrefixes[i] + capName;\n\n      if (name in emptyStyle) {\n        return name;\n      }\n    }\n  } // Return a potentially-mapped jQuery.cssProps or vendor prefixed property\n\n\n  function finalPropName(name) {\n    var _final = jQuery.cssProps[name] || vendorProps[name];\n\n    if (_final) {\n      return _final;\n    }\n\n    if (name in emptyStyle) {\n      return name;\n    }\n\n    return vendorProps[name] = vendorPropName(name) || name;\n  }\n\n  var // Swappable if display is none or starts with table\n  // except \"table\", \"table-cell\", or \"table-caption\"\n  // See here for display values: https://developer.mozilla.org/en-US/docs/CSS/display\n  rdisplayswap = /^(none|table(?!-c[ea]).+)/,\n      rcustomProp = /^--/,\n      cssShow = {\n    position: \"absolute\",\n    visibility: \"hidden\",\n    display: \"block\"\n  },\n      cssNormalTransform = {\n    letterSpacing: \"0\",\n    fontWeight: \"400\"\n  };\n\n  function setPositiveNumber(elem, value, subtract) {\n    // Any relative (+/-) values have already been\n    // normalized at this point\n    var matches = rcssNum.exec(value);\n    return matches ? // Guard against undefined \"subtract\", e.g., when used as in cssHooks\n    Math.max(0, matches[2] - (subtract || 0)) + (matches[3] || \"px\") : value;\n  }\n\n  function boxModelAdjustment(elem, dimension, box, isBorderBox, styles, computedVal) {\n    var i = dimension === \"width\" ? 1 : 0,\n        extra = 0,\n        delta = 0; // Adjustment may not be necessary\n\n    if (box === (isBorderBox ? \"border\" : \"content\")) {\n      return 0;\n    }\n\n    for (; i < 4; i += 2) {\n      // Both box models exclude margin\n      if (box === \"margin\") {\n        delta += jQuery.css(elem, box + cssExpand[i], true, styles);\n      } // If we get here with a content-box, we're seeking \"padding\" or \"border\" or \"margin\"\n\n\n      if (!isBorderBox) {\n        // Add padding\n        delta += jQuery.css(elem, \"padding\" + cssExpand[i], true, styles); // For \"border\" or \"margin\", add border\n\n        if (box !== \"padding\") {\n          delta += jQuery.css(elem, \"border\" + cssExpand[i] + \"Width\", true, styles); // But still keep track of it otherwise\n        } else {\n          extra += jQuery.css(elem, \"border\" + cssExpand[i] + \"Width\", true, styles);\n        } // If we get here with a border-box (content + padding + border), we're seeking \"content\" or\n        // \"padding\" or \"margin\"\n\n      } else {\n        // For \"content\", subtract padding\n        if (box === \"content\") {\n          delta -= jQuery.css(elem, \"padding\" + cssExpand[i], true, styles);\n        } // For \"content\" or \"padding\", subtract border\n\n\n        if (box !== \"margin\") {\n          delta -= jQuery.css(elem, \"border\" + cssExpand[i] + \"Width\", true, styles);\n        }\n      }\n    } // Account for positive content-box scroll gutter when requested by providing computedVal\n\n\n    if (!isBorderBox && computedVal >= 0) {\n      // offsetWidth/offsetHeight is a rounded sum of content, padding, scroll gutter, and border\n      // Assuming integer scroll gutter, subtract the rest and round down\n      delta += Math.max(0, Math.ceil(elem[\"offset\" + dimension[0].toUpperCase() + dimension.slice(1)] - computedVal - delta - extra - 0.5 // If offsetWidth/offsetHeight is unknown, then we can't determine content-box scroll gutter\n      // Use an explicit zero to avoid NaN (gh-3964)\n      )) || 0;\n    }\n\n    return delta;\n  }\n\n  function getWidthOrHeight(elem, dimension, extra) {\n    // Start with computed style\n    var styles = getStyles(elem),\n        // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-4322).\n    // Fake content-box until we know it's needed to know the true value.\n    boxSizingNeeded = !support.boxSizingReliable() || extra,\n        isBorderBox = boxSizingNeeded && jQuery.css(elem, \"boxSizing\", false, styles) === \"border-box\",\n        valueIsBorderBox = isBorderBox,\n        val = curCSS(elem, dimension, styles),\n        offsetProp = \"offset\" + dimension[0].toUpperCase() + dimension.slice(1); // Support: Firefox <=54\n    // Return a confounding non-pixel value or feign ignorance, as appropriate.\n\n    if (rnumnonpx.test(val)) {\n      if (!extra) {\n        return val;\n      }\n\n      val = \"auto\";\n    } // Fall back to offsetWidth/offsetHeight when value is \"auto\"\n    // This happens for inline elements with no explicit setting (gh-3571)\n    // Support: Android <=4.1 - 4.3 only\n    // Also use offsetWidth/offsetHeight for misreported inline dimensions (gh-3602)\n    // Support: IE 9-11 only\n    // Also use offsetWidth/offsetHeight for when box sizing is unreliable\n    // We use getClientRects() to check for hidden/disconnected.\n    // In those cases, the computed value can be trusted to be border-box\n\n\n    if ((!support.boxSizingReliable() && isBorderBox || val === \"auto\" || !parseFloat(val) && jQuery.css(elem, \"display\", false, styles) === \"inline\") && elem.getClientRects().length) {\n      isBorderBox = jQuery.css(elem, \"boxSizing\", false, styles) === \"border-box\"; // Where available, offsetWidth/offsetHeight approximate border box dimensions.\n      // Where not available (e.g., SVG), assume unreliable box-sizing and interpret the\n      // retrieved value as a content box dimension.\n\n      valueIsBorderBox = offsetProp in elem;\n\n      if (valueIsBorderBox) {\n        val = elem[offsetProp];\n      }\n    } // Normalize \"\" and auto\n\n\n    val = parseFloat(val) || 0; // Adjust for the element's box model\n\n    return val + boxModelAdjustment(elem, dimension, extra || (isBorderBox ? \"border\" : \"content\"), valueIsBorderBox, styles, // Provide the current computed size to request scroll gutter calculation (gh-3589)\n    val) + \"px\";\n  }\n\n  jQuery.extend({\n    // Add in style property hooks for overriding the default\n    // behavior of getting and setting a style property\n    cssHooks: {\n      opacity: {\n        get: function get(elem, computed) {\n          if (computed) {\n            // We should always get a number back from opacity\n            var ret = curCSS(elem, \"opacity\");\n            return ret === \"\" ? \"1\" : ret;\n          }\n        }\n      }\n    },\n    // Don't automatically add \"px\" to these possibly-unitless properties\n    cssNumber: {\n      \"animationIterationCount\": true,\n      \"columnCount\": true,\n      \"fillOpacity\": true,\n      \"flexGrow\": true,\n      \"flexShrink\": true,\n      \"fontWeight\": true,\n      \"gridArea\": true,\n      \"gridColumn\": true,\n      \"gridColumnEnd\": true,\n      \"gridColumnStart\": true,\n      \"gridRow\": true,\n      \"gridRowEnd\": true,\n      \"gridRowStart\": true,\n      \"lineHeight\": true,\n      \"opacity\": true,\n      \"order\": true,\n      \"orphans\": true,\n      \"widows\": true,\n      \"zIndex\": true,\n      \"zoom\": true\n    },\n    // Add in properties whose names you wish to fix before\n    // setting or getting the value\n    cssProps: {},\n    // Get and set the style property on a DOM Node\n    style: function style(elem, name, value, extra) {\n      // Don't set styles on text and comment nodes\n      if (!elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style) {\n        return;\n      } // Make sure that we're working with the right name\n\n\n      var ret,\n          type,\n          hooks,\n          origName = camelCase(name),\n          isCustomProp = rcustomProp.test(name),\n          style = elem.style; // Make sure that we're working with the right name. We don't\n      // want to query the value if it is a CSS custom property\n      // since they are user-defined.\n\n      if (!isCustomProp) {\n        name = finalPropName(origName);\n      } // Gets hook for the prefixed version, then unprefixed version\n\n\n      hooks = jQuery.cssHooks[name] || jQuery.cssHooks[origName]; // Check if we're setting a value\n\n      if (value !== undefined) {\n        type = _typeof(value); // Convert \"+=\" or \"-=\" to relative numbers (#7345)\n\n        if (type === \"string\" && (ret = rcssNum.exec(value)) && ret[1]) {\n          value = adjustCSS(elem, name, ret); // Fixes bug #9237\n\n          type = \"number\";\n        } // Make sure that null and NaN values aren't set (#7116)\n\n\n        if (value == null || value !== value) {\n          return;\n        } // If a number was passed in, add the unit (except for certain CSS properties)\n        // The isCustomProp check can be removed in jQuery 4.0 when we only auto-append\n        // \"px\" to a few hardcoded values.\n\n\n        if (type === \"number\" && !isCustomProp) {\n          value += ret && ret[3] || (jQuery.cssNumber[origName] ? \"\" : \"px\");\n        } // background-* props affect original clone's values\n\n\n        if (!support.clearCloneStyle && value === \"\" && name.indexOf(\"background\") === 0) {\n          style[name] = \"inherit\";\n        } // If a hook was provided, use that value, otherwise just set the specified value\n\n\n        if (!hooks || !(\"set\" in hooks) || (value = hooks.set(elem, value, extra)) !== undefined) {\n          if (isCustomProp) {\n            style.setProperty(name, value);\n          } else {\n            style[name] = value;\n          }\n        }\n      } else {\n        // If a hook was provided get the non-computed value from there\n        if (hooks && \"get\" in hooks && (ret = hooks.get(elem, false, extra)) !== undefined) {\n          return ret;\n        } // Otherwise just get the value from the style object\n\n\n        return style[name];\n      }\n    },\n    css: function css(elem, name, extra, styles) {\n      var val,\n          num,\n          hooks,\n          origName = camelCase(name),\n          isCustomProp = rcustomProp.test(name); // Make sure that we're working with the right name. We don't\n      // want to modify the value if it is a CSS custom property\n      // since they are user-defined.\n\n      if (!isCustomProp) {\n        name = finalPropName(origName);\n      } // Try prefixed name followed by the unprefixed name\n\n\n      hooks = jQuery.cssHooks[name] || jQuery.cssHooks[origName]; // If a hook was provided get the computed value from there\n\n      if (hooks && \"get\" in hooks) {\n        val = hooks.get(elem, true, extra);\n      } // Otherwise, if a way to get the computed value exists, use that\n\n\n      if (val === undefined) {\n        val = curCSS(elem, name, styles);\n      } // Convert \"normal\" to computed value\n\n\n      if (val === \"normal\" && name in cssNormalTransform) {\n        val = cssNormalTransform[name];\n      } // Make numeric if forced or a qualifier was provided and val looks numeric\n\n\n      if (extra === \"\" || extra) {\n        num = parseFloat(val);\n        return extra === true || isFinite(num) ? num || 0 : val;\n      }\n\n      return val;\n    }\n  });\n  jQuery.each([\"height\", \"width\"], function (i, dimension) {\n    jQuery.cssHooks[dimension] = {\n      get: function get(elem, computed, extra) {\n        if (computed) {\n          // Certain elements can have dimension info if we invisibly show them\n          // but it must have a current display style that would benefit\n          return rdisplayswap.test(jQuery.css(elem, \"display\")) && ( // Support: Safari 8+\n          // Table columns in Safari have non-zero offsetWidth & zero\n          // getBoundingClientRect().width unless display is changed.\n          // Support: IE <=11 only\n          // Running getBoundingClientRect on a disconnected node\n          // in IE throws an error.\n          !elem.getClientRects().length || !elem.getBoundingClientRect().width) ? swap(elem, cssShow, function () {\n            return getWidthOrHeight(elem, dimension, extra);\n          }) : getWidthOrHeight(elem, dimension, extra);\n        }\n      },\n      set: function set(elem, value, extra) {\n        var matches,\n            styles = getStyles(elem),\n            // Only read styles.position if the test has a chance to fail\n        // to avoid forcing a reflow.\n        scrollboxSizeBuggy = !support.scrollboxSize() && styles.position === \"absolute\",\n            // To avoid forcing a reflow, only fetch boxSizing if we need it (gh-3991)\n        boxSizingNeeded = scrollboxSizeBuggy || extra,\n            isBorderBox = boxSizingNeeded && jQuery.css(elem, \"boxSizing\", false, styles) === \"border-box\",\n            subtract = extra ? boxModelAdjustment(elem, dimension, extra, isBorderBox, styles) : 0; // Account for unreliable border-box dimensions by comparing offset* to computed and\n        // faking a content-box to get border and padding (gh-3699)\n\n        if (isBorderBox && scrollboxSizeBuggy) {\n          subtract -= Math.ceil(elem[\"offset\" + dimension[0].toUpperCase() + dimension.slice(1)] - parseFloat(styles[dimension]) - boxModelAdjustment(elem, dimension, \"border\", false, styles) - 0.5);\n        } // Convert to pixels if value adjustment is needed\n\n\n        if (subtract && (matches = rcssNum.exec(value)) && (matches[3] || \"px\") !== \"px\") {\n          elem.style[dimension] = value;\n          value = jQuery.css(elem, dimension);\n        }\n\n        return setPositiveNumber(elem, value, subtract);\n      }\n    };\n  });\n  jQuery.cssHooks.marginLeft = addGetHookIf(support.reliableMarginLeft, function (elem, computed) {\n    if (computed) {\n      return (parseFloat(curCSS(elem, \"marginLeft\")) || elem.getBoundingClientRect().left - swap(elem, {\n        marginLeft: 0\n      }, function () {\n        return elem.getBoundingClientRect().left;\n      })) + \"px\";\n    }\n  }); // These hooks are used by animate to expand properties\n\n  jQuery.each({\n    margin: \"\",\n    padding: \"\",\n    border: \"Width\"\n  }, function (prefix, suffix) {\n    jQuery.cssHooks[prefix + suffix] = {\n      expand: function expand(value) {\n        var i = 0,\n            expanded = {},\n            // Assumes a single number if not a string\n        parts = typeof value === \"string\" ? value.split(\" \") : [value];\n\n        for (; i < 4; i++) {\n          expanded[prefix + cssExpand[i] + suffix] = parts[i] || parts[i - 2] || parts[0];\n        }\n\n        return expanded;\n      }\n    };\n\n    if (prefix !== \"margin\") {\n      jQuery.cssHooks[prefix + suffix].set = setPositiveNumber;\n    }\n  });\n  jQuery.fn.extend({\n    css: function css(name, value) {\n      return access(this, function (elem, name, value) {\n        var styles,\n            len,\n            map = {},\n            i = 0;\n\n        if (Array.isArray(name)) {\n          styles = getStyles(elem);\n          len = name.length;\n\n          for (; i < len; i++) {\n            map[name[i]] = jQuery.css(elem, name[i], false, styles);\n          }\n\n          return map;\n        }\n\n        return value !== undefined ? jQuery.style(elem, name, value) : jQuery.css(elem, name);\n      }, name, value, arguments.length > 1);\n    }\n  });\n\n  function Tween(elem, options, prop, end, easing) {\n    return new Tween.prototype.init(elem, options, prop, end, easing);\n  }\n\n  jQuery.Tween = Tween;\n  Tween.prototype = {\n    constructor: Tween,\n    init: function init(elem, options, prop, end, easing, unit) {\n      this.elem = elem;\n      this.prop = prop;\n      this.easing = easing || jQuery.easing._default;\n      this.options = options;\n      this.start = this.now = this.cur();\n      this.end = end;\n      this.unit = unit || (jQuery.cssNumber[prop] ? \"\" : \"px\");\n    },\n    cur: function cur() {\n      var hooks = Tween.propHooks[this.prop];\n      return hooks && hooks.get ? hooks.get(this) : Tween.propHooks._default.get(this);\n    },\n    run: function run(percent) {\n      var eased,\n          hooks = Tween.propHooks[this.prop];\n\n      if (this.options.duration) {\n        this.pos = eased = jQuery.easing[this.easing](percent, this.options.duration * percent, 0, 1, this.options.duration);\n      } else {\n        this.pos = eased = percent;\n      }\n\n      this.now = (this.end - this.start) * eased + this.start;\n\n      if (this.options.step) {\n        this.options.step.call(this.elem, this.now, this);\n      }\n\n      if (hooks && hooks.set) {\n        hooks.set(this);\n      } else {\n        Tween.propHooks._default.set(this);\n      }\n\n      return this;\n    }\n  };\n  Tween.prototype.init.prototype = Tween.prototype;\n  Tween.propHooks = {\n    _default: {\n      get: function get(tween) {\n        var result; // Use a property on the element directly when it is not a DOM element,\n        // or when there is no matching style property that exists.\n\n        if (tween.elem.nodeType !== 1 || tween.elem[tween.prop] != null && tween.elem.style[tween.prop] == null) {\n          return tween.elem[tween.prop];\n        } // Passing an empty string as a 3rd parameter to .css will automatically\n        // attempt a parseFloat and fallback to a string if the parse fails.\n        // Simple values such as \"10px\" are parsed to Float;\n        // complex values such as \"rotate(1rad)\" are returned as-is.\n\n\n        result = jQuery.css(tween.elem, tween.prop, \"\"); // Empty strings, null, undefined and \"auto\" are converted to 0.\n\n        return !result || result === \"auto\" ? 0 : result;\n      },\n      set: function set(tween) {\n        // Use step hook for back compat.\n        // Use cssHook if its there.\n        // Use .style if available and use plain properties where available.\n        if (jQuery.fx.step[tween.prop]) {\n          jQuery.fx.step[tween.prop](tween);\n        } else if (tween.elem.nodeType === 1 && (jQuery.cssHooks[tween.prop] || tween.elem.style[finalPropName(tween.prop)] != null)) {\n          jQuery.style(tween.elem, tween.prop, tween.now + tween.unit);\n        } else {\n          tween.elem[tween.prop] = tween.now;\n        }\n      }\n    }\n  }; // Support: IE <=9 only\n  // Panic based approach to setting things on disconnected nodes\n\n  Tween.propHooks.scrollTop = Tween.propHooks.scrollLeft = {\n    set: function set(tween) {\n      if (tween.elem.nodeType && tween.elem.parentNode) {\n        tween.elem[tween.prop] = tween.now;\n      }\n    }\n  };\n  jQuery.easing = {\n    linear: function linear(p) {\n      return p;\n    },\n    swing: function swing(p) {\n      return 0.5 - Math.cos(p * Math.PI) / 2;\n    },\n    _default: \"swing\"\n  };\n  jQuery.fx = Tween.prototype.init; // Back compat <1.8 extension point\n\n  jQuery.fx.step = {};\n  var fxNow,\n      inProgress,\n      rfxtypes = /^(?:toggle|show|hide)$/,\n      rrun = /queueHooks$/;\n\n  function schedule() {\n    if (inProgress) {\n      if (document.hidden === false && window.requestAnimationFrame) {\n        window.requestAnimationFrame(schedule);\n      } else {\n        window.setTimeout(schedule, jQuery.fx.interval);\n      }\n\n      jQuery.fx.tick();\n    }\n  } // Animations created synchronously will run synchronously\n\n\n  function createFxNow() {\n    window.setTimeout(function () {\n      fxNow = undefined;\n    });\n    return fxNow = Date.now();\n  } // Generate parameters to create a standard animation\n\n\n  function genFx(type, includeWidth) {\n    var which,\n        i = 0,\n        attrs = {\n      height: type\n    }; // If we include width, step value is 1 to do all cssExpand values,\n    // otherwise step value is 2 to skip over Left and Right\n\n    includeWidth = includeWidth ? 1 : 0;\n\n    for (; i < 4; i += 2 - includeWidth) {\n      which = cssExpand[i];\n      attrs[\"margin\" + which] = attrs[\"padding\" + which] = type;\n    }\n\n    if (includeWidth) {\n      attrs.opacity = attrs.width = type;\n    }\n\n    return attrs;\n  }\n\n  function createTween(value, prop, animation) {\n    var tween,\n        collection = (Animation.tweeners[prop] || []).concat(Animation.tweeners[\"*\"]),\n        index = 0,\n        length = collection.length;\n\n    for (; index < length; index++) {\n      if (tween = collection[index].call(animation, prop, value)) {\n        // We're done with this property\n        return tween;\n      }\n    }\n  }\n\n  function defaultPrefilter(elem, props, opts) {\n    var prop,\n        value,\n        toggle,\n        hooks,\n        oldfire,\n        propTween,\n        restoreDisplay,\n        display,\n        isBox = \"width\" in props || \"height\" in props,\n        anim = this,\n        orig = {},\n        style = elem.style,\n        hidden = elem.nodeType && isHiddenWithinTree(elem),\n        dataShow = dataPriv.get(elem, \"fxshow\"); // Queue-skipping animations hijack the fx hooks\n\n    if (!opts.queue) {\n      hooks = jQuery._queueHooks(elem, \"fx\");\n\n      if (hooks.unqueued == null) {\n        hooks.unqueued = 0;\n        oldfire = hooks.empty.fire;\n\n        hooks.empty.fire = function () {\n          if (!hooks.unqueued) {\n            oldfire();\n          }\n        };\n      }\n\n      hooks.unqueued++;\n      anim.always(function () {\n        // Ensure the complete handler is called before this completes\n        anim.always(function () {\n          hooks.unqueued--;\n\n          if (!jQuery.queue(elem, \"fx\").length) {\n            hooks.empty.fire();\n          }\n        });\n      });\n    } // Detect show/hide animations\n\n\n    for (prop in props) {\n      value = props[prop];\n\n      if (rfxtypes.test(value)) {\n        delete props[prop];\n        toggle = toggle || value === \"toggle\";\n\n        if (value === (hidden ? \"hide\" : \"show\")) {\n          // Pretend to be hidden if this is a \"show\" and\n          // there is still data from a stopped show/hide\n          if (value === \"show\" && dataShow && dataShow[prop] !== undefined) {\n            hidden = true; // Ignore all other no-op show/hide data\n          } else {\n            continue;\n          }\n        }\n\n        orig[prop] = dataShow && dataShow[prop] || jQuery.style(elem, prop);\n      }\n    } // Bail out if this is a no-op like .hide().hide()\n\n\n    propTween = !jQuery.isEmptyObject(props);\n\n    if (!propTween && jQuery.isEmptyObject(orig)) {\n      return;\n    } // Restrict \"overflow\" and \"display\" styles during box animations\n\n\n    if (isBox && elem.nodeType === 1) {\n      // Support: IE <=9 - 11, Edge 12 - 15\n      // Record all 3 overflow attributes because IE does not infer the shorthand\n      // from identically-valued overflowX and overflowY and Edge just mirrors\n      // the overflowX value there.\n      opts.overflow = [style.overflow, style.overflowX, style.overflowY]; // Identify a display type, preferring old show/hide data over the CSS cascade\n\n      restoreDisplay = dataShow && dataShow.display;\n\n      if (restoreDisplay == null) {\n        restoreDisplay = dataPriv.get(elem, \"display\");\n      }\n\n      display = jQuery.css(elem, \"display\");\n\n      if (display === \"none\") {\n        if (restoreDisplay) {\n          display = restoreDisplay;\n        } else {\n          // Get nonempty value(s) by temporarily forcing visibility\n          showHide([elem], true);\n          restoreDisplay = elem.style.display || restoreDisplay;\n          display = jQuery.css(elem, \"display\");\n          showHide([elem]);\n        }\n      } // Animate inline elements as inline-block\n\n\n      if (display === \"inline\" || display === \"inline-block\" && restoreDisplay != null) {\n        if (jQuery.css(elem, \"float\") === \"none\") {\n          // Restore the original display value at the end of pure show/hide animations\n          if (!propTween) {\n            anim.done(function () {\n              style.display = restoreDisplay;\n            });\n\n            if (restoreDisplay == null) {\n              display = style.display;\n              restoreDisplay = display === \"none\" ? \"\" : display;\n            }\n          }\n\n          style.display = \"inline-block\";\n        }\n      }\n    }\n\n    if (opts.overflow) {\n      style.overflow = \"hidden\";\n      anim.always(function () {\n        style.overflow = opts.overflow[0];\n        style.overflowX = opts.overflow[1];\n        style.overflowY = opts.overflow[2];\n      });\n    } // Implement show/hide animations\n\n\n    propTween = false;\n\n    for (prop in orig) {\n      // General show/hide setup for this element animation\n      if (!propTween) {\n        if (dataShow) {\n          if (\"hidden\" in dataShow) {\n            hidden = dataShow.hidden;\n          }\n        } else {\n          dataShow = dataPriv.access(elem, \"fxshow\", {\n            display: restoreDisplay\n          });\n        } // Store hidden/visible for toggle so `.stop().toggle()` \"reverses\"\n\n\n        if (toggle) {\n          dataShow.hidden = !hidden;\n        } // Show elements before animating them\n\n\n        if (hidden) {\n          showHide([elem], true);\n        }\n        /* eslint-disable no-loop-func */\n\n\n        anim.done(function () {\n          /* eslint-enable no-loop-func */\n          // The final step of a \"hide\" animation is actually hiding the element\n          if (!hidden) {\n            showHide([elem]);\n          }\n\n          dataPriv.remove(elem, \"fxshow\");\n\n          for (prop in orig) {\n            jQuery.style(elem, prop, orig[prop]);\n          }\n        });\n      } // Per-property setup\n\n\n      propTween = createTween(hidden ? dataShow[prop] : 0, prop, anim);\n\n      if (!(prop in dataShow)) {\n        dataShow[prop] = propTween.start;\n\n        if (hidden) {\n          propTween.end = propTween.start;\n          propTween.start = 0;\n        }\n      }\n    }\n  }\n\n  function propFilter(props, specialEasing) {\n    var index, name, easing, value, hooks; // camelCase, specialEasing and expand cssHook pass\n\n    for (index in props) {\n      name = camelCase(index);\n      easing = specialEasing[name];\n      value = props[index];\n\n      if (Array.isArray(value)) {\n        easing = value[1];\n        value = props[index] = value[0];\n      }\n\n      if (index !== name) {\n        props[name] = value;\n        delete props[index];\n      }\n\n      hooks = jQuery.cssHooks[name];\n\n      if (hooks && \"expand\" in hooks) {\n        value = hooks.expand(value);\n        delete props[name]; // Not quite $.extend, this won't overwrite existing keys.\n        // Reusing 'index' because we have the correct \"name\"\n\n        for (index in value) {\n          if (!(index in props)) {\n            props[index] = value[index];\n            specialEasing[index] = easing;\n          }\n        }\n      } else {\n        specialEasing[name] = easing;\n      }\n    }\n  }\n\n  function Animation(elem, properties, options) {\n    var result,\n        stopped,\n        index = 0,\n        length = Animation.prefilters.length,\n        deferred = jQuery.Deferred().always(function () {\n      // Don't match elem in the :animated selector\n      delete tick.elem;\n    }),\n        tick = function tick() {\n      if (stopped) {\n        return false;\n      }\n\n      var currentTime = fxNow || createFxNow(),\n          remaining = Math.max(0, animation.startTime + animation.duration - currentTime),\n          // Support: Android 2.3 only\n      // Archaic crash bug won't allow us to use `1 - ( 0.5 || 0 )` (#12497)\n      temp = remaining / animation.duration || 0,\n          percent = 1 - temp,\n          index = 0,\n          length = animation.tweens.length;\n\n      for (; index < length; index++) {\n        animation.tweens[index].run(percent);\n      }\n\n      deferred.notifyWith(elem, [animation, percent, remaining]); // If there's more to do, yield\n\n      if (percent < 1 && length) {\n        return remaining;\n      } // If this was an empty animation, synthesize a final progress notification\n\n\n      if (!length) {\n        deferred.notifyWith(elem, [animation, 1, 0]);\n      } // Resolve the animation and report its conclusion\n\n\n      deferred.resolveWith(elem, [animation]);\n      return false;\n    },\n        animation = deferred.promise({\n      elem: elem,\n      props: jQuery.extend({}, properties),\n      opts: jQuery.extend(true, {\n        specialEasing: {},\n        easing: jQuery.easing._default\n      }, options),\n      originalProperties: properties,\n      originalOptions: options,\n      startTime: fxNow || createFxNow(),\n      duration: options.duration,\n      tweens: [],\n      createTween: function createTween(prop, end) {\n        var tween = jQuery.Tween(elem, animation.opts, prop, end, animation.opts.specialEasing[prop] || animation.opts.easing);\n        animation.tweens.push(tween);\n        return tween;\n      },\n      stop: function stop(gotoEnd) {\n        var index = 0,\n            // If we are going to the end, we want to run all the tweens\n        // otherwise we skip this part\n        length = gotoEnd ? animation.tweens.length : 0;\n\n        if (stopped) {\n          return this;\n        }\n\n        stopped = true;\n\n        for (; index < length; index++) {\n          animation.tweens[index].run(1);\n        } // Resolve when we played the last frame; otherwise, reject\n\n\n        if (gotoEnd) {\n          deferred.notifyWith(elem, [animation, 1, 0]);\n          deferred.resolveWith(elem, [animation, gotoEnd]);\n        } else {\n          deferred.rejectWith(elem, [animation, gotoEnd]);\n        }\n\n        return this;\n      }\n    }),\n        props = animation.props;\n\n    propFilter(props, animation.opts.specialEasing);\n\n    for (; index < length; index++) {\n      result = Animation.prefilters[index].call(animation, elem, props, animation.opts);\n\n      if (result) {\n        if (isFunction(result.stop)) {\n          jQuery._queueHooks(animation.elem, animation.opts.queue).stop = result.stop.bind(result);\n        }\n\n        return result;\n      }\n    }\n\n    jQuery.map(props, createTween, animation);\n\n    if (isFunction(animation.opts.start)) {\n      animation.opts.start.call(elem, animation);\n    } // Attach callbacks from options\n\n\n    animation.progress(animation.opts.progress).done(animation.opts.done, animation.opts.complete).fail(animation.opts.fail).always(animation.opts.always);\n    jQuery.fx.timer(jQuery.extend(tick, {\n      elem: elem,\n      anim: animation,\n      queue: animation.opts.queue\n    }));\n    return animation;\n  }\n\n  jQuery.Animation = jQuery.extend(Animation, {\n    tweeners: {\n      \"*\": [function (prop, value) {\n        var tween = this.createTween(prop, value);\n        adjustCSS(tween.elem, prop, rcssNum.exec(value), tween);\n        return tween;\n      }]\n    },\n    tweener: function tweener(props, callback) {\n      if (isFunction(props)) {\n        callback = props;\n        props = [\"*\"];\n      } else {\n        props = props.match(rnothtmlwhite);\n      }\n\n      var prop,\n          index = 0,\n          length = props.length;\n\n      for (; index < length; index++) {\n        prop = props[index];\n        Animation.tweeners[prop] = Animation.tweeners[prop] || [];\n        Animation.tweeners[prop].unshift(callback);\n      }\n    },\n    prefilters: [defaultPrefilter],\n    prefilter: function prefilter(callback, prepend) {\n      if (prepend) {\n        Animation.prefilters.unshift(callback);\n      } else {\n        Animation.prefilters.push(callback);\n      }\n    }\n  });\n\n  jQuery.speed = function (speed, easing, fn) {\n    var opt = speed && _typeof(speed) === \"object\" ? jQuery.extend({}, speed) : {\n      complete: fn || !fn && easing || isFunction(speed) && speed,\n      duration: speed,\n      easing: fn && easing || easing && !isFunction(easing) && easing\n    }; // Go to the end state if fx are off\n\n    if (jQuery.fx.off) {\n      opt.duration = 0;\n    } else {\n      if (typeof opt.duration !== \"number\") {\n        if (opt.duration in jQuery.fx.speeds) {\n          opt.duration = jQuery.fx.speeds[opt.duration];\n        } else {\n          opt.duration = jQuery.fx.speeds._default;\n        }\n      }\n    } // Normalize opt.queue - true/undefined/null -> \"fx\"\n\n\n    if (opt.queue == null || opt.queue === true) {\n      opt.queue = \"fx\";\n    } // Queueing\n\n\n    opt.old = opt.complete;\n\n    opt.complete = function () {\n      if (isFunction(opt.old)) {\n        opt.old.call(this);\n      }\n\n      if (opt.queue) {\n        jQuery.dequeue(this, opt.queue);\n      }\n    };\n\n    return opt;\n  };\n\n  jQuery.fn.extend({\n    fadeTo: function fadeTo(speed, to, easing, callback) {\n      // Show any hidden elements after setting opacity to 0\n      return this.filter(isHiddenWithinTree).css(\"opacity\", 0).show() // Animate to the value specified\n      .end().animate({\n        opacity: to\n      }, speed, easing, callback);\n    },\n    animate: function animate(prop, speed, easing, callback) {\n      var empty = jQuery.isEmptyObject(prop),\n          optall = jQuery.speed(speed, easing, callback),\n          doAnimation = function doAnimation() {\n        // Operate on a copy of prop so per-property easing won't be lost\n        var anim = Animation(this, jQuery.extend({}, prop), optall); // Empty animations, or finishing resolves immediately\n\n        if (empty || dataPriv.get(this, \"finish\")) {\n          anim.stop(true);\n        }\n      };\n\n      doAnimation.finish = doAnimation;\n      return empty || optall.queue === false ? this.each(doAnimation) : this.queue(optall.queue, doAnimation);\n    },\n    stop: function stop(type, clearQueue, gotoEnd) {\n      var stopQueue = function stopQueue(hooks) {\n        var stop = hooks.stop;\n        delete hooks.stop;\n        stop(gotoEnd);\n      };\n\n      if (typeof type !== \"string\") {\n        gotoEnd = clearQueue;\n        clearQueue = type;\n        type = undefined;\n      }\n\n      if (clearQueue && type !== false) {\n        this.queue(type || \"fx\", []);\n      }\n\n      return this.each(function () {\n        var dequeue = true,\n            index = type != null && type + \"queueHooks\",\n            timers = jQuery.timers,\n            data = dataPriv.get(this);\n\n        if (index) {\n          if (data[index] && data[index].stop) {\n            stopQueue(data[index]);\n          }\n        } else {\n          for (index in data) {\n            if (data[index] && data[index].stop && rrun.test(index)) {\n              stopQueue(data[index]);\n            }\n          }\n        }\n\n        for (index = timers.length; index--;) {\n          if (timers[index].elem === this && (type == null || timers[index].queue === type)) {\n            timers[index].anim.stop(gotoEnd);\n            dequeue = false;\n            timers.splice(index, 1);\n          }\n        } // Start the next in the queue if the last step wasn't forced.\n        // Timers currently will call their complete callbacks, which\n        // will dequeue but only if they were gotoEnd.\n\n\n        if (dequeue || !gotoEnd) {\n          jQuery.dequeue(this, type);\n        }\n      });\n    },\n    finish: function finish(type) {\n      if (type !== false) {\n        type = type || \"fx\";\n      }\n\n      return this.each(function () {\n        var index,\n            data = dataPriv.get(this),\n            queue = data[type + \"queue\"],\n            hooks = data[type + \"queueHooks\"],\n            timers = jQuery.timers,\n            length = queue ? queue.length : 0; // Enable finishing flag on private data\n\n        data.finish = true; // Empty the queue first\n\n        jQuery.queue(this, type, []);\n\n        if (hooks && hooks.stop) {\n          hooks.stop.call(this, true);\n        } // Look for any active animations, and finish them\n\n\n        for (index = timers.length; index--;) {\n          if (timers[index].elem === this && timers[index].queue === type) {\n            timers[index].anim.stop(true);\n            timers.splice(index, 1);\n          }\n        } // Look for any animations in the old queue and finish them\n\n\n        for (index = 0; index < length; index++) {\n          if (queue[index] && queue[index].finish) {\n            queue[index].finish.call(this);\n          }\n        } // Turn off finishing flag\n\n\n        delete data.finish;\n      });\n    }\n  });\n  jQuery.each([\"toggle\", \"show\", \"hide\"], function (i, name) {\n    var cssFn = jQuery.fn[name];\n\n    jQuery.fn[name] = function (speed, easing, callback) {\n      return speed == null || typeof speed === \"boolean\" ? cssFn.apply(this, arguments) : this.animate(genFx(name, true), speed, easing, callback);\n    };\n  }); // Generate shortcuts for custom animations\n\n  jQuery.each({\n    slideDown: genFx(\"show\"),\n    slideUp: genFx(\"hide\"),\n    slideToggle: genFx(\"toggle\"),\n    fadeIn: {\n      opacity: \"show\"\n    },\n    fadeOut: {\n      opacity: \"hide\"\n    },\n    fadeToggle: {\n      opacity: \"toggle\"\n    }\n  }, function (name, props) {\n    jQuery.fn[name] = function (speed, easing, callback) {\n      return this.animate(props, speed, easing, callback);\n    };\n  });\n  jQuery.timers = [];\n\n  jQuery.fx.tick = function () {\n    var timer,\n        i = 0,\n        timers = jQuery.timers;\n    fxNow = Date.now();\n\n    for (; i < timers.length; i++) {\n      timer = timers[i]; // Run the timer and safely remove it when done (allowing for external removal)\n\n      if (!timer() && timers[i] === timer) {\n        timers.splice(i--, 1);\n      }\n    }\n\n    if (!timers.length) {\n      jQuery.fx.stop();\n    }\n\n    fxNow = undefined;\n  };\n\n  jQuery.fx.timer = function (timer) {\n    jQuery.timers.push(timer);\n    jQuery.fx.start();\n  };\n\n  jQuery.fx.interval = 13;\n\n  jQuery.fx.start = function () {\n    if (inProgress) {\n      return;\n    }\n\n    inProgress = true;\n    schedule();\n  };\n\n  jQuery.fx.stop = function () {\n    inProgress = null;\n  };\n\n  jQuery.fx.speeds = {\n    slow: 600,\n    fast: 200,\n    // Default speed\n    _default: 400\n  }; // Based off of the plugin by Clint Helfers, with permission.\n  // https://web.archive.org/web/20100324014747/http://blindsignals.com/index.php/2009/07/jquery-delay/\n\n  jQuery.fn.delay = function (time, type) {\n    time = jQuery.fx ? jQuery.fx.speeds[time] || time : time;\n    type = type || \"fx\";\n    return this.queue(type, function (next, hooks) {\n      var timeout = window.setTimeout(next, time);\n\n      hooks.stop = function () {\n        window.clearTimeout(timeout);\n      };\n    });\n  };\n\n  (function () {\n    var input = document.createElement(\"input\"),\n        select = document.createElement(\"select\"),\n        opt = select.appendChild(document.createElement(\"option\"));\n    input.type = \"checkbox\"; // Support: Android <=4.3 only\n    // Default value for a checkbox should be \"on\"\n\n    support.checkOn = input.value !== \"\"; // Support: IE <=11 only\n    // Must access selectedIndex to make default options select\n\n    support.optSelected = opt.selected; // Support: IE <=11 only\n    // An input loses its value after becoming a radio\n\n    input = document.createElement(\"input\");\n    input.value = \"t\";\n    input.type = \"radio\";\n    support.radioValue = input.value === \"t\";\n  })();\n\n  var boolHook,\n      attrHandle = jQuery.expr.attrHandle;\n  jQuery.fn.extend({\n    attr: function attr(name, value) {\n      return access(this, jQuery.attr, name, value, arguments.length > 1);\n    },\n    removeAttr: function removeAttr(name) {\n      return this.each(function () {\n        jQuery.removeAttr(this, name);\n      });\n    }\n  });\n  jQuery.extend({\n    attr: function attr(elem, name, value) {\n      var ret,\n          hooks,\n          nType = elem.nodeType; // Don't get/set attributes on text, comment and attribute nodes\n\n      if (nType === 3 || nType === 8 || nType === 2) {\n        return;\n      } // Fallback to prop when attributes are not supported\n\n\n      if (typeof elem.getAttribute === \"undefined\") {\n        return jQuery.prop(elem, name, value);\n      } // Attribute hooks are determined by the lowercase version\n      // Grab necessary hook if one is defined\n\n\n      if (nType !== 1 || !jQuery.isXMLDoc(elem)) {\n        hooks = jQuery.attrHooks[name.toLowerCase()] || (jQuery.expr.match.bool.test(name) ? boolHook : undefined);\n      }\n\n      if (value !== undefined) {\n        if (value === null) {\n          jQuery.removeAttr(elem, name);\n          return;\n        }\n\n        if (hooks && \"set\" in hooks && (ret = hooks.set(elem, value, name)) !== undefined) {\n          return ret;\n        }\n\n        elem.setAttribute(name, value + \"\");\n        return value;\n      }\n\n      if (hooks && \"get\" in hooks && (ret = hooks.get(elem, name)) !== null) {\n        return ret;\n      }\n\n      ret = jQuery.find.attr(elem, name); // Non-existent attributes return null, we normalize to undefined\n\n      return ret == null ? undefined : ret;\n    },\n    attrHooks: {\n      type: {\n        set: function set(elem, value) {\n          if (!support.radioValue && value === \"radio\" && nodeName(elem, \"input\")) {\n            var val = elem.value;\n            elem.setAttribute(\"type\", value);\n\n            if (val) {\n              elem.value = val;\n            }\n\n            return value;\n          }\n        }\n      }\n    },\n    removeAttr: function removeAttr(elem, value) {\n      var name,\n          i = 0,\n          // Attribute names can contain non-HTML whitespace characters\n      // https://html.spec.whatwg.org/multipage/syntax.html#attributes-2\n      attrNames = value && value.match(rnothtmlwhite);\n\n      if (attrNames && elem.nodeType === 1) {\n        while (name = attrNames[i++]) {\n          elem.removeAttribute(name);\n        }\n      }\n    }\n  }); // Hooks for boolean attributes\n\n  boolHook = {\n    set: function set(elem, value, name) {\n      if (value === false) {\n        // Remove boolean attributes when set to false\n        jQuery.removeAttr(elem, name);\n      } else {\n        elem.setAttribute(name, name);\n      }\n\n      return name;\n    }\n  };\n  jQuery.each(jQuery.expr.match.bool.source.match(/\\w+/g), function (i, name) {\n    var getter = attrHandle[name] || jQuery.find.attr;\n\n    attrHandle[name] = function (elem, name, isXML) {\n      var ret,\n          handle,\n          lowercaseName = name.toLowerCase();\n\n      if (!isXML) {\n        // Avoid an infinite loop by temporarily removing this function from the getter\n        handle = attrHandle[lowercaseName];\n        attrHandle[lowercaseName] = ret;\n        ret = getter(elem, name, isXML) != null ? lowercaseName : null;\n        attrHandle[lowercaseName] = handle;\n      }\n\n      return ret;\n    };\n  });\n  var rfocusable = /^(?:input|select|textarea|button)$/i,\n      rclickable = /^(?:a|area)$/i;\n  jQuery.fn.extend({\n    prop: function prop(name, value) {\n      return access(this, jQuery.prop, name, value, arguments.length > 1);\n    },\n    removeProp: function removeProp(name) {\n      return this.each(function () {\n        delete this[jQuery.propFix[name] || name];\n      });\n    }\n  });\n  jQuery.extend({\n    prop: function prop(elem, name, value) {\n      var ret,\n          hooks,\n          nType = elem.nodeType; // Don't get/set properties on text, comment and attribute nodes\n\n      if (nType === 3 || nType === 8 || nType === 2) {\n        return;\n      }\n\n      if (nType !== 1 || !jQuery.isXMLDoc(elem)) {\n        // Fix name and attach hooks\n        name = jQuery.propFix[name] || name;\n        hooks = jQuery.propHooks[name];\n      }\n\n      if (value !== undefined) {\n        if (hooks && \"set\" in hooks && (ret = hooks.set(elem, value, name)) !== undefined) {\n          return ret;\n        }\n\n        return elem[name] = value;\n      }\n\n      if (hooks && \"get\" in hooks && (ret = hooks.get(elem, name)) !== null) {\n        return ret;\n      }\n\n      return elem[name];\n    },\n    propHooks: {\n      tabIndex: {\n        get: function get(elem) {\n          // Support: IE <=9 - 11 only\n          // elem.tabIndex doesn't always return the\n          // correct value when it hasn't been explicitly set\n          // https://web.archive.org/web/20141116233347/http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/\n          // Use proper attribute retrieval(#12072)\n          var tabindex = jQuery.find.attr(elem, \"tabindex\");\n\n          if (tabindex) {\n            return parseInt(tabindex, 10);\n          }\n\n          if (rfocusable.test(elem.nodeName) || rclickable.test(elem.nodeName) && elem.href) {\n            return 0;\n          }\n\n          return -1;\n        }\n      }\n    },\n    propFix: {\n      \"for\": \"htmlFor\",\n      \"class\": \"className\"\n    }\n  }); // Support: IE <=11 only\n  // Accessing the selectedIndex property\n  // forces the browser to respect setting selected\n  // on the option\n  // The getter ensures a default option is selected\n  // when in an optgroup\n  // eslint rule \"no-unused-expressions\" is disabled for this code\n  // since it considers such accessions noop\n\n  if (!support.optSelected) {\n    jQuery.propHooks.selected = {\n      get: function get(elem) {\n        /* eslint no-unused-expressions: \"off\" */\n        var parent = elem.parentNode;\n\n        if (parent && parent.parentNode) {\n          parent.parentNode.selectedIndex;\n        }\n\n        return null;\n      },\n      set: function set(elem) {\n        /* eslint no-unused-expressions: \"off\" */\n        var parent = elem.parentNode;\n\n        if (parent) {\n          parent.selectedIndex;\n\n          if (parent.parentNode) {\n            parent.parentNode.selectedIndex;\n          }\n        }\n      }\n    };\n  }\n\n  jQuery.each([\"tabIndex\", \"readOnly\", \"maxLength\", \"cellSpacing\", \"cellPadding\", \"rowSpan\", \"colSpan\", \"useMap\", \"frameBorder\", \"contentEditable\"], function () {\n    jQuery.propFix[this.toLowerCase()] = this;\n  }); // Strip and collapse whitespace according to HTML spec\n  // https://infra.spec.whatwg.org/#strip-and-collapse-ascii-whitespace\n\n  function stripAndCollapse(value) {\n    var tokens = value.match(rnothtmlwhite) || [];\n    return tokens.join(\" \");\n  }\n\n  function getClass(elem) {\n    return elem.getAttribute && elem.getAttribute(\"class\") || \"\";\n  }\n\n  function classesToArray(value) {\n    if (Array.isArray(value)) {\n      return value;\n    }\n\n    if (typeof value === \"string\") {\n      return value.match(rnothtmlwhite) || [];\n    }\n\n    return [];\n  }\n\n  jQuery.fn.extend({\n    addClass: function addClass(value) {\n      var classes,\n          elem,\n          cur,\n          curValue,\n          clazz,\n          j,\n          finalValue,\n          i = 0;\n\n      if (isFunction(value)) {\n        return this.each(function (j) {\n          jQuery(this).addClass(value.call(this, j, getClass(this)));\n        });\n      }\n\n      classes = classesToArray(value);\n\n      if (classes.length) {\n        while (elem = this[i++]) {\n          curValue = getClass(elem);\n          cur = elem.nodeType === 1 && \" \" + stripAndCollapse(curValue) + \" \";\n\n          if (cur) {\n            j = 0;\n\n            while (clazz = classes[j++]) {\n              if (cur.indexOf(\" \" + clazz + \" \") < 0) {\n                cur += clazz + \" \";\n              }\n            } // Only assign if different to avoid unneeded rendering.\n\n\n            finalValue = stripAndCollapse(cur);\n\n            if (curValue !== finalValue) {\n              elem.setAttribute(\"class\", finalValue);\n            }\n          }\n        }\n      }\n\n      return this;\n    },\n    removeClass: function removeClass(value) {\n      var classes,\n          elem,\n          cur,\n          curValue,\n          clazz,\n          j,\n          finalValue,\n          i = 0;\n\n      if (isFunction(value)) {\n        return this.each(function (j) {\n          jQuery(this).removeClass(value.call(this, j, getClass(this)));\n        });\n      }\n\n      if (!arguments.length) {\n        return this.attr(\"class\", \"\");\n      }\n\n      classes = classesToArray(value);\n\n      if (classes.length) {\n        while (elem = this[i++]) {\n          curValue = getClass(elem); // This expression is here for better compressibility (see addClass)\n\n          cur = elem.nodeType === 1 && \" \" + stripAndCollapse(curValue) + \" \";\n\n          if (cur) {\n            j = 0;\n\n            while (clazz = classes[j++]) {\n              // Remove *all* instances\n              while (cur.indexOf(\" \" + clazz + \" \") > -1) {\n                cur = cur.replace(\" \" + clazz + \" \", \" \");\n              }\n            } // Only assign if different to avoid unneeded rendering.\n\n\n            finalValue = stripAndCollapse(cur);\n\n            if (curValue !== finalValue) {\n              elem.setAttribute(\"class\", finalValue);\n            }\n          }\n        }\n      }\n\n      return this;\n    },\n    toggleClass: function toggleClass(value, stateVal) {\n      var type = _typeof(value),\n          isValidValue = type === \"string\" || Array.isArray(value);\n\n      if (typeof stateVal === \"boolean\" && isValidValue) {\n        return stateVal ? this.addClass(value) : this.removeClass(value);\n      }\n\n      if (isFunction(value)) {\n        return this.each(function (i) {\n          jQuery(this).toggleClass(value.call(this, i, getClass(this), stateVal), stateVal);\n        });\n      }\n\n      return this.each(function () {\n        var className, i, self, classNames;\n\n        if (isValidValue) {\n          // Toggle individual class names\n          i = 0;\n          self = jQuery(this);\n          classNames = classesToArray(value);\n\n          while (className = classNames[i++]) {\n            // Check each className given, space separated list\n            if (self.hasClass(className)) {\n              self.removeClass(className);\n            } else {\n              self.addClass(className);\n            }\n          } // Toggle whole class name\n\n        } else if (value === undefined || type === \"boolean\") {\n          className = getClass(this);\n\n          if (className) {\n            // Store className if set\n            dataPriv.set(this, \"__className__\", className);\n          } // If the element has a class name or if we're passed `false`,\n          // then remove the whole classname (if there was one, the above saved it).\n          // Otherwise bring back whatever was previously saved (if anything),\n          // falling back to the empty string if nothing was stored.\n\n\n          if (this.setAttribute) {\n            this.setAttribute(\"class\", className || value === false ? \"\" : dataPriv.get(this, \"__className__\") || \"\");\n          }\n        }\n      });\n    },\n    hasClass: function hasClass(selector) {\n      var className,\n          elem,\n          i = 0;\n      className = \" \" + selector + \" \";\n\n      while (elem = this[i++]) {\n        if (elem.nodeType === 1 && (\" \" + stripAndCollapse(getClass(elem)) + \" \").indexOf(className) > -1) {\n          return true;\n        }\n      }\n\n      return false;\n    }\n  });\n  var rreturn = /\\r/g;\n  jQuery.fn.extend({\n    val: function val(value) {\n      var hooks,\n          ret,\n          valueIsFunction,\n          elem = this[0];\n\n      if (!arguments.length) {\n        if (elem) {\n          hooks = jQuery.valHooks[elem.type] || jQuery.valHooks[elem.nodeName.toLowerCase()];\n\n          if (hooks && \"get\" in hooks && (ret = hooks.get(elem, \"value\")) !== undefined) {\n            return ret;\n          }\n\n          ret = elem.value; // Handle most common string cases\n\n          if (typeof ret === \"string\") {\n            return ret.replace(rreturn, \"\");\n          } // Handle cases where value is null/undef or number\n\n\n          return ret == null ? \"\" : ret;\n        }\n\n        return;\n      }\n\n      valueIsFunction = isFunction(value);\n      return this.each(function (i) {\n        var val;\n\n        if (this.nodeType !== 1) {\n          return;\n        }\n\n        if (valueIsFunction) {\n          val = value.call(this, i, jQuery(this).val());\n        } else {\n          val = value;\n        } // Treat null/undefined as \"\"; convert numbers to string\n\n\n        if (val == null) {\n          val = \"\";\n        } else if (typeof val === \"number\") {\n          val += \"\";\n        } else if (Array.isArray(val)) {\n          val = jQuery.map(val, function (value) {\n            return value == null ? \"\" : value + \"\";\n          });\n        }\n\n        hooks = jQuery.valHooks[this.type] || jQuery.valHooks[this.nodeName.toLowerCase()]; // If set returns undefined, fall back to normal setting\n\n        if (!hooks || !(\"set\" in hooks) || hooks.set(this, val, \"value\") === undefined) {\n          this.value = val;\n        }\n      });\n    }\n  });\n  jQuery.extend({\n    valHooks: {\n      option: {\n        get: function get(elem) {\n          var val = jQuery.find.attr(elem, \"value\");\n          return val != null ? val : // Support: IE <=10 - 11 only\n          // option.text throws exceptions (#14686, #14858)\n          // Strip and collapse whitespace\n          // https://html.spec.whatwg.org/#strip-and-collapse-whitespace\n          stripAndCollapse(jQuery.text(elem));\n        }\n      },\n      select: {\n        get: function get(elem) {\n          var value,\n              option,\n              i,\n              options = elem.options,\n              index = elem.selectedIndex,\n              one = elem.type === \"select-one\",\n              values = one ? null : [],\n              max = one ? index + 1 : options.length;\n\n          if (index < 0) {\n            i = max;\n          } else {\n            i = one ? index : 0;\n          } // Loop through all the selected options\n\n\n          for (; i < max; i++) {\n            option = options[i]; // Support: IE <=9 only\n            // IE8-9 doesn't update selected after form reset (#2551)\n\n            if ((option.selected || i === index) && // Don't return options that are disabled or in a disabled optgroup\n            !option.disabled && (!option.parentNode.disabled || !nodeName(option.parentNode, \"optgroup\"))) {\n              // Get the specific value for the option\n              value = jQuery(option).val(); // We don't need an array for one selects\n\n              if (one) {\n                return value;\n              } // Multi-Selects return an array\n\n\n              values.push(value);\n            }\n          }\n\n          return values;\n        },\n        set: function set(elem, value) {\n          var optionSet,\n              option,\n              options = elem.options,\n              values = jQuery.makeArray(value),\n              i = options.length;\n\n          while (i--) {\n            option = options[i];\n            /* eslint-disable no-cond-assign */\n\n            if (option.selected = jQuery.inArray(jQuery.valHooks.option.get(option), values) > -1) {\n              optionSet = true;\n            }\n            /* eslint-enable no-cond-assign */\n\n          } // Force browsers to behave consistently when non-matching value is set\n\n\n          if (!optionSet) {\n            elem.selectedIndex = -1;\n          }\n\n          return values;\n        }\n      }\n    }\n  }); // Radios and checkboxes getter/setter\n\n  jQuery.each([\"radio\", \"checkbox\"], function () {\n    jQuery.valHooks[this] = {\n      set: function set(elem, value) {\n        if (Array.isArray(value)) {\n          return elem.checked = jQuery.inArray(jQuery(elem).val(), value) > -1;\n        }\n      }\n    };\n\n    if (!support.checkOn) {\n      jQuery.valHooks[this].get = function (elem) {\n        return elem.getAttribute(\"value\") === null ? \"on\" : elem.value;\n      };\n    }\n  }); // Return jQuery for attributes-only inclusion\n\n  support.focusin = \"onfocusin\" in window;\n\n  var rfocusMorph = /^(?:focusinfocus|focusoutblur)$/,\n      stopPropagationCallback = function stopPropagationCallback(e) {\n    e.stopPropagation();\n  };\n\n  jQuery.extend(jQuery.event, {\n    trigger: function trigger(event, data, elem, onlyHandlers) {\n      var i,\n          cur,\n          tmp,\n          bubbleType,\n          ontype,\n          handle,\n          special,\n          lastElement,\n          eventPath = [elem || document],\n          type = hasOwn.call(event, \"type\") ? event.type : event,\n          namespaces = hasOwn.call(event, \"namespace\") ? event.namespace.split(\".\") : [];\n      cur = lastElement = tmp = elem = elem || document; // Don't do events on text and comment nodes\n\n      if (elem.nodeType === 3 || elem.nodeType === 8) {\n        return;\n      } // focus/blur morphs to focusin/out; ensure we're not firing them right now\n\n\n      if (rfocusMorph.test(type + jQuery.event.triggered)) {\n        return;\n      }\n\n      if (type.indexOf(\".\") > -1) {\n        // Namespaced trigger; create a regexp to match event type in handle()\n        namespaces = type.split(\".\");\n        type = namespaces.shift();\n        namespaces.sort();\n      }\n\n      ontype = type.indexOf(\":\") < 0 && \"on\" + type; // Caller can pass in a jQuery.Event object, Object, or just an event type string\n\n      event = event[jQuery.expando] ? event : new jQuery.Event(type, _typeof(event) === \"object\" && event); // Trigger bitmask: & 1 for native handlers; & 2 for jQuery (always true)\n\n      event.isTrigger = onlyHandlers ? 2 : 3;\n      event.namespace = namespaces.join(\".\");\n      event.rnamespace = event.namespace ? new RegExp(\"(^|\\\\.)\" + namespaces.join(\"\\\\.(?:.*\\\\.|)\") + \"(\\\\.|$)\") : null; // Clean up the event in case it is being reused\n\n      event.result = undefined;\n\n      if (!event.target) {\n        event.target = elem;\n      } // Clone any incoming data and prepend the event, creating the handler arg list\n\n\n      data = data == null ? [event] : jQuery.makeArray(data, [event]); // Allow special events to draw outside the lines\n\n      special = jQuery.event.special[type] || {};\n\n      if (!onlyHandlers && special.trigger && special.trigger.apply(elem, data) === false) {\n        return;\n      } // Determine event propagation path in advance, per W3C events spec (#9951)\n      // Bubble up to document, then to window; watch for a global ownerDocument var (#9724)\n\n\n      if (!onlyHandlers && !special.noBubble && !isWindow(elem)) {\n        bubbleType = special.delegateType || type;\n\n        if (!rfocusMorph.test(bubbleType + type)) {\n          cur = cur.parentNode;\n        }\n\n        for (; cur; cur = cur.parentNode) {\n          eventPath.push(cur);\n          tmp = cur;\n        } // Only add window if we got to document (e.g., not plain obj or detached DOM)\n\n\n        if (tmp === (elem.ownerDocument || document)) {\n          eventPath.push(tmp.defaultView || tmp.parentWindow || window);\n        }\n      } // Fire handlers on the event path\n\n\n      i = 0;\n\n      while ((cur = eventPath[i++]) && !event.isPropagationStopped()) {\n        lastElement = cur;\n        event.type = i > 1 ? bubbleType : special.bindType || type; // jQuery handler\n\n        handle = (dataPriv.get(cur, \"events\") || {})[event.type] && dataPriv.get(cur, \"handle\");\n\n        if (handle) {\n          handle.apply(cur, data);\n        } // Native handler\n\n\n        handle = ontype && cur[ontype];\n\n        if (handle && handle.apply && acceptData(cur)) {\n          event.result = handle.apply(cur, data);\n\n          if (event.result === false) {\n            event.preventDefault();\n          }\n        }\n      }\n\n      event.type = type; // If nobody prevented the default action, do it now\n\n      if (!onlyHandlers && !event.isDefaultPrevented()) {\n        if ((!special._default || special._default.apply(eventPath.pop(), data) === false) && acceptData(elem)) {\n          // Call a native DOM method on the target with the same name as the event.\n          // Don't do default actions on window, that's where global variables be (#6170)\n          if (ontype && isFunction(elem[type]) && !isWindow(elem)) {\n            // Don't re-trigger an onFOO event when we call its FOO() method\n            tmp = elem[ontype];\n\n            if (tmp) {\n              elem[ontype] = null;\n            } // Prevent re-triggering of the same event, since we already bubbled it above\n\n\n            jQuery.event.triggered = type;\n\n            if (event.isPropagationStopped()) {\n              lastElement.addEventListener(type, stopPropagationCallback);\n            }\n\n            elem[type]();\n\n            if (event.isPropagationStopped()) {\n              lastElement.removeEventListener(type, stopPropagationCallback);\n            }\n\n            jQuery.event.triggered = undefined;\n\n            if (tmp) {\n              elem[ontype] = tmp;\n            }\n          }\n        }\n      }\n\n      return event.result;\n    },\n    // Piggyback on a donor event to simulate a different one\n    // Used only for `focus(in | out)` events\n    simulate: function simulate(type, elem, event) {\n      var e = jQuery.extend(new jQuery.Event(), event, {\n        type: type,\n        isSimulated: true\n      });\n      jQuery.event.trigger(e, null, elem);\n    }\n  });\n  jQuery.fn.extend({\n    trigger: function trigger(type, data) {\n      return this.each(function () {\n        jQuery.event.trigger(type, data, this);\n      });\n    },\n    triggerHandler: function triggerHandler(type, data) {\n      var elem = this[0];\n\n      if (elem) {\n        return jQuery.event.trigger(type, data, elem, true);\n      }\n    }\n  }); // Support: Firefox <=44\n  // Firefox doesn't have focus(in | out) events\n  // Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787\n  //\n  // Support: Chrome <=48 - 49, Safari <=9.0 - 9.1\n  // focus(in | out) events fire after focus & blur events,\n  // which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order\n  // Related ticket - https://bugs.chromium.org/p/chromium/issues/detail?id=449857\n\n  if (!support.focusin) {\n    jQuery.each({\n      focus: \"focusin\",\n      blur: \"focusout\"\n    }, function (orig, fix) {\n      // Attach a single capturing handler on the document while someone wants focusin/focusout\n      var handler = function handler(event) {\n        jQuery.event.simulate(fix, event.target, jQuery.event.fix(event));\n      };\n\n      jQuery.event.special[fix] = {\n        setup: function setup() {\n          var doc = this.ownerDocument || this,\n              attaches = dataPriv.access(doc, fix);\n\n          if (!attaches) {\n            doc.addEventListener(orig, handler, true);\n          }\n\n          dataPriv.access(doc, fix, (attaches || 0) + 1);\n        },\n        teardown: function teardown() {\n          var doc = this.ownerDocument || this,\n              attaches = dataPriv.access(doc, fix) - 1;\n\n          if (!attaches) {\n            doc.removeEventListener(orig, handler, true);\n            dataPriv.remove(doc, fix);\n          } else {\n            dataPriv.access(doc, fix, attaches);\n          }\n        }\n      };\n    });\n  }\n\n  var location = window.location;\n  var nonce = Date.now();\n  var rquery = /\\?/; // Cross-browser xml parsing\n\n  jQuery.parseXML = function (data) {\n    var xml;\n\n    if (!data || typeof data !== \"string\") {\n      return null;\n    } // Support: IE 9 - 11 only\n    // IE throws on parseFromString with invalid input.\n\n\n    try {\n      xml = new window.DOMParser().parseFromString(data, \"text/xml\");\n    } catch (e) {\n      xml = undefined;\n    }\n\n    if (!xml || xml.getElementsByTagName(\"parsererror\").length) {\n      jQuery.error(\"Invalid XML: \" + data);\n    }\n\n    return xml;\n  };\n\n  var rbracket = /\\[\\]$/,\n      rCRLF = /\\r?\\n/g,\n      rsubmitterTypes = /^(?:submit|button|image|reset|file)$/i,\n      rsubmittable = /^(?:input|select|textarea|keygen)/i;\n\n  function buildParams(prefix, obj, traditional, add) {\n    var name;\n\n    if (Array.isArray(obj)) {\n      // Serialize array item.\n      jQuery.each(obj, function (i, v) {\n        if (traditional || rbracket.test(prefix)) {\n          // Treat each array item as a scalar.\n          add(prefix, v);\n        } else {\n          // Item is non-scalar (array or object), encode its numeric index.\n          buildParams(prefix + \"[\" + (_typeof(v) === \"object\" && v != null ? i : \"\") + \"]\", v, traditional, add);\n        }\n      });\n    } else if (!traditional && toType(obj) === \"object\") {\n      // Serialize object item.\n      for (name in obj) {\n        buildParams(prefix + \"[\" + name + \"]\", obj[name], traditional, add);\n      }\n    } else {\n      // Serialize scalar item.\n      add(prefix, obj);\n    }\n  } // Serialize an array of form elements or a set of\n  // key/values into a query string\n\n\n  jQuery.param = function (a, traditional) {\n    var prefix,\n        s = [],\n        add = function add(key, valueOrFunction) {\n      // If value is a function, invoke it and use its return value\n      var value = isFunction(valueOrFunction) ? valueOrFunction() : valueOrFunction;\n      s[s.length] = encodeURIComponent(key) + \"=\" + encodeURIComponent(value == null ? \"\" : value);\n    };\n\n    if (a == null) {\n      return \"\";\n    } // If an array was passed in, assume that it is an array of form elements.\n\n\n    if (Array.isArray(a) || a.jquery && !jQuery.isPlainObject(a)) {\n      // Serialize the form elements\n      jQuery.each(a, function () {\n        add(this.name, this.value);\n      });\n    } else {\n      // If traditional, encode the \"old\" way (the way 1.3.2 or older\n      // did it), otherwise encode params recursively.\n      for (prefix in a) {\n        buildParams(prefix, a[prefix], traditional, add);\n      }\n    } // Return the resulting serialization\n\n\n    return s.join(\"&\");\n  };\n\n  jQuery.fn.extend({\n    serialize: function serialize() {\n      return jQuery.param(this.serializeArray());\n    },\n    serializeArray: function serializeArray() {\n      return this.map(function () {\n        // Can add propHook for \"elements\" to filter or add form elements\n        var elements = jQuery.prop(this, \"elements\");\n        return elements ? jQuery.makeArray(elements) : this;\n      }).filter(function () {\n        var type = this.type; // Use .is( \":disabled\" ) so that fieldset[disabled] works\n\n        return this.name && !jQuery(this).is(\":disabled\") && rsubmittable.test(this.nodeName) && !rsubmitterTypes.test(type) && (this.checked || !rcheckableType.test(type));\n      }).map(function (i, elem) {\n        var val = jQuery(this).val();\n\n        if (val == null) {\n          return null;\n        }\n\n        if (Array.isArray(val)) {\n          return jQuery.map(val, function (val) {\n            return {\n              name: elem.name,\n              value: val.replace(rCRLF, \"\\r\\n\")\n            };\n          });\n        }\n\n        return {\n          name: elem.name,\n          value: val.replace(rCRLF, \"\\r\\n\")\n        };\n      }).get();\n    }\n  });\n  var r20 = /%20/g,\n      rhash = /#.*$/,\n      rantiCache = /([?&])_=[^&]*/,\n      rheaders = /^(.*?):[ \\t]*([^\\r\\n]*)$/mg,\n      // #7653, #8125, #8152: local protocol detection\n  rlocalProtocol = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/,\n      rnoContent = /^(?:GET|HEAD)$/,\n      rprotocol = /^\\/\\//,\n\n  /* Prefilters\n   * 1) They are useful to introduce custom dataTypes (see ajax/jsonp.js for an example)\n   * 2) These are called:\n   *    - BEFORE asking for a transport\n   *    - AFTER param serialization (s.data is a string if s.processData is true)\n   * 3) key is the dataType\n   * 4) the catchall symbol \"*\" can be used\n   * 5) execution will start with transport dataType and THEN continue down to \"*\" if needed\n   */\n  prefilters = {},\n\n  /* Transports bindings\n   * 1) key is the dataType\n   * 2) the catchall symbol \"*\" can be used\n   * 3) selection will start with transport dataType and THEN go to \"*\" if needed\n   */\n  transports = {},\n      // Avoid comment-prolog char sequence (#10098); must appease lint and evade compression\n  allTypes = \"*/\".concat(\"*\"),\n      // Anchor tag for parsing the document origin\n  originAnchor = document.createElement(\"a\");\n  originAnchor.href = location.href; // Base \"constructor\" for jQuery.ajaxPrefilter and jQuery.ajaxTransport\n\n  function addToPrefiltersOrTransports(structure) {\n    // dataTypeExpression is optional and defaults to \"*\"\n    return function (dataTypeExpression, func) {\n      if (typeof dataTypeExpression !== \"string\") {\n        func = dataTypeExpression;\n        dataTypeExpression = \"*\";\n      }\n\n      var dataType,\n          i = 0,\n          dataTypes = dataTypeExpression.toLowerCase().match(rnothtmlwhite) || [];\n\n      if (isFunction(func)) {\n        // For each dataType in the dataTypeExpression\n        while (dataType = dataTypes[i++]) {\n          // Prepend if requested\n          if (dataType[0] === \"+\") {\n            dataType = dataType.slice(1) || \"*\";\n            (structure[dataType] = structure[dataType] || []).unshift(func); // Otherwise append\n          } else {\n            (structure[dataType] = structure[dataType] || []).push(func);\n          }\n        }\n      }\n    };\n  } // Base inspection function for prefilters and transports\n\n\n  function inspectPrefiltersOrTransports(structure, options, originalOptions, jqXHR) {\n    var inspected = {},\n        seekingTransport = structure === transports;\n\n    function inspect(dataType) {\n      var selected;\n      inspected[dataType] = true;\n      jQuery.each(structure[dataType] || [], function (_, prefilterOrFactory) {\n        var dataTypeOrTransport = prefilterOrFactory(options, originalOptions, jqXHR);\n\n        if (typeof dataTypeOrTransport === \"string\" && !seekingTransport && !inspected[dataTypeOrTransport]) {\n          options.dataTypes.unshift(dataTypeOrTransport);\n          inspect(dataTypeOrTransport);\n          return false;\n        } else if (seekingTransport) {\n          return !(selected = dataTypeOrTransport);\n        }\n      });\n      return selected;\n    }\n\n    return inspect(options.dataTypes[0]) || !inspected[\"*\"] && inspect(\"*\");\n  } // A special extend for ajax options\n  // that takes \"flat\" options (not to be deep extended)\n  // Fixes #9887\n\n\n  function ajaxExtend(target, src) {\n    var key,\n        deep,\n        flatOptions = jQuery.ajaxSettings.flatOptions || {};\n\n    for (key in src) {\n      if (src[key] !== undefined) {\n        (flatOptions[key] ? target : deep || (deep = {}))[key] = src[key];\n      }\n    }\n\n    if (deep) {\n      jQuery.extend(true, target, deep);\n    }\n\n    return target;\n  }\n  /* Handles responses to an ajax request:\n   * - finds the right dataType (mediates between content-type and expected dataType)\n   * - returns the corresponding response\n   */\n\n\n  function ajaxHandleResponses(s, jqXHR, responses) {\n    var ct,\n        type,\n        finalDataType,\n        firstDataType,\n        contents = s.contents,\n        dataTypes = s.dataTypes; // Remove auto dataType and get content-type in the process\n\n    while (dataTypes[0] === \"*\") {\n      dataTypes.shift();\n\n      if (ct === undefined) {\n        ct = s.mimeType || jqXHR.getResponseHeader(\"Content-Type\");\n      }\n    } // Check if we're dealing with a known content-type\n\n\n    if (ct) {\n      for (type in contents) {\n        if (contents[type] && contents[type].test(ct)) {\n          dataTypes.unshift(type);\n          break;\n        }\n      }\n    } // Check to see if we have a response for the expected dataType\n\n\n    if (dataTypes[0] in responses) {\n      finalDataType = dataTypes[0];\n    } else {\n      // Try convertible dataTypes\n      for (type in responses) {\n        if (!dataTypes[0] || s.converters[type + \" \" + dataTypes[0]]) {\n          finalDataType = type;\n          break;\n        }\n\n        if (!firstDataType) {\n          firstDataType = type;\n        }\n      } // Or just use first one\n\n\n      finalDataType = finalDataType || firstDataType;\n    } // If we found a dataType\n    // We add the dataType to the list if needed\n    // and return the corresponding response\n\n\n    if (finalDataType) {\n      if (finalDataType !== dataTypes[0]) {\n        dataTypes.unshift(finalDataType);\n      }\n\n      return responses[finalDataType];\n    }\n  }\n  /* Chain conversions given the request and the original response\n   * Also sets the responseXXX fields on the jqXHR instance\n   */\n\n\n  function ajaxConvert(s, response, jqXHR, isSuccess) {\n    var conv2,\n        current,\n        conv,\n        tmp,\n        prev,\n        converters = {},\n        // Work with a copy of dataTypes in case we need to modify it for conversion\n    dataTypes = s.dataTypes.slice(); // Create converters map with lowercased keys\n\n    if (dataTypes[1]) {\n      for (conv in s.converters) {\n        converters[conv.toLowerCase()] = s.converters[conv];\n      }\n    }\n\n    current = dataTypes.shift(); // Convert to each sequential dataType\n\n    while (current) {\n      if (s.responseFields[current]) {\n        jqXHR[s.responseFields[current]] = response;\n      } // Apply the dataFilter if provided\n\n\n      if (!prev && isSuccess && s.dataFilter) {\n        response = s.dataFilter(response, s.dataType);\n      }\n\n      prev = current;\n      current = dataTypes.shift();\n\n      if (current) {\n        // There's only work to do if current dataType is non-auto\n        if (current === \"*\") {\n          current = prev; // Convert response if prev dataType is non-auto and differs from current\n        } else if (prev !== \"*\" && prev !== current) {\n          // Seek a direct converter\n          conv = converters[prev + \" \" + current] || converters[\"* \" + current]; // If none found, seek a pair\n\n          if (!conv) {\n            for (conv2 in converters) {\n              // If conv2 outputs current\n              tmp = conv2.split(\" \");\n\n              if (tmp[1] === current) {\n                // If prev can be converted to accepted input\n                conv = converters[prev + \" \" + tmp[0]] || converters[\"* \" + tmp[0]];\n\n                if (conv) {\n                  // Condense equivalence converters\n                  if (conv === true) {\n                    conv = converters[conv2]; // Otherwise, insert the intermediate dataType\n                  } else if (converters[conv2] !== true) {\n                    current = tmp[0];\n                    dataTypes.unshift(tmp[1]);\n                  }\n\n                  break;\n                }\n              }\n            }\n          } // Apply converter (if not an equivalence)\n\n\n          if (conv !== true) {\n            // Unless errors are allowed to bubble, catch and return them\n            if (conv && s[\"throws\"]) {\n              response = conv(response);\n            } else {\n              try {\n                response = conv(response);\n              } catch (e) {\n                return {\n                  state: \"parsererror\",\n                  error: conv ? e : \"No conversion from \" + prev + \" to \" + current\n                };\n              }\n            }\n          }\n        }\n      }\n    }\n\n    return {\n      state: \"success\",\n      data: response\n    };\n  }\n\n  jQuery.extend({\n    // Counter for holding the number of active queries\n    active: 0,\n    // Last-Modified header cache for next request\n    lastModified: {},\n    etag: {},\n    ajaxSettings: {\n      url: location.href,\n      type: \"GET\",\n      isLocal: rlocalProtocol.test(location.protocol),\n      global: true,\n      processData: true,\n      async: true,\n      contentType: \"application/x-www-form-urlencoded; charset=UTF-8\",\n\n      /*\n      timeout: 0,\n      data: null,\n      dataType: null,\n      username: null,\n      password: null,\n      cache: null,\n      throws: false,\n      traditional: false,\n      headers: {},\n      */\n      accepts: {\n        \"*\": allTypes,\n        text: \"text/plain\",\n        html: \"text/html\",\n        xml: \"application/xml, text/xml\",\n        json: \"application/json, text/javascript\"\n      },\n      contents: {\n        xml: /\\bxml\\b/,\n        html: /\\bhtml/,\n        json: /\\bjson\\b/\n      },\n      responseFields: {\n        xml: \"responseXML\",\n        text: \"responseText\",\n        json: \"responseJSON\"\n      },\n      // Data converters\n      // Keys separate source (or catchall \"*\") and destination types with a single space\n      converters: {\n        // Convert anything to text\n        \"* text\": String,\n        // Text to html (true = no transformation)\n        \"text html\": true,\n        // Evaluate text as a json expression\n        \"text json\": JSON.parse,\n        // Parse text as xml\n        \"text xml\": jQuery.parseXML\n      },\n      // For options that shouldn't be deep extended:\n      // you can add your own custom options here if\n      // and when you create one that shouldn't be\n      // deep extended (see ajaxExtend)\n      flatOptions: {\n        url: true,\n        context: true\n      }\n    },\n    // Creates a full fledged settings object into target\n    // with both ajaxSettings and settings fields.\n    // If target is omitted, writes into ajaxSettings.\n    ajaxSetup: function ajaxSetup(target, settings) {\n      return settings ? // Building a settings object\n      ajaxExtend(ajaxExtend(target, jQuery.ajaxSettings), settings) : // Extending ajaxSettings\n      ajaxExtend(jQuery.ajaxSettings, target);\n    },\n    ajaxPrefilter: addToPrefiltersOrTransports(prefilters),\n    ajaxTransport: addToPrefiltersOrTransports(transports),\n    // Main method\n    ajax: function ajax(url, options) {\n      // If url is an object, simulate pre-1.5 signature\n      if (_typeof(url) === \"object\") {\n        options = url;\n        url = undefined;\n      } // Force options to be an object\n\n\n      options = options || {};\n\n      var transport,\n          // URL without anti-cache param\n      cacheURL,\n          // Response headers\n      responseHeadersString,\n          responseHeaders,\n          // timeout handle\n      timeoutTimer,\n          // Url cleanup var\n      urlAnchor,\n          // Request state (becomes false upon send and true upon completion)\n      completed,\n          // To know if global events are to be dispatched\n      fireGlobals,\n          // Loop variable\n      i,\n          // uncached part of the url\n      uncached,\n          // Create the final options object\n      s = jQuery.ajaxSetup({}, options),\n          // Callbacks context\n      callbackContext = s.context || s,\n          // Context for global events is callbackContext if it is a DOM node or jQuery collection\n      globalEventContext = s.context && (callbackContext.nodeType || callbackContext.jquery) ? jQuery(callbackContext) : jQuery.event,\n          // Deferreds\n      deferred = jQuery.Deferred(),\n          completeDeferred = jQuery.Callbacks(\"once memory\"),\n          // Status-dependent callbacks\n      _statusCode = s.statusCode || {},\n          // Headers (they are sent all at once)\n      requestHeaders = {},\n          requestHeadersNames = {},\n          // Default abort message\n      strAbort = \"canceled\",\n          // Fake xhr\n      jqXHR = {\n        readyState: 0,\n        // Builds headers hashtable if needed\n        getResponseHeader: function getResponseHeader(key) {\n          var match;\n\n          if (completed) {\n            if (!responseHeaders) {\n              responseHeaders = {};\n\n              while (match = rheaders.exec(responseHeadersString)) {\n                responseHeaders[match[1].toLowerCase() + \" \"] = (responseHeaders[match[1].toLowerCase() + \" \"] || []).concat(match[2]);\n              }\n            }\n\n            match = responseHeaders[key.toLowerCase() + \" \"];\n          }\n\n          return match == null ? null : match.join(\", \");\n        },\n        // Raw string\n        getAllResponseHeaders: function getAllResponseHeaders() {\n          return completed ? responseHeadersString : null;\n        },\n        // Caches the header\n        setRequestHeader: function setRequestHeader(name, value) {\n          if (completed == null) {\n            name = requestHeadersNames[name.toLowerCase()] = requestHeadersNames[name.toLowerCase()] || name;\n            requestHeaders[name] = value;\n          }\n\n          return this;\n        },\n        // Overrides response content-type header\n        overrideMimeType: function overrideMimeType(type) {\n          if (completed == null) {\n            s.mimeType = type;\n          }\n\n          return this;\n        },\n        // Status-dependent callbacks\n        statusCode: function statusCode(map) {\n          var code;\n\n          if (map) {\n            if (completed) {\n              // Execute the appropriate callbacks\n              jqXHR.always(map[jqXHR.status]);\n            } else {\n              // Lazy-add the new callbacks in a way that preserves old ones\n              for (code in map) {\n                _statusCode[code] = [_statusCode[code], map[code]];\n              }\n            }\n          }\n\n          return this;\n        },\n        // Cancel the request\n        abort: function abort(statusText) {\n          var finalText = statusText || strAbort;\n\n          if (transport) {\n            transport.abort(finalText);\n          }\n\n          done(0, finalText);\n          return this;\n        }\n      }; // Attach deferreds\n\n\n      deferred.promise(jqXHR); // Add protocol if not provided (prefilters might expect it)\n      // Handle falsy url in the settings object (#10093: consistency with old signature)\n      // We also use the url parameter if available\n\n      s.url = ((url || s.url || location.href) + \"\").replace(rprotocol, location.protocol + \"//\"); // Alias method option to type as per ticket #12004\n\n      s.type = options.method || options.type || s.method || s.type; // Extract dataTypes list\n\n      s.dataTypes = (s.dataType || \"*\").toLowerCase().match(rnothtmlwhite) || [\"\"]; // A cross-domain request is in order when the origin doesn't match the current origin.\n\n      if (s.crossDomain == null) {\n        urlAnchor = document.createElement(\"a\"); // Support: IE <=8 - 11, Edge 12 - 15\n        // IE throws exception on accessing the href property if url is malformed,\n        // e.g. http://example.com:80x/\n\n        try {\n          urlAnchor.href = s.url; // Support: IE <=8 - 11 only\n          // Anchor's host property isn't correctly set when s.url is relative\n\n          urlAnchor.href = urlAnchor.href;\n          s.crossDomain = originAnchor.protocol + \"//\" + originAnchor.host !== urlAnchor.protocol + \"//\" + urlAnchor.host;\n        } catch (e) {\n          // If there is an error parsing the URL, assume it is crossDomain,\n          // it can be rejected by the transport if it is invalid\n          s.crossDomain = true;\n        }\n      } // Convert data if not already a string\n\n\n      if (s.data && s.processData && typeof s.data !== \"string\") {\n        s.data = jQuery.param(s.data, s.traditional);\n      } // Apply prefilters\n\n\n      inspectPrefiltersOrTransports(prefilters, s, options, jqXHR); // If request was aborted inside a prefilter, stop there\n\n      if (completed) {\n        return jqXHR;\n      } // We can fire global events as of now if asked to\n      // Don't fire events if jQuery.event is undefined in an AMD-usage scenario (#15118)\n\n\n      fireGlobals = jQuery.event && s.global; // Watch for a new set of requests\n\n      if (fireGlobals && jQuery.active++ === 0) {\n        jQuery.event.trigger(\"ajaxStart\");\n      } // Uppercase the type\n\n\n      s.type = s.type.toUpperCase(); // Determine if request has content\n\n      s.hasContent = !rnoContent.test(s.type); // Save the URL in case we're toying with the If-Modified-Since\n      // and/or If-None-Match header later on\n      // Remove hash to simplify url manipulation\n\n      cacheURL = s.url.replace(rhash, \"\"); // More options handling for requests with no content\n\n      if (!s.hasContent) {\n        // Remember the hash so we can put it back\n        uncached = s.url.slice(cacheURL.length); // If data is available and should be processed, append data to url\n\n        if (s.data && (s.processData || typeof s.data === \"string\")) {\n          cacheURL += (rquery.test(cacheURL) ? \"&\" : \"?\") + s.data; // #9682: remove data so that it's not used in an eventual retry\n\n          delete s.data;\n        } // Add or update anti-cache param if needed\n\n\n        if (s.cache === false) {\n          cacheURL = cacheURL.replace(rantiCache, \"$1\");\n          uncached = (rquery.test(cacheURL) ? \"&\" : \"?\") + \"_=\" + nonce++ + uncached;\n        } // Put hash and anti-cache on the URL that will be requested (gh-1732)\n\n\n        s.url = cacheURL + uncached; // Change '%20' to '+' if this is encoded form body content (gh-2658)\n      } else if (s.data && s.processData && (s.contentType || \"\").indexOf(\"application/x-www-form-urlencoded\") === 0) {\n        s.data = s.data.replace(r20, \"+\");\n      } // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n\n\n      if (s.ifModified) {\n        if (jQuery.lastModified[cacheURL]) {\n          jqXHR.setRequestHeader(\"If-Modified-Since\", jQuery.lastModified[cacheURL]);\n        }\n\n        if (jQuery.etag[cacheURL]) {\n          jqXHR.setRequestHeader(\"If-None-Match\", jQuery.etag[cacheURL]);\n        }\n      } // Set the correct header, if data is being sent\n\n\n      if (s.data && s.hasContent && s.contentType !== false || options.contentType) {\n        jqXHR.setRequestHeader(\"Content-Type\", s.contentType);\n      } // Set the Accepts header for the server, depending on the dataType\n\n\n      jqXHR.setRequestHeader(\"Accept\", s.dataTypes[0] && s.accepts[s.dataTypes[0]] ? s.accepts[s.dataTypes[0]] + (s.dataTypes[0] !== \"*\" ? \", \" + allTypes + \"; q=0.01\" : \"\") : s.accepts[\"*\"]); // Check for headers option\n\n      for (i in s.headers) {\n        jqXHR.setRequestHeader(i, s.headers[i]);\n      } // Allow custom headers/mimetypes and early abort\n\n\n      if (s.beforeSend && (s.beforeSend.call(callbackContext, jqXHR, s) === false || completed)) {\n        // Abort if not done already and return\n        return jqXHR.abort();\n      } // Aborting is no longer a cancellation\n\n\n      strAbort = \"abort\"; // Install callbacks on deferreds\n\n      completeDeferred.add(s.complete);\n      jqXHR.done(s.success);\n      jqXHR.fail(s.error); // Get transport\n\n      transport = inspectPrefiltersOrTransports(transports, s, options, jqXHR); // If no transport, we auto-abort\n\n      if (!transport) {\n        done(-1, \"No Transport\");\n      } else {\n        jqXHR.readyState = 1; // Send global event\n\n        if (fireGlobals) {\n          globalEventContext.trigger(\"ajaxSend\", [jqXHR, s]);\n        } // If request was aborted inside ajaxSend, stop there\n\n\n        if (completed) {\n          return jqXHR;\n        } // Timeout\n\n\n        if (s.async && s.timeout > 0) {\n          timeoutTimer = window.setTimeout(function () {\n            jqXHR.abort(\"timeout\");\n          }, s.timeout);\n        }\n\n        try {\n          completed = false;\n          transport.send(requestHeaders, done);\n        } catch (e) {\n          // Rethrow post-completion exceptions\n          if (completed) {\n            throw e;\n          } // Propagate others as results\n\n\n          done(-1, e);\n        }\n      } // Callback for when everything is done\n\n\n      function done(status, nativeStatusText, responses, headers) {\n        var isSuccess,\n            success,\n            error,\n            response,\n            modified,\n            statusText = nativeStatusText; // Ignore repeat invocations\n\n        if (completed) {\n          return;\n        }\n\n        completed = true; // Clear timeout if it exists\n\n        if (timeoutTimer) {\n          window.clearTimeout(timeoutTimer);\n        } // Dereference transport for early garbage collection\n        // (no matter how long the jqXHR object will be used)\n\n\n        transport = undefined; // Cache response headers\n\n        responseHeadersString = headers || \"\"; // Set readyState\n\n        jqXHR.readyState = status > 0 ? 4 : 0; // Determine if successful\n\n        isSuccess = status >= 200 && status < 300 || status === 304; // Get response data\n\n        if (responses) {\n          response = ajaxHandleResponses(s, jqXHR, responses);\n        } // Convert no matter what (that way responseXXX fields are always set)\n\n\n        response = ajaxConvert(s, response, jqXHR, isSuccess); // If successful, handle type chaining\n\n        if (isSuccess) {\n          // Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.\n          if (s.ifModified) {\n            modified = jqXHR.getResponseHeader(\"Last-Modified\");\n\n            if (modified) {\n              jQuery.lastModified[cacheURL] = modified;\n            }\n\n            modified = jqXHR.getResponseHeader(\"etag\");\n\n            if (modified) {\n              jQuery.etag[cacheURL] = modified;\n            }\n          } // if no content\n\n\n          if (status === 204 || s.type === \"HEAD\") {\n            statusText = \"nocontent\"; // if not modified\n          } else if (status === 304) {\n            statusText = \"notmodified\"; // If we have data, let's convert it\n          } else {\n            statusText = response.state;\n            success = response.data;\n            error = response.error;\n            isSuccess = !error;\n          }\n        } else {\n          // Extract error from statusText and normalize for non-aborts\n          error = statusText;\n\n          if (status || !statusText) {\n            statusText = \"error\";\n\n            if (status < 0) {\n              status = 0;\n            }\n          }\n        } // Set data for the fake xhr object\n\n\n        jqXHR.status = status;\n        jqXHR.statusText = (nativeStatusText || statusText) + \"\"; // Success/Error\n\n        if (isSuccess) {\n          deferred.resolveWith(callbackContext, [success, statusText, jqXHR]);\n        } else {\n          deferred.rejectWith(callbackContext, [jqXHR, statusText, error]);\n        } // Status-dependent callbacks\n\n\n        jqXHR.statusCode(_statusCode);\n        _statusCode = undefined;\n\n        if (fireGlobals) {\n          globalEventContext.trigger(isSuccess ? \"ajaxSuccess\" : \"ajaxError\", [jqXHR, s, isSuccess ? success : error]);\n        } // Complete\n\n\n        completeDeferred.fireWith(callbackContext, [jqXHR, statusText]);\n\n        if (fireGlobals) {\n          globalEventContext.trigger(\"ajaxComplete\", [jqXHR, s]); // Handle the global AJAX counter\n\n          if (! --jQuery.active) {\n            jQuery.event.trigger(\"ajaxStop\");\n          }\n        }\n      }\n\n      return jqXHR;\n    },\n    getJSON: function getJSON(url, data, callback) {\n      return jQuery.get(url, data, callback, \"json\");\n    },\n    getScript: function getScript(url, callback) {\n      return jQuery.get(url, undefined, callback, \"script\");\n    }\n  });\n  jQuery.each([\"get\", \"post\"], function (i, method) {\n    jQuery[method] = function (url, data, callback, type) {\n      // Shift arguments if data argument was omitted\n      if (isFunction(data)) {\n        type = type || callback;\n        callback = data;\n        data = undefined;\n      } // The url can be an options object (which then must have .url)\n\n\n      return jQuery.ajax(jQuery.extend({\n        url: url,\n        type: method,\n        dataType: type,\n        data: data,\n        success: callback\n      }, jQuery.isPlainObject(url) && url));\n    };\n  });\n\n  jQuery._evalUrl = function (url, options) {\n    return jQuery.ajax({\n      url: url,\n      // Make this explicit, since user can override this through ajaxSetup (#11264)\n      type: \"GET\",\n      dataType: \"script\",\n      cache: true,\n      async: false,\n      global: false,\n      // Only evaluate the response if it is successful (gh-4126)\n      // dataFilter is not invoked for failure responses, so using it instead\n      // of the default converter is kludgy but it works.\n      converters: {\n        \"text script\": function textScript() {}\n      },\n      dataFilter: function dataFilter(response) {\n        jQuery.globalEval(response, options);\n      }\n    });\n  };\n\n  jQuery.fn.extend({\n    wrapAll: function wrapAll(html) {\n      var wrap;\n\n      if (this[0]) {\n        if (isFunction(html)) {\n          html = html.call(this[0]);\n        } // The elements to wrap the target around\n\n\n        wrap = jQuery(html, this[0].ownerDocument).eq(0).clone(true);\n\n        if (this[0].parentNode) {\n          wrap.insertBefore(this[0]);\n        }\n\n        wrap.map(function () {\n          var elem = this;\n\n          while (elem.firstElementChild) {\n            elem = elem.firstElementChild;\n          }\n\n          return elem;\n        }).append(this);\n      }\n\n      return this;\n    },\n    wrapInner: function wrapInner(html) {\n      if (isFunction(html)) {\n        return this.each(function (i) {\n          jQuery(this).wrapInner(html.call(this, i));\n        });\n      }\n\n      return this.each(function () {\n        var self = jQuery(this),\n            contents = self.contents();\n\n        if (contents.length) {\n          contents.wrapAll(html);\n        } else {\n          self.append(html);\n        }\n      });\n    },\n    wrap: function wrap(html) {\n      var htmlIsFunction = isFunction(html);\n      return this.each(function (i) {\n        jQuery(this).wrapAll(htmlIsFunction ? html.call(this, i) : html);\n      });\n    },\n    unwrap: function unwrap(selector) {\n      this.parent(selector).not(\"body\").each(function () {\n        jQuery(this).replaceWith(this.childNodes);\n      });\n      return this;\n    }\n  });\n\n  jQuery.expr.pseudos.hidden = function (elem) {\n    return !jQuery.expr.pseudos.visible(elem);\n  };\n\n  jQuery.expr.pseudos.visible = function (elem) {\n    return !!(elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length);\n  };\n\n  jQuery.ajaxSettings.xhr = function () {\n    try {\n      return new window.XMLHttpRequest();\n    } catch (e) {}\n  };\n\n  var xhrSuccessStatus = {\n    // File protocol always yields status code 0, assume 200\n    0: 200,\n    // Support: IE <=9 only\n    // #1450: sometimes IE returns 1223 when it should be 204\n    1223: 204\n  },\n      xhrSupported = jQuery.ajaxSettings.xhr();\n  support.cors = !!xhrSupported && \"withCredentials\" in xhrSupported;\n  support.ajax = xhrSupported = !!xhrSupported;\n  jQuery.ajaxTransport(function (options) {\n    var _callback, errorCallback; // Cross domain only allowed if supported through XMLHttpRequest\n\n\n    if (support.cors || xhrSupported && !options.crossDomain) {\n      return {\n        send: function send(headers, complete) {\n          var i,\n              xhr = options.xhr();\n          xhr.open(options.type, options.url, options.async, options.username, options.password); // Apply custom fields if provided\n\n          if (options.xhrFields) {\n            for (i in options.xhrFields) {\n              xhr[i] = options.xhrFields[i];\n            }\n          } // Override mime type if needed\n\n\n          if (options.mimeType && xhr.overrideMimeType) {\n            xhr.overrideMimeType(options.mimeType);\n          } // X-Requested-With header\n          // For cross-domain requests, seeing as conditions for a preflight are\n          // akin to a jigsaw puzzle, we simply never set it to be sure.\n          // (it can always be set on a per-request basis or even using ajaxSetup)\n          // For same-domain requests, won't change header if already provided.\n\n\n          if (!options.crossDomain && !headers[\"X-Requested-With\"]) {\n            headers[\"X-Requested-With\"] = \"XMLHttpRequest\";\n          } // Set headers\n\n\n          for (i in headers) {\n            xhr.setRequestHeader(i, headers[i]);\n          } // Callback\n\n\n          _callback = function callback(type) {\n            return function () {\n              if (_callback) {\n                _callback = errorCallback = xhr.onload = xhr.onerror = xhr.onabort = xhr.ontimeout = xhr.onreadystatechange = null;\n\n                if (type === \"abort\") {\n                  xhr.abort();\n                } else if (type === \"error\") {\n                  // Support: IE <=9 only\n                  // On a manual native abort, IE9 throws\n                  // errors on any property access that is not readyState\n                  if (typeof xhr.status !== \"number\") {\n                    complete(0, \"error\");\n                  } else {\n                    complete( // File: protocol always yields status 0; see #8605, #14207\n                    xhr.status, xhr.statusText);\n                  }\n                } else {\n                  complete(xhrSuccessStatus[xhr.status] || xhr.status, xhr.statusText, // Support: IE <=9 only\n                  // IE9 has no XHR2 but throws on binary (trac-11426)\n                  // For XHR2 non-text, let the caller handle it (gh-2498)\n                  (xhr.responseType || \"text\") !== \"text\" || typeof xhr.responseText !== \"string\" ? {\n                    binary: xhr.response\n                  } : {\n                    text: xhr.responseText\n                  }, xhr.getAllResponseHeaders());\n                }\n              }\n            };\n          }; // Listen to events\n\n\n          xhr.onload = _callback();\n          errorCallback = xhr.onerror = xhr.ontimeout = _callback(\"error\"); // Support: IE 9 only\n          // Use onreadystatechange to replace onabort\n          // to handle uncaught aborts\n\n          if (xhr.onabort !== undefined) {\n            xhr.onabort = errorCallback;\n          } else {\n            xhr.onreadystatechange = function () {\n              // Check readyState before timeout as it changes\n              if (xhr.readyState === 4) {\n                // Allow onerror to be called first,\n                // but that will not handle a native abort\n                // Also, save errorCallback to a variable\n                // as xhr.onerror cannot be accessed\n                window.setTimeout(function () {\n                  if (_callback) {\n                    errorCallback();\n                  }\n                });\n              }\n            };\n          } // Create the abort callback\n\n\n          _callback = _callback(\"abort\");\n\n          try {\n            // Do send the request (this may raise an exception)\n            xhr.send(options.hasContent && options.data || null);\n          } catch (e) {\n            // #14683: Only rethrow if this hasn't been notified as an error yet\n            if (_callback) {\n              throw e;\n            }\n          }\n        },\n        abort: function abort() {\n          if (_callback) {\n            _callback();\n          }\n        }\n      };\n    }\n  }); // Prevent auto-execution of scripts when no explicit dataType was provided (See gh-2432)\n\n  jQuery.ajaxPrefilter(function (s) {\n    if (s.crossDomain) {\n      s.contents.script = false;\n    }\n  }); // Install script dataType\n\n  jQuery.ajaxSetup({\n    accepts: {\n      script: \"text/javascript, application/javascript, \" + \"application/ecmascript, application/x-ecmascript\"\n    },\n    contents: {\n      script: /\\b(?:java|ecma)script\\b/\n    },\n    converters: {\n      \"text script\": function textScript(text) {\n        jQuery.globalEval(text);\n        return text;\n      }\n    }\n  }); // Handle cache's special case and crossDomain\n\n  jQuery.ajaxPrefilter(\"script\", function (s) {\n    if (s.cache === undefined) {\n      s.cache = false;\n    }\n\n    if (s.crossDomain) {\n      s.type = \"GET\";\n    }\n  }); // Bind script tag hack transport\n\n  jQuery.ajaxTransport(\"script\", function (s) {\n    // This transport only deals with cross domain or forced-by-attrs requests\n    if (s.crossDomain || s.scriptAttrs) {\n      var script, _callback2;\n\n      return {\n        send: function send(_, complete) {\n          script = jQuery(\"<script>\").attr(s.scriptAttrs || {}).prop({\n            charset: s.scriptCharset,\n            src: s.url\n          }).on(\"load error\", _callback2 = function callback(evt) {\n            script.remove();\n            _callback2 = null;\n\n            if (evt) {\n              complete(evt.type === \"error\" ? 404 : 200, evt.type);\n            }\n          }); // Use native DOM manipulation to avoid our domManip AJAX trickery\n\n          document.head.appendChild(script[0]);\n        },\n        abort: function abort() {\n          if (_callback2) {\n            _callback2();\n          }\n        }\n      };\n    }\n  });\n  var oldCallbacks = [],\n      rjsonp = /(=)\\?(?=&|$)|\\?\\?/; // Default jsonp settings\n\n  jQuery.ajaxSetup({\n    jsonp: \"callback\",\n    jsonpCallback: function jsonpCallback() {\n      var callback = oldCallbacks.pop() || jQuery.expando + \"_\" + nonce++;\n      this[callback] = true;\n      return callback;\n    }\n  }); // Detect, normalize options and install callbacks for jsonp requests\n\n  jQuery.ajaxPrefilter(\"json jsonp\", function (s, originalSettings, jqXHR) {\n    var callbackName,\n        overwritten,\n        responseContainer,\n        jsonProp = s.jsonp !== false && (rjsonp.test(s.url) ? \"url\" : typeof s.data === \"string\" && (s.contentType || \"\").indexOf(\"application/x-www-form-urlencoded\") === 0 && rjsonp.test(s.data) && \"data\"); // Handle iff the expected data type is \"jsonp\" or we have a parameter to set\n\n    if (jsonProp || s.dataTypes[0] === \"jsonp\") {\n      // Get callback name, remembering preexisting value associated with it\n      callbackName = s.jsonpCallback = isFunction(s.jsonpCallback) ? s.jsonpCallback() : s.jsonpCallback; // Insert callback into url or form data\n\n      if (jsonProp) {\n        s[jsonProp] = s[jsonProp].replace(rjsonp, \"$1\" + callbackName);\n      } else if (s.jsonp !== false) {\n        s.url += (rquery.test(s.url) ? \"&\" : \"?\") + s.jsonp + \"=\" + callbackName;\n      } // Use data converter to retrieve json after script execution\n\n\n      s.converters[\"script json\"] = function () {\n        if (!responseContainer) {\n          jQuery.error(callbackName + \" was not called\");\n        }\n\n        return responseContainer[0];\n      }; // Force json dataType\n\n\n      s.dataTypes[0] = \"json\"; // Install callback\n\n      overwritten = window[callbackName];\n\n      window[callbackName] = function () {\n        responseContainer = arguments;\n      }; // Clean-up function (fires after converters)\n\n\n      jqXHR.always(function () {\n        // If previous value didn't exist - remove it\n        if (overwritten === undefined) {\n          jQuery(window).removeProp(callbackName); // Otherwise restore preexisting value\n        } else {\n          window[callbackName] = overwritten;\n        } // Save back as free\n\n\n        if (s[callbackName]) {\n          // Make sure that re-using the options doesn't screw things around\n          s.jsonpCallback = originalSettings.jsonpCallback; // Save the callback name for future use\n\n          oldCallbacks.push(callbackName);\n        } // Call if it was a function and we have a response\n\n\n        if (responseContainer && isFunction(overwritten)) {\n          overwritten(responseContainer[0]);\n        }\n\n        responseContainer = overwritten = undefined;\n      }); // Delegate to script\n\n      return \"script\";\n    }\n  }); // Support: Safari 8 only\n  // In Safari 8 documents created via document.implementation.createHTMLDocument\n  // collapse sibling forms: the second one becomes a child of the first one.\n  // Because of that, this security measure has to be disabled in Safari 8.\n  // https://bugs.webkit.org/show_bug.cgi?id=137337\n\n  support.createHTMLDocument = function () {\n    var body = document.implementation.createHTMLDocument(\"\").body;\n    body.innerHTML = \"<form></form><form></form>\";\n    return body.childNodes.length === 2;\n  }(); // Argument \"data\" should be string of html\n  // context (optional): If specified, the fragment will be created in this context,\n  // defaults to document\n  // keepScripts (optional): If true, will include scripts passed in the html string\n\n\n  jQuery.parseHTML = function (data, context, keepScripts) {\n    if (typeof data !== \"string\") {\n      return [];\n    }\n\n    if (typeof context === \"boolean\") {\n      keepScripts = context;\n      context = false;\n    }\n\n    var base, parsed, scripts;\n\n    if (!context) {\n      // Stop scripts or inline event handlers from being executed immediately\n      // by using document.implementation\n      if (support.createHTMLDocument) {\n        context = document.implementation.createHTMLDocument(\"\"); // Set the base href for the created document\n        // so any parsed elements with URLs\n        // are based on the document's URL (gh-2965)\n\n        base = context.createElement(\"base\");\n        base.href = document.location.href;\n        context.head.appendChild(base);\n      } else {\n        context = document;\n      }\n    }\n\n    parsed = rsingleTag.exec(data);\n    scripts = !keepScripts && []; // Single tag\n\n    if (parsed) {\n      return [context.createElement(parsed[1])];\n    }\n\n    parsed = buildFragment([data], context, scripts);\n\n    if (scripts && scripts.length) {\n      jQuery(scripts).remove();\n    }\n\n    return jQuery.merge([], parsed.childNodes);\n  };\n  /**\n   * Load a url into a page\n   */\n\n\n  jQuery.fn.load = function (url, params, callback) {\n    var selector,\n        type,\n        response,\n        self = this,\n        off = url.indexOf(\" \");\n\n    if (off > -1) {\n      selector = stripAndCollapse(url.slice(off));\n      url = url.slice(0, off);\n    } // If it's a function\n\n\n    if (isFunction(params)) {\n      // We assume that it's the callback\n      callback = params;\n      params = undefined; // Otherwise, build a param string\n    } else if (params && _typeof(params) === \"object\") {\n      type = \"POST\";\n    } // If we have elements to modify, make the request\n\n\n    if (self.length > 0) {\n      jQuery.ajax({\n        url: url,\n        // If \"type\" variable is undefined, then \"GET\" method will be used.\n        // Make value of this field explicit since\n        // user can override it through ajaxSetup method\n        type: type || \"GET\",\n        dataType: \"html\",\n        data: params\n      }).done(function (responseText) {\n        // Save response for use in complete callback\n        response = arguments;\n        self.html(selector ? // If a selector was specified, locate the right elements in a dummy div\n        // Exclude scripts to avoid IE 'Permission Denied' errors\n        jQuery(\"<div>\").append(jQuery.parseHTML(responseText)).find(selector) : // Otherwise use the full result\n        responseText); // If the request succeeds, this function gets \"data\", \"status\", \"jqXHR\"\n        // but they are ignored because response was set above.\n        // If it fails, this function gets \"jqXHR\", \"status\", \"error\"\n      }).always(callback && function (jqXHR, status) {\n        self.each(function () {\n          callback.apply(this, response || [jqXHR.responseText, status, jqXHR]);\n        });\n      });\n    }\n\n    return this;\n  }; // Attach a bunch of functions for handling common AJAX events\n\n\n  jQuery.each([\"ajaxStart\", \"ajaxStop\", \"ajaxComplete\", \"ajaxError\", \"ajaxSuccess\", \"ajaxSend\"], function (i, type) {\n    jQuery.fn[type] = function (fn) {\n      return this.on(type, fn);\n    };\n  });\n\n  jQuery.expr.pseudos.animated = function (elem) {\n    return jQuery.grep(jQuery.timers, function (fn) {\n      return elem === fn.elem;\n    }).length;\n  };\n\n  jQuery.offset = {\n    setOffset: function setOffset(elem, options, i) {\n      var curPosition,\n          curLeft,\n          curCSSTop,\n          curTop,\n          curOffset,\n          curCSSLeft,\n          calculatePosition,\n          position = jQuery.css(elem, \"position\"),\n          curElem = jQuery(elem),\n          props = {}; // Set position first, in-case top/left are set even on static elem\n\n      if (position === \"static\") {\n        elem.style.position = \"relative\";\n      }\n\n      curOffset = curElem.offset();\n      curCSSTop = jQuery.css(elem, \"top\");\n      curCSSLeft = jQuery.css(elem, \"left\");\n      calculatePosition = (position === \"absolute\" || position === \"fixed\") && (curCSSTop + curCSSLeft).indexOf(\"auto\") > -1; // Need to be able to calculate position if either\n      // top or left is auto and position is either absolute or fixed\n\n      if (calculatePosition) {\n        curPosition = curElem.position();\n        curTop = curPosition.top;\n        curLeft = curPosition.left;\n      } else {\n        curTop = parseFloat(curCSSTop) || 0;\n        curLeft = parseFloat(curCSSLeft) || 0;\n      }\n\n      if (isFunction(options)) {\n        // Use jQuery.extend here to allow modification of coordinates argument (gh-1848)\n        options = options.call(elem, i, jQuery.extend({}, curOffset));\n      }\n\n      if (options.top != null) {\n        props.top = options.top - curOffset.top + curTop;\n      }\n\n      if (options.left != null) {\n        props.left = options.left - curOffset.left + curLeft;\n      }\n\n      if (\"using\" in options) {\n        options.using.call(elem, props);\n      } else {\n        curElem.css(props);\n      }\n    }\n  };\n  jQuery.fn.extend({\n    // offset() relates an element's border box to the document origin\n    offset: function offset(options) {\n      // Preserve chaining for setter\n      if (arguments.length) {\n        return options === undefined ? this : this.each(function (i) {\n          jQuery.offset.setOffset(this, options, i);\n        });\n      }\n\n      var rect,\n          win,\n          elem = this[0];\n\n      if (!elem) {\n        return;\n      } // Return zeros for disconnected and hidden (display: none) elements (gh-2310)\n      // Support: IE <=11 only\n      // Running getBoundingClientRect on a\n      // disconnected node in IE throws an error\n\n\n      if (!elem.getClientRects().length) {\n        return {\n          top: 0,\n          left: 0\n        };\n      } // Get document-relative position by adding viewport scroll to viewport-relative gBCR\n\n\n      rect = elem.getBoundingClientRect();\n      win = elem.ownerDocument.defaultView;\n      return {\n        top: rect.top + win.pageYOffset,\n        left: rect.left + win.pageXOffset\n      };\n    },\n    // position() relates an element's margin box to its offset parent's padding box\n    // This corresponds to the behavior of CSS absolute positioning\n    position: function position() {\n      if (!this[0]) {\n        return;\n      }\n\n      var offsetParent,\n          offset,\n          doc,\n          elem = this[0],\n          parentOffset = {\n        top: 0,\n        left: 0\n      }; // position:fixed elements are offset from the viewport, which itself always has zero offset\n\n      if (jQuery.css(elem, \"position\") === \"fixed\") {\n        // Assume position:fixed implies availability of getBoundingClientRect\n        offset = elem.getBoundingClientRect();\n      } else {\n        offset = this.offset(); // Account for the *real* offset parent, which can be the document or its root element\n        // when a statically positioned element is identified\n\n        doc = elem.ownerDocument;\n        offsetParent = elem.offsetParent || doc.documentElement;\n\n        while (offsetParent && (offsetParent === doc.body || offsetParent === doc.documentElement) && jQuery.css(offsetParent, \"position\") === \"static\") {\n          offsetParent = offsetParent.parentNode;\n        }\n\n        if (offsetParent && offsetParent !== elem && offsetParent.nodeType === 1) {\n          // Incorporate borders into its offset, since they are outside its content origin\n          parentOffset = jQuery(offsetParent).offset();\n          parentOffset.top += jQuery.css(offsetParent, \"borderTopWidth\", true);\n          parentOffset.left += jQuery.css(offsetParent, \"borderLeftWidth\", true);\n        }\n      } // Subtract parent offsets and element margins\n\n\n      return {\n        top: offset.top - parentOffset.top - jQuery.css(elem, \"marginTop\", true),\n        left: offset.left - parentOffset.left - jQuery.css(elem, \"marginLeft\", true)\n      };\n    },\n    // This method will return documentElement in the following cases:\n    // 1) For the element inside the iframe without offsetParent, this method will return\n    //    documentElement of the parent window\n    // 2) For the hidden or detached element\n    // 3) For body or html element, i.e. in case of the html node - it will return itself\n    //\n    // but those exceptions were never presented as a real life use-cases\n    // and might be considered as more preferable results.\n    //\n    // This logic, however, is not guaranteed and can change at any point in the future\n    offsetParent: function offsetParent() {\n      return this.map(function () {\n        var offsetParent = this.offsetParent;\n\n        while (offsetParent && jQuery.css(offsetParent, \"position\") === \"static\") {\n          offsetParent = offsetParent.offsetParent;\n        }\n\n        return offsetParent || documentElement;\n      });\n    }\n  }); // Create scrollLeft and scrollTop methods\n\n  jQuery.each({\n    scrollLeft: \"pageXOffset\",\n    scrollTop: \"pageYOffset\"\n  }, function (method, prop) {\n    var top = \"pageYOffset\" === prop;\n\n    jQuery.fn[method] = function (val) {\n      return access(this, function (elem, method, val) {\n        // Coalesce documents and windows\n        var win;\n\n        if (isWindow(elem)) {\n          win = elem;\n        } else if (elem.nodeType === 9) {\n          win = elem.defaultView;\n        }\n\n        if (val === undefined) {\n          return win ? win[prop] : elem[method];\n        }\n\n        if (win) {\n          win.scrollTo(!top ? val : win.pageXOffset, top ? val : win.pageYOffset);\n        } else {\n          elem[method] = val;\n        }\n      }, method, val, arguments.length);\n    };\n  }); // Support: Safari <=7 - 9.1, Chrome <=37 - 49\n  // Add the top/left cssHooks using jQuery.fn.position\n  // Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084\n  // Blink bug: https://bugs.chromium.org/p/chromium/issues/detail?id=589347\n  // getComputedStyle returns percent when specified for top/left/bottom/right;\n  // rather than make the css module depend on the offset module, just check for it here\n\n  jQuery.each([\"top\", \"left\"], function (i, prop) {\n    jQuery.cssHooks[prop] = addGetHookIf(support.pixelPosition, function (elem, computed) {\n      if (computed) {\n        computed = curCSS(elem, prop); // If curCSS returns percentage, fallback to offset\n\n        return rnumnonpx.test(computed) ? jQuery(elem).position()[prop] + \"px\" : computed;\n      }\n    });\n  }); // Create innerHeight, innerWidth, height, width, outerHeight and outerWidth methods\n\n  jQuery.each({\n    Height: \"height\",\n    Width: \"width\"\n  }, function (name, type) {\n    jQuery.each({\n      padding: \"inner\" + name,\n      content: type,\n      \"\": \"outer\" + name\n    }, function (defaultExtra, funcName) {\n      // Margin is only for outerHeight, outerWidth\n      jQuery.fn[funcName] = function (margin, value) {\n        var chainable = arguments.length && (defaultExtra || typeof margin !== \"boolean\"),\n            extra = defaultExtra || (margin === true || value === true ? \"margin\" : \"border\");\n        return access(this, function (elem, type, value) {\n          var doc;\n\n          if (isWindow(elem)) {\n            // $( window ).outerWidth/Height return w/h including scrollbars (gh-1729)\n            return funcName.indexOf(\"outer\") === 0 ? elem[\"inner\" + name] : elem.document.documentElement[\"client\" + name];\n          } // Get document width or height\n\n\n          if (elem.nodeType === 9) {\n            doc = elem.documentElement; // Either scroll[Width/Height] or offset[Width/Height] or client[Width/Height],\n            // whichever is greatest\n\n            return Math.max(elem.body[\"scroll\" + name], doc[\"scroll\" + name], elem.body[\"offset\" + name], doc[\"offset\" + name], doc[\"client\" + name]);\n          }\n\n          return value === undefined ? // Get width or height on the element, requesting but not forcing parseFloat\n          jQuery.css(elem, type, extra) : // Set width or height on the element\n          jQuery.style(elem, type, value, extra);\n        }, type, chainable ? margin : undefined, chainable);\n      };\n    });\n  });\n  jQuery.each((\"blur focus focusin focusout resize scroll click dblclick \" + \"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave \" + \"change select submit keydown keypress keyup contextmenu\").split(\" \"), function (i, name) {\n    // Handle event binding\n    jQuery.fn[name] = function (data, fn) {\n      return arguments.length > 0 ? this.on(name, null, data, fn) : this.trigger(name);\n    };\n  });\n  jQuery.fn.extend({\n    hover: function hover(fnOver, fnOut) {\n      return this.mouseenter(fnOver).mouseleave(fnOut || fnOver);\n    }\n  });\n  jQuery.fn.extend({\n    bind: function bind(types, data, fn) {\n      return this.on(types, null, data, fn);\n    },\n    unbind: function unbind(types, fn) {\n      return this.off(types, null, fn);\n    },\n    delegate: function delegate(selector, types, data, fn) {\n      return this.on(types, selector, data, fn);\n    },\n    undelegate: function undelegate(selector, types, fn) {\n      // ( namespace ) or ( selector, types [, fn] )\n      return arguments.length === 1 ? this.off(selector, \"**\") : this.off(types, selector || \"**\", fn);\n    }\n  }); // Bind a function to a context, optionally partially applying any\n  // arguments.\n  // jQuery.proxy is deprecated to promote standards (specifically Function#bind)\n  // However, it is not slated for removal any time soon\n\n  jQuery.proxy = function (fn, context) {\n    var tmp, args, proxy;\n\n    if (typeof context === \"string\") {\n      tmp = fn[context];\n      context = fn;\n      fn = tmp;\n    } // Quick check to determine if target is callable, in the spec\n    // this throws a TypeError, but we will just return undefined.\n\n\n    if (!isFunction(fn)) {\n      return undefined;\n    } // Simulated bind\n\n\n    args = _slice.call(arguments, 2);\n\n    proxy = function proxy() {\n      return fn.apply(context || this, args.concat(_slice.call(arguments)));\n    }; // Set the guid of unique handler to the same of original handler, so it can be removed\n\n\n    proxy.guid = fn.guid = fn.guid || jQuery.guid++;\n    return proxy;\n  };\n\n  jQuery.holdReady = function (hold) {\n    if (hold) {\n      jQuery.readyWait++;\n    } else {\n      jQuery.ready(true);\n    }\n  };\n\n  jQuery.isArray = Array.isArray;\n  jQuery.parseJSON = JSON.parse;\n  jQuery.nodeName = nodeName;\n  jQuery.isFunction = isFunction;\n  jQuery.isWindow = isWindow;\n  jQuery.camelCase = camelCase;\n  jQuery.type = toType;\n  jQuery.now = Date.now;\n\n  jQuery.isNumeric = function (obj) {\n    // As of jQuery 3.0, isNumeric is limited to\n    // strings and numbers (primitives or objects)\n    // that can be coerced to finite numbers (gh-2662)\n    var type = jQuery.type(obj);\n    return (type === \"number\" || type === \"string\") && // parseFloat NaNs numeric-cast false positives (\"\")\n    // ...but misinterprets leading-number strings, particularly hex literals (\"0x...\")\n    // subtraction forces infinities to NaN\n    !isNaN(obj - parseFloat(obj));\n  }; // Register as a named AMD module, since jQuery can be concatenated with other\n  // files that may use define, but not via a proper concatenation script that\n  // understands anonymous AMD modules. A named AMD is safest and most robust\n  // way to register. Lowercase jquery is used because AMD module names are\n  // derived from file names, and jQuery is normally delivered in a lowercase\n  // file name. Do this after creating the global so that if an AMD module wants\n  // to call noConflict to hide this version of jQuery, it will work.\n  // Note that for maximum portability, libraries that are not jQuery should\n  // declare themselves as anonymous modules, and avoid setting a global if an\n  // AMD loader is present. jQuery is a special case. For more information, see\n  // https://github.com/jrburke/requirejs/wiki/Updating-existing-libraries#wiki-anon\n\n\n  if (typeof define === \"function\" && define.amd) {\n    define(\"jquery\", [], function () {\n      return jQuery;\n    });\n  }\n\n  var // Map over jQuery in case of overwrite\n  _jQuery = window.jQuery,\n      // Map over the $ in case of overwrite\n  _$ = window.$;\n\n  jQuery.noConflict = function (deep) {\n    if (window.$ === jQuery) {\n      window.$ = _$;\n    }\n\n    if (deep && window.jQuery === jQuery) {\n      window.jQuery = _jQuery;\n    }\n\n    return jQuery;\n  }; // Expose jQuery and $ identifiers, even in AMD\n  // (#7102#comment:10, https://github.com/jquery/jquery/pull/557)\n  // and CommonJS for browser emulators (#13566)\n\n\n  if (!noGlobal) {\n    window.jQuery = window.$ = jQuery;\n  }\n\n  return jQuery;\n});","if (typeof Object.create === 'function') {\n  // implementation from standard node.js 'util' module\n  module.exports = function inherits(ctor, superCtor) {\n    if (superCtor) {\n      ctor.super_ = superCtor;\n      ctor.prototype = Object.create(superCtor.prototype, {\n        constructor: {\n          value: ctor,\n          enumerable: false,\n          writable: true,\n          configurable: true\n        }\n      });\n    }\n  };\n} else {\n  // old school shim for old browsers\n  module.exports = function inherits(ctor, superCtor) {\n    if (superCtor) {\n      ctor.super_ = superCtor;\n\n      var TempCtor = function TempCtor() {};\n\n      TempCtor.prototype = superCtor.prototype;\n      ctor.prototype = new TempCtor();\n      ctor.prototype.constructor = ctor;\n    }\n  };\n}","module.exports = function(module) {\n\tif (!module.webpackPolyfill) {\n\t\tmodule.deprecate = function() {};\n\t\tmodule.paths = [];\n\t\t// module.parent = undefined by default\n\t\tif (!module.children) module.children = [];\n\t\tObject.defineProperty(module, \"loaded\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.l;\n\t\t\t}\n\t\t});\n\t\tObject.defineProperty(module, \"id\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.i;\n\t\t\t}\n\t\t});\n\t\tmodule.webpackPolyfill = 1;\n\t}\n\treturn module;\n};\n","/* eslint-disable node/no-deprecated-api */\nvar buffer = require('buffer');\n\nvar Buffer = buffer.Buffer; // alternative to using Object.keys for old browsers\n\nfunction copyProps(src, dst) {\n  for (var key in src) {\n    dst[key] = src[key];\n  }\n}\n\nif (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) {\n  module.exports = buffer;\n} else {\n  // Copy properties from require('buffer')\n  copyProps(buffer, exports);\n  exports.Buffer = SafeBuffer;\n}\n\nfunction SafeBuffer(arg, encodingOrOffset, length) {\n  return Buffer(arg, encodingOrOffset, length);\n}\n\nSafeBuffer.prototype = Object.create(Buffer.prototype); // Copy static methods from Buffer\n\ncopyProps(Buffer, SafeBuffer);\n\nSafeBuffer.from = function (arg, encodingOrOffset, length) {\n  if (typeof arg === 'number') {\n    throw new TypeError('Argument must not be a number');\n  }\n\n  return Buffer(arg, encodingOrOffset, length);\n};\n\nSafeBuffer.alloc = function (size, fill, encoding) {\n  if (typeof size !== 'number') {\n    throw new TypeError('Argument must be a number');\n  }\n\n  var buf = Buffer(size);\n\n  if (fill !== undefined) {\n    if (typeof encoding === 'string') {\n      buf.fill(fill, encoding);\n    } else {\n      buf.fill(fill);\n    }\n  } else {\n    buf.fill(0);\n  }\n\n  return buf;\n};\n\nSafeBuffer.allocUnsafe = function (size) {\n  if (typeof size !== 'number') {\n    throw new TypeError('Argument must be a number');\n  }\n\n  return Buffer(size);\n};\n\nSafeBuffer.allocUnsafeSlow = function (size) {\n  if (typeof size !== 'number') {\n    throw new TypeError('Argument must be a number');\n  }\n\n  return buffer.SlowBuffer(size);\n};","/*!\n * The buffer module from node.js, for the browser.\n *\n * @author   Feross Aboukhadijeh <feross@feross.org> <http://feross.org>\n * @license  MIT\n */\n\n/* eslint-disable no-proto */\n'use strict';\n\nvar base64 = require('base64-js');\n\nvar ieee754 = require('ieee754');\n\nvar isArray = require('isarray');\n\nexports.Buffer = Buffer;\nexports.SlowBuffer = SlowBuffer;\nexports.INSPECT_MAX_BYTES = 50;\n/**\n * If `Buffer.TYPED_ARRAY_SUPPORT`:\n *   === true    Use Uint8Array implementation (fastest)\n *   === false   Use Object implementation (most compatible, even IE6)\n *\n * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+,\n * Opera 11.6+, iOS 4.2+.\n *\n * Due to various browser bugs, sometimes the Object implementation will be used even\n * when the browser supports typed arrays.\n *\n * Note:\n *\n *   - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances,\n *     See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438.\n *\n *   - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function.\n *\n *   - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of\n *     incorrect length in some situations.\n\n * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they\n * get the Object implementation, which is slower but behaves correctly.\n */\n\nBuffer.TYPED_ARRAY_SUPPORT = global.TYPED_ARRAY_SUPPORT !== undefined ? global.TYPED_ARRAY_SUPPORT : typedArraySupport();\n/*\n * Export kMaxLength after typed array support is determined.\n */\n\nexports.kMaxLength = kMaxLength();\n\nfunction typedArraySupport() {\n  try {\n    var arr = new Uint8Array(1);\n    arr.__proto__ = {\n      __proto__: Uint8Array.prototype,\n      foo: function foo() {\n        return 42;\n      }\n    };\n    return arr.foo() === 42 && // typed array instances can be augmented\n    typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray`\n    arr.subarray(1, 1).byteLength === 0; // ie10 has broken `subarray`\n  } catch (e) {\n    return false;\n  }\n}\n\nfunction kMaxLength() {\n  return Buffer.TYPED_ARRAY_SUPPORT ? 0x7fffffff : 0x3fffffff;\n}\n\nfunction createBuffer(that, length) {\n  if (kMaxLength() < length) {\n    throw new RangeError('Invalid typed array length');\n  }\n\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    // Return an augmented `Uint8Array` instance, for best performance\n    that = new Uint8Array(length);\n    that.__proto__ = Buffer.prototype;\n  } else {\n    // Fallback: Return an object instance of the Buffer class\n    if (that === null) {\n      that = new Buffer(length);\n    }\n\n    that.length = length;\n  }\n\n  return that;\n}\n/**\n * The Buffer constructor returns instances of `Uint8Array` that have their\n * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of\n * `Uint8Array`, so the returned instances will have all the node `Buffer` methods\n * and the `Uint8Array` methods. Square bracket notation works as expected -- it\n * returns a single octet.\n *\n * The `Uint8Array` prototype remains unmodified.\n */\n\n\nfunction Buffer(arg, encodingOrOffset, length) {\n  if (!Buffer.TYPED_ARRAY_SUPPORT && !(this instanceof Buffer)) {\n    return new Buffer(arg, encodingOrOffset, length);\n  } // Common case.\n\n\n  if (typeof arg === 'number') {\n    if (typeof encodingOrOffset === 'string') {\n      throw new Error('If encoding is specified then the first argument must be a string');\n    }\n\n    return allocUnsafe(this, arg);\n  }\n\n  return from(this, arg, encodingOrOffset, length);\n}\n\nBuffer.poolSize = 8192; // not used by this implementation\n// TODO: Legacy, not needed anymore. Remove in next major version.\n\nBuffer._augment = function (arr) {\n  arr.__proto__ = Buffer.prototype;\n  return arr;\n};\n\nfunction from(that, value, encodingOrOffset, length) {\n  if (typeof value === 'number') {\n    throw new TypeError('\"value\" argument must not be a number');\n  }\n\n  if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) {\n    return fromArrayBuffer(that, value, encodingOrOffset, length);\n  }\n\n  if (typeof value === 'string') {\n    return fromString(that, value, encodingOrOffset);\n  }\n\n  return fromObject(that, value);\n}\n/**\n * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError\n * if value is a number.\n * Buffer.from(str[, encoding])\n * Buffer.from(array)\n * Buffer.from(buffer)\n * Buffer.from(arrayBuffer[, byteOffset[, length]])\n **/\n\n\nBuffer.from = function (value, encodingOrOffset, length) {\n  return from(null, value, encodingOrOffset, length);\n};\n\nif (Buffer.TYPED_ARRAY_SUPPORT) {\n  Buffer.prototype.__proto__ = Uint8Array.prototype;\n  Buffer.__proto__ = Uint8Array;\n\n  if (typeof Symbol !== 'undefined' && Symbol.species && Buffer[Symbol.species] === Buffer) {\n    // Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97\n    Object.defineProperty(Buffer, Symbol.species, {\n      value: null,\n      configurable: true\n    });\n  }\n}\n\nfunction assertSize(size) {\n  if (typeof size !== 'number') {\n    throw new TypeError('\"size\" argument must be a number');\n  } else if (size < 0) {\n    throw new RangeError('\"size\" argument must not be negative');\n  }\n}\n\nfunction alloc(that, size, fill, encoding) {\n  assertSize(size);\n\n  if (size <= 0) {\n    return createBuffer(that, size);\n  }\n\n  if (fill !== undefined) {\n    // Only pay attention to encoding if it's a string. This\n    // prevents accidentally sending in a number that would\n    // be interpretted as a start offset.\n    return typeof encoding === 'string' ? createBuffer(that, size).fill(fill, encoding) : createBuffer(that, size).fill(fill);\n  }\n\n  return createBuffer(that, size);\n}\n/**\n * Creates a new filled Buffer instance.\n * alloc(size[, fill[, encoding]])\n **/\n\n\nBuffer.alloc = function (size, fill, encoding) {\n  return alloc(null, size, fill, encoding);\n};\n\nfunction allocUnsafe(that, size) {\n  assertSize(size);\n  that = createBuffer(that, size < 0 ? 0 : checked(size) | 0);\n\n  if (!Buffer.TYPED_ARRAY_SUPPORT) {\n    for (var i = 0; i < size; ++i) {\n      that[i] = 0;\n    }\n  }\n\n  return that;\n}\n/**\n * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance.\n * */\n\n\nBuffer.allocUnsafe = function (size) {\n  return allocUnsafe(null, size);\n};\n/**\n * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance.\n */\n\n\nBuffer.allocUnsafeSlow = function (size) {\n  return allocUnsafe(null, size);\n};\n\nfunction fromString(that, string, encoding) {\n  if (typeof encoding !== 'string' || encoding === '') {\n    encoding = 'utf8';\n  }\n\n  if (!Buffer.isEncoding(encoding)) {\n    throw new TypeError('\"encoding\" must be a valid string encoding');\n  }\n\n  var length = byteLength(string, encoding) | 0;\n  that = createBuffer(that, length);\n  var actual = that.write(string, encoding);\n\n  if (actual !== length) {\n    // Writing a hex string, for example, that contains invalid characters will\n    // cause everything after the first invalid character to be ignored. (e.g.\n    // 'abxxcd' will be treated as 'ab')\n    that = that.slice(0, actual);\n  }\n\n  return that;\n}\n\nfunction fromArrayLike(that, array) {\n  var length = array.length < 0 ? 0 : checked(array.length) | 0;\n  that = createBuffer(that, length);\n\n  for (var i = 0; i < length; i += 1) {\n    that[i] = array[i] & 255;\n  }\n\n  return that;\n}\n\nfunction fromArrayBuffer(that, array, byteOffset, length) {\n  array.byteLength; // this throws if `array` is not a valid ArrayBuffer\n\n  if (byteOffset < 0 || array.byteLength < byteOffset) {\n    throw new RangeError('\\'offset\\' is out of bounds');\n  }\n\n  if (array.byteLength < byteOffset + (length || 0)) {\n    throw new RangeError('\\'length\\' is out of bounds');\n  }\n\n  if (byteOffset === undefined && length === undefined) {\n    array = new Uint8Array(array);\n  } else if (length === undefined) {\n    array = new Uint8Array(array, byteOffset);\n  } else {\n    array = new Uint8Array(array, byteOffset, length);\n  }\n\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    // Return an augmented `Uint8Array` instance, for best performance\n    that = array;\n    that.__proto__ = Buffer.prototype;\n  } else {\n    // Fallback: Return an object instance of the Buffer class\n    that = fromArrayLike(that, array);\n  }\n\n  return that;\n}\n\nfunction fromObject(that, obj) {\n  if (Buffer.isBuffer(obj)) {\n    var len = checked(obj.length) | 0;\n    that = createBuffer(that, len);\n\n    if (that.length === 0) {\n      return that;\n    }\n\n    obj.copy(that, 0, 0, len);\n    return that;\n  }\n\n  if (obj) {\n    if (typeof ArrayBuffer !== 'undefined' && obj.buffer instanceof ArrayBuffer || 'length' in obj) {\n      if (typeof obj.length !== 'number' || isnan(obj.length)) {\n        return createBuffer(that, 0);\n      }\n\n      return fromArrayLike(that, obj);\n    }\n\n    if (obj.type === 'Buffer' && isArray(obj.data)) {\n      return fromArrayLike(that, obj.data);\n    }\n  }\n\n  throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.');\n}\n\nfunction checked(length) {\n  // Note: cannot use `length < kMaxLength()` here because that fails when\n  // length is NaN (which is otherwise coerced to zero.)\n  if (length >= kMaxLength()) {\n    throw new RangeError('Attempt to allocate Buffer larger than maximum ' + 'size: 0x' + kMaxLength().toString(16) + ' bytes');\n  }\n\n  return length | 0;\n}\n\nfunction SlowBuffer(length) {\n  if (+length != length) {\n    // eslint-disable-line eqeqeq\n    length = 0;\n  }\n\n  return Buffer.alloc(+length);\n}\n\nBuffer.isBuffer = function isBuffer(b) {\n  return !!(b != null && b._isBuffer);\n};\n\nBuffer.compare = function compare(a, b) {\n  if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) {\n    throw new TypeError('Arguments must be Buffers');\n  }\n\n  if (a === b) return 0;\n  var x = a.length;\n  var y = b.length;\n\n  for (var i = 0, len = Math.min(x, y); i < len; ++i) {\n    if (a[i] !== b[i]) {\n      x = a[i];\n      y = b[i];\n      break;\n    }\n  }\n\n  if (x < y) return -1;\n  if (y < x) return 1;\n  return 0;\n};\n\nBuffer.isEncoding = function isEncoding(encoding) {\n  switch (String(encoding).toLowerCase()) {\n    case 'hex':\n    case 'utf8':\n    case 'utf-8':\n    case 'ascii':\n    case 'latin1':\n    case 'binary':\n    case 'base64':\n    case 'ucs2':\n    case 'ucs-2':\n    case 'utf16le':\n    case 'utf-16le':\n      return true;\n\n    default:\n      return false;\n  }\n};\n\nBuffer.concat = function concat(list, length) {\n  if (!isArray(list)) {\n    throw new TypeError('\"list\" argument must be an Array of Buffers');\n  }\n\n  if (list.length === 0) {\n    return Buffer.alloc(0);\n  }\n\n  var i;\n\n  if (length === undefined) {\n    length = 0;\n\n    for (i = 0; i < list.length; ++i) {\n      length += list[i].length;\n    }\n  }\n\n  var buffer = Buffer.allocUnsafe(length);\n  var pos = 0;\n\n  for (i = 0; i < list.length; ++i) {\n    var buf = list[i];\n\n    if (!Buffer.isBuffer(buf)) {\n      throw new TypeError('\"list\" argument must be an Array of Buffers');\n    }\n\n    buf.copy(buffer, pos);\n    pos += buf.length;\n  }\n\n  return buffer;\n};\n\nfunction byteLength(string, encoding) {\n  if (Buffer.isBuffer(string)) {\n    return string.length;\n  }\n\n  if (typeof ArrayBuffer !== 'undefined' && typeof ArrayBuffer.isView === 'function' && (ArrayBuffer.isView(string) || string instanceof ArrayBuffer)) {\n    return string.byteLength;\n  }\n\n  if (typeof string !== 'string') {\n    string = '' + string;\n  }\n\n  var len = string.length;\n  if (len === 0) return 0; // Use a for loop to avoid recursion\n\n  var loweredCase = false;\n\n  for (;;) {\n    switch (encoding) {\n      case 'ascii':\n      case 'latin1':\n      case 'binary':\n        return len;\n\n      case 'utf8':\n      case 'utf-8':\n      case undefined:\n        return utf8ToBytes(string).length;\n\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return len * 2;\n\n      case 'hex':\n        return len >>> 1;\n\n      case 'base64':\n        return base64ToBytes(string).length;\n\n      default:\n        if (loweredCase) return utf8ToBytes(string).length; // assume utf8\n\n        encoding = ('' + encoding).toLowerCase();\n        loweredCase = true;\n    }\n  }\n}\n\nBuffer.byteLength = byteLength;\n\nfunction slowToString(encoding, start, end) {\n  var loweredCase = false; // No need to verify that \"this.length <= MAX_UINT32\" since it's a read-only\n  // property of a typed array.\n  // This behaves neither like String nor Uint8Array in that we set start/end\n  // to their upper/lower bounds if the value passed is out of range.\n  // undefined is handled specially as per ECMA-262 6th Edition,\n  // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization.\n\n  if (start === undefined || start < 0) {\n    start = 0;\n  } // Return early if start > this.length. Done here to prevent potential uint32\n  // coercion fail below.\n\n\n  if (start > this.length) {\n    return '';\n  }\n\n  if (end === undefined || end > this.length) {\n    end = this.length;\n  }\n\n  if (end <= 0) {\n    return '';\n  } // Force coersion to uint32. This will also coerce falsey/NaN values to 0.\n\n\n  end >>>= 0;\n  start >>>= 0;\n\n  if (end <= start) {\n    return '';\n  }\n\n  if (!encoding) encoding = 'utf8';\n\n  while (true) {\n    switch (encoding) {\n      case 'hex':\n        return hexSlice(this, start, end);\n\n      case 'utf8':\n      case 'utf-8':\n        return utf8Slice(this, start, end);\n\n      case 'ascii':\n        return asciiSlice(this, start, end);\n\n      case 'latin1':\n      case 'binary':\n        return latin1Slice(this, start, end);\n\n      case 'base64':\n        return base64Slice(this, start, end);\n\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return utf16leSlice(this, start, end);\n\n      default:\n        if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding);\n        encoding = (encoding + '').toLowerCase();\n        loweredCase = true;\n    }\n  }\n} // The property is used by `Buffer.isBuffer` and `is-buffer` (in Safari 5-7) to detect\n// Buffer instances.\n\n\nBuffer.prototype._isBuffer = true;\n\nfunction swap(b, n, m) {\n  var i = b[n];\n  b[n] = b[m];\n  b[m] = i;\n}\n\nBuffer.prototype.swap16 = function swap16() {\n  var len = this.length;\n\n  if (len % 2 !== 0) {\n    throw new RangeError('Buffer size must be a multiple of 16-bits');\n  }\n\n  for (var i = 0; i < len; i += 2) {\n    swap(this, i, i + 1);\n  }\n\n  return this;\n};\n\nBuffer.prototype.swap32 = function swap32() {\n  var len = this.length;\n\n  if (len % 4 !== 0) {\n    throw new RangeError('Buffer size must be a multiple of 32-bits');\n  }\n\n  for (var i = 0; i < len; i += 4) {\n    swap(this, i, i + 3);\n    swap(this, i + 1, i + 2);\n  }\n\n  return this;\n};\n\nBuffer.prototype.swap64 = function swap64() {\n  var len = this.length;\n\n  if (len % 8 !== 0) {\n    throw new RangeError('Buffer size must be a multiple of 64-bits');\n  }\n\n  for (var i = 0; i < len; i += 8) {\n    swap(this, i, i + 7);\n    swap(this, i + 1, i + 6);\n    swap(this, i + 2, i + 5);\n    swap(this, i + 3, i + 4);\n  }\n\n  return this;\n};\n\nBuffer.prototype.toString = function toString() {\n  var length = this.length | 0;\n  if (length === 0) return '';\n  if (arguments.length === 0) return utf8Slice(this, 0, length);\n  return slowToString.apply(this, arguments);\n};\n\nBuffer.prototype.equals = function equals(b) {\n  if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer');\n  if (this === b) return true;\n  return Buffer.compare(this, b) === 0;\n};\n\nBuffer.prototype.inspect = function inspect() {\n  var str = '';\n  var max = exports.INSPECT_MAX_BYTES;\n\n  if (this.length > 0) {\n    str = this.toString('hex', 0, max).match(/.{2}/g).join(' ');\n    if (this.length > max) str += ' ... ';\n  }\n\n  return '<Buffer ' + str + '>';\n};\n\nBuffer.prototype.compare = function compare(target, start, end, thisStart, thisEnd) {\n  if (!Buffer.isBuffer(target)) {\n    throw new TypeError('Argument must be a Buffer');\n  }\n\n  if (start === undefined) {\n    start = 0;\n  }\n\n  if (end === undefined) {\n    end = target ? target.length : 0;\n  }\n\n  if (thisStart === undefined) {\n    thisStart = 0;\n  }\n\n  if (thisEnd === undefined) {\n    thisEnd = this.length;\n  }\n\n  if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) {\n    throw new RangeError('out of range index');\n  }\n\n  if (thisStart >= thisEnd && start >= end) {\n    return 0;\n  }\n\n  if (thisStart >= thisEnd) {\n    return -1;\n  }\n\n  if (start >= end) {\n    return 1;\n  }\n\n  start >>>= 0;\n  end >>>= 0;\n  thisStart >>>= 0;\n  thisEnd >>>= 0;\n  if (this === target) return 0;\n  var x = thisEnd - thisStart;\n  var y = end - start;\n  var len = Math.min(x, y);\n  var thisCopy = this.slice(thisStart, thisEnd);\n  var targetCopy = target.slice(start, end);\n\n  for (var i = 0; i < len; ++i) {\n    if (thisCopy[i] !== targetCopy[i]) {\n      x = thisCopy[i];\n      y = targetCopy[i];\n      break;\n    }\n  }\n\n  if (x < y) return -1;\n  if (y < x) return 1;\n  return 0;\n}; // Finds either the first index of `val` in `buffer` at offset >= `byteOffset`,\n// OR the last index of `val` in `buffer` at offset <= `byteOffset`.\n//\n// Arguments:\n// - buffer - a Buffer to search\n// - val - a string, Buffer, or number\n// - byteOffset - an index into `buffer`; will be clamped to an int32\n// - encoding - an optional encoding, relevant is val is a string\n// - dir - true for indexOf, false for lastIndexOf\n\n\nfunction bidirectionalIndexOf(buffer, val, byteOffset, encoding, dir) {\n  // Empty buffer means no match\n  if (buffer.length === 0) return -1; // Normalize byteOffset\n\n  if (typeof byteOffset === 'string') {\n    encoding = byteOffset;\n    byteOffset = 0;\n  } else if (byteOffset > 0x7fffffff) {\n    byteOffset = 0x7fffffff;\n  } else if (byteOffset < -0x80000000) {\n    byteOffset = -0x80000000;\n  }\n\n  byteOffset = +byteOffset; // Coerce to Number.\n\n  if (isNaN(byteOffset)) {\n    // byteOffset: it it's undefined, null, NaN, \"foo\", etc, search whole buffer\n    byteOffset = dir ? 0 : buffer.length - 1;\n  } // Normalize byteOffset: negative offsets start from the end of the buffer\n\n\n  if (byteOffset < 0) byteOffset = buffer.length + byteOffset;\n\n  if (byteOffset >= buffer.length) {\n    if (dir) return -1;else byteOffset = buffer.length - 1;\n  } else if (byteOffset < 0) {\n    if (dir) byteOffset = 0;else return -1;\n  } // Normalize val\n\n\n  if (typeof val === 'string') {\n    val = Buffer.from(val, encoding);\n  } // Finally, search either indexOf (if dir is true) or lastIndexOf\n\n\n  if (Buffer.isBuffer(val)) {\n    // Special case: looking for empty string/buffer always fails\n    if (val.length === 0) {\n      return -1;\n    }\n\n    return arrayIndexOf(buffer, val, byteOffset, encoding, dir);\n  } else if (typeof val === 'number') {\n    val = val & 0xFF; // Search for a byte value [0-255]\n\n    if (Buffer.TYPED_ARRAY_SUPPORT && typeof Uint8Array.prototype.indexOf === 'function') {\n      if (dir) {\n        return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset);\n      } else {\n        return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset);\n      }\n    }\n\n    return arrayIndexOf(buffer, [val], byteOffset, encoding, dir);\n  }\n\n  throw new TypeError('val must be string, number or Buffer');\n}\n\nfunction arrayIndexOf(arr, val, byteOffset, encoding, dir) {\n  var indexSize = 1;\n  var arrLength = arr.length;\n  var valLength = val.length;\n\n  if (encoding !== undefined) {\n    encoding = String(encoding).toLowerCase();\n\n    if (encoding === 'ucs2' || encoding === 'ucs-2' || encoding === 'utf16le' || encoding === 'utf-16le') {\n      if (arr.length < 2 || val.length < 2) {\n        return -1;\n      }\n\n      indexSize = 2;\n      arrLength /= 2;\n      valLength /= 2;\n      byteOffset /= 2;\n    }\n  }\n\n  function read(buf, i) {\n    if (indexSize === 1) {\n      return buf[i];\n    } else {\n      return buf.readUInt16BE(i * indexSize);\n    }\n  }\n\n  var i;\n\n  if (dir) {\n    var foundIndex = -1;\n\n    for (i = byteOffset; i < arrLength; i++) {\n      if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) {\n        if (foundIndex === -1) foundIndex = i;\n        if (i - foundIndex + 1 === valLength) return foundIndex * indexSize;\n      } else {\n        if (foundIndex !== -1) i -= i - foundIndex;\n        foundIndex = -1;\n      }\n    }\n  } else {\n    if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength;\n\n    for (i = byteOffset; i >= 0; i--) {\n      var found = true;\n\n      for (var j = 0; j < valLength; j++) {\n        if (read(arr, i + j) !== read(val, j)) {\n          found = false;\n          break;\n        }\n      }\n\n      if (found) return i;\n    }\n  }\n\n  return -1;\n}\n\nBuffer.prototype.includes = function includes(val, byteOffset, encoding) {\n  return this.indexOf(val, byteOffset, encoding) !== -1;\n};\n\nBuffer.prototype.indexOf = function indexOf(val, byteOffset, encoding) {\n  return bidirectionalIndexOf(this, val, byteOffset, encoding, true);\n};\n\nBuffer.prototype.lastIndexOf = function lastIndexOf(val, byteOffset, encoding) {\n  return bidirectionalIndexOf(this, val, byteOffset, encoding, false);\n};\n\nfunction hexWrite(buf, string, offset, length) {\n  offset = Number(offset) || 0;\n  var remaining = buf.length - offset;\n\n  if (!length) {\n    length = remaining;\n  } else {\n    length = Number(length);\n\n    if (length > remaining) {\n      length = remaining;\n    }\n  } // must be an even number of digits\n\n\n  var strLen = string.length;\n  if (strLen % 2 !== 0) throw new TypeError('Invalid hex string');\n\n  if (length > strLen / 2) {\n    length = strLen / 2;\n  }\n\n  for (var i = 0; i < length; ++i) {\n    var parsed = parseInt(string.substr(i * 2, 2), 16);\n    if (isNaN(parsed)) return i;\n    buf[offset + i] = parsed;\n  }\n\n  return i;\n}\n\nfunction utf8Write(buf, string, offset, length) {\n  return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length);\n}\n\nfunction asciiWrite(buf, string, offset, length) {\n  return blitBuffer(asciiToBytes(string), buf, offset, length);\n}\n\nfunction latin1Write(buf, string, offset, length) {\n  return asciiWrite(buf, string, offset, length);\n}\n\nfunction base64Write(buf, string, offset, length) {\n  return blitBuffer(base64ToBytes(string), buf, offset, length);\n}\n\nfunction ucs2Write(buf, string, offset, length) {\n  return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length);\n}\n\nBuffer.prototype.write = function write(string, offset, length, encoding) {\n  // Buffer#write(string)\n  if (offset === undefined) {\n    encoding = 'utf8';\n    length = this.length;\n    offset = 0; // Buffer#write(string, encoding)\n  } else if (length === undefined && typeof offset === 'string') {\n    encoding = offset;\n    length = this.length;\n    offset = 0; // Buffer#write(string, offset[, length][, encoding])\n  } else if (isFinite(offset)) {\n    offset = offset | 0;\n\n    if (isFinite(length)) {\n      length = length | 0;\n      if (encoding === undefined) encoding = 'utf8';\n    } else {\n      encoding = length;\n      length = undefined;\n    } // legacy write(string, encoding, offset, length) - remove in v0.13\n\n  } else {\n    throw new Error('Buffer.write(string, encoding, offset[, length]) is no longer supported');\n  }\n\n  var remaining = this.length - offset;\n  if (length === undefined || length > remaining) length = remaining;\n\n  if (string.length > 0 && (length < 0 || offset < 0) || offset > this.length) {\n    throw new RangeError('Attempt to write outside buffer bounds');\n  }\n\n  if (!encoding) encoding = 'utf8';\n  var loweredCase = false;\n\n  for (;;) {\n    switch (encoding) {\n      case 'hex':\n        return hexWrite(this, string, offset, length);\n\n      case 'utf8':\n      case 'utf-8':\n        return utf8Write(this, string, offset, length);\n\n      case 'ascii':\n        return asciiWrite(this, string, offset, length);\n\n      case 'latin1':\n      case 'binary':\n        return latin1Write(this, string, offset, length);\n\n      case 'base64':\n        // Warning: maxLength not taken into account in base64Write\n        return base64Write(this, string, offset, length);\n\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return ucs2Write(this, string, offset, length);\n\n      default:\n        if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding);\n        encoding = ('' + encoding).toLowerCase();\n        loweredCase = true;\n    }\n  }\n};\n\nBuffer.prototype.toJSON = function toJSON() {\n  return {\n    type: 'Buffer',\n    data: Array.prototype.slice.call(this._arr || this, 0)\n  };\n};\n\nfunction base64Slice(buf, start, end) {\n  if (start === 0 && end === buf.length) {\n    return base64.fromByteArray(buf);\n  } else {\n    return base64.fromByteArray(buf.slice(start, end));\n  }\n}\n\nfunction utf8Slice(buf, start, end) {\n  end = Math.min(buf.length, end);\n  var res = [];\n  var i = start;\n\n  while (i < end) {\n    var firstByte = buf[i];\n    var codePoint = null;\n    var bytesPerSequence = firstByte > 0xEF ? 4 : firstByte > 0xDF ? 3 : firstByte > 0xBF ? 2 : 1;\n\n    if (i + bytesPerSequence <= end) {\n      var secondByte, thirdByte, fourthByte, tempCodePoint;\n\n      switch (bytesPerSequence) {\n        case 1:\n          if (firstByte < 0x80) {\n            codePoint = firstByte;\n          }\n\n          break;\n\n        case 2:\n          secondByte = buf[i + 1];\n\n          if ((secondByte & 0xC0) === 0x80) {\n            tempCodePoint = (firstByte & 0x1F) << 0x6 | secondByte & 0x3F;\n\n            if (tempCodePoint > 0x7F) {\n              codePoint = tempCodePoint;\n            }\n          }\n\n          break;\n\n        case 3:\n          secondByte = buf[i + 1];\n          thirdByte = buf[i + 2];\n\n          if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) {\n            tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | thirdByte & 0x3F;\n\n            if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) {\n              codePoint = tempCodePoint;\n            }\n          }\n\n          break;\n\n        case 4:\n          secondByte = buf[i + 1];\n          thirdByte = buf[i + 2];\n          fourthByte = buf[i + 3];\n\n          if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) {\n            tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | fourthByte & 0x3F;\n\n            if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) {\n              codePoint = tempCodePoint;\n            }\n          }\n\n      }\n    }\n\n    if (codePoint === null) {\n      // we did not generate a valid codePoint so insert a\n      // replacement char (U+FFFD) and advance only 1 byte\n      codePoint = 0xFFFD;\n      bytesPerSequence = 1;\n    } else if (codePoint > 0xFFFF) {\n      // encode to utf16 (surrogate pair dance)\n      codePoint -= 0x10000;\n      res.push(codePoint >>> 10 & 0x3FF | 0xD800);\n      codePoint = 0xDC00 | codePoint & 0x3FF;\n    }\n\n    res.push(codePoint);\n    i += bytesPerSequence;\n  }\n\n  return decodeCodePointsArray(res);\n} // Based on http://stackoverflow.com/a/22747272/680742, the browser with\n// the lowest limit is Chrome, with 0x10000 args.\n// We go 1 magnitude less, for safety\n\n\nvar MAX_ARGUMENTS_LENGTH = 0x1000;\n\nfunction decodeCodePointsArray(codePoints) {\n  var len = codePoints.length;\n\n  if (len <= MAX_ARGUMENTS_LENGTH) {\n    return String.fromCharCode.apply(String, codePoints); // avoid extra slice()\n  } // Decode in chunks to avoid \"call stack size exceeded\".\n\n\n  var res = '';\n  var i = 0;\n\n  while (i < len) {\n    res += String.fromCharCode.apply(String, codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH));\n  }\n\n  return res;\n}\n\nfunction asciiSlice(buf, start, end) {\n  var ret = '';\n  end = Math.min(buf.length, end);\n\n  for (var i = start; i < end; ++i) {\n    ret += String.fromCharCode(buf[i] & 0x7F);\n  }\n\n  return ret;\n}\n\nfunction latin1Slice(buf, start, end) {\n  var ret = '';\n  end = Math.min(buf.length, end);\n\n  for (var i = start; i < end; ++i) {\n    ret += String.fromCharCode(buf[i]);\n  }\n\n  return ret;\n}\n\nfunction hexSlice(buf, start, end) {\n  var len = buf.length;\n  if (!start || start < 0) start = 0;\n  if (!end || end < 0 || end > len) end = len;\n  var out = '';\n\n  for (var i = start; i < end; ++i) {\n    out += toHex(buf[i]);\n  }\n\n  return out;\n}\n\nfunction utf16leSlice(buf, start, end) {\n  var bytes = buf.slice(start, end);\n  var res = '';\n\n  for (var i = 0; i < bytes.length; i += 2) {\n    res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256);\n  }\n\n  return res;\n}\n\nBuffer.prototype.slice = function slice(start, end) {\n  var len = this.length;\n  start = ~~start;\n  end = end === undefined ? len : ~~end;\n\n  if (start < 0) {\n    start += len;\n    if (start < 0) start = 0;\n  } else if (start > len) {\n    start = len;\n  }\n\n  if (end < 0) {\n    end += len;\n    if (end < 0) end = 0;\n  } else if (end > len) {\n    end = len;\n  }\n\n  if (end < start) end = start;\n  var newBuf;\n\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    newBuf = this.subarray(start, end);\n    newBuf.__proto__ = Buffer.prototype;\n  } else {\n    var sliceLen = end - start;\n    newBuf = new Buffer(sliceLen, undefined);\n\n    for (var i = 0; i < sliceLen; ++i) {\n      newBuf[i] = this[i + start];\n    }\n  }\n\n  return newBuf;\n};\n/*\n * Need to make sure that buffer isn't trying to write out of bounds.\n */\n\n\nfunction checkOffset(offset, ext, length) {\n  if (offset % 1 !== 0 || offset < 0) throw new RangeError('offset is not uint');\n  if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length');\n}\n\nBuffer.prototype.readUIntLE = function readUIntLE(offset, byteLength, noAssert) {\n  offset = offset | 0;\n  byteLength = byteLength | 0;\n  if (!noAssert) checkOffset(offset, byteLength, this.length);\n  var val = this[offset];\n  var mul = 1;\n  var i = 0;\n\n  while (++i < byteLength && (mul *= 0x100)) {\n    val += this[offset + i] * mul;\n  }\n\n  return val;\n};\n\nBuffer.prototype.readUIntBE = function readUIntBE(offset, byteLength, noAssert) {\n  offset = offset | 0;\n  byteLength = byteLength | 0;\n\n  if (!noAssert) {\n    checkOffset(offset, byteLength, this.length);\n  }\n\n  var val = this[offset + --byteLength];\n  var mul = 1;\n\n  while (byteLength > 0 && (mul *= 0x100)) {\n    val += this[offset + --byteLength] * mul;\n  }\n\n  return val;\n};\n\nBuffer.prototype.readUInt8 = function readUInt8(offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 1, this.length);\n  return this[offset];\n};\n\nBuffer.prototype.readUInt16LE = function readUInt16LE(offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 2, this.length);\n  return this[offset] | this[offset + 1] << 8;\n};\n\nBuffer.prototype.readUInt16BE = function readUInt16BE(offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 2, this.length);\n  return this[offset] << 8 | this[offset + 1];\n};\n\nBuffer.prototype.readUInt32LE = function readUInt32LE(offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length);\n  return (this[offset] | this[offset + 1] << 8 | this[offset + 2] << 16) + this[offset + 3] * 0x1000000;\n};\n\nBuffer.prototype.readUInt32BE = function readUInt32BE(offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length);\n  return this[offset] * 0x1000000 + (this[offset + 1] << 16 | this[offset + 2] << 8 | this[offset + 3]);\n};\n\nBuffer.prototype.readIntLE = function readIntLE(offset, byteLength, noAssert) {\n  offset = offset | 0;\n  byteLength = byteLength | 0;\n  if (!noAssert) checkOffset(offset, byteLength, this.length);\n  var val = this[offset];\n  var mul = 1;\n  var i = 0;\n\n  while (++i < byteLength && (mul *= 0x100)) {\n    val += this[offset + i] * mul;\n  }\n\n  mul *= 0x80;\n  if (val >= mul) val -= Math.pow(2, 8 * byteLength);\n  return val;\n};\n\nBuffer.prototype.readIntBE = function readIntBE(offset, byteLength, noAssert) {\n  offset = offset | 0;\n  byteLength = byteLength | 0;\n  if (!noAssert) checkOffset(offset, byteLength, this.length);\n  var i = byteLength;\n  var mul = 1;\n  var val = this[offset + --i];\n\n  while (i > 0 && (mul *= 0x100)) {\n    val += this[offset + --i] * mul;\n  }\n\n  mul *= 0x80;\n  if (val >= mul) val -= Math.pow(2, 8 * byteLength);\n  return val;\n};\n\nBuffer.prototype.readInt8 = function readInt8(offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 1, this.length);\n  if (!(this[offset] & 0x80)) return this[offset];\n  return (0xff - this[offset] + 1) * -1;\n};\n\nBuffer.prototype.readInt16LE = function readInt16LE(offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 2, this.length);\n  var val = this[offset] | this[offset + 1] << 8;\n  return val & 0x8000 ? val | 0xFFFF0000 : val;\n};\n\nBuffer.prototype.readInt16BE = function readInt16BE(offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 2, this.length);\n  var val = this[offset + 1] | this[offset] << 8;\n  return val & 0x8000 ? val | 0xFFFF0000 : val;\n};\n\nBuffer.prototype.readInt32LE = function readInt32LE(offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length);\n  return this[offset] | this[offset + 1] << 8 | this[offset + 2] << 16 | this[offset + 3] << 24;\n};\n\nBuffer.prototype.readInt32BE = function readInt32BE(offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length);\n  return this[offset] << 24 | this[offset + 1] << 16 | this[offset + 2] << 8 | this[offset + 3];\n};\n\nBuffer.prototype.readFloatLE = function readFloatLE(offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length);\n  return ieee754.read(this, offset, true, 23, 4);\n};\n\nBuffer.prototype.readFloatBE = function readFloatBE(offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 4, this.length);\n  return ieee754.read(this, offset, false, 23, 4);\n};\n\nBuffer.prototype.readDoubleLE = function readDoubleLE(offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 8, this.length);\n  return ieee754.read(this, offset, true, 52, 8);\n};\n\nBuffer.prototype.readDoubleBE = function readDoubleBE(offset, noAssert) {\n  if (!noAssert) checkOffset(offset, 8, this.length);\n  return ieee754.read(this, offset, false, 52, 8);\n};\n\nfunction checkInt(buf, value, offset, ext, max, min) {\n  if (!Buffer.isBuffer(buf)) throw new TypeError('\"buffer\" argument must be a Buffer instance');\n  if (value > max || value < min) throw new RangeError('\"value\" argument is out of bounds');\n  if (offset + ext > buf.length) throw new RangeError('Index out of range');\n}\n\nBuffer.prototype.writeUIntLE = function writeUIntLE(value, offset, byteLength, noAssert) {\n  value = +value;\n  offset = offset | 0;\n  byteLength = byteLength | 0;\n\n  if (!noAssert) {\n    var maxBytes = Math.pow(2, 8 * byteLength) - 1;\n    checkInt(this, value, offset, byteLength, maxBytes, 0);\n  }\n\n  var mul = 1;\n  var i = 0;\n  this[offset] = value & 0xFF;\n\n  while (++i < byteLength && (mul *= 0x100)) {\n    this[offset + i] = value / mul & 0xFF;\n  }\n\n  return offset + byteLength;\n};\n\nBuffer.prototype.writeUIntBE = function writeUIntBE(value, offset, byteLength, noAssert) {\n  value = +value;\n  offset = offset | 0;\n  byteLength = byteLength | 0;\n\n  if (!noAssert) {\n    var maxBytes = Math.pow(2, 8 * byteLength) - 1;\n    checkInt(this, value, offset, byteLength, maxBytes, 0);\n  }\n\n  var i = byteLength - 1;\n  var mul = 1;\n  this[offset + i] = value & 0xFF;\n\n  while (--i >= 0 && (mul *= 0x100)) {\n    this[offset + i] = value / mul & 0xFF;\n  }\n\n  return offset + byteLength;\n};\n\nBuffer.prototype.writeUInt8 = function writeUInt8(value, offset, noAssert) {\n  value = +value;\n  offset = offset | 0;\n  if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0);\n  if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value);\n  this[offset] = value & 0xff;\n  return offset + 1;\n};\n\nfunction objectWriteUInt16(buf, value, offset, littleEndian) {\n  if (value < 0) value = 0xffff + value + 1;\n\n  for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; ++i) {\n    buf[offset + i] = (value & 0xff << 8 * (littleEndian ? i : 1 - i)) >>> (littleEndian ? i : 1 - i) * 8;\n  }\n}\n\nBuffer.prototype.writeUInt16LE = function writeUInt16LE(value, offset, noAssert) {\n  value = +value;\n  offset = offset | 0;\n  if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0);\n\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = value & 0xff;\n    this[offset + 1] = value >>> 8;\n  } else {\n    objectWriteUInt16(this, value, offset, true);\n  }\n\n  return offset + 2;\n};\n\nBuffer.prototype.writeUInt16BE = function writeUInt16BE(value, offset, noAssert) {\n  value = +value;\n  offset = offset | 0;\n  if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0);\n\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = value >>> 8;\n    this[offset + 1] = value & 0xff;\n  } else {\n    objectWriteUInt16(this, value, offset, false);\n  }\n\n  return offset + 2;\n};\n\nfunction objectWriteUInt32(buf, value, offset, littleEndian) {\n  if (value < 0) value = 0xffffffff + value + 1;\n\n  for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; ++i) {\n    buf[offset + i] = value >>> (littleEndian ? i : 3 - i) * 8 & 0xff;\n  }\n}\n\nBuffer.prototype.writeUInt32LE = function writeUInt32LE(value, offset, noAssert) {\n  value = +value;\n  offset = offset | 0;\n  if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0);\n\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset + 3] = value >>> 24;\n    this[offset + 2] = value >>> 16;\n    this[offset + 1] = value >>> 8;\n    this[offset] = value & 0xff;\n  } else {\n    objectWriteUInt32(this, value, offset, true);\n  }\n\n  return offset + 4;\n};\n\nBuffer.prototype.writeUInt32BE = function writeUInt32BE(value, offset, noAssert) {\n  value = +value;\n  offset = offset | 0;\n  if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0);\n\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = value >>> 24;\n    this[offset + 1] = value >>> 16;\n    this[offset + 2] = value >>> 8;\n    this[offset + 3] = value & 0xff;\n  } else {\n    objectWriteUInt32(this, value, offset, false);\n  }\n\n  return offset + 4;\n};\n\nBuffer.prototype.writeIntLE = function writeIntLE(value, offset, byteLength, noAssert) {\n  value = +value;\n  offset = offset | 0;\n\n  if (!noAssert) {\n    var limit = Math.pow(2, 8 * byteLength - 1);\n    checkInt(this, value, offset, byteLength, limit - 1, -limit);\n  }\n\n  var i = 0;\n  var mul = 1;\n  var sub = 0;\n  this[offset] = value & 0xFF;\n\n  while (++i < byteLength && (mul *= 0x100)) {\n    if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) {\n      sub = 1;\n    }\n\n    this[offset + i] = (value / mul >> 0) - sub & 0xFF;\n  }\n\n  return offset + byteLength;\n};\n\nBuffer.prototype.writeIntBE = function writeIntBE(value, offset, byteLength, noAssert) {\n  value = +value;\n  offset = offset | 0;\n\n  if (!noAssert) {\n    var limit = Math.pow(2, 8 * byteLength - 1);\n    checkInt(this, value, offset, byteLength, limit - 1, -limit);\n  }\n\n  var i = byteLength - 1;\n  var mul = 1;\n  var sub = 0;\n  this[offset + i] = value & 0xFF;\n\n  while (--i >= 0 && (mul *= 0x100)) {\n    if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) {\n      sub = 1;\n    }\n\n    this[offset + i] = (value / mul >> 0) - sub & 0xFF;\n  }\n\n  return offset + byteLength;\n};\n\nBuffer.prototype.writeInt8 = function writeInt8(value, offset, noAssert) {\n  value = +value;\n  offset = offset | 0;\n  if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80);\n  if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value);\n  if (value < 0) value = 0xff + value + 1;\n  this[offset] = value & 0xff;\n  return offset + 1;\n};\n\nBuffer.prototype.writeInt16LE = function writeInt16LE(value, offset, noAssert) {\n  value = +value;\n  offset = offset | 0;\n  if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000);\n\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = value & 0xff;\n    this[offset + 1] = value >>> 8;\n  } else {\n    objectWriteUInt16(this, value, offset, true);\n  }\n\n  return offset + 2;\n};\n\nBuffer.prototype.writeInt16BE = function writeInt16BE(value, offset, noAssert) {\n  value = +value;\n  offset = offset | 0;\n  if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000);\n\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = value >>> 8;\n    this[offset + 1] = value & 0xff;\n  } else {\n    objectWriteUInt16(this, value, offset, false);\n  }\n\n  return offset + 2;\n};\n\nBuffer.prototype.writeInt32LE = function writeInt32LE(value, offset, noAssert) {\n  value = +value;\n  offset = offset | 0;\n  if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000);\n\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = value & 0xff;\n    this[offset + 1] = value >>> 8;\n    this[offset + 2] = value >>> 16;\n    this[offset + 3] = value >>> 24;\n  } else {\n    objectWriteUInt32(this, value, offset, true);\n  }\n\n  return offset + 4;\n};\n\nBuffer.prototype.writeInt32BE = function writeInt32BE(value, offset, noAssert) {\n  value = +value;\n  offset = offset | 0;\n  if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000);\n  if (value < 0) value = 0xffffffff + value + 1;\n\n  if (Buffer.TYPED_ARRAY_SUPPORT) {\n    this[offset] = value >>> 24;\n    this[offset + 1] = value >>> 16;\n    this[offset + 2] = value >>> 8;\n    this[offset + 3] = value & 0xff;\n  } else {\n    objectWriteUInt32(this, value, offset, false);\n  }\n\n  return offset + 4;\n};\n\nfunction checkIEEE754(buf, value, offset, ext, max, min) {\n  if (offset + ext > buf.length) throw new RangeError('Index out of range');\n  if (offset < 0) throw new RangeError('Index out of range');\n}\n\nfunction writeFloat(buf, value, offset, littleEndian, noAssert) {\n  if (!noAssert) {\n    checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38);\n  }\n\n  ieee754.write(buf, value, offset, littleEndian, 23, 4);\n  return offset + 4;\n}\n\nBuffer.prototype.writeFloatLE = function writeFloatLE(value, offset, noAssert) {\n  return writeFloat(this, value, offset, true, noAssert);\n};\n\nBuffer.prototype.writeFloatBE = function writeFloatBE(value, offset, noAssert) {\n  return writeFloat(this, value, offset, false, noAssert);\n};\n\nfunction writeDouble(buf, value, offset, littleEndian, noAssert) {\n  if (!noAssert) {\n    checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308);\n  }\n\n  ieee754.write(buf, value, offset, littleEndian, 52, 8);\n  return offset + 8;\n}\n\nBuffer.prototype.writeDoubleLE = function writeDoubleLE(value, offset, noAssert) {\n  return writeDouble(this, value, offset, true, noAssert);\n};\n\nBuffer.prototype.writeDoubleBE = function writeDoubleBE(value, offset, noAssert) {\n  return writeDouble(this, value, offset, false, noAssert);\n}; // copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length)\n\n\nBuffer.prototype.copy = function copy(target, targetStart, start, end) {\n  if (!start) start = 0;\n  if (!end && end !== 0) end = this.length;\n  if (targetStart >= target.length) targetStart = target.length;\n  if (!targetStart) targetStart = 0;\n  if (end > 0 && end < start) end = start; // Copy 0 bytes; we're done\n\n  if (end === start) return 0;\n  if (target.length === 0 || this.length === 0) return 0; // Fatal error conditions\n\n  if (targetStart < 0) {\n    throw new RangeError('targetStart out of bounds');\n  }\n\n  if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds');\n  if (end < 0) throw new RangeError('sourceEnd out of bounds'); // Are we oob?\n\n  if (end > this.length) end = this.length;\n\n  if (target.length - targetStart < end - start) {\n    end = target.length - targetStart + start;\n  }\n\n  var len = end - start;\n  var i;\n\n  if (this === target && start < targetStart && targetStart < end) {\n    // descending copy from end\n    for (i = len - 1; i >= 0; --i) {\n      target[i + targetStart] = this[i + start];\n    }\n  } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) {\n    // ascending copy from start\n    for (i = 0; i < len; ++i) {\n      target[i + targetStart] = this[i + start];\n    }\n  } else {\n    Uint8Array.prototype.set.call(target, this.subarray(start, start + len), targetStart);\n  }\n\n  return len;\n}; // Usage:\n//    buffer.fill(number[, offset[, end]])\n//    buffer.fill(buffer[, offset[, end]])\n//    buffer.fill(string[, offset[, end]][, encoding])\n\n\nBuffer.prototype.fill = function fill(val, start, end, encoding) {\n  // Handle string cases:\n  if (typeof val === 'string') {\n    if (typeof start === 'string') {\n      encoding = start;\n      start = 0;\n      end = this.length;\n    } else if (typeof end === 'string') {\n      encoding = end;\n      end = this.length;\n    }\n\n    if (val.length === 1) {\n      var code = val.charCodeAt(0);\n\n      if (code < 256) {\n        val = code;\n      }\n    }\n\n    if (encoding !== undefined && typeof encoding !== 'string') {\n      throw new TypeError('encoding must be a string');\n    }\n\n    if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) {\n      throw new TypeError('Unknown encoding: ' + encoding);\n    }\n  } else if (typeof val === 'number') {\n    val = val & 255;\n  } // Invalid ranges are not set to a default, so can range check early.\n\n\n  if (start < 0 || this.length < start || this.length < end) {\n    throw new RangeError('Out of range index');\n  }\n\n  if (end <= start) {\n    return this;\n  }\n\n  start = start >>> 0;\n  end = end === undefined ? this.length : end >>> 0;\n  if (!val) val = 0;\n  var i;\n\n  if (typeof val === 'number') {\n    for (i = start; i < end; ++i) {\n      this[i] = val;\n    }\n  } else {\n    var bytes = Buffer.isBuffer(val) ? val : utf8ToBytes(new Buffer(val, encoding).toString());\n    var len = bytes.length;\n\n    for (i = 0; i < end - start; ++i) {\n      this[i + start] = bytes[i % len];\n    }\n  }\n\n  return this;\n}; // HELPER FUNCTIONS\n// ================\n\n\nvar INVALID_BASE64_RE = /[^+\\/0-9A-Za-z-_]/g;\n\nfunction base64clean(str) {\n  // Node strips out invalid characters like \\n and \\t from the string, base64-js does not\n  str = stringtrim(str).replace(INVALID_BASE64_RE, ''); // Node converts strings with length < 2 to ''\n\n  if (str.length < 2) return ''; // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not\n\n  while (str.length % 4 !== 0) {\n    str = str + '=';\n  }\n\n  return str;\n}\n\nfunction stringtrim(str) {\n  if (str.trim) return str.trim();\n  return str.replace(/^\\s+|\\s+$/g, '');\n}\n\nfunction toHex(n) {\n  if (n < 16) return '0' + n.toString(16);\n  return n.toString(16);\n}\n\nfunction utf8ToBytes(string, units) {\n  units = units || Infinity;\n  var codePoint;\n  var length = string.length;\n  var leadSurrogate = null;\n  var bytes = [];\n\n  for (var i = 0; i < length; ++i) {\n    codePoint = string.charCodeAt(i); // is surrogate component\n\n    if (codePoint > 0xD7FF && codePoint < 0xE000) {\n      // last char was a lead\n      if (!leadSurrogate) {\n        // no lead yet\n        if (codePoint > 0xDBFF) {\n          // unexpected trail\n          if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD);\n          continue;\n        } else if (i + 1 === length) {\n          // unpaired lead\n          if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD);\n          continue;\n        } // valid lead\n\n\n        leadSurrogate = codePoint;\n        continue;\n      } // 2 leads in a row\n\n\n      if (codePoint < 0xDC00) {\n        if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD);\n        leadSurrogate = codePoint;\n        continue;\n      } // valid surrogate pair\n\n\n      codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000;\n    } else if (leadSurrogate) {\n      // valid bmp char, but last char was a lead\n      if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD);\n    }\n\n    leadSurrogate = null; // encode utf8\n\n    if (codePoint < 0x80) {\n      if ((units -= 1) < 0) break;\n      bytes.push(codePoint);\n    } else if (codePoint < 0x800) {\n      if ((units -= 2) < 0) break;\n      bytes.push(codePoint >> 0x6 | 0xC0, codePoint & 0x3F | 0x80);\n    } else if (codePoint < 0x10000) {\n      if ((units -= 3) < 0) break;\n      bytes.push(codePoint >> 0xC | 0xE0, codePoint >> 0x6 & 0x3F | 0x80, codePoint & 0x3F | 0x80);\n    } else if (codePoint < 0x110000) {\n      if ((units -= 4) < 0) break;\n      bytes.push(codePoint >> 0x12 | 0xF0, codePoint >> 0xC & 0x3F | 0x80, codePoint >> 0x6 & 0x3F | 0x80, codePoint & 0x3F | 0x80);\n    } else {\n      throw new Error('Invalid code point');\n    }\n  }\n\n  return bytes;\n}\n\nfunction asciiToBytes(str) {\n  var byteArray = [];\n\n  for (var i = 0; i < str.length; ++i) {\n    // Node's code seems to be doing this and not & 0x7F..\n    byteArray.push(str.charCodeAt(i) & 0xFF);\n  }\n\n  return byteArray;\n}\n\nfunction utf16leToBytes(str, units) {\n  var c, hi, lo;\n  var byteArray = [];\n\n  for (var i = 0; i < str.length; ++i) {\n    if ((units -= 2) < 0) break;\n    c = str.charCodeAt(i);\n    hi = c >> 8;\n    lo = c % 256;\n    byteArray.push(lo);\n    byteArray.push(hi);\n  }\n\n  return byteArray;\n}\n\nfunction base64ToBytes(str) {\n  return base64.toByteArray(base64clean(str));\n}\n\nfunction blitBuffer(src, dst, offset, length) {\n  for (var i = 0; i < length; ++i) {\n    if (i + offset >= dst.length || i >= src.length) break;\n    dst[i + offset] = src[i];\n  }\n\n  return i;\n}\n\nfunction isnan(val) {\n  return val !== val; // eslint-disable-line no-self-compare\n}","'use strict';\n\nvar support = require('./support');\n\nvar base64 = require('./base64');\n\nvar nodejsUtils = require('./nodejsUtils');\n\nvar setImmediate = require('set-immediate-shim');\n\nvar external = require(\"./external\");\n/**\n * Convert a string that pass as a \"binary string\": it should represent a byte\n * array but may have > 255 char codes. Be sure to take only the first byte\n * and returns the byte array.\n * @param {String} str the string to transform.\n * @return {Array|Uint8Array} the string in a binary format.\n */\n\n\nfunction string2binary(str) {\n  var result = null;\n\n  if (support.uint8array) {\n    result = new Uint8Array(str.length);\n  } else {\n    result = new Array(str.length);\n  }\n\n  return stringToArrayLike(str, result);\n}\n/**\n * Create a new blob with the given content and the given type.\n * @param {String|ArrayBuffer} part the content to put in the blob. DO NOT use\n * an Uint8Array because the stock browser of android 4 won't accept it (it\n * will be silently converted to a string, \"[object Uint8Array]\").\n *\n * Use only ONE part to build the blob to avoid a memory leak in IE11 / Edge:\n * when a large amount of Array is used to create the Blob, the amount of\n * memory consumed is nearly 100 times the original data amount.\n *\n * @param {String} type the mime type of the blob.\n * @return {Blob} the created blob.\n */\n\n\nexports.newBlob = function (part, type) {\n  exports.checkSupport(\"blob\");\n\n  try {\n    // Blob constructor\n    return new Blob([part], {\n      type: type\n    });\n  } catch (e) {\n    try {\n      // deprecated, browser only, old way\n      var Builder = self.BlobBuilder || self.WebKitBlobBuilder || self.MozBlobBuilder || self.MSBlobBuilder;\n      var builder = new Builder();\n      builder.append(part);\n      return builder.getBlob(type);\n    } catch (e) {\n      // well, fuck ?!\n      throw new Error(\"Bug : can't construct the Blob.\");\n    }\n  }\n};\n/**\n * The identity function.\n * @param {Object} input the input.\n * @return {Object} the same input.\n */\n\n\nfunction identity(input) {\n  return input;\n}\n/**\n * Fill in an array with a string.\n * @param {String} str the string to use.\n * @param {Array|ArrayBuffer|Uint8Array|Buffer} array the array to fill in (will be mutated).\n * @return {Array|ArrayBuffer|Uint8Array|Buffer} the updated array.\n */\n\n\nfunction stringToArrayLike(str, array) {\n  for (var i = 0; i < str.length; ++i) {\n    array[i] = str.charCodeAt(i) & 0xFF;\n  }\n\n  return array;\n}\n/**\n * An helper for the function arrayLikeToString.\n * This contains static informations and functions that\n * can be optimized by the browser JIT compiler.\n */\n\n\nvar arrayToStringHelper = {\n  /**\n   * Transform an array of int into a string, chunk by chunk.\n   * See the performances notes on arrayLikeToString.\n   * @param {Array|ArrayBuffer|Uint8Array|Buffer} array the array to transform.\n   * @param {String} type the type of the array.\n   * @param {Integer} chunk the chunk size.\n   * @return {String} the resulting string.\n   * @throws Error if the chunk is too big for the stack.\n   */\n  stringifyByChunk: function stringifyByChunk(array, type, chunk) {\n    var result = [],\n        k = 0,\n        len = array.length; // shortcut\n\n    if (len <= chunk) {\n      return String.fromCharCode.apply(null, array);\n    }\n\n    while (k < len) {\n      if (type === \"array\" || type === \"nodebuffer\") {\n        result.push(String.fromCharCode.apply(null, array.slice(k, Math.min(k + chunk, len))));\n      } else {\n        result.push(String.fromCharCode.apply(null, array.subarray(k, Math.min(k + chunk, len))));\n      }\n\n      k += chunk;\n    }\n\n    return result.join(\"\");\n  },\n\n  /**\n   * Call String.fromCharCode on every item in the array.\n   * This is the naive implementation, which generate A LOT of intermediate string.\n   * This should be used when everything else fail.\n   * @param {Array|ArrayBuffer|Uint8Array|Buffer} array the array to transform.\n   * @return {String} the result.\n   */\n  stringifyByChar: function stringifyByChar(array) {\n    var resultStr = \"\";\n\n    for (var i = 0; i < array.length; i++) {\n      resultStr += String.fromCharCode(array[i]);\n    }\n\n    return resultStr;\n  },\n  applyCanBeUsed: {\n    /**\n     * true if the browser accepts to use String.fromCharCode on Uint8Array\n     */\n    uint8array: function () {\n      try {\n        return support.uint8array && String.fromCharCode.apply(null, new Uint8Array(1)).length === 1;\n      } catch (e) {\n        return false;\n      }\n    }(),\n\n    /**\n     * true if the browser accepts to use String.fromCharCode on nodejs Buffer.\n     */\n    nodebuffer: function () {\n      try {\n        return support.nodebuffer && String.fromCharCode.apply(null, nodejsUtils.allocBuffer(1)).length === 1;\n      } catch (e) {\n        return false;\n      }\n    }()\n  }\n};\n/**\n * Transform an array-like object to a string.\n * @param {Array|ArrayBuffer|Uint8Array|Buffer} array the array to transform.\n * @return {String} the result.\n */\n\nfunction arrayLikeToString(array) {\n  // Performances notes :\n  // --------------------\n  // String.fromCharCode.apply(null, array) is the fastest, see\n  // see http://jsperf.com/converting-a-uint8array-to-a-string/2\n  // but the stack is limited (and we can get huge arrays !).\n  //\n  // result += String.fromCharCode(array[i]); generate too many strings !\n  //\n  // This code is inspired by http://jsperf.com/arraybuffer-to-string-apply-performance/2\n  // TODO : we now have workers that split the work. Do we still need that ?\n  var chunk = 65536,\n      type = exports.getTypeOf(array),\n      canUseApply = true;\n\n  if (type === \"uint8array\") {\n    canUseApply = arrayToStringHelper.applyCanBeUsed.uint8array;\n  } else if (type === \"nodebuffer\") {\n    canUseApply = arrayToStringHelper.applyCanBeUsed.nodebuffer;\n  }\n\n  if (canUseApply) {\n    while (chunk > 1) {\n      try {\n        return arrayToStringHelper.stringifyByChunk(array, type, chunk);\n      } catch (e) {\n        chunk = Math.floor(chunk / 2);\n      }\n    }\n  } // no apply or chunk error : slow and painful algorithm\n  // default browser on android 4.*\n\n\n  return arrayToStringHelper.stringifyByChar(array);\n}\n\nexports.applyFromCharCode = arrayLikeToString;\n/**\n * Copy the data from an array-like to an other array-like.\n * @param {Array|ArrayBuffer|Uint8Array|Buffer} arrayFrom the origin array.\n * @param {Array|ArrayBuffer|Uint8Array|Buffer} arrayTo the destination array which will be mutated.\n * @return {Array|ArrayBuffer|Uint8Array|Buffer} the updated destination array.\n */\n\nfunction arrayLikeToArrayLike(arrayFrom, arrayTo) {\n  for (var i = 0; i < arrayFrom.length; i++) {\n    arrayTo[i] = arrayFrom[i];\n  }\n\n  return arrayTo;\n} // a matrix containing functions to transform everything into everything.\n\n\nvar transform = {}; // string to ?\n\ntransform[\"string\"] = {\n  \"string\": identity,\n  \"array\": function array(input) {\n    return stringToArrayLike(input, new Array(input.length));\n  },\n  \"arraybuffer\": function arraybuffer(input) {\n    return transform[\"string\"][\"uint8array\"](input).buffer;\n  },\n  \"uint8array\": function uint8array(input) {\n    return stringToArrayLike(input, new Uint8Array(input.length));\n  },\n  \"nodebuffer\": function nodebuffer(input) {\n    return stringToArrayLike(input, nodejsUtils.allocBuffer(input.length));\n  }\n}; // array to ?\n\ntransform[\"array\"] = {\n  \"string\": arrayLikeToString,\n  \"array\": identity,\n  \"arraybuffer\": function arraybuffer(input) {\n    return new Uint8Array(input).buffer;\n  },\n  \"uint8array\": function uint8array(input) {\n    return new Uint8Array(input);\n  },\n  \"nodebuffer\": function nodebuffer(input) {\n    return nodejsUtils.newBufferFrom(input);\n  }\n}; // arraybuffer to ?\n\ntransform[\"arraybuffer\"] = {\n  \"string\": function string(input) {\n    return arrayLikeToString(new Uint8Array(input));\n  },\n  \"array\": function array(input) {\n    return arrayLikeToArrayLike(new Uint8Array(input), new Array(input.byteLength));\n  },\n  \"arraybuffer\": identity,\n  \"uint8array\": function uint8array(input) {\n    return new Uint8Array(input);\n  },\n  \"nodebuffer\": function nodebuffer(input) {\n    return nodejsUtils.newBufferFrom(new Uint8Array(input));\n  }\n}; // uint8array to ?\n\ntransform[\"uint8array\"] = {\n  \"string\": arrayLikeToString,\n  \"array\": function array(input) {\n    return arrayLikeToArrayLike(input, new Array(input.length));\n  },\n  \"arraybuffer\": function arraybuffer(input) {\n    return input.buffer;\n  },\n  \"uint8array\": identity,\n  \"nodebuffer\": function nodebuffer(input) {\n    return nodejsUtils.newBufferFrom(input);\n  }\n}; // nodebuffer to ?\n\ntransform[\"nodebuffer\"] = {\n  \"string\": arrayLikeToString,\n  \"array\": function array(input) {\n    return arrayLikeToArrayLike(input, new Array(input.length));\n  },\n  \"arraybuffer\": function arraybuffer(input) {\n    return transform[\"nodebuffer\"][\"uint8array\"](input).buffer;\n  },\n  \"uint8array\": function uint8array(input) {\n    return arrayLikeToArrayLike(input, new Uint8Array(input.length));\n  },\n  \"nodebuffer\": identity\n};\n/**\n * Transform an input into any type.\n * The supported output type are : string, array, uint8array, arraybuffer, nodebuffer.\n * If no output type is specified, the unmodified input will be returned.\n * @param {String} outputType the output type.\n * @param {String|Array|ArrayBuffer|Uint8Array|Buffer} input the input to convert.\n * @throws {Error} an Error if the browser doesn't support the requested output type.\n */\n\nexports.transformTo = function (outputType, input) {\n  if (!input) {\n    // undefined, null, etc\n    // an empty string won't harm.\n    input = \"\";\n  }\n\n  if (!outputType) {\n    return input;\n  }\n\n  exports.checkSupport(outputType);\n  var inputType = exports.getTypeOf(input);\n  var result = transform[inputType][outputType](input);\n  return result;\n};\n/**\n * Return the type of the input.\n * The type will be in a format valid for JSZip.utils.transformTo : string, array, uint8array, arraybuffer.\n * @param {Object} input the input to identify.\n * @return {String} the (lowercase) type of the input.\n */\n\n\nexports.getTypeOf = function (input) {\n  if (typeof input === \"string\") {\n    return \"string\";\n  }\n\n  if (Object.prototype.toString.call(input) === \"[object Array]\") {\n    return \"array\";\n  }\n\n  if (support.nodebuffer && nodejsUtils.isBuffer(input)) {\n    return \"nodebuffer\";\n  }\n\n  if (support.uint8array && input instanceof Uint8Array) {\n    return \"uint8array\";\n  }\n\n  if (support.arraybuffer && input instanceof ArrayBuffer) {\n    return \"arraybuffer\";\n  }\n};\n/**\n * Throw an exception if the type is not supported.\n * @param {String} type the type to check.\n * @throws {Error} an Error if the browser doesn't support the requested type.\n */\n\n\nexports.checkSupport = function (type) {\n  var supported = support[type.toLowerCase()];\n\n  if (!supported) {\n    throw new Error(type + \" is not supported by this platform\");\n  }\n};\n\nexports.MAX_VALUE_16BITS = 65535;\nexports.MAX_VALUE_32BITS = -1; // well, \"\\xFF\\xFF\\xFF\\xFF\\xFF\\xFF\\xFF\\xFF\" is parsed as -1\n\n/**\n * Prettify a string read as binary.\n * @param {string} str the string to prettify.\n * @return {string} a pretty string.\n */\n\nexports.pretty = function (str) {\n  var res = '',\n      code,\n      i;\n\n  for (i = 0; i < (str || \"\").length; i++) {\n    code = str.charCodeAt(i);\n    res += '\\\\x' + (code < 16 ? \"0\" : \"\") + code.toString(16).toUpperCase();\n  }\n\n  return res;\n};\n/**\n * Defer the call of a function.\n * @param {Function} callback the function to call asynchronously.\n * @param {Array} args the arguments to give to the callback.\n */\n\n\nexports.delay = function (callback, args, self) {\n  setImmediate(function () {\n    callback.apply(self || null, args || []);\n  });\n};\n/**\n * Extends a prototype with an other, without calling a constructor with\n * side effects. Inspired by nodejs' `utils.inherits`\n * @param {Function} ctor the constructor to augment\n * @param {Function} superCtor the parent constructor to use\n */\n\n\nexports.inherits = function (ctor, superCtor) {\n  var Obj = function Obj() {};\n\n  Obj.prototype = superCtor.prototype;\n  ctor.prototype = new Obj();\n};\n/**\n * Merge the objects passed as parameters into a new one.\n * @private\n * @param {...Object} var_args All objects to merge.\n * @return {Object} a new object with the data of the others.\n */\n\n\nexports.extend = function () {\n  var result = {},\n      i,\n      attr;\n\n  for (i = 0; i < arguments.length; i++) {\n    // arguments is not enumerable in some browsers\n    for (attr in arguments[i]) {\n      if (arguments[i].hasOwnProperty(attr) && typeof result[attr] === \"undefined\") {\n        result[attr] = arguments[i][attr];\n      }\n    }\n  }\n\n  return result;\n};\n/**\n * Transform arbitrary content into a Promise.\n * @param {String} name a name for the content being processed.\n * @param {Object} inputData the content to process.\n * @param {Boolean} isBinary true if the content is not an unicode string\n * @param {Boolean} isOptimizedBinaryString true if the string content only has one byte per character.\n * @param {Boolean} isBase64 true if the string content is encoded with base64.\n * @return {Promise} a promise in a format usable by JSZip.\n */\n\n\nexports.prepareContent = function (name, inputData, isBinary, isOptimizedBinaryString, isBase64) {\n  // if inputData is already a promise, this flatten it.\n  var promise = external.Promise.resolve(inputData).then(function (data) {\n    var isBlob = support.blob && (data instanceof Blob || ['[object File]', '[object Blob]'].indexOf(Object.prototype.toString.call(data)) !== -1);\n\n    if (isBlob && typeof FileReader !== \"undefined\") {\n      return new external.Promise(function (resolve, reject) {\n        var reader = new FileReader();\n\n        reader.onload = function (e) {\n          resolve(e.target.result);\n        };\n\n        reader.onerror = function (e) {\n          reject(e.target.error);\n        };\n\n        reader.readAsArrayBuffer(data);\n      });\n    } else {\n      return data;\n    }\n  });\n  return promise.then(function (data) {\n    var dataType = exports.getTypeOf(data);\n\n    if (!dataType) {\n      return external.Promise.reject(new Error(\"Can't read the data of '\" + name + \"'. Is it \" + \"in a supported JavaScript type (String, Blob, ArrayBuffer, etc) ?\"));\n    } // special case : it's way easier to work with Uint8Array than with ArrayBuffer\n\n\n    if (dataType === \"arraybuffer\") {\n      data = exports.transformTo(\"uint8array\", data);\n    } else if (dataType === \"string\") {\n      if (isBase64) {\n        data = base64.decode(data);\n      } else if (isBinary) {\n        // optimizedBinaryString === true means that the file has already been filtered with a 0xFF mask\n        if (isOptimizedBinaryString !== true) {\n          // this is a string, not in a base64 format.\n          // Be sure that this is a correct \"binary string\"\n          data = string2binary(data);\n        }\n      }\n    }\n\n    return data;\n  });\n};","function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n(function (module, exports) {\n  'use strict'; // Utils\n\n  function assert(val, msg) {\n    if (!val) throw new Error(msg || 'Assertion failed');\n  } // Could use `inherits` module, but don't want to move from single file\n  // architecture yet.\n\n\n  function inherits(ctor, superCtor) {\n    ctor.super_ = superCtor;\n\n    var TempCtor = function TempCtor() {};\n\n    TempCtor.prototype = superCtor.prototype;\n    ctor.prototype = new TempCtor();\n    ctor.prototype.constructor = ctor;\n  } // BN\n\n\n  function BN(number, base, endian) {\n    if (BN.isBN(number)) {\n      return number;\n    }\n\n    this.negative = 0;\n    this.words = null;\n    this.length = 0; // Reduction context\n\n    this.red = null;\n\n    if (number !== null) {\n      if (base === 'le' || base === 'be') {\n        endian = base;\n        base = 10;\n      }\n\n      this._init(number || 0, base || 10, endian || 'be');\n    }\n  }\n\n  if (_typeof(module) === 'object') {\n    module.exports = BN;\n  } else {\n    exports.BN = BN;\n  }\n\n  BN.BN = BN;\n  BN.wordSize = 26;\n  var Buffer;\n\n  try {\n    Buffer = require('buffer').Buffer;\n  } catch (e) {}\n\n  BN.isBN = function isBN(num) {\n    if (num instanceof BN) {\n      return true;\n    }\n\n    return num !== null && _typeof(num) === 'object' && num.constructor.wordSize === BN.wordSize && Array.isArray(num.words);\n  };\n\n  BN.max = function max(left, right) {\n    if (left.cmp(right) > 0) return left;\n    return right;\n  };\n\n  BN.min = function min(left, right) {\n    if (left.cmp(right) < 0) return left;\n    return right;\n  };\n\n  BN.prototype._init = function init(number, base, endian) {\n    if (typeof number === 'number') {\n      return this._initNumber(number, base, endian);\n    }\n\n    if (_typeof(number) === 'object') {\n      return this._initArray(number, base, endian);\n    }\n\n    if (base === 'hex') {\n      base = 16;\n    }\n\n    assert(base === (base | 0) && base >= 2 && base <= 36);\n    number = number.toString().replace(/\\s+/g, '');\n    var start = 0;\n\n    if (number[0] === '-') {\n      start++;\n    }\n\n    if (base === 16) {\n      this._parseHex(number, start);\n    } else {\n      this._parseBase(number, base, start);\n    }\n\n    if (number[0] === '-') {\n      this.negative = 1;\n    }\n\n    this.strip();\n    if (endian !== 'le') return;\n\n    this._initArray(this.toArray(), base, endian);\n  };\n\n  BN.prototype._initNumber = function _initNumber(number, base, endian) {\n    if (number < 0) {\n      this.negative = 1;\n      number = -number;\n    }\n\n    if (number < 0x4000000) {\n      this.words = [number & 0x3ffffff];\n      this.length = 1;\n    } else if (number < 0x10000000000000) {\n      this.words = [number & 0x3ffffff, number / 0x4000000 & 0x3ffffff];\n      this.length = 2;\n    } else {\n      assert(number < 0x20000000000000); // 2 ^ 53 (unsafe)\n\n      this.words = [number & 0x3ffffff, number / 0x4000000 & 0x3ffffff, 1];\n      this.length = 3;\n    }\n\n    if (endian !== 'le') return; // Reverse the bytes\n\n    this._initArray(this.toArray(), base, endian);\n  };\n\n  BN.prototype._initArray = function _initArray(number, base, endian) {\n    // Perhaps a Uint8Array\n    assert(typeof number.length === 'number');\n\n    if (number.length <= 0) {\n      this.words = [0];\n      this.length = 1;\n      return this;\n    }\n\n    this.length = Math.ceil(number.length / 3);\n    this.words = new Array(this.length);\n\n    for (var i = 0; i < this.length; i++) {\n      this.words[i] = 0;\n    }\n\n    var j, w;\n    var off = 0;\n\n    if (endian === 'be') {\n      for (i = number.length - 1, j = 0; i >= 0; i -= 3) {\n        w = number[i] | number[i - 1] << 8 | number[i - 2] << 16;\n        this.words[j] |= w << off & 0x3ffffff;\n        this.words[j + 1] = w >>> 26 - off & 0x3ffffff;\n        off += 24;\n\n        if (off >= 26) {\n          off -= 26;\n          j++;\n        }\n      }\n    } else if (endian === 'le') {\n      for (i = 0, j = 0; i < number.length; i += 3) {\n        w = number[i] | number[i + 1] << 8 | number[i + 2] << 16;\n        this.words[j] |= w << off & 0x3ffffff;\n        this.words[j + 1] = w >>> 26 - off & 0x3ffffff;\n        off += 24;\n\n        if (off >= 26) {\n          off -= 26;\n          j++;\n        }\n      }\n    }\n\n    return this.strip();\n  };\n\n  function parseHex(str, start, end) {\n    var r = 0;\n    var len = Math.min(str.length, end);\n\n    for (var i = start; i < len; i++) {\n      var c = str.charCodeAt(i) - 48;\n      r <<= 4; // 'a' - 'f'\n\n      if (c >= 49 && c <= 54) {\n        r |= c - 49 + 0xa; // 'A' - 'F'\n      } else if (c >= 17 && c <= 22) {\n        r |= c - 17 + 0xa; // '0' - '9'\n      } else {\n        r |= c & 0xf;\n      }\n    }\n\n    return r;\n  }\n\n  BN.prototype._parseHex = function _parseHex(number, start) {\n    // Create possibly bigger array to ensure that it fits the number\n    this.length = Math.ceil((number.length - start) / 6);\n    this.words = new Array(this.length);\n\n    for (var i = 0; i < this.length; i++) {\n      this.words[i] = 0;\n    }\n\n    var j, w; // Scan 24-bit chunks and add them to the number\n\n    var off = 0;\n\n    for (i = number.length - 6, j = 0; i >= start; i -= 6) {\n      w = parseHex(number, i, i + 6);\n      this.words[j] |= w << off & 0x3ffffff; // NOTE: `0x3fffff` is intentional here, 26bits max shift + 24bit hex limb\n\n      this.words[j + 1] |= w >>> 26 - off & 0x3fffff;\n      off += 24;\n\n      if (off >= 26) {\n        off -= 26;\n        j++;\n      }\n    }\n\n    if (i + 6 !== start) {\n      w = parseHex(number, start, i + 6);\n      this.words[j] |= w << off & 0x3ffffff;\n      this.words[j + 1] |= w >>> 26 - off & 0x3fffff;\n    }\n\n    this.strip();\n  };\n\n  function parseBase(str, start, end, mul) {\n    var r = 0;\n    var len = Math.min(str.length, end);\n\n    for (var i = start; i < len; i++) {\n      var c = str.charCodeAt(i) - 48;\n      r *= mul; // 'a'\n\n      if (c >= 49) {\n        r += c - 49 + 0xa; // 'A'\n      } else if (c >= 17) {\n        r += c - 17 + 0xa; // '0' - '9'\n      } else {\n        r += c;\n      }\n    }\n\n    return r;\n  }\n\n  BN.prototype._parseBase = function _parseBase(number, base, start) {\n    // Initialize as zero\n    this.words = [0];\n    this.length = 1; // Find length of limb in base\n\n    for (var limbLen = 0, limbPow = 1; limbPow <= 0x3ffffff; limbPow *= base) {\n      limbLen++;\n    }\n\n    limbLen--;\n    limbPow = limbPow / base | 0;\n    var total = number.length - start;\n    var mod = total % limbLen;\n    var end = Math.min(total, total - mod) + start;\n    var word = 0;\n\n    for (var i = start; i < end; i += limbLen) {\n      word = parseBase(number, i, i + limbLen, base);\n      this.imuln(limbPow);\n\n      if (this.words[0] + word < 0x4000000) {\n        this.words[0] += word;\n      } else {\n        this._iaddn(word);\n      }\n    }\n\n    if (mod !== 0) {\n      var pow = 1;\n      word = parseBase(number, i, number.length, base);\n\n      for (i = 0; i < mod; i++) {\n        pow *= base;\n      }\n\n      this.imuln(pow);\n\n      if (this.words[0] + word < 0x4000000) {\n        this.words[0] += word;\n      } else {\n        this._iaddn(word);\n      }\n    }\n  };\n\n  BN.prototype.copy = function copy(dest) {\n    dest.words = new Array(this.length);\n\n    for (var i = 0; i < this.length; i++) {\n      dest.words[i] = this.words[i];\n    }\n\n    dest.length = this.length;\n    dest.negative = this.negative;\n    dest.red = this.red;\n  };\n\n  BN.prototype.clone = function clone() {\n    var r = new BN(null);\n    this.copy(r);\n    return r;\n  };\n\n  BN.prototype._expand = function _expand(size) {\n    while (this.length < size) {\n      this.words[this.length++] = 0;\n    }\n\n    return this;\n  }; // Remove leading `0` from `this`\n\n\n  BN.prototype.strip = function strip() {\n    while (this.length > 1 && this.words[this.length - 1] === 0) {\n      this.length--;\n    }\n\n    return this._normSign();\n  };\n\n  BN.prototype._normSign = function _normSign() {\n    // -0 = 0\n    if (this.length === 1 && this.words[0] === 0) {\n      this.negative = 0;\n    }\n\n    return this;\n  };\n\n  BN.prototype.inspect = function inspect() {\n    return (this.red ? '<BN-R: ' : '<BN: ') + this.toString(16) + '>';\n  };\n  /*\n   var zeros = [];\n  var groupSizes = [];\n  var groupBases = [];\n   var s = '';\n  var i = -1;\n  while (++i < BN.wordSize) {\n    zeros[i] = s;\n    s += '0';\n  }\n  groupSizes[0] = 0;\n  groupSizes[1] = 0;\n  groupBases[0] = 0;\n  groupBases[1] = 0;\n  var base = 2 - 1;\n  while (++base < 36 + 1) {\n    var groupSize = 0;\n    var groupBase = 1;\n    while (groupBase < (1 << BN.wordSize) / base) {\n      groupBase *= base;\n      groupSize += 1;\n    }\n    groupSizes[base] = groupSize;\n    groupBases[base] = groupBase;\n  }\n   */\n\n\n  var zeros = ['', '0', '00', '000', '0000', '00000', '000000', '0000000', '00000000', '000000000', '0000000000', '00000000000', '000000000000', '0000000000000', '00000000000000', '000000000000000', '0000000000000000', '00000000000000000', '000000000000000000', '0000000000000000000', '00000000000000000000', '000000000000000000000', '0000000000000000000000', '00000000000000000000000', '000000000000000000000000', '0000000000000000000000000'];\n  var groupSizes = [0, 0, 25, 16, 12, 11, 10, 9, 8, 8, 7, 7, 7, 7, 6, 6, 6, 6, 6, 6, 6, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5];\n  var groupBases = [0, 0, 33554432, 43046721, 16777216, 48828125, 60466176, 40353607, 16777216, 43046721, 10000000, 19487171, 35831808, 62748517, 7529536, 11390625, 16777216, 24137569, 34012224, 47045881, 64000000, 4084101, 5153632, 6436343, 7962624, 9765625, 11881376, 14348907, 17210368, 20511149, 24300000, 28629151, 33554432, 39135393, 45435424, 52521875, 60466176];\n\n  BN.prototype.toString = function toString(base, padding) {\n    base = base || 10;\n    padding = padding | 0 || 1;\n    var out;\n\n    if (base === 16 || base === 'hex') {\n      out = '';\n      var off = 0;\n      var carry = 0;\n\n      for (var i = 0; i < this.length; i++) {\n        var w = this.words[i];\n        var word = ((w << off | carry) & 0xffffff).toString(16);\n        carry = w >>> 24 - off & 0xffffff;\n\n        if (carry !== 0 || i !== this.length - 1) {\n          out = zeros[6 - word.length] + word + out;\n        } else {\n          out = word + out;\n        }\n\n        off += 2;\n\n        if (off >= 26) {\n          off -= 26;\n          i--;\n        }\n      }\n\n      if (carry !== 0) {\n        out = carry.toString(16) + out;\n      }\n\n      while (out.length % padding !== 0) {\n        out = '0' + out;\n      }\n\n      if (this.negative !== 0) {\n        out = '-' + out;\n      }\n\n      return out;\n    }\n\n    if (base === (base | 0) && base >= 2 && base <= 36) {\n      // var groupSize = Math.floor(BN.wordSize * Math.LN2 / Math.log(base));\n      var groupSize = groupSizes[base]; // var groupBase = Math.pow(base, groupSize);\n\n      var groupBase = groupBases[base];\n      out = '';\n      var c = this.clone();\n      c.negative = 0;\n\n      while (!c.isZero()) {\n        var r = c.modn(groupBase).toString(base);\n        c = c.idivn(groupBase);\n\n        if (!c.isZero()) {\n          out = zeros[groupSize - r.length] + r + out;\n        } else {\n          out = r + out;\n        }\n      }\n\n      if (this.isZero()) {\n        out = '0' + out;\n      }\n\n      while (out.length % padding !== 0) {\n        out = '0' + out;\n      }\n\n      if (this.negative !== 0) {\n        out = '-' + out;\n      }\n\n      return out;\n    }\n\n    assert(false, 'Base should be between 2 and 36');\n  };\n\n  BN.prototype.toNumber = function toNumber() {\n    var ret = this.words[0];\n\n    if (this.length === 2) {\n      ret += this.words[1] * 0x4000000;\n    } else if (this.length === 3 && this.words[2] === 0x01) {\n      // NOTE: at this stage it is known that the top bit is set\n      ret += 0x10000000000000 + this.words[1] * 0x4000000;\n    } else if (this.length > 2) {\n      assert(false, 'Number can only safely store up to 53 bits');\n    }\n\n    return this.negative !== 0 ? -ret : ret;\n  };\n\n  BN.prototype.toJSON = function toJSON() {\n    return this.toString(16);\n  };\n\n  BN.prototype.toBuffer = function toBuffer(endian, length) {\n    assert(typeof Buffer !== 'undefined');\n    return this.toArrayLike(Buffer, endian, length);\n  };\n\n  BN.prototype.toArray = function toArray(endian, length) {\n    return this.toArrayLike(Array, endian, length);\n  };\n\n  BN.prototype.toArrayLike = function toArrayLike(ArrayType, endian, length) {\n    var byteLength = this.byteLength();\n    var reqLength = length || Math.max(1, byteLength);\n    assert(byteLength <= reqLength, 'byte array longer than desired length');\n    assert(reqLength > 0, 'Requested array length <= 0');\n    this.strip();\n    var littleEndian = endian === 'le';\n    var res = new ArrayType(reqLength);\n    var b, i;\n    var q = this.clone();\n\n    if (!littleEndian) {\n      // Assume big-endian\n      for (i = 0; i < reqLength - byteLength; i++) {\n        res[i] = 0;\n      }\n\n      for (i = 0; !q.isZero(); i++) {\n        b = q.andln(0xff);\n        q.iushrn(8);\n        res[reqLength - i - 1] = b;\n      }\n    } else {\n      for (i = 0; !q.isZero(); i++) {\n        b = q.andln(0xff);\n        q.iushrn(8);\n        res[i] = b;\n      }\n\n      for (; i < reqLength; i++) {\n        res[i] = 0;\n      }\n    }\n\n    return res;\n  };\n\n  if (Math.clz32) {\n    BN.prototype._countBits = function _countBits(w) {\n      return 32 - Math.clz32(w);\n    };\n  } else {\n    BN.prototype._countBits = function _countBits(w) {\n      var t = w;\n      var r = 0;\n\n      if (t >= 0x1000) {\n        r += 13;\n        t >>>= 13;\n      }\n\n      if (t >= 0x40) {\n        r += 7;\n        t >>>= 7;\n      }\n\n      if (t >= 0x8) {\n        r += 4;\n        t >>>= 4;\n      }\n\n      if (t >= 0x02) {\n        r += 2;\n        t >>>= 2;\n      }\n\n      return r + t;\n    };\n  }\n\n  BN.prototype._zeroBits = function _zeroBits(w) {\n    // Short-cut\n    if (w === 0) return 26;\n    var t = w;\n    var r = 0;\n\n    if ((t & 0x1fff) === 0) {\n      r += 13;\n      t >>>= 13;\n    }\n\n    if ((t & 0x7f) === 0) {\n      r += 7;\n      t >>>= 7;\n    }\n\n    if ((t & 0xf) === 0) {\n      r += 4;\n      t >>>= 4;\n    }\n\n    if ((t & 0x3) === 0) {\n      r += 2;\n      t >>>= 2;\n    }\n\n    if ((t & 0x1) === 0) {\n      r++;\n    }\n\n    return r;\n  }; // Return number of used bits in a BN\n\n\n  BN.prototype.bitLength = function bitLength() {\n    var w = this.words[this.length - 1];\n\n    var hi = this._countBits(w);\n\n    return (this.length - 1) * 26 + hi;\n  };\n\n  function toBitArray(num) {\n    var w = new Array(num.bitLength());\n\n    for (var bit = 0; bit < w.length; bit++) {\n      var off = bit / 26 | 0;\n      var wbit = bit % 26;\n      w[bit] = (num.words[off] & 1 << wbit) >>> wbit;\n    }\n\n    return w;\n  } // Number of trailing zero bits\n\n\n  BN.prototype.zeroBits = function zeroBits() {\n    if (this.isZero()) return 0;\n    var r = 0;\n\n    for (var i = 0; i < this.length; i++) {\n      var b = this._zeroBits(this.words[i]);\n\n      r += b;\n      if (b !== 26) break;\n    }\n\n    return r;\n  };\n\n  BN.prototype.byteLength = function byteLength() {\n    return Math.ceil(this.bitLength() / 8);\n  };\n\n  BN.prototype.toTwos = function toTwos(width) {\n    if (this.negative !== 0) {\n      return this.abs().inotn(width).iaddn(1);\n    }\n\n    return this.clone();\n  };\n\n  BN.prototype.fromTwos = function fromTwos(width) {\n    if (this.testn(width - 1)) {\n      return this.notn(width).iaddn(1).ineg();\n    }\n\n    return this.clone();\n  };\n\n  BN.prototype.isNeg = function isNeg() {\n    return this.negative !== 0;\n  }; // Return negative clone of `this`\n\n\n  BN.prototype.neg = function neg() {\n    return this.clone().ineg();\n  };\n\n  BN.prototype.ineg = function ineg() {\n    if (!this.isZero()) {\n      this.negative ^= 1;\n    }\n\n    return this;\n  }; // Or `num` with `this` in-place\n\n\n  BN.prototype.iuor = function iuor(num) {\n    while (this.length < num.length) {\n      this.words[this.length++] = 0;\n    }\n\n    for (var i = 0; i < num.length; i++) {\n      this.words[i] = this.words[i] | num.words[i];\n    }\n\n    return this.strip();\n  };\n\n  BN.prototype.ior = function ior(num) {\n    assert((this.negative | num.negative) === 0);\n    return this.iuor(num);\n  }; // Or `num` with `this`\n\n\n  BN.prototype.or = function or(num) {\n    if (this.length > num.length) return this.clone().ior(num);\n    return num.clone().ior(this);\n  };\n\n  BN.prototype.uor = function uor(num) {\n    if (this.length > num.length) return this.clone().iuor(num);\n    return num.clone().iuor(this);\n  }; // And `num` with `this` in-place\n\n\n  BN.prototype.iuand = function iuand(num) {\n    // b = min-length(num, this)\n    var b;\n\n    if (this.length > num.length) {\n      b = num;\n    } else {\n      b = this;\n    }\n\n    for (var i = 0; i < b.length; i++) {\n      this.words[i] = this.words[i] & num.words[i];\n    }\n\n    this.length = b.length;\n    return this.strip();\n  };\n\n  BN.prototype.iand = function iand(num) {\n    assert((this.negative | num.negative) === 0);\n    return this.iuand(num);\n  }; // And `num` with `this`\n\n\n  BN.prototype.and = function and(num) {\n    if (this.length > num.length) return this.clone().iand(num);\n    return num.clone().iand(this);\n  };\n\n  BN.prototype.uand = function uand(num) {\n    if (this.length > num.length) return this.clone().iuand(num);\n    return num.clone().iuand(this);\n  }; // Xor `num` with `this` in-place\n\n\n  BN.prototype.iuxor = function iuxor(num) {\n    // a.length > b.length\n    var a;\n    var b;\n\n    if (this.length > num.length) {\n      a = this;\n      b = num;\n    } else {\n      a = num;\n      b = this;\n    }\n\n    for (var i = 0; i < b.length; i++) {\n      this.words[i] = a.words[i] ^ b.words[i];\n    }\n\n    if (this !== a) {\n      for (; i < a.length; i++) {\n        this.words[i] = a.words[i];\n      }\n    }\n\n    this.length = a.length;\n    return this.strip();\n  };\n\n  BN.prototype.ixor = function ixor(num) {\n    assert((this.negative | num.negative) === 0);\n    return this.iuxor(num);\n  }; // Xor `num` with `this`\n\n\n  BN.prototype.xor = function xor(num) {\n    if (this.length > num.length) return this.clone().ixor(num);\n    return num.clone().ixor(this);\n  };\n\n  BN.prototype.uxor = function uxor(num) {\n    if (this.length > num.length) return this.clone().iuxor(num);\n    return num.clone().iuxor(this);\n  }; // Not ``this`` with ``width`` bitwidth\n\n\n  BN.prototype.inotn = function inotn(width) {\n    assert(typeof width === 'number' && width >= 0);\n    var bytesNeeded = Math.ceil(width / 26) | 0;\n    var bitsLeft = width % 26; // Extend the buffer with leading zeroes\n\n    this._expand(bytesNeeded);\n\n    if (bitsLeft > 0) {\n      bytesNeeded--;\n    } // Handle complete words\n\n\n    for (var i = 0; i < bytesNeeded; i++) {\n      this.words[i] = ~this.words[i] & 0x3ffffff;\n    } // Handle the residue\n\n\n    if (bitsLeft > 0) {\n      this.words[i] = ~this.words[i] & 0x3ffffff >> 26 - bitsLeft;\n    } // And remove leading zeroes\n\n\n    return this.strip();\n  };\n\n  BN.prototype.notn = function notn(width) {\n    return this.clone().inotn(width);\n  }; // Set `bit` of `this`\n\n\n  BN.prototype.setn = function setn(bit, val) {\n    assert(typeof bit === 'number' && bit >= 0);\n    var off = bit / 26 | 0;\n    var wbit = bit % 26;\n\n    this._expand(off + 1);\n\n    if (val) {\n      this.words[off] = this.words[off] | 1 << wbit;\n    } else {\n      this.words[off] = this.words[off] & ~(1 << wbit);\n    }\n\n    return this.strip();\n  }; // Add `num` to `this` in-place\n\n\n  BN.prototype.iadd = function iadd(num) {\n    var r; // negative + positive\n\n    if (this.negative !== 0 && num.negative === 0) {\n      this.negative = 0;\n      r = this.isub(num);\n      this.negative ^= 1;\n      return this._normSign(); // positive + negative\n    } else if (this.negative === 0 && num.negative !== 0) {\n      num.negative = 0;\n      r = this.isub(num);\n      num.negative = 1;\n      return r._normSign();\n    } // a.length > b.length\n\n\n    var a, b;\n\n    if (this.length > num.length) {\n      a = this;\n      b = num;\n    } else {\n      a = num;\n      b = this;\n    }\n\n    var carry = 0;\n\n    for (var i = 0; i < b.length; i++) {\n      r = (a.words[i] | 0) + (b.words[i] | 0) + carry;\n      this.words[i] = r & 0x3ffffff;\n      carry = r >>> 26;\n    }\n\n    for (; carry !== 0 && i < a.length; i++) {\n      r = (a.words[i] | 0) + carry;\n      this.words[i] = r & 0x3ffffff;\n      carry = r >>> 26;\n    }\n\n    this.length = a.length;\n\n    if (carry !== 0) {\n      this.words[this.length] = carry;\n      this.length++; // Copy the rest of the words\n    } else if (a !== this) {\n      for (; i < a.length; i++) {\n        this.words[i] = a.words[i];\n      }\n    }\n\n    return this;\n  }; // Add `num` to `this`\n\n\n  BN.prototype.add = function add(num) {\n    var res;\n\n    if (num.negative !== 0 && this.negative === 0) {\n      num.negative = 0;\n      res = this.sub(num);\n      num.negative ^= 1;\n      return res;\n    } else if (num.negative === 0 && this.negative !== 0) {\n      this.negative = 0;\n      res = num.sub(this);\n      this.negative = 1;\n      return res;\n    }\n\n    if (this.length > num.length) return this.clone().iadd(num);\n    return num.clone().iadd(this);\n  }; // Subtract `num` from `this` in-place\n\n\n  BN.prototype.isub = function isub(num) {\n    // this - (-num) = this + num\n    if (num.negative !== 0) {\n      num.negative = 0;\n      var r = this.iadd(num);\n      num.negative = 1;\n      return r._normSign(); // -this - num = -(this + num)\n    } else if (this.negative !== 0) {\n      this.negative = 0;\n      this.iadd(num);\n      this.negative = 1;\n      return this._normSign();\n    } // At this point both numbers are positive\n\n\n    var cmp = this.cmp(num); // Optimization - zeroify\n\n    if (cmp === 0) {\n      this.negative = 0;\n      this.length = 1;\n      this.words[0] = 0;\n      return this;\n    } // a > b\n\n\n    var a, b;\n\n    if (cmp > 0) {\n      a = this;\n      b = num;\n    } else {\n      a = num;\n      b = this;\n    }\n\n    var carry = 0;\n\n    for (var i = 0; i < b.length; i++) {\n      r = (a.words[i] | 0) - (b.words[i] | 0) + carry;\n      carry = r >> 26;\n      this.words[i] = r & 0x3ffffff;\n    }\n\n    for (; carry !== 0 && i < a.length; i++) {\n      r = (a.words[i] | 0) + carry;\n      carry = r >> 26;\n      this.words[i] = r & 0x3ffffff;\n    } // Copy rest of the words\n\n\n    if (carry === 0 && i < a.length && a !== this) {\n      for (; i < a.length; i++) {\n        this.words[i] = a.words[i];\n      }\n    }\n\n    this.length = Math.max(this.length, i);\n\n    if (a !== this) {\n      this.negative = 1;\n    }\n\n    return this.strip();\n  }; // Subtract `num` from `this`\n\n\n  BN.prototype.sub = function sub(num) {\n    return this.clone().isub(num);\n  };\n\n  function smallMulTo(self, num, out) {\n    out.negative = num.negative ^ self.negative;\n    var len = self.length + num.length | 0;\n    out.length = len;\n    len = len - 1 | 0; // Peel one iteration (compiler can't do it, because of code complexity)\n\n    var a = self.words[0] | 0;\n    var b = num.words[0] | 0;\n    var r = a * b;\n    var lo = r & 0x3ffffff;\n    var carry = r / 0x4000000 | 0;\n    out.words[0] = lo;\n\n    for (var k = 1; k < len; k++) {\n      // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n      // note that ncarry could be >= 0x3ffffff\n      var ncarry = carry >>> 26;\n      var rword = carry & 0x3ffffff;\n      var maxJ = Math.min(k, num.length - 1);\n\n      for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n        var i = k - j | 0;\n        a = self.words[i] | 0;\n        b = num.words[j] | 0;\n        r = a * b + rword;\n        ncarry += r / 0x4000000 | 0;\n        rword = r & 0x3ffffff;\n      }\n\n      out.words[k] = rword | 0;\n      carry = ncarry | 0;\n    }\n\n    if (carry !== 0) {\n      out.words[k] = carry | 0;\n    } else {\n      out.length--;\n    }\n\n    return out.strip();\n  } // TODO(indutny): it may be reasonable to omit it for users who don't need\n  // to work with 256-bit numbers, otherwise it gives 20% improvement for 256-bit\n  // multiplication (like elliptic secp256k1).\n\n\n  var comb10MulTo = function comb10MulTo(self, num, out) {\n    var a = self.words;\n    var b = num.words;\n    var o = out.words;\n    var c = 0;\n    var lo;\n    var mid;\n    var hi;\n    var a0 = a[0] | 0;\n    var al0 = a0 & 0x1fff;\n    var ah0 = a0 >>> 13;\n    var a1 = a[1] | 0;\n    var al1 = a1 & 0x1fff;\n    var ah1 = a1 >>> 13;\n    var a2 = a[2] | 0;\n    var al2 = a2 & 0x1fff;\n    var ah2 = a2 >>> 13;\n    var a3 = a[3] | 0;\n    var al3 = a3 & 0x1fff;\n    var ah3 = a3 >>> 13;\n    var a4 = a[4] | 0;\n    var al4 = a4 & 0x1fff;\n    var ah4 = a4 >>> 13;\n    var a5 = a[5] | 0;\n    var al5 = a5 & 0x1fff;\n    var ah5 = a5 >>> 13;\n    var a6 = a[6] | 0;\n    var al6 = a6 & 0x1fff;\n    var ah6 = a6 >>> 13;\n    var a7 = a[7] | 0;\n    var al7 = a7 & 0x1fff;\n    var ah7 = a7 >>> 13;\n    var a8 = a[8] | 0;\n    var al8 = a8 & 0x1fff;\n    var ah8 = a8 >>> 13;\n    var a9 = a[9] | 0;\n    var al9 = a9 & 0x1fff;\n    var ah9 = a9 >>> 13;\n    var b0 = b[0] | 0;\n    var bl0 = b0 & 0x1fff;\n    var bh0 = b0 >>> 13;\n    var b1 = b[1] | 0;\n    var bl1 = b1 & 0x1fff;\n    var bh1 = b1 >>> 13;\n    var b2 = b[2] | 0;\n    var bl2 = b2 & 0x1fff;\n    var bh2 = b2 >>> 13;\n    var b3 = b[3] | 0;\n    var bl3 = b3 & 0x1fff;\n    var bh3 = b3 >>> 13;\n    var b4 = b[4] | 0;\n    var bl4 = b4 & 0x1fff;\n    var bh4 = b4 >>> 13;\n    var b5 = b[5] | 0;\n    var bl5 = b5 & 0x1fff;\n    var bh5 = b5 >>> 13;\n    var b6 = b[6] | 0;\n    var bl6 = b6 & 0x1fff;\n    var bh6 = b6 >>> 13;\n    var b7 = b[7] | 0;\n    var bl7 = b7 & 0x1fff;\n    var bh7 = b7 >>> 13;\n    var b8 = b[8] | 0;\n    var bl8 = b8 & 0x1fff;\n    var bh8 = b8 >>> 13;\n    var b9 = b[9] | 0;\n    var bl9 = b9 & 0x1fff;\n    var bh9 = b9 >>> 13;\n    out.negative = self.negative ^ num.negative;\n    out.length = 19;\n    /* k = 0 */\n\n    lo = Math.imul(al0, bl0);\n    mid = Math.imul(al0, bh0);\n    mid = mid + Math.imul(ah0, bl0) | 0;\n    hi = Math.imul(ah0, bh0);\n    var w0 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0;\n    c = (hi + (mid >>> 13) | 0) + (w0 >>> 26) | 0;\n    w0 &= 0x3ffffff;\n    /* k = 1 */\n\n    lo = Math.imul(al1, bl0);\n    mid = Math.imul(al1, bh0);\n    mid = mid + Math.imul(ah1, bl0) | 0;\n    hi = Math.imul(ah1, bh0);\n    lo = lo + Math.imul(al0, bl1) | 0;\n    mid = mid + Math.imul(al0, bh1) | 0;\n    mid = mid + Math.imul(ah0, bl1) | 0;\n    hi = hi + Math.imul(ah0, bh1) | 0;\n    var w1 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0;\n    c = (hi + (mid >>> 13) | 0) + (w1 >>> 26) | 0;\n    w1 &= 0x3ffffff;\n    /* k = 2 */\n\n    lo = Math.imul(al2, bl0);\n    mid = Math.imul(al2, bh0);\n    mid = mid + Math.imul(ah2, bl0) | 0;\n    hi = Math.imul(ah2, bh0);\n    lo = lo + Math.imul(al1, bl1) | 0;\n    mid = mid + Math.imul(al1, bh1) | 0;\n    mid = mid + Math.imul(ah1, bl1) | 0;\n    hi = hi + Math.imul(ah1, bh1) | 0;\n    lo = lo + Math.imul(al0, bl2) | 0;\n    mid = mid + Math.imul(al0, bh2) | 0;\n    mid = mid + Math.imul(ah0, bl2) | 0;\n    hi = hi + Math.imul(ah0, bh2) | 0;\n    var w2 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0;\n    c = (hi + (mid >>> 13) | 0) + (w2 >>> 26) | 0;\n    w2 &= 0x3ffffff;\n    /* k = 3 */\n\n    lo = Math.imul(al3, bl0);\n    mid = Math.imul(al3, bh0);\n    mid = mid + Math.imul(ah3, bl0) | 0;\n    hi = Math.imul(ah3, bh0);\n    lo = lo + Math.imul(al2, bl1) | 0;\n    mid = mid + Math.imul(al2, bh1) | 0;\n    mid = mid + Math.imul(ah2, bl1) | 0;\n    hi = hi + Math.imul(ah2, bh1) | 0;\n    lo = lo + Math.imul(al1, bl2) | 0;\n    mid = mid + Math.imul(al1, bh2) | 0;\n    mid = mid + Math.imul(ah1, bl2) | 0;\n    hi = hi + Math.imul(ah1, bh2) | 0;\n    lo = lo + Math.imul(al0, bl3) | 0;\n    mid = mid + Math.imul(al0, bh3) | 0;\n    mid = mid + Math.imul(ah0, bl3) | 0;\n    hi = hi + Math.imul(ah0, bh3) | 0;\n    var w3 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0;\n    c = (hi + (mid >>> 13) | 0) + (w3 >>> 26) | 0;\n    w3 &= 0x3ffffff;\n    /* k = 4 */\n\n    lo = Math.imul(al4, bl0);\n    mid = Math.imul(al4, bh0);\n    mid = mid + Math.imul(ah4, bl0) | 0;\n    hi = Math.imul(ah4, bh0);\n    lo = lo + Math.imul(al3, bl1) | 0;\n    mid = mid + Math.imul(al3, bh1) | 0;\n    mid = mid + Math.imul(ah3, bl1) | 0;\n    hi = hi + Math.imul(ah3, bh1) | 0;\n    lo = lo + Math.imul(al2, bl2) | 0;\n    mid = mid + Math.imul(al2, bh2) | 0;\n    mid = mid + Math.imul(ah2, bl2) | 0;\n    hi = hi + Math.imul(ah2, bh2) | 0;\n    lo = lo + Math.imul(al1, bl3) | 0;\n    mid = mid + Math.imul(al1, bh3) | 0;\n    mid = mid + Math.imul(ah1, bl3) | 0;\n    hi = hi + Math.imul(ah1, bh3) | 0;\n    lo = lo + Math.imul(al0, bl4) | 0;\n    mid = mid + Math.imul(al0, bh4) | 0;\n    mid = mid + Math.imul(ah0, bl4) | 0;\n    hi = hi + Math.imul(ah0, bh4) | 0;\n    var w4 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0;\n    c = (hi + (mid >>> 13) | 0) + (w4 >>> 26) | 0;\n    w4 &= 0x3ffffff;\n    /* k = 5 */\n\n    lo = Math.imul(al5, bl0);\n    mid = Math.imul(al5, bh0);\n    mid = mid + Math.imul(ah5, bl0) | 0;\n    hi = Math.imul(ah5, bh0);\n    lo = lo + Math.imul(al4, bl1) | 0;\n    mid = mid + Math.imul(al4, bh1) | 0;\n    mid = mid + Math.imul(ah4, bl1) | 0;\n    hi = hi + Math.imul(ah4, bh1) | 0;\n    lo = lo + Math.imul(al3, bl2) | 0;\n    mid = mid + Math.imul(al3, bh2) | 0;\n    mid = mid + Math.imul(ah3, bl2) | 0;\n    hi = hi + Math.imul(ah3, bh2) | 0;\n    lo = lo + Math.imul(al2, bl3) | 0;\n    mid = mid + Math.imul(al2, bh3) | 0;\n    mid = mid + Math.imul(ah2, bl3) | 0;\n    hi = hi + Math.imul(ah2, bh3) | 0;\n    lo = lo + Math.imul(al1, bl4) | 0;\n    mid = mid + Math.imul(al1, bh4) | 0;\n    mid = mid + Math.imul(ah1, bl4) | 0;\n    hi = hi + Math.imul(ah1, bh4) | 0;\n    lo = lo + Math.imul(al0, bl5) | 0;\n    mid = mid + Math.imul(al0, bh5) | 0;\n    mid = mid + Math.imul(ah0, bl5) | 0;\n    hi = hi + Math.imul(ah0, bh5) | 0;\n    var w5 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0;\n    c = (hi + (mid >>> 13) | 0) + (w5 >>> 26) | 0;\n    w5 &= 0x3ffffff;\n    /* k = 6 */\n\n    lo = Math.imul(al6, bl0);\n    mid = Math.imul(al6, bh0);\n    mid = mid + Math.imul(ah6, bl0) | 0;\n    hi = Math.imul(ah6, bh0);\n    lo = lo + Math.imul(al5, bl1) | 0;\n    mid = mid + Math.imul(al5, bh1) | 0;\n    mid = mid + Math.imul(ah5, bl1) | 0;\n    hi = hi + Math.imul(ah5, bh1) | 0;\n    lo = lo + Math.imul(al4, bl2) | 0;\n    mid = mid + Math.imul(al4, bh2) | 0;\n    mid = mid + Math.imul(ah4, bl2) | 0;\n    hi = hi + Math.imul(ah4, bh2) | 0;\n    lo = lo + Math.imul(al3, bl3) | 0;\n    mid = mid + Math.imul(al3, bh3) | 0;\n    mid = mid + Math.imul(ah3, bl3) | 0;\n    hi = hi + Math.imul(ah3, bh3) | 0;\n    lo = lo + Math.imul(al2, bl4) | 0;\n    mid = mid + Math.imul(al2, bh4) | 0;\n    mid = mid + Math.imul(ah2, bl4) | 0;\n    hi = hi + Math.imul(ah2, bh4) | 0;\n    lo = lo + Math.imul(al1, bl5) | 0;\n    mid = mid + Math.imul(al1, bh5) | 0;\n    mid = mid + Math.imul(ah1, bl5) | 0;\n    hi = hi + Math.imul(ah1, bh5) | 0;\n    lo = lo + Math.imul(al0, bl6) | 0;\n    mid = mid + Math.imul(al0, bh6) | 0;\n    mid = mid + Math.imul(ah0, bl6) | 0;\n    hi = hi + Math.imul(ah0, bh6) | 0;\n    var w6 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0;\n    c = (hi + (mid >>> 13) | 0) + (w6 >>> 26) | 0;\n    w6 &= 0x3ffffff;\n    /* k = 7 */\n\n    lo = Math.imul(al7, bl0);\n    mid = Math.imul(al7, bh0);\n    mid = mid + Math.imul(ah7, bl0) | 0;\n    hi = Math.imul(ah7, bh0);\n    lo = lo + Math.imul(al6, bl1) | 0;\n    mid = mid + Math.imul(al6, bh1) | 0;\n    mid = mid + Math.imul(ah6, bl1) | 0;\n    hi = hi + Math.imul(ah6, bh1) | 0;\n    lo = lo + Math.imul(al5, bl2) | 0;\n    mid = mid + Math.imul(al5, bh2) | 0;\n    mid = mid + Math.imul(ah5, bl2) | 0;\n    hi = hi + Math.imul(ah5, bh2) | 0;\n    lo = lo + Math.imul(al4, bl3) | 0;\n    mid = mid + Math.imul(al4, bh3) | 0;\n    mid = mid + Math.imul(ah4, bl3) | 0;\n    hi = hi + Math.imul(ah4, bh3) | 0;\n    lo = lo + Math.imul(al3, bl4) | 0;\n    mid = mid + Math.imul(al3, bh4) | 0;\n    mid = mid + Math.imul(ah3, bl4) | 0;\n    hi = hi + Math.imul(ah3, bh4) | 0;\n    lo = lo + Math.imul(al2, bl5) | 0;\n    mid = mid + Math.imul(al2, bh5) | 0;\n    mid = mid + Math.imul(ah2, bl5) | 0;\n    hi = hi + Math.imul(ah2, bh5) | 0;\n    lo = lo + Math.imul(al1, bl6) | 0;\n    mid = mid + Math.imul(al1, bh6) | 0;\n    mid = mid + Math.imul(ah1, bl6) | 0;\n    hi = hi + Math.imul(ah1, bh6) | 0;\n    lo = lo + Math.imul(al0, bl7) | 0;\n    mid = mid + Math.imul(al0, bh7) | 0;\n    mid = mid + Math.imul(ah0, bl7) | 0;\n    hi = hi + Math.imul(ah0, bh7) | 0;\n    var w7 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0;\n    c = (hi + (mid >>> 13) | 0) + (w7 >>> 26) | 0;\n    w7 &= 0x3ffffff;\n    /* k = 8 */\n\n    lo = Math.imul(al8, bl0);\n    mid = Math.imul(al8, bh0);\n    mid = mid + Math.imul(ah8, bl0) | 0;\n    hi = Math.imul(ah8, bh0);\n    lo = lo + Math.imul(al7, bl1) | 0;\n    mid = mid + Math.imul(al7, bh1) | 0;\n    mid = mid + Math.imul(ah7, bl1) | 0;\n    hi = hi + Math.imul(ah7, bh1) | 0;\n    lo = lo + Math.imul(al6, bl2) | 0;\n    mid = mid + Math.imul(al6, bh2) | 0;\n    mid = mid + Math.imul(ah6, bl2) | 0;\n    hi = hi + Math.imul(ah6, bh2) | 0;\n    lo = lo + Math.imul(al5, bl3) | 0;\n    mid = mid + Math.imul(al5, bh3) | 0;\n    mid = mid + Math.imul(ah5, bl3) | 0;\n    hi = hi + Math.imul(ah5, bh3) | 0;\n    lo = lo + Math.imul(al4, bl4) | 0;\n    mid = mid + Math.imul(al4, bh4) | 0;\n    mid = mid + Math.imul(ah4, bl4) | 0;\n    hi = hi + Math.imul(ah4, bh4) | 0;\n    lo = lo + Math.imul(al3, bl5) | 0;\n    mid = mid + Math.imul(al3, bh5) | 0;\n    mid = mid + Math.imul(ah3, bl5) | 0;\n    hi = hi + Math.imul(ah3, bh5) | 0;\n    lo = lo + Math.imul(al2, bl6) | 0;\n    mid = mid + Math.imul(al2, bh6) | 0;\n    mid = mid + Math.imul(ah2, bl6) | 0;\n    hi = hi + Math.imul(ah2, bh6) | 0;\n    lo = lo + Math.imul(al1, bl7) | 0;\n    mid = mid + Math.imul(al1, bh7) | 0;\n    mid = mid + Math.imul(ah1, bl7) | 0;\n    hi = hi + Math.imul(ah1, bh7) | 0;\n    lo = lo + Math.imul(al0, bl8) | 0;\n    mid = mid + Math.imul(al0, bh8) | 0;\n    mid = mid + Math.imul(ah0, bl8) | 0;\n    hi = hi + Math.imul(ah0, bh8) | 0;\n    var w8 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0;\n    c = (hi + (mid >>> 13) | 0) + (w8 >>> 26) | 0;\n    w8 &= 0x3ffffff;\n    /* k = 9 */\n\n    lo = Math.imul(al9, bl0);\n    mid = Math.imul(al9, bh0);\n    mid = mid + Math.imul(ah9, bl0) | 0;\n    hi = Math.imul(ah9, bh0);\n    lo = lo + Math.imul(al8, bl1) | 0;\n    mid = mid + Math.imul(al8, bh1) | 0;\n    mid = mid + Math.imul(ah8, bl1) | 0;\n    hi = hi + Math.imul(ah8, bh1) | 0;\n    lo = lo + Math.imul(al7, bl2) | 0;\n    mid = mid + Math.imul(al7, bh2) | 0;\n    mid = mid + Math.imul(ah7, bl2) | 0;\n    hi = hi + Math.imul(ah7, bh2) | 0;\n    lo = lo + Math.imul(al6, bl3) | 0;\n    mid = mid + Math.imul(al6, bh3) | 0;\n    mid = mid + Math.imul(ah6, bl3) | 0;\n    hi = hi + Math.imul(ah6, bh3) | 0;\n    lo = lo + Math.imul(al5, bl4) | 0;\n    mid = mid + Math.imul(al5, bh4) | 0;\n    mid = mid + Math.imul(ah5, bl4) | 0;\n    hi = hi + Math.imul(ah5, bh4) | 0;\n    lo = lo + Math.imul(al4, bl5) | 0;\n    mid = mid + Math.imul(al4, bh5) | 0;\n    mid = mid + Math.imul(ah4, bl5) | 0;\n    hi = hi + Math.imul(ah4, bh5) | 0;\n    lo = lo + Math.imul(al3, bl6) | 0;\n    mid = mid + Math.imul(al3, bh6) | 0;\n    mid = mid + Math.imul(ah3, bl6) | 0;\n    hi = hi + Math.imul(ah3, bh6) | 0;\n    lo = lo + Math.imul(al2, bl7) | 0;\n    mid = mid + Math.imul(al2, bh7) | 0;\n    mid = mid + Math.imul(ah2, bl7) | 0;\n    hi = hi + Math.imul(ah2, bh7) | 0;\n    lo = lo + Math.imul(al1, bl8) | 0;\n    mid = mid + Math.imul(al1, bh8) | 0;\n    mid = mid + Math.imul(ah1, bl8) | 0;\n    hi = hi + Math.imul(ah1, bh8) | 0;\n    lo = lo + Math.imul(al0, bl9) | 0;\n    mid = mid + Math.imul(al0, bh9) | 0;\n    mid = mid + Math.imul(ah0, bl9) | 0;\n    hi = hi + Math.imul(ah0, bh9) | 0;\n    var w9 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0;\n    c = (hi + (mid >>> 13) | 0) + (w9 >>> 26) | 0;\n    w9 &= 0x3ffffff;\n    /* k = 10 */\n\n    lo = Math.imul(al9, bl1);\n    mid = Math.imul(al9, bh1);\n    mid = mid + Math.imul(ah9, bl1) | 0;\n    hi = Math.imul(ah9, bh1);\n    lo = lo + Math.imul(al8, bl2) | 0;\n    mid = mid + Math.imul(al8, bh2) | 0;\n    mid = mid + Math.imul(ah8, bl2) | 0;\n    hi = hi + Math.imul(ah8, bh2) | 0;\n    lo = lo + Math.imul(al7, bl3) | 0;\n    mid = mid + Math.imul(al7, bh3) | 0;\n    mid = mid + Math.imul(ah7, bl3) | 0;\n    hi = hi + Math.imul(ah7, bh3) | 0;\n    lo = lo + Math.imul(al6, bl4) | 0;\n    mid = mid + Math.imul(al6, bh4) | 0;\n    mid = mid + Math.imul(ah6, bl4) | 0;\n    hi = hi + Math.imul(ah6, bh4) | 0;\n    lo = lo + Math.imul(al5, bl5) | 0;\n    mid = mid + Math.imul(al5, bh5) | 0;\n    mid = mid + Math.imul(ah5, bl5) | 0;\n    hi = hi + Math.imul(ah5, bh5) | 0;\n    lo = lo + Math.imul(al4, bl6) | 0;\n    mid = mid + Math.imul(al4, bh6) | 0;\n    mid = mid + Math.imul(ah4, bl6) | 0;\n    hi = hi + Math.imul(ah4, bh6) | 0;\n    lo = lo + Math.imul(al3, bl7) | 0;\n    mid = mid + Math.imul(al3, bh7) | 0;\n    mid = mid + Math.imul(ah3, bl7) | 0;\n    hi = hi + Math.imul(ah3, bh7) | 0;\n    lo = lo + Math.imul(al2, bl8) | 0;\n    mid = mid + Math.imul(al2, bh8) | 0;\n    mid = mid + Math.imul(ah2, bl8) | 0;\n    hi = hi + Math.imul(ah2, bh8) | 0;\n    lo = lo + Math.imul(al1, bl9) | 0;\n    mid = mid + Math.imul(al1, bh9) | 0;\n    mid = mid + Math.imul(ah1, bl9) | 0;\n    hi = hi + Math.imul(ah1, bh9) | 0;\n    var w10 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0;\n    c = (hi + (mid >>> 13) | 0) + (w10 >>> 26) | 0;\n    w10 &= 0x3ffffff;\n    /* k = 11 */\n\n    lo = Math.imul(al9, bl2);\n    mid = Math.imul(al9, bh2);\n    mid = mid + Math.imul(ah9, bl2) | 0;\n    hi = Math.imul(ah9, bh2);\n    lo = lo + Math.imul(al8, bl3) | 0;\n    mid = mid + Math.imul(al8, bh3) | 0;\n    mid = mid + Math.imul(ah8, bl3) | 0;\n    hi = hi + Math.imul(ah8, bh3) | 0;\n    lo = lo + Math.imul(al7, bl4) | 0;\n    mid = mid + Math.imul(al7, bh4) | 0;\n    mid = mid + Math.imul(ah7, bl4) | 0;\n    hi = hi + Math.imul(ah7, bh4) | 0;\n    lo = lo + Math.imul(al6, bl5) | 0;\n    mid = mid + Math.imul(al6, bh5) | 0;\n    mid = mid + Math.imul(ah6, bl5) | 0;\n    hi = hi + Math.imul(ah6, bh5) | 0;\n    lo = lo + Math.imul(al5, bl6) | 0;\n    mid = mid + Math.imul(al5, bh6) | 0;\n    mid = mid + Math.imul(ah5, bl6) | 0;\n    hi = hi + Math.imul(ah5, bh6) | 0;\n    lo = lo + Math.imul(al4, bl7) | 0;\n    mid = mid + Math.imul(al4, bh7) | 0;\n    mid = mid + Math.imul(ah4, bl7) | 0;\n    hi = hi + Math.imul(ah4, bh7) | 0;\n    lo = lo + Math.imul(al3, bl8) | 0;\n    mid = mid + Math.imul(al3, bh8) | 0;\n    mid = mid + Math.imul(ah3, bl8) | 0;\n    hi = hi + Math.imul(ah3, bh8) | 0;\n    lo = lo + Math.imul(al2, bl9) | 0;\n    mid = mid + Math.imul(al2, bh9) | 0;\n    mid = mid + Math.imul(ah2, bl9) | 0;\n    hi = hi + Math.imul(ah2, bh9) | 0;\n    var w11 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0;\n    c = (hi + (mid >>> 13) | 0) + (w11 >>> 26) | 0;\n    w11 &= 0x3ffffff;\n    /* k = 12 */\n\n    lo = Math.imul(al9, bl3);\n    mid = Math.imul(al9, bh3);\n    mid = mid + Math.imul(ah9, bl3) | 0;\n    hi = Math.imul(ah9, bh3);\n    lo = lo + Math.imul(al8, bl4) | 0;\n    mid = mid + Math.imul(al8, bh4) | 0;\n    mid = mid + Math.imul(ah8, bl4) | 0;\n    hi = hi + Math.imul(ah8, bh4) | 0;\n    lo = lo + Math.imul(al7, bl5) | 0;\n    mid = mid + Math.imul(al7, bh5) | 0;\n    mid = mid + Math.imul(ah7, bl5) | 0;\n    hi = hi + Math.imul(ah7, bh5) | 0;\n    lo = lo + Math.imul(al6, bl6) | 0;\n    mid = mid + Math.imul(al6, bh6) | 0;\n    mid = mid + Math.imul(ah6, bl6) | 0;\n    hi = hi + Math.imul(ah6, bh6) | 0;\n    lo = lo + Math.imul(al5, bl7) | 0;\n    mid = mid + Math.imul(al5, bh7) | 0;\n    mid = mid + Math.imul(ah5, bl7) | 0;\n    hi = hi + Math.imul(ah5, bh7) | 0;\n    lo = lo + Math.imul(al4, bl8) | 0;\n    mid = mid + Math.imul(al4, bh8) | 0;\n    mid = mid + Math.imul(ah4, bl8) | 0;\n    hi = hi + Math.imul(ah4, bh8) | 0;\n    lo = lo + Math.imul(al3, bl9) | 0;\n    mid = mid + Math.imul(al3, bh9) | 0;\n    mid = mid + Math.imul(ah3, bl9) | 0;\n    hi = hi + Math.imul(ah3, bh9) | 0;\n    var w12 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0;\n    c = (hi + (mid >>> 13) | 0) + (w12 >>> 26) | 0;\n    w12 &= 0x3ffffff;\n    /* k = 13 */\n\n    lo = Math.imul(al9, bl4);\n    mid = Math.imul(al9, bh4);\n    mid = mid + Math.imul(ah9, bl4) | 0;\n    hi = Math.imul(ah9, bh4);\n    lo = lo + Math.imul(al8, bl5) | 0;\n    mid = mid + Math.imul(al8, bh5) | 0;\n    mid = mid + Math.imul(ah8, bl5) | 0;\n    hi = hi + Math.imul(ah8, bh5) | 0;\n    lo = lo + Math.imul(al7, bl6) | 0;\n    mid = mid + Math.imul(al7, bh6) | 0;\n    mid = mid + Math.imul(ah7, bl6) | 0;\n    hi = hi + Math.imul(ah7, bh6) | 0;\n    lo = lo + Math.imul(al6, bl7) | 0;\n    mid = mid + Math.imul(al6, bh7) | 0;\n    mid = mid + Math.imul(ah6, bl7) | 0;\n    hi = hi + Math.imul(ah6, bh7) | 0;\n    lo = lo + Math.imul(al5, bl8) | 0;\n    mid = mid + Math.imul(al5, bh8) | 0;\n    mid = mid + Math.imul(ah5, bl8) | 0;\n    hi = hi + Math.imul(ah5, bh8) | 0;\n    lo = lo + Math.imul(al4, bl9) | 0;\n    mid = mid + Math.imul(al4, bh9) | 0;\n    mid = mid + Math.imul(ah4, bl9) | 0;\n    hi = hi + Math.imul(ah4, bh9) | 0;\n    var w13 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0;\n    c = (hi + (mid >>> 13) | 0) + (w13 >>> 26) | 0;\n    w13 &= 0x3ffffff;\n    /* k = 14 */\n\n    lo = Math.imul(al9, bl5);\n    mid = Math.imul(al9, bh5);\n    mid = mid + Math.imul(ah9, bl5) | 0;\n    hi = Math.imul(ah9, bh5);\n    lo = lo + Math.imul(al8, bl6) | 0;\n    mid = mid + Math.imul(al8, bh6) | 0;\n    mid = mid + Math.imul(ah8, bl6) | 0;\n    hi = hi + Math.imul(ah8, bh6) | 0;\n    lo = lo + Math.imul(al7, bl7) | 0;\n    mid = mid + Math.imul(al7, bh7) | 0;\n    mid = mid + Math.imul(ah7, bl7) | 0;\n    hi = hi + Math.imul(ah7, bh7) | 0;\n    lo = lo + Math.imul(al6, bl8) | 0;\n    mid = mid + Math.imul(al6, bh8) | 0;\n    mid = mid + Math.imul(ah6, bl8) | 0;\n    hi = hi + Math.imul(ah6, bh8) | 0;\n    lo = lo + Math.imul(al5, bl9) | 0;\n    mid = mid + Math.imul(al5, bh9) | 0;\n    mid = mid + Math.imul(ah5, bl9) | 0;\n    hi = hi + Math.imul(ah5, bh9) | 0;\n    var w14 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0;\n    c = (hi + (mid >>> 13) | 0) + (w14 >>> 26) | 0;\n    w14 &= 0x3ffffff;\n    /* k = 15 */\n\n    lo = Math.imul(al9, bl6);\n    mid = Math.imul(al9, bh6);\n    mid = mid + Math.imul(ah9, bl6) | 0;\n    hi = Math.imul(ah9, bh6);\n    lo = lo + Math.imul(al8, bl7) | 0;\n    mid = mid + Math.imul(al8, bh7) | 0;\n    mid = mid + Math.imul(ah8, bl7) | 0;\n    hi = hi + Math.imul(ah8, bh7) | 0;\n    lo = lo + Math.imul(al7, bl8) | 0;\n    mid = mid + Math.imul(al7, bh8) | 0;\n    mid = mid + Math.imul(ah7, bl8) | 0;\n    hi = hi + Math.imul(ah7, bh8) | 0;\n    lo = lo + Math.imul(al6, bl9) | 0;\n    mid = mid + Math.imul(al6, bh9) | 0;\n    mid = mid + Math.imul(ah6, bl9) | 0;\n    hi = hi + Math.imul(ah6, bh9) | 0;\n    var w15 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0;\n    c = (hi + (mid >>> 13) | 0) + (w15 >>> 26) | 0;\n    w15 &= 0x3ffffff;\n    /* k = 16 */\n\n    lo = Math.imul(al9, bl7);\n    mid = Math.imul(al9, bh7);\n    mid = mid + Math.imul(ah9, bl7) | 0;\n    hi = Math.imul(ah9, bh7);\n    lo = lo + Math.imul(al8, bl8) | 0;\n    mid = mid + Math.imul(al8, bh8) | 0;\n    mid = mid + Math.imul(ah8, bl8) | 0;\n    hi = hi + Math.imul(ah8, bh8) | 0;\n    lo = lo + Math.imul(al7, bl9) | 0;\n    mid = mid + Math.imul(al7, bh9) | 0;\n    mid = mid + Math.imul(ah7, bl9) | 0;\n    hi = hi + Math.imul(ah7, bh9) | 0;\n    var w16 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0;\n    c = (hi + (mid >>> 13) | 0) + (w16 >>> 26) | 0;\n    w16 &= 0x3ffffff;\n    /* k = 17 */\n\n    lo = Math.imul(al9, bl8);\n    mid = Math.imul(al9, bh8);\n    mid = mid + Math.imul(ah9, bl8) | 0;\n    hi = Math.imul(ah9, bh8);\n    lo = lo + Math.imul(al8, bl9) | 0;\n    mid = mid + Math.imul(al8, bh9) | 0;\n    mid = mid + Math.imul(ah8, bl9) | 0;\n    hi = hi + Math.imul(ah8, bh9) | 0;\n    var w17 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0;\n    c = (hi + (mid >>> 13) | 0) + (w17 >>> 26) | 0;\n    w17 &= 0x3ffffff;\n    /* k = 18 */\n\n    lo = Math.imul(al9, bl9);\n    mid = Math.imul(al9, bh9);\n    mid = mid + Math.imul(ah9, bl9) | 0;\n    hi = Math.imul(ah9, bh9);\n    var w18 = (c + lo | 0) + ((mid & 0x1fff) << 13) | 0;\n    c = (hi + (mid >>> 13) | 0) + (w18 >>> 26) | 0;\n    w18 &= 0x3ffffff;\n    o[0] = w0;\n    o[1] = w1;\n    o[2] = w2;\n    o[3] = w3;\n    o[4] = w4;\n    o[5] = w5;\n    o[6] = w6;\n    o[7] = w7;\n    o[8] = w8;\n    o[9] = w9;\n    o[10] = w10;\n    o[11] = w11;\n    o[12] = w12;\n    o[13] = w13;\n    o[14] = w14;\n    o[15] = w15;\n    o[16] = w16;\n    o[17] = w17;\n    o[18] = w18;\n\n    if (c !== 0) {\n      o[19] = c;\n      out.length++;\n    }\n\n    return out;\n  }; // Polyfill comb\n\n\n  if (!Math.imul) {\n    comb10MulTo = smallMulTo;\n  }\n\n  function bigMulTo(self, num, out) {\n    out.negative = num.negative ^ self.negative;\n    out.length = self.length + num.length;\n    var carry = 0;\n    var hncarry = 0;\n\n    for (var k = 0; k < out.length - 1; k++) {\n      // Sum all words with the same `i + j = k` and accumulate `ncarry`,\n      // note that ncarry could be >= 0x3ffffff\n      var ncarry = hncarry;\n      hncarry = 0;\n      var rword = carry & 0x3ffffff;\n      var maxJ = Math.min(k, num.length - 1);\n\n      for (var j = Math.max(0, k - self.length + 1); j <= maxJ; j++) {\n        var i = k - j;\n        var a = self.words[i] | 0;\n        var b = num.words[j] | 0;\n        var r = a * b;\n        var lo = r & 0x3ffffff;\n        ncarry = ncarry + (r / 0x4000000 | 0) | 0;\n        lo = lo + rword | 0;\n        rword = lo & 0x3ffffff;\n        ncarry = ncarry + (lo >>> 26) | 0;\n        hncarry += ncarry >>> 26;\n        ncarry &= 0x3ffffff;\n      }\n\n      out.words[k] = rword;\n      carry = ncarry;\n      ncarry = hncarry;\n    }\n\n    if (carry !== 0) {\n      out.words[k] = carry;\n    } else {\n      out.length--;\n    }\n\n    return out.strip();\n  }\n\n  function jumboMulTo(self, num, out) {\n    var fftm = new FFTM();\n    return fftm.mulp(self, num, out);\n  }\n\n  BN.prototype.mulTo = function mulTo(num, out) {\n    var res;\n    var len = this.length + num.length;\n\n    if (this.length === 10 && num.length === 10) {\n      res = comb10MulTo(this, num, out);\n    } else if (len < 63) {\n      res = smallMulTo(this, num, out);\n    } else if (len < 1024) {\n      res = bigMulTo(this, num, out);\n    } else {\n      res = jumboMulTo(this, num, out);\n    }\n\n    return res;\n  }; // Cooley-Tukey algorithm for FFT\n  // slightly revisited to rely on looping instead of recursion\n\n\n  function FFTM(x, y) {\n    this.x = x;\n    this.y = y;\n  }\n\n  FFTM.prototype.makeRBT = function makeRBT(N) {\n    var t = new Array(N);\n    var l = BN.prototype._countBits(N) - 1;\n\n    for (var i = 0; i < N; i++) {\n      t[i] = this.revBin(i, l, N);\n    }\n\n    return t;\n  }; // Returns binary-reversed representation of `x`\n\n\n  FFTM.prototype.revBin = function revBin(x, l, N) {\n    if (x === 0 || x === N - 1) return x;\n    var rb = 0;\n\n    for (var i = 0; i < l; i++) {\n      rb |= (x & 1) << l - i - 1;\n      x >>= 1;\n    }\n\n    return rb;\n  }; // Performs \"tweedling\" phase, therefore 'emulating'\n  // behaviour of the recursive algorithm\n\n\n  FFTM.prototype.permute = function permute(rbt, rws, iws, rtws, itws, N) {\n    for (var i = 0; i < N; i++) {\n      rtws[i] = rws[rbt[i]];\n      itws[i] = iws[rbt[i]];\n    }\n  };\n\n  FFTM.prototype.transform = function transform(rws, iws, rtws, itws, N, rbt) {\n    this.permute(rbt, rws, iws, rtws, itws, N);\n\n    for (var s = 1; s < N; s <<= 1) {\n      var l = s << 1;\n      var rtwdf = Math.cos(2 * Math.PI / l);\n      var itwdf = Math.sin(2 * Math.PI / l);\n\n      for (var p = 0; p < N; p += l) {\n        var rtwdf_ = rtwdf;\n        var itwdf_ = itwdf;\n\n        for (var j = 0; j < s; j++) {\n          var re = rtws[p + j];\n          var ie = itws[p + j];\n          var ro = rtws[p + j + s];\n          var io = itws[p + j + s];\n          var rx = rtwdf_ * ro - itwdf_ * io;\n          io = rtwdf_ * io + itwdf_ * ro;\n          ro = rx;\n          rtws[p + j] = re + ro;\n          itws[p + j] = ie + io;\n          rtws[p + j + s] = re - ro;\n          itws[p + j + s] = ie - io;\n          /* jshint maxdepth : false */\n\n          if (j !== l) {\n            rx = rtwdf * rtwdf_ - itwdf * itwdf_;\n            itwdf_ = rtwdf * itwdf_ + itwdf * rtwdf_;\n            rtwdf_ = rx;\n          }\n        }\n      }\n    }\n  };\n\n  FFTM.prototype.guessLen13b = function guessLen13b(n, m) {\n    var N = Math.max(m, n) | 1;\n    var odd = N & 1;\n    var i = 0;\n\n    for (N = N / 2 | 0; N; N = N >>> 1) {\n      i++;\n    }\n\n    return 1 << i + 1 + odd;\n  };\n\n  FFTM.prototype.conjugate = function conjugate(rws, iws, N) {\n    if (N <= 1) return;\n\n    for (var i = 0; i < N / 2; i++) {\n      var t = rws[i];\n      rws[i] = rws[N - i - 1];\n      rws[N - i - 1] = t;\n      t = iws[i];\n      iws[i] = -iws[N - i - 1];\n      iws[N - i - 1] = -t;\n    }\n  };\n\n  FFTM.prototype.normalize13b = function normalize13b(ws, N) {\n    var carry = 0;\n\n    for (var i = 0; i < N / 2; i++) {\n      var w = Math.round(ws[2 * i + 1] / N) * 0x2000 + Math.round(ws[2 * i] / N) + carry;\n      ws[i] = w & 0x3ffffff;\n\n      if (w < 0x4000000) {\n        carry = 0;\n      } else {\n        carry = w / 0x4000000 | 0;\n      }\n    }\n\n    return ws;\n  };\n\n  FFTM.prototype.convert13b = function convert13b(ws, len, rws, N) {\n    var carry = 0;\n\n    for (var i = 0; i < len; i++) {\n      carry = carry + (ws[i] | 0);\n      rws[2 * i] = carry & 0x1fff;\n      carry = carry >>> 13;\n      rws[2 * i + 1] = carry & 0x1fff;\n      carry = carry >>> 13;\n    } // Pad with zeroes\n\n\n    for (i = 2 * len; i < N; ++i) {\n      rws[i] = 0;\n    }\n\n    assert(carry === 0);\n    assert((carry & ~0x1fff) === 0);\n  };\n\n  FFTM.prototype.stub = function stub(N) {\n    var ph = new Array(N);\n\n    for (var i = 0; i < N; i++) {\n      ph[i] = 0;\n    }\n\n    return ph;\n  };\n\n  FFTM.prototype.mulp = function mulp(x, y, out) {\n    var N = 2 * this.guessLen13b(x.length, y.length);\n    var rbt = this.makeRBT(N);\n\n    var _ = this.stub(N);\n\n    var rws = new Array(N);\n    var rwst = new Array(N);\n    var iwst = new Array(N);\n    var nrws = new Array(N);\n    var nrwst = new Array(N);\n    var niwst = new Array(N);\n    var rmws = out.words;\n    rmws.length = N;\n    this.convert13b(x.words, x.length, rws, N);\n    this.convert13b(y.words, y.length, nrws, N);\n    this.transform(rws, _, rwst, iwst, N, rbt);\n    this.transform(nrws, _, nrwst, niwst, N, rbt);\n\n    for (var i = 0; i < N; i++) {\n      var rx = rwst[i] * nrwst[i] - iwst[i] * niwst[i];\n      iwst[i] = rwst[i] * niwst[i] + iwst[i] * nrwst[i];\n      rwst[i] = rx;\n    }\n\n    this.conjugate(rwst, iwst, N);\n    this.transform(rwst, iwst, rmws, _, N, rbt);\n    this.conjugate(rmws, _, N);\n    this.normalize13b(rmws, N);\n    out.negative = x.negative ^ y.negative;\n    out.length = x.length + y.length;\n    return out.strip();\n  }; // Multiply `this` by `num`\n\n\n  BN.prototype.mul = function mul(num) {\n    var out = new BN(null);\n    out.words = new Array(this.length + num.length);\n    return this.mulTo(num, out);\n  }; // Multiply employing FFT\n\n\n  BN.prototype.mulf = function mulf(num) {\n    var out = new BN(null);\n    out.words = new Array(this.length + num.length);\n    return jumboMulTo(this, num, out);\n  }; // In-place Multiplication\n\n\n  BN.prototype.imul = function imul(num) {\n    return this.clone().mulTo(num, this);\n  };\n\n  BN.prototype.imuln = function imuln(num) {\n    assert(typeof num === 'number');\n    assert(num < 0x4000000); // Carry\n\n    var carry = 0;\n\n    for (var i = 0; i < this.length; i++) {\n      var w = (this.words[i] | 0) * num;\n      var lo = (w & 0x3ffffff) + (carry & 0x3ffffff);\n      carry >>= 26;\n      carry += w / 0x4000000 | 0; // NOTE: lo is 27bit maximum\n\n      carry += lo >>> 26;\n      this.words[i] = lo & 0x3ffffff;\n    }\n\n    if (carry !== 0) {\n      this.words[i] = carry;\n      this.length++;\n    }\n\n    return this;\n  };\n\n  BN.prototype.muln = function muln(num) {\n    return this.clone().imuln(num);\n  }; // `this` * `this`\n\n\n  BN.prototype.sqr = function sqr() {\n    return this.mul(this);\n  }; // `this` * `this` in-place\n\n\n  BN.prototype.isqr = function isqr() {\n    return this.imul(this.clone());\n  }; // Math.pow(`this`, `num`)\n\n\n  BN.prototype.pow = function pow(num) {\n    var w = toBitArray(num);\n    if (w.length === 0) return new BN(1); // Skip leading zeroes\n\n    var res = this;\n\n    for (var i = 0; i < w.length; i++, res = res.sqr()) {\n      if (w[i] !== 0) break;\n    }\n\n    if (++i < w.length) {\n      for (var q = res.sqr(); i < w.length; i++, q = q.sqr()) {\n        if (w[i] === 0) continue;\n        res = res.mul(q);\n      }\n    }\n\n    return res;\n  }; // Shift-left in-place\n\n\n  BN.prototype.iushln = function iushln(bits) {\n    assert(typeof bits === 'number' && bits >= 0);\n    var r = bits % 26;\n    var s = (bits - r) / 26;\n    var carryMask = 0x3ffffff >>> 26 - r << 26 - r;\n    var i;\n\n    if (r !== 0) {\n      var carry = 0;\n\n      for (i = 0; i < this.length; i++) {\n        var newCarry = this.words[i] & carryMask;\n        var c = (this.words[i] | 0) - newCarry << r;\n        this.words[i] = c | carry;\n        carry = newCarry >>> 26 - r;\n      }\n\n      if (carry) {\n        this.words[i] = carry;\n        this.length++;\n      }\n    }\n\n    if (s !== 0) {\n      for (i = this.length - 1; i >= 0; i--) {\n        this.words[i + s] = this.words[i];\n      }\n\n      for (i = 0; i < s; i++) {\n        this.words[i] = 0;\n      }\n\n      this.length += s;\n    }\n\n    return this.strip();\n  };\n\n  BN.prototype.ishln = function ishln(bits) {\n    // TODO(indutny): implement me\n    assert(this.negative === 0);\n    return this.iushln(bits);\n  }; // Shift-right in-place\n  // NOTE: `hint` is a lowest bit before trailing zeroes\n  // NOTE: if `extended` is present - it will be filled with destroyed bits\n\n\n  BN.prototype.iushrn = function iushrn(bits, hint, extended) {\n    assert(typeof bits === 'number' && bits >= 0);\n    var h;\n\n    if (hint) {\n      h = (hint - hint % 26) / 26;\n    } else {\n      h = 0;\n    }\n\n    var r = bits % 26;\n    var s = Math.min((bits - r) / 26, this.length);\n    var mask = 0x3ffffff ^ 0x3ffffff >>> r << r;\n    var maskedWords = extended;\n    h -= s;\n    h = Math.max(0, h); // Extended mode, copy masked part\n\n    if (maskedWords) {\n      for (var i = 0; i < s; i++) {\n        maskedWords.words[i] = this.words[i];\n      }\n\n      maskedWords.length = s;\n    }\n\n    if (s === 0) {// No-op, we should not move anything at all\n    } else if (this.length > s) {\n      this.length -= s;\n\n      for (i = 0; i < this.length; i++) {\n        this.words[i] = this.words[i + s];\n      }\n    } else {\n      this.words[0] = 0;\n      this.length = 1;\n    }\n\n    var carry = 0;\n\n    for (i = this.length - 1; i >= 0 && (carry !== 0 || i >= h); i--) {\n      var word = this.words[i] | 0;\n      this.words[i] = carry << 26 - r | word >>> r;\n      carry = word & mask;\n    } // Push carried bits as a mask\n\n\n    if (maskedWords && carry !== 0) {\n      maskedWords.words[maskedWords.length++] = carry;\n    }\n\n    if (this.length === 0) {\n      this.words[0] = 0;\n      this.length = 1;\n    }\n\n    return this.strip();\n  };\n\n  BN.prototype.ishrn = function ishrn(bits, hint, extended) {\n    // TODO(indutny): implement me\n    assert(this.negative === 0);\n    return this.iushrn(bits, hint, extended);\n  }; // Shift-left\n\n\n  BN.prototype.shln = function shln(bits) {\n    return this.clone().ishln(bits);\n  };\n\n  BN.prototype.ushln = function ushln(bits) {\n    return this.clone().iushln(bits);\n  }; // Shift-right\n\n\n  BN.prototype.shrn = function shrn(bits) {\n    return this.clone().ishrn(bits);\n  };\n\n  BN.prototype.ushrn = function ushrn(bits) {\n    return this.clone().iushrn(bits);\n  }; // Test if n bit is set\n\n\n  BN.prototype.testn = function testn(bit) {\n    assert(typeof bit === 'number' && bit >= 0);\n    var r = bit % 26;\n    var s = (bit - r) / 26;\n    var q = 1 << r; // Fast case: bit is much higher than all existing words\n\n    if (this.length <= s) return false; // Check bit and return\n\n    var w = this.words[s];\n    return !!(w & q);\n  }; // Return only lowers bits of number (in-place)\n\n\n  BN.prototype.imaskn = function imaskn(bits) {\n    assert(typeof bits === 'number' && bits >= 0);\n    var r = bits % 26;\n    var s = (bits - r) / 26;\n    assert(this.negative === 0, 'imaskn works only with positive numbers');\n\n    if (this.length <= s) {\n      return this;\n    }\n\n    if (r !== 0) {\n      s++;\n    }\n\n    this.length = Math.min(s, this.length);\n\n    if (r !== 0) {\n      var mask = 0x3ffffff ^ 0x3ffffff >>> r << r;\n      this.words[this.length - 1] &= mask;\n    }\n\n    return this.strip();\n  }; // Return only lowers bits of number\n\n\n  BN.prototype.maskn = function maskn(bits) {\n    return this.clone().imaskn(bits);\n  }; // Add plain number `num` to `this`\n\n\n  BN.prototype.iaddn = function iaddn(num) {\n    assert(typeof num === 'number');\n    assert(num < 0x4000000);\n    if (num < 0) return this.isubn(-num); // Possible sign change\n\n    if (this.negative !== 0) {\n      if (this.length === 1 && (this.words[0] | 0) < num) {\n        this.words[0] = num - (this.words[0] | 0);\n        this.negative = 0;\n        return this;\n      }\n\n      this.negative = 0;\n      this.isubn(num);\n      this.negative = 1;\n      return this;\n    } // Add without checks\n\n\n    return this._iaddn(num);\n  };\n\n  BN.prototype._iaddn = function _iaddn(num) {\n    this.words[0] += num; // Carry\n\n    for (var i = 0; i < this.length && this.words[i] >= 0x4000000; i++) {\n      this.words[i] -= 0x4000000;\n\n      if (i === this.length - 1) {\n        this.words[i + 1] = 1;\n      } else {\n        this.words[i + 1]++;\n      }\n    }\n\n    this.length = Math.max(this.length, i + 1);\n    return this;\n  }; // Subtract plain number `num` from `this`\n\n\n  BN.prototype.isubn = function isubn(num) {\n    assert(typeof num === 'number');\n    assert(num < 0x4000000);\n    if (num < 0) return this.iaddn(-num);\n\n    if (this.negative !== 0) {\n      this.negative = 0;\n      this.iaddn(num);\n      this.negative = 1;\n      return this;\n    }\n\n    this.words[0] -= num;\n\n    if (this.length === 1 && this.words[0] < 0) {\n      this.words[0] = -this.words[0];\n      this.negative = 1;\n    } else {\n      // Carry\n      for (var i = 0; i < this.length && this.words[i] < 0; i++) {\n        this.words[i] += 0x4000000;\n        this.words[i + 1] -= 1;\n      }\n    }\n\n    return this.strip();\n  };\n\n  BN.prototype.addn = function addn(num) {\n    return this.clone().iaddn(num);\n  };\n\n  BN.prototype.subn = function subn(num) {\n    return this.clone().isubn(num);\n  };\n\n  BN.prototype.iabs = function iabs() {\n    this.negative = 0;\n    return this;\n  };\n\n  BN.prototype.abs = function abs() {\n    return this.clone().iabs();\n  };\n\n  BN.prototype._ishlnsubmul = function _ishlnsubmul(num, mul, shift) {\n    var len = num.length + shift;\n    var i;\n\n    this._expand(len);\n\n    var w;\n    var carry = 0;\n\n    for (i = 0; i < num.length; i++) {\n      w = (this.words[i + shift] | 0) + carry;\n      var right = (num.words[i] | 0) * mul;\n      w -= right & 0x3ffffff;\n      carry = (w >> 26) - (right / 0x4000000 | 0);\n      this.words[i + shift] = w & 0x3ffffff;\n    }\n\n    for (; i < this.length - shift; i++) {\n      w = (this.words[i + shift] | 0) + carry;\n      carry = w >> 26;\n      this.words[i + shift] = w & 0x3ffffff;\n    }\n\n    if (carry === 0) return this.strip(); // Subtraction overflow\n\n    assert(carry === -1);\n    carry = 0;\n\n    for (i = 0; i < this.length; i++) {\n      w = -(this.words[i] | 0) + carry;\n      carry = w >> 26;\n      this.words[i] = w & 0x3ffffff;\n    }\n\n    this.negative = 1;\n    return this.strip();\n  };\n\n  BN.prototype._wordDiv = function _wordDiv(num, mode) {\n    var shift = this.length - num.length;\n    var a = this.clone();\n    var b = num; // Normalize\n\n    var bhi = b.words[b.length - 1] | 0;\n\n    var bhiBits = this._countBits(bhi);\n\n    shift = 26 - bhiBits;\n\n    if (shift !== 0) {\n      b = b.ushln(shift);\n      a.iushln(shift);\n      bhi = b.words[b.length - 1] | 0;\n    } // Initialize quotient\n\n\n    var m = a.length - b.length;\n    var q;\n\n    if (mode !== 'mod') {\n      q = new BN(null);\n      q.length = m + 1;\n      q.words = new Array(q.length);\n\n      for (var i = 0; i < q.length; i++) {\n        q.words[i] = 0;\n      }\n    }\n\n    var diff = a.clone()._ishlnsubmul(b, 1, m);\n\n    if (diff.negative === 0) {\n      a = diff;\n\n      if (q) {\n        q.words[m] = 1;\n      }\n    }\n\n    for (var j = m - 1; j >= 0; j--) {\n      var qj = (a.words[b.length + j] | 0) * 0x4000000 + (a.words[b.length + j - 1] | 0); // NOTE: (qj / bhi) is (0x3ffffff * 0x4000000 + 0x3ffffff) / 0x2000000 max\n      // (0x7ffffff)\n\n      qj = Math.min(qj / bhi | 0, 0x3ffffff);\n\n      a._ishlnsubmul(b, qj, j);\n\n      while (a.negative !== 0) {\n        qj--;\n        a.negative = 0;\n\n        a._ishlnsubmul(b, 1, j);\n\n        if (!a.isZero()) {\n          a.negative ^= 1;\n        }\n      }\n\n      if (q) {\n        q.words[j] = qj;\n      }\n    }\n\n    if (q) {\n      q.strip();\n    }\n\n    a.strip(); // Denormalize\n\n    if (mode !== 'div' && shift !== 0) {\n      a.iushrn(shift);\n    }\n\n    return {\n      div: q || null,\n      mod: a\n    };\n  }; // NOTE: 1) `mode` can be set to `mod` to request mod only,\n  //       to `div` to request div only, or be absent to\n  //       request both div & mod\n  //       2) `positive` is true if unsigned mod is requested\n\n\n  BN.prototype.divmod = function divmod(num, mode, positive) {\n    assert(!num.isZero());\n\n    if (this.isZero()) {\n      return {\n        div: new BN(0),\n        mod: new BN(0)\n      };\n    }\n\n    var div, mod, res;\n\n    if (this.negative !== 0 && num.negative === 0) {\n      res = this.neg().divmod(num, mode);\n\n      if (mode !== 'mod') {\n        div = res.div.neg();\n      }\n\n      if (mode !== 'div') {\n        mod = res.mod.neg();\n\n        if (positive && mod.negative !== 0) {\n          mod.iadd(num);\n        }\n      }\n\n      return {\n        div: div,\n        mod: mod\n      };\n    }\n\n    if (this.negative === 0 && num.negative !== 0) {\n      res = this.divmod(num.neg(), mode);\n\n      if (mode !== 'mod') {\n        div = res.div.neg();\n      }\n\n      return {\n        div: div,\n        mod: res.mod\n      };\n    }\n\n    if ((this.negative & num.negative) !== 0) {\n      res = this.neg().divmod(num.neg(), mode);\n\n      if (mode !== 'div') {\n        mod = res.mod.neg();\n\n        if (positive && mod.negative !== 0) {\n          mod.isub(num);\n        }\n      }\n\n      return {\n        div: res.div,\n        mod: mod\n      };\n    } // Both numbers are positive at this point\n    // Strip both numbers to approximate shift value\n\n\n    if (num.length > this.length || this.cmp(num) < 0) {\n      return {\n        div: new BN(0),\n        mod: this\n      };\n    } // Very short reduction\n\n\n    if (num.length === 1) {\n      if (mode === 'div') {\n        return {\n          div: this.divn(num.words[0]),\n          mod: null\n        };\n      }\n\n      if (mode === 'mod') {\n        return {\n          div: null,\n          mod: new BN(this.modn(num.words[0]))\n        };\n      }\n\n      return {\n        div: this.divn(num.words[0]),\n        mod: new BN(this.modn(num.words[0]))\n      };\n    }\n\n    return this._wordDiv(num, mode);\n  }; // Find `this` / `num`\n\n\n  BN.prototype.div = function div(num) {\n    return this.divmod(num, 'div', false).div;\n  }; // Find `this` % `num`\n\n\n  BN.prototype.mod = function mod(num) {\n    return this.divmod(num, 'mod', false).mod;\n  };\n\n  BN.prototype.umod = function umod(num) {\n    return this.divmod(num, 'mod', true).mod;\n  }; // Find Round(`this` / `num`)\n\n\n  BN.prototype.divRound = function divRound(num) {\n    var dm = this.divmod(num); // Fast case - exact division\n\n    if (dm.mod.isZero()) return dm.div;\n    var mod = dm.div.negative !== 0 ? dm.mod.isub(num) : dm.mod;\n    var half = num.ushrn(1);\n    var r2 = num.andln(1);\n    var cmp = mod.cmp(half); // Round down\n\n    if (cmp < 0 || r2 === 1 && cmp === 0) return dm.div; // Round up\n\n    return dm.div.negative !== 0 ? dm.div.isubn(1) : dm.div.iaddn(1);\n  };\n\n  BN.prototype.modn = function modn(num) {\n    assert(num <= 0x3ffffff);\n    var p = (1 << 26) % num;\n    var acc = 0;\n\n    for (var i = this.length - 1; i >= 0; i--) {\n      acc = (p * acc + (this.words[i] | 0)) % num;\n    }\n\n    return acc;\n  }; // In-place division by number\n\n\n  BN.prototype.idivn = function idivn(num) {\n    assert(num <= 0x3ffffff);\n    var carry = 0;\n\n    for (var i = this.length - 1; i >= 0; i--) {\n      var w = (this.words[i] | 0) + carry * 0x4000000;\n      this.words[i] = w / num | 0;\n      carry = w % num;\n    }\n\n    return this.strip();\n  };\n\n  BN.prototype.divn = function divn(num) {\n    return this.clone().idivn(num);\n  };\n\n  BN.prototype.egcd = function egcd(p) {\n    assert(p.negative === 0);\n    assert(!p.isZero());\n    var x = this;\n    var y = p.clone();\n\n    if (x.negative !== 0) {\n      x = x.umod(p);\n    } else {\n      x = x.clone();\n    } // A * x + B * y = x\n\n\n    var A = new BN(1);\n    var B = new BN(0); // C * x + D * y = y\n\n    var C = new BN(0);\n    var D = new BN(1);\n    var g = 0;\n\n    while (x.isEven() && y.isEven()) {\n      x.iushrn(1);\n      y.iushrn(1);\n      ++g;\n    }\n\n    var yp = y.clone();\n    var xp = x.clone();\n\n    while (!x.isZero()) {\n      for (var i = 0, im = 1; (x.words[0] & im) === 0 && i < 26; ++i, im <<= 1) {\n        ;\n      }\n\n      if (i > 0) {\n        x.iushrn(i);\n\n        while (i-- > 0) {\n          if (A.isOdd() || B.isOdd()) {\n            A.iadd(yp);\n            B.isub(xp);\n          }\n\n          A.iushrn(1);\n          B.iushrn(1);\n        }\n      }\n\n      for (var j = 0, jm = 1; (y.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1) {\n        ;\n      }\n\n      if (j > 0) {\n        y.iushrn(j);\n\n        while (j-- > 0) {\n          if (C.isOdd() || D.isOdd()) {\n            C.iadd(yp);\n            D.isub(xp);\n          }\n\n          C.iushrn(1);\n          D.iushrn(1);\n        }\n      }\n\n      if (x.cmp(y) >= 0) {\n        x.isub(y);\n        A.isub(C);\n        B.isub(D);\n      } else {\n        y.isub(x);\n        C.isub(A);\n        D.isub(B);\n      }\n    }\n\n    return {\n      a: C,\n      b: D,\n      gcd: y.iushln(g)\n    };\n  }; // This is reduced incarnation of the binary EEA\n  // above, designated to invert members of the\n  // _prime_ fields F(p) at a maximal speed\n\n\n  BN.prototype._invmp = function _invmp(p) {\n    assert(p.negative === 0);\n    assert(!p.isZero());\n    var a = this;\n    var b = p.clone();\n\n    if (a.negative !== 0) {\n      a = a.umod(p);\n    } else {\n      a = a.clone();\n    }\n\n    var x1 = new BN(1);\n    var x2 = new BN(0);\n    var delta = b.clone();\n\n    while (a.cmpn(1) > 0 && b.cmpn(1) > 0) {\n      for (var i = 0, im = 1; (a.words[0] & im) === 0 && i < 26; ++i, im <<= 1) {\n        ;\n      }\n\n      if (i > 0) {\n        a.iushrn(i);\n\n        while (i-- > 0) {\n          if (x1.isOdd()) {\n            x1.iadd(delta);\n          }\n\n          x1.iushrn(1);\n        }\n      }\n\n      for (var j = 0, jm = 1; (b.words[0] & jm) === 0 && j < 26; ++j, jm <<= 1) {\n        ;\n      }\n\n      if (j > 0) {\n        b.iushrn(j);\n\n        while (j-- > 0) {\n          if (x2.isOdd()) {\n            x2.iadd(delta);\n          }\n\n          x2.iushrn(1);\n        }\n      }\n\n      if (a.cmp(b) >= 0) {\n        a.isub(b);\n        x1.isub(x2);\n      } else {\n        b.isub(a);\n        x2.isub(x1);\n      }\n    }\n\n    var res;\n\n    if (a.cmpn(1) === 0) {\n      res = x1;\n    } else {\n      res = x2;\n    }\n\n    if (res.cmpn(0) < 0) {\n      res.iadd(p);\n    }\n\n    return res;\n  };\n\n  BN.prototype.gcd = function gcd(num) {\n    if (this.isZero()) return num.abs();\n    if (num.isZero()) return this.abs();\n    var a = this.clone();\n    var b = num.clone();\n    a.negative = 0;\n    b.negative = 0; // Remove common factor of two\n\n    for (var shift = 0; a.isEven() && b.isEven(); shift++) {\n      a.iushrn(1);\n      b.iushrn(1);\n    }\n\n    do {\n      while (a.isEven()) {\n        a.iushrn(1);\n      }\n\n      while (b.isEven()) {\n        b.iushrn(1);\n      }\n\n      var r = a.cmp(b);\n\n      if (r < 0) {\n        // Swap `a` and `b` to make `a` always bigger than `b`\n        var t = a;\n        a = b;\n        b = t;\n      } else if (r === 0 || b.cmpn(1) === 0) {\n        break;\n      }\n\n      a.isub(b);\n    } while (true);\n\n    return b.iushln(shift);\n  }; // Invert number in the field F(num)\n\n\n  BN.prototype.invm = function invm(num) {\n    return this.egcd(num).a.umod(num);\n  };\n\n  BN.prototype.isEven = function isEven() {\n    return (this.words[0] & 1) === 0;\n  };\n\n  BN.prototype.isOdd = function isOdd() {\n    return (this.words[0] & 1) === 1;\n  }; // And first word and num\n\n\n  BN.prototype.andln = function andln(num) {\n    return this.words[0] & num;\n  }; // Increment at the bit position in-line\n\n\n  BN.prototype.bincn = function bincn(bit) {\n    assert(typeof bit === 'number');\n    var r = bit % 26;\n    var s = (bit - r) / 26;\n    var q = 1 << r; // Fast case: bit is much higher than all existing words\n\n    if (this.length <= s) {\n      this._expand(s + 1);\n\n      this.words[s] |= q;\n      return this;\n    } // Add bit and propagate, if needed\n\n\n    var carry = q;\n\n    for (var i = s; carry !== 0 && i < this.length; i++) {\n      var w = this.words[i] | 0;\n      w += carry;\n      carry = w >>> 26;\n      w &= 0x3ffffff;\n      this.words[i] = w;\n    }\n\n    if (carry !== 0) {\n      this.words[i] = carry;\n      this.length++;\n    }\n\n    return this;\n  };\n\n  BN.prototype.isZero = function isZero() {\n    return this.length === 1 && this.words[0] === 0;\n  };\n\n  BN.prototype.cmpn = function cmpn(num) {\n    var negative = num < 0;\n    if (this.negative !== 0 && !negative) return -1;\n    if (this.negative === 0 && negative) return 1;\n    this.strip();\n    var res;\n\n    if (this.length > 1) {\n      res = 1;\n    } else {\n      if (negative) {\n        num = -num;\n      }\n\n      assert(num <= 0x3ffffff, 'Number is too big');\n      var w = this.words[0] | 0;\n      res = w === num ? 0 : w < num ? -1 : 1;\n    }\n\n    if (this.negative !== 0) return -res | 0;\n    return res;\n  }; // Compare two numbers and return:\n  // 1 - if `this` > `num`\n  // 0 - if `this` == `num`\n  // -1 - if `this` < `num`\n\n\n  BN.prototype.cmp = function cmp(num) {\n    if (this.negative !== 0 && num.negative === 0) return -1;\n    if (this.negative === 0 && num.negative !== 0) return 1;\n    var res = this.ucmp(num);\n    if (this.negative !== 0) return -res | 0;\n    return res;\n  }; // Unsigned comparison\n\n\n  BN.prototype.ucmp = function ucmp(num) {\n    // At this point both numbers have the same sign\n    if (this.length > num.length) return 1;\n    if (this.length < num.length) return -1;\n    var res = 0;\n\n    for (var i = this.length - 1; i >= 0; i--) {\n      var a = this.words[i] | 0;\n      var b = num.words[i] | 0;\n      if (a === b) continue;\n\n      if (a < b) {\n        res = -1;\n      } else if (a > b) {\n        res = 1;\n      }\n\n      break;\n    }\n\n    return res;\n  };\n\n  BN.prototype.gtn = function gtn(num) {\n    return this.cmpn(num) === 1;\n  };\n\n  BN.prototype.gt = function gt(num) {\n    return this.cmp(num) === 1;\n  };\n\n  BN.prototype.gten = function gten(num) {\n    return this.cmpn(num) >= 0;\n  };\n\n  BN.prototype.gte = function gte(num) {\n    return this.cmp(num) >= 0;\n  };\n\n  BN.prototype.ltn = function ltn(num) {\n    return this.cmpn(num) === -1;\n  };\n\n  BN.prototype.lt = function lt(num) {\n    return this.cmp(num) === -1;\n  };\n\n  BN.prototype.lten = function lten(num) {\n    return this.cmpn(num) <= 0;\n  };\n\n  BN.prototype.lte = function lte(num) {\n    return this.cmp(num) <= 0;\n  };\n\n  BN.prototype.eqn = function eqn(num) {\n    return this.cmpn(num) === 0;\n  };\n\n  BN.prototype.eq = function eq(num) {\n    return this.cmp(num) === 0;\n  }; //\n  // A reduce context, could be using montgomery or something better, depending\n  // on the `m` itself.\n  //\n\n\n  BN.red = function red(num) {\n    return new Red(num);\n  };\n\n  BN.prototype.toRed = function toRed(ctx) {\n    assert(!this.red, 'Already a number in reduction context');\n    assert(this.negative === 0, 'red works only with positives');\n    return ctx.convertTo(this)._forceRed(ctx);\n  };\n\n  BN.prototype.fromRed = function fromRed() {\n    assert(this.red, 'fromRed works only with numbers in reduction context');\n    return this.red.convertFrom(this);\n  };\n\n  BN.prototype._forceRed = function _forceRed(ctx) {\n    this.red = ctx;\n    return this;\n  };\n\n  BN.prototype.forceRed = function forceRed(ctx) {\n    assert(!this.red, 'Already a number in reduction context');\n    return this._forceRed(ctx);\n  };\n\n  BN.prototype.redAdd = function redAdd(num) {\n    assert(this.red, 'redAdd works only with red numbers');\n    return this.red.add(this, num);\n  };\n\n  BN.prototype.redIAdd = function redIAdd(num) {\n    assert(this.red, 'redIAdd works only with red numbers');\n    return this.red.iadd(this, num);\n  };\n\n  BN.prototype.redSub = function redSub(num) {\n    assert(this.red, 'redSub works only with red numbers');\n    return this.red.sub(this, num);\n  };\n\n  BN.prototype.redISub = function redISub(num) {\n    assert(this.red, 'redISub works only with red numbers');\n    return this.red.isub(this, num);\n  };\n\n  BN.prototype.redShl = function redShl(num) {\n    assert(this.red, 'redShl works only with red numbers');\n    return this.red.shl(this, num);\n  };\n\n  BN.prototype.redMul = function redMul(num) {\n    assert(this.red, 'redMul works only with red numbers');\n\n    this.red._verify2(this, num);\n\n    return this.red.mul(this, num);\n  };\n\n  BN.prototype.redIMul = function redIMul(num) {\n    assert(this.red, 'redMul works only with red numbers');\n\n    this.red._verify2(this, num);\n\n    return this.red.imul(this, num);\n  };\n\n  BN.prototype.redSqr = function redSqr() {\n    assert(this.red, 'redSqr works only with red numbers');\n\n    this.red._verify1(this);\n\n    return this.red.sqr(this);\n  };\n\n  BN.prototype.redISqr = function redISqr() {\n    assert(this.red, 'redISqr works only with red numbers');\n\n    this.red._verify1(this);\n\n    return this.red.isqr(this);\n  }; // Square root over p\n\n\n  BN.prototype.redSqrt = function redSqrt() {\n    assert(this.red, 'redSqrt works only with red numbers');\n\n    this.red._verify1(this);\n\n    return this.red.sqrt(this);\n  };\n\n  BN.prototype.redInvm = function redInvm() {\n    assert(this.red, 'redInvm works only with red numbers');\n\n    this.red._verify1(this);\n\n    return this.red.invm(this);\n  }; // Return negative clone of `this` % `red modulo`\n\n\n  BN.prototype.redNeg = function redNeg() {\n    assert(this.red, 'redNeg works only with red numbers');\n\n    this.red._verify1(this);\n\n    return this.red.neg(this);\n  };\n\n  BN.prototype.redPow = function redPow(num) {\n    assert(this.red && !num.red, 'redPow(normalNum)');\n\n    this.red._verify1(this);\n\n    return this.red.pow(this, num);\n  }; // Prime numbers with efficient reduction\n\n\n  var primes = {\n    k256: null,\n    p224: null,\n    p192: null,\n    p25519: null\n  }; // Pseudo-Mersenne prime\n\n  function MPrime(name, p) {\n    // P = 2 ^ N - K\n    this.name = name;\n    this.p = new BN(p, 16);\n    this.n = this.p.bitLength();\n    this.k = new BN(1).iushln(this.n).isub(this.p);\n    this.tmp = this._tmp();\n  }\n\n  MPrime.prototype._tmp = function _tmp() {\n    var tmp = new BN(null);\n    tmp.words = new Array(Math.ceil(this.n / 13));\n    return tmp;\n  };\n\n  MPrime.prototype.ireduce = function ireduce(num) {\n    // Assumes that `num` is less than `P^2`\n    // num = HI * (2 ^ N - K) + HI * K + LO = HI * K + LO (mod P)\n    var r = num;\n    var rlen;\n\n    do {\n      this.split(r, this.tmp);\n      r = this.imulK(r);\n      r = r.iadd(this.tmp);\n      rlen = r.bitLength();\n    } while (rlen > this.n);\n\n    var cmp = rlen < this.n ? -1 : r.ucmp(this.p);\n\n    if (cmp === 0) {\n      r.words[0] = 0;\n      r.length = 1;\n    } else if (cmp > 0) {\n      r.isub(this.p);\n    } else {\n      r.strip();\n    }\n\n    return r;\n  };\n\n  MPrime.prototype.split = function split(input, out) {\n    input.iushrn(this.n, 0, out);\n  };\n\n  MPrime.prototype.imulK = function imulK(num) {\n    return num.imul(this.k);\n  };\n\n  function K256() {\n    MPrime.call(this, 'k256', 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f');\n  }\n\n  inherits(K256, MPrime);\n\n  K256.prototype.split = function split(input, output) {\n    // 256 = 9 * 26 + 22\n    var mask = 0x3fffff;\n    var outLen = Math.min(input.length, 9);\n\n    for (var i = 0; i < outLen; i++) {\n      output.words[i] = input.words[i];\n    }\n\n    output.length = outLen;\n\n    if (input.length <= 9) {\n      input.words[0] = 0;\n      input.length = 1;\n      return;\n    } // Shift by 9 limbs\n\n\n    var prev = input.words[9];\n    output.words[output.length++] = prev & mask;\n\n    for (i = 10; i < input.length; i++) {\n      var next = input.words[i] | 0;\n      input.words[i - 10] = (next & mask) << 4 | prev >>> 22;\n      prev = next;\n    }\n\n    prev >>>= 22;\n    input.words[i - 10] = prev;\n\n    if (prev === 0 && input.length > 10) {\n      input.length -= 10;\n    } else {\n      input.length -= 9;\n    }\n  };\n\n  K256.prototype.imulK = function imulK(num) {\n    // K = 0x1000003d1 = [ 0x40, 0x3d1 ]\n    num.words[num.length] = 0;\n    num.words[num.length + 1] = 0;\n    num.length += 2; // bounded at: 0x40 * 0x3ffffff + 0x3d0 = 0x100000390\n\n    var lo = 0;\n\n    for (var i = 0; i < num.length; i++) {\n      var w = num.words[i] | 0;\n      lo += w * 0x3d1;\n      num.words[i] = lo & 0x3ffffff;\n      lo = w * 0x40 + (lo / 0x4000000 | 0);\n    } // Fast length reduction\n\n\n    if (num.words[num.length - 1] === 0) {\n      num.length--;\n\n      if (num.words[num.length - 1] === 0) {\n        num.length--;\n      }\n    }\n\n    return num;\n  };\n\n  function P224() {\n    MPrime.call(this, 'p224', 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001');\n  }\n\n  inherits(P224, MPrime);\n\n  function P192() {\n    MPrime.call(this, 'p192', 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff');\n  }\n\n  inherits(P192, MPrime);\n\n  function P25519() {\n    // 2 ^ 255 - 19\n    MPrime.call(this, '25519', '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed');\n  }\n\n  inherits(P25519, MPrime);\n\n  P25519.prototype.imulK = function imulK(num) {\n    // K = 0x13\n    var carry = 0;\n\n    for (var i = 0; i < num.length; i++) {\n      var hi = (num.words[i] | 0) * 0x13 + carry;\n      var lo = hi & 0x3ffffff;\n      hi >>>= 26;\n      num.words[i] = lo;\n      carry = hi;\n    }\n\n    if (carry !== 0) {\n      num.words[num.length++] = carry;\n    }\n\n    return num;\n  }; // Exported mostly for testing purposes, use plain name instead\n\n\n  BN._prime = function prime(name) {\n    // Cached version of prime\n    if (primes[name]) return primes[name];\n    var prime;\n\n    if (name === 'k256') {\n      prime = new K256();\n    } else if (name === 'p224') {\n      prime = new P224();\n    } else if (name === 'p192') {\n      prime = new P192();\n    } else if (name === 'p25519') {\n      prime = new P25519();\n    } else {\n      throw new Error('Unknown prime ' + name);\n    }\n\n    primes[name] = prime;\n    return prime;\n  }; //\n  // Base reduction engine\n  //\n\n\n  function Red(m) {\n    if (typeof m === 'string') {\n      var prime = BN._prime(m);\n\n      this.m = prime.p;\n      this.prime = prime;\n    } else {\n      assert(m.gtn(1), 'modulus must be greater than 1');\n      this.m = m;\n      this.prime = null;\n    }\n  }\n\n  Red.prototype._verify1 = function _verify1(a) {\n    assert(a.negative === 0, 'red works only with positives');\n    assert(a.red, 'red works only with red numbers');\n  };\n\n  Red.prototype._verify2 = function _verify2(a, b) {\n    assert((a.negative | b.negative) === 0, 'red works only with positives');\n    assert(a.red && a.red === b.red, 'red works only with red numbers');\n  };\n\n  Red.prototype.imod = function imod(a) {\n    if (this.prime) return this.prime.ireduce(a)._forceRed(this);\n    return a.umod(this.m)._forceRed(this);\n  };\n\n  Red.prototype.neg = function neg(a) {\n    if (a.isZero()) {\n      return a.clone();\n    }\n\n    return this.m.sub(a)._forceRed(this);\n  };\n\n  Red.prototype.add = function add(a, b) {\n    this._verify2(a, b);\n\n    var res = a.add(b);\n\n    if (res.cmp(this.m) >= 0) {\n      res.isub(this.m);\n    }\n\n    return res._forceRed(this);\n  };\n\n  Red.prototype.iadd = function iadd(a, b) {\n    this._verify2(a, b);\n\n    var res = a.iadd(b);\n\n    if (res.cmp(this.m) >= 0) {\n      res.isub(this.m);\n    }\n\n    return res;\n  };\n\n  Red.prototype.sub = function sub(a, b) {\n    this._verify2(a, b);\n\n    var res = a.sub(b);\n\n    if (res.cmpn(0) < 0) {\n      res.iadd(this.m);\n    }\n\n    return res._forceRed(this);\n  };\n\n  Red.prototype.isub = function isub(a, b) {\n    this._verify2(a, b);\n\n    var res = a.isub(b);\n\n    if (res.cmpn(0) < 0) {\n      res.iadd(this.m);\n    }\n\n    return res;\n  };\n\n  Red.prototype.shl = function shl(a, num) {\n    this._verify1(a);\n\n    return this.imod(a.ushln(num));\n  };\n\n  Red.prototype.imul = function imul(a, b) {\n    this._verify2(a, b);\n\n    return this.imod(a.imul(b));\n  };\n\n  Red.prototype.mul = function mul(a, b) {\n    this._verify2(a, b);\n\n    return this.imod(a.mul(b));\n  };\n\n  Red.prototype.isqr = function isqr(a) {\n    return this.imul(a, a.clone());\n  };\n\n  Red.prototype.sqr = function sqr(a) {\n    return this.mul(a, a);\n  };\n\n  Red.prototype.sqrt = function sqrt(a) {\n    if (a.isZero()) return a.clone();\n    var mod3 = this.m.andln(3);\n    assert(mod3 % 2 === 1); // Fast case\n\n    if (mod3 === 3) {\n      var pow = this.m.add(new BN(1)).iushrn(2);\n      return this.pow(a, pow);\n    } // Tonelli-Shanks algorithm (Totally unoptimized and slow)\n    //\n    // Find Q and S, that Q * 2 ^ S = (P - 1)\n\n\n    var q = this.m.subn(1);\n    var s = 0;\n\n    while (!q.isZero() && q.andln(1) === 0) {\n      s++;\n      q.iushrn(1);\n    }\n\n    assert(!q.isZero());\n    var one = new BN(1).toRed(this);\n    var nOne = one.redNeg(); // Find quadratic non-residue\n    // NOTE: Max is such because of generalized Riemann hypothesis.\n\n    var lpow = this.m.subn(1).iushrn(1);\n    var z = this.m.bitLength();\n    z = new BN(2 * z * z).toRed(this);\n\n    while (this.pow(z, lpow).cmp(nOne) !== 0) {\n      z.redIAdd(nOne);\n    }\n\n    var c = this.pow(z, q);\n    var r = this.pow(a, q.addn(1).iushrn(1));\n    var t = this.pow(a, q);\n    var m = s;\n\n    while (t.cmp(one) !== 0) {\n      var tmp = t;\n\n      for (var i = 0; tmp.cmp(one) !== 0; i++) {\n        tmp = tmp.redSqr();\n      }\n\n      assert(i < m);\n      var b = this.pow(c, new BN(1).iushln(m - i - 1));\n      r = r.redMul(b);\n      c = b.redSqr();\n      t = t.redMul(c);\n      m = i;\n    }\n\n    return r;\n  };\n\n  Red.prototype.invm = function invm(a) {\n    var inv = a._invmp(this.m);\n\n    if (inv.negative !== 0) {\n      inv.negative = 0;\n      return this.imod(inv).redNeg();\n    } else {\n      return this.imod(inv);\n    }\n  };\n\n  Red.prototype.pow = function pow(a, num) {\n    if (num.isZero()) return new BN(1).toRed(this);\n    if (num.cmpn(1) === 0) return a.clone();\n    var windowSize = 4;\n    var wnd = new Array(1 << windowSize);\n    wnd[0] = new BN(1).toRed(this);\n    wnd[1] = a;\n\n    for (var i = 2; i < wnd.length; i++) {\n      wnd[i] = this.mul(wnd[i - 1], a);\n    }\n\n    var res = wnd[0];\n    var current = 0;\n    var currentLen = 0;\n    var start = num.bitLength() % 26;\n\n    if (start === 0) {\n      start = 26;\n    }\n\n    for (i = num.length - 1; i >= 0; i--) {\n      var word = num.words[i];\n\n      for (var j = start - 1; j >= 0; j--) {\n        var bit = word >> j & 1;\n\n        if (res !== wnd[0]) {\n          res = this.sqr(res);\n        }\n\n        if (bit === 0 && current === 0) {\n          currentLen = 0;\n          continue;\n        }\n\n        current <<= 1;\n        current |= bit;\n        currentLen++;\n        if (currentLen !== windowSize && (i !== 0 || j !== 0)) continue;\n        res = this.mul(res, wnd[current]);\n        currentLen = 0;\n        current = 0;\n      }\n\n      start = 26;\n    }\n\n    return res;\n  };\n\n  Red.prototype.convertTo = function convertTo(num) {\n    var r = num.umod(this.m);\n    return r === num ? r.clone() : r;\n  };\n\n  Red.prototype.convertFrom = function convertFrom(num) {\n    var res = num.clone();\n    res.red = null;\n    return res;\n  }; //\n  // Montgomery method engine\n  //\n\n\n  BN.mont = function mont(num) {\n    return new Mont(num);\n  };\n\n  function Mont(m) {\n    Red.call(this, m);\n    this.shift = this.m.bitLength();\n\n    if (this.shift % 26 !== 0) {\n      this.shift += 26 - this.shift % 26;\n    }\n\n    this.r = new BN(1).iushln(this.shift);\n    this.r2 = this.imod(this.r.sqr());\n    this.rinv = this.r._invmp(this.m);\n    this.minv = this.rinv.mul(this.r).isubn(1).div(this.m);\n    this.minv = this.minv.umod(this.r);\n    this.minv = this.r.sub(this.minv);\n  }\n\n  inherits(Mont, Red);\n\n  Mont.prototype.convertTo = function convertTo(num) {\n    return this.imod(num.ushln(this.shift));\n  };\n\n  Mont.prototype.convertFrom = function convertFrom(num) {\n    var r = this.imod(num.mul(this.rinv));\n    r.red = null;\n    return r;\n  };\n\n  Mont.prototype.imul = function imul(a, b) {\n    if (a.isZero() || b.isZero()) {\n      a.words[0] = 0;\n      a.length = 1;\n      return a;\n    }\n\n    var t = a.imul(b);\n    var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n    var u = t.isub(c).iushrn(this.shift);\n    var res = u;\n\n    if (u.cmp(this.m) >= 0) {\n      res = u.isub(this.m);\n    } else if (u.cmpn(0) < 0) {\n      res = u.iadd(this.m);\n    }\n\n    return res._forceRed(this);\n  };\n\n  Mont.prototype.mul = function mul(a, b) {\n    if (a.isZero() || b.isZero()) return new BN(0)._forceRed(this);\n    var t = a.mul(b);\n    var c = t.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m);\n    var u = t.isub(c).iushrn(this.shift);\n    var res = u;\n\n    if (u.cmp(this.m) >= 0) {\n      res = u.isub(this.m);\n    } else if (u.cmpn(0) < 0) {\n      res = u.iadd(this.m);\n    }\n\n    return res._forceRed(this);\n  };\n\n  Mont.prototype.invm = function invm(a) {\n    // (AR)^-1 * R^2 = (A^-1 * R^-1) * R^2 = A^-1 * R\n    var res = this.imod(a._invmp(this.m).mul(this.r2));\n    return res._forceRed(this);\n  };\n})(typeof module === 'undefined' || module, this);","function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n/**\n * @license\n * Lodash <https://lodash.com/>\n * Copyright OpenJS Foundation and other contributors <https://openjsf.org/>\n * Released under MIT license <https://lodash.com/license>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n;\n(function () {\n  /** Used as a safe reference for `undefined` in pre-ES5 environments. */\n  var undefined;\n  /** Used as the semantic version number. */\n\n  var VERSION = '4.17.15';\n  /** Used as the size to enable large array optimizations. */\n\n  var LARGE_ARRAY_SIZE = 200;\n  /** Error message constants. */\n\n  var CORE_ERROR_TEXT = 'Unsupported core-js use. Try https://npms.io/search?q=ponyfill.',\n      FUNC_ERROR_TEXT = 'Expected a function';\n  /** Used to stand-in for `undefined` hash values. */\n\n  var HASH_UNDEFINED = '__lodash_hash_undefined__';\n  /** Used as the maximum memoize cache size. */\n\n  var MAX_MEMOIZE_SIZE = 500;\n  /** Used as the internal argument placeholder. */\n\n  var PLACEHOLDER = '__lodash_placeholder__';\n  /** Used to compose bitmasks for cloning. */\n\n  var CLONE_DEEP_FLAG = 1,\n      CLONE_FLAT_FLAG = 2,\n      CLONE_SYMBOLS_FLAG = 4;\n  /** Used to compose bitmasks for value comparisons. */\n\n  var COMPARE_PARTIAL_FLAG = 1,\n      COMPARE_UNORDERED_FLAG = 2;\n  /** Used to compose bitmasks for function metadata. */\n\n  var WRAP_BIND_FLAG = 1,\n      WRAP_BIND_KEY_FLAG = 2,\n      WRAP_CURRY_BOUND_FLAG = 4,\n      WRAP_CURRY_FLAG = 8,\n      WRAP_CURRY_RIGHT_FLAG = 16,\n      WRAP_PARTIAL_FLAG = 32,\n      WRAP_PARTIAL_RIGHT_FLAG = 64,\n      WRAP_ARY_FLAG = 128,\n      WRAP_REARG_FLAG = 256,\n      WRAP_FLIP_FLAG = 512;\n  /** Used as default options for `_.truncate`. */\n\n  var DEFAULT_TRUNC_LENGTH = 30,\n      DEFAULT_TRUNC_OMISSION = '...';\n  /** Used to detect hot functions by number of calls within a span of milliseconds. */\n\n  var HOT_COUNT = 800,\n      HOT_SPAN = 16;\n  /** Used to indicate the type of lazy iteratees. */\n\n  var LAZY_FILTER_FLAG = 1,\n      LAZY_MAP_FLAG = 2,\n      LAZY_WHILE_FLAG = 3;\n  /** Used as references for various `Number` constants. */\n\n  var INFINITY = 1 / 0,\n      MAX_SAFE_INTEGER = 9007199254740991,\n      MAX_INTEGER = 1.7976931348623157e+308,\n      NAN = 0 / 0;\n  /** Used as references for the maximum length and index of an array. */\n\n  var MAX_ARRAY_LENGTH = 4294967295,\n      MAX_ARRAY_INDEX = MAX_ARRAY_LENGTH - 1,\n      HALF_MAX_ARRAY_LENGTH = MAX_ARRAY_LENGTH >>> 1;\n  /** Used to associate wrap methods with their bit flags. */\n\n  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]];\n  /** `Object#toString` result references. */\n\n  var argsTag = '[object Arguments]',\n      arrayTag = '[object Array]',\n      asyncTag = '[object AsyncFunction]',\n      boolTag = '[object Boolean]',\n      dateTag = '[object Date]',\n      domExcTag = '[object DOMException]',\n      errorTag = '[object Error]',\n      funcTag = '[object Function]',\n      genTag = '[object GeneratorFunction]',\n      mapTag = '[object Map]',\n      numberTag = '[object Number]',\n      nullTag = '[object Null]',\n      objectTag = '[object Object]',\n      promiseTag = '[object Promise]',\n      proxyTag = '[object Proxy]',\n      regexpTag = '[object RegExp]',\n      setTag = '[object Set]',\n      stringTag = '[object String]',\n      symbolTag = '[object Symbol]',\n      undefinedTag = '[object Undefined]',\n      weakMapTag = '[object WeakMap]',\n      weakSetTag = '[object WeakSet]';\n  var arrayBufferTag = '[object ArrayBuffer]',\n      dataViewTag = '[object DataView]',\n      float32Tag = '[object Float32Array]',\n      float64Tag = '[object Float64Array]',\n      int8Tag = '[object Int8Array]',\n      int16Tag = '[object Int16Array]',\n      int32Tag = '[object Int32Array]',\n      uint8Tag = '[object Uint8Array]',\n      uint8ClampedTag = '[object Uint8ClampedArray]',\n      uint16Tag = '[object Uint16Array]',\n      uint32Tag = '[object Uint32Array]';\n  /** Used to match empty string literals in compiled template source. */\n\n  var reEmptyStringLeading = /\\b__p \\+= '';/g,\n      reEmptyStringMiddle = /\\b(__p \\+=) '' \\+/g,\n      reEmptyStringTrailing = /(__e\\(.*?\\)|\\b__t\\)) \\+\\n'';/g;\n  /** Used to match HTML entities and HTML characters. */\n\n  var reEscapedHtml = /&(?:amp|lt|gt|quot|#39);/g,\n      reUnescapedHtml = /[&<>\"']/g,\n      reHasEscapedHtml = RegExp(reEscapedHtml.source),\n      reHasUnescapedHtml = RegExp(reUnescapedHtml.source);\n  /** Used to match template delimiters. */\n\n  var reEscape = /<%-([\\s\\S]+?)%>/g,\n      reEvaluate = /<%([\\s\\S]+?)%>/g,\n      reInterpolate = /<%=([\\s\\S]+?)%>/g;\n  /** Used to match property names within property paths. */\n\n  var reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n      reIsPlainProp = /^\\w*$/,\n      rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;\n  /**\n   * Used to match `RegExp`\n   * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n   */\n\n  var reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g,\n      reHasRegExpChar = RegExp(reRegExpChar.source);\n  /** Used to match leading and trailing whitespace. */\n\n  var reTrim = /^\\s+|\\s+$/g,\n      reTrimStart = /^\\s+/,\n      reTrimEnd = /\\s+$/;\n  /** Used to match wrap detail comments. */\n\n  var reWrapComment = /\\{(?:\\n\\/\\* \\[wrapped with .+\\] \\*\\/)?\\n?/,\n      reWrapDetails = /\\{\\n\\/\\* \\[wrapped with (.+)\\] \\*/,\n      reSplitDetails = /,? & /;\n  /** Used to match words composed of alphanumeric characters. */\n\n  var reAsciiWord = /[^\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\x7f]+/g;\n  /** Used to match backslashes in property paths. */\n\n  var reEscapeChar = /\\\\(\\\\)?/g;\n  /**\n   * Used to match\n   * [ES template delimiters](http://ecma-international.org/ecma-262/7.0/#sec-template-literal-lexical-components).\n   */\n\n  var reEsTemplate = /\\$\\{([^\\\\}]*(?:\\\\.[^\\\\}]*)*)\\}/g;\n  /** Used to match `RegExp` flags from their coerced string values. */\n\n  var reFlags = /\\w*$/;\n  /** Used to detect bad signed hexadecimal string values. */\n\n  var reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n  /** Used to detect binary string values. */\n\n  var reIsBinary = /^0b[01]+$/i;\n  /** Used to detect host constructors (Safari). */\n\n  var reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n  /** Used to detect octal string values. */\n\n  var reIsOctal = /^0o[0-7]+$/i;\n  /** Used to detect unsigned integer values. */\n\n  var reIsUint = /^(?:0|[1-9]\\d*)$/;\n  /** Used to match Latin Unicode letters (excluding mathematical operators). */\n\n  var reLatin = /[\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff\\u0100-\\u017f]/g;\n  /** Used to ensure capturing order of template delimiters. */\n\n  var reNoMatch = /($^)/;\n  /** Used to match unescaped characters in compiled string literals. */\n\n  var reUnescapedString = /['\\n\\r\\u2028\\u2029\\\\]/g;\n  /** Used to compose unicode character classes. */\n\n  var rsAstralRange = \"\\\\ud800-\\\\udfff\",\n      rsComboMarksRange = \"\\\\u0300-\\\\u036f\",\n      reComboHalfMarksRange = \"\\\\ufe20-\\\\ufe2f\",\n      rsComboSymbolsRange = \"\\\\u20d0-\\\\u20ff\",\n      rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,\n      rsDingbatRange = \"\\\\u2700-\\\\u27bf\",\n      rsLowerRange = 'a-z\\\\xdf-\\\\xf6\\\\xf8-\\\\xff',\n      rsMathOpRange = '\\\\xac\\\\xb1\\\\xd7\\\\xf7',\n      rsNonCharRange = '\\\\x00-\\\\x2f\\\\x3a-\\\\x40\\\\x5b-\\\\x60\\\\x7b-\\\\xbf',\n      rsPunctuationRange = \"\\\\u2000-\\\\u206f\",\n      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\",\n      rsUpperRange = 'A-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde',\n      rsVarRange = \"\\\\ufe0e\\\\ufe0f\",\n      rsBreakRange = rsMathOpRange + rsNonCharRange + rsPunctuationRange + rsSpaceRange;\n  /** Used to compose unicode capture groups. */\n\n  var rsApos = \"['\\u2019]\",\n      rsAstral = '[' + rsAstralRange + ']',\n      rsBreak = '[' + rsBreakRange + ']',\n      rsCombo = '[' + rsComboRange + ']',\n      rsDigits = '\\\\d+',\n      rsDingbat = '[' + rsDingbatRange + ']',\n      rsLower = '[' + rsLowerRange + ']',\n      rsMisc = '[^' + rsAstralRange + rsBreakRange + rsDigits + rsDingbatRange + rsLowerRange + rsUpperRange + ']',\n      rsFitz = \"\\\\ud83c[\\\\udffb-\\\\udfff]\",\n      rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',\n      rsNonAstral = '[^' + rsAstralRange + ']',\n      rsRegional = \"(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}\",\n      rsSurrPair = \"[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]\",\n      rsUpper = '[' + rsUpperRange + ']',\n      rsZWJ = \"\\\\u200d\";\n  /** Used to compose unicode regexes. */\n\n  var rsMiscLower = '(?:' + rsLower + '|' + rsMisc + ')',\n      rsMiscUpper = '(?:' + rsUpper + '|' + rsMisc + ')',\n      rsOptContrLower = '(?:' + rsApos + '(?:d|ll|m|re|s|t|ve))?',\n      rsOptContrUpper = '(?:' + rsApos + '(?:D|LL|M|RE|S|T|VE))?',\n      reOptMod = rsModifier + '?',\n      rsOptVar = '[' + rsVarRange + ']?',\n      rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*',\n      rsOrdLower = '\\\\d*(?:1st|2nd|3rd|(?![123])\\\\dth)(?=\\\\b|[A-Z_])',\n      rsOrdUpper = '\\\\d*(?:1ST|2ND|3RD|(?![123])\\\\dTH)(?=\\\\b|[a-z_])',\n      rsSeq = rsOptVar + reOptMod + rsOptJoin,\n      rsEmoji = '(?:' + [rsDingbat, rsRegional, rsSurrPair].join('|') + ')' + rsSeq,\n      rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')';\n  /** Used to match apostrophes. */\n\n  var reApos = RegExp(rsApos, 'g');\n  /**\n   * Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and\n   * [combining diacritical marks for symbols](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks_for_Symbols).\n   */\n\n  var reComboMark = RegExp(rsCombo, 'g');\n  /** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */\n\n  var reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g');\n  /** Used to match complex or compound words. */\n\n  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');\n  /** 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/). */\n\n  var reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange + rsComboRange + rsVarRange + ']');\n  /** Used to detect strings that need a more robust regexp to match words. */\n\n  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 ]/;\n  /** Used to assign default `context` object properties. */\n\n  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'];\n  /** Used to make template sourceURLs easier to identify. */\n\n  var templateCounter = -1;\n  /** Used to identify `toStringTag` values of typed arrays. */\n\n  var typedArrayTags = {};\n  typedArrayTags[float32Tag] = typedArrayTags[float64Tag] = typedArrayTags[int8Tag] = typedArrayTags[int16Tag] = typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] = typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] = typedArrayTags[uint32Tag] = true;\n  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;\n  /** Used to identify `toStringTag` values supported by `_.clone`. */\n\n  var cloneableTags = {};\n  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;\n  cloneableTags[errorTag] = cloneableTags[funcTag] = cloneableTags[weakMapTag] = false;\n  /** Used to map Latin Unicode letters to basic Latin letters. */\n\n  var deburredLetters = {\n    // Latin-1 Supplement block.\n    '\\xc0': 'A',\n    '\\xc1': 'A',\n    '\\xc2': 'A',\n    '\\xc3': 'A',\n    '\\xc4': 'A',\n    '\\xc5': 'A',\n    '\\xe0': 'a',\n    '\\xe1': 'a',\n    '\\xe2': 'a',\n    '\\xe3': 'a',\n    '\\xe4': 'a',\n    '\\xe5': 'a',\n    '\\xc7': 'C',\n    '\\xe7': 'c',\n    '\\xd0': 'D',\n    '\\xf0': 'd',\n    '\\xc8': 'E',\n    '\\xc9': 'E',\n    '\\xca': 'E',\n    '\\xcb': 'E',\n    '\\xe8': 'e',\n    '\\xe9': 'e',\n    '\\xea': 'e',\n    '\\xeb': 'e',\n    '\\xcc': 'I',\n    '\\xcd': 'I',\n    '\\xce': 'I',\n    '\\xcf': 'I',\n    '\\xec': 'i',\n    '\\xed': 'i',\n    '\\xee': 'i',\n    '\\xef': 'i',\n    '\\xd1': 'N',\n    '\\xf1': 'n',\n    '\\xd2': 'O',\n    '\\xd3': 'O',\n    '\\xd4': 'O',\n    '\\xd5': 'O',\n    '\\xd6': 'O',\n    '\\xd8': 'O',\n    '\\xf2': 'o',\n    '\\xf3': 'o',\n    '\\xf4': 'o',\n    '\\xf5': 'o',\n    '\\xf6': 'o',\n    '\\xf8': 'o',\n    '\\xd9': 'U',\n    '\\xda': 'U',\n    '\\xdb': 'U',\n    '\\xdc': 'U',\n    '\\xf9': 'u',\n    '\\xfa': 'u',\n    '\\xfb': 'u',\n    '\\xfc': 'u',\n    '\\xdd': 'Y',\n    '\\xfd': 'y',\n    '\\xff': 'y',\n    '\\xc6': 'Ae',\n    '\\xe6': 'ae',\n    '\\xde': 'Th',\n    '\\xfe': 'th',\n    '\\xdf': 'ss',\n    // Latin Extended-A block.\n    \"\\u0100\": 'A',\n    \"\\u0102\": 'A',\n    \"\\u0104\": 'A',\n    \"\\u0101\": 'a',\n    \"\\u0103\": 'a',\n    \"\\u0105\": 'a',\n    \"\\u0106\": 'C',\n    \"\\u0108\": 'C',\n    \"\\u010A\": 'C',\n    \"\\u010C\": 'C',\n    \"\\u0107\": 'c',\n    \"\\u0109\": 'c',\n    \"\\u010B\": 'c',\n    \"\\u010D\": 'c',\n    \"\\u010E\": 'D',\n    \"\\u0110\": 'D',\n    \"\\u010F\": 'd',\n    \"\\u0111\": 'd',\n    \"\\u0112\": 'E',\n    \"\\u0114\": 'E',\n    \"\\u0116\": 'E',\n    \"\\u0118\": 'E',\n    \"\\u011A\": 'E',\n    \"\\u0113\": 'e',\n    \"\\u0115\": 'e',\n    \"\\u0117\": 'e',\n    \"\\u0119\": 'e',\n    \"\\u011B\": 'e',\n    \"\\u011C\": 'G',\n    \"\\u011E\": 'G',\n    \"\\u0120\": 'G',\n    \"\\u0122\": 'G',\n    \"\\u011D\": 'g',\n    \"\\u011F\": 'g',\n    \"\\u0121\": 'g',\n    \"\\u0123\": 'g',\n    \"\\u0124\": 'H',\n    \"\\u0126\": 'H',\n    \"\\u0125\": 'h',\n    \"\\u0127\": 'h',\n    \"\\u0128\": 'I',\n    \"\\u012A\": 'I',\n    \"\\u012C\": 'I',\n    \"\\u012E\": 'I',\n    \"\\u0130\": 'I',\n    \"\\u0129\": 'i',\n    \"\\u012B\": 'i',\n    \"\\u012D\": 'i',\n    \"\\u012F\": 'i',\n    \"\\u0131\": 'i',\n    \"\\u0134\": 'J',\n    \"\\u0135\": 'j',\n    \"\\u0136\": 'K',\n    \"\\u0137\": 'k',\n    \"\\u0138\": 'k',\n    \"\\u0139\": 'L',\n    \"\\u013B\": 'L',\n    \"\\u013D\": 'L',\n    \"\\u013F\": 'L',\n    \"\\u0141\": 'L',\n    \"\\u013A\": 'l',\n    \"\\u013C\": 'l',\n    \"\\u013E\": 'l',\n    \"\\u0140\": 'l',\n    \"\\u0142\": 'l',\n    \"\\u0143\": 'N',\n    \"\\u0145\": 'N',\n    \"\\u0147\": 'N',\n    \"\\u014A\": 'N',\n    \"\\u0144\": 'n',\n    \"\\u0146\": 'n',\n    \"\\u0148\": 'n',\n    \"\\u014B\": 'n',\n    \"\\u014C\": 'O',\n    \"\\u014E\": 'O',\n    \"\\u0150\": 'O',\n    \"\\u014D\": 'o',\n    \"\\u014F\": 'o',\n    \"\\u0151\": 'o',\n    \"\\u0154\": 'R',\n    \"\\u0156\": 'R',\n    \"\\u0158\": 'R',\n    \"\\u0155\": 'r',\n    \"\\u0157\": 'r',\n    \"\\u0159\": 'r',\n    \"\\u015A\": 'S',\n    \"\\u015C\": 'S',\n    \"\\u015E\": 'S',\n    \"\\u0160\": 'S',\n    \"\\u015B\": 's',\n    \"\\u015D\": 's',\n    \"\\u015F\": 's',\n    \"\\u0161\": 's',\n    \"\\u0162\": 'T',\n    \"\\u0164\": 'T',\n    \"\\u0166\": 'T',\n    \"\\u0163\": 't',\n    \"\\u0165\": 't',\n    \"\\u0167\": 't',\n    \"\\u0168\": 'U',\n    \"\\u016A\": 'U',\n    \"\\u016C\": 'U',\n    \"\\u016E\": 'U',\n    \"\\u0170\": 'U',\n    \"\\u0172\": 'U',\n    \"\\u0169\": 'u',\n    \"\\u016B\": 'u',\n    \"\\u016D\": 'u',\n    \"\\u016F\": 'u',\n    \"\\u0171\": 'u',\n    \"\\u0173\": 'u',\n    \"\\u0174\": 'W',\n    \"\\u0175\": 'w',\n    \"\\u0176\": 'Y',\n    \"\\u0177\": 'y',\n    \"\\u0178\": 'Y',\n    \"\\u0179\": 'Z',\n    \"\\u017B\": 'Z',\n    \"\\u017D\": 'Z',\n    \"\\u017A\": 'z',\n    \"\\u017C\": 'z',\n    \"\\u017E\": 'z',\n    \"\\u0132\": 'IJ',\n    \"\\u0133\": 'ij',\n    \"\\u0152\": 'Oe',\n    \"\\u0153\": 'oe',\n    \"\\u0149\": \"'n\",\n    \"\\u017F\": 's'\n  };\n  /** Used to map characters to HTML entities. */\n\n  var htmlEscapes = {\n    '&': '&amp;',\n    '<': '&lt;',\n    '>': '&gt;',\n    '\"': '&quot;',\n    \"'\": '&#39;'\n  };\n  /** Used to map HTML entities to characters. */\n\n  var htmlUnescapes = {\n    '&amp;': '&',\n    '&lt;': '<',\n    '&gt;': '>',\n    '&quot;': '\"',\n    '&#39;': \"'\"\n  };\n  /** Used to escape characters for inclusion in compiled string literals. */\n\n  var stringEscapes = {\n    '\\\\': '\\\\',\n    \"'\": \"'\",\n    '\\n': 'n',\n    '\\r': 'r',\n    \"\\u2028\": 'u2028',\n    \"\\u2029\": 'u2029'\n  };\n  /** Built-in method references without a dependency on `root`. */\n\n  var freeParseFloat = parseFloat,\n      freeParseInt = parseInt;\n  /** Detect free variable `global` from Node.js. */\n\n  var freeGlobal = (typeof global === \"undefined\" ? \"undefined\" : _typeof(global)) == 'object' && global && global.Object === Object && global;\n  /** Detect free variable `self`. */\n\n  var freeSelf = (typeof self === \"undefined\" ? \"undefined\" : _typeof(self)) == 'object' && self && self.Object === Object && self;\n  /** Used as a reference to the global object. */\n\n  var root = freeGlobal || freeSelf || Function('return this')();\n  /** Detect free variable `exports`. */\n\n  var freeExports = (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) == 'object' && exports && !exports.nodeType && exports;\n  /** Detect free variable `module`. */\n\n  var freeModule = freeExports && (typeof module === \"undefined\" ? \"undefined\" : _typeof(module)) == 'object' && module && !module.nodeType && module;\n  /** Detect the popular CommonJS extension `module.exports`. */\n\n  var moduleExports = freeModule && freeModule.exports === freeExports;\n  /** Detect free variable `process` from Node.js. */\n\n  var freeProcess = moduleExports && freeGlobal.process;\n  /** Used to access faster Node.js helpers. */\n\n  var nodeUtil = function () {\n    try {\n      // Use `util.types` for Node.js 10+.\n      var types = freeModule && freeModule.require && freeModule.require('util').types;\n\n      if (types) {\n        return types;\n      } // Legacy `process.binding('util')` for Node.js < 10.\n\n\n      return freeProcess && freeProcess.binding && freeProcess.binding('util');\n    } catch (e) {}\n  }();\n  /* Node.js helper references. */\n\n\n  var nodeIsArrayBuffer = nodeUtil && nodeUtil.isArrayBuffer,\n      nodeIsDate = nodeUtil && nodeUtil.isDate,\n      nodeIsMap = nodeUtil && nodeUtil.isMap,\n      nodeIsRegExp = nodeUtil && nodeUtil.isRegExp,\n      nodeIsSet = nodeUtil && nodeUtil.isSet,\n      nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;\n  /*--------------------------------------------------------------------------*/\n\n  /**\n   * A faster alternative to `Function#apply`, this function invokes `func`\n   * with the `this` binding of `thisArg` and the arguments of `args`.\n   *\n   * @private\n   * @param {Function} func The function to invoke.\n   * @param {*} thisArg The `this` binding of `func`.\n   * @param {Array} args The arguments to invoke `func` with.\n   * @returns {*} Returns the result of `func`.\n   */\n\n  function apply(func, thisArg, args) {\n    switch (args.length) {\n      case 0:\n        return func.call(thisArg);\n\n      case 1:\n        return func.call(thisArg, args[0]);\n\n      case 2:\n        return func.call(thisArg, args[0], args[1]);\n\n      case 3:\n        return func.call(thisArg, args[0], args[1], args[2]);\n    }\n\n    return func.apply(thisArg, args);\n  }\n  /**\n   * A specialized version of `baseAggregator` for arrays.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} setter The function to set `accumulator` values.\n   * @param {Function} iteratee The iteratee to transform keys.\n   * @param {Object} accumulator The initial aggregated object.\n   * @returns {Function} Returns `accumulator`.\n   */\n\n\n  function arrayAggregator(array, setter, iteratee, accumulator) {\n    var index = -1,\n        length = array == null ? 0 : array.length;\n\n    while (++index < length) {\n      var value = array[index];\n      setter(accumulator, value, iteratee(value), array);\n    }\n\n    return accumulator;\n  }\n  /**\n   * A specialized version of `_.forEach` for arrays without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @returns {Array} Returns `array`.\n   */\n\n\n  function arrayEach(array, iteratee) {\n    var index = -1,\n        length = array == null ? 0 : array.length;\n\n    while (++index < length) {\n      if (iteratee(array[index], index, array) === false) {\n        break;\n      }\n    }\n\n    return array;\n  }\n  /**\n   * A specialized version of `_.forEachRight` for arrays without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @returns {Array} Returns `array`.\n   */\n\n\n  function arrayEachRight(array, iteratee) {\n    var length = array == null ? 0 : array.length;\n\n    while (length--) {\n      if (iteratee(array[length], length, array) === false) {\n        break;\n      }\n    }\n\n    return array;\n  }\n  /**\n   * A specialized version of `_.every` for arrays without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} predicate The function invoked per iteration.\n   * @returns {boolean} Returns `true` if all elements pass the predicate check,\n   *  else `false`.\n   */\n\n\n  function arrayEvery(array, predicate) {\n    var index = -1,\n        length = array == null ? 0 : array.length;\n\n    while (++index < length) {\n      if (!predicate(array[index], index, array)) {\n        return false;\n      }\n    }\n\n    return true;\n  }\n  /**\n   * A specialized version of `_.filter` for arrays without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} predicate The function invoked per iteration.\n   * @returns {Array} Returns the new filtered array.\n   */\n\n\n  function arrayFilter(array, predicate) {\n    var index = -1,\n        length = array == null ? 0 : array.length,\n        resIndex = 0,\n        result = [];\n\n    while (++index < length) {\n      var value = array[index];\n\n      if (predicate(value, index, array)) {\n        result[resIndex++] = value;\n      }\n    }\n\n    return result;\n  }\n  /**\n   * A specialized version of `_.includes` for arrays without support for\n   * specifying an index to search from.\n   *\n   * @private\n   * @param {Array} [array] The array to inspect.\n   * @param {*} target The value to search for.\n   * @returns {boolean} Returns `true` if `target` is found, else `false`.\n   */\n\n\n  function arrayIncludes(array, value) {\n    var length = array == null ? 0 : array.length;\n    return !!length && baseIndexOf(array, value, 0) > -1;\n  }\n  /**\n   * This function is like `arrayIncludes` except that it accepts a comparator.\n   *\n   * @private\n   * @param {Array} [array] The array to inspect.\n   * @param {*} target The value to search for.\n   * @param {Function} comparator The comparator invoked per element.\n   * @returns {boolean} Returns `true` if `target` is found, else `false`.\n   */\n\n\n  function arrayIncludesWith(array, value, comparator) {\n    var index = -1,\n        length = array == null ? 0 : array.length;\n\n    while (++index < length) {\n      if (comparator(value, array[index])) {\n        return true;\n      }\n    }\n\n    return false;\n  }\n  /**\n   * A specialized version of `_.map` for arrays without support for iteratee\n   * shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @returns {Array} Returns the new mapped array.\n   */\n\n\n  function arrayMap(array, iteratee) {\n    var index = -1,\n        length = array == null ? 0 : array.length,\n        result = Array(length);\n\n    while (++index < length) {\n      result[index] = iteratee(array[index], index, array);\n    }\n\n    return result;\n  }\n  /**\n   * Appends the elements of `values` to `array`.\n   *\n   * @private\n   * @param {Array} array The array to modify.\n   * @param {Array} values The values to append.\n   * @returns {Array} Returns `array`.\n   */\n\n\n  function arrayPush(array, values) {\n    var index = -1,\n        length = values.length,\n        offset = array.length;\n\n    while (++index < length) {\n      array[offset + index] = values[index];\n    }\n\n    return array;\n  }\n  /**\n   * A specialized version of `_.reduce` for arrays without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @param {*} [accumulator] The initial value.\n   * @param {boolean} [initAccum] Specify using the first element of `array` as\n   *  the initial value.\n   * @returns {*} Returns the accumulated value.\n   */\n\n\n  function arrayReduce(array, iteratee, accumulator, initAccum) {\n    var index = -1,\n        length = array == null ? 0 : array.length;\n\n    if (initAccum && length) {\n      accumulator = array[++index];\n    }\n\n    while (++index < length) {\n      accumulator = iteratee(accumulator, array[index], index, array);\n    }\n\n    return accumulator;\n  }\n  /**\n   * A specialized version of `_.reduceRight` for arrays without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @param {*} [accumulator] The initial value.\n   * @param {boolean} [initAccum] Specify using the last element of `array` as\n   *  the initial value.\n   * @returns {*} Returns the accumulated value.\n   */\n\n\n  function arrayReduceRight(array, iteratee, accumulator, initAccum) {\n    var length = array == null ? 0 : array.length;\n\n    if (initAccum && length) {\n      accumulator = array[--length];\n    }\n\n    while (length--) {\n      accumulator = iteratee(accumulator, array[length], length, array);\n    }\n\n    return accumulator;\n  }\n  /**\n   * A specialized version of `_.some` for arrays without support for iteratee\n   * shorthands.\n   *\n   * @private\n   * @param {Array} [array] The array to iterate over.\n   * @param {Function} predicate The function invoked per iteration.\n   * @returns {boolean} Returns `true` if any element passes the predicate check,\n   *  else `false`.\n   */\n\n\n  function arraySome(array, predicate) {\n    var index = -1,\n        length = array == null ? 0 : array.length;\n\n    while (++index < length) {\n      if (predicate(array[index], index, array)) {\n        return true;\n      }\n    }\n\n    return false;\n  }\n  /**\n   * Gets the size of an ASCII `string`.\n   *\n   * @private\n   * @param {string} string The string inspect.\n   * @returns {number} Returns the string size.\n   */\n\n\n  var asciiSize = baseProperty('length');\n  /**\n   * Converts an ASCII `string` to an array.\n   *\n   * @private\n   * @param {string} string The string to convert.\n   * @returns {Array} Returns the converted array.\n   */\n\n  function asciiToArray(string) {\n    return string.split('');\n  }\n  /**\n   * Splits an ASCII `string` into an array of its words.\n   *\n   * @private\n   * @param {string} The string to inspect.\n   * @returns {Array} Returns the words of `string`.\n   */\n\n\n  function asciiWords(string) {\n    return string.match(reAsciiWord) || [];\n  }\n  /**\n   * The base implementation of methods like `_.findKey` and `_.findLastKey`,\n   * without support for iteratee shorthands, which iterates over `collection`\n   * using `eachFunc`.\n   *\n   * @private\n   * @param {Array|Object} collection The collection to inspect.\n   * @param {Function} predicate The function invoked per iteration.\n   * @param {Function} eachFunc The function to iterate over `collection`.\n   * @returns {*} Returns the found element or its key, else `undefined`.\n   */\n\n\n  function baseFindKey(collection, predicate, eachFunc) {\n    var result;\n    eachFunc(collection, function (value, key, collection) {\n      if (predicate(value, key, collection)) {\n        result = key;\n        return false;\n      }\n    });\n    return result;\n  }\n  /**\n   * The base implementation of `_.findIndex` and `_.findLastIndex` without\n   * support for iteratee shorthands.\n   *\n   * @private\n   * @param {Array} array The array to inspect.\n   * @param {Function} predicate The function invoked per iteration.\n   * @param {number} fromIndex The index to search from.\n   * @param {boolean} [fromRight] Specify iterating from right to left.\n   * @returns {number} Returns the index of the matched value, else `-1`.\n   */\n\n\n  function baseFindIndex(array, predicate, fromIndex, fromRight) {\n    var length = array.length,\n        index = fromIndex + (fromRight ? 1 : -1);\n\n    while (fromRight ? index-- : ++index < length) {\n      if (predicate(array[index], index, array)) {\n        return index;\n      }\n    }\n\n    return -1;\n  }\n  /**\n   * The base implementation of `_.indexOf` without `fromIndex` bounds checks.\n   *\n   * @private\n   * @param {Array} array The array to inspect.\n   * @param {*} value The value to search for.\n   * @param {number} fromIndex The index to search from.\n   * @returns {number} Returns the index of the matched value, else `-1`.\n   */\n\n\n  function baseIndexOf(array, value, fromIndex) {\n    return value === value ? strictIndexOf(array, value, fromIndex) : baseFindIndex(array, baseIsNaN, fromIndex);\n  }\n  /**\n   * This function is like `baseIndexOf` except that it accepts a comparator.\n   *\n   * @private\n   * @param {Array} array The array to inspect.\n   * @param {*} value The value to search for.\n   * @param {number} fromIndex The index to search from.\n   * @param {Function} comparator The comparator invoked per element.\n   * @returns {number} Returns the index of the matched value, else `-1`.\n   */\n\n\n  function baseIndexOfWith(array, value, fromIndex, comparator) {\n    var index = fromIndex - 1,\n        length = array.length;\n\n    while (++index < length) {\n      if (comparator(array[index], value)) {\n        return index;\n      }\n    }\n\n    return -1;\n  }\n  /**\n   * The base implementation of `_.isNaN` without support for number objects.\n   *\n   * @private\n   * @param {*} value The value to check.\n   * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n   */\n\n\n  function baseIsNaN(value) {\n    return value !== value;\n  }\n  /**\n   * The base implementation of `_.mean` and `_.meanBy` without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} array The array to iterate over.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @returns {number} Returns the mean.\n   */\n\n\n  function baseMean(array, iteratee) {\n    var length = array == null ? 0 : array.length;\n    return length ? baseSum(array, iteratee) / length : NAN;\n  }\n  /**\n   * The base implementation of `_.property` without support for deep paths.\n   *\n   * @private\n   * @param {string} key The key of the property to get.\n   * @returns {Function} Returns the new accessor function.\n   */\n\n\n  function baseProperty(key) {\n    return function (object) {\n      return object == null ? undefined : object[key];\n    };\n  }\n  /**\n   * The base implementation of `_.propertyOf` without support for deep paths.\n   *\n   * @private\n   * @param {Object} object The object to query.\n   * @returns {Function} Returns the new accessor function.\n   */\n\n\n  function basePropertyOf(object) {\n    return function (key) {\n      return object == null ? undefined : object[key];\n    };\n  }\n  /**\n   * The base implementation of `_.reduce` and `_.reduceRight`, without support\n   * for iteratee shorthands, which iterates over `collection` using `eachFunc`.\n   *\n   * @private\n   * @param {Array|Object} collection The collection to iterate over.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @param {*} accumulator The initial value.\n   * @param {boolean} initAccum Specify using the first or last element of\n   *  `collection` as the initial value.\n   * @param {Function} eachFunc The function to iterate over `collection`.\n   * @returns {*} Returns the accumulated value.\n   */\n\n\n  function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) {\n    eachFunc(collection, function (value, index, collection) {\n      accumulator = initAccum ? (initAccum = false, value) : iteratee(accumulator, value, index, collection);\n    });\n    return accumulator;\n  }\n  /**\n   * The base implementation of `_.sortBy` which uses `comparer` to define the\n   * sort order of `array` and replaces criteria objects with their corresponding\n   * values.\n   *\n   * @private\n   * @param {Array} array The array to sort.\n   * @param {Function} comparer The function to define sort order.\n   * @returns {Array} Returns `array`.\n   */\n\n\n  function baseSortBy(array, comparer) {\n    var length = array.length;\n    array.sort(comparer);\n\n    while (length--) {\n      array[length] = array[length].value;\n    }\n\n    return array;\n  }\n  /**\n   * The base implementation of `_.sum` and `_.sumBy` without support for\n   * iteratee shorthands.\n   *\n   * @private\n   * @param {Array} array The array to iterate over.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @returns {number} Returns the sum.\n   */\n\n\n  function baseSum(array, iteratee) {\n    var result,\n        index = -1,\n        length = array.length;\n\n    while (++index < length) {\n      var current = iteratee(array[index]);\n\n      if (current !== undefined) {\n        result = result === undefined ? current : result + current;\n      }\n    }\n\n    return result;\n  }\n  /**\n   * The base implementation of `_.times` without support for iteratee shorthands\n   * or max array length checks.\n   *\n   * @private\n   * @param {number} n The number of times to invoke `iteratee`.\n   * @param {Function} iteratee The function invoked per iteration.\n   * @returns {Array} Returns the array of results.\n   */\n\n\n  function baseTimes(n, iteratee) {\n    var index = -1,\n        result = Array(n);\n\n    while (++index < n) {\n      result[index] = iteratee(index);\n    }\n\n    return result;\n  }\n  /**\n   * The base implementation of `_.toPairs` and `_.toPairsIn` which creates an array\n   * of key-value pairs for `object` corresponding to the property names of `props`.\n   *\n   * @private\n   * @param {Object} object The object to query.\n   * @param {Array} props The property names to get values for.\n   * @returns {Object} Returns the key-value pairs.\n   */\n\n\n  function baseToPairs(object, props) {\n    return arrayMap(props, function (key) {\n      return [key, object[key]];\n    });\n  }\n  /**\n   * The base implementation of `_.unary` without support for storing metadata.\n   *\n   * @private\n   * @param {Function} func The function to cap arguments for.\n   * @returns {Function} Returns the new capped function.\n   */\n\n\n  function baseUnary(func) {\n    return function (value) {\n      return func(value);\n    };\n  }\n  /**\n   * The base implementation of `_.values` and `_.valuesIn` which creates an\n   * array of `object` property values corresponding to the property names\n   * of `props`.\n   *\n   * @private\n   * @param {Object} object The object to query.\n   * @param {Array} props The property names to get values for.\n   * @returns {Object} Returns the array of property values.\n   */\n\n\n  function baseValues(object, props) {\n    return arrayMap(props, function (key) {\n      return object[key];\n    });\n  }\n  /**\n   * Checks if a `cache` value for `key` exists.\n   *\n   * @private\n   * @param {Object} cache The cache to query.\n   * @param {string} key The key of the entry to check.\n   * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n   */\n\n\n  function cacheHas(cache, key) {\n    return cache.has(key);\n  }\n  /**\n   * Used by `_.trim` and `_.trimStart` to get the index of the first string symbol\n   * that is not found in the character symbols.\n   *\n   * @private\n   * @param {Array} strSymbols The string symbols to inspect.\n   * @param {Array} chrSymbols The character symbols to find.\n   * @returns {number} Returns the index of the first unmatched string symbol.\n   */\n\n\n  function charsStartIndex(strSymbols, chrSymbols) {\n    var index = -1,\n        length = strSymbols.length;\n\n    while (++index < length && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {}\n\n    return index;\n  }\n  /**\n   * Used by `_.trim` and `_.trimEnd` to get the index of the last string symbol\n   * that is not found in the character symbols.\n   *\n   * @private\n   * @param {Array} strSymbols The string symbols to inspect.\n   * @param {Array} chrSymbols The character symbols to find.\n   * @returns {number} Returns the index of the last unmatched string symbol.\n   */\n\n\n  function charsEndIndex(strSymbols, chrSymbols) {\n    var index = strSymbols.length;\n\n    while (index-- && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {}\n\n    return index;\n  }\n  /**\n   * Gets the number of `placeholder` occurrences in `array`.\n   *\n   * @private\n   * @param {Array} array The array to inspect.\n   * @param {*} placeholder The placeholder to search for.\n   * @returns {number} Returns the placeholder count.\n   */\n\n\n  function countHolders(array, placeholder) {\n    var length = array.length,\n        result = 0;\n\n    while (length--) {\n      if (array[length] === placeholder) {\n        ++result;\n      }\n    }\n\n    return result;\n  }\n  /**\n   * Used by `_.deburr` to convert Latin-1 Supplement and Latin Extended-A\n   * letters to basic Latin letters.\n   *\n   * @private\n   * @param {string} letter The matched letter to deburr.\n   * @returns {string} Returns the deburred letter.\n   */\n\n\n  var deburrLetter = basePropertyOf(deburredLetters);\n  /**\n   * Used by `_.escape` to convert characters to HTML entities.\n   *\n   * @private\n   * @param {string} chr The matched character to escape.\n   * @returns {string} Returns the escaped character.\n   */\n\n  var escapeHtmlChar = basePropertyOf(htmlEscapes);\n  /**\n   * Used by `_.template` to escape characters for inclusion in compiled string literals.\n   *\n   * @private\n   * @param {string} chr The matched character to escape.\n   * @returns {string} Returns the escaped character.\n   */\n\n  function escapeStringChar(chr) {\n    return '\\\\' + stringEscapes[chr];\n  }\n  /**\n   * Gets the value at `key` of `object`.\n   *\n   * @private\n   * @param {Object} [object] The object to query.\n   * @param {string} key The key of the property to get.\n   * @returns {*} Returns the property value.\n   */\n\n\n  function getValue(object, key) {\n    return object == null ? undefined : object[key];\n  }\n  /**\n   * Checks if `string` contains Unicode symbols.\n   *\n   * @private\n   * @param {string} string The string to inspect.\n   * @returns {boolean} Returns `true` if a symbol is found, else `false`.\n   */\n\n\n  function hasUnicode(string) {\n    return reHasUnicode.test(string);\n  }\n  /**\n   * Checks if `string` contains a word composed of Unicode symbols.\n   *\n   * @private\n   * @param {string} string The string to inspect.\n   * @returns {boolean} Returns `true` if a word is found, else `false`.\n   */\n\n\n  function hasUnicodeWord(string) {\n    return reHasUnicodeWord.test(string);\n  }\n  /**\n   * Converts `iterator` to an array.\n   *\n   * @private\n   * @param {Object} iterator The iterator to convert.\n   * @returns {Array} Returns the converted array.\n   */\n\n\n  function iteratorToArray(iterator) {\n    var data,\n        result = [];\n\n    while (!(data = iterator.next()).done) {\n      result.push(data.value);\n    }\n\n    return result;\n  }\n  /**\n   * Converts `map` to its key-value pairs.\n   *\n   * @private\n   * @param {Object} map The map to convert.\n   * @returns {Array} Returns the key-value pairs.\n   */\n\n\n  function mapToArray(map) {\n    var index = -1,\n        result = Array(map.size);\n    map.forEach(function (value, key) {\n      result[++index] = [key, value];\n    });\n    return result;\n  }\n  /**\n   * Creates a unary function that invokes `func` with its argument transformed.\n   *\n   * @private\n   * @param {Function} func The function to wrap.\n   * @param {Function} transform The argument transform.\n   * @returns {Function} Returns the new function.\n   */\n\n\n  function overArg(func, transform) {\n    return function (arg) {\n      return func(transform(arg));\n    };\n  }\n  /**\n   * Replaces all `placeholder` elements in `array` with an internal placeholder\n   * and returns an array of their indexes.\n   *\n   * @private\n   * @param {Array} array The array to modify.\n   * @param {*} placeholder The placeholder to replace.\n   * @returns {Array} Returns the new array of placeholder indexes.\n   */\n\n\n  function replaceHolders(array, placeholder) {\n    var index = -1,\n        length = array.length,\n        resIndex = 0,\n        result = [];\n\n    while (++index < length) {\n      var value = array[index];\n\n      if (value === placeholder || value === PLACEHOLDER) {\n        array[index] = PLACEHOLDER;\n        result[resIndex++] = index;\n      }\n    }\n\n    return result;\n  }\n  /**\n   * Converts `set` to an array of its values.\n   *\n   * @private\n   * @param {Object} set The set to convert.\n   * @returns {Array} Returns the values.\n   */\n\n\n  function setToArray(set) {\n    var index = -1,\n        result = Array(set.size);\n    set.forEach(function (value) {\n      result[++index] = value;\n    });\n    return result;\n  }\n  /**\n   * Converts `set` to its value-value pairs.\n   *\n   * @private\n   * @param {Object} set The set to convert.\n   * @returns {Array} Returns the value-value pairs.\n   */\n\n\n  function setToPairs(set) {\n    var index = -1,\n        result = Array(set.size);\n    set.forEach(function (value) {\n      result[++index] = [value, value];\n    });\n    return result;\n  }\n  /**\n   * A specialized version of `_.indexOf` which performs strict equality\n   * comparisons of values, i.e. `===`.\n   *\n   * @private\n   * @param {Array} array The array to inspect.\n   * @param {*} value The value to search for.\n   * @param {number} fromIndex The index to search from.\n   * @returns {number} Returns the index of the matched value, else `-1`.\n   */\n\n\n  function strictIndexOf(array, value, fromIndex) {\n    var index = fromIndex - 1,\n        length = array.length;\n\n    while (++index < length) {\n      if (array[index] === value) {\n        return index;\n      }\n    }\n\n    return -1;\n  }\n  /**\n   * A specialized version of `_.lastIndexOf` which performs strict equality\n   * comparisons of values, i.e. `===`.\n   *\n   * @private\n   * @param {Array} array The array to inspect.\n   * @param {*} value The value to search for.\n   * @param {number} fromIndex The index to search from.\n   * @returns {number} Returns the index of the matched value, else `-1`.\n   */\n\n\n  function strictLastIndexOf(array, value, fromIndex) {\n    var index = fromIndex + 1;\n\n    while (index--) {\n      if (array[index] === value) {\n        return index;\n      }\n    }\n\n    return index;\n  }\n  /**\n   * Gets the number of symbols in `string`.\n   *\n   * @private\n   * @param {string} string The string to inspect.\n   * @returns {number} Returns the string size.\n   */\n\n\n  function stringSize(string) {\n    return hasUnicode(string) ? unicodeSize(string) : asciiSize(string);\n  }\n  /**\n   * Converts `string` to an array.\n   *\n   * @private\n   * @param {string} string The string to convert.\n   * @returns {Array} Returns the converted array.\n   */\n\n\n  function stringToArray(string) {\n    return hasUnicode(string) ? unicodeToArray(string) : asciiToArray(string);\n  }\n  /**\n   * Used by `_.unescape` to convert HTML entities to characters.\n   *\n   * @private\n   * @param {string} chr The matched character to unescape.\n   * @returns {string} Returns the unescaped character.\n   */\n\n\n  var unescapeHtmlChar = basePropertyOf(htmlUnescapes);\n  /**\n   * Gets the size of a Unicode `string`.\n   *\n   * @private\n   * @param {string} string The string inspect.\n   * @returns {number} Returns the string size.\n   */\n\n  function unicodeSize(string) {\n    var result = reUnicode.lastIndex = 0;\n\n    while (reUnicode.test(string)) {\n      ++result;\n    }\n\n    return result;\n  }\n  /**\n   * Converts a Unicode `string` to an array.\n   *\n   * @private\n   * @param {string} string The string to convert.\n   * @returns {Array} Returns the converted array.\n   */\n\n\n  function unicodeToArray(string) {\n    return string.match(reUnicode) || [];\n  }\n  /**\n   * Splits a Unicode `string` into an array of its words.\n   *\n   * @private\n   * @param {string} The string to inspect.\n   * @returns {Array} Returns the words of `string`.\n   */\n\n\n  function unicodeWords(string) {\n    return string.match(reUnicodeWord) || [];\n  }\n  /*--------------------------------------------------------------------------*/\n\n  /**\n   * Create a new pristine `lodash` function using the `context` object.\n   *\n   * @static\n   * @memberOf _\n   * @since 1.1.0\n   * @category Util\n   * @param {Object} [context=root] The context object.\n   * @returns {Function} Returns a new `lodash` function.\n   * @example\n   *\n   * _.mixin({ 'foo': _.constant('foo') });\n   *\n   * var lodash = _.runInContext();\n   * lodash.mixin({ 'bar': lodash.constant('bar') });\n   *\n   * _.isFunction(_.foo);\n   * // => true\n   * _.isFunction(_.bar);\n   * // => false\n   *\n   * lodash.isFunction(lodash.foo);\n   * // => false\n   * lodash.isFunction(lodash.bar);\n   * // => true\n   *\n   * // Create a suped-up `defer` in Node.js.\n   * var defer = _.runInContext({ 'setTimeout': setImmediate }).defer;\n   */\n\n\n  var runInContext = function runInContext(context) {\n    context = context == null ? root : _.defaults(root.Object(), context, _.pick(root, contextProps));\n    /** Built-in constructor references. */\n\n    var Array = context.Array,\n        Date = context.Date,\n        Error = context.Error,\n        Function = context.Function,\n        Math = context.Math,\n        Object = context.Object,\n        RegExp = context.RegExp,\n        String = context.String,\n        TypeError = context.TypeError;\n    /** Used for built-in method references. */\n\n    var arrayProto = Array.prototype,\n        funcProto = Function.prototype,\n        objectProto = Object.prototype;\n    /** Used to detect overreaching core-js shims. */\n\n    var coreJsData = context['__core-js_shared__'];\n    /** Used to resolve the decompiled source of functions. */\n\n    var funcToString = funcProto.toString;\n    /** Used to check objects for own properties. */\n\n    var hasOwnProperty = objectProto.hasOwnProperty;\n    /** Used to generate unique IDs. */\n\n    var idCounter = 0;\n    /** Used to detect methods masquerading as native. */\n\n    var maskSrcKey = function () {\n      var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n      return uid ? 'Symbol(src)_1.' + uid : '';\n    }();\n    /**\n     * Used to resolve the\n     * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n     * of values.\n     */\n\n\n    var nativeObjectToString = objectProto.toString;\n    /** Used to infer the `Object` constructor. */\n\n    var objectCtorString = funcToString.call(Object);\n    /** Used to restore the original `_` reference in `_.noConflict`. */\n\n    var oldDash = root._;\n    /** Used to detect if a method is native. */\n\n    var reIsNative = RegExp('^' + funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&').replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$');\n    /** Built-in value references. */\n\n    var Buffer = moduleExports ? context.Buffer : undefined,\n        _Symbol = context.Symbol,\n        Uint8Array = context.Uint8Array,\n        allocUnsafe = Buffer ? Buffer.allocUnsafe : undefined,\n        getPrototype = overArg(Object.getPrototypeOf, Object),\n        objectCreate = Object.create,\n        propertyIsEnumerable = objectProto.propertyIsEnumerable,\n        splice = arrayProto.splice,\n        spreadableSymbol = _Symbol ? _Symbol.isConcatSpreadable : undefined,\n        symIterator = _Symbol ? _Symbol.iterator : undefined,\n        symToStringTag = _Symbol ? _Symbol.toStringTag : undefined;\n\n    var defineProperty = function () {\n      try {\n        var func = getNative(Object, 'defineProperty');\n        func({}, '', {});\n        return func;\n      } catch (e) {}\n    }();\n    /** Mocked built-ins. */\n\n\n    var ctxClearTimeout = context.clearTimeout !== root.clearTimeout && context.clearTimeout,\n        ctxNow = Date && Date.now !== root.Date.now && Date.now,\n        ctxSetTimeout = context.setTimeout !== root.setTimeout && context.setTimeout;\n    /* Built-in method references for those with the same name as other `lodash` methods. */\n\n    var nativeCeil = Math.ceil,\n        nativeFloor = Math.floor,\n        nativeGetSymbols = Object.getOwnPropertySymbols,\n        nativeIsBuffer = Buffer ? Buffer.isBuffer : undefined,\n        nativeIsFinite = context.isFinite,\n        nativeJoin = arrayProto.join,\n        nativeKeys = overArg(Object.keys, Object),\n        nativeMax = Math.max,\n        nativeMin = Math.min,\n        nativeNow = Date.now,\n        nativeParseInt = context.parseInt,\n        nativeRandom = Math.random,\n        nativeReverse = arrayProto.reverse;\n    /* Built-in method references that are verified to be native. */\n\n    var DataView = getNative(context, 'DataView'),\n        Map = getNative(context, 'Map'),\n        Promise = getNative(context, 'Promise'),\n        Set = getNative(context, 'Set'),\n        WeakMap = getNative(context, 'WeakMap'),\n        nativeCreate = getNative(Object, 'create');\n    /** Used to store function metadata. */\n\n    var metaMap = WeakMap && new WeakMap();\n    /** Used to lookup unminified function names. */\n\n    var realNames = {};\n    /** Used to detect maps, sets, and weakmaps. */\n\n    var dataViewCtorString = toSource(DataView),\n        mapCtorString = toSource(Map),\n        promiseCtorString = toSource(Promise),\n        setCtorString = toSource(Set),\n        weakMapCtorString = toSource(WeakMap);\n    /** Used to convert symbols to primitives and strings. */\n\n    var symbolProto = _Symbol ? _Symbol.prototype : undefined,\n        symbolValueOf = symbolProto ? symbolProto.valueOf : undefined,\n        symbolToString = symbolProto ? symbolProto.toString : undefined;\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates a `lodash` object which wraps `value` to enable implicit method\n     * chain sequences. Methods that operate on and return arrays, collections,\n     * and functions can be chained together. Methods that retrieve a single value\n     * or may return a primitive value will automatically end the chain sequence\n     * and return the unwrapped value. Otherwise, the value must be unwrapped\n     * with `_#value`.\n     *\n     * Explicit chain sequences, which must be unwrapped with `_#value`, may be\n     * enabled using `_.chain`.\n     *\n     * The execution of chained methods is lazy, that is, it's deferred until\n     * `_#value` is implicitly or explicitly called.\n     *\n     * Lazy evaluation allows several methods to support shortcut fusion.\n     * Shortcut fusion is an optimization to merge iteratee calls; this avoids\n     * the creation of intermediate arrays and can greatly reduce the number of\n     * iteratee executions. Sections of a chain sequence qualify for shortcut\n     * fusion if the section is applied to an array and iteratees accept only\n     * one argument. The heuristic for whether a section qualifies for shortcut\n     * fusion is subject to change.\n     *\n     * Chaining is supported in custom builds as long as the `_#value` method is\n     * directly or indirectly included in the build.\n     *\n     * In addition to lodash methods, wrappers have `Array` and `String` methods.\n     *\n     * The wrapper `Array` methods are:\n     * `concat`, `join`, `pop`, `push`, `shift`, `sort`, `splice`, and `unshift`\n     *\n     * The wrapper `String` methods are:\n     * `replace` and `split`\n     *\n     * The wrapper methods that support shortcut fusion are:\n     * `at`, `compact`, `drop`, `dropRight`, `dropWhile`, `filter`, `find`,\n     * `findLast`, `head`, `initial`, `last`, `map`, `reject`, `reverse`, `slice`,\n     * `tail`, `take`, `takeRight`, `takeRightWhile`, `takeWhile`, and `toArray`\n     *\n     * The chainable wrapper methods are:\n     * `after`, `ary`, `assign`, `assignIn`, `assignInWith`, `assignWith`, `at`,\n     * `before`, `bind`, `bindAll`, `bindKey`, `castArray`, `chain`, `chunk`,\n     * `commit`, `compact`, `concat`, `conforms`, `constant`, `countBy`, `create`,\n     * `curry`, `debounce`, `defaults`, `defaultsDeep`, `defer`, `delay`,\n     * `difference`, `differenceBy`, `differenceWith`, `drop`, `dropRight`,\n     * `dropRightWhile`, `dropWhile`, `extend`, `extendWith`, `fill`, `filter`,\n     * `flatMap`, `flatMapDeep`, `flatMapDepth`, `flatten`, `flattenDeep`,\n     * `flattenDepth`, `flip`, `flow`, `flowRight`, `fromPairs`, `functions`,\n     * `functionsIn`, `groupBy`, `initial`, `intersection`, `intersectionBy`,\n     * `intersectionWith`, `invert`, `invertBy`, `invokeMap`, `iteratee`, `keyBy`,\n     * `keys`, `keysIn`, `map`, `mapKeys`, `mapValues`, `matches`, `matchesProperty`,\n     * `memoize`, `merge`, `mergeWith`, `method`, `methodOf`, `mixin`, `negate`,\n     * `nthArg`, `omit`, `omitBy`, `once`, `orderBy`, `over`, `overArgs`,\n     * `overEvery`, `overSome`, `partial`, `partialRight`, `partition`, `pick`,\n     * `pickBy`, `plant`, `property`, `propertyOf`, `pull`, `pullAll`, `pullAllBy`,\n     * `pullAllWith`, `pullAt`, `push`, `range`, `rangeRight`, `rearg`, `reject`,\n     * `remove`, `rest`, `reverse`, `sampleSize`, `set`, `setWith`, `shuffle`,\n     * `slice`, `sort`, `sortBy`, `splice`, `spread`, `tail`, `take`, `takeRight`,\n     * `takeRightWhile`, `takeWhile`, `tap`, `throttle`, `thru`, `toArray`,\n     * `toPairs`, `toPairsIn`, `toPath`, `toPlainObject`, `transform`, `unary`,\n     * `union`, `unionBy`, `unionWith`, `uniq`, `uniqBy`, `uniqWith`, `unset`,\n     * `unshift`, `unzip`, `unzipWith`, `update`, `updateWith`, `values`,\n     * `valuesIn`, `without`, `wrap`, `xor`, `xorBy`, `xorWith`, `zip`,\n     * `zipObject`, `zipObjectDeep`, and `zipWith`\n     *\n     * The wrapper methods that are **not** chainable by default are:\n     * `add`, `attempt`, `camelCase`, `capitalize`, `ceil`, `clamp`, `clone`,\n     * `cloneDeep`, `cloneDeepWith`, `cloneWith`, `conformsTo`, `deburr`,\n     * `defaultTo`, `divide`, `each`, `eachRight`, `endsWith`, `eq`, `escape`,\n     * `escapeRegExp`, `every`, `find`, `findIndex`, `findKey`, `findLast`,\n     * `findLastIndex`, `findLastKey`, `first`, `floor`, `forEach`, `forEachRight`,\n     * `forIn`, `forInRight`, `forOwn`, `forOwnRight`, `get`, `gt`, `gte`, `has`,\n     * `hasIn`, `head`, `identity`, `includes`, `indexOf`, `inRange`, `invoke`,\n     * `isArguments`, `isArray`, `isArrayBuffer`, `isArrayLike`, `isArrayLikeObject`,\n     * `isBoolean`, `isBuffer`, `isDate`, `isElement`, `isEmpty`, `isEqual`,\n     * `isEqualWith`, `isError`, `isFinite`, `isFunction`, `isInteger`, `isLength`,\n     * `isMap`, `isMatch`, `isMatchWith`, `isNaN`, `isNative`, `isNil`, `isNull`,\n     * `isNumber`, `isObject`, `isObjectLike`, `isPlainObject`, `isRegExp`,\n     * `isSafeInteger`, `isSet`, `isString`, `isUndefined`, `isTypedArray`,\n     * `isWeakMap`, `isWeakSet`, `join`, `kebabCase`, `last`, `lastIndexOf`,\n     * `lowerCase`, `lowerFirst`, `lt`, `lte`, `max`, `maxBy`, `mean`, `meanBy`,\n     * `min`, `minBy`, `multiply`, `noConflict`, `noop`, `now`, `nth`, `pad`,\n     * `padEnd`, `padStart`, `parseInt`, `pop`, `random`, `reduce`, `reduceRight`,\n     * `repeat`, `result`, `round`, `runInContext`, `sample`, `shift`, `size`,\n     * `snakeCase`, `some`, `sortedIndex`, `sortedIndexBy`, `sortedLastIndex`,\n     * `sortedLastIndexBy`, `startCase`, `startsWith`, `stubArray`, `stubFalse`,\n     * `stubObject`, `stubString`, `stubTrue`, `subtract`, `sum`, `sumBy`,\n     * `template`, `times`, `toFinite`, `toInteger`, `toJSON`, `toLength`,\n     * `toLower`, `toNumber`, `toSafeInteger`, `toString`, `toUpper`, `trim`,\n     * `trimEnd`, `trimStart`, `truncate`, `unescape`, `uniqueId`, `upperCase`,\n     * `upperFirst`, `value`, and `words`\n     *\n     * @name _\n     * @constructor\n     * @category Seq\n     * @param {*} value The value to wrap in a `lodash` instance.\n     * @returns {Object} Returns the new `lodash` wrapper instance.\n     * @example\n     *\n     * function square(n) {\n     *   return n * n;\n     * }\n     *\n     * var wrapped = _([1, 2, 3]);\n     *\n     * // Returns an unwrapped value.\n     * wrapped.reduce(_.add);\n     * // => 6\n     *\n     * // Returns a wrapped value.\n     * var squares = wrapped.map(square);\n     *\n     * _.isArray(squares);\n     * // => false\n     *\n     * _.isArray(squares.value());\n     * // => true\n     */\n\n    function lodash(value) {\n      if (isObjectLike(value) && !isArray(value) && !(value instanceof LazyWrapper)) {\n        if (value instanceof LodashWrapper) {\n          return value;\n        }\n\n        if (hasOwnProperty.call(value, '__wrapped__')) {\n          return wrapperClone(value);\n        }\n      }\n\n      return new LodashWrapper(value);\n    }\n    /**\n     * The base implementation of `_.create` without support for assigning\n     * properties to the created object.\n     *\n     * @private\n     * @param {Object} proto The object to inherit from.\n     * @returns {Object} Returns the new object.\n     */\n\n\n    var baseCreate = function () {\n      function object() {}\n\n      return function (proto) {\n        if (!isObject(proto)) {\n          return {};\n        }\n\n        if (objectCreate) {\n          return objectCreate(proto);\n        }\n\n        object.prototype = proto;\n        var result = new object();\n        object.prototype = undefined;\n        return result;\n      };\n    }();\n    /**\n     * The function whose prototype chain sequence wrappers inherit from.\n     *\n     * @private\n     */\n\n\n    function baseLodash() {} // No operation performed.\n\n    /**\n     * The base constructor for creating `lodash` wrapper objects.\n     *\n     * @private\n     * @param {*} value The value to wrap.\n     * @param {boolean} [chainAll] Enable explicit method chain sequences.\n     */\n\n\n    function LodashWrapper(value, chainAll) {\n      this.__wrapped__ = value;\n      this.__actions__ = [];\n      this.__chain__ = !!chainAll;\n      this.__index__ = 0;\n      this.__values__ = undefined;\n    }\n    /**\n     * By default, the template delimiters used by lodash are like those in\n     * embedded Ruby (ERB) as well as ES2015 template strings. Change the\n     * following template settings to use alternative delimiters.\n     *\n     * @static\n     * @memberOf _\n     * @type {Object}\n     */\n\n\n    lodash.templateSettings = {\n      /**\n       * Used to detect `data` property values to be HTML-escaped.\n       *\n       * @memberOf _.templateSettings\n       * @type {RegExp}\n       */\n      'escape': reEscape,\n\n      /**\n       * Used to detect code to be evaluated.\n       *\n       * @memberOf _.templateSettings\n       * @type {RegExp}\n       */\n      'evaluate': reEvaluate,\n\n      /**\n       * Used to detect `data` property values to inject.\n       *\n       * @memberOf _.templateSettings\n       * @type {RegExp}\n       */\n      'interpolate': reInterpolate,\n\n      /**\n       * Used to reference the data object in the template text.\n       *\n       * @memberOf _.templateSettings\n       * @type {string}\n       */\n      'variable': '',\n\n      /**\n       * Used to import variables into the compiled template.\n       *\n       * @memberOf _.templateSettings\n       * @type {Object}\n       */\n      'imports': {\n        /**\n         * A reference to the `lodash` function.\n         *\n         * @memberOf _.templateSettings.imports\n         * @type {Function}\n         */\n        '_': lodash\n      }\n    }; // Ensure wrappers are instances of `baseLodash`.\n\n    lodash.prototype = baseLodash.prototype;\n    lodash.prototype.constructor = lodash;\n    LodashWrapper.prototype = baseCreate(baseLodash.prototype);\n    LodashWrapper.prototype.constructor = LodashWrapper;\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates a lazy wrapper object which wraps `value` to enable lazy evaluation.\n     *\n     * @private\n     * @constructor\n     * @param {*} value The value to wrap.\n     */\n\n    function LazyWrapper(value) {\n      this.__wrapped__ = value;\n      this.__actions__ = [];\n      this.__dir__ = 1;\n      this.__filtered__ = false;\n      this.__iteratees__ = [];\n      this.__takeCount__ = MAX_ARRAY_LENGTH;\n      this.__views__ = [];\n    }\n    /**\n     * Creates a clone of the lazy wrapper object.\n     *\n     * @private\n     * @name clone\n     * @memberOf LazyWrapper\n     * @returns {Object} Returns the cloned `LazyWrapper` object.\n     */\n\n\n    function lazyClone() {\n      var result = new LazyWrapper(this.__wrapped__);\n      result.__actions__ = copyArray(this.__actions__);\n      result.__dir__ = this.__dir__;\n      result.__filtered__ = this.__filtered__;\n      result.__iteratees__ = copyArray(this.__iteratees__);\n      result.__takeCount__ = this.__takeCount__;\n      result.__views__ = copyArray(this.__views__);\n      return result;\n    }\n    /**\n     * Reverses the direction of lazy iteration.\n     *\n     * @private\n     * @name reverse\n     * @memberOf LazyWrapper\n     * @returns {Object} Returns the new reversed `LazyWrapper` object.\n     */\n\n\n    function lazyReverse() {\n      if (this.__filtered__) {\n        var result = new LazyWrapper(this);\n        result.__dir__ = -1;\n        result.__filtered__ = true;\n      } else {\n        result = this.clone();\n        result.__dir__ *= -1;\n      }\n\n      return result;\n    }\n    /**\n     * Extracts the unwrapped value from its lazy wrapper.\n     *\n     * @private\n     * @name value\n     * @memberOf LazyWrapper\n     * @returns {*} Returns the unwrapped value.\n     */\n\n\n    function lazyValue() {\n      var array = this.__wrapped__.value(),\n          dir = this.__dir__,\n          isArr = isArray(array),\n          isRight = dir < 0,\n          arrLength = isArr ? array.length : 0,\n          view = getView(0, arrLength, this.__views__),\n          start = view.start,\n          end = view.end,\n          length = end - start,\n          index = isRight ? end : start - 1,\n          iteratees = this.__iteratees__,\n          iterLength = iteratees.length,\n          resIndex = 0,\n          takeCount = nativeMin(length, this.__takeCount__);\n\n      if (!isArr || !isRight && arrLength == length && takeCount == length) {\n        return baseWrapperValue(array, this.__actions__);\n      }\n\n      var result = [];\n\n      outer: while (length-- && resIndex < takeCount) {\n        index += dir;\n        var iterIndex = -1,\n            value = array[index];\n\n        while (++iterIndex < iterLength) {\n          var data = iteratees[iterIndex],\n              iteratee = data.iteratee,\n              type = data.type,\n              computed = iteratee(value);\n\n          if (type == LAZY_MAP_FLAG) {\n            value = computed;\n          } else if (!computed) {\n            if (type == LAZY_FILTER_FLAG) {\n              continue outer;\n            } else {\n              break outer;\n            }\n          }\n        }\n\n        result[resIndex++] = value;\n      }\n\n      return result;\n    } // Ensure `LazyWrapper` is an instance of `baseLodash`.\n\n\n    LazyWrapper.prototype = baseCreate(baseLodash.prototype);\n    LazyWrapper.prototype.constructor = LazyWrapper;\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates a hash object.\n     *\n     * @private\n     * @constructor\n     * @param {Array} [entries] The key-value pairs to cache.\n     */\n\n    function Hash(entries) {\n      var index = -1,\n          length = entries == null ? 0 : entries.length;\n      this.clear();\n\n      while (++index < length) {\n        var entry = entries[index];\n        this.set(entry[0], entry[1]);\n      }\n    }\n    /**\n     * Removes all key-value entries from the hash.\n     *\n     * @private\n     * @name clear\n     * @memberOf Hash\n     */\n\n\n    function hashClear() {\n      this.__data__ = nativeCreate ? nativeCreate(null) : {};\n      this.size = 0;\n    }\n    /**\n     * Removes `key` and its value from the hash.\n     *\n     * @private\n     * @name delete\n     * @memberOf Hash\n     * @param {Object} hash The hash to modify.\n     * @param {string} key The key of the value to remove.\n     * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n     */\n\n\n    function hashDelete(key) {\n      var result = this.has(key) && delete this.__data__[key];\n      this.size -= result ? 1 : 0;\n      return result;\n    }\n    /**\n     * Gets the hash value for `key`.\n     *\n     * @private\n     * @name get\n     * @memberOf Hash\n     * @param {string} key The key of the value to get.\n     * @returns {*} Returns the entry value.\n     */\n\n\n    function hashGet(key) {\n      var data = this.__data__;\n\n      if (nativeCreate) {\n        var result = data[key];\n        return result === HASH_UNDEFINED ? undefined : result;\n      }\n\n      return hasOwnProperty.call(data, key) ? data[key] : undefined;\n    }\n    /**\n     * Checks if a hash value for `key` exists.\n     *\n     * @private\n     * @name has\n     * @memberOf Hash\n     * @param {string} key The key of the entry to check.\n     * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n     */\n\n\n    function hashHas(key) {\n      var data = this.__data__;\n      return nativeCreate ? data[key] !== undefined : hasOwnProperty.call(data, key);\n    }\n    /**\n     * Sets the hash `key` to `value`.\n     *\n     * @private\n     * @name set\n     * @memberOf Hash\n     * @param {string} key The key of the value to set.\n     * @param {*} value The value to set.\n     * @returns {Object} Returns the hash instance.\n     */\n\n\n    function hashSet(key, value) {\n      var data = this.__data__;\n      this.size += this.has(key) ? 0 : 1;\n      data[key] = nativeCreate && value === undefined ? HASH_UNDEFINED : value;\n      return this;\n    } // Add methods to `Hash`.\n\n\n    Hash.prototype.clear = hashClear;\n    Hash.prototype['delete'] = hashDelete;\n    Hash.prototype.get = hashGet;\n    Hash.prototype.has = hashHas;\n    Hash.prototype.set = hashSet;\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates an list cache object.\n     *\n     * @private\n     * @constructor\n     * @param {Array} [entries] The key-value pairs to cache.\n     */\n\n    function ListCache(entries) {\n      var index = -1,\n          length = entries == null ? 0 : entries.length;\n      this.clear();\n\n      while (++index < length) {\n        var entry = entries[index];\n        this.set(entry[0], entry[1]);\n      }\n    }\n    /**\n     * Removes all key-value entries from the list cache.\n     *\n     * @private\n     * @name clear\n     * @memberOf ListCache\n     */\n\n\n    function listCacheClear() {\n      this.__data__ = [];\n      this.size = 0;\n    }\n    /**\n     * Removes `key` and its value from the list cache.\n     *\n     * @private\n     * @name delete\n     * @memberOf ListCache\n     * @param {string} key The key of the value to remove.\n     * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n     */\n\n\n    function listCacheDelete(key) {\n      var data = this.__data__,\n          index = assocIndexOf(data, key);\n\n      if (index < 0) {\n        return false;\n      }\n\n      var lastIndex = data.length - 1;\n\n      if (index == lastIndex) {\n        data.pop();\n      } else {\n        splice.call(data, index, 1);\n      }\n\n      --this.size;\n      return true;\n    }\n    /**\n     * Gets the list cache value for `key`.\n     *\n     * @private\n     * @name get\n     * @memberOf ListCache\n     * @param {string} key The key of the value to get.\n     * @returns {*} Returns the entry value.\n     */\n\n\n    function listCacheGet(key) {\n      var data = this.__data__,\n          index = assocIndexOf(data, key);\n      return index < 0 ? undefined : data[index][1];\n    }\n    /**\n     * Checks if a list cache value for `key` exists.\n     *\n     * @private\n     * @name has\n     * @memberOf ListCache\n     * @param {string} key The key of the entry to check.\n     * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n     */\n\n\n    function listCacheHas(key) {\n      return assocIndexOf(this.__data__, key) > -1;\n    }\n    /**\n     * Sets the list cache `key` to `value`.\n     *\n     * @private\n     * @name set\n     * @memberOf ListCache\n     * @param {string} key The key of the value to set.\n     * @param {*} value The value to set.\n     * @returns {Object} Returns the list cache instance.\n     */\n\n\n    function listCacheSet(key, value) {\n      var data = this.__data__,\n          index = assocIndexOf(data, key);\n\n      if (index < 0) {\n        ++this.size;\n        data.push([key, value]);\n      } else {\n        data[index][1] = value;\n      }\n\n      return this;\n    } // Add methods to `ListCache`.\n\n\n    ListCache.prototype.clear = listCacheClear;\n    ListCache.prototype['delete'] = listCacheDelete;\n    ListCache.prototype.get = listCacheGet;\n    ListCache.prototype.has = listCacheHas;\n    ListCache.prototype.set = listCacheSet;\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates a map cache object to store key-value pairs.\n     *\n     * @private\n     * @constructor\n     * @param {Array} [entries] The key-value pairs to cache.\n     */\n\n    function MapCache(entries) {\n      var index = -1,\n          length = entries == null ? 0 : entries.length;\n      this.clear();\n\n      while (++index < length) {\n        var entry = entries[index];\n        this.set(entry[0], entry[1]);\n      }\n    }\n    /**\n     * Removes all key-value entries from the map.\n     *\n     * @private\n     * @name clear\n     * @memberOf MapCache\n     */\n\n\n    function mapCacheClear() {\n      this.size = 0;\n      this.__data__ = {\n        'hash': new Hash(),\n        'map': new (Map || ListCache)(),\n        'string': new Hash()\n      };\n    }\n    /**\n     * Removes `key` and its value from the map.\n     *\n     * @private\n     * @name delete\n     * @memberOf MapCache\n     * @param {string} key The key of the value to remove.\n     * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n     */\n\n\n    function mapCacheDelete(key) {\n      var result = getMapData(this, key)['delete'](key);\n      this.size -= result ? 1 : 0;\n      return result;\n    }\n    /**\n     * Gets the map value for `key`.\n     *\n     * @private\n     * @name get\n     * @memberOf MapCache\n     * @param {string} key The key of the value to get.\n     * @returns {*} Returns the entry value.\n     */\n\n\n    function mapCacheGet(key) {\n      return getMapData(this, key).get(key);\n    }\n    /**\n     * Checks if a map value for `key` exists.\n     *\n     * @private\n     * @name has\n     * @memberOf MapCache\n     * @param {string} key The key of the entry to check.\n     * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n     */\n\n\n    function mapCacheHas(key) {\n      return getMapData(this, key).has(key);\n    }\n    /**\n     * Sets the map `key` to `value`.\n     *\n     * @private\n     * @name set\n     * @memberOf MapCache\n     * @param {string} key The key of the value to set.\n     * @param {*} value The value to set.\n     * @returns {Object} Returns the map cache instance.\n     */\n\n\n    function mapCacheSet(key, value) {\n      var data = getMapData(this, key),\n          size = data.size;\n      data.set(key, value);\n      this.size += data.size == size ? 0 : 1;\n      return this;\n    } // Add methods to `MapCache`.\n\n\n    MapCache.prototype.clear = mapCacheClear;\n    MapCache.prototype['delete'] = mapCacheDelete;\n    MapCache.prototype.get = mapCacheGet;\n    MapCache.prototype.has = mapCacheHas;\n    MapCache.prototype.set = mapCacheSet;\n    /*------------------------------------------------------------------------*/\n\n    /**\n     *\n     * Creates an array cache object to store unique values.\n     *\n     * @private\n     * @constructor\n     * @param {Array} [values] The values to cache.\n     */\n\n    function SetCache(values) {\n      var index = -1,\n          length = values == null ? 0 : values.length;\n      this.__data__ = new MapCache();\n\n      while (++index < length) {\n        this.add(values[index]);\n      }\n    }\n    /**\n     * Adds `value` to the array cache.\n     *\n     * @private\n     * @name add\n     * @memberOf SetCache\n     * @alias push\n     * @param {*} value The value to cache.\n     * @returns {Object} Returns the cache instance.\n     */\n\n\n    function setCacheAdd(value) {\n      this.__data__.set(value, HASH_UNDEFINED);\n\n      return this;\n    }\n    /**\n     * Checks if `value` is in the array cache.\n     *\n     * @private\n     * @name has\n     * @memberOf SetCache\n     * @param {*} value The value to search for.\n     * @returns {number} Returns `true` if `value` is found, else `false`.\n     */\n\n\n    function setCacheHas(value) {\n      return this.__data__.has(value);\n    } // Add methods to `SetCache`.\n\n\n    SetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\n    SetCache.prototype.has = setCacheHas;\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates a stack cache object to store key-value pairs.\n     *\n     * @private\n     * @constructor\n     * @param {Array} [entries] The key-value pairs to cache.\n     */\n\n    function Stack(entries) {\n      var data = this.__data__ = new ListCache(entries);\n      this.size = data.size;\n    }\n    /**\n     * Removes all key-value entries from the stack.\n     *\n     * @private\n     * @name clear\n     * @memberOf Stack\n     */\n\n\n    function stackClear() {\n      this.__data__ = new ListCache();\n      this.size = 0;\n    }\n    /**\n     * Removes `key` and its value from the stack.\n     *\n     * @private\n     * @name delete\n     * @memberOf Stack\n     * @param {string} key The key of the value to remove.\n     * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n     */\n\n\n    function stackDelete(key) {\n      var data = this.__data__,\n          result = data['delete'](key);\n      this.size = data.size;\n      return result;\n    }\n    /**\n     * Gets the stack value for `key`.\n     *\n     * @private\n     * @name get\n     * @memberOf Stack\n     * @param {string} key The key of the value to get.\n     * @returns {*} Returns the entry value.\n     */\n\n\n    function stackGet(key) {\n      return this.__data__.get(key);\n    }\n    /**\n     * Checks if a stack value for `key` exists.\n     *\n     * @private\n     * @name has\n     * @memberOf Stack\n     * @param {string} key The key of the entry to check.\n     * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n     */\n\n\n    function stackHas(key) {\n      return this.__data__.has(key);\n    }\n    /**\n     * Sets the stack `key` to `value`.\n     *\n     * @private\n     * @name set\n     * @memberOf Stack\n     * @param {string} key The key of the value to set.\n     * @param {*} value The value to set.\n     * @returns {Object} Returns the stack cache instance.\n     */\n\n\n    function stackSet(key, value) {\n      var data = this.__data__;\n\n      if (data instanceof ListCache) {\n        var pairs = data.__data__;\n\n        if (!Map || pairs.length < LARGE_ARRAY_SIZE - 1) {\n          pairs.push([key, value]);\n          this.size = ++data.size;\n          return this;\n        }\n\n        data = this.__data__ = new MapCache(pairs);\n      }\n\n      data.set(key, value);\n      this.size = data.size;\n      return this;\n    } // Add methods to `Stack`.\n\n\n    Stack.prototype.clear = stackClear;\n    Stack.prototype['delete'] = stackDelete;\n    Stack.prototype.get = stackGet;\n    Stack.prototype.has = stackHas;\n    Stack.prototype.set = stackSet;\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates an array of the enumerable property names of the array-like `value`.\n     *\n     * @private\n     * @param {*} value The value to query.\n     * @param {boolean} inherited Specify returning inherited property names.\n     * @returns {Array} Returns the array of property names.\n     */\n\n    function arrayLikeKeys(value, inherited) {\n      var isArr = isArray(value),\n          isArg = !isArr && isArguments(value),\n          isBuff = !isArr && !isArg && isBuffer(value),\n          isType = !isArr && !isArg && !isBuff && isTypedArray(value),\n          skipIndexes = isArr || isArg || isBuff || isType,\n          result = skipIndexes ? baseTimes(value.length, String) : [],\n          length = result.length;\n\n      for (var key in value) {\n        if ((inherited || hasOwnProperty.call(value, key)) && !(skipIndexes && ( // Safari 9 has enumerable `arguments.length` in strict mode.\n        key == 'length' || // Node.js 0.10 has enumerable non-index properties on buffers.\n        isBuff && (key == 'offset' || key == 'parent') || // PhantomJS 2 has enumerable non-index properties on typed arrays.\n        isType && (key == 'buffer' || key == 'byteLength' || key == 'byteOffset') || // Skip index properties.\n        isIndex(key, length)))) {\n          result.push(key);\n        }\n      }\n\n      return result;\n    }\n    /**\n     * A specialized version of `_.sample` for arrays.\n     *\n     * @private\n     * @param {Array} array The array to sample.\n     * @returns {*} Returns the random element.\n     */\n\n\n    function arraySample(array) {\n      var length = array.length;\n      return length ? array[baseRandom(0, length - 1)] : undefined;\n    }\n    /**\n     * A specialized version of `_.sampleSize` for arrays.\n     *\n     * @private\n     * @param {Array} array The array to sample.\n     * @param {number} n The number of elements to sample.\n     * @returns {Array} Returns the random elements.\n     */\n\n\n    function arraySampleSize(array, n) {\n      return shuffleSelf(copyArray(array), baseClamp(n, 0, array.length));\n    }\n    /**\n     * A specialized version of `_.shuffle` for arrays.\n     *\n     * @private\n     * @param {Array} array The array to shuffle.\n     * @returns {Array} Returns the new shuffled array.\n     */\n\n\n    function arrayShuffle(array) {\n      return shuffleSelf(copyArray(array));\n    }\n    /**\n     * This function is like `assignValue` except that it doesn't assign\n     * `undefined` values.\n     *\n     * @private\n     * @param {Object} object The object to modify.\n     * @param {string} key The key of the property to assign.\n     * @param {*} value The value to assign.\n     */\n\n\n    function assignMergeValue(object, key, value) {\n      if (value !== undefined && !eq(object[key], value) || value === undefined && !(key in object)) {\n        baseAssignValue(object, key, value);\n      }\n    }\n    /**\n     * Assigns `value` to `key` of `object` if the existing value is not equivalent\n     * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons.\n     *\n     * @private\n     * @param {Object} object The object to modify.\n     * @param {string} key The key of the property to assign.\n     * @param {*} value The value to assign.\n     */\n\n\n    function assignValue(object, key, value) {\n      var objValue = object[key];\n\n      if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) || value === undefined && !(key in object)) {\n        baseAssignValue(object, key, value);\n      }\n    }\n    /**\n     * Gets the index at which the `key` is found in `array` of key-value pairs.\n     *\n     * @private\n     * @param {Array} array The array to inspect.\n     * @param {*} key The key to search for.\n     * @returns {number} Returns the index of the matched value, else `-1`.\n     */\n\n\n    function assocIndexOf(array, key) {\n      var length = array.length;\n\n      while (length--) {\n        if (eq(array[length][0], key)) {\n          return length;\n        }\n      }\n\n      return -1;\n    }\n    /**\n     * Aggregates elements of `collection` on `accumulator` with keys transformed\n     * by `iteratee` and values set by `setter`.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} setter The function to set `accumulator` values.\n     * @param {Function} iteratee The iteratee to transform keys.\n     * @param {Object} accumulator The initial aggregated object.\n     * @returns {Function} Returns `accumulator`.\n     */\n\n\n    function baseAggregator(collection, setter, iteratee, accumulator) {\n      baseEach(collection, function (value, key, collection) {\n        setter(accumulator, value, iteratee(value), collection);\n      });\n      return accumulator;\n    }\n    /**\n     * The base implementation of `_.assign` without support for multiple sources\n     * or `customizer` functions.\n     *\n     * @private\n     * @param {Object} object The destination object.\n     * @param {Object} source The source object.\n     * @returns {Object} Returns `object`.\n     */\n\n\n    function baseAssign(object, source) {\n      return object && copyObject(source, keys(source), object);\n    }\n    /**\n     * The base implementation of `_.assignIn` without support for multiple sources\n     * or `customizer` functions.\n     *\n     * @private\n     * @param {Object} object The destination object.\n     * @param {Object} source The source object.\n     * @returns {Object} Returns `object`.\n     */\n\n\n    function baseAssignIn(object, source) {\n      return object && copyObject(source, keysIn(source), object);\n    }\n    /**\n     * The base implementation of `assignValue` and `assignMergeValue` without\n     * value checks.\n     *\n     * @private\n     * @param {Object} object The object to modify.\n     * @param {string} key The key of the property to assign.\n     * @param {*} value The value to assign.\n     */\n\n\n    function baseAssignValue(object, key, value) {\n      if (key == '__proto__' && defineProperty) {\n        defineProperty(object, key, {\n          'configurable': true,\n          'enumerable': true,\n          'value': value,\n          'writable': true\n        });\n      } else {\n        object[key] = value;\n      }\n    }\n    /**\n     * The base implementation of `_.at` without support for individual paths.\n     *\n     * @private\n     * @param {Object} object The object to iterate over.\n     * @param {string[]} paths The property paths to pick.\n     * @returns {Array} Returns the picked elements.\n     */\n\n\n    function baseAt(object, paths) {\n      var index = -1,\n          length = paths.length,\n          result = Array(length),\n          skip = object == null;\n\n      while (++index < length) {\n        result[index] = skip ? undefined : get(object, paths[index]);\n      }\n\n      return result;\n    }\n    /**\n     * The base implementation of `_.clamp` which doesn't coerce arguments.\n     *\n     * @private\n     * @param {number} number The number to clamp.\n     * @param {number} [lower] The lower bound.\n     * @param {number} upper The upper bound.\n     * @returns {number} Returns the clamped number.\n     */\n\n\n    function baseClamp(number, lower, upper) {\n      if (number === number) {\n        if (upper !== undefined) {\n          number = number <= upper ? number : upper;\n        }\n\n        if (lower !== undefined) {\n          number = number >= lower ? number : lower;\n        }\n      }\n\n      return number;\n    }\n    /**\n     * The base implementation of `_.clone` and `_.cloneDeep` which tracks\n     * traversed objects.\n     *\n     * @private\n     * @param {*} value The value to clone.\n     * @param {boolean} bitmask The bitmask flags.\n     *  1 - Deep clone\n     *  2 - Flatten inherited properties\n     *  4 - Clone symbols\n     * @param {Function} [customizer] The function to customize cloning.\n     * @param {string} [key] The key of `value`.\n     * @param {Object} [object] The parent object of `value`.\n     * @param {Object} [stack] Tracks traversed objects and their clone counterparts.\n     * @returns {*} Returns the cloned value.\n     */\n\n\n    function baseClone(value, bitmask, customizer, key, object, stack) {\n      var result,\n          isDeep = bitmask & CLONE_DEEP_FLAG,\n          isFlat = bitmask & CLONE_FLAT_FLAG,\n          isFull = bitmask & CLONE_SYMBOLS_FLAG;\n\n      if (customizer) {\n        result = object ? customizer(value, key, object, stack) : customizer(value);\n      }\n\n      if (result !== undefined) {\n        return result;\n      }\n\n      if (!isObject(value)) {\n        return value;\n      }\n\n      var isArr = isArray(value);\n\n      if (isArr) {\n        result = initCloneArray(value);\n\n        if (!isDeep) {\n          return copyArray(value, result);\n        }\n      } else {\n        var tag = getTag(value),\n            isFunc = tag == funcTag || tag == genTag;\n\n        if (isBuffer(value)) {\n          return cloneBuffer(value, isDeep);\n        }\n\n        if (tag == objectTag || tag == argsTag || isFunc && !object) {\n          result = isFlat || isFunc ? {} : initCloneObject(value);\n\n          if (!isDeep) {\n            return isFlat ? copySymbolsIn(value, baseAssignIn(result, value)) : copySymbols(value, baseAssign(result, value));\n          }\n        } else {\n          if (!cloneableTags[tag]) {\n            return object ? value : {};\n          }\n\n          result = initCloneByTag(value, tag, isDeep);\n        }\n      } // Check for circular references and return its corresponding clone.\n\n\n      stack || (stack = new Stack());\n      var stacked = stack.get(value);\n\n      if (stacked) {\n        return stacked;\n      }\n\n      stack.set(value, result);\n\n      if (isSet(value)) {\n        value.forEach(function (subValue) {\n          result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack));\n        });\n      } else if (isMap(value)) {\n        value.forEach(function (subValue, key) {\n          result.set(key, baseClone(subValue, bitmask, customizer, key, value, stack));\n        });\n      }\n\n      var keysFunc = isFull ? isFlat ? getAllKeysIn : getAllKeys : isFlat ? keysIn : keys;\n      var props = isArr ? undefined : keysFunc(value);\n      arrayEach(props || value, function (subValue, key) {\n        if (props) {\n          key = subValue;\n          subValue = value[key];\n        } // Recursively populate clone (susceptible to call stack limits).\n\n\n        assignValue(result, key, baseClone(subValue, bitmask, customizer, key, value, stack));\n      });\n      return result;\n    }\n    /**\n     * The base implementation of `_.conforms` which doesn't clone `source`.\n     *\n     * @private\n     * @param {Object} source The object of property predicates to conform to.\n     * @returns {Function} Returns the new spec function.\n     */\n\n\n    function baseConforms(source) {\n      var props = keys(source);\n      return function (object) {\n        return baseConformsTo(object, source, props);\n      };\n    }\n    /**\n     * The base implementation of `_.conformsTo` which accepts `props` to check.\n     *\n     * @private\n     * @param {Object} object The object to inspect.\n     * @param {Object} source The object of property predicates to conform to.\n     * @returns {boolean} Returns `true` if `object` conforms, else `false`.\n     */\n\n\n    function baseConformsTo(object, source, props) {\n      var length = props.length;\n\n      if (object == null) {\n        return !length;\n      }\n\n      object = Object(object);\n\n      while (length--) {\n        var key = props[length],\n            predicate = source[key],\n            value = object[key];\n\n        if (value === undefined && !(key in object) || !predicate(value)) {\n          return false;\n        }\n      }\n\n      return true;\n    }\n    /**\n     * The base implementation of `_.delay` and `_.defer` which accepts `args`\n     * to provide to `func`.\n     *\n     * @private\n     * @param {Function} func The function to delay.\n     * @param {number} wait The number of milliseconds to delay invocation.\n     * @param {Array} args The arguments to provide to `func`.\n     * @returns {number|Object} Returns the timer id or timeout object.\n     */\n\n\n    function baseDelay(func, wait, args) {\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n\n      return setTimeout(function () {\n        func.apply(undefined, args);\n      }, wait);\n    }\n    /**\n     * The base implementation of methods like `_.difference` without support\n     * for excluding multiple arrays or iteratee shorthands.\n     *\n     * @private\n     * @param {Array} array The array to inspect.\n     * @param {Array} values The values to exclude.\n     * @param {Function} [iteratee] The iteratee invoked per element.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new array of filtered values.\n     */\n\n\n    function baseDifference(array, values, iteratee, comparator) {\n      var index = -1,\n          includes = arrayIncludes,\n          isCommon = true,\n          length = array.length,\n          result = [],\n          valuesLength = values.length;\n\n      if (!length) {\n        return result;\n      }\n\n      if (iteratee) {\n        values = arrayMap(values, baseUnary(iteratee));\n      }\n\n      if (comparator) {\n        includes = arrayIncludesWith;\n        isCommon = false;\n      } else if (values.length >= LARGE_ARRAY_SIZE) {\n        includes = cacheHas;\n        isCommon = false;\n        values = new SetCache(values);\n      }\n\n      outer: while (++index < length) {\n        var value = array[index],\n            computed = iteratee == null ? value : iteratee(value);\n        value = comparator || value !== 0 ? value : 0;\n\n        if (isCommon && computed === computed) {\n          var valuesIndex = valuesLength;\n\n          while (valuesIndex--) {\n            if (values[valuesIndex] === computed) {\n              continue outer;\n            }\n          }\n\n          result.push(value);\n        } else if (!includes(values, computed, comparator)) {\n          result.push(value);\n        }\n      }\n\n      return result;\n    }\n    /**\n     * The base implementation of `_.forEach` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @returns {Array|Object} Returns `collection`.\n     */\n\n\n    var baseEach = createBaseEach(baseForOwn);\n    /**\n     * The base implementation of `_.forEachRight` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @returns {Array|Object} Returns `collection`.\n     */\n\n    var baseEachRight = createBaseEach(baseForOwnRight, true);\n    /**\n     * The base implementation of `_.every` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} predicate The function invoked per iteration.\n     * @returns {boolean} Returns `true` if all elements pass the predicate check,\n     *  else `false`\n     */\n\n    function baseEvery(collection, predicate) {\n      var result = true;\n      baseEach(collection, function (value, index, collection) {\n        result = !!predicate(value, index, collection);\n        return result;\n      });\n      return result;\n    }\n    /**\n     * The base implementation of methods like `_.max` and `_.min` which accepts a\n     * `comparator` to determine the extremum value.\n     *\n     * @private\n     * @param {Array} array The array to iterate over.\n     * @param {Function} iteratee The iteratee invoked per iteration.\n     * @param {Function} comparator The comparator used to compare values.\n     * @returns {*} Returns the extremum value.\n     */\n\n\n    function baseExtremum(array, iteratee, comparator) {\n      var index = -1,\n          length = array.length;\n\n      while (++index < length) {\n        var value = array[index],\n            current = iteratee(value);\n\n        if (current != null && (computed === undefined ? current === current && !isSymbol(current) : comparator(current, computed))) {\n          var computed = current,\n              result = value;\n        }\n      }\n\n      return result;\n    }\n    /**\n     * The base implementation of `_.fill` without an iteratee call guard.\n     *\n     * @private\n     * @param {Array} array The array to fill.\n     * @param {*} value The value to fill `array` with.\n     * @param {number} [start=0] The start position.\n     * @param {number} [end=array.length] The end position.\n     * @returns {Array} Returns `array`.\n     */\n\n\n    function baseFill(array, value, start, end) {\n      var length = array.length;\n      start = toInteger(start);\n\n      if (start < 0) {\n        start = -start > length ? 0 : length + start;\n      }\n\n      end = end === undefined || end > length ? length : toInteger(end);\n\n      if (end < 0) {\n        end += length;\n      }\n\n      end = start > end ? 0 : toLength(end);\n\n      while (start < end) {\n        array[start++] = value;\n      }\n\n      return array;\n    }\n    /**\n     * The base implementation of `_.filter` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} predicate The function invoked per iteration.\n     * @returns {Array} Returns the new filtered array.\n     */\n\n\n    function baseFilter(collection, predicate) {\n      var result = [];\n      baseEach(collection, function (value, index, collection) {\n        if (predicate(value, index, collection)) {\n          result.push(value);\n        }\n      });\n      return result;\n    }\n    /**\n     * The base implementation of `_.flatten` with support for restricting flattening.\n     *\n     * @private\n     * @param {Array} array The array to flatten.\n     * @param {number} depth The maximum recursion depth.\n     * @param {boolean} [predicate=isFlattenable] The function invoked per iteration.\n     * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks.\n     * @param {Array} [result=[]] The initial result value.\n     * @returns {Array} Returns the new flattened array.\n     */\n\n\n    function baseFlatten(array, depth, predicate, isStrict, result) {\n      var index = -1,\n          length = array.length;\n      predicate || (predicate = isFlattenable);\n      result || (result = []);\n\n      while (++index < length) {\n        var value = array[index];\n\n        if (depth > 0 && predicate(value)) {\n          if (depth > 1) {\n            // Recursively flatten arrays (susceptible to call stack limits).\n            baseFlatten(value, depth - 1, predicate, isStrict, result);\n          } else {\n            arrayPush(result, value);\n          }\n        } else if (!isStrict) {\n          result[result.length] = value;\n        }\n      }\n\n      return result;\n    }\n    /**\n     * The base implementation of `baseForOwn` which iterates over `object`\n     * properties returned by `keysFunc` and invokes `iteratee` for each property.\n     * Iteratee functions may exit iteration early by explicitly returning `false`.\n     *\n     * @private\n     * @param {Object} object The object to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @param {Function} keysFunc The function to get the keys of `object`.\n     * @returns {Object} Returns `object`.\n     */\n\n\n    var baseFor = createBaseFor();\n    /**\n     * This function is like `baseFor` except that it iterates over properties\n     * in the opposite order.\n     *\n     * @private\n     * @param {Object} object The object to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @param {Function} keysFunc The function to get the keys of `object`.\n     * @returns {Object} Returns `object`.\n     */\n\n    var baseForRight = createBaseFor(true);\n    /**\n     * The base implementation of `_.forOwn` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Object} object The object to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @returns {Object} Returns `object`.\n     */\n\n    function baseForOwn(object, iteratee) {\n      return object && baseFor(object, iteratee, keys);\n    }\n    /**\n     * The base implementation of `_.forOwnRight` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Object} object The object to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @returns {Object} Returns `object`.\n     */\n\n\n    function baseForOwnRight(object, iteratee) {\n      return object && baseForRight(object, iteratee, keys);\n    }\n    /**\n     * The base implementation of `_.functions` which creates an array of\n     * `object` function property names filtered from `props`.\n     *\n     * @private\n     * @param {Object} object The object to inspect.\n     * @param {Array} props The property names to filter.\n     * @returns {Array} Returns the function names.\n     */\n\n\n    function baseFunctions(object, props) {\n      return arrayFilter(props, function (key) {\n        return isFunction(object[key]);\n      });\n    }\n    /**\n     * The base implementation of `_.get` without support for default values.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path of the property to get.\n     * @returns {*} Returns the resolved value.\n     */\n\n\n    function baseGet(object, path) {\n      path = castPath(path, object);\n      var index = 0,\n          length = path.length;\n\n      while (object != null && index < length) {\n        object = object[toKey(path[index++])];\n      }\n\n      return index && index == length ? object : undefined;\n    }\n    /**\n     * The base implementation of `getAllKeys` and `getAllKeysIn` which uses\n     * `keysFunc` and `symbolsFunc` to get the enumerable property names and\n     * symbols of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @param {Function} keysFunc The function to get the keys of `object`.\n     * @param {Function} symbolsFunc The function to get the symbols of `object`.\n     * @returns {Array} Returns the array of property names and symbols.\n     */\n\n\n    function baseGetAllKeys(object, keysFunc, symbolsFunc) {\n      var result = keysFunc(object);\n      return isArray(object) ? result : arrayPush(result, symbolsFunc(object));\n    }\n    /**\n     * The base implementation of `getTag` without fallbacks for buggy environments.\n     *\n     * @private\n     * @param {*} value The value to query.\n     * @returns {string} Returns the `toStringTag`.\n     */\n\n\n    function baseGetTag(value) {\n      if (value == null) {\n        return value === undefined ? undefinedTag : nullTag;\n      }\n\n      return symToStringTag && symToStringTag in Object(value) ? getRawTag(value) : objectToString(value);\n    }\n    /**\n     * The base implementation of `_.gt` which doesn't coerce arguments.\n     *\n     * @private\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if `value` is greater than `other`,\n     *  else `false`.\n     */\n\n\n    function baseGt(value, other) {\n      return value > other;\n    }\n    /**\n     * The base implementation of `_.has` without support for deep paths.\n     *\n     * @private\n     * @param {Object} [object] The object to query.\n     * @param {Array|string} key The key to check.\n     * @returns {boolean} Returns `true` if `key` exists, else `false`.\n     */\n\n\n    function baseHas(object, key) {\n      return object != null && hasOwnProperty.call(object, key);\n    }\n    /**\n     * The base implementation of `_.hasIn` without support for deep paths.\n     *\n     * @private\n     * @param {Object} [object] The object to query.\n     * @param {Array|string} key The key to check.\n     * @returns {boolean} Returns `true` if `key` exists, else `false`.\n     */\n\n\n    function baseHasIn(object, key) {\n      return object != null && key in Object(object);\n    }\n    /**\n     * The base implementation of `_.inRange` which doesn't coerce arguments.\n     *\n     * @private\n     * @param {number} number The number to check.\n     * @param {number} start The start of the range.\n     * @param {number} end The end of the range.\n     * @returns {boolean} Returns `true` if `number` is in the range, else `false`.\n     */\n\n\n    function baseInRange(number, start, end) {\n      return number >= nativeMin(start, end) && number < nativeMax(start, end);\n    }\n    /**\n     * The base implementation of methods like `_.intersection`, without support\n     * for iteratee shorthands, that accepts an array of arrays to inspect.\n     *\n     * @private\n     * @param {Array} arrays The arrays to inspect.\n     * @param {Function} [iteratee] The iteratee invoked per element.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new array of shared values.\n     */\n\n\n    function baseIntersection(arrays, iteratee, comparator) {\n      var includes = comparator ? arrayIncludesWith : arrayIncludes,\n          length = arrays[0].length,\n          othLength = arrays.length,\n          othIndex = othLength,\n          caches = Array(othLength),\n          maxLength = Infinity,\n          result = [];\n\n      while (othIndex--) {\n        var array = arrays[othIndex];\n\n        if (othIndex && iteratee) {\n          array = arrayMap(array, baseUnary(iteratee));\n        }\n\n        maxLength = nativeMin(array.length, maxLength);\n        caches[othIndex] = !comparator && (iteratee || length >= 120 && array.length >= 120) ? new SetCache(othIndex && array) : undefined;\n      }\n\n      array = arrays[0];\n      var index = -1,\n          seen = caches[0];\n\n      outer: while (++index < length && result.length < maxLength) {\n        var value = array[index],\n            computed = iteratee ? iteratee(value) : value;\n        value = comparator || value !== 0 ? value : 0;\n\n        if (!(seen ? cacheHas(seen, computed) : includes(result, computed, comparator))) {\n          othIndex = othLength;\n\n          while (--othIndex) {\n            var cache = caches[othIndex];\n\n            if (!(cache ? cacheHas(cache, computed) : includes(arrays[othIndex], computed, comparator))) {\n              continue outer;\n            }\n          }\n\n          if (seen) {\n            seen.push(computed);\n          }\n\n          result.push(value);\n        }\n      }\n\n      return result;\n    }\n    /**\n     * The base implementation of `_.invert` and `_.invertBy` which inverts\n     * `object` with values transformed by `iteratee` and set by `setter`.\n     *\n     * @private\n     * @param {Object} object The object to iterate over.\n     * @param {Function} setter The function to set `accumulator` values.\n     * @param {Function} iteratee The iteratee to transform values.\n     * @param {Object} accumulator The initial inverted object.\n     * @returns {Function} Returns `accumulator`.\n     */\n\n\n    function baseInverter(object, setter, iteratee, accumulator) {\n      baseForOwn(object, function (value, key, object) {\n        setter(accumulator, iteratee(value), key, object);\n      });\n      return accumulator;\n    }\n    /**\n     * The base implementation of `_.invoke` without support for individual\n     * method arguments.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path of the method to invoke.\n     * @param {Array} args The arguments to invoke the method with.\n     * @returns {*} Returns the result of the invoked method.\n     */\n\n\n    function baseInvoke(object, path, args) {\n      path = castPath(path, object);\n      object = parent(object, path);\n      var func = object == null ? object : object[toKey(last(path))];\n      return func == null ? undefined : apply(func, object, args);\n    }\n    /**\n     * The base implementation of `_.isArguments`.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n     */\n\n\n    function baseIsArguments(value) {\n      return isObjectLike(value) && baseGetTag(value) == argsTag;\n    }\n    /**\n     * The base implementation of `_.isArrayBuffer` without Node.js optimizations.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`.\n     */\n\n\n    function baseIsArrayBuffer(value) {\n      return isObjectLike(value) && baseGetTag(value) == arrayBufferTag;\n    }\n    /**\n     * The base implementation of `_.isDate` without Node.js optimizations.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a date object, else `false`.\n     */\n\n\n    function baseIsDate(value) {\n      return isObjectLike(value) && baseGetTag(value) == dateTag;\n    }\n    /**\n     * The base implementation of `_.isEqual` which supports partial comparisons\n     * and tracks traversed objects.\n     *\n     * @private\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @param {boolean} bitmask The bitmask flags.\n     *  1 - Unordered comparison\n     *  2 - Partial comparison\n     * @param {Function} [customizer] The function to customize comparisons.\n     * @param {Object} [stack] Tracks traversed `value` and `other` objects.\n     * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n     */\n\n\n    function baseIsEqual(value, other, bitmask, customizer, stack) {\n      if (value === other) {\n        return true;\n      }\n\n      if (value == null || other == null || !isObjectLike(value) && !isObjectLike(other)) {\n        return value !== value && other !== other;\n      }\n\n      return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);\n    }\n    /**\n     * A specialized version of `baseIsEqual` for arrays and objects which performs\n     * deep comparisons and tracks traversed objects enabling objects with circular\n     * references to be compared.\n     *\n     * @private\n     * @param {Object} object The object to compare.\n     * @param {Object} other The other object to compare.\n     * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n     * @param {Function} customizer The function to customize comparisons.\n     * @param {Function} equalFunc The function to determine equivalents of values.\n     * @param {Object} [stack] Tracks traversed `object` and `other` objects.\n     * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n     */\n\n\n    function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {\n      var objIsArr = isArray(object),\n          othIsArr = isArray(other),\n          objTag = objIsArr ? arrayTag : getTag(object),\n          othTag = othIsArr ? arrayTag : getTag(other);\n      objTag = objTag == argsTag ? objectTag : objTag;\n      othTag = othTag == argsTag ? objectTag : othTag;\n      var objIsObj = objTag == objectTag,\n          othIsObj = othTag == objectTag,\n          isSameTag = objTag == othTag;\n\n      if (isSameTag && isBuffer(object)) {\n        if (!isBuffer(other)) {\n          return false;\n        }\n\n        objIsArr = true;\n        objIsObj = false;\n      }\n\n      if (isSameTag && !objIsObj) {\n        stack || (stack = new Stack());\n        return objIsArr || isTypedArray(object) ? equalArrays(object, other, bitmask, customizer, equalFunc, stack) : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);\n      }\n\n      if (!(bitmask & COMPARE_PARTIAL_FLAG)) {\n        var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),\n            othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');\n\n        if (objIsWrapped || othIsWrapped) {\n          var objUnwrapped = objIsWrapped ? object.value() : object,\n              othUnwrapped = othIsWrapped ? other.value() : other;\n          stack || (stack = new Stack());\n          return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);\n        }\n      }\n\n      if (!isSameTag) {\n        return false;\n      }\n\n      stack || (stack = new Stack());\n      return equalObjects(object, other, bitmask, customizer, equalFunc, stack);\n    }\n    /**\n     * The base implementation of `_.isMap` without Node.js optimizations.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n     */\n\n\n    function baseIsMap(value) {\n      return isObjectLike(value) && getTag(value) == mapTag;\n    }\n    /**\n     * The base implementation of `_.isMatch` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Object} object The object to inspect.\n     * @param {Object} source The object of property values to match.\n     * @param {Array} matchData The property names, values, and compare flags to match.\n     * @param {Function} [customizer] The function to customize comparisons.\n     * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n     */\n\n\n    function baseIsMatch(object, source, matchData, customizer) {\n      var index = matchData.length,\n          length = index,\n          noCustomizer = !customizer;\n\n      if (object == null) {\n        return !length;\n      }\n\n      object = Object(object);\n\n      while (index--) {\n        var data = matchData[index];\n\n        if (noCustomizer && data[2] ? data[1] !== object[data[0]] : !(data[0] in object)) {\n          return false;\n        }\n      }\n\n      while (++index < length) {\n        data = matchData[index];\n        var key = data[0],\n            objValue = object[key],\n            srcValue = data[1];\n\n        if (noCustomizer && data[2]) {\n          if (objValue === undefined && !(key in object)) {\n            return false;\n          }\n        } else {\n          var stack = new Stack();\n\n          if (customizer) {\n            var result = customizer(objValue, srcValue, key, object, source, stack);\n          }\n\n          if (!(result === undefined ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG, customizer, stack) : result)) {\n            return false;\n          }\n        }\n      }\n\n      return true;\n    }\n    /**\n     * The base implementation of `_.isNative` without bad shim checks.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a native function,\n     *  else `false`.\n     */\n\n\n    function baseIsNative(value) {\n      if (!isObject(value) || isMasked(value)) {\n        return false;\n      }\n\n      var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n      return pattern.test(toSource(value));\n    }\n    /**\n     * The base implementation of `_.isRegExp` without Node.js optimizations.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.\n     */\n\n\n    function baseIsRegExp(value) {\n      return isObjectLike(value) && baseGetTag(value) == regexpTag;\n    }\n    /**\n     * The base implementation of `_.isSet` without Node.js optimizations.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n     */\n\n\n    function baseIsSet(value) {\n      return isObjectLike(value) && getTag(value) == setTag;\n    }\n    /**\n     * The base implementation of `_.isTypedArray` without Node.js optimizations.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n     */\n\n\n    function baseIsTypedArray(value) {\n      return isObjectLike(value) && isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n    }\n    /**\n     * The base implementation of `_.iteratee`.\n     *\n     * @private\n     * @param {*} [value=_.identity] The value to convert to an iteratee.\n     * @returns {Function} Returns the iteratee.\n     */\n\n\n    function baseIteratee(value) {\n      // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9.\n      // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details.\n      if (typeof value == 'function') {\n        return value;\n      }\n\n      if (value == null) {\n        return identity;\n      }\n\n      if (_typeof(value) == 'object') {\n        return isArray(value) ? baseMatchesProperty(value[0], value[1]) : baseMatches(value);\n      }\n\n      return property(value);\n    }\n    /**\n     * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property names.\n     */\n\n\n    function baseKeys(object) {\n      if (!isPrototype(object)) {\n        return nativeKeys(object);\n      }\n\n      var result = [];\n\n      for (var key in Object(object)) {\n        if (hasOwnProperty.call(object, key) && key != 'constructor') {\n          result.push(key);\n        }\n      }\n\n      return result;\n    }\n    /**\n     * The base implementation of `_.keysIn` which doesn't treat sparse arrays as dense.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property names.\n     */\n\n\n    function baseKeysIn(object) {\n      if (!isObject(object)) {\n        return nativeKeysIn(object);\n      }\n\n      var isProto = isPrototype(object),\n          result = [];\n\n      for (var key in object) {\n        if (!(key == 'constructor' && (isProto || !hasOwnProperty.call(object, key)))) {\n          result.push(key);\n        }\n      }\n\n      return result;\n    }\n    /**\n     * The base implementation of `_.lt` which doesn't coerce arguments.\n     *\n     * @private\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if `value` is less than `other`,\n     *  else `false`.\n     */\n\n\n    function baseLt(value, other) {\n      return value < other;\n    }\n    /**\n     * The base implementation of `_.map` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} iteratee The function invoked per iteration.\n     * @returns {Array} Returns the new mapped array.\n     */\n\n\n    function baseMap(collection, iteratee) {\n      var index = -1,\n          result = isArrayLike(collection) ? Array(collection.length) : [];\n      baseEach(collection, function (value, key, collection) {\n        result[++index] = iteratee(value, key, collection);\n      });\n      return result;\n    }\n    /**\n     * The base implementation of `_.matches` which doesn't clone `source`.\n     *\n     * @private\n     * @param {Object} source The object of property values to match.\n     * @returns {Function} Returns the new spec function.\n     */\n\n\n    function baseMatches(source) {\n      var matchData = getMatchData(source);\n\n      if (matchData.length == 1 && matchData[0][2]) {\n        return matchesStrictComparable(matchData[0][0], matchData[0][1]);\n      }\n\n      return function (object) {\n        return object === source || baseIsMatch(object, source, matchData);\n      };\n    }\n    /**\n     * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`.\n     *\n     * @private\n     * @param {string} path The path of the property to get.\n     * @param {*} srcValue The value to match.\n     * @returns {Function} Returns the new spec function.\n     */\n\n\n    function baseMatchesProperty(path, srcValue) {\n      if (isKey(path) && isStrictComparable(srcValue)) {\n        return matchesStrictComparable(toKey(path), srcValue);\n      }\n\n      return function (object) {\n        var objValue = get(object, path);\n        return objValue === undefined && objValue === srcValue ? hasIn(object, path) : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG);\n      };\n    }\n    /**\n     * The base implementation of `_.merge` without support for multiple sources.\n     *\n     * @private\n     * @param {Object} object The destination object.\n     * @param {Object} source The source object.\n     * @param {number} srcIndex The index of `source`.\n     * @param {Function} [customizer] The function to customize merged values.\n     * @param {Object} [stack] Tracks traversed source values and their merged\n     *  counterparts.\n     */\n\n\n    function baseMerge(object, source, srcIndex, customizer, stack) {\n      if (object === source) {\n        return;\n      }\n\n      baseFor(source, function (srcValue, key) {\n        stack || (stack = new Stack());\n\n        if (isObject(srcValue)) {\n          baseMergeDeep(object, source, key, srcIndex, baseMerge, customizer, stack);\n        } else {\n          var newValue = customizer ? customizer(safeGet(object, key), srcValue, key + '', object, source, stack) : undefined;\n\n          if (newValue === undefined) {\n            newValue = srcValue;\n          }\n\n          assignMergeValue(object, key, newValue);\n        }\n      }, keysIn);\n    }\n    /**\n     * A specialized version of `baseMerge` for arrays and objects which performs\n     * deep merges and tracks traversed objects enabling objects with circular\n     * references to be merged.\n     *\n     * @private\n     * @param {Object} object The destination object.\n     * @param {Object} source The source object.\n     * @param {string} key The key of the value to merge.\n     * @param {number} srcIndex The index of `source`.\n     * @param {Function} mergeFunc The function to merge values.\n     * @param {Function} [customizer] The function to customize assigned values.\n     * @param {Object} [stack] Tracks traversed source values and their merged\n     *  counterparts.\n     */\n\n\n    function baseMergeDeep(object, source, key, srcIndex, mergeFunc, customizer, stack) {\n      var objValue = safeGet(object, key),\n          srcValue = safeGet(source, key),\n          stacked = stack.get(srcValue);\n\n      if (stacked) {\n        assignMergeValue(object, key, stacked);\n        return;\n      }\n\n      var newValue = customizer ? customizer(objValue, srcValue, key + '', object, source, stack) : undefined;\n      var isCommon = newValue === undefined;\n\n      if (isCommon) {\n        var isArr = isArray(srcValue),\n            isBuff = !isArr && isBuffer(srcValue),\n            isTyped = !isArr && !isBuff && isTypedArray(srcValue);\n        newValue = srcValue;\n\n        if (isArr || isBuff || isTyped) {\n          if (isArray(objValue)) {\n            newValue = objValue;\n          } else if (isArrayLikeObject(objValue)) {\n            newValue = copyArray(objValue);\n          } else if (isBuff) {\n            isCommon = false;\n            newValue = cloneBuffer(srcValue, true);\n          } else if (isTyped) {\n            isCommon = false;\n            newValue = cloneTypedArray(srcValue, true);\n          } else {\n            newValue = [];\n          }\n        } else if (isPlainObject(srcValue) || isArguments(srcValue)) {\n          newValue = objValue;\n\n          if (isArguments(objValue)) {\n            newValue = toPlainObject(objValue);\n          } else if (!isObject(objValue) || isFunction(objValue)) {\n            newValue = initCloneObject(srcValue);\n          }\n        } else {\n          isCommon = false;\n        }\n      }\n\n      if (isCommon) {\n        // Recursively merge objects and arrays (susceptible to call stack limits).\n        stack.set(srcValue, newValue);\n        mergeFunc(newValue, srcValue, srcIndex, customizer, stack);\n        stack['delete'](srcValue);\n      }\n\n      assignMergeValue(object, key, newValue);\n    }\n    /**\n     * The base implementation of `_.nth` which doesn't coerce arguments.\n     *\n     * @private\n     * @param {Array} array The array to query.\n     * @param {number} n The index of the element to return.\n     * @returns {*} Returns the nth element of `array`.\n     */\n\n\n    function baseNth(array, n) {\n      var length = array.length;\n\n      if (!length) {\n        return;\n      }\n\n      n += n < 0 ? length : 0;\n      return isIndex(n, length) ? array[n] : undefined;\n    }\n    /**\n     * The base implementation of `_.orderBy` without param guards.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function[]|Object[]|string[]} iteratees The iteratees to sort by.\n     * @param {string[]} orders The sort orders of `iteratees`.\n     * @returns {Array} Returns the new sorted array.\n     */\n\n\n    function baseOrderBy(collection, iteratees, orders) {\n      var index = -1;\n      iteratees = arrayMap(iteratees.length ? iteratees : [identity], baseUnary(getIteratee()));\n      var result = baseMap(collection, function (value, key, collection) {\n        var criteria = arrayMap(iteratees, function (iteratee) {\n          return iteratee(value);\n        });\n        return {\n          'criteria': criteria,\n          'index': ++index,\n          'value': value\n        };\n      });\n      return baseSortBy(result, function (object, other) {\n        return compareMultiple(object, other, orders);\n      });\n    }\n    /**\n     * The base implementation of `_.pick` without support for individual\n     * property identifiers.\n     *\n     * @private\n     * @param {Object} object The source object.\n     * @param {string[]} paths The property paths to pick.\n     * @returns {Object} Returns the new object.\n     */\n\n\n    function basePick(object, paths) {\n      return basePickBy(object, paths, function (value, path) {\n        return hasIn(object, path);\n      });\n    }\n    /**\n     * The base implementation of  `_.pickBy` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Object} object The source object.\n     * @param {string[]} paths The property paths to pick.\n     * @param {Function} predicate The function invoked per property.\n     * @returns {Object} Returns the new object.\n     */\n\n\n    function basePickBy(object, paths, predicate) {\n      var index = -1,\n          length = paths.length,\n          result = {};\n\n      while (++index < length) {\n        var path = paths[index],\n            value = baseGet(object, path);\n\n        if (predicate(value, path)) {\n          baseSet(result, castPath(path, object), value);\n        }\n      }\n\n      return result;\n    }\n    /**\n     * A specialized version of `baseProperty` which supports deep paths.\n     *\n     * @private\n     * @param {Array|string} path The path of the property to get.\n     * @returns {Function} Returns the new accessor function.\n     */\n\n\n    function basePropertyDeep(path) {\n      return function (object) {\n        return baseGet(object, path);\n      };\n    }\n    /**\n     * The base implementation of `_.pullAllBy` without support for iteratee\n     * shorthands.\n     *\n     * @private\n     * @param {Array} array The array to modify.\n     * @param {Array} values The values to remove.\n     * @param {Function} [iteratee] The iteratee invoked per element.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns `array`.\n     */\n\n\n    function basePullAll(array, values, iteratee, comparator) {\n      var indexOf = comparator ? baseIndexOfWith : baseIndexOf,\n          index = -1,\n          length = values.length,\n          seen = array;\n\n      if (array === values) {\n        values = copyArray(values);\n      }\n\n      if (iteratee) {\n        seen = arrayMap(array, baseUnary(iteratee));\n      }\n\n      while (++index < length) {\n        var fromIndex = 0,\n            value = values[index],\n            computed = iteratee ? iteratee(value) : value;\n\n        while ((fromIndex = indexOf(seen, computed, fromIndex, comparator)) > -1) {\n          if (seen !== array) {\n            splice.call(seen, fromIndex, 1);\n          }\n\n          splice.call(array, fromIndex, 1);\n        }\n      }\n\n      return array;\n    }\n    /**\n     * The base implementation of `_.pullAt` without support for individual\n     * indexes or capturing the removed elements.\n     *\n     * @private\n     * @param {Array} array The array to modify.\n     * @param {number[]} indexes The indexes of elements to remove.\n     * @returns {Array} Returns `array`.\n     */\n\n\n    function basePullAt(array, indexes) {\n      var length = array ? indexes.length : 0,\n          lastIndex = length - 1;\n\n      while (length--) {\n        var index = indexes[length];\n\n        if (length == lastIndex || index !== previous) {\n          var previous = index;\n\n          if (isIndex(index)) {\n            splice.call(array, index, 1);\n          } else {\n            baseUnset(array, index);\n          }\n        }\n      }\n\n      return array;\n    }\n    /**\n     * The base implementation of `_.random` without support for returning\n     * floating-point numbers.\n     *\n     * @private\n     * @param {number} lower The lower bound.\n     * @param {number} upper The upper bound.\n     * @returns {number} Returns the random number.\n     */\n\n\n    function baseRandom(lower, upper) {\n      return lower + nativeFloor(nativeRandom() * (upper - lower + 1));\n    }\n    /**\n     * The base implementation of `_.range` and `_.rangeRight` which doesn't\n     * coerce arguments.\n     *\n     * @private\n     * @param {number} start The start of the range.\n     * @param {number} end The end of the range.\n     * @param {number} step The value to increment or decrement by.\n     * @param {boolean} [fromRight] Specify iterating from right to left.\n     * @returns {Array} Returns the range of numbers.\n     */\n\n\n    function baseRange(start, end, step, fromRight) {\n      var index = -1,\n          length = nativeMax(nativeCeil((end - start) / (step || 1)), 0),\n          result = Array(length);\n\n      while (length--) {\n        result[fromRight ? length : ++index] = start;\n        start += step;\n      }\n\n      return result;\n    }\n    /**\n     * The base implementation of `_.repeat` which doesn't coerce arguments.\n     *\n     * @private\n     * @param {string} string The string to repeat.\n     * @param {number} n The number of times to repeat the string.\n     * @returns {string} Returns the repeated string.\n     */\n\n\n    function baseRepeat(string, n) {\n      var result = '';\n\n      if (!string || n < 1 || n > MAX_SAFE_INTEGER) {\n        return result;\n      } // Leverage the exponentiation by squaring algorithm for a faster repeat.\n      // See https://en.wikipedia.org/wiki/Exponentiation_by_squaring for more details.\n\n\n      do {\n        if (n % 2) {\n          result += string;\n        }\n\n        n = nativeFloor(n / 2);\n\n        if (n) {\n          string += string;\n        }\n      } while (n);\n\n      return result;\n    }\n    /**\n     * The base implementation of `_.rest` which doesn't validate or coerce arguments.\n     *\n     * @private\n     * @param {Function} func The function to apply a rest parameter to.\n     * @param {number} [start=func.length-1] The start position of the rest parameter.\n     * @returns {Function} Returns the new function.\n     */\n\n\n    function baseRest(func, start) {\n      return setToString(overRest(func, start, identity), func + '');\n    }\n    /**\n     * The base implementation of `_.sample`.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to sample.\n     * @returns {*} Returns the random element.\n     */\n\n\n    function baseSample(collection) {\n      return arraySample(values(collection));\n    }\n    /**\n     * The base implementation of `_.sampleSize` without param guards.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to sample.\n     * @param {number} n The number of elements to sample.\n     * @returns {Array} Returns the random elements.\n     */\n\n\n    function baseSampleSize(collection, n) {\n      var array = values(collection);\n      return shuffleSelf(array, baseClamp(n, 0, array.length));\n    }\n    /**\n     * The base implementation of `_.set`.\n     *\n     * @private\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The path of the property to set.\n     * @param {*} value The value to set.\n     * @param {Function} [customizer] The function to customize path creation.\n     * @returns {Object} Returns `object`.\n     */\n\n\n    function baseSet(object, path, value, customizer) {\n      if (!isObject(object)) {\n        return object;\n      }\n\n      path = castPath(path, object);\n      var index = -1,\n          length = path.length,\n          lastIndex = length - 1,\n          nested = object;\n\n      while (nested != null && ++index < length) {\n        var key = toKey(path[index]),\n            newValue = value;\n\n        if (index != lastIndex) {\n          var objValue = nested[key];\n          newValue = customizer ? customizer(objValue, key, nested) : undefined;\n\n          if (newValue === undefined) {\n            newValue = isObject(objValue) ? objValue : isIndex(path[index + 1]) ? [] : {};\n          }\n        }\n\n        assignValue(nested, key, newValue);\n        nested = nested[key];\n      }\n\n      return object;\n    }\n    /**\n     * The base implementation of `setData` without support for hot loop shorting.\n     *\n     * @private\n     * @param {Function} func The function to associate metadata with.\n     * @param {*} data The metadata.\n     * @returns {Function} Returns `func`.\n     */\n\n\n    var baseSetData = !metaMap ? identity : function (func, data) {\n      metaMap.set(func, data);\n      return func;\n    };\n    /**\n     * The base implementation of `setToString` without support for hot loop shorting.\n     *\n     * @private\n     * @param {Function} func The function to modify.\n     * @param {Function} string The `toString` result.\n     * @returns {Function} Returns `func`.\n     */\n\n    var baseSetToString = !defineProperty ? identity : function (func, string) {\n      return defineProperty(func, 'toString', {\n        'configurable': true,\n        'enumerable': false,\n        'value': constant(string),\n        'writable': true\n      });\n    };\n    /**\n     * The base implementation of `_.shuffle`.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to shuffle.\n     * @returns {Array} Returns the new shuffled array.\n     */\n\n    function baseShuffle(collection) {\n      return shuffleSelf(values(collection));\n    }\n    /**\n     * The base implementation of `_.slice` without an iteratee call guard.\n     *\n     * @private\n     * @param {Array} array The array to slice.\n     * @param {number} [start=0] The start position.\n     * @param {number} [end=array.length] The end position.\n     * @returns {Array} Returns the slice of `array`.\n     */\n\n\n    function baseSlice(array, start, end) {\n      var index = -1,\n          length = array.length;\n\n      if (start < 0) {\n        start = -start > length ? 0 : length + start;\n      }\n\n      end = end > length ? length : end;\n\n      if (end < 0) {\n        end += length;\n      }\n\n      length = start > end ? 0 : end - start >>> 0;\n      start >>>= 0;\n      var result = Array(length);\n\n      while (++index < length) {\n        result[index] = array[index + start];\n      }\n\n      return result;\n    }\n    /**\n     * The base implementation of `_.some` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} predicate The function invoked per iteration.\n     * @returns {boolean} Returns `true` if any element passes the predicate check,\n     *  else `false`.\n     */\n\n\n    function baseSome(collection, predicate) {\n      var result;\n      baseEach(collection, function (value, index, collection) {\n        result = predicate(value, index, collection);\n        return !result;\n      });\n      return !!result;\n    }\n    /**\n     * The base implementation of `_.sortedIndex` and `_.sortedLastIndex` which\n     * performs a binary search of `array` to determine the index at which `value`\n     * should be inserted into `array` in order to maintain its sort order.\n     *\n     * @private\n     * @param {Array} array The sorted array to inspect.\n     * @param {*} value The value to evaluate.\n     * @param {boolean} [retHighest] Specify returning the highest qualified index.\n     * @returns {number} Returns the index at which `value` should be inserted\n     *  into `array`.\n     */\n\n\n    function baseSortedIndex(array, value, retHighest) {\n      var low = 0,\n          high = array == null ? low : array.length;\n\n      if (typeof value == 'number' && value === value && high <= HALF_MAX_ARRAY_LENGTH) {\n        while (low < high) {\n          var mid = low + high >>> 1,\n              computed = array[mid];\n\n          if (computed !== null && !isSymbol(computed) && (retHighest ? computed <= value : computed < value)) {\n            low = mid + 1;\n          } else {\n            high = mid;\n          }\n        }\n\n        return high;\n      }\n\n      return baseSortedIndexBy(array, value, identity, retHighest);\n    }\n    /**\n     * The base implementation of `_.sortedIndexBy` and `_.sortedLastIndexBy`\n     * which invokes `iteratee` for `value` and each element of `array` to compute\n     * their sort ranking. The iteratee is invoked with one argument; (value).\n     *\n     * @private\n     * @param {Array} array The sorted array to inspect.\n     * @param {*} value The value to evaluate.\n     * @param {Function} iteratee The iteratee invoked per element.\n     * @param {boolean} [retHighest] Specify returning the highest qualified index.\n     * @returns {number} Returns the index at which `value` should be inserted\n     *  into `array`.\n     */\n\n\n    function baseSortedIndexBy(array, value, iteratee, retHighest) {\n      value = iteratee(value);\n      var low = 0,\n          high = array == null ? 0 : array.length,\n          valIsNaN = value !== value,\n          valIsNull = value === null,\n          valIsSymbol = isSymbol(value),\n          valIsUndefined = value === undefined;\n\n      while (low < high) {\n        var mid = nativeFloor((low + high) / 2),\n            computed = iteratee(array[mid]),\n            othIsDefined = computed !== undefined,\n            othIsNull = computed === null,\n            othIsReflexive = computed === computed,\n            othIsSymbol = isSymbol(computed);\n\n        if (valIsNaN) {\n          var setLow = retHighest || othIsReflexive;\n        } else if (valIsUndefined) {\n          setLow = othIsReflexive && (retHighest || othIsDefined);\n        } else if (valIsNull) {\n          setLow = othIsReflexive && othIsDefined && (retHighest || !othIsNull);\n        } else if (valIsSymbol) {\n          setLow = othIsReflexive && othIsDefined && !othIsNull && (retHighest || !othIsSymbol);\n        } else if (othIsNull || othIsSymbol) {\n          setLow = false;\n        } else {\n          setLow = retHighest ? computed <= value : computed < value;\n        }\n\n        if (setLow) {\n          low = mid + 1;\n        } else {\n          high = mid;\n        }\n      }\n\n      return nativeMin(high, MAX_ARRAY_INDEX);\n    }\n    /**\n     * The base implementation of `_.sortedUniq` and `_.sortedUniqBy` without\n     * support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array} array The array to inspect.\n     * @param {Function} [iteratee] The iteratee invoked per element.\n     * @returns {Array} Returns the new duplicate free array.\n     */\n\n\n    function baseSortedUniq(array, iteratee) {\n      var index = -1,\n          length = array.length,\n          resIndex = 0,\n          result = [];\n\n      while (++index < length) {\n        var value = array[index],\n            computed = iteratee ? iteratee(value) : value;\n\n        if (!index || !eq(computed, seen)) {\n          var seen = computed;\n          result[resIndex++] = value === 0 ? 0 : value;\n        }\n      }\n\n      return result;\n    }\n    /**\n     * The base implementation of `_.toNumber` which doesn't ensure correct\n     * conversions of binary, hexadecimal, or octal string values.\n     *\n     * @private\n     * @param {*} value The value to process.\n     * @returns {number} Returns the number.\n     */\n\n\n    function baseToNumber(value) {\n      if (typeof value == 'number') {\n        return value;\n      }\n\n      if (isSymbol(value)) {\n        return NAN;\n      }\n\n      return +value;\n    }\n    /**\n     * The base implementation of `_.toString` which doesn't convert nullish\n     * values to empty strings.\n     *\n     * @private\n     * @param {*} value The value to process.\n     * @returns {string} Returns the string.\n     */\n\n\n    function baseToString(value) {\n      // Exit early for strings to avoid a performance hit in some environments.\n      if (typeof value == 'string') {\n        return value;\n      }\n\n      if (isArray(value)) {\n        // Recursively convert values (susceptible to call stack limits).\n        return arrayMap(value, baseToString) + '';\n      }\n\n      if (isSymbol(value)) {\n        return symbolToString ? symbolToString.call(value) : '';\n      }\n\n      var result = value + '';\n      return result == '0' && 1 / value == -INFINITY ? '-0' : result;\n    }\n    /**\n     * The base implementation of `_.uniqBy` without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array} array The array to inspect.\n     * @param {Function} [iteratee] The iteratee invoked per element.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new duplicate free array.\n     */\n\n\n    function baseUniq(array, iteratee, comparator) {\n      var index = -1,\n          includes = arrayIncludes,\n          length = array.length,\n          isCommon = true,\n          result = [],\n          seen = result;\n\n      if (comparator) {\n        isCommon = false;\n        includes = arrayIncludesWith;\n      } else if (length >= LARGE_ARRAY_SIZE) {\n        var set = iteratee ? null : createSet(array);\n\n        if (set) {\n          return setToArray(set);\n        }\n\n        isCommon = false;\n        includes = cacheHas;\n        seen = new SetCache();\n      } else {\n        seen = iteratee ? [] : result;\n      }\n\n      outer: while (++index < length) {\n        var value = array[index],\n            computed = iteratee ? iteratee(value) : value;\n        value = comparator || value !== 0 ? value : 0;\n\n        if (isCommon && computed === computed) {\n          var seenIndex = seen.length;\n\n          while (seenIndex--) {\n            if (seen[seenIndex] === computed) {\n              continue outer;\n            }\n          }\n\n          if (iteratee) {\n            seen.push(computed);\n          }\n\n          result.push(value);\n        } else if (!includes(seen, computed, comparator)) {\n          if (seen !== result) {\n            seen.push(computed);\n          }\n\n          result.push(value);\n        }\n      }\n\n      return result;\n    }\n    /**\n     * The base implementation of `_.unset`.\n     *\n     * @private\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The property path to unset.\n     * @returns {boolean} Returns `true` if the property is deleted, else `false`.\n     */\n\n\n    function baseUnset(object, path) {\n      path = castPath(path, object);\n      object = parent(object, path);\n      return object == null || delete object[toKey(last(path))];\n    }\n    /**\n     * The base implementation of `_.update`.\n     *\n     * @private\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The path of the property to update.\n     * @param {Function} updater The function to produce the updated value.\n     * @param {Function} [customizer] The function to customize path creation.\n     * @returns {Object} Returns `object`.\n     */\n\n\n    function baseUpdate(object, path, updater, customizer) {\n      return baseSet(object, path, updater(baseGet(object, path)), customizer);\n    }\n    /**\n     * The base implementation of methods like `_.dropWhile` and `_.takeWhile`\n     * without support for iteratee shorthands.\n     *\n     * @private\n     * @param {Array} array The array to query.\n     * @param {Function} predicate The function invoked per iteration.\n     * @param {boolean} [isDrop] Specify dropping elements instead of taking them.\n     * @param {boolean} [fromRight] Specify iterating from right to left.\n     * @returns {Array} Returns the slice of `array`.\n     */\n\n\n    function baseWhile(array, predicate, isDrop, fromRight) {\n      var length = array.length,\n          index = fromRight ? length : -1;\n\n      while ((fromRight ? index-- : ++index < length) && predicate(array[index], index, array)) {}\n\n      return isDrop ? baseSlice(array, fromRight ? 0 : index, fromRight ? index + 1 : length) : baseSlice(array, fromRight ? index + 1 : 0, fromRight ? length : index);\n    }\n    /**\n     * The base implementation of `wrapperValue` which returns the result of\n     * performing a sequence of actions on the unwrapped `value`, where each\n     * successive action is supplied the return value of the previous.\n     *\n     * @private\n     * @param {*} value The unwrapped value.\n     * @param {Array} actions Actions to perform to resolve the unwrapped value.\n     * @returns {*} Returns the resolved value.\n     */\n\n\n    function baseWrapperValue(value, actions) {\n      var result = value;\n\n      if (result instanceof LazyWrapper) {\n        result = result.value();\n      }\n\n      return arrayReduce(actions, function (result, action) {\n        return action.func.apply(action.thisArg, arrayPush([result], action.args));\n      }, result);\n    }\n    /**\n     * The base implementation of methods like `_.xor`, without support for\n     * iteratee shorthands, that accepts an array of arrays to inspect.\n     *\n     * @private\n     * @param {Array} arrays The arrays to inspect.\n     * @param {Function} [iteratee] The iteratee invoked per element.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new array of values.\n     */\n\n\n    function baseXor(arrays, iteratee, comparator) {\n      var length = arrays.length;\n\n      if (length < 2) {\n        return length ? baseUniq(arrays[0]) : [];\n      }\n\n      var index = -1,\n          result = Array(length);\n\n      while (++index < length) {\n        var array = arrays[index],\n            othIndex = -1;\n\n        while (++othIndex < length) {\n          if (othIndex != index) {\n            result[index] = baseDifference(result[index] || array, arrays[othIndex], iteratee, comparator);\n          }\n        }\n      }\n\n      return baseUniq(baseFlatten(result, 1), iteratee, comparator);\n    }\n    /**\n     * This base implementation of `_.zipObject` which assigns values using `assignFunc`.\n     *\n     * @private\n     * @param {Array} props The property identifiers.\n     * @param {Array} values The property values.\n     * @param {Function} assignFunc The function to assign values.\n     * @returns {Object} Returns the new object.\n     */\n\n\n    function baseZipObject(props, values, assignFunc) {\n      var index = -1,\n          length = props.length,\n          valsLength = values.length,\n          result = {};\n\n      while (++index < length) {\n        var value = index < valsLength ? values[index] : undefined;\n        assignFunc(result, props[index], value);\n      }\n\n      return result;\n    }\n    /**\n     * Casts `value` to an empty array if it's not an array like object.\n     *\n     * @private\n     * @param {*} value The value to inspect.\n     * @returns {Array|Object} Returns the cast array-like object.\n     */\n\n\n    function castArrayLikeObject(value) {\n      return isArrayLikeObject(value) ? value : [];\n    }\n    /**\n     * Casts `value` to `identity` if it's not a function.\n     *\n     * @private\n     * @param {*} value The value to inspect.\n     * @returns {Function} Returns cast function.\n     */\n\n\n    function castFunction(value) {\n      return typeof value == 'function' ? value : identity;\n    }\n    /**\n     * Casts `value` to a path array if it's not one.\n     *\n     * @private\n     * @param {*} value The value to inspect.\n     * @param {Object} [object] The object to query keys on.\n     * @returns {Array} Returns the cast property path array.\n     */\n\n\n    function castPath(value, object) {\n      if (isArray(value)) {\n        return value;\n      }\n\n      return isKey(value, object) ? [value] : stringToPath(toString(value));\n    }\n    /**\n     * A `baseRest` alias which can be replaced with `identity` by module\n     * replacement plugins.\n     *\n     * @private\n     * @type {Function}\n     * @param {Function} func The function to apply a rest parameter to.\n     * @returns {Function} Returns the new function.\n     */\n\n\n    var castRest = baseRest;\n    /**\n     * Casts `array` to a slice if it's needed.\n     *\n     * @private\n     * @param {Array} array The array to inspect.\n     * @param {number} start The start position.\n     * @param {number} [end=array.length] The end position.\n     * @returns {Array} Returns the cast slice.\n     */\n\n    function castSlice(array, start, end) {\n      var length = array.length;\n      end = end === undefined ? length : end;\n      return !start && end >= length ? array : baseSlice(array, start, end);\n    }\n    /**\n     * A simple wrapper around the global [`clearTimeout`](https://mdn.io/clearTimeout).\n     *\n     * @private\n     * @param {number|Object} id The timer id or timeout object of the timer to clear.\n     */\n\n\n    var clearTimeout = ctxClearTimeout || function (id) {\n      return root.clearTimeout(id);\n    };\n    /**\n     * Creates a clone of  `buffer`.\n     *\n     * @private\n     * @param {Buffer} buffer The buffer to clone.\n     * @param {boolean} [isDeep] Specify a deep clone.\n     * @returns {Buffer} Returns the cloned buffer.\n     */\n\n\n    function cloneBuffer(buffer, isDeep) {\n      if (isDeep) {\n        return buffer.slice();\n      }\n\n      var length = buffer.length,\n          result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);\n      buffer.copy(result);\n      return result;\n    }\n    /**\n     * Creates a clone of `arrayBuffer`.\n     *\n     * @private\n     * @param {ArrayBuffer} arrayBuffer The array buffer to clone.\n     * @returns {ArrayBuffer} Returns the cloned array buffer.\n     */\n\n\n    function cloneArrayBuffer(arrayBuffer) {\n      var result = new arrayBuffer.constructor(arrayBuffer.byteLength);\n      new Uint8Array(result).set(new Uint8Array(arrayBuffer));\n      return result;\n    }\n    /**\n     * Creates a clone of `dataView`.\n     *\n     * @private\n     * @param {Object} dataView The data view to clone.\n     * @param {boolean} [isDeep] Specify a deep clone.\n     * @returns {Object} Returns the cloned data view.\n     */\n\n\n    function cloneDataView(dataView, isDeep) {\n      var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer;\n      return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);\n    }\n    /**\n     * Creates a clone of `regexp`.\n     *\n     * @private\n     * @param {Object} regexp The regexp to clone.\n     * @returns {Object} Returns the cloned regexp.\n     */\n\n\n    function cloneRegExp(regexp) {\n      var result = new regexp.constructor(regexp.source, reFlags.exec(regexp));\n      result.lastIndex = regexp.lastIndex;\n      return result;\n    }\n    /**\n     * Creates a clone of the `symbol` object.\n     *\n     * @private\n     * @param {Object} symbol The symbol object to clone.\n     * @returns {Object} Returns the cloned symbol object.\n     */\n\n\n    function cloneSymbol(symbol) {\n      return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {};\n    }\n    /**\n     * Creates a clone of `typedArray`.\n     *\n     * @private\n     * @param {Object} typedArray The typed array to clone.\n     * @param {boolean} [isDeep] Specify a deep clone.\n     * @returns {Object} Returns the cloned typed array.\n     */\n\n\n    function cloneTypedArray(typedArray, isDeep) {\n      var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;\n      return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);\n    }\n    /**\n     * Compares values to sort them in ascending order.\n     *\n     * @private\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {number} Returns the sort order indicator for `value`.\n     */\n\n\n    function compareAscending(value, other) {\n      if (value !== other) {\n        var valIsDefined = value !== undefined,\n            valIsNull = value === null,\n            valIsReflexive = value === value,\n            valIsSymbol = isSymbol(value);\n        var othIsDefined = other !== undefined,\n            othIsNull = other === null,\n            othIsReflexive = other === other,\n            othIsSymbol = isSymbol(other);\n\n        if (!othIsNull && !othIsSymbol && !valIsSymbol && value > other || valIsSymbol && othIsDefined && othIsReflexive && !othIsNull && !othIsSymbol || valIsNull && othIsDefined && othIsReflexive || !valIsDefined && othIsReflexive || !valIsReflexive) {\n          return 1;\n        }\n\n        if (!valIsNull && !valIsSymbol && !othIsSymbol && value < other || othIsSymbol && valIsDefined && valIsReflexive && !valIsNull && !valIsSymbol || othIsNull && valIsDefined && valIsReflexive || !othIsDefined && valIsReflexive || !othIsReflexive) {\n          return -1;\n        }\n      }\n\n      return 0;\n    }\n    /**\n     * Used by `_.orderBy` to compare multiple properties of a value to another\n     * and stable sort them.\n     *\n     * If `orders` is unspecified, all values are sorted in ascending order. Otherwise,\n     * specify an order of \"desc\" for descending or \"asc\" for ascending sort order\n     * of corresponding values.\n     *\n     * @private\n     * @param {Object} object The object to compare.\n     * @param {Object} other The other object to compare.\n     * @param {boolean[]|string[]} orders The order to sort by for each property.\n     * @returns {number} Returns the sort order indicator for `object`.\n     */\n\n\n    function compareMultiple(object, other, orders) {\n      var index = -1,\n          objCriteria = object.criteria,\n          othCriteria = other.criteria,\n          length = objCriteria.length,\n          ordersLength = orders.length;\n\n      while (++index < length) {\n        var result = compareAscending(objCriteria[index], othCriteria[index]);\n\n        if (result) {\n          if (index >= ordersLength) {\n            return result;\n          }\n\n          var order = orders[index];\n          return result * (order == 'desc' ? -1 : 1);\n        }\n      } // Fixes an `Array#sort` bug in the JS engine embedded in Adobe applications\n      // that causes it, under certain circumstances, to provide the same value for\n      // `object` and `other`. See https://github.com/jashkenas/underscore/pull/1247\n      // for more details.\n      //\n      // This also ensures a stable sort in V8 and other engines.\n      // See https://bugs.chromium.org/p/v8/issues/detail?id=90 for more details.\n\n\n      return object.index - other.index;\n    }\n    /**\n     * Creates an array that is the composition of partially applied arguments,\n     * placeholders, and provided arguments into a single array of arguments.\n     *\n     * @private\n     * @param {Array} args The provided arguments.\n     * @param {Array} partials The arguments to prepend to those provided.\n     * @param {Array} holders The `partials` placeholder indexes.\n     * @params {boolean} [isCurried] Specify composing for a curried function.\n     * @returns {Array} Returns the new array of composed arguments.\n     */\n\n\n    function composeArgs(args, partials, holders, isCurried) {\n      var argsIndex = -1,\n          argsLength = args.length,\n          holdersLength = holders.length,\n          leftIndex = -1,\n          leftLength = partials.length,\n          rangeLength = nativeMax(argsLength - holdersLength, 0),\n          result = Array(leftLength + rangeLength),\n          isUncurried = !isCurried;\n\n      while (++leftIndex < leftLength) {\n        result[leftIndex] = partials[leftIndex];\n      }\n\n      while (++argsIndex < holdersLength) {\n        if (isUncurried || argsIndex < argsLength) {\n          result[holders[argsIndex]] = args[argsIndex];\n        }\n      }\n\n      while (rangeLength--) {\n        result[leftIndex++] = args[argsIndex++];\n      }\n\n      return result;\n    }\n    /**\n     * This function is like `composeArgs` except that the arguments composition\n     * is tailored for `_.partialRight`.\n     *\n     * @private\n     * @param {Array} args The provided arguments.\n     * @param {Array} partials The arguments to append to those provided.\n     * @param {Array} holders The `partials` placeholder indexes.\n     * @params {boolean} [isCurried] Specify composing for a curried function.\n     * @returns {Array} Returns the new array of composed arguments.\n     */\n\n\n    function composeArgsRight(args, partials, holders, isCurried) {\n      var argsIndex = -1,\n          argsLength = args.length,\n          holdersIndex = -1,\n          holdersLength = holders.length,\n          rightIndex = -1,\n          rightLength = partials.length,\n          rangeLength = nativeMax(argsLength - holdersLength, 0),\n          result = Array(rangeLength + rightLength),\n          isUncurried = !isCurried;\n\n      while (++argsIndex < rangeLength) {\n        result[argsIndex] = args[argsIndex];\n      }\n\n      var offset = argsIndex;\n\n      while (++rightIndex < rightLength) {\n        result[offset + rightIndex] = partials[rightIndex];\n      }\n\n      while (++holdersIndex < holdersLength) {\n        if (isUncurried || argsIndex < argsLength) {\n          result[offset + holders[holdersIndex]] = args[argsIndex++];\n        }\n      }\n\n      return result;\n    }\n    /**\n     * Copies the values of `source` to `array`.\n     *\n     * @private\n     * @param {Array} source The array to copy values from.\n     * @param {Array} [array=[]] The array to copy values to.\n     * @returns {Array} Returns `array`.\n     */\n\n\n    function copyArray(source, array) {\n      var index = -1,\n          length = source.length;\n      array || (array = Array(length));\n\n      while (++index < length) {\n        array[index] = source[index];\n      }\n\n      return array;\n    }\n    /**\n     * Copies properties of `source` to `object`.\n     *\n     * @private\n     * @param {Object} source The object to copy properties from.\n     * @param {Array} props The property identifiers to copy.\n     * @param {Object} [object={}] The object to copy properties to.\n     * @param {Function} [customizer] The function to customize copied values.\n     * @returns {Object} Returns `object`.\n     */\n\n\n    function copyObject(source, props, object, customizer) {\n      var isNew = !object;\n      object || (object = {});\n      var index = -1,\n          length = props.length;\n\n      while (++index < length) {\n        var key = props[index];\n        var newValue = customizer ? customizer(object[key], source[key], key, object, source) : undefined;\n\n        if (newValue === undefined) {\n          newValue = source[key];\n        }\n\n        if (isNew) {\n          baseAssignValue(object, key, newValue);\n        } else {\n          assignValue(object, key, newValue);\n        }\n      }\n\n      return object;\n    }\n    /**\n     * Copies own symbols of `source` to `object`.\n     *\n     * @private\n     * @param {Object} source The object to copy symbols from.\n     * @param {Object} [object={}] The object to copy symbols to.\n     * @returns {Object} Returns `object`.\n     */\n\n\n    function copySymbols(source, object) {\n      return copyObject(source, getSymbols(source), object);\n    }\n    /**\n     * Copies own and inherited symbols of `source` to `object`.\n     *\n     * @private\n     * @param {Object} source The object to copy symbols from.\n     * @param {Object} [object={}] The object to copy symbols to.\n     * @returns {Object} Returns `object`.\n     */\n\n\n    function copySymbolsIn(source, object) {\n      return copyObject(source, getSymbolsIn(source), object);\n    }\n    /**\n     * Creates a function like `_.groupBy`.\n     *\n     * @private\n     * @param {Function} setter The function to set accumulator values.\n     * @param {Function} [initializer] The accumulator object initializer.\n     * @returns {Function} Returns the new aggregator function.\n     */\n\n\n    function createAggregator(setter, initializer) {\n      return function (collection, iteratee) {\n        var func = isArray(collection) ? arrayAggregator : baseAggregator,\n            accumulator = initializer ? initializer() : {};\n        return func(collection, setter, getIteratee(iteratee, 2), accumulator);\n      };\n    }\n    /**\n     * Creates a function like `_.assign`.\n     *\n     * @private\n     * @param {Function} assigner The function to assign values.\n     * @returns {Function} Returns the new assigner function.\n     */\n\n\n    function createAssigner(assigner) {\n      return baseRest(function (object, sources) {\n        var index = -1,\n            length = sources.length,\n            customizer = length > 1 ? sources[length - 1] : undefined,\n            guard = length > 2 ? sources[2] : undefined;\n        customizer = assigner.length > 3 && typeof customizer == 'function' ? (length--, customizer) : undefined;\n\n        if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n          customizer = length < 3 ? undefined : customizer;\n          length = 1;\n        }\n\n        object = Object(object);\n\n        while (++index < length) {\n          var source = sources[index];\n\n          if (source) {\n            assigner(object, source, index, customizer);\n          }\n        }\n\n        return object;\n      });\n    }\n    /**\n     * Creates a `baseEach` or `baseEachRight` function.\n     *\n     * @private\n     * @param {Function} eachFunc The function to iterate over a collection.\n     * @param {boolean} [fromRight] Specify iterating from right to left.\n     * @returns {Function} Returns the new base function.\n     */\n\n\n    function createBaseEach(eachFunc, fromRight) {\n      return function (collection, iteratee) {\n        if (collection == null) {\n          return collection;\n        }\n\n        if (!isArrayLike(collection)) {\n          return eachFunc(collection, iteratee);\n        }\n\n        var length = collection.length,\n            index = fromRight ? length : -1,\n            iterable = Object(collection);\n\n        while (fromRight ? index-- : ++index < length) {\n          if (iteratee(iterable[index], index, iterable) === false) {\n            break;\n          }\n        }\n\n        return collection;\n      };\n    }\n    /**\n     * Creates a base function for methods like `_.forIn` and `_.forOwn`.\n     *\n     * @private\n     * @param {boolean} [fromRight] Specify iterating from right to left.\n     * @returns {Function} Returns the new base function.\n     */\n\n\n    function createBaseFor(fromRight) {\n      return function (object, iteratee, keysFunc) {\n        var index = -1,\n            iterable = Object(object),\n            props = keysFunc(object),\n            length = props.length;\n\n        while (length--) {\n          var key = props[fromRight ? length : ++index];\n\n          if (iteratee(iterable[key], key, iterable) === false) {\n            break;\n          }\n        }\n\n        return object;\n      };\n    }\n    /**\n     * Creates a function that wraps `func` to invoke it with the optional `this`\n     * binding of `thisArg`.\n     *\n     * @private\n     * @param {Function} func The function to wrap.\n     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n     * @param {*} [thisArg] The `this` binding of `func`.\n     * @returns {Function} Returns the new wrapped function.\n     */\n\n\n    function createBind(func, bitmask, thisArg) {\n      var isBind = bitmask & WRAP_BIND_FLAG,\n          Ctor = createCtor(func);\n\n      function wrapper() {\n        var fn = this && this !== root && this instanceof wrapper ? Ctor : func;\n        return fn.apply(isBind ? thisArg : this, arguments);\n      }\n\n      return wrapper;\n    }\n    /**\n     * Creates a function like `_.lowerFirst`.\n     *\n     * @private\n     * @param {string} methodName The name of the `String` case method to use.\n     * @returns {Function} Returns the new case function.\n     */\n\n\n    function createCaseFirst(methodName) {\n      return function (string) {\n        string = toString(string);\n        var strSymbols = hasUnicode(string) ? stringToArray(string) : undefined;\n        var chr = strSymbols ? strSymbols[0] : string.charAt(0);\n        var trailing = strSymbols ? castSlice(strSymbols, 1).join('') : string.slice(1);\n        return chr[methodName]() + trailing;\n      };\n    }\n    /**\n     * Creates a function like `_.camelCase`.\n     *\n     * @private\n     * @param {Function} callback The function to combine each word.\n     * @returns {Function} Returns the new compounder function.\n     */\n\n\n    function createCompounder(callback) {\n      return function (string) {\n        return arrayReduce(words(deburr(string).replace(reApos, '')), callback, '');\n      };\n    }\n    /**\n     * Creates a function that produces an instance of `Ctor` regardless of\n     * whether it was invoked as part of a `new` expression or by `call` or `apply`.\n     *\n     * @private\n     * @param {Function} Ctor The constructor to wrap.\n     * @returns {Function} Returns the new wrapped function.\n     */\n\n\n    function createCtor(Ctor) {\n      return function () {\n        // Use a `switch` statement to work with class constructors. See\n        // http://ecma-international.org/ecma-262/7.0/#sec-ecmascript-function-objects-call-thisargument-argumentslist\n        // for more details.\n        var args = arguments;\n\n        switch (args.length) {\n          case 0:\n            return new Ctor();\n\n          case 1:\n            return new Ctor(args[0]);\n\n          case 2:\n            return new Ctor(args[0], args[1]);\n\n          case 3:\n            return new Ctor(args[0], args[1], args[2]);\n\n          case 4:\n            return new Ctor(args[0], args[1], args[2], args[3]);\n\n          case 5:\n            return new Ctor(args[0], args[1], args[2], args[3], args[4]);\n\n          case 6:\n            return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5]);\n\n          case 7:\n            return new Ctor(args[0], args[1], args[2], args[3], args[4], args[5], args[6]);\n        }\n\n        var thisBinding = baseCreate(Ctor.prototype),\n            result = Ctor.apply(thisBinding, args); // Mimic the constructor's `return` behavior.\n        // See https://es5.github.io/#x13.2.2 for more details.\n\n        return isObject(result) ? result : thisBinding;\n      };\n    }\n    /**\n     * Creates a function that wraps `func` to enable currying.\n     *\n     * @private\n     * @param {Function} func The function to wrap.\n     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n     * @param {number} arity The arity of `func`.\n     * @returns {Function} Returns the new wrapped function.\n     */\n\n\n    function createCurry(func, bitmask, arity) {\n      var Ctor = createCtor(func);\n\n      function wrapper() {\n        var length = arguments.length,\n            args = Array(length),\n            index = length,\n            placeholder = getHolder(wrapper);\n\n        while (index--) {\n          args[index] = arguments[index];\n        }\n\n        var holders = length < 3 && args[0] !== placeholder && args[length - 1] !== placeholder ? [] : replaceHolders(args, placeholder);\n        length -= holders.length;\n\n        if (length < arity) {\n          return createRecurry(func, bitmask, createHybrid, wrapper.placeholder, undefined, args, holders, undefined, undefined, arity - length);\n        }\n\n        var fn = this && this !== root && this instanceof wrapper ? Ctor : func;\n        return apply(fn, this, args);\n      }\n\n      return wrapper;\n    }\n    /**\n     * Creates a `_.find` or `_.findLast` function.\n     *\n     * @private\n     * @param {Function} findIndexFunc The function to find the collection index.\n     * @returns {Function} Returns the new find function.\n     */\n\n\n    function createFind(findIndexFunc) {\n      return function (collection, predicate, fromIndex) {\n        var iterable = Object(collection);\n\n        if (!isArrayLike(collection)) {\n          var iteratee = getIteratee(predicate, 3);\n          collection = keys(collection);\n\n          predicate = function predicate(key) {\n            return iteratee(iterable[key], key, iterable);\n          };\n        }\n\n        var index = findIndexFunc(collection, predicate, fromIndex);\n        return index > -1 ? iterable[iteratee ? collection[index] : index] : undefined;\n      };\n    }\n    /**\n     * Creates a `_.flow` or `_.flowRight` function.\n     *\n     * @private\n     * @param {boolean} [fromRight] Specify iterating from right to left.\n     * @returns {Function} Returns the new flow function.\n     */\n\n\n    function createFlow(fromRight) {\n      return flatRest(function (funcs) {\n        var length = funcs.length,\n            index = length,\n            prereq = LodashWrapper.prototype.thru;\n\n        if (fromRight) {\n          funcs.reverse();\n        }\n\n        while (index--) {\n          var func = funcs[index];\n\n          if (typeof func != 'function') {\n            throw new TypeError(FUNC_ERROR_TEXT);\n          }\n\n          if (prereq && !wrapper && getFuncName(func) == 'wrapper') {\n            var wrapper = new LodashWrapper([], true);\n          }\n        }\n\n        index = wrapper ? index : length;\n\n        while (++index < length) {\n          func = funcs[index];\n          var funcName = getFuncName(func),\n              data = funcName == 'wrapper' ? getData(func) : undefined;\n\n          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) {\n            wrapper = wrapper[getFuncName(data[0])].apply(wrapper, data[3]);\n          } else {\n            wrapper = func.length == 1 && isLaziable(func) ? wrapper[funcName]() : wrapper.thru(func);\n          }\n        }\n\n        return function () {\n          var args = arguments,\n              value = args[0];\n\n          if (wrapper && args.length == 1 && isArray(value)) {\n            return wrapper.plant(value).value();\n          }\n\n          var index = 0,\n              result = length ? funcs[index].apply(this, args) : value;\n\n          while (++index < length) {\n            result = funcs[index].call(this, result);\n          }\n\n          return result;\n        };\n      });\n    }\n    /**\n     * Creates a function that wraps `func` to invoke it with optional `this`\n     * binding of `thisArg`, partial application, and currying.\n     *\n     * @private\n     * @param {Function|string} func The function or method name to wrap.\n     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n     * @param {*} [thisArg] The `this` binding of `func`.\n     * @param {Array} [partials] The arguments to prepend to those provided to\n     *  the new function.\n     * @param {Array} [holders] The `partials` placeholder indexes.\n     * @param {Array} [partialsRight] The arguments to append to those provided\n     *  to the new function.\n     * @param {Array} [holdersRight] The `partialsRight` placeholder indexes.\n     * @param {Array} [argPos] The argument positions of the new function.\n     * @param {number} [ary] The arity cap of `func`.\n     * @param {number} [arity] The arity of `func`.\n     * @returns {Function} Returns the new wrapped function.\n     */\n\n\n    function createHybrid(func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity) {\n      var isAry = bitmask & WRAP_ARY_FLAG,\n          isBind = bitmask & WRAP_BIND_FLAG,\n          isBindKey = bitmask & WRAP_BIND_KEY_FLAG,\n          isCurried = bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG),\n          isFlip = bitmask & WRAP_FLIP_FLAG,\n          Ctor = isBindKey ? undefined : createCtor(func);\n\n      function wrapper() {\n        var length = arguments.length,\n            args = Array(length),\n            index = length;\n\n        while (index--) {\n          args[index] = arguments[index];\n        }\n\n        if (isCurried) {\n          var placeholder = getHolder(wrapper),\n              holdersCount = countHolders(args, placeholder);\n        }\n\n        if (partials) {\n          args = composeArgs(args, partials, holders, isCurried);\n        }\n\n        if (partialsRight) {\n          args = composeArgsRight(args, partialsRight, holdersRight, isCurried);\n        }\n\n        length -= holdersCount;\n\n        if (isCurried && length < arity) {\n          var newHolders = replaceHolders(args, placeholder);\n          return createRecurry(func, bitmask, createHybrid, wrapper.placeholder, thisArg, args, newHolders, argPos, ary, arity - length);\n        }\n\n        var thisBinding = isBind ? thisArg : this,\n            fn = isBindKey ? thisBinding[func] : func;\n        length = args.length;\n\n        if (argPos) {\n          args = reorder(args, argPos);\n        } else if (isFlip && length > 1) {\n          args.reverse();\n        }\n\n        if (isAry && ary < length) {\n          args.length = ary;\n        }\n\n        if (this && this !== root && this instanceof wrapper) {\n          fn = Ctor || createCtor(fn);\n        }\n\n        return fn.apply(thisBinding, args);\n      }\n\n      return wrapper;\n    }\n    /**\n     * Creates a function like `_.invertBy`.\n     *\n     * @private\n     * @param {Function} setter The function to set accumulator values.\n     * @param {Function} toIteratee The function to resolve iteratees.\n     * @returns {Function} Returns the new inverter function.\n     */\n\n\n    function createInverter(setter, toIteratee) {\n      return function (object, iteratee) {\n        return baseInverter(object, setter, toIteratee(iteratee), {});\n      };\n    }\n    /**\n     * Creates a function that performs a mathematical operation on two values.\n     *\n     * @private\n     * @param {Function} operator The function to perform the operation.\n     * @param {number} [defaultValue] The value used for `undefined` arguments.\n     * @returns {Function} Returns the new mathematical operation function.\n     */\n\n\n    function createMathOperation(operator, defaultValue) {\n      return function (value, other) {\n        var result;\n\n        if (value === undefined && other === undefined) {\n          return defaultValue;\n        }\n\n        if (value !== undefined) {\n          result = value;\n        }\n\n        if (other !== undefined) {\n          if (result === undefined) {\n            return other;\n          }\n\n          if (typeof value == 'string' || typeof other == 'string') {\n            value = baseToString(value);\n            other = baseToString(other);\n          } else {\n            value = baseToNumber(value);\n            other = baseToNumber(other);\n          }\n\n          result = operator(value, other);\n        }\n\n        return result;\n      };\n    }\n    /**\n     * Creates a function like `_.over`.\n     *\n     * @private\n     * @param {Function} arrayFunc The function to iterate over iteratees.\n     * @returns {Function} Returns the new over function.\n     */\n\n\n    function createOver(arrayFunc) {\n      return flatRest(function (iteratees) {\n        iteratees = arrayMap(iteratees, baseUnary(getIteratee()));\n        return baseRest(function (args) {\n          var thisArg = this;\n          return arrayFunc(iteratees, function (iteratee) {\n            return apply(iteratee, thisArg, args);\n          });\n        });\n      });\n    }\n    /**\n     * Creates the padding for `string` based on `length`. The `chars` string\n     * is truncated if the number of characters exceeds `length`.\n     *\n     * @private\n     * @param {number} length The padding length.\n     * @param {string} [chars=' '] The string used as padding.\n     * @returns {string} Returns the padding for `string`.\n     */\n\n\n    function createPadding(length, chars) {\n      chars = chars === undefined ? ' ' : baseToString(chars);\n      var charsLength = chars.length;\n\n      if (charsLength < 2) {\n        return charsLength ? baseRepeat(chars, length) : chars;\n      }\n\n      var result = baseRepeat(chars, nativeCeil(length / stringSize(chars)));\n      return hasUnicode(chars) ? castSlice(stringToArray(result), 0, length).join('') : result.slice(0, length);\n    }\n    /**\n     * Creates a function that wraps `func` to invoke it with the `this` binding\n     * of `thisArg` and `partials` prepended to the arguments it receives.\n     *\n     * @private\n     * @param {Function} func The function to wrap.\n     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n     * @param {*} thisArg The `this` binding of `func`.\n     * @param {Array} partials The arguments to prepend to those provided to\n     *  the new function.\n     * @returns {Function} Returns the new wrapped function.\n     */\n\n\n    function createPartial(func, bitmask, thisArg, partials) {\n      var isBind = bitmask & WRAP_BIND_FLAG,\n          Ctor = createCtor(func);\n\n      function wrapper() {\n        var argsIndex = -1,\n            argsLength = arguments.length,\n            leftIndex = -1,\n            leftLength = partials.length,\n            args = Array(leftLength + argsLength),\n            fn = this && this !== root && this instanceof wrapper ? Ctor : func;\n\n        while (++leftIndex < leftLength) {\n          args[leftIndex] = partials[leftIndex];\n        }\n\n        while (argsLength--) {\n          args[leftIndex++] = arguments[++argsIndex];\n        }\n\n        return apply(fn, isBind ? thisArg : this, args);\n      }\n\n      return wrapper;\n    }\n    /**\n     * Creates a `_.range` or `_.rangeRight` function.\n     *\n     * @private\n     * @param {boolean} [fromRight] Specify iterating from right to left.\n     * @returns {Function} Returns the new range function.\n     */\n\n\n    function createRange(fromRight) {\n      return function (start, end, step) {\n        if (step && typeof step != 'number' && isIterateeCall(start, end, step)) {\n          end = step = undefined;\n        } // Ensure the sign of `-0` is preserved.\n\n\n        start = toFinite(start);\n\n        if (end === undefined) {\n          end = start;\n          start = 0;\n        } else {\n          end = toFinite(end);\n        }\n\n        step = step === undefined ? start < end ? 1 : -1 : toFinite(step);\n        return baseRange(start, end, step, fromRight);\n      };\n    }\n    /**\n     * Creates a function that performs a relational operation on two values.\n     *\n     * @private\n     * @param {Function} operator The function to perform the operation.\n     * @returns {Function} Returns the new relational operation function.\n     */\n\n\n    function createRelationalOperation(operator) {\n      return function (value, other) {\n        if (!(typeof value == 'string' && typeof other == 'string')) {\n          value = toNumber(value);\n          other = toNumber(other);\n        }\n\n        return operator(value, other);\n      };\n    }\n    /**\n     * Creates a function that wraps `func` to continue currying.\n     *\n     * @private\n     * @param {Function} func The function to wrap.\n     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n     * @param {Function} wrapFunc The function to create the `func` wrapper.\n     * @param {*} placeholder The placeholder value.\n     * @param {*} [thisArg] The `this` binding of `func`.\n     * @param {Array} [partials] The arguments to prepend to those provided to\n     *  the new function.\n     * @param {Array} [holders] The `partials` placeholder indexes.\n     * @param {Array} [argPos] The argument positions of the new function.\n     * @param {number} [ary] The arity cap of `func`.\n     * @param {number} [arity] The arity of `func`.\n     * @returns {Function} Returns the new wrapped function.\n     */\n\n\n    function createRecurry(func, bitmask, wrapFunc, placeholder, thisArg, partials, holders, argPos, ary, arity) {\n      var isCurry = bitmask & WRAP_CURRY_FLAG,\n          newHolders = isCurry ? holders : undefined,\n          newHoldersRight = isCurry ? undefined : holders,\n          newPartials = isCurry ? partials : undefined,\n          newPartialsRight = isCurry ? undefined : partials;\n      bitmask |= isCurry ? WRAP_PARTIAL_FLAG : WRAP_PARTIAL_RIGHT_FLAG;\n      bitmask &= ~(isCurry ? WRAP_PARTIAL_RIGHT_FLAG : WRAP_PARTIAL_FLAG);\n\n      if (!(bitmask & WRAP_CURRY_BOUND_FLAG)) {\n        bitmask &= ~(WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG);\n      }\n\n      var newData = [func, bitmask, thisArg, newPartials, newHolders, newPartialsRight, newHoldersRight, argPos, ary, arity];\n      var result = wrapFunc.apply(undefined, newData);\n\n      if (isLaziable(func)) {\n        setData(result, newData);\n      }\n\n      result.placeholder = placeholder;\n      return setWrapToString(result, func, bitmask);\n    }\n    /**\n     * Creates a function like `_.round`.\n     *\n     * @private\n     * @param {string} methodName The name of the `Math` method to use when rounding.\n     * @returns {Function} Returns the new round function.\n     */\n\n\n    function createRound(methodName) {\n      var func = Math[methodName];\n      return function (number, precision) {\n        number = toNumber(number);\n        precision = precision == null ? 0 : nativeMin(toInteger(precision), 292);\n\n        if (precision && nativeIsFinite(number)) {\n          // Shift with exponential notation to avoid floating-point issues.\n          // See [MDN](https://mdn.io/round#Examples) for more details.\n          var pair = (toString(number) + 'e').split('e'),\n              value = func(pair[0] + 'e' + (+pair[1] + precision));\n          pair = (toString(value) + 'e').split('e');\n          return +(pair[0] + 'e' + (+pair[1] - precision));\n        }\n\n        return func(number);\n      };\n    }\n    /**\n     * Creates a set object of `values`.\n     *\n     * @private\n     * @param {Array} values The values to add to the set.\n     * @returns {Object} Returns the new set.\n     */\n\n\n    var createSet = !(Set && 1 / setToArray(new Set([, -0]))[1] == INFINITY) ? noop : function (values) {\n      return new Set(values);\n    };\n    /**\n     * Creates a `_.toPairs` or `_.toPairsIn` function.\n     *\n     * @private\n     * @param {Function} keysFunc The function to get the keys of a given object.\n     * @returns {Function} Returns the new pairs function.\n     */\n\n    function createToPairs(keysFunc) {\n      return function (object) {\n        var tag = getTag(object);\n\n        if (tag == mapTag) {\n          return mapToArray(object);\n        }\n\n        if (tag == setTag) {\n          return setToPairs(object);\n        }\n\n        return baseToPairs(object, keysFunc(object));\n      };\n    }\n    /**\n     * Creates a function that either curries or invokes `func` with optional\n     * `this` binding and partially applied arguments.\n     *\n     * @private\n     * @param {Function|string} func The function or method name to wrap.\n     * @param {number} bitmask The bitmask flags.\n     *    1 - `_.bind`\n     *    2 - `_.bindKey`\n     *    4 - `_.curry` or `_.curryRight` of a bound function\n     *    8 - `_.curry`\n     *   16 - `_.curryRight`\n     *   32 - `_.partial`\n     *   64 - `_.partialRight`\n     *  128 - `_.rearg`\n     *  256 - `_.ary`\n     *  512 - `_.flip`\n     * @param {*} [thisArg] The `this` binding of `func`.\n     * @param {Array} [partials] The arguments to be partially applied.\n     * @param {Array} [holders] The `partials` placeholder indexes.\n     * @param {Array} [argPos] The argument positions of the new function.\n     * @param {number} [ary] The arity cap of `func`.\n     * @param {number} [arity] The arity of `func`.\n     * @returns {Function} Returns the new wrapped function.\n     */\n\n\n    function createWrap(func, bitmask, thisArg, partials, holders, argPos, ary, arity) {\n      var isBindKey = bitmask & WRAP_BIND_KEY_FLAG;\n\n      if (!isBindKey && typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n\n      var length = partials ? partials.length : 0;\n\n      if (!length) {\n        bitmask &= ~(WRAP_PARTIAL_FLAG | WRAP_PARTIAL_RIGHT_FLAG);\n        partials = holders = undefined;\n      }\n\n      ary = ary === undefined ? ary : nativeMax(toInteger(ary), 0);\n      arity = arity === undefined ? arity : toInteger(arity);\n      length -= holders ? holders.length : 0;\n\n      if (bitmask & WRAP_PARTIAL_RIGHT_FLAG) {\n        var partialsRight = partials,\n            holdersRight = holders;\n        partials = holders = undefined;\n      }\n\n      var data = isBindKey ? undefined : getData(func);\n      var newData = [func, bitmask, thisArg, partials, holders, partialsRight, holdersRight, argPos, ary, arity];\n\n      if (data) {\n        mergeData(newData, data);\n      }\n\n      func = newData[0];\n      bitmask = newData[1];\n      thisArg = newData[2];\n      partials = newData[3];\n      holders = newData[4];\n      arity = newData[9] = newData[9] === undefined ? isBindKey ? 0 : func.length : nativeMax(newData[9] - length, 0);\n\n      if (!arity && bitmask & (WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG)) {\n        bitmask &= ~(WRAP_CURRY_FLAG | WRAP_CURRY_RIGHT_FLAG);\n      }\n\n      if (!bitmask || bitmask == WRAP_BIND_FLAG) {\n        var result = createBind(func, bitmask, thisArg);\n      } else if (bitmask == WRAP_CURRY_FLAG || bitmask == WRAP_CURRY_RIGHT_FLAG) {\n        result = createCurry(func, bitmask, arity);\n      } else if ((bitmask == WRAP_PARTIAL_FLAG || bitmask == (WRAP_BIND_FLAG | WRAP_PARTIAL_FLAG)) && !holders.length) {\n        result = createPartial(func, bitmask, thisArg, partials);\n      } else {\n        result = createHybrid.apply(undefined, newData);\n      }\n\n      var setter = data ? baseSetData : setData;\n      return setWrapToString(setter(result, newData), func, bitmask);\n    }\n    /**\n     * Used by `_.defaults` to customize its `_.assignIn` use to assign properties\n     * of source objects to the destination object for all destination properties\n     * that resolve to `undefined`.\n     *\n     * @private\n     * @param {*} objValue The destination value.\n     * @param {*} srcValue The source value.\n     * @param {string} key The key of the property to assign.\n     * @param {Object} object The parent object of `objValue`.\n     * @returns {*} Returns the value to assign.\n     */\n\n\n    function customDefaultsAssignIn(objValue, srcValue, key, object) {\n      if (objValue === undefined || eq(objValue, objectProto[key]) && !hasOwnProperty.call(object, key)) {\n        return srcValue;\n      }\n\n      return objValue;\n    }\n    /**\n     * Used by `_.defaultsDeep` to customize its `_.merge` use to merge source\n     * objects into destination objects that are passed thru.\n     *\n     * @private\n     * @param {*} objValue The destination value.\n     * @param {*} srcValue The source value.\n     * @param {string} key The key of the property to merge.\n     * @param {Object} object The parent object of `objValue`.\n     * @param {Object} source The parent object of `srcValue`.\n     * @param {Object} [stack] Tracks traversed source values and their merged\n     *  counterparts.\n     * @returns {*} Returns the value to assign.\n     */\n\n\n    function customDefaultsMerge(objValue, srcValue, key, object, source, stack) {\n      if (isObject(objValue) && isObject(srcValue)) {\n        // Recursively merge objects and arrays (susceptible to call stack limits).\n        stack.set(srcValue, objValue);\n        baseMerge(objValue, srcValue, undefined, customDefaultsMerge, stack);\n        stack['delete'](srcValue);\n      }\n\n      return objValue;\n    }\n    /**\n     * Used by `_.omit` to customize its `_.cloneDeep` use to only clone plain\n     * objects.\n     *\n     * @private\n     * @param {*} value The value to inspect.\n     * @param {string} key The key of the property to inspect.\n     * @returns {*} Returns the uncloned value or `undefined` to defer cloning to `_.cloneDeep`.\n     */\n\n\n    function customOmitClone(value) {\n      return isPlainObject(value) ? undefined : value;\n    }\n    /**\n     * A specialized version of `baseIsEqualDeep` for arrays with support for\n     * partial deep comparisons.\n     *\n     * @private\n     * @param {Array} array The array to compare.\n     * @param {Array} other The other array to compare.\n     * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n     * @param {Function} customizer The function to customize comparisons.\n     * @param {Function} equalFunc The function to determine equivalents of values.\n     * @param {Object} stack Tracks traversed `array` and `other` objects.\n     * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.\n     */\n\n\n    function equalArrays(array, other, bitmask, customizer, equalFunc, stack) {\n      var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n          arrLength = array.length,\n          othLength = other.length;\n\n      if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n        return false;\n      } // Assume cyclic values are equal.\n\n\n      var stacked = stack.get(array);\n\n      if (stacked && stack.get(other)) {\n        return stacked == other;\n      }\n\n      var index = -1,\n          result = true,\n          seen = bitmask & COMPARE_UNORDERED_FLAG ? new SetCache() : undefined;\n      stack.set(array, other);\n      stack.set(other, array); // Ignore non-index properties.\n\n      while (++index < arrLength) {\n        var arrValue = array[index],\n            othValue = other[index];\n\n        if (customizer) {\n          var compared = isPartial ? customizer(othValue, arrValue, index, other, array, stack) : customizer(arrValue, othValue, index, array, other, stack);\n        }\n\n        if (compared !== undefined) {\n          if (compared) {\n            continue;\n          }\n\n          result = false;\n          break;\n        } // Recursively compare arrays (susceptible to call stack limits).\n\n\n        if (seen) {\n          if (!arraySome(other, function (othValue, othIndex) {\n            if (!cacheHas(seen, othIndex) && (arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\n              return seen.push(othIndex);\n            }\n          })) {\n            result = false;\n            break;\n          }\n        } else if (!(arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\n          result = false;\n          break;\n        }\n      }\n\n      stack['delete'](array);\n      stack['delete'](other);\n      return result;\n    }\n    /**\n     * A specialized version of `baseIsEqualDeep` for comparing objects of\n     * the same `toStringTag`.\n     *\n     * **Note:** This function only supports comparing values with tags of\n     * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.\n     *\n     * @private\n     * @param {Object} object The object to compare.\n     * @param {Object} other The other object to compare.\n     * @param {string} tag The `toStringTag` of the objects to compare.\n     * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n     * @param {Function} customizer The function to customize comparisons.\n     * @param {Function} equalFunc The function to determine equivalents of values.\n     * @param {Object} stack Tracks traversed `object` and `other` objects.\n     * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n     */\n\n\n    function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {\n      switch (tag) {\n        case dataViewTag:\n          if (object.byteLength != other.byteLength || object.byteOffset != other.byteOffset) {\n            return false;\n          }\n\n          object = object.buffer;\n          other = other.buffer;\n\n        case arrayBufferTag:\n          if (object.byteLength != other.byteLength || !equalFunc(new Uint8Array(object), new Uint8Array(other))) {\n            return false;\n          }\n\n          return true;\n\n        case boolTag:\n        case dateTag:\n        case numberTag:\n          // Coerce booleans to `1` or `0` and dates to milliseconds.\n          // Invalid dates are coerced to `NaN`.\n          return eq(+object, +other);\n\n        case errorTag:\n          return object.name == other.name && object.message == other.message;\n\n        case regexpTag:\n        case stringTag:\n          // Coerce regexes to strings and treat strings, primitives and objects,\n          // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring\n          // for more details.\n          return object == other + '';\n\n        case mapTag:\n          var convert = mapToArray;\n\n        case setTag:\n          var isPartial = bitmask & COMPARE_PARTIAL_FLAG;\n          convert || (convert = setToArray);\n\n          if (object.size != other.size && !isPartial) {\n            return false;\n          } // Assume cyclic values are equal.\n\n\n          var stacked = stack.get(object);\n\n          if (stacked) {\n            return stacked == other;\n          }\n\n          bitmask |= COMPARE_UNORDERED_FLAG; // Recursively compare objects (susceptible to call stack limits).\n\n          stack.set(object, other);\n          var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);\n          stack['delete'](object);\n          return result;\n\n        case symbolTag:\n          if (symbolValueOf) {\n            return symbolValueOf.call(object) == symbolValueOf.call(other);\n          }\n\n      }\n\n      return false;\n    }\n    /**\n     * A specialized version of `baseIsEqualDeep` for objects with support for\n     * partial deep comparisons.\n     *\n     * @private\n     * @param {Object} object The object to compare.\n     * @param {Object} other The other object to compare.\n     * @param {number} bitmask The bitmask flags. See `baseIsEqual` for more details.\n     * @param {Function} customizer The function to customize comparisons.\n     * @param {Function} equalFunc The function to determine equivalents of values.\n     * @param {Object} stack Tracks traversed `object` and `other` objects.\n     * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.\n     */\n\n\n    function equalObjects(object, other, bitmask, customizer, equalFunc, stack) {\n      var isPartial = bitmask & COMPARE_PARTIAL_FLAG,\n          objProps = getAllKeys(object),\n          objLength = objProps.length,\n          othProps = getAllKeys(other),\n          othLength = othProps.length;\n\n      if (objLength != othLength && !isPartial) {\n        return false;\n      }\n\n      var index = objLength;\n\n      while (index--) {\n        var key = objProps[index];\n\n        if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {\n          return false;\n        }\n      } // Assume cyclic values are equal.\n\n\n      var stacked = stack.get(object);\n\n      if (stacked && stack.get(other)) {\n        return stacked == other;\n      }\n\n      var result = true;\n      stack.set(object, other);\n      stack.set(other, object);\n      var skipCtor = isPartial;\n\n      while (++index < objLength) {\n        key = objProps[index];\n        var objValue = object[key],\n            othValue = other[key];\n\n        if (customizer) {\n          var compared = isPartial ? customizer(othValue, objValue, key, other, object, stack) : customizer(objValue, othValue, key, object, other, stack);\n        } // Recursively compare objects (susceptible to call stack limits).\n\n\n        if (!(compared === undefined ? objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack) : compared)) {\n          result = false;\n          break;\n        }\n\n        skipCtor || (skipCtor = key == 'constructor');\n      }\n\n      if (result && !skipCtor) {\n        var objCtor = object.constructor,\n            othCtor = other.constructor; // Non `Object` object instances with different constructors are not equal.\n\n        if (objCtor != othCtor && 'constructor' in object && 'constructor' in other && !(typeof objCtor == 'function' && objCtor instanceof objCtor && typeof othCtor == 'function' && othCtor instanceof othCtor)) {\n          result = false;\n        }\n      }\n\n      stack['delete'](object);\n      stack['delete'](other);\n      return result;\n    }\n    /**\n     * A specialized version of `baseRest` which flattens the rest array.\n     *\n     * @private\n     * @param {Function} func The function to apply a rest parameter to.\n     * @returns {Function} Returns the new function.\n     */\n\n\n    function flatRest(func) {\n      return setToString(overRest(func, undefined, flatten), func + '');\n    }\n    /**\n     * Creates an array of own enumerable property names and symbols of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property names and symbols.\n     */\n\n\n    function getAllKeys(object) {\n      return baseGetAllKeys(object, keys, getSymbols);\n    }\n    /**\n     * Creates an array of own and inherited enumerable property names and\n     * symbols of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property names and symbols.\n     */\n\n\n    function getAllKeysIn(object) {\n      return baseGetAllKeys(object, keysIn, getSymbolsIn);\n    }\n    /**\n     * Gets metadata for `func`.\n     *\n     * @private\n     * @param {Function} func The function to query.\n     * @returns {*} Returns the metadata for `func`.\n     */\n\n\n    var getData = !metaMap ? noop : function (func) {\n      return metaMap.get(func);\n    };\n    /**\n     * Gets the name of `func`.\n     *\n     * @private\n     * @param {Function} func The function to query.\n     * @returns {string} Returns the function name.\n     */\n\n    function getFuncName(func) {\n      var result = func.name + '',\n          array = realNames[result],\n          length = hasOwnProperty.call(realNames, result) ? array.length : 0;\n\n      while (length--) {\n        var data = array[length],\n            otherFunc = data.func;\n\n        if (otherFunc == null || otherFunc == func) {\n          return data.name;\n        }\n      }\n\n      return result;\n    }\n    /**\n     * Gets the argument placeholder value for `func`.\n     *\n     * @private\n     * @param {Function} func The function to inspect.\n     * @returns {*} Returns the placeholder value.\n     */\n\n\n    function getHolder(func) {\n      var object = hasOwnProperty.call(lodash, 'placeholder') ? lodash : func;\n      return object.placeholder;\n    }\n    /**\n     * Gets the appropriate \"iteratee\" function. If `_.iteratee` is customized,\n     * this function returns the custom method, otherwise it returns `baseIteratee`.\n     * If arguments are provided, the chosen function is invoked with them and\n     * its result is returned.\n     *\n     * @private\n     * @param {*} [value] The value to convert to an iteratee.\n     * @param {number} [arity] The arity of the created iteratee.\n     * @returns {Function} Returns the chosen function or its result.\n     */\n\n\n    function getIteratee() {\n      var result = lodash.iteratee || iteratee;\n      result = result === iteratee ? baseIteratee : result;\n      return arguments.length ? result(arguments[0], arguments[1]) : result;\n    }\n    /**\n     * Gets the data for `map`.\n     *\n     * @private\n     * @param {Object} map The map to query.\n     * @param {string} key The reference key.\n     * @returns {*} Returns the map data.\n     */\n\n\n    function getMapData(map, key) {\n      var data = map.__data__;\n      return isKeyable(key) ? data[typeof key == 'string' ? 'string' : 'hash'] : data.map;\n    }\n    /**\n     * Gets the property names, values, and compare flags of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the match data of `object`.\n     */\n\n\n    function getMatchData(object) {\n      var result = keys(object),\n          length = result.length;\n\n      while (length--) {\n        var key = result[length],\n            value = object[key];\n        result[length] = [key, value, isStrictComparable(value)];\n      }\n\n      return result;\n    }\n    /**\n     * Gets the native function at `key` of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @param {string} key The key of the method to get.\n     * @returns {*} Returns the function if it's native, else `undefined`.\n     */\n\n\n    function getNative(object, key) {\n      var value = getValue(object, key);\n      return baseIsNative(value) ? value : undefined;\n    }\n    /**\n     * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n     *\n     * @private\n     * @param {*} value The value to query.\n     * @returns {string} Returns the raw `toStringTag`.\n     */\n\n\n    function getRawTag(value) {\n      var isOwn = hasOwnProperty.call(value, symToStringTag),\n          tag = value[symToStringTag];\n\n      try {\n        value[symToStringTag] = undefined;\n        var unmasked = true;\n      } catch (e) {}\n\n      var result = nativeObjectToString.call(value);\n\n      if (unmasked) {\n        if (isOwn) {\n          value[symToStringTag] = tag;\n        } else {\n          delete value[symToStringTag];\n        }\n      }\n\n      return result;\n    }\n    /**\n     * Creates an array of the own enumerable symbols of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of symbols.\n     */\n\n\n    var getSymbols = !nativeGetSymbols ? stubArray : function (object) {\n      if (object == null) {\n        return [];\n      }\n\n      object = Object(object);\n      return arrayFilter(nativeGetSymbols(object), function (symbol) {\n        return propertyIsEnumerable.call(object, symbol);\n      });\n    };\n    /**\n     * Creates an array of the own and inherited enumerable symbols of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of symbols.\n     */\n\n    var getSymbolsIn = !nativeGetSymbols ? stubArray : function (object) {\n      var result = [];\n\n      while (object) {\n        arrayPush(result, getSymbols(object));\n        object = getPrototype(object);\n      }\n\n      return result;\n    };\n    /**\n     * Gets the `toStringTag` of `value`.\n     *\n     * @private\n     * @param {*} value The value to query.\n     * @returns {string} Returns the `toStringTag`.\n     */\n\n    var getTag = baseGetTag; // Fallback for data views, maps, sets, and weak maps in IE 11 and promises in Node.js < 6.\n\n    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) {\n      getTag = function getTag(value) {\n        var result = baseGetTag(value),\n            Ctor = result == objectTag ? value.constructor : undefined,\n            ctorString = Ctor ? toSource(Ctor) : '';\n\n        if (ctorString) {\n          switch (ctorString) {\n            case dataViewCtorString:\n              return dataViewTag;\n\n            case mapCtorString:\n              return mapTag;\n\n            case promiseCtorString:\n              return promiseTag;\n\n            case setCtorString:\n              return setTag;\n\n            case weakMapCtorString:\n              return weakMapTag;\n          }\n        }\n\n        return result;\n      };\n    }\n    /**\n     * Gets the view, applying any `transforms` to the `start` and `end` positions.\n     *\n     * @private\n     * @param {number} start The start of the view.\n     * @param {number} end The end of the view.\n     * @param {Array} transforms The transformations to apply to the view.\n     * @returns {Object} Returns an object containing the `start` and `end`\n     *  positions of the view.\n     */\n\n\n    function getView(start, end, transforms) {\n      var index = -1,\n          length = transforms.length;\n\n      while (++index < length) {\n        var data = transforms[index],\n            size = data.size;\n\n        switch (data.type) {\n          case 'drop':\n            start += size;\n            break;\n\n          case 'dropRight':\n            end -= size;\n            break;\n\n          case 'take':\n            end = nativeMin(end, start + size);\n            break;\n\n          case 'takeRight':\n            start = nativeMax(start, end - size);\n            break;\n        }\n      }\n\n      return {\n        'start': start,\n        'end': end\n      };\n    }\n    /**\n     * Extracts wrapper details from the `source` body comment.\n     *\n     * @private\n     * @param {string} source The source to inspect.\n     * @returns {Array} Returns the wrapper details.\n     */\n\n\n    function getWrapDetails(source) {\n      var match = source.match(reWrapDetails);\n      return match ? match[1].split(reSplitDetails) : [];\n    }\n    /**\n     * Checks if `path` exists on `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path to check.\n     * @param {Function} hasFunc The function to check properties.\n     * @returns {boolean} Returns `true` if `path` exists, else `false`.\n     */\n\n\n    function hasPath(object, path, hasFunc) {\n      path = castPath(path, object);\n      var index = -1,\n          length = path.length,\n          result = false;\n\n      while (++index < length) {\n        var key = toKey(path[index]);\n\n        if (!(result = object != null && hasFunc(object, key))) {\n          break;\n        }\n\n        object = object[key];\n      }\n\n      if (result || ++index != length) {\n        return result;\n      }\n\n      length = object == null ? 0 : object.length;\n      return !!length && isLength(length) && isIndex(key, length) && (isArray(object) || isArguments(object));\n    }\n    /**\n     * Initializes an array clone.\n     *\n     * @private\n     * @param {Array} array The array to clone.\n     * @returns {Array} Returns the initialized clone.\n     */\n\n\n    function initCloneArray(array) {\n      var length = array.length,\n          result = new array.constructor(length); // Add properties assigned by `RegExp#exec`.\n\n      if (length && typeof array[0] == 'string' && hasOwnProperty.call(array, 'index')) {\n        result.index = array.index;\n        result.input = array.input;\n      }\n\n      return result;\n    }\n    /**\n     * Initializes an object clone.\n     *\n     * @private\n     * @param {Object} object The object to clone.\n     * @returns {Object} Returns the initialized clone.\n     */\n\n\n    function initCloneObject(object) {\n      return typeof object.constructor == 'function' && !isPrototype(object) ? baseCreate(getPrototype(object)) : {};\n    }\n    /**\n     * Initializes an object clone based on its `toStringTag`.\n     *\n     * **Note:** This function only supports cloning values with tags of\n     * `Boolean`, `Date`, `Error`, `Map`, `Number`, `RegExp`, `Set`, or `String`.\n     *\n     * @private\n     * @param {Object} object The object to clone.\n     * @param {string} tag The `toStringTag` of the object to clone.\n     * @param {boolean} [isDeep] Specify a deep clone.\n     * @returns {Object} Returns the initialized clone.\n     */\n\n\n    function initCloneByTag(object, tag, isDeep) {\n      var Ctor = object.constructor;\n\n      switch (tag) {\n        case arrayBufferTag:\n          return cloneArrayBuffer(object);\n\n        case boolTag:\n        case dateTag:\n          return new Ctor(+object);\n\n        case dataViewTag:\n          return cloneDataView(object, isDeep);\n\n        case float32Tag:\n        case float64Tag:\n        case int8Tag:\n        case int16Tag:\n        case int32Tag:\n        case uint8Tag:\n        case uint8ClampedTag:\n        case uint16Tag:\n        case uint32Tag:\n          return cloneTypedArray(object, isDeep);\n\n        case mapTag:\n          return new Ctor();\n\n        case numberTag:\n        case stringTag:\n          return new Ctor(object);\n\n        case regexpTag:\n          return cloneRegExp(object);\n\n        case setTag:\n          return new Ctor();\n\n        case symbolTag:\n          return cloneSymbol(object);\n      }\n    }\n    /**\n     * Inserts wrapper `details` in a comment at the top of the `source` body.\n     *\n     * @private\n     * @param {string} source The source to modify.\n     * @returns {Array} details The details to insert.\n     * @returns {string} Returns the modified source.\n     */\n\n\n    function insertWrapDetails(source, details) {\n      var length = details.length;\n\n      if (!length) {\n        return source;\n      }\n\n      var lastIndex = length - 1;\n      details[lastIndex] = (length > 1 ? '& ' : '') + details[lastIndex];\n      details = details.join(length > 2 ? ', ' : ' ');\n      return source.replace(reWrapComment, '{\\n/* [wrapped with ' + details + '] */\\n');\n    }\n    /**\n     * Checks if `value` is a flattenable `arguments` object or array.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is flattenable, else `false`.\n     */\n\n\n    function isFlattenable(value) {\n      return isArray(value) || isArguments(value) || !!(spreadableSymbol && value && value[spreadableSymbol]);\n    }\n    /**\n     * Checks if `value` is a valid array-like index.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n     * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n     */\n\n\n    function isIndex(value, length) {\n      var type = _typeof(value);\n\n      length = length == null ? MAX_SAFE_INTEGER : length;\n      return !!length && (type == 'number' || type != 'symbol' && reIsUint.test(value)) && value > -1 && value % 1 == 0 && value < length;\n    }\n    /**\n     * Checks if the given arguments are from an iteratee call.\n     *\n     * @private\n     * @param {*} value The potential iteratee value argument.\n     * @param {*} index The potential iteratee index or key argument.\n     * @param {*} object The potential iteratee object argument.\n     * @returns {boolean} Returns `true` if the arguments are from an iteratee call,\n     *  else `false`.\n     */\n\n\n    function isIterateeCall(value, index, object) {\n      if (!isObject(object)) {\n        return false;\n      }\n\n      var type = _typeof(index);\n\n      if (type == 'number' ? isArrayLike(object) && isIndex(index, object.length) : type == 'string' && index in object) {\n        return eq(object[index], value);\n      }\n\n      return false;\n    }\n    /**\n     * Checks if `value` is a property name and not a property path.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @param {Object} [object] The object to query keys on.\n     * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\n     */\n\n\n    function isKey(value, object) {\n      if (isArray(value)) {\n        return false;\n      }\n\n      var type = _typeof(value);\n\n      if (type == 'number' || type == 'symbol' || type == 'boolean' || value == null || isSymbol(value)) {\n        return true;\n      }\n\n      return reIsPlainProp.test(value) || !reIsDeepProp.test(value) || object != null && value in Object(object);\n    }\n    /**\n     * Checks if `value` is suitable for use as unique object key.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n     */\n\n\n    function isKeyable(value) {\n      var type = _typeof(value);\n\n      return type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean' ? value !== '__proto__' : value === null;\n    }\n    /**\n     * Checks if `func` has a lazy counterpart.\n     *\n     * @private\n     * @param {Function} func The function to check.\n     * @returns {boolean} Returns `true` if `func` has a lazy counterpart,\n     *  else `false`.\n     */\n\n\n    function isLaziable(func) {\n      var funcName = getFuncName(func),\n          other = lodash[funcName];\n\n      if (typeof other != 'function' || !(funcName in LazyWrapper.prototype)) {\n        return false;\n      }\n\n      if (func === other) {\n        return true;\n      }\n\n      var data = getData(other);\n      return !!data && func === data[0];\n    }\n    /**\n     * Checks if `func` has its source masked.\n     *\n     * @private\n     * @param {Function} func The function to check.\n     * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n     */\n\n\n    function isMasked(func) {\n      return !!maskSrcKey && maskSrcKey in func;\n    }\n    /**\n     * Checks if `func` is capable of being masked.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `func` is maskable, else `false`.\n     */\n\n\n    var isMaskable = coreJsData ? isFunction : stubFalse;\n    /**\n     * Checks if `value` is likely a prototype object.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.\n     */\n\n    function isPrototype(value) {\n      var Ctor = value && value.constructor,\n          proto = typeof Ctor == 'function' && Ctor.prototype || objectProto;\n      return value === proto;\n    }\n    /**\n     * Checks if `value` is suitable for strict equality comparisons, i.e. `===`.\n     *\n     * @private\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` if suitable for strict\n     *  equality comparisons, else `false`.\n     */\n\n\n    function isStrictComparable(value) {\n      return value === value && !isObject(value);\n    }\n    /**\n     * A specialized version of `matchesProperty` for source values suitable\n     * for strict equality comparisons, i.e. `===`.\n     *\n     * @private\n     * @param {string} key The key of the property to get.\n     * @param {*} srcValue The value to match.\n     * @returns {Function} Returns the new spec function.\n     */\n\n\n    function matchesStrictComparable(key, srcValue) {\n      return function (object) {\n        if (object == null) {\n          return false;\n        }\n\n        return object[key] === srcValue && (srcValue !== undefined || key in Object(object));\n      };\n    }\n    /**\n     * A specialized version of `_.memoize` which clears the memoized function's\n     * cache when it exceeds `MAX_MEMOIZE_SIZE`.\n     *\n     * @private\n     * @param {Function} func The function to have its output memoized.\n     * @returns {Function} Returns the new memoized function.\n     */\n\n\n    function memoizeCapped(func) {\n      var result = memoize(func, function (key) {\n        if (cache.size === MAX_MEMOIZE_SIZE) {\n          cache.clear();\n        }\n\n        return key;\n      });\n      var cache = result.cache;\n      return result;\n    }\n    /**\n     * Merges the function metadata of `source` into `data`.\n     *\n     * Merging metadata reduces the number of wrappers used to invoke a function.\n     * This is possible because methods like `_.bind`, `_.curry`, and `_.partial`\n     * may be applied regardless of execution order. Methods like `_.ary` and\n     * `_.rearg` modify function arguments, making the order in which they are\n     * executed important, preventing the merging of metadata. However, we make\n     * an exception for a safe combined case where curried functions have `_.ary`\n     * and or `_.rearg` applied.\n     *\n     * @private\n     * @param {Array} data The destination metadata.\n     * @param {Array} source The source metadata.\n     * @returns {Array} Returns `data`.\n     */\n\n\n    function mergeData(data, source) {\n      var bitmask = data[1],\n          srcBitmask = source[1],\n          newBitmask = bitmask | srcBitmask,\n          isCommon = newBitmask < (WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG | WRAP_ARY_FLAG);\n      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.\n\n      if (!(isCommon || isCombo)) {\n        return data;\n      } // Use source `thisArg` if available.\n\n\n      if (srcBitmask & WRAP_BIND_FLAG) {\n        data[2] = source[2]; // Set when currying a bound function.\n\n        newBitmask |= bitmask & WRAP_BIND_FLAG ? 0 : WRAP_CURRY_BOUND_FLAG;\n      } // Compose partial arguments.\n\n\n      var value = source[3];\n\n      if (value) {\n        var partials = data[3];\n        data[3] = partials ? composeArgs(partials, value, source[4]) : value;\n        data[4] = partials ? replaceHolders(data[3], PLACEHOLDER) : source[4];\n      } // Compose partial right arguments.\n\n\n      value = source[5];\n\n      if (value) {\n        partials = data[5];\n        data[5] = partials ? composeArgsRight(partials, value, source[6]) : value;\n        data[6] = partials ? replaceHolders(data[5], PLACEHOLDER) : source[6];\n      } // Use source `argPos` if available.\n\n\n      value = source[7];\n\n      if (value) {\n        data[7] = value;\n      } // Use source `ary` if it's smaller.\n\n\n      if (srcBitmask & WRAP_ARY_FLAG) {\n        data[8] = data[8] == null ? source[8] : nativeMin(data[8], source[8]);\n      } // Use source `arity` if one is not provided.\n\n\n      if (data[9] == null) {\n        data[9] = source[9];\n      } // Use source `func` and merge bitmasks.\n\n\n      data[0] = source[0];\n      data[1] = newBitmask;\n      return data;\n    }\n    /**\n     * This function is like\n     * [`Object.keys`](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n     * except that it includes inherited enumerable properties.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property names.\n     */\n\n\n    function nativeKeysIn(object) {\n      var result = [];\n\n      if (object != null) {\n        for (var key in Object(object)) {\n          result.push(key);\n        }\n      }\n\n      return result;\n    }\n    /**\n     * Converts `value` to a string using `Object.prototype.toString`.\n     *\n     * @private\n     * @param {*} value The value to convert.\n     * @returns {string} Returns the converted string.\n     */\n\n\n    function objectToString(value) {\n      return nativeObjectToString.call(value);\n    }\n    /**\n     * A specialized version of `baseRest` which transforms the rest array.\n     *\n     * @private\n     * @param {Function} func The function to apply a rest parameter to.\n     * @param {number} [start=func.length-1] The start position of the rest parameter.\n     * @param {Function} transform The rest array transform.\n     * @returns {Function} Returns the new function.\n     */\n\n\n    function overRest(func, start, transform) {\n      start = nativeMax(start === undefined ? func.length - 1 : start, 0);\n      return function () {\n        var args = arguments,\n            index = -1,\n            length = nativeMax(args.length - start, 0),\n            array = Array(length);\n\n        while (++index < length) {\n          array[index] = args[start + index];\n        }\n\n        index = -1;\n        var otherArgs = Array(start + 1);\n\n        while (++index < start) {\n          otherArgs[index] = args[index];\n        }\n\n        otherArgs[start] = transform(array);\n        return apply(func, this, otherArgs);\n      };\n    }\n    /**\n     * Gets the parent value at `path` of `object`.\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @param {Array} path The path to get the parent value of.\n     * @returns {*} Returns the parent value.\n     */\n\n\n    function parent(object, path) {\n      return path.length < 2 ? object : baseGet(object, baseSlice(path, 0, -1));\n    }\n    /**\n     * Reorder `array` according to the specified indexes where the element at\n     * the first index is assigned as the first element, the element at\n     * the second index is assigned as the second element, and so on.\n     *\n     * @private\n     * @param {Array} array The array to reorder.\n     * @param {Array} indexes The arranged array indexes.\n     * @returns {Array} Returns `array`.\n     */\n\n\n    function reorder(array, indexes) {\n      var arrLength = array.length,\n          length = nativeMin(indexes.length, arrLength),\n          oldArray = copyArray(array);\n\n      while (length--) {\n        var index = indexes[length];\n        array[length] = isIndex(index, arrLength) ? oldArray[index] : undefined;\n      }\n\n      return array;\n    }\n    /**\n     * Gets the value at `key`, unless `key` is \"__proto__\" or \"constructor\".\n     *\n     * @private\n     * @param {Object} object The object to query.\n     * @param {string} key The key of the property to get.\n     * @returns {*} Returns the property value.\n     */\n\n\n    function safeGet(object, key) {\n      if (key === 'constructor' && typeof object[key] === 'function') {\n        return;\n      }\n\n      if (key == '__proto__') {\n        return;\n      }\n\n      return object[key];\n    }\n    /**\n     * Sets metadata for `func`.\n     *\n     * **Note:** If this function becomes hot, i.e. is invoked a lot in a short\n     * period of time, it will trip its breaker and transition to an identity\n     * function to avoid garbage collection pauses in V8. See\n     * [V8 issue 2070](https://bugs.chromium.org/p/v8/issues/detail?id=2070)\n     * for more details.\n     *\n     * @private\n     * @param {Function} func The function to associate metadata with.\n     * @param {*} data The metadata.\n     * @returns {Function} Returns `func`.\n     */\n\n\n    var setData = shortOut(baseSetData);\n    /**\n     * A simple wrapper around the global [`setTimeout`](https://mdn.io/setTimeout).\n     *\n     * @private\n     * @param {Function} func The function to delay.\n     * @param {number} wait The number of milliseconds to delay invocation.\n     * @returns {number|Object} Returns the timer id or timeout object.\n     */\n\n    var setTimeout = ctxSetTimeout || function (func, wait) {\n      return root.setTimeout(func, wait);\n    };\n    /**\n     * Sets the `toString` method of `func` to return `string`.\n     *\n     * @private\n     * @param {Function} func The function to modify.\n     * @param {Function} string The `toString` result.\n     * @returns {Function} Returns `func`.\n     */\n\n\n    var setToString = shortOut(baseSetToString);\n    /**\n     * Sets the `toString` method of `wrapper` to mimic the source of `reference`\n     * with wrapper details in a comment at the top of the source body.\n     *\n     * @private\n     * @param {Function} wrapper The function to modify.\n     * @param {Function} reference The reference function.\n     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n     * @returns {Function} Returns `wrapper`.\n     */\n\n    function setWrapToString(wrapper, reference, bitmask) {\n      var source = reference + '';\n      return setToString(wrapper, insertWrapDetails(source, updateWrapDetails(getWrapDetails(source), bitmask)));\n    }\n    /**\n     * Creates a function that'll short out and invoke `identity` instead\n     * of `func` when it's called `HOT_COUNT` or more times in `HOT_SPAN`\n     * milliseconds.\n     *\n     * @private\n     * @param {Function} func The function to restrict.\n     * @returns {Function} Returns the new shortable function.\n     */\n\n\n    function shortOut(func) {\n      var count = 0,\n          lastCalled = 0;\n      return function () {\n        var stamp = nativeNow(),\n            remaining = HOT_SPAN - (stamp - lastCalled);\n        lastCalled = stamp;\n\n        if (remaining > 0) {\n          if (++count >= HOT_COUNT) {\n            return arguments[0];\n          }\n        } else {\n          count = 0;\n        }\n\n        return func.apply(undefined, arguments);\n      };\n    }\n    /**\n     * A specialized version of `_.shuffle` which mutates and sets the size of `array`.\n     *\n     * @private\n     * @param {Array} array The array to shuffle.\n     * @param {number} [size=array.length] The size of `array`.\n     * @returns {Array} Returns `array`.\n     */\n\n\n    function shuffleSelf(array, size) {\n      var index = -1,\n          length = array.length,\n          lastIndex = length - 1;\n      size = size === undefined ? length : size;\n\n      while (++index < size) {\n        var rand = baseRandom(index, lastIndex),\n            value = array[rand];\n        array[rand] = array[index];\n        array[index] = value;\n      }\n\n      array.length = size;\n      return array;\n    }\n    /**\n     * Converts `string` to a property path array.\n     *\n     * @private\n     * @param {string} string The string to convert.\n     * @returns {Array} Returns the property path array.\n     */\n\n\n    var stringToPath = memoizeCapped(function (string) {\n      var result = [];\n\n      if (string.charCodeAt(0) === 46\n      /* . */\n      ) {\n          result.push('');\n        }\n\n      string.replace(rePropName, function (match, number, quote, subString) {\n        result.push(quote ? subString.replace(reEscapeChar, '$1') : number || match);\n      });\n      return result;\n    });\n    /**\n     * Converts `value` to a string key if it's not a string or symbol.\n     *\n     * @private\n     * @param {*} value The value to inspect.\n     * @returns {string|symbol} Returns the key.\n     */\n\n    function toKey(value) {\n      if (typeof value == 'string' || isSymbol(value)) {\n        return value;\n      }\n\n      var result = value + '';\n      return result == '0' && 1 / value == -INFINITY ? '-0' : result;\n    }\n    /**\n     * Converts `func` to its source code.\n     *\n     * @private\n     * @param {Function} func The function to convert.\n     * @returns {string} Returns the source code.\n     */\n\n\n    function toSource(func) {\n      if (func != null) {\n        try {\n          return funcToString.call(func);\n        } catch (e) {}\n\n        try {\n          return func + '';\n        } catch (e) {}\n      }\n\n      return '';\n    }\n    /**\n     * Updates wrapper `details` based on `bitmask` flags.\n     *\n     * @private\n     * @returns {Array} details The details to modify.\n     * @param {number} bitmask The bitmask flags. See `createWrap` for more details.\n     * @returns {Array} Returns `details`.\n     */\n\n\n    function updateWrapDetails(details, bitmask) {\n      arrayEach(wrapFlags, function (pair) {\n        var value = '_.' + pair[0];\n\n        if (bitmask & pair[1] && !arrayIncludes(details, value)) {\n          details.push(value);\n        }\n      });\n      return details.sort();\n    }\n    /**\n     * Creates a clone of `wrapper`.\n     *\n     * @private\n     * @param {Object} wrapper The wrapper to clone.\n     * @returns {Object} Returns the cloned wrapper.\n     */\n\n\n    function wrapperClone(wrapper) {\n      if (wrapper instanceof LazyWrapper) {\n        return wrapper.clone();\n      }\n\n      var result = new LodashWrapper(wrapper.__wrapped__, wrapper.__chain__);\n      result.__actions__ = copyArray(wrapper.__actions__);\n      result.__index__ = wrapper.__index__;\n      result.__values__ = wrapper.__values__;\n      return result;\n    }\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates an array of elements split into groups the length of `size`.\n     * If `array` can't be split evenly, the final chunk will be the remaining\n     * elements.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to process.\n     * @param {number} [size=1] The length of each chunk\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Array} Returns the new array of chunks.\n     * @example\n     *\n     * _.chunk(['a', 'b', 'c', 'd'], 2);\n     * // => [['a', 'b'], ['c', 'd']]\n     *\n     * _.chunk(['a', 'b', 'c', 'd'], 3);\n     * // => [['a', 'b', 'c'], ['d']]\n     */\n\n\n    function chunk(array, size, guard) {\n      if (guard ? isIterateeCall(array, size, guard) : size === undefined) {\n        size = 1;\n      } else {\n        size = nativeMax(toInteger(size), 0);\n      }\n\n      var length = array == null ? 0 : array.length;\n\n      if (!length || size < 1) {\n        return [];\n      }\n\n      var index = 0,\n          resIndex = 0,\n          result = Array(nativeCeil(length / size));\n\n      while (index < length) {\n        result[resIndex++] = baseSlice(array, index, index += size);\n      }\n\n      return result;\n    }\n    /**\n     * Creates an array with all falsey values removed. The values `false`, `null`,\n     * `0`, `\"\"`, `undefined`, and `NaN` are falsey.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to compact.\n     * @returns {Array} Returns the new array of filtered values.\n     * @example\n     *\n     * _.compact([0, 1, false, 2, '', 3]);\n     * // => [1, 2, 3]\n     */\n\n\n    function compact(array) {\n      var index = -1,\n          length = array == null ? 0 : array.length,\n          resIndex = 0,\n          result = [];\n\n      while (++index < length) {\n        var value = array[index];\n\n        if (value) {\n          result[resIndex++] = value;\n        }\n      }\n\n      return result;\n    }\n    /**\n     * Creates a new array concatenating `array` with any additional arrays\n     * and/or values.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to concatenate.\n     * @param {...*} [values] The values to concatenate.\n     * @returns {Array} Returns the new concatenated array.\n     * @example\n     *\n     * var array = [1];\n     * var other = _.concat(array, 2, [3], [[4]]);\n     *\n     * console.log(other);\n     * // => [1, 2, 3, [4]]\n     *\n     * console.log(array);\n     * // => [1]\n     */\n\n\n    function concat() {\n      var length = arguments.length;\n\n      if (!length) {\n        return [];\n      }\n\n      var args = Array(length - 1),\n          array = arguments[0],\n          index = length;\n\n      while (index--) {\n        args[index - 1] = arguments[index];\n      }\n\n      return arrayPush(isArray(array) ? copyArray(array) : [array], baseFlatten(args, 1));\n    }\n    /**\n     * Creates an array of `array` values not included in the other given arrays\n     * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons. The order and references of result values are\n     * determined by the first array.\n     *\n     * **Note:** Unlike `_.pullAll`, this method returns a new array.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {...Array} [values] The values to exclude.\n     * @returns {Array} Returns the new array of filtered values.\n     * @see _.without, _.xor\n     * @example\n     *\n     * _.difference([2, 1], [2, 3]);\n     * // => [1]\n     */\n\n\n    var difference = baseRest(function (array, values) {\n      return isArrayLikeObject(array) ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true)) : [];\n    });\n    /**\n     * This method is like `_.difference` except that it accepts `iteratee` which\n     * is invoked for each element of `array` and `values` to generate the criterion\n     * by which they're compared. The order and references of result values are\n     * determined by the first array. The iteratee is invoked with one argument:\n     * (value).\n     *\n     * **Note:** Unlike `_.pullAllBy`, this method returns a new array.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {...Array} [values] The values to exclude.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {Array} Returns the new array of filtered values.\n     * @example\n     *\n     * _.differenceBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n     * // => [1.2]\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.differenceBy([{ 'x': 2 }, { 'x': 1 }], [{ 'x': 1 }], 'x');\n     * // => [{ 'x': 2 }]\n     */\n\n    var differenceBy = baseRest(function (array, values) {\n      var iteratee = last(values);\n\n      if (isArrayLikeObject(iteratee)) {\n        iteratee = undefined;\n      }\n\n      return isArrayLikeObject(array) ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), getIteratee(iteratee, 2)) : [];\n    });\n    /**\n     * This method is like `_.difference` except that it accepts `comparator`\n     * which is invoked to compare elements of `array` to `values`. The order and\n     * references of result values are determined by the first array. The comparator\n     * is invoked with two arguments: (arrVal, othVal).\n     *\n     * **Note:** Unlike `_.pullAllWith`, this method returns a new array.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {...Array} [values] The values to exclude.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new array of filtered values.\n     * @example\n     *\n     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n     *\n     * _.differenceWith(objects, [{ 'x': 1, 'y': 2 }], _.isEqual);\n     * // => [{ 'x': 2, 'y': 1 }]\n     */\n\n    var differenceWith = baseRest(function (array, values) {\n      var comparator = last(values);\n\n      if (isArrayLikeObject(comparator)) {\n        comparator = undefined;\n      }\n\n      return isArrayLikeObject(array) ? baseDifference(array, baseFlatten(values, 1, isArrayLikeObject, true), undefined, comparator) : [];\n    });\n    /**\n     * Creates a slice of `array` with `n` elements dropped from the beginning.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.5.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {number} [n=1] The number of elements to drop.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * _.drop([1, 2, 3]);\n     * // => [2, 3]\n     *\n     * _.drop([1, 2, 3], 2);\n     * // => [3]\n     *\n     * _.drop([1, 2, 3], 5);\n     * // => []\n     *\n     * _.drop([1, 2, 3], 0);\n     * // => [1, 2, 3]\n     */\n\n    function drop(array, n, guard) {\n      var length = array == null ? 0 : array.length;\n\n      if (!length) {\n        return [];\n      }\n\n      n = guard || n === undefined ? 1 : toInteger(n);\n      return baseSlice(array, n < 0 ? 0 : n, length);\n    }\n    /**\n     * Creates a slice of `array` with `n` elements dropped from the end.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {number} [n=1] The number of elements to drop.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * _.dropRight([1, 2, 3]);\n     * // => [1, 2]\n     *\n     * _.dropRight([1, 2, 3], 2);\n     * // => [1]\n     *\n     * _.dropRight([1, 2, 3], 5);\n     * // => []\n     *\n     * _.dropRight([1, 2, 3], 0);\n     * // => [1, 2, 3]\n     */\n\n\n    function dropRight(array, n, guard) {\n      var length = array == null ? 0 : array.length;\n\n      if (!length) {\n        return [];\n      }\n\n      n = guard || n === undefined ? 1 : toInteger(n);\n      n = length - n;\n      return baseSlice(array, 0, n < 0 ? 0 : n);\n    }\n    /**\n     * Creates a slice of `array` excluding elements dropped from the end.\n     * Elements are dropped until `predicate` returns falsey. The predicate is\n     * invoked with three arguments: (value, index, array).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'active': true },\n     *   { 'user': 'fred',    'active': false },\n     *   { 'user': 'pebbles', 'active': false }\n     * ];\n     *\n     * _.dropRightWhile(users, function(o) { return !o.active; });\n     * // => objects for ['barney']\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.dropRightWhile(users, { 'user': 'pebbles', 'active': false });\n     * // => objects for ['barney', 'fred']\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.dropRightWhile(users, ['active', false]);\n     * // => objects for ['barney']\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.dropRightWhile(users, 'active');\n     * // => objects for ['barney', 'fred', 'pebbles']\n     */\n\n\n    function dropRightWhile(array, predicate) {\n      return array && array.length ? baseWhile(array, getIteratee(predicate, 3), true, true) : [];\n    }\n    /**\n     * Creates a slice of `array` excluding elements dropped from the beginning.\n     * Elements are dropped until `predicate` returns falsey. The predicate is\n     * invoked with three arguments: (value, index, array).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'active': false },\n     *   { 'user': 'fred',    'active': false },\n     *   { 'user': 'pebbles', 'active': true }\n     * ];\n     *\n     * _.dropWhile(users, function(o) { return !o.active; });\n     * // => objects for ['pebbles']\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.dropWhile(users, { 'user': 'barney', 'active': false });\n     * // => objects for ['fred', 'pebbles']\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.dropWhile(users, ['active', false]);\n     * // => objects for ['pebbles']\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.dropWhile(users, 'active');\n     * // => objects for ['barney', 'fred', 'pebbles']\n     */\n\n\n    function dropWhile(array, predicate) {\n      return array && array.length ? baseWhile(array, getIteratee(predicate, 3), true) : [];\n    }\n    /**\n     * Fills elements of `array` with `value` from `start` up to, but not\n     * including, `end`.\n     *\n     * **Note:** This method mutates `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.2.0\n     * @category Array\n     * @param {Array} array The array to fill.\n     * @param {*} value The value to fill `array` with.\n     * @param {number} [start=0] The start position.\n     * @param {number} [end=array.length] The end position.\n     * @returns {Array} Returns `array`.\n     * @example\n     *\n     * var array = [1, 2, 3];\n     *\n     * _.fill(array, 'a');\n     * console.log(array);\n     * // => ['a', 'a', 'a']\n     *\n     * _.fill(Array(3), 2);\n     * // => [2, 2, 2]\n     *\n     * _.fill([4, 6, 8, 10], '*', 1, 3);\n     * // => [4, '*', '*', 10]\n     */\n\n\n    function fill(array, value, start, end) {\n      var length = array == null ? 0 : array.length;\n\n      if (!length) {\n        return [];\n      }\n\n      if (start && typeof start != 'number' && isIterateeCall(array, value, start)) {\n        start = 0;\n        end = length;\n      }\n\n      return baseFill(array, value, start, end);\n    }\n    /**\n     * This method is like `_.find` except that it returns the index of the first\n     * element `predicate` returns truthy for instead of the element itself.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.1.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @param {number} [fromIndex=0] The index to search from.\n     * @returns {number} Returns the index of the found element, else `-1`.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'active': false },\n     *   { 'user': 'fred',    'active': false },\n     *   { 'user': 'pebbles', 'active': true }\n     * ];\n     *\n     * _.findIndex(users, function(o) { return o.user == 'barney'; });\n     * // => 0\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.findIndex(users, { 'user': 'fred', 'active': false });\n     * // => 1\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.findIndex(users, ['active', false]);\n     * // => 0\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.findIndex(users, 'active');\n     * // => 2\n     */\n\n\n    function findIndex(array, predicate, fromIndex) {\n      var length = array == null ? 0 : array.length;\n\n      if (!length) {\n        return -1;\n      }\n\n      var index = fromIndex == null ? 0 : toInteger(fromIndex);\n\n      if (index < 0) {\n        index = nativeMax(length + index, 0);\n      }\n\n      return baseFindIndex(array, getIteratee(predicate, 3), index);\n    }\n    /**\n     * This method is like `_.findIndex` except that it iterates over elements\n     * of `collection` from right to left.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @param {number} [fromIndex=array.length-1] The index to search from.\n     * @returns {number} Returns the index of the found element, else `-1`.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'active': true },\n     *   { 'user': 'fred',    'active': false },\n     *   { 'user': 'pebbles', 'active': false }\n     * ];\n     *\n     * _.findLastIndex(users, function(o) { return o.user == 'pebbles'; });\n     * // => 2\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.findLastIndex(users, { 'user': 'barney', 'active': true });\n     * // => 0\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.findLastIndex(users, ['active', false]);\n     * // => 2\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.findLastIndex(users, 'active');\n     * // => 0\n     */\n\n\n    function findLastIndex(array, predicate, fromIndex) {\n      var length = array == null ? 0 : array.length;\n\n      if (!length) {\n        return -1;\n      }\n\n      var index = length - 1;\n\n      if (fromIndex !== undefined) {\n        index = toInteger(fromIndex);\n        index = fromIndex < 0 ? nativeMax(length + index, 0) : nativeMin(index, length - 1);\n      }\n\n      return baseFindIndex(array, getIteratee(predicate, 3), index, true);\n    }\n    /**\n     * Flattens `array` a single level deep.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to flatten.\n     * @returns {Array} Returns the new flattened array.\n     * @example\n     *\n     * _.flatten([1, [2, [3, [4]], 5]]);\n     * // => [1, 2, [3, [4]], 5]\n     */\n\n\n    function flatten(array) {\n      var length = array == null ? 0 : array.length;\n      return length ? baseFlatten(array, 1) : [];\n    }\n    /**\n     * Recursively flattens `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to flatten.\n     * @returns {Array} Returns the new flattened array.\n     * @example\n     *\n     * _.flattenDeep([1, [2, [3, [4]], 5]]);\n     * // => [1, 2, 3, 4, 5]\n     */\n\n\n    function flattenDeep(array) {\n      var length = array == null ? 0 : array.length;\n      return length ? baseFlatten(array, INFINITY) : [];\n    }\n    /**\n     * Recursively flatten `array` up to `depth` times.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.4.0\n     * @category Array\n     * @param {Array} array The array to flatten.\n     * @param {number} [depth=1] The maximum recursion depth.\n     * @returns {Array} Returns the new flattened array.\n     * @example\n     *\n     * var array = [1, [2, [3, [4]], 5]];\n     *\n     * _.flattenDepth(array, 1);\n     * // => [1, 2, [3, [4]], 5]\n     *\n     * _.flattenDepth(array, 2);\n     * // => [1, 2, 3, [4], 5]\n     */\n\n\n    function flattenDepth(array, depth) {\n      var length = array == null ? 0 : array.length;\n\n      if (!length) {\n        return [];\n      }\n\n      depth = depth === undefined ? 1 : toInteger(depth);\n      return baseFlatten(array, depth);\n    }\n    /**\n     * The inverse of `_.toPairs`; this method returns an object composed\n     * from key-value `pairs`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} pairs The key-value pairs.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * _.fromPairs([['a', 1], ['b', 2]]);\n     * // => { 'a': 1, 'b': 2 }\n     */\n\n\n    function fromPairs(pairs) {\n      var index = -1,\n          length = pairs == null ? 0 : pairs.length,\n          result = {};\n\n      while (++index < length) {\n        var pair = pairs[index];\n        result[pair[0]] = pair[1];\n      }\n\n      return result;\n    }\n    /**\n     * Gets the first element of `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @alias first\n     * @category Array\n     * @param {Array} array The array to query.\n     * @returns {*} Returns the first element of `array`.\n     * @example\n     *\n     * _.head([1, 2, 3]);\n     * // => 1\n     *\n     * _.head([]);\n     * // => undefined\n     */\n\n\n    function head(array) {\n      return array && array.length ? array[0] : undefined;\n    }\n    /**\n     * Gets the index at which the first occurrence of `value` is found in `array`\n     * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons. If `fromIndex` is negative, it's used as the\n     * offset from the end of `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {*} value The value to search for.\n     * @param {number} [fromIndex=0] The index to search from.\n     * @returns {number} Returns the index of the matched value, else `-1`.\n     * @example\n     *\n     * _.indexOf([1, 2, 1, 2], 2);\n     * // => 1\n     *\n     * // Search from the `fromIndex`.\n     * _.indexOf([1, 2, 1, 2], 2, 2);\n     * // => 3\n     */\n\n\n    function indexOf(array, value, fromIndex) {\n      var length = array == null ? 0 : array.length;\n\n      if (!length) {\n        return -1;\n      }\n\n      var index = fromIndex == null ? 0 : toInteger(fromIndex);\n\n      if (index < 0) {\n        index = nativeMax(length + index, 0);\n      }\n\n      return baseIndexOf(array, value, index);\n    }\n    /**\n     * Gets all but the last element of `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * _.initial([1, 2, 3]);\n     * // => [1, 2]\n     */\n\n\n    function initial(array) {\n      var length = array == null ? 0 : array.length;\n      return length ? baseSlice(array, 0, -1) : [];\n    }\n    /**\n     * Creates an array of unique values that are included in all given arrays\n     * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons. The order and references of result values are\n     * determined by the first array.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @returns {Array} Returns the new array of intersecting values.\n     * @example\n     *\n     * _.intersection([2, 1], [2, 3]);\n     * // => [2]\n     */\n\n\n    var intersection = baseRest(function (arrays) {\n      var mapped = arrayMap(arrays, castArrayLikeObject);\n      return mapped.length && mapped[0] === arrays[0] ? baseIntersection(mapped) : [];\n    });\n    /**\n     * This method is like `_.intersection` except that it accepts `iteratee`\n     * which is invoked for each element of each `arrays` to generate the criterion\n     * by which they're compared. The order and references of result values are\n     * determined by the first array. The iteratee is invoked with one argument:\n     * (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {Array} Returns the new array of intersecting values.\n     * @example\n     *\n     * _.intersectionBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n     * // => [2.1]\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.intersectionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n     * // => [{ 'x': 1 }]\n     */\n\n    var intersectionBy = baseRest(function (arrays) {\n      var iteratee = last(arrays),\n          mapped = arrayMap(arrays, castArrayLikeObject);\n\n      if (iteratee === last(mapped)) {\n        iteratee = undefined;\n      } else {\n        mapped.pop();\n      }\n\n      return mapped.length && mapped[0] === arrays[0] ? baseIntersection(mapped, getIteratee(iteratee, 2)) : [];\n    });\n    /**\n     * This method is like `_.intersection` except that it accepts `comparator`\n     * which is invoked to compare elements of `arrays`. The order and references\n     * of result values are determined by the first array. The comparator is\n     * invoked with two arguments: (arrVal, othVal).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new array of intersecting values.\n     * @example\n     *\n     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n     * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n     *\n     * _.intersectionWith(objects, others, _.isEqual);\n     * // => [{ 'x': 1, 'y': 2 }]\n     */\n\n    var intersectionWith = baseRest(function (arrays) {\n      var comparator = last(arrays),\n          mapped = arrayMap(arrays, castArrayLikeObject);\n      comparator = typeof comparator == 'function' ? comparator : undefined;\n\n      if (comparator) {\n        mapped.pop();\n      }\n\n      return mapped.length && mapped[0] === arrays[0] ? baseIntersection(mapped, undefined, comparator) : [];\n    });\n    /**\n     * Converts all elements in `array` into a string separated by `separator`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to convert.\n     * @param {string} [separator=','] The element separator.\n     * @returns {string} Returns the joined string.\n     * @example\n     *\n     * _.join(['a', 'b', 'c'], '~');\n     * // => 'a~b~c'\n     */\n\n    function join(array, separator) {\n      return array == null ? '' : nativeJoin.call(array, separator);\n    }\n    /**\n     * Gets the last element of `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @returns {*} Returns the last element of `array`.\n     * @example\n     *\n     * _.last([1, 2, 3]);\n     * // => 3\n     */\n\n\n    function last(array) {\n      var length = array == null ? 0 : array.length;\n      return length ? array[length - 1] : undefined;\n    }\n    /**\n     * This method is like `_.indexOf` except that it iterates over elements of\n     * `array` from right to left.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {*} value The value to search for.\n     * @param {number} [fromIndex=array.length-1] The index to search from.\n     * @returns {number} Returns the index of the matched value, else `-1`.\n     * @example\n     *\n     * _.lastIndexOf([1, 2, 1, 2], 2);\n     * // => 3\n     *\n     * // Search from the `fromIndex`.\n     * _.lastIndexOf([1, 2, 1, 2], 2, 2);\n     * // => 1\n     */\n\n\n    function lastIndexOf(array, value, fromIndex) {\n      var length = array == null ? 0 : array.length;\n\n      if (!length) {\n        return -1;\n      }\n\n      var index = length;\n\n      if (fromIndex !== undefined) {\n        index = toInteger(fromIndex);\n        index = index < 0 ? nativeMax(length + index, 0) : nativeMin(index, length - 1);\n      }\n\n      return value === value ? strictLastIndexOf(array, value, index) : baseFindIndex(array, baseIsNaN, index, true);\n    }\n    /**\n     * Gets the element at index `n` of `array`. If `n` is negative, the nth\n     * element from the end is returned.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.11.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {number} [n=0] The index of the element to return.\n     * @returns {*} Returns the nth element of `array`.\n     * @example\n     *\n     * var array = ['a', 'b', 'c', 'd'];\n     *\n     * _.nth(array, 1);\n     * // => 'b'\n     *\n     * _.nth(array, -2);\n     * // => 'c';\n     */\n\n\n    function nth(array, n) {\n      return array && array.length ? baseNth(array, toInteger(n)) : undefined;\n    }\n    /**\n     * Removes all given values from `array` using\n     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons.\n     *\n     * **Note:** Unlike `_.without`, this method mutates `array`. Use `_.remove`\n     * to remove elements from an array by predicate.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Array\n     * @param {Array} array The array to modify.\n     * @param {...*} [values] The values to remove.\n     * @returns {Array} Returns `array`.\n     * @example\n     *\n     * var array = ['a', 'b', 'c', 'a', 'b', 'c'];\n     *\n     * _.pull(array, 'a', 'c');\n     * console.log(array);\n     * // => ['b', 'b']\n     */\n\n\n    var pull = baseRest(pullAll);\n    /**\n     * This method is like `_.pull` except that it accepts an array of values to remove.\n     *\n     * **Note:** Unlike `_.difference`, this method mutates `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to modify.\n     * @param {Array} values The values to remove.\n     * @returns {Array} Returns `array`.\n     * @example\n     *\n     * var array = ['a', 'b', 'c', 'a', 'b', 'c'];\n     *\n     * _.pullAll(array, ['a', 'c']);\n     * console.log(array);\n     * // => ['b', 'b']\n     */\n\n    function pullAll(array, values) {\n      return array && array.length && values && values.length ? basePullAll(array, values) : array;\n    }\n    /**\n     * This method is like `_.pullAll` except that it accepts `iteratee` which is\n     * invoked for each element of `array` and `values` to generate the criterion\n     * by which they're compared. The iteratee is invoked with one argument: (value).\n     *\n     * **Note:** Unlike `_.differenceBy`, this method mutates `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to modify.\n     * @param {Array} values The values to remove.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {Array} Returns `array`.\n     * @example\n     *\n     * var array = [{ 'x': 1 }, { 'x': 2 }, { 'x': 3 }, { 'x': 1 }];\n     *\n     * _.pullAllBy(array, [{ 'x': 1 }, { 'x': 3 }], 'x');\n     * console.log(array);\n     * // => [{ 'x': 2 }]\n     */\n\n\n    function pullAllBy(array, values, iteratee) {\n      return array && array.length && values && values.length ? basePullAll(array, values, getIteratee(iteratee, 2)) : array;\n    }\n    /**\n     * This method is like `_.pullAll` except that it accepts `comparator` which\n     * is invoked to compare elements of `array` to `values`. The comparator is\n     * invoked with two arguments: (arrVal, othVal).\n     *\n     * **Note:** Unlike `_.differenceWith`, this method mutates `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.6.0\n     * @category Array\n     * @param {Array} array The array to modify.\n     * @param {Array} values The values to remove.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns `array`.\n     * @example\n     *\n     * var array = [{ 'x': 1, 'y': 2 }, { 'x': 3, 'y': 4 }, { 'x': 5, 'y': 6 }];\n     *\n     * _.pullAllWith(array, [{ 'x': 3, 'y': 4 }], _.isEqual);\n     * console.log(array);\n     * // => [{ 'x': 1, 'y': 2 }, { 'x': 5, 'y': 6 }]\n     */\n\n\n    function pullAllWith(array, values, comparator) {\n      return array && array.length && values && values.length ? basePullAll(array, values, undefined, comparator) : array;\n    }\n    /**\n     * Removes elements from `array` corresponding to `indexes` and returns an\n     * array of removed elements.\n     *\n     * **Note:** Unlike `_.at`, this method mutates `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to modify.\n     * @param {...(number|number[])} [indexes] The indexes of elements to remove.\n     * @returns {Array} Returns the new array of removed elements.\n     * @example\n     *\n     * var array = ['a', 'b', 'c', 'd'];\n     * var pulled = _.pullAt(array, [1, 3]);\n     *\n     * console.log(array);\n     * // => ['a', 'c']\n     *\n     * console.log(pulled);\n     * // => ['b', 'd']\n     */\n\n\n    var pullAt = flatRest(function (array, indexes) {\n      var length = array == null ? 0 : array.length,\n          result = baseAt(array, indexes);\n      basePullAt(array, arrayMap(indexes, function (index) {\n        return isIndex(index, length) ? +index : index;\n      }).sort(compareAscending));\n      return result;\n    });\n    /**\n     * Removes all elements from `array` that `predicate` returns truthy for\n     * and returns an array of the removed elements. The predicate is invoked\n     * with three arguments: (value, index, array).\n     *\n     * **Note:** Unlike `_.filter`, this method mutates `array`. Use `_.pull`\n     * to pull elements from an array by value.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Array\n     * @param {Array} array The array to modify.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the new array of removed elements.\n     * @example\n     *\n     * var array = [1, 2, 3, 4];\n     * var evens = _.remove(array, function(n) {\n     *   return n % 2 == 0;\n     * });\n     *\n     * console.log(array);\n     * // => [1, 3]\n     *\n     * console.log(evens);\n     * // => [2, 4]\n     */\n\n    function remove(array, predicate) {\n      var result = [];\n\n      if (!(array && array.length)) {\n        return result;\n      }\n\n      var index = -1,\n          indexes = [],\n          length = array.length;\n      predicate = getIteratee(predicate, 3);\n\n      while (++index < length) {\n        var value = array[index];\n\n        if (predicate(value, index, array)) {\n          result.push(value);\n          indexes.push(index);\n        }\n      }\n\n      basePullAt(array, indexes);\n      return result;\n    }\n    /**\n     * Reverses `array` so that the first element becomes the last, the second\n     * element becomes the second to last, and so on.\n     *\n     * **Note:** This method mutates `array` and is based on\n     * [`Array#reverse`](https://mdn.io/Array/reverse).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to modify.\n     * @returns {Array} Returns `array`.\n     * @example\n     *\n     * var array = [1, 2, 3];\n     *\n     * _.reverse(array);\n     * // => [3, 2, 1]\n     *\n     * console.log(array);\n     * // => [3, 2, 1]\n     */\n\n\n    function reverse(array) {\n      return array == null ? array : nativeReverse.call(array);\n    }\n    /**\n     * Creates a slice of `array` from `start` up to, but not including, `end`.\n     *\n     * **Note:** This method is used instead of\n     * [`Array#slice`](https://mdn.io/Array/slice) to ensure dense arrays are\n     * returned.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to slice.\n     * @param {number} [start=0] The start position.\n     * @param {number} [end=array.length] The end position.\n     * @returns {Array} Returns the slice of `array`.\n     */\n\n\n    function slice(array, start, end) {\n      var length = array == null ? 0 : array.length;\n\n      if (!length) {\n        return [];\n      }\n\n      if (end && typeof end != 'number' && isIterateeCall(array, start, end)) {\n        start = 0;\n        end = length;\n      } else {\n        start = start == null ? 0 : toInteger(start);\n        end = end === undefined ? length : toInteger(end);\n      }\n\n      return baseSlice(array, start, end);\n    }\n    /**\n     * Uses a binary search to determine the lowest index at which `value`\n     * should be inserted into `array` in order to maintain its sort order.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The sorted array to inspect.\n     * @param {*} value The value to evaluate.\n     * @returns {number} Returns the index at which `value` should be inserted\n     *  into `array`.\n     * @example\n     *\n     * _.sortedIndex([30, 50], 40);\n     * // => 1\n     */\n\n\n    function sortedIndex(array, value) {\n      return baseSortedIndex(array, value);\n    }\n    /**\n     * This method is like `_.sortedIndex` except that it accepts `iteratee`\n     * which is invoked for `value` and each element of `array` to compute their\n     * sort ranking. The iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The sorted array to inspect.\n     * @param {*} value The value to evaluate.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {number} Returns the index at which `value` should be inserted\n     *  into `array`.\n     * @example\n     *\n     * var objects = [{ 'x': 4 }, { 'x': 5 }];\n     *\n     * _.sortedIndexBy(objects, { 'x': 4 }, function(o) { return o.x; });\n     * // => 0\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.sortedIndexBy(objects, { 'x': 4 }, 'x');\n     * // => 0\n     */\n\n\n    function sortedIndexBy(array, value, iteratee) {\n      return baseSortedIndexBy(array, value, getIteratee(iteratee, 2));\n    }\n    /**\n     * This method is like `_.indexOf` except that it performs a binary\n     * search on a sorted `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {*} value The value to search for.\n     * @returns {number} Returns the index of the matched value, else `-1`.\n     * @example\n     *\n     * _.sortedIndexOf([4, 5, 5, 5, 6], 5);\n     * // => 1\n     */\n\n\n    function sortedIndexOf(array, value) {\n      var length = array == null ? 0 : array.length;\n\n      if (length) {\n        var index = baseSortedIndex(array, value);\n\n        if (index < length && eq(array[index], value)) {\n          return index;\n        }\n      }\n\n      return -1;\n    }\n    /**\n     * This method is like `_.sortedIndex` except that it returns the highest\n     * index at which `value` should be inserted into `array` in order to\n     * maintain its sort order.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The sorted array to inspect.\n     * @param {*} value The value to evaluate.\n     * @returns {number} Returns the index at which `value` should be inserted\n     *  into `array`.\n     * @example\n     *\n     * _.sortedLastIndex([4, 5, 5, 5, 6], 5);\n     * // => 4\n     */\n\n\n    function sortedLastIndex(array, value) {\n      return baseSortedIndex(array, value, true);\n    }\n    /**\n     * This method is like `_.sortedLastIndex` except that it accepts `iteratee`\n     * which is invoked for `value` and each element of `array` to compute their\n     * sort ranking. The iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The sorted array to inspect.\n     * @param {*} value The value to evaluate.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {number} Returns the index at which `value` should be inserted\n     *  into `array`.\n     * @example\n     *\n     * var objects = [{ 'x': 4 }, { 'x': 5 }];\n     *\n     * _.sortedLastIndexBy(objects, { 'x': 4 }, function(o) { return o.x; });\n     * // => 1\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.sortedLastIndexBy(objects, { 'x': 4 }, 'x');\n     * // => 1\n     */\n\n\n    function sortedLastIndexBy(array, value, iteratee) {\n      return baseSortedIndexBy(array, value, getIteratee(iteratee, 2), true);\n    }\n    /**\n     * This method is like `_.lastIndexOf` except that it performs a binary\n     * search on a sorted `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {*} value The value to search for.\n     * @returns {number} Returns the index of the matched value, else `-1`.\n     * @example\n     *\n     * _.sortedLastIndexOf([4, 5, 5, 5, 6], 5);\n     * // => 3\n     */\n\n\n    function sortedLastIndexOf(array, value) {\n      var length = array == null ? 0 : array.length;\n\n      if (length) {\n        var index = baseSortedIndex(array, value, true) - 1;\n\n        if (eq(array[index], value)) {\n          return index;\n        }\n      }\n\n      return -1;\n    }\n    /**\n     * This method is like `_.uniq` except that it's designed and optimized\n     * for sorted arrays.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @returns {Array} Returns the new duplicate free array.\n     * @example\n     *\n     * _.sortedUniq([1, 1, 2]);\n     * // => [1, 2]\n     */\n\n\n    function sortedUniq(array) {\n      return array && array.length ? baseSortedUniq(array) : [];\n    }\n    /**\n     * This method is like `_.uniqBy` except that it's designed and optimized\n     * for sorted arrays.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {Function} [iteratee] The iteratee invoked per element.\n     * @returns {Array} Returns the new duplicate free array.\n     * @example\n     *\n     * _.sortedUniqBy([1.1, 1.2, 2.3, 2.4], Math.floor);\n     * // => [1.1, 2.3]\n     */\n\n\n    function sortedUniqBy(array, iteratee) {\n      return array && array.length ? baseSortedUniq(array, getIteratee(iteratee, 2)) : [];\n    }\n    /**\n     * Gets all but the first element of `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * _.tail([1, 2, 3]);\n     * // => [2, 3]\n     */\n\n\n    function tail(array) {\n      var length = array == null ? 0 : array.length;\n      return length ? baseSlice(array, 1, length) : [];\n    }\n    /**\n     * Creates a slice of `array` with `n` elements taken from the beginning.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {number} [n=1] The number of elements to take.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * _.take([1, 2, 3]);\n     * // => [1]\n     *\n     * _.take([1, 2, 3], 2);\n     * // => [1, 2]\n     *\n     * _.take([1, 2, 3], 5);\n     * // => [1, 2, 3]\n     *\n     * _.take([1, 2, 3], 0);\n     * // => []\n     */\n\n\n    function take(array, n, guard) {\n      if (!(array && array.length)) {\n        return [];\n      }\n\n      n = guard || n === undefined ? 1 : toInteger(n);\n      return baseSlice(array, 0, n < 0 ? 0 : n);\n    }\n    /**\n     * Creates a slice of `array` with `n` elements taken from the end.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {number} [n=1] The number of elements to take.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * _.takeRight([1, 2, 3]);\n     * // => [3]\n     *\n     * _.takeRight([1, 2, 3], 2);\n     * // => [2, 3]\n     *\n     * _.takeRight([1, 2, 3], 5);\n     * // => [1, 2, 3]\n     *\n     * _.takeRight([1, 2, 3], 0);\n     * // => []\n     */\n\n\n    function takeRight(array, n, guard) {\n      var length = array == null ? 0 : array.length;\n\n      if (!length) {\n        return [];\n      }\n\n      n = guard || n === undefined ? 1 : toInteger(n);\n      n = length - n;\n      return baseSlice(array, n < 0 ? 0 : n, length);\n    }\n    /**\n     * Creates a slice of `array` with elements taken from the end. Elements are\n     * taken until `predicate` returns falsey. The predicate is invoked with\n     * three arguments: (value, index, array).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'active': true },\n     *   { 'user': 'fred',    'active': false },\n     *   { 'user': 'pebbles', 'active': false }\n     * ];\n     *\n     * _.takeRightWhile(users, function(o) { return !o.active; });\n     * // => objects for ['fred', 'pebbles']\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.takeRightWhile(users, { 'user': 'pebbles', 'active': false });\n     * // => objects for ['pebbles']\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.takeRightWhile(users, ['active', false]);\n     * // => objects for ['fred', 'pebbles']\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.takeRightWhile(users, 'active');\n     * // => []\n     */\n\n\n    function takeRightWhile(array, predicate) {\n      return array && array.length ? baseWhile(array, getIteratee(predicate, 3), false, true) : [];\n    }\n    /**\n     * Creates a slice of `array` with elements taken from the beginning. Elements\n     * are taken until `predicate` returns falsey. The predicate is invoked with\n     * three arguments: (value, index, array).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Array\n     * @param {Array} array The array to query.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the slice of `array`.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'active': false },\n     *   { 'user': 'fred',    'active': false },\n     *   { 'user': 'pebbles', 'active': true }\n     * ];\n     *\n     * _.takeWhile(users, function(o) { return !o.active; });\n     * // => objects for ['barney', 'fred']\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.takeWhile(users, { 'user': 'barney', 'active': false });\n     * // => objects for ['barney']\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.takeWhile(users, ['active', false]);\n     * // => objects for ['barney', 'fred']\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.takeWhile(users, 'active');\n     * // => []\n     */\n\n\n    function takeWhile(array, predicate) {\n      return array && array.length ? baseWhile(array, getIteratee(predicate, 3)) : [];\n    }\n    /**\n     * Creates an array of unique values, in order, from all given arrays using\n     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @returns {Array} Returns the new array of combined values.\n     * @example\n     *\n     * _.union([2], [1, 2]);\n     * // => [2, 1]\n     */\n\n\n    var union = baseRest(function (arrays) {\n      return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true));\n    });\n    /**\n     * This method is like `_.union` except that it accepts `iteratee` which is\n     * invoked for each element of each `arrays` to generate the criterion by\n     * which uniqueness is computed. Result values are chosen from the first\n     * array in which the value occurs. The iteratee is invoked with one argument:\n     * (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {Array} Returns the new array of combined values.\n     * @example\n     *\n     * _.unionBy([2.1], [1.2, 2.3], Math.floor);\n     * // => [2.1, 1.2]\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.unionBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n     * // => [{ 'x': 1 }, { 'x': 2 }]\n     */\n\n    var unionBy = baseRest(function (arrays) {\n      var iteratee = last(arrays);\n\n      if (isArrayLikeObject(iteratee)) {\n        iteratee = undefined;\n      }\n\n      return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), getIteratee(iteratee, 2));\n    });\n    /**\n     * This method is like `_.union` except that it accepts `comparator` which\n     * is invoked to compare elements of `arrays`. Result values are chosen from\n     * the first array in which the value occurs. The comparator is invoked\n     * with two arguments: (arrVal, othVal).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new array of combined values.\n     * @example\n     *\n     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n     * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n     *\n     * _.unionWith(objects, others, _.isEqual);\n     * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }]\n     */\n\n    var unionWith = baseRest(function (arrays) {\n      var comparator = last(arrays);\n      comparator = typeof comparator == 'function' ? comparator : undefined;\n      return baseUniq(baseFlatten(arrays, 1, isArrayLikeObject, true), undefined, comparator);\n    });\n    /**\n     * Creates a duplicate-free version of an array, using\n     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons, in which only the first occurrence of each element\n     * is kept. The order of result values is determined by the order they occur\n     * in the array.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @returns {Array} Returns the new duplicate free array.\n     * @example\n     *\n     * _.uniq([2, 1, 2]);\n     * // => [2, 1]\n     */\n\n    function uniq(array) {\n      return array && array.length ? baseUniq(array) : [];\n    }\n    /**\n     * This method is like `_.uniq` except that it accepts `iteratee` which is\n     * invoked for each element in `array` to generate the criterion by which\n     * uniqueness is computed. The order of result values is determined by the\n     * order they occur in the array. The iteratee is invoked with one argument:\n     * (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {Array} Returns the new duplicate free array.\n     * @example\n     *\n     * _.uniqBy([2.1, 1.2, 2.3], Math.floor);\n     * // => [2.1, 1.2]\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.uniqBy([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x');\n     * // => [{ 'x': 1 }, { 'x': 2 }]\n     */\n\n\n    function uniqBy(array, iteratee) {\n      return array && array.length ? baseUniq(array, getIteratee(iteratee, 2)) : [];\n    }\n    /**\n     * This method is like `_.uniq` except that it accepts `comparator` which\n     * is invoked to compare elements of `array`. The order of result values is\n     * determined by the order they occur in the array.The comparator is invoked\n     * with two arguments: (arrVal, othVal).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new duplicate free array.\n     * @example\n     *\n     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }, { 'x': 1, 'y': 2 }];\n     *\n     * _.uniqWith(objects, _.isEqual);\n     * // => [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }]\n     */\n\n\n    function uniqWith(array, comparator) {\n      comparator = typeof comparator == 'function' ? comparator : undefined;\n      return array && array.length ? baseUniq(array, undefined, comparator) : [];\n    }\n    /**\n     * This method is like `_.zip` except that it accepts an array of grouped\n     * elements and creates an array regrouping the elements to their pre-zip\n     * configuration.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.2.0\n     * @category Array\n     * @param {Array} array The array of grouped elements to process.\n     * @returns {Array} Returns the new array of regrouped elements.\n     * @example\n     *\n     * var zipped = _.zip(['a', 'b'], [1, 2], [true, false]);\n     * // => [['a', 1, true], ['b', 2, false]]\n     *\n     * _.unzip(zipped);\n     * // => [['a', 'b'], [1, 2], [true, false]]\n     */\n\n\n    function unzip(array) {\n      if (!(array && array.length)) {\n        return [];\n      }\n\n      var length = 0;\n      array = arrayFilter(array, function (group) {\n        if (isArrayLikeObject(group)) {\n          length = nativeMax(group.length, length);\n          return true;\n        }\n      });\n      return baseTimes(length, function (index) {\n        return arrayMap(array, baseProperty(index));\n      });\n    }\n    /**\n     * This method is like `_.unzip` except that it accepts `iteratee` to specify\n     * how regrouped values should be combined. The iteratee is invoked with the\n     * elements of each group: (...group).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.8.0\n     * @category Array\n     * @param {Array} array The array of grouped elements to process.\n     * @param {Function} [iteratee=_.identity] The function to combine\n     *  regrouped values.\n     * @returns {Array} Returns the new array of regrouped elements.\n     * @example\n     *\n     * var zipped = _.zip([1, 2], [10, 20], [100, 200]);\n     * // => [[1, 10, 100], [2, 20, 200]]\n     *\n     * _.unzipWith(zipped, _.add);\n     * // => [3, 30, 300]\n     */\n\n\n    function unzipWith(array, iteratee) {\n      if (!(array && array.length)) {\n        return [];\n      }\n\n      var result = unzip(array);\n\n      if (iteratee == null) {\n        return result;\n      }\n\n      return arrayMap(result, function (group) {\n        return apply(iteratee, undefined, group);\n      });\n    }\n    /**\n     * Creates an array excluding all given values using\n     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * for equality comparisons.\n     *\n     * **Note:** Unlike `_.pull`, this method returns a new array.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {Array} array The array to inspect.\n     * @param {...*} [values] The values to exclude.\n     * @returns {Array} Returns the new array of filtered values.\n     * @see _.difference, _.xor\n     * @example\n     *\n     * _.without([2, 1, 2, 3], 1, 2);\n     * // => [3]\n     */\n\n\n    var without = baseRest(function (array, values) {\n      return isArrayLikeObject(array) ? baseDifference(array, values) : [];\n    });\n    /**\n     * Creates an array of unique values that is the\n     * [symmetric difference](https://en.wikipedia.org/wiki/Symmetric_difference)\n     * of the given arrays. The order of result values is determined by the order\n     * they occur in the arrays.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.4.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @returns {Array} Returns the new array of filtered values.\n     * @see _.difference, _.without\n     * @example\n     *\n     * _.xor([2, 1], [2, 3]);\n     * // => [1, 3]\n     */\n\n    var xor = baseRest(function (arrays) {\n      return baseXor(arrayFilter(arrays, isArrayLikeObject));\n    });\n    /**\n     * This method is like `_.xor` except that it accepts `iteratee` which is\n     * invoked for each element of each `arrays` to generate the criterion by\n     * which by which they're compared. The order of result values is determined\n     * by the order they occur in the arrays. The iteratee is invoked with one\n     * argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {Array} Returns the new array of filtered values.\n     * @example\n     *\n     * _.xorBy([2.1, 1.2], [2.3, 3.4], Math.floor);\n     * // => [1.2, 3.4]\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.xorBy([{ 'x': 1 }], [{ 'x': 2 }, { 'x': 1 }], 'x');\n     * // => [{ 'x': 2 }]\n     */\n\n    var xorBy = baseRest(function (arrays) {\n      var iteratee = last(arrays);\n\n      if (isArrayLikeObject(iteratee)) {\n        iteratee = undefined;\n      }\n\n      return baseXor(arrayFilter(arrays, isArrayLikeObject), getIteratee(iteratee, 2));\n    });\n    /**\n     * This method is like `_.xor` except that it accepts `comparator` which is\n     * invoked to compare elements of `arrays`. The order of result values is\n     * determined by the order they occur in the arrays. The comparator is invoked\n     * with two arguments: (arrVal, othVal).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to inspect.\n     * @param {Function} [comparator] The comparator invoked per element.\n     * @returns {Array} Returns the new array of filtered values.\n     * @example\n     *\n     * var objects = [{ 'x': 1, 'y': 2 }, { 'x': 2, 'y': 1 }];\n     * var others = [{ 'x': 1, 'y': 1 }, { 'x': 1, 'y': 2 }];\n     *\n     * _.xorWith(objects, others, _.isEqual);\n     * // => [{ 'x': 2, 'y': 1 }, { 'x': 1, 'y': 1 }]\n     */\n\n    var xorWith = baseRest(function (arrays) {\n      var comparator = last(arrays);\n      comparator = typeof comparator == 'function' ? comparator : undefined;\n      return baseXor(arrayFilter(arrays, isArrayLikeObject), undefined, comparator);\n    });\n    /**\n     * Creates an array of grouped elements, the first of which contains the\n     * first elements of the given arrays, the second of which contains the\n     * second elements of the given arrays, and so on.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to process.\n     * @returns {Array} Returns the new array of grouped elements.\n     * @example\n     *\n     * _.zip(['a', 'b'], [1, 2], [true, false]);\n     * // => [['a', 1, true], ['b', 2, false]]\n     */\n\n    var zip = baseRest(unzip);\n    /**\n     * This method is like `_.fromPairs` except that it accepts two arrays,\n     * one of property identifiers and one of corresponding values.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.4.0\n     * @category Array\n     * @param {Array} [props=[]] The property identifiers.\n     * @param {Array} [values=[]] The property values.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * _.zipObject(['a', 'b'], [1, 2]);\n     * // => { 'a': 1, 'b': 2 }\n     */\n\n    function zipObject(props, values) {\n      return baseZipObject(props || [], values || [], assignValue);\n    }\n    /**\n     * This method is like `_.zipObject` except that it supports property paths.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.1.0\n     * @category Array\n     * @param {Array} [props=[]] The property identifiers.\n     * @param {Array} [values=[]] The property values.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * _.zipObjectDeep(['a.b[0].c', 'a.b[1].d'], [1, 2]);\n     * // => { 'a': { 'b': [{ 'c': 1 }, { 'd': 2 }] } }\n     */\n\n\n    function zipObjectDeep(props, values) {\n      return baseZipObject(props || [], values || [], baseSet);\n    }\n    /**\n     * This method is like `_.zip` except that it accepts `iteratee` to specify\n     * how grouped values should be combined. The iteratee is invoked with the\n     * elements of each group: (...group).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.8.0\n     * @category Array\n     * @param {...Array} [arrays] The arrays to process.\n     * @param {Function} [iteratee=_.identity] The function to combine\n     *  grouped values.\n     * @returns {Array} Returns the new array of grouped elements.\n     * @example\n     *\n     * _.zipWith([1, 2], [10, 20], [100, 200], function(a, b, c) {\n     *   return a + b + c;\n     * });\n     * // => [111, 222]\n     */\n\n\n    var zipWith = baseRest(function (arrays) {\n      var length = arrays.length,\n          iteratee = length > 1 ? arrays[length - 1] : undefined;\n      iteratee = typeof iteratee == 'function' ? (arrays.pop(), iteratee) : undefined;\n      return unzipWith(arrays, iteratee);\n    });\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates a `lodash` wrapper instance that wraps `value` with explicit method\n     * chain sequences enabled. The result of such sequences must be unwrapped\n     * with `_#value`.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.3.0\n     * @category Seq\n     * @param {*} value The value to wrap.\n     * @returns {Object} Returns the new `lodash` wrapper instance.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'age': 36 },\n     *   { 'user': 'fred',    'age': 40 },\n     *   { 'user': 'pebbles', 'age': 1 }\n     * ];\n     *\n     * var youngest = _\n     *   .chain(users)\n     *   .sortBy('age')\n     *   .map(function(o) {\n     *     return o.user + ' is ' + o.age;\n     *   })\n     *   .head()\n     *   .value();\n     * // => 'pebbles is 1'\n     */\n\n    function chain(value) {\n      var result = lodash(value);\n      result.__chain__ = true;\n      return result;\n    }\n    /**\n     * This method invokes `interceptor` and returns `value`. The interceptor\n     * is invoked with one argument; (value). The purpose of this method is to\n     * \"tap into\" a method chain sequence in order to modify intermediate results.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Seq\n     * @param {*} value The value to provide to `interceptor`.\n     * @param {Function} interceptor The function to invoke.\n     * @returns {*} Returns `value`.\n     * @example\n     *\n     * _([1, 2, 3])\n     *  .tap(function(array) {\n     *    // Mutate input array.\n     *    array.pop();\n     *  })\n     *  .reverse()\n     *  .value();\n     * // => [2, 1]\n     */\n\n\n    function tap(value, interceptor) {\n      interceptor(value);\n      return value;\n    }\n    /**\n     * This method is like `_.tap` except that it returns the result of `interceptor`.\n     * The purpose of this method is to \"pass thru\" values replacing intermediate\n     * results in a method chain sequence.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Seq\n     * @param {*} value The value to provide to `interceptor`.\n     * @param {Function} interceptor The function to invoke.\n     * @returns {*} Returns the result of `interceptor`.\n     * @example\n     *\n     * _('  abc  ')\n     *  .chain()\n     *  .trim()\n     *  .thru(function(value) {\n     *    return [value];\n     *  })\n     *  .value();\n     * // => ['abc']\n     */\n\n\n    function thru(value, interceptor) {\n      return interceptor(value);\n    }\n    /**\n     * This method is the wrapper version of `_.at`.\n     *\n     * @name at\n     * @memberOf _\n     * @since 1.0.0\n     * @category Seq\n     * @param {...(string|string[])} [paths] The property paths to pick.\n     * @returns {Object} Returns the new `lodash` wrapper instance.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] };\n     *\n     * _(object).at(['a[0].b.c', 'a[1]']).value();\n     * // => [3, 4]\n     */\n\n\n    var wrapperAt = flatRest(function (paths) {\n      var length = paths.length,\n          start = length ? paths[0] : 0,\n          value = this.__wrapped__,\n          interceptor = function interceptor(object) {\n        return baseAt(object, paths);\n      };\n\n      if (length > 1 || this.__actions__.length || !(value instanceof LazyWrapper) || !isIndex(start)) {\n        return this.thru(interceptor);\n      }\n\n      value = value.slice(start, +start + (length ? 1 : 0));\n\n      value.__actions__.push({\n        'func': thru,\n        'args': [interceptor],\n        'thisArg': undefined\n      });\n\n      return new LodashWrapper(value, this.__chain__).thru(function (array) {\n        if (length && !array.length) {\n          array.push(undefined);\n        }\n\n        return array;\n      });\n    });\n    /**\n     * Creates a `lodash` wrapper instance with explicit method chain sequences enabled.\n     *\n     * @name chain\n     * @memberOf _\n     * @since 0.1.0\n     * @category Seq\n     * @returns {Object} Returns the new `lodash` wrapper instance.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney', 'age': 36 },\n     *   { 'user': 'fred',   'age': 40 }\n     * ];\n     *\n     * // A sequence without explicit chaining.\n     * _(users).head();\n     * // => { 'user': 'barney', 'age': 36 }\n     *\n     * // A sequence with explicit chaining.\n     * _(users)\n     *   .chain()\n     *   .head()\n     *   .pick('user')\n     *   .value();\n     * // => { 'user': 'barney' }\n     */\n\n    function wrapperChain() {\n      return chain(this);\n    }\n    /**\n     * Executes the chain sequence and returns the wrapped result.\n     *\n     * @name commit\n     * @memberOf _\n     * @since 3.2.0\n     * @category Seq\n     * @returns {Object} Returns the new `lodash` wrapper instance.\n     * @example\n     *\n     * var array = [1, 2];\n     * var wrapped = _(array).push(3);\n     *\n     * console.log(array);\n     * // => [1, 2]\n     *\n     * wrapped = wrapped.commit();\n     * console.log(array);\n     * // => [1, 2, 3]\n     *\n     * wrapped.last();\n     * // => 3\n     *\n     * console.log(array);\n     * // => [1, 2, 3]\n     */\n\n\n    function wrapperCommit() {\n      return new LodashWrapper(this.value(), this.__chain__);\n    }\n    /**\n     * Gets the next value on a wrapped object following the\n     * [iterator protocol](https://mdn.io/iteration_protocols#iterator).\n     *\n     * @name next\n     * @memberOf _\n     * @since 4.0.0\n     * @category Seq\n     * @returns {Object} Returns the next iterator value.\n     * @example\n     *\n     * var wrapped = _([1, 2]);\n     *\n     * wrapped.next();\n     * // => { 'done': false, 'value': 1 }\n     *\n     * wrapped.next();\n     * // => { 'done': false, 'value': 2 }\n     *\n     * wrapped.next();\n     * // => { 'done': true, 'value': undefined }\n     */\n\n\n    function wrapperNext() {\n      if (this.__values__ === undefined) {\n        this.__values__ = toArray(this.value());\n      }\n\n      var done = this.__index__ >= this.__values__.length,\n          value = done ? undefined : this.__values__[this.__index__++];\n      return {\n        'done': done,\n        'value': value\n      };\n    }\n    /**\n     * Enables the wrapper to be iterable.\n     *\n     * @name Symbol.iterator\n     * @memberOf _\n     * @since 4.0.0\n     * @category Seq\n     * @returns {Object} Returns the wrapper object.\n     * @example\n     *\n     * var wrapped = _([1, 2]);\n     *\n     * wrapped[Symbol.iterator]() === wrapped;\n     * // => true\n     *\n     * Array.from(wrapped);\n     * // => [1, 2]\n     */\n\n\n    function wrapperToIterator() {\n      return this;\n    }\n    /**\n     * Creates a clone of the chain sequence planting `value` as the wrapped value.\n     *\n     * @name plant\n     * @memberOf _\n     * @since 3.2.0\n     * @category Seq\n     * @param {*} value The value to plant.\n     * @returns {Object} Returns the new `lodash` wrapper instance.\n     * @example\n     *\n     * function square(n) {\n     *   return n * n;\n     * }\n     *\n     * var wrapped = _([1, 2]).map(square);\n     * var other = wrapped.plant([3, 4]);\n     *\n     * other.value();\n     * // => [9, 16]\n     *\n     * wrapped.value();\n     * // => [1, 4]\n     */\n\n\n    function wrapperPlant(value) {\n      var result,\n          parent = this;\n\n      while (parent instanceof baseLodash) {\n        var clone = wrapperClone(parent);\n        clone.__index__ = 0;\n        clone.__values__ = undefined;\n\n        if (result) {\n          previous.__wrapped__ = clone;\n        } else {\n          result = clone;\n        }\n\n        var previous = clone;\n        parent = parent.__wrapped__;\n      }\n\n      previous.__wrapped__ = value;\n      return result;\n    }\n    /**\n     * This method is the wrapper version of `_.reverse`.\n     *\n     * **Note:** This method mutates the wrapped array.\n     *\n     * @name reverse\n     * @memberOf _\n     * @since 0.1.0\n     * @category Seq\n     * @returns {Object} Returns the new `lodash` wrapper instance.\n     * @example\n     *\n     * var array = [1, 2, 3];\n     *\n     * _(array).reverse().value()\n     * // => [3, 2, 1]\n     *\n     * console.log(array);\n     * // => [3, 2, 1]\n     */\n\n\n    function wrapperReverse() {\n      var value = this.__wrapped__;\n\n      if (value instanceof LazyWrapper) {\n        var wrapped = value;\n\n        if (this.__actions__.length) {\n          wrapped = new LazyWrapper(this);\n        }\n\n        wrapped = wrapped.reverse();\n\n        wrapped.__actions__.push({\n          'func': thru,\n          'args': [reverse],\n          'thisArg': undefined\n        });\n\n        return new LodashWrapper(wrapped, this.__chain__);\n      }\n\n      return this.thru(reverse);\n    }\n    /**\n     * Executes the chain sequence to resolve the unwrapped value.\n     *\n     * @name value\n     * @memberOf _\n     * @since 0.1.0\n     * @alias toJSON, valueOf\n     * @category Seq\n     * @returns {*} Returns the resolved unwrapped value.\n     * @example\n     *\n     * _([1, 2, 3]).value();\n     * // => [1, 2, 3]\n     */\n\n\n    function wrapperValue() {\n      return baseWrapperValue(this.__wrapped__, this.__actions__);\n    }\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Creates an object composed of keys generated from the results of running\n     * each element of `collection` thru `iteratee`. The corresponding value of\n     * each key is the number of times the key was returned by `iteratee`. The\n     * iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.5.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n     * @returns {Object} Returns the composed aggregate object.\n     * @example\n     *\n     * _.countBy([6.1, 4.2, 6.3], Math.floor);\n     * // => { '4': 1, '6': 2 }\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.countBy(['one', 'two', 'three'], 'length');\n     * // => { '3': 2, '5': 1 }\n     */\n\n\n    var countBy = createAggregator(function (result, value, key) {\n      if (hasOwnProperty.call(result, key)) {\n        ++result[key];\n      } else {\n        baseAssignValue(result, key, 1);\n      }\n    });\n    /**\n     * Checks if `predicate` returns truthy for **all** elements of `collection`.\n     * Iteration is stopped once `predicate` returns falsey. The predicate is\n     * invoked with three arguments: (value, index|key, collection).\n     *\n     * **Note:** This method returns `true` for\n     * [empty collections](https://en.wikipedia.org/wiki/Empty_set) because\n     * [everything is true](https://en.wikipedia.org/wiki/Vacuous_truth) of\n     * elements of empty collections.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {boolean} Returns `true` if all elements pass the predicate check,\n     *  else `false`.\n     * @example\n     *\n     * _.every([true, 1, null, 'yes'], Boolean);\n     * // => false\n     *\n     * var users = [\n     *   { 'user': 'barney', 'age': 36, 'active': false },\n     *   { 'user': 'fred',   'age': 40, 'active': false }\n     * ];\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.every(users, { 'user': 'barney', 'active': false });\n     * // => false\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.every(users, ['active', false]);\n     * // => true\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.every(users, 'active');\n     * // => false\n     */\n\n    function every(collection, predicate, guard) {\n      var func = isArray(collection) ? arrayEvery : baseEvery;\n\n      if (guard && isIterateeCall(collection, predicate, guard)) {\n        predicate = undefined;\n      }\n\n      return func(collection, getIteratee(predicate, 3));\n    }\n    /**\n     * Iterates over elements of `collection`, returning an array of all elements\n     * `predicate` returns truthy for. The predicate is invoked with three\n     * arguments: (value, index|key, collection).\n     *\n     * **Note:** Unlike `_.remove`, this method returns a new array.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the new filtered array.\n     * @see _.reject\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney', 'age': 36, 'active': true },\n     *   { 'user': 'fred',   'age': 40, 'active': false }\n     * ];\n     *\n     * _.filter(users, function(o) { return !o.active; });\n     * // => objects for ['fred']\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.filter(users, { 'age': 36, 'active': true });\n     * // => objects for ['barney']\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.filter(users, ['active', false]);\n     * // => objects for ['fred']\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.filter(users, 'active');\n     * // => objects for ['barney']\n     */\n\n\n    function filter(collection, predicate) {\n      var func = isArray(collection) ? arrayFilter : baseFilter;\n      return func(collection, getIteratee(predicate, 3));\n    }\n    /**\n     * Iterates over elements of `collection`, returning the first element\n     * `predicate` returns truthy for. The predicate is invoked with three\n     * arguments: (value, index|key, collection).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to inspect.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @param {number} [fromIndex=0] The index to search from.\n     * @returns {*} Returns the matched element, else `undefined`.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'age': 36, 'active': true },\n     *   { 'user': 'fred',    'age': 40, 'active': false },\n     *   { 'user': 'pebbles', 'age': 1,  'active': true }\n     * ];\n     *\n     * _.find(users, function(o) { return o.age < 40; });\n     * // => object for 'barney'\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.find(users, { 'age': 1, 'active': true });\n     * // => object for 'pebbles'\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.find(users, ['active', false]);\n     * // => object for 'fred'\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.find(users, 'active');\n     * // => object for 'barney'\n     */\n\n\n    var find = createFind(findIndex);\n    /**\n     * This method is like `_.find` except that it iterates over elements of\n     * `collection` from right to left.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to inspect.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @param {number} [fromIndex=collection.length-1] The index to search from.\n     * @returns {*} Returns the matched element, else `undefined`.\n     * @example\n     *\n     * _.findLast([1, 2, 3, 4], function(n) {\n     *   return n % 2 == 1;\n     * });\n     * // => 3\n     */\n\n    var findLast = createFind(findLastIndex);\n    /**\n     * Creates a flattened array of values by running each element in `collection`\n     * thru `iteratee` and flattening the mapped results. The iteratee is invoked\n     * with three arguments: (value, index|key, collection).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the new flattened array.\n     * @example\n     *\n     * function duplicate(n) {\n     *   return [n, n];\n     * }\n     *\n     * _.flatMap([1, 2], duplicate);\n     * // => [1, 1, 2, 2]\n     */\n\n    function flatMap(collection, iteratee) {\n      return baseFlatten(map(collection, iteratee), 1);\n    }\n    /**\n     * This method is like `_.flatMap` except that it recursively flattens the\n     * mapped results.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.7.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the new flattened array.\n     * @example\n     *\n     * function duplicate(n) {\n     *   return [[[n, n]]];\n     * }\n     *\n     * _.flatMapDeep([1, 2], duplicate);\n     * // => [1, 1, 2, 2]\n     */\n\n\n    function flatMapDeep(collection, iteratee) {\n      return baseFlatten(map(collection, iteratee), INFINITY);\n    }\n    /**\n     * This method is like `_.flatMap` except that it recursively flattens the\n     * mapped results up to `depth` times.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.7.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @param {number} [depth=1] The maximum recursion depth.\n     * @returns {Array} Returns the new flattened array.\n     * @example\n     *\n     * function duplicate(n) {\n     *   return [[[n, n]]];\n     * }\n     *\n     * _.flatMapDepth([1, 2], duplicate, 2);\n     * // => [[1, 1], [2, 2]]\n     */\n\n\n    function flatMapDepth(collection, iteratee, depth) {\n      depth = depth === undefined ? 1 : toInteger(depth);\n      return baseFlatten(map(collection, iteratee), depth);\n    }\n    /**\n     * Iterates over elements of `collection` and invokes `iteratee` for each element.\n     * The iteratee is invoked with three arguments: (value, index|key, collection).\n     * Iteratee functions may exit iteration early by explicitly returning `false`.\n     *\n     * **Note:** As with other \"Collections\" methods, objects with a \"length\"\n     * property are iterated like arrays. To avoid this behavior use `_.forIn`\n     * or `_.forOwn` for object iteration.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @alias each\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Array|Object} Returns `collection`.\n     * @see _.forEachRight\n     * @example\n     *\n     * _.forEach([1, 2], function(value) {\n     *   console.log(value);\n     * });\n     * // => Logs `1` then `2`.\n     *\n     * _.forEach({ 'a': 1, 'b': 2 }, function(value, key) {\n     *   console.log(key);\n     * });\n     * // => Logs 'a' then 'b' (iteration order is not guaranteed).\n     */\n\n\n    function forEach(collection, iteratee) {\n      var func = isArray(collection) ? arrayEach : baseEach;\n      return func(collection, getIteratee(iteratee, 3));\n    }\n    /**\n     * This method is like `_.forEach` except that it iterates over elements of\n     * `collection` from right to left.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @alias eachRight\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Array|Object} Returns `collection`.\n     * @see _.forEach\n     * @example\n     *\n     * _.forEachRight([1, 2], function(value) {\n     *   console.log(value);\n     * });\n     * // => Logs `2` then `1`.\n     */\n\n\n    function forEachRight(collection, iteratee) {\n      var func = isArray(collection) ? arrayEachRight : baseEachRight;\n      return func(collection, getIteratee(iteratee, 3));\n    }\n    /**\n     * Creates an object composed of keys generated from the results of running\n     * each element of `collection` thru `iteratee`. The order of grouped values\n     * is determined by the order they occur in `collection`. The corresponding\n     * value of each key is an array of elements responsible for generating the\n     * key. The iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n     * @returns {Object} Returns the composed aggregate object.\n     * @example\n     *\n     * _.groupBy([6.1, 4.2, 6.3], Math.floor);\n     * // => { '4': [4.2], '6': [6.1, 6.3] }\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.groupBy(['one', 'two', 'three'], 'length');\n     * // => { '3': ['one', 'two'], '5': ['three'] }\n     */\n\n\n    var groupBy = createAggregator(function (result, value, key) {\n      if (hasOwnProperty.call(result, key)) {\n        result[key].push(value);\n      } else {\n        baseAssignValue(result, key, [value]);\n      }\n    });\n    /**\n     * Checks if `value` is in `collection`. If `collection` is a string, it's\n     * checked for a substring of `value`, otherwise\n     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * is used for equality comparisons. If `fromIndex` is negative, it's used as\n     * the offset from the end of `collection`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object|string} collection The collection to inspect.\n     * @param {*} value The value to search for.\n     * @param {number} [fromIndex=0] The index to search from.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.\n     * @returns {boolean} Returns `true` if `value` is found, else `false`.\n     * @example\n     *\n     * _.includes([1, 2, 3], 1);\n     * // => true\n     *\n     * _.includes([1, 2, 3], 1, 2);\n     * // => false\n     *\n     * _.includes({ 'a': 1, 'b': 2 }, 1);\n     * // => true\n     *\n     * _.includes('abcd', 'bc');\n     * // => true\n     */\n\n    function includes(collection, value, fromIndex, guard) {\n      collection = isArrayLike(collection) ? collection : values(collection);\n      fromIndex = fromIndex && !guard ? toInteger(fromIndex) : 0;\n      var length = collection.length;\n\n      if (fromIndex < 0) {\n        fromIndex = nativeMax(length + fromIndex, 0);\n      }\n\n      return isString(collection) ? fromIndex <= length && collection.indexOf(value, fromIndex) > -1 : !!length && baseIndexOf(collection, value, fromIndex) > -1;\n    }\n    /**\n     * Invokes the method at `path` of each element in `collection`, returning\n     * an array of the results of each invoked method. Any additional arguments\n     * are provided to each invoked method. If `path` is a function, it's invoked\n     * for, and `this` bound to, each element in `collection`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Array|Function|string} path The path of the method to invoke or\n     *  the function invoked per iteration.\n     * @param {...*} [args] The arguments to invoke each method with.\n     * @returns {Array} Returns the array of results.\n     * @example\n     *\n     * _.invokeMap([[5, 1, 7], [3, 2, 1]], 'sort');\n     * // => [[1, 5, 7], [1, 2, 3]]\n     *\n     * _.invokeMap([123, 456], String.prototype.split, '');\n     * // => [['1', '2', '3'], ['4', '5', '6']]\n     */\n\n\n    var invokeMap = baseRest(function (collection, path, args) {\n      var index = -1,\n          isFunc = typeof path == 'function',\n          result = isArrayLike(collection) ? Array(collection.length) : [];\n      baseEach(collection, function (value) {\n        result[++index] = isFunc ? apply(path, value, args) : baseInvoke(value, path, args);\n      });\n      return result;\n    });\n    /**\n     * Creates an object composed of keys generated from the results of running\n     * each element of `collection` thru `iteratee`. The corresponding value of\n     * each key is the last element responsible for generating the key. The\n     * iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The iteratee to transform keys.\n     * @returns {Object} Returns the composed aggregate object.\n     * @example\n     *\n     * var array = [\n     *   { 'dir': 'left', 'code': 97 },\n     *   { 'dir': 'right', 'code': 100 }\n     * ];\n     *\n     * _.keyBy(array, function(o) {\n     *   return String.fromCharCode(o.code);\n     * });\n     * // => { 'a': { 'dir': 'left', 'code': 97 }, 'd': { 'dir': 'right', 'code': 100 } }\n     *\n     * _.keyBy(array, 'dir');\n     * // => { 'left': { 'dir': 'left', 'code': 97 }, 'right': { 'dir': 'right', 'code': 100 } }\n     */\n\n    var keyBy = createAggregator(function (result, value, key) {\n      baseAssignValue(result, key, value);\n    });\n    /**\n     * Creates an array of values by running each element in `collection` thru\n     * `iteratee`. The iteratee is invoked with three arguments:\n     * (value, index|key, collection).\n     *\n     * Many lodash methods are guarded to work as iteratees for methods like\n     * `_.every`, `_.filter`, `_.map`, `_.mapValues`, `_.reject`, and `_.some`.\n     *\n     * The guarded methods are:\n     * `ary`, `chunk`, `curry`, `curryRight`, `drop`, `dropRight`, `every`,\n     * `fill`, `invert`, `parseInt`, `random`, `range`, `rangeRight`, `repeat`,\n     * `sampleSize`, `slice`, `some`, `sortBy`, `split`, `take`, `takeRight`,\n     * `template`, `trim`, `trimEnd`, `trimStart`, and `words`\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the new mapped array.\n     * @example\n     *\n     * function square(n) {\n     *   return n * n;\n     * }\n     *\n     * _.map([4, 8], square);\n     * // => [16, 64]\n     *\n     * _.map({ 'a': 4, 'b': 8 }, square);\n     * // => [16, 64] (iteration order is not guaranteed)\n     *\n     * var users = [\n     *   { 'user': 'barney' },\n     *   { 'user': 'fred' }\n     * ];\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.map(users, 'user');\n     * // => ['barney', 'fred']\n     */\n\n    function map(collection, iteratee) {\n      var func = isArray(collection) ? arrayMap : baseMap;\n      return func(collection, getIteratee(iteratee, 3));\n    }\n    /**\n     * This method is like `_.sortBy` except that it allows specifying the sort\n     * orders of the iteratees to sort by. If `orders` is unspecified, all values\n     * are sorted in ascending order. Otherwise, specify an order of \"desc\" for\n     * descending or \"asc\" for ascending sort order of corresponding values.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Array[]|Function[]|Object[]|string[]} [iteratees=[_.identity]]\n     *  The iteratees to sort by.\n     * @param {string[]} [orders] The sort orders of `iteratees`.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.reduce`.\n     * @returns {Array} Returns the new sorted array.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'fred',   'age': 48 },\n     *   { 'user': 'barney', 'age': 34 },\n     *   { 'user': 'fred',   'age': 40 },\n     *   { 'user': 'barney', 'age': 36 }\n     * ];\n     *\n     * // Sort by `user` in ascending order and by `age` in descending order.\n     * _.orderBy(users, ['user', 'age'], ['asc', 'desc']);\n     * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]]\n     */\n\n\n    function orderBy(collection, iteratees, orders, guard) {\n      if (collection == null) {\n        return [];\n      }\n\n      if (!isArray(iteratees)) {\n        iteratees = iteratees == null ? [] : [iteratees];\n      }\n\n      orders = guard ? undefined : orders;\n\n      if (!isArray(orders)) {\n        orders = orders == null ? [] : [orders];\n      }\n\n      return baseOrderBy(collection, iteratees, orders);\n    }\n    /**\n     * Creates an array of elements split into two groups, the first of which\n     * contains elements `predicate` returns truthy for, the second of which\n     * contains elements `predicate` returns falsey for. The predicate is\n     * invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the array of grouped elements.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney',  'age': 36, 'active': false },\n     *   { 'user': 'fred',    'age': 40, 'active': true },\n     *   { 'user': 'pebbles', 'age': 1,  'active': false }\n     * ];\n     *\n     * _.partition(users, function(o) { return o.active; });\n     * // => objects for [['fred'], ['barney', 'pebbles']]\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.partition(users, { 'age': 1, 'active': false });\n     * // => objects for [['pebbles'], ['barney', 'fred']]\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.partition(users, ['active', false]);\n     * // => objects for [['barney', 'pebbles'], ['fred']]\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.partition(users, 'active');\n     * // => objects for [['fred'], ['barney', 'pebbles']]\n     */\n\n\n    var partition = createAggregator(function (result, value, key) {\n      result[key ? 0 : 1].push(value);\n    }, function () {\n      return [[], []];\n    });\n    /**\n     * Reduces `collection` to a value which is the accumulated result of running\n     * each element in `collection` thru `iteratee`, where each successive\n     * invocation is supplied the return value of the previous. If `accumulator`\n     * is not given, the first element of `collection` is used as the initial\n     * value. The iteratee is invoked with four arguments:\n     * (accumulator, value, index|key, collection).\n     *\n     * Many lodash methods are guarded to work as iteratees for methods like\n     * `_.reduce`, `_.reduceRight`, and `_.transform`.\n     *\n     * The guarded methods are:\n     * `assign`, `defaults`, `defaultsDeep`, `includes`, `merge`, `orderBy`,\n     * and `sortBy`\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @param {*} [accumulator] The initial value.\n     * @returns {*} Returns the accumulated value.\n     * @see _.reduceRight\n     * @example\n     *\n     * _.reduce([1, 2], function(sum, n) {\n     *   return sum + n;\n     * }, 0);\n     * // => 3\n     *\n     * _.reduce({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {\n     *   (result[value] || (result[value] = [])).push(key);\n     *   return result;\n     * }, {});\n     * // => { '1': ['a', 'c'], '2': ['b'] } (iteration order is not guaranteed)\n     */\n\n    function reduce(collection, iteratee, accumulator) {\n      var func = isArray(collection) ? arrayReduce : baseReduce,\n          initAccum = arguments.length < 3;\n      return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEach);\n    }\n    /**\n     * This method is like `_.reduce` except that it iterates over elements of\n     * `collection` from right to left.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @param {*} [accumulator] The initial value.\n     * @returns {*} Returns the accumulated value.\n     * @see _.reduce\n     * @example\n     *\n     * var array = [[0, 1], [2, 3], [4, 5]];\n     *\n     * _.reduceRight(array, function(flattened, other) {\n     *   return flattened.concat(other);\n     * }, []);\n     * // => [4, 5, 2, 3, 0, 1]\n     */\n\n\n    function reduceRight(collection, iteratee, accumulator) {\n      var func = isArray(collection) ? arrayReduceRight : baseReduce,\n          initAccum = arguments.length < 3;\n      return func(collection, getIteratee(iteratee, 4), accumulator, initAccum, baseEachRight);\n    }\n    /**\n     * The opposite of `_.filter`; this method returns the elements of `collection`\n     * that `predicate` does **not** return truthy for.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the new filtered array.\n     * @see _.filter\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney', 'age': 36, 'active': false },\n     *   { 'user': 'fred',   'age': 40, 'active': true }\n     * ];\n     *\n     * _.reject(users, function(o) { return !o.active; });\n     * // => objects for ['fred']\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.reject(users, { 'age': 40, 'active': true });\n     * // => objects for ['barney']\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.reject(users, ['active', false]);\n     * // => objects for ['fred']\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.reject(users, 'active');\n     * // => objects for ['barney']\n     */\n\n\n    function reject(collection, predicate) {\n      var func = isArray(collection) ? arrayFilter : baseFilter;\n      return func(collection, negate(getIteratee(predicate, 3)));\n    }\n    /**\n     * Gets a random element from `collection`.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to sample.\n     * @returns {*} Returns the random element.\n     * @example\n     *\n     * _.sample([1, 2, 3, 4]);\n     * // => 2\n     */\n\n\n    function sample(collection) {\n      var func = isArray(collection) ? arraySample : baseSample;\n      return func(collection);\n    }\n    /**\n     * Gets `n` random elements at unique keys from `collection` up to the\n     * size of `collection`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to sample.\n     * @param {number} [n=1] The number of elements to sample.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Array} Returns the random elements.\n     * @example\n     *\n     * _.sampleSize([1, 2, 3], 2);\n     * // => [3, 1]\n     *\n     * _.sampleSize([1, 2, 3], 4);\n     * // => [2, 3, 1]\n     */\n\n\n    function sampleSize(collection, n, guard) {\n      if (guard ? isIterateeCall(collection, n, guard) : n === undefined) {\n        n = 1;\n      } else {\n        n = toInteger(n);\n      }\n\n      var func = isArray(collection) ? arraySampleSize : baseSampleSize;\n      return func(collection, n);\n    }\n    /**\n     * Creates an array of shuffled values, using a version of the\n     * [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher-Yates_shuffle).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to shuffle.\n     * @returns {Array} Returns the new shuffled array.\n     * @example\n     *\n     * _.shuffle([1, 2, 3, 4]);\n     * // => [4, 1, 3, 2]\n     */\n\n\n    function shuffle(collection) {\n      var func = isArray(collection) ? arrayShuffle : baseShuffle;\n      return func(collection);\n    }\n    /**\n     * Gets the size of `collection` by returning its length for array-like\n     * values or the number of own enumerable string keyed properties for objects.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object|string} collection The collection to inspect.\n     * @returns {number} Returns the collection size.\n     * @example\n     *\n     * _.size([1, 2, 3]);\n     * // => 3\n     *\n     * _.size({ 'a': 1, 'b': 2 });\n     * // => 2\n     *\n     * _.size('pebbles');\n     * // => 7\n     */\n\n\n    function size(collection) {\n      if (collection == null) {\n        return 0;\n      }\n\n      if (isArrayLike(collection)) {\n        return isString(collection) ? stringSize(collection) : collection.length;\n      }\n\n      var tag = getTag(collection);\n\n      if (tag == mapTag || tag == setTag) {\n        return collection.size;\n      }\n\n      return baseKeys(collection).length;\n    }\n    /**\n     * Checks if `predicate` returns truthy for **any** element of `collection`.\n     * Iteration is stopped once `predicate` returns truthy. The predicate is\n     * invoked with three arguments: (value, index|key, collection).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {boolean} Returns `true` if any element passes the predicate check,\n     *  else `false`.\n     * @example\n     *\n     * _.some([null, 0, 'yes', false], Boolean);\n     * // => true\n     *\n     * var users = [\n     *   { 'user': 'barney', 'active': true },\n     *   { 'user': 'fred',   'active': false }\n     * ];\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.some(users, { 'user': 'barney', 'active': false });\n     * // => false\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.some(users, ['active', false]);\n     * // => true\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.some(users, 'active');\n     * // => true\n     */\n\n\n    function some(collection, predicate, guard) {\n      var func = isArray(collection) ? arraySome : baseSome;\n\n      if (guard && isIterateeCall(collection, predicate, guard)) {\n        predicate = undefined;\n      }\n\n      return func(collection, getIteratee(predicate, 3));\n    }\n    /**\n     * Creates an array of elements, sorted in ascending order by the results of\n     * running each element in a collection thru each iteratee. This method\n     * performs a stable sort, that is, it preserves the original sort order of\n     * equal elements. The iteratees are invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Collection\n     * @param {Array|Object} collection The collection to iterate over.\n     * @param {...(Function|Function[])} [iteratees=[_.identity]]\n     *  The iteratees to sort by.\n     * @returns {Array} Returns the new sorted array.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'fred',   'age': 48 },\n     *   { 'user': 'barney', 'age': 36 },\n     *   { 'user': 'fred',   'age': 40 },\n     *   { 'user': 'barney', 'age': 34 }\n     * ];\n     *\n     * _.sortBy(users, [function(o) { return o.user; }]);\n     * // => objects for [['barney', 36], ['barney', 34], ['fred', 48], ['fred', 40]]\n     *\n     * _.sortBy(users, ['user', 'age']);\n     * // => objects for [['barney', 34], ['barney', 36], ['fred', 40], ['fred', 48]]\n     */\n\n\n    var sortBy = baseRest(function (collection, iteratees) {\n      if (collection == null) {\n        return [];\n      }\n\n      var length = iteratees.length;\n\n      if (length > 1 && isIterateeCall(collection, iteratees[0], iteratees[1])) {\n        iteratees = [];\n      } else if (length > 2 && isIterateeCall(iteratees[0], iteratees[1], iteratees[2])) {\n        iteratees = [iteratees[0]];\n      }\n\n      return baseOrderBy(collection, baseFlatten(iteratees, 1), []);\n    });\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Gets the timestamp of the number of milliseconds that have elapsed since\n     * the Unix epoch (1 January 1970 00:00:00 UTC).\n     *\n     * @static\n     * @memberOf _\n     * @since 2.4.0\n     * @category Date\n     * @returns {number} Returns the timestamp.\n     * @example\n     *\n     * _.defer(function(stamp) {\n     *   console.log(_.now() - stamp);\n     * }, _.now());\n     * // => Logs the number of milliseconds it took for the deferred invocation.\n     */\n\n    var now = ctxNow || function () {\n      return root.Date.now();\n    };\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * The opposite of `_.before`; this method creates a function that invokes\n     * `func` once it's called `n` or more times.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {number} n The number of calls before `func` is invoked.\n     * @param {Function} func The function to restrict.\n     * @returns {Function} Returns the new restricted function.\n     * @example\n     *\n     * var saves = ['profile', 'settings'];\n     *\n     * var done = _.after(saves.length, function() {\n     *   console.log('done saving!');\n     * });\n     *\n     * _.forEach(saves, function(type) {\n     *   asyncSave({ 'type': type, 'complete': done });\n     * });\n     * // => Logs 'done saving!' after the two async saves have completed.\n     */\n\n\n    function after(n, func) {\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n\n      n = toInteger(n);\n      return function () {\n        if (--n < 1) {\n          return func.apply(this, arguments);\n        }\n      };\n    }\n    /**\n     * Creates a function that invokes `func`, with up to `n` arguments,\n     * ignoring any additional arguments.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Function\n     * @param {Function} func The function to cap arguments for.\n     * @param {number} [n=func.length] The arity cap.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Function} Returns the new capped function.\n     * @example\n     *\n     * _.map(['6', '8', '10'], _.ary(parseInt, 1));\n     * // => [6, 8, 10]\n     */\n\n\n    function ary(func, n, guard) {\n      n = guard ? undefined : n;\n      n = func && n == null ? func.length : n;\n      return createWrap(func, WRAP_ARY_FLAG, undefined, undefined, undefined, undefined, n);\n    }\n    /**\n     * Creates a function that invokes `func`, with the `this` binding and arguments\n     * of the created function, while it's called less than `n` times. Subsequent\n     * calls to the created function return the result of the last `func` invocation.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Function\n     * @param {number} n The number of calls at which `func` is no longer invoked.\n     * @param {Function} func The function to restrict.\n     * @returns {Function} Returns the new restricted function.\n     * @example\n     *\n     * jQuery(element).on('click', _.before(5, addContactToList));\n     * // => Allows adding up to 4 contacts to the list.\n     */\n\n\n    function before(n, func) {\n      var result;\n\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n\n      n = toInteger(n);\n      return function () {\n        if (--n > 0) {\n          result = func.apply(this, arguments);\n        }\n\n        if (n <= 1) {\n          func = undefined;\n        }\n\n        return result;\n      };\n    }\n    /**\n     * Creates a function that invokes `func` with the `this` binding of `thisArg`\n     * and `partials` prepended to the arguments it receives.\n     *\n     * The `_.bind.placeholder` value, which defaults to `_` in monolithic builds,\n     * may be used as a placeholder for partially applied arguments.\n     *\n     * **Note:** Unlike native `Function#bind`, this method doesn't set the \"length\"\n     * property of bound functions.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {Function} func The function to bind.\n     * @param {*} thisArg The `this` binding of `func`.\n     * @param {...*} [partials] The arguments to be partially applied.\n     * @returns {Function} Returns the new bound function.\n     * @example\n     *\n     * function greet(greeting, punctuation) {\n     *   return greeting + ' ' + this.user + punctuation;\n     * }\n     *\n     * var object = { 'user': 'fred' };\n     *\n     * var bound = _.bind(greet, object, 'hi');\n     * bound('!');\n     * // => 'hi fred!'\n     *\n     * // Bound with placeholders.\n     * var bound = _.bind(greet, object, _, '!');\n     * bound('hi');\n     * // => 'hi fred!'\n     */\n\n\n    var bind = baseRest(function (func, thisArg, partials) {\n      var bitmask = WRAP_BIND_FLAG;\n\n      if (partials.length) {\n        var holders = replaceHolders(partials, getHolder(bind));\n        bitmask |= WRAP_PARTIAL_FLAG;\n      }\n\n      return createWrap(func, bitmask, thisArg, partials, holders);\n    });\n    /**\n     * Creates a function that invokes the method at `object[key]` with `partials`\n     * prepended to the arguments it receives.\n     *\n     * This method differs from `_.bind` by allowing bound functions to reference\n     * methods that may be redefined or don't yet exist. See\n     * [Peter Michaux's article](http://peter.michaux.ca/articles/lazy-function-definition-pattern)\n     * for more details.\n     *\n     * The `_.bindKey.placeholder` value, which defaults to `_` in monolithic\n     * builds, may be used as a placeholder for partially applied arguments.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.10.0\n     * @category Function\n     * @param {Object} object The object to invoke the method on.\n     * @param {string} key The key of the method.\n     * @param {...*} [partials] The arguments to be partially applied.\n     * @returns {Function} Returns the new bound function.\n     * @example\n     *\n     * var object = {\n     *   'user': 'fred',\n     *   'greet': function(greeting, punctuation) {\n     *     return greeting + ' ' + this.user + punctuation;\n     *   }\n     * };\n     *\n     * var bound = _.bindKey(object, 'greet', 'hi');\n     * bound('!');\n     * // => 'hi fred!'\n     *\n     * object.greet = function(greeting, punctuation) {\n     *   return greeting + 'ya ' + this.user + punctuation;\n     * };\n     *\n     * bound('!');\n     * // => 'hiya fred!'\n     *\n     * // Bound with placeholders.\n     * var bound = _.bindKey(object, 'greet', _, '!');\n     * bound('hi');\n     * // => 'hiya fred!'\n     */\n\n    var bindKey = baseRest(function (object, key, partials) {\n      var bitmask = WRAP_BIND_FLAG | WRAP_BIND_KEY_FLAG;\n\n      if (partials.length) {\n        var holders = replaceHolders(partials, getHolder(bindKey));\n        bitmask |= WRAP_PARTIAL_FLAG;\n      }\n\n      return createWrap(key, bitmask, object, partials, holders);\n    });\n    /**\n     * Creates a function that accepts arguments of `func` and either invokes\n     * `func` returning its result, if at least `arity` number of arguments have\n     * been provided, or returns a function that accepts the remaining `func`\n     * arguments, and so on. The arity of `func` may be specified if `func.length`\n     * is not sufficient.\n     *\n     * The `_.curry.placeholder` value, which defaults to `_` in monolithic builds,\n     * may be used as a placeholder for provided arguments.\n     *\n     * **Note:** This method doesn't set the \"length\" property of curried functions.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Function\n     * @param {Function} func The function to curry.\n     * @param {number} [arity=func.length] The arity of `func`.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Function} Returns the new curried function.\n     * @example\n     *\n     * var abc = function(a, b, c) {\n     *   return [a, b, c];\n     * };\n     *\n     * var curried = _.curry(abc);\n     *\n     * curried(1)(2)(3);\n     * // => [1, 2, 3]\n     *\n     * curried(1, 2)(3);\n     * // => [1, 2, 3]\n     *\n     * curried(1, 2, 3);\n     * // => [1, 2, 3]\n     *\n     * // Curried with placeholders.\n     * curried(1)(_, 3)(2);\n     * // => [1, 2, 3]\n     */\n\n    function curry(func, arity, guard) {\n      arity = guard ? undefined : arity;\n      var result = createWrap(func, WRAP_CURRY_FLAG, undefined, undefined, undefined, undefined, undefined, arity);\n      result.placeholder = curry.placeholder;\n      return result;\n    }\n    /**\n     * This method is like `_.curry` except that arguments are applied to `func`\n     * in the manner of `_.partialRight` instead of `_.partial`.\n     *\n     * The `_.curryRight.placeholder` value, which defaults to `_` in monolithic\n     * builds, may be used as a placeholder for provided arguments.\n     *\n     * **Note:** This method doesn't set the \"length\" property of curried functions.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Function\n     * @param {Function} func The function to curry.\n     * @param {number} [arity=func.length] The arity of `func`.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Function} Returns the new curried function.\n     * @example\n     *\n     * var abc = function(a, b, c) {\n     *   return [a, b, c];\n     * };\n     *\n     * var curried = _.curryRight(abc);\n     *\n     * curried(3)(2)(1);\n     * // => [1, 2, 3]\n     *\n     * curried(2, 3)(1);\n     * // => [1, 2, 3]\n     *\n     * curried(1, 2, 3);\n     * // => [1, 2, 3]\n     *\n     * // Curried with placeholders.\n     * curried(3)(1, _)(2);\n     * // => [1, 2, 3]\n     */\n\n\n    function curryRight(func, arity, guard) {\n      arity = guard ? undefined : arity;\n      var result = createWrap(func, WRAP_CURRY_RIGHT_FLAG, undefined, undefined, undefined, undefined, undefined, arity);\n      result.placeholder = curryRight.placeholder;\n      return result;\n    }\n    /**\n     * Creates a debounced function that delays invoking `func` until after `wait`\n     * milliseconds have elapsed since the last time the debounced function was\n     * invoked. The debounced function comes with a `cancel` method to cancel\n     * delayed `func` invocations and a `flush` method to immediately invoke them.\n     * Provide `options` to indicate whether `func` should be invoked on the\n     * leading and/or trailing edge of the `wait` timeout. The `func` is invoked\n     * with the last arguments provided to the debounced function. Subsequent\n     * calls to the debounced function return the result of the last `func`\n     * invocation.\n     *\n     * **Note:** If `leading` and `trailing` options are `true`, `func` is\n     * invoked on the trailing edge of the timeout only if the debounced function\n     * is invoked more than once during the `wait` timeout.\n     *\n     * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n     * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n     *\n     * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n     * for details over the differences between `_.debounce` and `_.throttle`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {Function} func The function to debounce.\n     * @param {number} [wait=0] The number of milliseconds to delay.\n     * @param {Object} [options={}] The options object.\n     * @param {boolean} [options.leading=false]\n     *  Specify invoking on the leading edge of the timeout.\n     * @param {number} [options.maxWait]\n     *  The maximum time `func` is allowed to be delayed before it's invoked.\n     * @param {boolean} [options.trailing=true]\n     *  Specify invoking on the trailing edge of the timeout.\n     * @returns {Function} Returns the new debounced function.\n     * @example\n     *\n     * // Avoid costly calculations while the window size is in flux.\n     * jQuery(window).on('resize', _.debounce(calculateLayout, 150));\n     *\n     * // Invoke `sendMail` when clicked, debouncing subsequent calls.\n     * jQuery(element).on('click', _.debounce(sendMail, 300, {\n     *   'leading': true,\n     *   'trailing': false\n     * }));\n     *\n     * // Ensure `batchLog` is invoked once after 1 second of debounced calls.\n     * var debounced = _.debounce(batchLog, 250, { 'maxWait': 1000 });\n     * var source = new EventSource('/stream');\n     * jQuery(source).on('message', debounced);\n     *\n     * // Cancel the trailing debounced invocation.\n     * jQuery(window).on('popstate', debounced.cancel);\n     */\n\n\n    function debounce(func, wait, options) {\n      var lastArgs,\n          lastThis,\n          maxWait,\n          result,\n          timerId,\n          lastCallTime,\n          lastInvokeTime = 0,\n          leading = false,\n          maxing = false,\n          trailing = true;\n\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n\n      wait = toNumber(wait) || 0;\n\n      if (isObject(options)) {\n        leading = !!options.leading;\n        maxing = 'maxWait' in options;\n        maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;\n        trailing = 'trailing' in options ? !!options.trailing : trailing;\n      }\n\n      function invokeFunc(time) {\n        var args = lastArgs,\n            thisArg = lastThis;\n        lastArgs = lastThis = undefined;\n        lastInvokeTime = time;\n        result = func.apply(thisArg, args);\n        return result;\n      }\n\n      function leadingEdge(time) {\n        // Reset any `maxWait` timer.\n        lastInvokeTime = time; // Start the timer for the trailing edge.\n\n        timerId = setTimeout(timerExpired, wait); // Invoke the leading edge.\n\n        return leading ? invokeFunc(time) : result;\n      }\n\n      function remainingWait(time) {\n        var timeSinceLastCall = time - lastCallTime,\n            timeSinceLastInvoke = time - lastInvokeTime,\n            timeWaiting = wait - timeSinceLastCall;\n        return maxing ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke) : timeWaiting;\n      }\n\n      function shouldInvoke(time) {\n        var timeSinceLastCall = time - lastCallTime,\n            timeSinceLastInvoke = time - lastInvokeTime; // Either this is the first call, activity has stopped and we're at the\n        // trailing edge, the system time has gone backwards and we're treating\n        // it as the trailing edge, or we've hit the `maxWait` limit.\n\n        return lastCallTime === undefined || timeSinceLastCall >= wait || timeSinceLastCall < 0 || maxing && timeSinceLastInvoke >= maxWait;\n      }\n\n      function timerExpired() {\n        var time = now();\n\n        if (shouldInvoke(time)) {\n          return trailingEdge(time);\n        } // Restart the timer.\n\n\n        timerId = setTimeout(timerExpired, remainingWait(time));\n      }\n\n      function trailingEdge(time) {\n        timerId = undefined; // Only invoke if we have `lastArgs` which means `func` has been\n        // debounced at least once.\n\n        if (trailing && lastArgs) {\n          return invokeFunc(time);\n        }\n\n        lastArgs = lastThis = undefined;\n        return result;\n      }\n\n      function cancel() {\n        if (timerId !== undefined) {\n          clearTimeout(timerId);\n        }\n\n        lastInvokeTime = 0;\n        lastArgs = lastCallTime = lastThis = timerId = undefined;\n      }\n\n      function flush() {\n        return timerId === undefined ? result : trailingEdge(now());\n      }\n\n      function debounced() {\n        var time = now(),\n            isInvoking = shouldInvoke(time);\n        lastArgs = arguments;\n        lastThis = this;\n        lastCallTime = time;\n\n        if (isInvoking) {\n          if (timerId === undefined) {\n            return leadingEdge(lastCallTime);\n          }\n\n          if (maxing) {\n            // Handle invocations in a tight loop.\n            clearTimeout(timerId);\n            timerId = setTimeout(timerExpired, wait);\n            return invokeFunc(lastCallTime);\n          }\n        }\n\n        if (timerId === undefined) {\n          timerId = setTimeout(timerExpired, wait);\n        }\n\n        return result;\n      }\n\n      debounced.cancel = cancel;\n      debounced.flush = flush;\n      return debounced;\n    }\n    /**\n     * Defers invoking the `func` until the current call stack has cleared. Any\n     * additional arguments are provided to `func` when it's invoked.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {Function} func The function to defer.\n     * @param {...*} [args] The arguments to invoke `func` with.\n     * @returns {number} Returns the timer id.\n     * @example\n     *\n     * _.defer(function(text) {\n     *   console.log(text);\n     * }, 'deferred');\n     * // => Logs 'deferred' after one millisecond.\n     */\n\n\n    var defer = baseRest(function (func, args) {\n      return baseDelay(func, 1, args);\n    });\n    /**\n     * Invokes `func` after `wait` milliseconds. Any additional arguments are\n     * provided to `func` when it's invoked.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {Function} func The function to delay.\n     * @param {number} wait The number of milliseconds to delay invocation.\n     * @param {...*} [args] The arguments to invoke `func` with.\n     * @returns {number} Returns the timer id.\n     * @example\n     *\n     * _.delay(function(text) {\n     *   console.log(text);\n     * }, 1000, 'later');\n     * // => Logs 'later' after one second.\n     */\n\n    var delay = baseRest(function (func, wait, args) {\n      return baseDelay(func, toNumber(wait) || 0, args);\n    });\n    /**\n     * Creates a function that invokes `func` with arguments reversed.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Function\n     * @param {Function} func The function to flip arguments for.\n     * @returns {Function} Returns the new flipped function.\n     * @example\n     *\n     * var flipped = _.flip(function() {\n     *   return _.toArray(arguments);\n     * });\n     *\n     * flipped('a', 'b', 'c', 'd');\n     * // => ['d', 'c', 'b', 'a']\n     */\n\n    function flip(func) {\n      return createWrap(func, WRAP_FLIP_FLAG);\n    }\n    /**\n     * Creates a function that memoizes the result of `func`. If `resolver` is\n     * provided, it determines the cache key for storing the result based on the\n     * arguments provided to the memoized function. By default, the first argument\n     * provided to the memoized function is used as the map cache key. The `func`\n     * is invoked with the `this` binding of the memoized function.\n     *\n     * **Note:** The cache is exposed as the `cache` property on the memoized\n     * function. Its creation may be customized by replacing the `_.memoize.Cache`\n     * constructor with one whose instances implement the\n     * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)\n     * method interface of `clear`, `delete`, `get`, `has`, and `set`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {Function} func The function to have its output memoized.\n     * @param {Function} [resolver] The function to resolve the cache key.\n     * @returns {Function} Returns the new memoized function.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': 2 };\n     * var other = { 'c': 3, 'd': 4 };\n     *\n     * var values = _.memoize(_.values);\n     * values(object);\n     * // => [1, 2]\n     *\n     * values(other);\n     * // => [3, 4]\n     *\n     * object.a = 2;\n     * values(object);\n     * // => [1, 2]\n     *\n     * // Modify the result cache.\n     * values.cache.set(object, ['a', 'b']);\n     * values(object);\n     * // => ['a', 'b']\n     *\n     * // Replace `_.memoize.Cache`.\n     * _.memoize.Cache = WeakMap;\n     */\n\n\n    function memoize(func, resolver) {\n      if (typeof func != 'function' || resolver != null && typeof resolver != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n\n      var memoized = function memoized() {\n        var args = arguments,\n            key = resolver ? resolver.apply(this, args) : args[0],\n            cache = memoized.cache;\n\n        if (cache.has(key)) {\n          return cache.get(key);\n        }\n\n        var result = func.apply(this, args);\n        memoized.cache = cache.set(key, result) || cache;\n        return result;\n      };\n\n      memoized.cache = new (memoize.Cache || MapCache)();\n      return memoized;\n    } // Expose `MapCache`.\n\n\n    memoize.Cache = MapCache;\n    /**\n     * Creates a function that negates the result of the predicate `func`. The\n     * `func` predicate is invoked with the `this` binding and arguments of the\n     * created function.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Function\n     * @param {Function} predicate The predicate to negate.\n     * @returns {Function} Returns the new negated function.\n     * @example\n     *\n     * function isEven(n) {\n     *   return n % 2 == 0;\n     * }\n     *\n     * _.filter([1, 2, 3, 4, 5, 6], _.negate(isEven));\n     * // => [1, 3, 5]\n     */\n\n    function negate(predicate) {\n      if (typeof predicate != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n\n      return function () {\n        var args = arguments;\n\n        switch (args.length) {\n          case 0:\n            return !predicate.call(this);\n\n          case 1:\n            return !predicate.call(this, args[0]);\n\n          case 2:\n            return !predicate.call(this, args[0], args[1]);\n\n          case 3:\n            return !predicate.call(this, args[0], args[1], args[2]);\n        }\n\n        return !predicate.apply(this, args);\n      };\n    }\n    /**\n     * Creates a function that is restricted to invoking `func` once. Repeat calls\n     * to the function return the value of the first invocation. The `func` is\n     * invoked with the `this` binding and arguments of the created function.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {Function} func The function to restrict.\n     * @returns {Function} Returns the new restricted function.\n     * @example\n     *\n     * var initialize = _.once(createApplication);\n     * initialize();\n     * initialize();\n     * // => `createApplication` is invoked once\n     */\n\n\n    function once(func) {\n      return before(2, func);\n    }\n    /**\n     * Creates a function that invokes `func` with its arguments transformed.\n     *\n     * @static\n     * @since 4.0.0\n     * @memberOf _\n     * @category Function\n     * @param {Function} func The function to wrap.\n     * @param {...(Function|Function[])} [transforms=[_.identity]]\n     *  The argument transforms.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * function doubled(n) {\n     *   return n * 2;\n     * }\n     *\n     * function square(n) {\n     *   return n * n;\n     * }\n     *\n     * var func = _.overArgs(function(x, y) {\n     *   return [x, y];\n     * }, [square, doubled]);\n     *\n     * func(9, 3);\n     * // => [81, 6]\n     *\n     * func(10, 5);\n     * // => [100, 10]\n     */\n\n\n    var overArgs = castRest(function (func, transforms) {\n      transforms = transforms.length == 1 && isArray(transforms[0]) ? arrayMap(transforms[0], baseUnary(getIteratee())) : arrayMap(baseFlatten(transforms, 1), baseUnary(getIteratee()));\n      var funcsLength = transforms.length;\n      return baseRest(function (args) {\n        var index = -1,\n            length = nativeMin(args.length, funcsLength);\n\n        while (++index < length) {\n          args[index] = transforms[index].call(this, args[index]);\n        }\n\n        return apply(func, this, args);\n      });\n    });\n    /**\n     * Creates a function that invokes `func` with `partials` prepended to the\n     * arguments it receives. This method is like `_.bind` except it does **not**\n     * alter the `this` binding.\n     *\n     * The `_.partial.placeholder` value, which defaults to `_` in monolithic\n     * builds, may be used as a placeholder for partially applied arguments.\n     *\n     * **Note:** This method doesn't set the \"length\" property of partially\n     * applied functions.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.2.0\n     * @category Function\n     * @param {Function} func The function to partially apply arguments to.\n     * @param {...*} [partials] The arguments to be partially applied.\n     * @returns {Function} Returns the new partially applied function.\n     * @example\n     *\n     * function greet(greeting, name) {\n     *   return greeting + ' ' + name;\n     * }\n     *\n     * var sayHelloTo = _.partial(greet, 'hello');\n     * sayHelloTo('fred');\n     * // => 'hello fred'\n     *\n     * // Partially applied with placeholders.\n     * var greetFred = _.partial(greet, _, 'fred');\n     * greetFred('hi');\n     * // => 'hi fred'\n     */\n\n    var partial = baseRest(function (func, partials) {\n      var holders = replaceHolders(partials, getHolder(partial));\n      return createWrap(func, WRAP_PARTIAL_FLAG, undefined, partials, holders);\n    });\n    /**\n     * This method is like `_.partial` except that partially applied arguments\n     * are appended to the arguments it receives.\n     *\n     * The `_.partialRight.placeholder` value, which defaults to `_` in monolithic\n     * builds, may be used as a placeholder for partially applied arguments.\n     *\n     * **Note:** This method doesn't set the \"length\" property of partially\n     * applied functions.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.0.0\n     * @category Function\n     * @param {Function} func The function to partially apply arguments to.\n     * @param {...*} [partials] The arguments to be partially applied.\n     * @returns {Function} Returns the new partially applied function.\n     * @example\n     *\n     * function greet(greeting, name) {\n     *   return greeting + ' ' + name;\n     * }\n     *\n     * var greetFred = _.partialRight(greet, 'fred');\n     * greetFred('hi');\n     * // => 'hi fred'\n     *\n     * // Partially applied with placeholders.\n     * var sayHelloTo = _.partialRight(greet, 'hello', _);\n     * sayHelloTo('fred');\n     * // => 'hello fred'\n     */\n\n    var partialRight = baseRest(function (func, partials) {\n      var holders = replaceHolders(partials, getHolder(partialRight));\n      return createWrap(func, WRAP_PARTIAL_RIGHT_FLAG, undefined, partials, holders);\n    });\n    /**\n     * Creates a function that invokes `func` with arguments arranged according\n     * to the specified `indexes` where the argument value at the first index is\n     * provided as the first argument, the argument value at the second index is\n     * provided as the second argument, and so on.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Function\n     * @param {Function} func The function to rearrange arguments for.\n     * @param {...(number|number[])} indexes The arranged argument indexes.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var rearged = _.rearg(function(a, b, c) {\n     *   return [a, b, c];\n     * }, [2, 0, 1]);\n     *\n     * rearged('b', 'c', 'a')\n     * // => ['a', 'b', 'c']\n     */\n\n    var rearg = flatRest(function (func, indexes) {\n      return createWrap(func, WRAP_REARG_FLAG, undefined, undefined, undefined, indexes);\n    });\n    /**\n     * Creates a function that invokes `func` with the `this` binding of the\n     * created function and arguments from `start` and beyond provided as\n     * an array.\n     *\n     * **Note:** This method is based on the\n     * [rest parameter](https://mdn.io/rest_parameters).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Function\n     * @param {Function} func The function to apply a rest parameter to.\n     * @param {number} [start=func.length-1] The start position of the rest parameter.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var say = _.rest(function(what, names) {\n     *   return what + ' ' + _.initial(names).join(', ') +\n     *     (_.size(names) > 1 ? ', & ' : '') + _.last(names);\n     * });\n     *\n     * say('hello', 'fred', 'barney', 'pebbles');\n     * // => 'hello fred, barney, & pebbles'\n     */\n\n    function rest(func, start) {\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n\n      start = start === undefined ? start : toInteger(start);\n      return baseRest(func, start);\n    }\n    /**\n     * Creates a function that invokes `func` with the `this` binding of the\n     * create function and an array of arguments much like\n     * [`Function#apply`](http://www.ecma-international.org/ecma-262/7.0/#sec-function.prototype.apply).\n     *\n     * **Note:** This method is based on the\n     * [spread operator](https://mdn.io/spread_operator).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.2.0\n     * @category Function\n     * @param {Function} func The function to spread arguments over.\n     * @param {number} [start=0] The start position of the spread.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var say = _.spread(function(who, what) {\n     *   return who + ' says ' + what;\n     * });\n     *\n     * say(['fred', 'hello']);\n     * // => 'fred says hello'\n     *\n     * var numbers = Promise.all([\n     *   Promise.resolve(40),\n     *   Promise.resolve(36)\n     * ]);\n     *\n     * numbers.then(_.spread(function(x, y) {\n     *   return x + y;\n     * }));\n     * // => a Promise of 76\n     */\n\n\n    function spread(func, start) {\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n\n      start = start == null ? 0 : nativeMax(toInteger(start), 0);\n      return baseRest(function (args) {\n        var array = args[start],\n            otherArgs = castSlice(args, 0, start);\n\n        if (array) {\n          arrayPush(otherArgs, array);\n        }\n\n        return apply(func, this, otherArgs);\n      });\n    }\n    /**\n     * Creates a throttled function that only invokes `func` at most once per\n     * every `wait` milliseconds. The throttled function comes with a `cancel`\n     * method to cancel delayed `func` invocations and a `flush` method to\n     * immediately invoke them. Provide `options` to indicate whether `func`\n     * should be invoked on the leading and/or trailing edge of the `wait`\n     * timeout. The `func` is invoked with the last arguments provided to the\n     * throttled function. Subsequent calls to the throttled function return the\n     * result of the last `func` invocation.\n     *\n     * **Note:** If `leading` and `trailing` options are `true`, `func` is\n     * invoked on the trailing edge of the timeout only if the throttled function\n     * is invoked more than once during the `wait` timeout.\n     *\n     * If `wait` is `0` and `leading` is `false`, `func` invocation is deferred\n     * until to the next tick, similar to `setTimeout` with a timeout of `0`.\n     *\n     * See [David Corbacho's article](https://css-tricks.com/debouncing-throttling-explained-examples/)\n     * for details over the differences between `_.throttle` and `_.debounce`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {Function} func The function to throttle.\n     * @param {number} [wait=0] The number of milliseconds to throttle invocations to.\n     * @param {Object} [options={}] The options object.\n     * @param {boolean} [options.leading=true]\n     *  Specify invoking on the leading edge of the timeout.\n     * @param {boolean} [options.trailing=true]\n     *  Specify invoking on the trailing edge of the timeout.\n     * @returns {Function} Returns the new throttled function.\n     * @example\n     *\n     * // Avoid excessively updating the position while scrolling.\n     * jQuery(window).on('scroll', _.throttle(updatePosition, 100));\n     *\n     * // Invoke `renewToken` when the click event is fired, but not more than once every 5 minutes.\n     * var throttled = _.throttle(renewToken, 300000, { 'trailing': false });\n     * jQuery(element).on('click', throttled);\n     *\n     * // Cancel the trailing throttled invocation.\n     * jQuery(window).on('popstate', throttled.cancel);\n     */\n\n\n    function throttle(func, wait, options) {\n      var leading = true,\n          trailing = true;\n\n      if (typeof func != 'function') {\n        throw new TypeError(FUNC_ERROR_TEXT);\n      }\n\n      if (isObject(options)) {\n        leading = 'leading' in options ? !!options.leading : leading;\n        trailing = 'trailing' in options ? !!options.trailing : trailing;\n      }\n\n      return debounce(func, wait, {\n        'leading': leading,\n        'maxWait': wait,\n        'trailing': trailing\n      });\n    }\n    /**\n     * Creates a function that accepts up to one argument, ignoring any\n     * additional arguments.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Function\n     * @param {Function} func The function to cap arguments for.\n     * @returns {Function} Returns the new capped function.\n     * @example\n     *\n     * _.map(['6', '8', '10'], _.unary(parseInt));\n     * // => [6, 8, 10]\n     */\n\n\n    function unary(func) {\n      return ary(func, 1);\n    }\n    /**\n     * Creates a function that provides `value` to `wrapper` as its first\n     * argument. Any additional arguments provided to the function are appended\n     * to those provided to the `wrapper`. The wrapper is invoked with the `this`\n     * binding of the created function.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Function\n     * @param {*} value The value to wrap.\n     * @param {Function} [wrapper=identity] The wrapper function.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var p = _.wrap(_.escape, function(func, text) {\n     *   return '<p>' + func(text) + '</p>';\n     * });\n     *\n     * p('fred, barney, & pebbles');\n     * // => '<p>fred, barney, &amp; pebbles</p>'\n     */\n\n\n    function wrap(value, wrapper) {\n      return partial(castFunction(wrapper), value);\n    }\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Casts `value` as an array if it's not one.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.4.0\n     * @category Lang\n     * @param {*} value The value to inspect.\n     * @returns {Array} Returns the cast array.\n     * @example\n     *\n     * _.castArray(1);\n     * // => [1]\n     *\n     * _.castArray({ 'a': 1 });\n     * // => [{ 'a': 1 }]\n     *\n     * _.castArray('abc');\n     * // => ['abc']\n     *\n     * _.castArray(null);\n     * // => [null]\n     *\n     * _.castArray(undefined);\n     * // => [undefined]\n     *\n     * _.castArray();\n     * // => []\n     *\n     * var array = [1, 2, 3];\n     * console.log(_.castArray(array) === array);\n     * // => true\n     */\n\n\n    function castArray() {\n      if (!arguments.length) {\n        return [];\n      }\n\n      var value = arguments[0];\n      return isArray(value) ? value : [value];\n    }\n    /**\n     * Creates a shallow clone of `value`.\n     *\n     * **Note:** This method is loosely based on the\n     * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm)\n     * and supports cloning arrays, array buffers, booleans, date objects, maps,\n     * numbers, `Object` objects, regexes, sets, strings, symbols, and typed\n     * arrays. The own enumerable properties of `arguments` objects are cloned\n     * as plain objects. An empty object is returned for uncloneable values such\n     * as error objects, functions, DOM nodes, and WeakMaps.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to clone.\n     * @returns {*} Returns the cloned value.\n     * @see _.cloneDeep\n     * @example\n     *\n     * var objects = [{ 'a': 1 }, { 'b': 2 }];\n     *\n     * var shallow = _.clone(objects);\n     * console.log(shallow[0] === objects[0]);\n     * // => true\n     */\n\n\n    function clone(value) {\n      return baseClone(value, CLONE_SYMBOLS_FLAG);\n    }\n    /**\n     * This method is like `_.clone` except that it accepts `customizer` which\n     * is invoked to produce the cloned value. If `customizer` returns `undefined`,\n     * cloning is handled by the method instead. The `customizer` is invoked with\n     * up to four arguments; (value [, index|key, object, stack]).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to clone.\n     * @param {Function} [customizer] The function to customize cloning.\n     * @returns {*} Returns the cloned value.\n     * @see _.cloneDeepWith\n     * @example\n     *\n     * function customizer(value) {\n     *   if (_.isElement(value)) {\n     *     return value.cloneNode(false);\n     *   }\n     * }\n     *\n     * var el = _.cloneWith(document.body, customizer);\n     *\n     * console.log(el === document.body);\n     * // => false\n     * console.log(el.nodeName);\n     * // => 'BODY'\n     * console.log(el.childNodes.length);\n     * // => 0\n     */\n\n\n    function cloneWith(value, customizer) {\n      customizer = typeof customizer == 'function' ? customizer : undefined;\n      return baseClone(value, CLONE_SYMBOLS_FLAG, customizer);\n    }\n    /**\n     * This method is like `_.clone` except that it recursively clones `value`.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.0.0\n     * @category Lang\n     * @param {*} value The value to recursively clone.\n     * @returns {*} Returns the deep cloned value.\n     * @see _.clone\n     * @example\n     *\n     * var objects = [{ 'a': 1 }, { 'b': 2 }];\n     *\n     * var deep = _.cloneDeep(objects);\n     * console.log(deep[0] === objects[0]);\n     * // => false\n     */\n\n\n    function cloneDeep(value) {\n      return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG);\n    }\n    /**\n     * This method is like `_.cloneWith` except that it recursively clones `value`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to recursively clone.\n     * @param {Function} [customizer] The function to customize cloning.\n     * @returns {*} Returns the deep cloned value.\n     * @see _.cloneWith\n     * @example\n     *\n     * function customizer(value) {\n     *   if (_.isElement(value)) {\n     *     return value.cloneNode(true);\n     *   }\n     * }\n     *\n     * var el = _.cloneDeepWith(document.body, customizer);\n     *\n     * console.log(el === document.body);\n     * // => false\n     * console.log(el.nodeName);\n     * // => 'BODY'\n     * console.log(el.childNodes.length);\n     * // => 20\n     */\n\n\n    function cloneDeepWith(value, customizer) {\n      customizer = typeof customizer == 'function' ? customizer : undefined;\n      return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG, customizer);\n    }\n    /**\n     * Checks if `object` conforms to `source` by invoking the predicate\n     * properties of `source` with the corresponding property values of `object`.\n     *\n     * **Note:** This method is equivalent to `_.conforms` when `source` is\n     * partially applied.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.14.0\n     * @category Lang\n     * @param {Object} object The object to inspect.\n     * @param {Object} source The object of property predicates to conform to.\n     * @returns {boolean} Returns `true` if `object` conforms, else `false`.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': 2 };\n     *\n     * _.conformsTo(object, { 'b': function(n) { return n > 1; } });\n     * // => true\n     *\n     * _.conformsTo(object, { 'b': function(n) { return n > 2; } });\n     * // => false\n     */\n\n\n    function conformsTo(object, source) {\n      return source == null || baseConformsTo(object, source, keys(source));\n    }\n    /**\n     * Performs a\n     * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n     * comparison between two values to determine if they are equivalent.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n     * @example\n     *\n     * var object = { 'a': 1 };\n     * var other = { 'a': 1 };\n     *\n     * _.eq(object, object);\n     * // => true\n     *\n     * _.eq(object, other);\n     * // => false\n     *\n     * _.eq('a', 'a');\n     * // => true\n     *\n     * _.eq('a', Object('a'));\n     * // => false\n     *\n     * _.eq(NaN, NaN);\n     * // => true\n     */\n\n\n    function eq(value, other) {\n      return value === other || value !== value && other !== other;\n    }\n    /**\n     * Checks if `value` is greater than `other`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.9.0\n     * @category Lang\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if `value` is greater than `other`,\n     *  else `false`.\n     * @see _.lt\n     * @example\n     *\n     * _.gt(3, 1);\n     * // => true\n     *\n     * _.gt(3, 3);\n     * // => false\n     *\n     * _.gt(1, 3);\n     * // => false\n     */\n\n\n    var gt = createRelationalOperation(baseGt);\n    /**\n     * Checks if `value` is greater than or equal to `other`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.9.0\n     * @category Lang\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if `value` is greater than or equal to\n     *  `other`, else `false`.\n     * @see _.lte\n     * @example\n     *\n     * _.gte(3, 1);\n     * // => true\n     *\n     * _.gte(3, 3);\n     * // => true\n     *\n     * _.gte(1, 3);\n     * // => false\n     */\n\n    var gte = createRelationalOperation(function (value, other) {\n      return value >= other;\n    });\n    /**\n     * Checks if `value` is likely an `arguments` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n     *  else `false`.\n     * @example\n     *\n     * _.isArguments(function() { return arguments; }());\n     * // => true\n     *\n     * _.isArguments([1, 2, 3]);\n     * // => false\n     */\n\n    var isArguments = baseIsArguments(function () {\n      return arguments;\n    }()) ? baseIsArguments : function (value) {\n      return isObjectLike(value) && hasOwnProperty.call(value, 'callee') && !propertyIsEnumerable.call(value, 'callee');\n    };\n    /**\n     * Checks if `value` is classified as an `Array` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n     * @example\n     *\n     * _.isArray([1, 2, 3]);\n     * // => true\n     *\n     * _.isArray(document.body.children);\n     * // => false\n     *\n     * _.isArray('abc');\n     * // => false\n     *\n     * _.isArray(_.noop);\n     * // => false\n     */\n\n    var isArray = Array.isArray;\n    /**\n     * Checks if `value` is classified as an `ArrayBuffer` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.3.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`.\n     * @example\n     *\n     * _.isArrayBuffer(new ArrayBuffer(2));\n     * // => true\n     *\n     * _.isArrayBuffer(new Array(2));\n     * // => false\n     */\n\n    var isArrayBuffer = nodeIsArrayBuffer ? baseUnary(nodeIsArrayBuffer) : baseIsArrayBuffer;\n    /**\n     * Checks if `value` is array-like. A value is considered array-like if it's\n     * not a function and has a `value.length` that's an integer greater than or\n     * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is array-like, else `false`.\n     * @example\n     *\n     * _.isArrayLike([1, 2, 3]);\n     * // => true\n     *\n     * _.isArrayLike(document.body.children);\n     * // => true\n     *\n     * _.isArrayLike('abc');\n     * // => true\n     *\n     * _.isArrayLike(_.noop);\n     * // => false\n     */\n\n    function isArrayLike(value) {\n      return value != null && isLength(value.length) && !isFunction(value);\n    }\n    /**\n     * This method is like `_.isArrayLike` except that it also checks if `value`\n     * is an object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an array-like object,\n     *  else `false`.\n     * @example\n     *\n     * _.isArrayLikeObject([1, 2, 3]);\n     * // => true\n     *\n     * _.isArrayLikeObject(document.body.children);\n     * // => true\n     *\n     * _.isArrayLikeObject('abc');\n     * // => false\n     *\n     * _.isArrayLikeObject(_.noop);\n     * // => false\n     */\n\n\n    function isArrayLikeObject(value) {\n      return isObjectLike(value) && isArrayLike(value);\n    }\n    /**\n     * Checks if `value` is classified as a boolean primitive or object.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a boolean, else `false`.\n     * @example\n     *\n     * _.isBoolean(false);\n     * // => true\n     *\n     * _.isBoolean(null);\n     * // => false\n     */\n\n\n    function isBoolean(value) {\n      return value === true || value === false || isObjectLike(value) && baseGetTag(value) == boolTag;\n    }\n    /**\n     * Checks if `value` is a buffer.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.3.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a buffer, else `false`.\n     * @example\n     *\n     * _.isBuffer(new Buffer(2));\n     * // => true\n     *\n     * _.isBuffer(new Uint8Array(2));\n     * // => false\n     */\n\n\n    var isBuffer = nativeIsBuffer || stubFalse;\n    /**\n     * Checks if `value` is classified as a `Date` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a date object, else `false`.\n     * @example\n     *\n     * _.isDate(new Date);\n     * // => true\n     *\n     * _.isDate('Mon April 23 2012');\n     * // => false\n     */\n\n    var isDate = nodeIsDate ? baseUnary(nodeIsDate) : baseIsDate;\n    /**\n     * Checks if `value` is likely a DOM element.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a DOM element, else `false`.\n     * @example\n     *\n     * _.isElement(document.body);\n     * // => true\n     *\n     * _.isElement('<body>');\n     * // => false\n     */\n\n    function isElement(value) {\n      return isObjectLike(value) && value.nodeType === 1 && !isPlainObject(value);\n    }\n    /**\n     * Checks if `value` is an empty object, collection, map, or set.\n     *\n     * Objects are considered empty if they have no own enumerable string keyed\n     * properties.\n     *\n     * Array-like values such as `arguments` objects, arrays, buffers, strings, or\n     * jQuery-like collections are considered empty if they have a `length` of `0`.\n     * Similarly, maps and sets are considered empty if they have a `size` of `0`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is empty, else `false`.\n     * @example\n     *\n     * _.isEmpty(null);\n     * // => true\n     *\n     * _.isEmpty(true);\n     * // => true\n     *\n     * _.isEmpty(1);\n     * // => true\n     *\n     * _.isEmpty([1, 2, 3]);\n     * // => false\n     *\n     * _.isEmpty({ 'a': 1 });\n     * // => false\n     */\n\n\n    function isEmpty(value) {\n      if (value == null) {\n        return true;\n      }\n\n      if (isArrayLike(value) && (isArray(value) || typeof value == 'string' || typeof value.splice == 'function' || isBuffer(value) || isTypedArray(value) || isArguments(value))) {\n        return !value.length;\n      }\n\n      var tag = getTag(value);\n\n      if (tag == mapTag || tag == setTag) {\n        return !value.size;\n      }\n\n      if (isPrototype(value)) {\n        return !baseKeys(value).length;\n      }\n\n      for (var key in value) {\n        if (hasOwnProperty.call(value, key)) {\n          return false;\n        }\n      }\n\n      return true;\n    }\n    /**\n     * Performs a deep comparison between two values to determine if they are\n     * equivalent.\n     *\n     * **Note:** This method supports comparing arrays, array buffers, booleans,\n     * date objects, error objects, maps, numbers, `Object` objects, regexes,\n     * sets, strings, symbols, and typed arrays. `Object` objects are compared\n     * by their own, not inherited, enumerable properties. Functions and DOM\n     * nodes are compared by strict equality, i.e. `===`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n     * @example\n     *\n     * var object = { 'a': 1 };\n     * var other = { 'a': 1 };\n     *\n     * _.isEqual(object, other);\n     * // => true\n     *\n     * object === other;\n     * // => false\n     */\n\n\n    function isEqual(value, other) {\n      return baseIsEqual(value, other);\n    }\n    /**\n     * This method is like `_.isEqual` except that it accepts `customizer` which\n     * is invoked to compare values. If `customizer` returns `undefined`, comparisons\n     * are handled by the method instead. The `customizer` is invoked with up to\n     * six arguments: (objValue, othValue [, index|key, object, other, stack]).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @param {Function} [customizer] The function to customize comparisons.\n     * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n     * @example\n     *\n     * function isGreeting(value) {\n     *   return /^h(?:i|ello)$/.test(value);\n     * }\n     *\n     * function customizer(objValue, othValue) {\n     *   if (isGreeting(objValue) && isGreeting(othValue)) {\n     *     return true;\n     *   }\n     * }\n     *\n     * var array = ['hello', 'goodbye'];\n     * var other = ['hi', 'goodbye'];\n     *\n     * _.isEqualWith(array, other, customizer);\n     * // => true\n     */\n\n\n    function isEqualWith(value, other, customizer) {\n      customizer = typeof customizer == 'function' ? customizer : undefined;\n      var result = customizer ? customizer(value, other) : undefined;\n      return result === undefined ? baseIsEqual(value, other, undefined, customizer) : !!result;\n    }\n    /**\n     * Checks if `value` is an `Error`, `EvalError`, `RangeError`, `ReferenceError`,\n     * `SyntaxError`, `TypeError`, or `URIError` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an error object, else `false`.\n     * @example\n     *\n     * _.isError(new Error);\n     * // => true\n     *\n     * _.isError(Error);\n     * // => false\n     */\n\n\n    function isError(value) {\n      if (!isObjectLike(value)) {\n        return false;\n      }\n\n      var tag = baseGetTag(value);\n      return tag == errorTag || tag == domExcTag || typeof value.message == 'string' && typeof value.name == 'string' && !isPlainObject(value);\n    }\n    /**\n     * Checks if `value` is a finite primitive number.\n     *\n     * **Note:** This method is based on\n     * [`Number.isFinite`](https://mdn.io/Number/isFinite).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a finite number, else `false`.\n     * @example\n     *\n     * _.isFinite(3);\n     * // => true\n     *\n     * _.isFinite(Number.MIN_VALUE);\n     * // => true\n     *\n     * _.isFinite(Infinity);\n     * // => false\n     *\n     * _.isFinite('3');\n     * // => false\n     */\n\n\n    function isFinite(value) {\n      return typeof value == 'number' && nativeIsFinite(value);\n    }\n    /**\n     * Checks if `value` is classified as a `Function` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n     * @example\n     *\n     * _.isFunction(_);\n     * // => true\n     *\n     * _.isFunction(/abc/);\n     * // => false\n     */\n\n\n    function isFunction(value) {\n      if (!isObject(value)) {\n        return false;\n      } // The use of `Object#toString` avoids issues with the `typeof` operator\n      // in Safari 9 which returns 'object' for typed arrays and other constructors.\n\n\n      var tag = baseGetTag(value);\n      return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n    }\n    /**\n     * Checks if `value` is an integer.\n     *\n     * **Note:** This method is based on\n     * [`Number.isInteger`](https://mdn.io/Number/isInteger).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an integer, else `false`.\n     * @example\n     *\n     * _.isInteger(3);\n     * // => true\n     *\n     * _.isInteger(Number.MIN_VALUE);\n     * // => false\n     *\n     * _.isInteger(Infinity);\n     * // => false\n     *\n     * _.isInteger('3');\n     * // => false\n     */\n\n\n    function isInteger(value) {\n      return typeof value == 'number' && value == toInteger(value);\n    }\n    /**\n     * Checks if `value` is a valid array-like length.\n     *\n     * **Note:** This method is loosely based on\n     * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n     * @example\n     *\n     * _.isLength(3);\n     * // => true\n     *\n     * _.isLength(Number.MIN_VALUE);\n     * // => false\n     *\n     * _.isLength(Infinity);\n     * // => false\n     *\n     * _.isLength('3');\n     * // => false\n     */\n\n\n    function isLength(value) {\n      return typeof value == 'number' && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n    }\n    /**\n     * Checks if `value` is the\n     * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n     * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n     * @example\n     *\n     * _.isObject({});\n     * // => true\n     *\n     * _.isObject([1, 2, 3]);\n     * // => true\n     *\n     * _.isObject(_.noop);\n     * // => true\n     *\n     * _.isObject(null);\n     * // => false\n     */\n\n\n    function isObject(value) {\n      var type = _typeof(value);\n\n      return value != null && (type == 'object' || type == 'function');\n    }\n    /**\n     * Checks if `value` is object-like. A value is object-like if it's not `null`\n     * and has a `typeof` result of \"object\".\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n     * @example\n     *\n     * _.isObjectLike({});\n     * // => true\n     *\n     * _.isObjectLike([1, 2, 3]);\n     * // => true\n     *\n     * _.isObjectLike(_.noop);\n     * // => false\n     *\n     * _.isObjectLike(null);\n     * // => false\n     */\n\n\n    function isObjectLike(value) {\n      return value != null && _typeof(value) == 'object';\n    }\n    /**\n     * Checks if `value` is classified as a `Map` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.3.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a map, else `false`.\n     * @example\n     *\n     * _.isMap(new Map);\n     * // => true\n     *\n     * _.isMap(new WeakMap);\n     * // => false\n     */\n\n\n    var isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap;\n    /**\n     * Performs a partial deep comparison between `object` and `source` to\n     * determine if `object` contains equivalent property values.\n     *\n     * **Note:** This method is equivalent to `_.matches` when `source` is\n     * partially applied.\n     *\n     * Partial comparisons will match empty array and empty object `source`\n     * values against any array or object value, respectively. See `_.isEqual`\n     * for a list of supported value comparisons.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Lang\n     * @param {Object} object The object to inspect.\n     * @param {Object} source The object of property values to match.\n     * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': 2 };\n     *\n     * _.isMatch(object, { 'b': 2 });\n     * // => true\n     *\n     * _.isMatch(object, { 'b': 1 });\n     * // => false\n     */\n\n    function isMatch(object, source) {\n      return object === source || baseIsMatch(object, source, getMatchData(source));\n    }\n    /**\n     * This method is like `_.isMatch` except that it accepts `customizer` which\n     * is invoked to compare values. If `customizer` returns `undefined`, comparisons\n     * are handled by the method instead. The `customizer` is invoked with five\n     * arguments: (objValue, srcValue, index|key, object, source).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {Object} object The object to inspect.\n     * @param {Object} source The object of property values to match.\n     * @param {Function} [customizer] The function to customize comparisons.\n     * @returns {boolean} Returns `true` if `object` is a match, else `false`.\n     * @example\n     *\n     * function isGreeting(value) {\n     *   return /^h(?:i|ello)$/.test(value);\n     * }\n     *\n     * function customizer(objValue, srcValue) {\n     *   if (isGreeting(objValue) && isGreeting(srcValue)) {\n     *     return true;\n     *   }\n     * }\n     *\n     * var object = { 'greeting': 'hello' };\n     * var source = { 'greeting': 'hi' };\n     *\n     * _.isMatchWith(object, source, customizer);\n     * // => true\n     */\n\n\n    function isMatchWith(object, source, customizer) {\n      customizer = typeof customizer == 'function' ? customizer : undefined;\n      return baseIsMatch(object, source, getMatchData(source), customizer);\n    }\n    /**\n     * Checks if `value` is `NaN`.\n     *\n     * **Note:** This method is based on\n     * [`Number.isNaN`](https://mdn.io/Number/isNaN) and is not the same as\n     * global [`isNaN`](https://mdn.io/isNaN) which returns `true` for\n     * `undefined` and other non-number values.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n     * @example\n     *\n     * _.isNaN(NaN);\n     * // => true\n     *\n     * _.isNaN(new Number(NaN));\n     * // => true\n     *\n     * isNaN(undefined);\n     * // => true\n     *\n     * _.isNaN(undefined);\n     * // => false\n     */\n\n\n    function isNaN(value) {\n      // An `NaN` primitive is the only value that is not equal to itself.\n      // Perform the `toStringTag` check first to avoid errors with some\n      // ActiveX objects in IE.\n      return isNumber(value) && value != +value;\n    }\n    /**\n     * Checks if `value` is a pristine native function.\n     *\n     * **Note:** This method can't reliably detect native functions in the presence\n     * of the core-js package because core-js circumvents this kind of detection.\n     * Despite multiple requests, the core-js maintainer has made it clear: any\n     * attempt to fix the detection will be obstructed. As a result, we're left\n     * with little choice but to throw an error. Unfortunately, this also affects\n     * packages, like [babel-polyfill](https://www.npmjs.com/package/babel-polyfill),\n     * which rely on core-js.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a native function,\n     *  else `false`.\n     * @example\n     *\n     * _.isNative(Array.prototype.push);\n     * // => true\n     *\n     * _.isNative(_);\n     * // => false\n     */\n\n\n    function isNative(value) {\n      if (isMaskable(value)) {\n        throw new Error(CORE_ERROR_TEXT);\n      }\n\n      return baseIsNative(value);\n    }\n    /**\n     * Checks if `value` is `null`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is `null`, else `false`.\n     * @example\n     *\n     * _.isNull(null);\n     * // => true\n     *\n     * _.isNull(void 0);\n     * // => false\n     */\n\n\n    function isNull(value) {\n      return value === null;\n    }\n    /**\n     * Checks if `value` is `null` or `undefined`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is nullish, else `false`.\n     * @example\n     *\n     * _.isNil(null);\n     * // => true\n     *\n     * _.isNil(void 0);\n     * // => true\n     *\n     * _.isNil(NaN);\n     * // => false\n     */\n\n\n    function isNil(value) {\n      return value == null;\n    }\n    /**\n     * Checks if `value` is classified as a `Number` primitive or object.\n     *\n     * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are\n     * classified as numbers, use the `_.isFinite` method.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a number, else `false`.\n     * @example\n     *\n     * _.isNumber(3);\n     * // => true\n     *\n     * _.isNumber(Number.MIN_VALUE);\n     * // => true\n     *\n     * _.isNumber(Infinity);\n     * // => true\n     *\n     * _.isNumber('3');\n     * // => false\n     */\n\n\n    function isNumber(value) {\n      return typeof value == 'number' || isObjectLike(value) && baseGetTag(value) == numberTag;\n    }\n    /**\n     * Checks if `value` is a plain object, that is, an object created by the\n     * `Object` constructor or one with a `[[Prototype]]` of `null`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.8.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a plain object, else `false`.\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     * }\n     *\n     * _.isPlainObject(new Foo);\n     * // => false\n     *\n     * _.isPlainObject([1, 2, 3]);\n     * // => false\n     *\n     * _.isPlainObject({ 'x': 0, 'y': 0 });\n     * // => true\n     *\n     * _.isPlainObject(Object.create(null));\n     * // => true\n     */\n\n\n    function isPlainObject(value) {\n      if (!isObjectLike(value) || baseGetTag(value) != objectTag) {\n        return false;\n      }\n\n      var proto = getPrototype(value);\n\n      if (proto === null) {\n        return true;\n      }\n\n      var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor;\n      return typeof Ctor == 'function' && Ctor instanceof Ctor && funcToString.call(Ctor) == objectCtorString;\n    }\n    /**\n     * Checks if `value` is classified as a `RegExp` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.1.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a regexp, else `false`.\n     * @example\n     *\n     * _.isRegExp(/abc/);\n     * // => true\n     *\n     * _.isRegExp('/abc/');\n     * // => false\n     */\n\n\n    var isRegExp = nodeIsRegExp ? baseUnary(nodeIsRegExp) : baseIsRegExp;\n    /**\n     * Checks if `value` is a safe integer. An integer is safe if it's an IEEE-754\n     * double precision number which isn't the result of a rounded unsafe integer.\n     *\n     * **Note:** This method is based on\n     * [`Number.isSafeInteger`](https://mdn.io/Number/isSafeInteger).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a safe integer, else `false`.\n     * @example\n     *\n     * _.isSafeInteger(3);\n     * // => true\n     *\n     * _.isSafeInteger(Number.MIN_VALUE);\n     * // => false\n     *\n     * _.isSafeInteger(Infinity);\n     * // => false\n     *\n     * _.isSafeInteger('3');\n     * // => false\n     */\n\n    function isSafeInteger(value) {\n      return isInteger(value) && value >= -MAX_SAFE_INTEGER && value <= MAX_SAFE_INTEGER;\n    }\n    /**\n     * Checks if `value` is classified as a `Set` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.3.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a set, else `false`.\n     * @example\n     *\n     * _.isSet(new Set);\n     * // => true\n     *\n     * _.isSet(new WeakSet);\n     * // => false\n     */\n\n\n    var isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet;\n    /**\n     * Checks if `value` is classified as a `String` primitive or object.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a string, else `false`.\n     * @example\n     *\n     * _.isString('abc');\n     * // => true\n     *\n     * _.isString(1);\n     * // => false\n     */\n\n    function isString(value) {\n      return typeof value == 'string' || !isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag;\n    }\n    /**\n     * Checks if `value` is classified as a `Symbol` primitive or object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n     * @example\n     *\n     * _.isSymbol(Symbol.iterator);\n     * // => true\n     *\n     * _.isSymbol('abc');\n     * // => false\n     */\n\n\n    function isSymbol(value) {\n      return _typeof(value) == 'symbol' || isObjectLike(value) && baseGetTag(value) == symbolTag;\n    }\n    /**\n     * Checks if `value` is classified as a typed array.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.\n     * @example\n     *\n     * _.isTypedArray(new Uint8Array);\n     * // => true\n     *\n     * _.isTypedArray([]);\n     * // => false\n     */\n\n\n    var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n    /**\n     * Checks if `value` is `undefined`.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`.\n     * @example\n     *\n     * _.isUndefined(void 0);\n     * // => true\n     *\n     * _.isUndefined(null);\n     * // => false\n     */\n\n    function isUndefined(value) {\n      return value === undefined;\n    }\n    /**\n     * Checks if `value` is classified as a `WeakMap` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.3.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a weak map, else `false`.\n     * @example\n     *\n     * _.isWeakMap(new WeakMap);\n     * // => true\n     *\n     * _.isWeakMap(new Map);\n     * // => false\n     */\n\n\n    function isWeakMap(value) {\n      return isObjectLike(value) && getTag(value) == weakMapTag;\n    }\n    /**\n     * Checks if `value` is classified as a `WeakSet` object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.3.0\n     * @category Lang\n     * @param {*} value The value to check.\n     * @returns {boolean} Returns `true` if `value` is a weak set, else `false`.\n     * @example\n     *\n     * _.isWeakSet(new WeakSet);\n     * // => true\n     *\n     * _.isWeakSet(new Set);\n     * // => false\n     */\n\n\n    function isWeakSet(value) {\n      return isObjectLike(value) && baseGetTag(value) == weakSetTag;\n    }\n    /**\n     * Checks if `value` is less than `other`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.9.0\n     * @category Lang\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if `value` is less than `other`,\n     *  else `false`.\n     * @see _.gt\n     * @example\n     *\n     * _.lt(1, 3);\n     * // => true\n     *\n     * _.lt(3, 3);\n     * // => false\n     *\n     * _.lt(3, 1);\n     * // => false\n     */\n\n\n    var lt = createRelationalOperation(baseLt);\n    /**\n     * Checks if `value` is less than or equal to `other`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.9.0\n     * @category Lang\n     * @param {*} value The value to compare.\n     * @param {*} other The other value to compare.\n     * @returns {boolean} Returns `true` if `value` is less than or equal to\n     *  `other`, else `false`.\n     * @see _.gte\n     * @example\n     *\n     * _.lte(1, 3);\n     * // => true\n     *\n     * _.lte(3, 3);\n     * // => true\n     *\n     * _.lte(3, 1);\n     * // => false\n     */\n\n    var lte = createRelationalOperation(function (value, other) {\n      return value <= other;\n    });\n    /**\n     * Converts `value` to an array.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Lang\n     * @param {*} value The value to convert.\n     * @returns {Array} Returns the converted array.\n     * @example\n     *\n     * _.toArray({ 'a': 1, 'b': 2 });\n     * // => [1, 2]\n     *\n     * _.toArray('abc');\n     * // => ['a', 'b', 'c']\n     *\n     * _.toArray(1);\n     * // => []\n     *\n     * _.toArray(null);\n     * // => []\n     */\n\n    function toArray(value) {\n      if (!value) {\n        return [];\n      }\n\n      if (isArrayLike(value)) {\n        return isString(value) ? stringToArray(value) : copyArray(value);\n      }\n\n      if (symIterator && value[symIterator]) {\n        return iteratorToArray(value[symIterator]());\n      }\n\n      var tag = getTag(value),\n          func = tag == mapTag ? mapToArray : tag == setTag ? setToArray : values;\n      return func(value);\n    }\n    /**\n     * Converts `value` to a finite number.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.12.0\n     * @category Lang\n     * @param {*} value The value to convert.\n     * @returns {number} Returns the converted number.\n     * @example\n     *\n     * _.toFinite(3.2);\n     * // => 3.2\n     *\n     * _.toFinite(Number.MIN_VALUE);\n     * // => 5e-324\n     *\n     * _.toFinite(Infinity);\n     * // => 1.7976931348623157e+308\n     *\n     * _.toFinite('3.2');\n     * // => 3.2\n     */\n\n\n    function toFinite(value) {\n      if (!value) {\n        return value === 0 ? value : 0;\n      }\n\n      value = toNumber(value);\n\n      if (value === INFINITY || value === -INFINITY) {\n        var sign = value < 0 ? -1 : 1;\n        return sign * MAX_INTEGER;\n      }\n\n      return value === value ? value : 0;\n    }\n    /**\n     * Converts `value` to an integer.\n     *\n     * **Note:** This method is loosely based on\n     * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to convert.\n     * @returns {number} Returns the converted integer.\n     * @example\n     *\n     * _.toInteger(3.2);\n     * // => 3\n     *\n     * _.toInteger(Number.MIN_VALUE);\n     * // => 0\n     *\n     * _.toInteger(Infinity);\n     * // => 1.7976931348623157e+308\n     *\n     * _.toInteger('3.2');\n     * // => 3\n     */\n\n\n    function toInteger(value) {\n      var result = toFinite(value),\n          remainder = result % 1;\n      return result === result ? remainder ? result - remainder : result : 0;\n    }\n    /**\n     * Converts `value` to an integer suitable for use as the length of an\n     * array-like object.\n     *\n     * **Note:** This method is based on\n     * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to convert.\n     * @returns {number} Returns the converted integer.\n     * @example\n     *\n     * _.toLength(3.2);\n     * // => 3\n     *\n     * _.toLength(Number.MIN_VALUE);\n     * // => 0\n     *\n     * _.toLength(Infinity);\n     * // => 4294967295\n     *\n     * _.toLength('3.2');\n     * // => 3\n     */\n\n\n    function toLength(value) {\n      return value ? baseClamp(toInteger(value), 0, MAX_ARRAY_LENGTH) : 0;\n    }\n    /**\n     * Converts `value` to a number.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to process.\n     * @returns {number} Returns the number.\n     * @example\n     *\n     * _.toNumber(3.2);\n     * // => 3.2\n     *\n     * _.toNumber(Number.MIN_VALUE);\n     * // => 5e-324\n     *\n     * _.toNumber(Infinity);\n     * // => Infinity\n     *\n     * _.toNumber('3.2');\n     * // => 3.2\n     */\n\n\n    function toNumber(value) {\n      if (typeof value == 'number') {\n        return value;\n      }\n\n      if (isSymbol(value)) {\n        return NAN;\n      }\n\n      if (isObject(value)) {\n        var other = typeof value.valueOf == 'function' ? value.valueOf() : value;\n        value = isObject(other) ? other + '' : other;\n      }\n\n      if (typeof value != 'string') {\n        return value === 0 ? value : +value;\n      }\n\n      value = value.replace(reTrim, '');\n      var isBinary = reIsBinary.test(value);\n      return isBinary || reIsOctal.test(value) ? freeParseInt(value.slice(2), isBinary ? 2 : 8) : reIsBadHex.test(value) ? NAN : +value;\n    }\n    /**\n     * Converts `value` to a plain object flattening inherited enumerable string\n     * keyed properties of `value` to own properties of the plain object.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Lang\n     * @param {*} value The value to convert.\n     * @returns {Object} Returns the converted plain object.\n     * @example\n     *\n     * function Foo() {\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.assign({ 'a': 1 }, new Foo);\n     * // => { 'a': 1, 'b': 2 }\n     *\n     * _.assign({ 'a': 1 }, _.toPlainObject(new Foo));\n     * // => { 'a': 1, 'b': 2, 'c': 3 }\n     */\n\n\n    function toPlainObject(value) {\n      return copyObject(value, keysIn(value));\n    }\n    /**\n     * Converts `value` to a safe integer. A safe integer can be compared and\n     * represented correctly.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to convert.\n     * @returns {number} Returns the converted integer.\n     * @example\n     *\n     * _.toSafeInteger(3.2);\n     * // => 3\n     *\n     * _.toSafeInteger(Number.MIN_VALUE);\n     * // => 0\n     *\n     * _.toSafeInteger(Infinity);\n     * // => 9007199254740991\n     *\n     * _.toSafeInteger('3.2');\n     * // => 3\n     */\n\n\n    function toSafeInteger(value) {\n      return value ? baseClamp(toInteger(value), -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER) : value === 0 ? value : 0;\n    }\n    /**\n     * Converts `value` to a string. An empty string is returned for `null`\n     * and `undefined` values. The sign of `-0` is preserved.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Lang\n     * @param {*} value The value to convert.\n     * @returns {string} Returns the converted string.\n     * @example\n     *\n     * _.toString(null);\n     * // => ''\n     *\n     * _.toString(-0);\n     * // => '-0'\n     *\n     * _.toString([1, 2, 3]);\n     * // => '1,2,3'\n     */\n\n\n    function toString(value) {\n      return value == null ? '' : baseToString(value);\n    }\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Assigns own enumerable string keyed properties of source objects to the\n     * destination object. Source objects are applied from left to right.\n     * Subsequent sources overwrite property assignments of previous sources.\n     *\n     * **Note:** This method mutates `object` and is loosely based on\n     * [`Object.assign`](https://mdn.io/Object/assign).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.10.0\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} [sources] The source objects.\n     * @returns {Object} Returns `object`.\n     * @see _.assignIn\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     * }\n     *\n     * function Bar() {\n     *   this.c = 3;\n     * }\n     *\n     * Foo.prototype.b = 2;\n     * Bar.prototype.d = 4;\n     *\n     * _.assign({ 'a': 0 }, new Foo, new Bar);\n     * // => { 'a': 1, 'c': 3 }\n     */\n\n\n    var assign = createAssigner(function (object, source) {\n      if (isPrototype(source) || isArrayLike(source)) {\n        copyObject(source, keys(source), object);\n        return;\n      }\n\n      for (var key in source) {\n        if (hasOwnProperty.call(source, key)) {\n          assignValue(object, key, source[key]);\n        }\n      }\n    });\n    /**\n     * This method is like `_.assign` except that it iterates over own and\n     * inherited source properties.\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @alias extend\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} [sources] The source objects.\n     * @returns {Object} Returns `object`.\n     * @see _.assign\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     * }\n     *\n     * function Bar() {\n     *   this.c = 3;\n     * }\n     *\n     * Foo.prototype.b = 2;\n     * Bar.prototype.d = 4;\n     *\n     * _.assignIn({ 'a': 0 }, new Foo, new Bar);\n     * // => { 'a': 1, 'b': 2, 'c': 3, 'd': 4 }\n     */\n\n    var assignIn = createAssigner(function (object, source) {\n      copyObject(source, keysIn(source), object);\n    });\n    /**\n     * This method is like `_.assignIn` except that it accepts `customizer`\n     * which is invoked to produce the assigned values. If `customizer` returns\n     * `undefined`, assignment is handled by the method instead. The `customizer`\n     * is invoked with five arguments: (objValue, srcValue, key, object, source).\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @alias extendWith\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} sources The source objects.\n     * @param {Function} [customizer] The function to customize assigned values.\n     * @returns {Object} Returns `object`.\n     * @see _.assignWith\n     * @example\n     *\n     * function customizer(objValue, srcValue) {\n     *   return _.isUndefined(objValue) ? srcValue : objValue;\n     * }\n     *\n     * var defaults = _.partialRight(_.assignInWith, customizer);\n     *\n     * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n     * // => { 'a': 1, 'b': 2 }\n     */\n\n    var assignInWith = createAssigner(function (object, source, srcIndex, customizer) {\n      copyObject(source, keysIn(source), object, customizer);\n    });\n    /**\n     * This method is like `_.assign` except that it accepts `customizer`\n     * which is invoked to produce the assigned values. If `customizer` returns\n     * `undefined`, assignment is handled by the method instead. The `customizer`\n     * is invoked with five arguments: (objValue, srcValue, key, object, source).\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} sources The source objects.\n     * @param {Function} [customizer] The function to customize assigned values.\n     * @returns {Object} Returns `object`.\n     * @see _.assignInWith\n     * @example\n     *\n     * function customizer(objValue, srcValue) {\n     *   return _.isUndefined(objValue) ? srcValue : objValue;\n     * }\n     *\n     * var defaults = _.partialRight(_.assignWith, customizer);\n     *\n     * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n     * // => { 'a': 1, 'b': 2 }\n     */\n\n    var assignWith = createAssigner(function (object, source, srcIndex, customizer) {\n      copyObject(source, keys(source), object, customizer);\n    });\n    /**\n     * Creates an array of values corresponding to `paths` of `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.0.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {...(string|string[])} [paths] The property paths to pick.\n     * @returns {Array} Returns the picked values.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] };\n     *\n     * _.at(object, ['a[0].b.c', 'a[1]']);\n     * // => [3, 4]\n     */\n\n    var at = flatRest(baseAt);\n    /**\n     * Creates an object that inherits from the `prototype` object. If a\n     * `properties` object is given, its own enumerable string keyed properties\n     * are assigned to the created object.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.3.0\n     * @category Object\n     * @param {Object} prototype The object to inherit from.\n     * @param {Object} [properties] The properties to assign to the object.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * function Shape() {\n     *   this.x = 0;\n     *   this.y = 0;\n     * }\n     *\n     * function Circle() {\n     *   Shape.call(this);\n     * }\n     *\n     * Circle.prototype = _.create(Shape.prototype, {\n     *   'constructor': Circle\n     * });\n     *\n     * var circle = new Circle;\n     * circle instanceof Circle;\n     * // => true\n     *\n     * circle instanceof Shape;\n     * // => true\n     */\n\n    function create(prototype, properties) {\n      var result = baseCreate(prototype);\n      return properties == null ? result : baseAssign(result, properties);\n    }\n    /**\n     * Assigns own and inherited enumerable string keyed properties of source\n     * objects to the destination object for all destination properties that\n     * resolve to `undefined`. Source objects are applied from left to right.\n     * Once a property is set, additional values of the same property are ignored.\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} [sources] The source objects.\n     * @returns {Object} Returns `object`.\n     * @see _.defaultsDeep\n     * @example\n     *\n     * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 });\n     * // => { 'a': 1, 'b': 2 }\n     */\n\n\n    var defaults = baseRest(function (object, sources) {\n      object = Object(object);\n      var index = -1;\n      var length = sources.length;\n      var guard = length > 2 ? sources[2] : undefined;\n\n      if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n        length = 1;\n      }\n\n      while (++index < length) {\n        var source = sources[index];\n        var props = keysIn(source);\n        var propsIndex = -1;\n        var propsLength = props.length;\n\n        while (++propsIndex < propsLength) {\n          var key = props[propsIndex];\n          var value = object[key];\n\n          if (value === undefined || eq(value, objectProto[key]) && !hasOwnProperty.call(object, key)) {\n            object[key] = source[key];\n          }\n        }\n      }\n\n      return object;\n    });\n    /**\n     * This method is like `_.defaults` except that it recursively assigns\n     * default properties.\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.10.0\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} [sources] The source objects.\n     * @returns {Object} Returns `object`.\n     * @see _.defaults\n     * @example\n     *\n     * _.defaultsDeep({ 'a': { 'b': 2 } }, { 'a': { 'b': 1, 'c': 3 } });\n     * // => { 'a': { 'b': 2, 'c': 3 } }\n     */\n\n    var defaultsDeep = baseRest(function (args) {\n      args.push(undefined, customDefaultsMerge);\n      return apply(mergeWith, undefined, args);\n    });\n    /**\n     * This method is like `_.find` except that it returns the key of the first\n     * element `predicate` returns truthy for instead of the element itself.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.1.0\n     * @category Object\n     * @param {Object} object The object to inspect.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {string|undefined} Returns the key of the matched element,\n     *  else `undefined`.\n     * @example\n     *\n     * var users = {\n     *   'barney':  { 'age': 36, 'active': true },\n     *   'fred':    { 'age': 40, 'active': false },\n     *   'pebbles': { 'age': 1,  'active': true }\n     * };\n     *\n     * _.findKey(users, function(o) { return o.age < 40; });\n     * // => 'barney' (iteration order is not guaranteed)\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.findKey(users, { 'age': 1, 'active': true });\n     * // => 'pebbles'\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.findKey(users, ['active', false]);\n     * // => 'fred'\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.findKey(users, 'active');\n     * // => 'barney'\n     */\n\n    function findKey(object, predicate) {\n      return baseFindKey(object, getIteratee(predicate, 3), baseForOwn);\n    }\n    /**\n     * This method is like `_.findKey` except that it iterates over elements of\n     * a collection in the opposite order.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Object\n     * @param {Object} object The object to inspect.\n     * @param {Function} [predicate=_.identity] The function invoked per iteration.\n     * @returns {string|undefined} Returns the key of the matched element,\n     *  else `undefined`.\n     * @example\n     *\n     * var users = {\n     *   'barney':  { 'age': 36, 'active': true },\n     *   'fred':    { 'age': 40, 'active': false },\n     *   'pebbles': { 'age': 1,  'active': true }\n     * };\n     *\n     * _.findLastKey(users, function(o) { return o.age < 40; });\n     * // => returns 'pebbles' assuming `_.findKey` returns 'barney'\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.findLastKey(users, { 'age': 36, 'active': true });\n     * // => 'barney'\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.findLastKey(users, ['active', false]);\n     * // => 'fred'\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.findLastKey(users, 'active');\n     * // => 'pebbles'\n     */\n\n\n    function findLastKey(object, predicate) {\n      return baseFindKey(object, getIteratee(predicate, 3), baseForOwnRight);\n    }\n    /**\n     * Iterates over own and inherited enumerable string keyed properties of an\n     * object and invokes `iteratee` for each property. The iteratee is invoked\n     * with three arguments: (value, key, object). Iteratee functions may exit\n     * iteration early by explicitly returning `false`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.3.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Object} Returns `object`.\n     * @see _.forInRight\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.forIn(new Foo, function(value, key) {\n     *   console.log(key);\n     * });\n     * // => Logs 'a', 'b', then 'c' (iteration order is not guaranteed).\n     */\n\n\n    function forIn(object, iteratee) {\n      return object == null ? object : baseFor(object, getIteratee(iteratee, 3), keysIn);\n    }\n    /**\n     * This method is like `_.forIn` except that it iterates over properties of\n     * `object` in the opposite order.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Object} Returns `object`.\n     * @see _.forIn\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.forInRight(new Foo, function(value, key) {\n     *   console.log(key);\n     * });\n     * // => Logs 'c', 'b', then 'a' assuming `_.forIn` logs 'a', 'b', then 'c'.\n     */\n\n\n    function forInRight(object, iteratee) {\n      return object == null ? object : baseForRight(object, getIteratee(iteratee, 3), keysIn);\n    }\n    /**\n     * Iterates over own enumerable string keyed properties of an object and\n     * invokes `iteratee` for each property. The iteratee is invoked with three\n     * arguments: (value, key, object). Iteratee functions may exit iteration\n     * early by explicitly returning `false`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.3.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Object} Returns `object`.\n     * @see _.forOwnRight\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.forOwn(new Foo, function(value, key) {\n     *   console.log(key);\n     * });\n     * // => Logs 'a' then 'b' (iteration order is not guaranteed).\n     */\n\n\n    function forOwn(object, iteratee) {\n      return object && baseForOwn(object, getIteratee(iteratee, 3));\n    }\n    /**\n     * This method is like `_.forOwn` except that it iterates over properties of\n     * `object` in the opposite order.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.0.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Object} Returns `object`.\n     * @see _.forOwn\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.forOwnRight(new Foo, function(value, key) {\n     *   console.log(key);\n     * });\n     * // => Logs 'b' then 'a' assuming `_.forOwn` logs 'a' then 'b'.\n     */\n\n\n    function forOwnRight(object, iteratee) {\n      return object && baseForOwnRight(object, getIteratee(iteratee, 3));\n    }\n    /**\n     * Creates an array of function property names from own enumerable properties\n     * of `object`.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The object to inspect.\n     * @returns {Array} Returns the function names.\n     * @see _.functionsIn\n     * @example\n     *\n     * function Foo() {\n     *   this.a = _.constant('a');\n     *   this.b = _.constant('b');\n     * }\n     *\n     * Foo.prototype.c = _.constant('c');\n     *\n     * _.functions(new Foo);\n     * // => ['a', 'b']\n     */\n\n\n    function functions(object) {\n      return object == null ? [] : baseFunctions(object, keys(object));\n    }\n    /**\n     * Creates an array of function property names from own and inherited\n     * enumerable properties of `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The object to inspect.\n     * @returns {Array} Returns the function names.\n     * @see _.functions\n     * @example\n     *\n     * function Foo() {\n     *   this.a = _.constant('a');\n     *   this.b = _.constant('b');\n     * }\n     *\n     * Foo.prototype.c = _.constant('c');\n     *\n     * _.functionsIn(new Foo);\n     * // => ['a', 'b', 'c']\n     */\n\n\n    function functionsIn(object) {\n      return object == null ? [] : baseFunctions(object, keysIn(object));\n    }\n    /**\n     * Gets the value at `path` of `object`. If the resolved value is\n     * `undefined`, the `defaultValue` is returned in its place.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.7.0\n     * @category Object\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path of the property to get.\n     * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n     * @returns {*} Returns the resolved value.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n     *\n     * _.get(object, 'a[0].b.c');\n     * // => 3\n     *\n     * _.get(object, ['a', '0', 'b', 'c']);\n     * // => 3\n     *\n     * _.get(object, 'a.b.c', 'default');\n     * // => 'default'\n     */\n\n\n    function get(object, path, defaultValue) {\n      var result = object == null ? undefined : baseGet(object, path);\n      return result === undefined ? defaultValue : result;\n    }\n    /**\n     * Checks if `path` is a direct property of `object`.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path to check.\n     * @returns {boolean} Returns `true` if `path` exists, else `false`.\n     * @example\n     *\n     * var object = { 'a': { 'b': 2 } };\n     * var other = _.create({ 'a': _.create({ 'b': 2 }) });\n     *\n     * _.has(object, 'a');\n     * // => true\n     *\n     * _.has(object, 'a.b');\n     * // => true\n     *\n     * _.has(object, ['a', 'b']);\n     * // => true\n     *\n     * _.has(other, 'a');\n     * // => false\n     */\n\n\n    function has(object, path) {\n      return object != null && hasPath(object, path, baseHas);\n    }\n    /**\n     * Checks if `path` is a direct or inherited property of `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path to check.\n     * @returns {boolean} Returns `true` if `path` exists, else `false`.\n     * @example\n     *\n     * var object = _.create({ 'a': _.create({ 'b': 2 }) });\n     *\n     * _.hasIn(object, 'a');\n     * // => true\n     *\n     * _.hasIn(object, 'a.b');\n     * // => true\n     *\n     * _.hasIn(object, ['a', 'b']);\n     * // => true\n     *\n     * _.hasIn(object, 'b');\n     * // => false\n     */\n\n\n    function hasIn(object, path) {\n      return object != null && hasPath(object, path, baseHasIn);\n    }\n    /**\n     * Creates an object composed of the inverted keys and values of `object`.\n     * If `object` contains duplicate values, subsequent values overwrite\n     * property assignments of previous values.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.7.0\n     * @category Object\n     * @param {Object} object The object to invert.\n     * @returns {Object} Returns the new inverted object.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': 2, 'c': 1 };\n     *\n     * _.invert(object);\n     * // => { '1': 'c', '2': 'b' }\n     */\n\n\n    var invert = createInverter(function (result, value, key) {\n      if (value != null && typeof value.toString != 'function') {\n        value = nativeObjectToString.call(value);\n      }\n\n      result[value] = key;\n    }, constant(identity));\n    /**\n     * This method is like `_.invert` except that the inverted object is generated\n     * from the results of running each element of `object` thru `iteratee`. The\n     * corresponding inverted value of each inverted key is an array of keys\n     * responsible for generating the inverted value. The iteratee is invoked\n     * with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.1.0\n     * @category Object\n     * @param {Object} object The object to invert.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {Object} Returns the new inverted object.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': 2, 'c': 1 };\n     *\n     * _.invertBy(object);\n     * // => { '1': ['a', 'c'], '2': ['b'] }\n     *\n     * _.invertBy(object, function(value) {\n     *   return 'group' + value;\n     * });\n     * // => { 'group1': ['a', 'c'], 'group2': ['b'] }\n     */\n\n    var invertBy = createInverter(function (result, value, key) {\n      if (value != null && typeof value.toString != 'function') {\n        value = nativeObjectToString.call(value);\n      }\n\n      if (hasOwnProperty.call(result, value)) {\n        result[value].push(key);\n      } else {\n        result[value] = [key];\n      }\n    }, getIteratee);\n    /**\n     * Invokes the method at `path` of `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path of the method to invoke.\n     * @param {...*} [args] The arguments to invoke the method with.\n     * @returns {*} Returns the result of the invoked method.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c': [1, 2, 3, 4] } }] };\n     *\n     * _.invoke(object, 'a[0].b.c.slice', 1, 3);\n     * // => [2, 3]\n     */\n\n    var invoke = baseRest(baseInvoke);\n    /**\n     * Creates an array of the own enumerable property names of `object`.\n     *\n     * **Note:** Non-object values are coerced to objects. See the\n     * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)\n     * for more details.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property names.\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.keys(new Foo);\n     * // => ['a', 'b'] (iteration order is not guaranteed)\n     *\n     * _.keys('hi');\n     * // => ['0', '1']\n     */\n\n    function keys(object) {\n      return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n    }\n    /**\n     * Creates an array of the own and inherited enumerable property names of `object`.\n     *\n     * **Note:** Non-object values are coerced to objects.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Object\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property names.\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.keysIn(new Foo);\n     * // => ['a', 'b', 'c'] (iteration order is not guaranteed)\n     */\n\n\n    function keysIn(object) {\n      return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);\n    }\n    /**\n     * The opposite of `_.mapValues`; this method creates an object with the\n     * same values as `object` and keys generated by running each own enumerable\n     * string keyed property of `object` thru `iteratee`. The iteratee is invoked\n     * with three arguments: (value, key, object).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.8.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Object} Returns the new mapped object.\n     * @see _.mapValues\n     * @example\n     *\n     * _.mapKeys({ 'a': 1, 'b': 2 }, function(value, key) {\n     *   return key + value;\n     * });\n     * // => { 'a1': 1, 'b2': 2 }\n     */\n\n\n    function mapKeys(object, iteratee) {\n      var result = {};\n      iteratee = getIteratee(iteratee, 3);\n      baseForOwn(object, function (value, key, object) {\n        baseAssignValue(result, iteratee(value, key, object), value);\n      });\n      return result;\n    }\n    /**\n     * Creates an object with the same keys as `object` and values generated\n     * by running each own enumerable string keyed property of `object` thru\n     * `iteratee`. The iteratee is invoked with three arguments:\n     * (value, key, object).\n     *\n     * @static\n     * @memberOf _\n     * @since 2.4.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Object} Returns the new mapped object.\n     * @see _.mapKeys\n     * @example\n     *\n     * var users = {\n     *   'fred':    { 'user': 'fred',    'age': 40 },\n     *   'pebbles': { 'user': 'pebbles', 'age': 1 }\n     * };\n     *\n     * _.mapValues(users, function(o) { return o.age; });\n     * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.mapValues(users, 'age');\n     * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed)\n     */\n\n\n    function mapValues(object, iteratee) {\n      var result = {};\n      iteratee = getIteratee(iteratee, 3);\n      baseForOwn(object, function (value, key, object) {\n        baseAssignValue(result, key, iteratee(value, key, object));\n      });\n      return result;\n    }\n    /**\n     * This method is like `_.assign` except that it recursively merges own and\n     * inherited enumerable string keyed properties of source objects into the\n     * destination object. Source properties that resolve to `undefined` are\n     * skipped if a destination value exists. Array and plain object properties\n     * are merged recursively. Other objects and value types are overridden by\n     * assignment. Source objects are applied from left to right. Subsequent\n     * sources overwrite property assignments of previous sources.\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.5.0\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} [sources] The source objects.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * var object = {\n     *   'a': [{ 'b': 2 }, { 'd': 4 }]\n     * };\n     *\n     * var other = {\n     *   'a': [{ 'c': 3 }, { 'e': 5 }]\n     * };\n     *\n     * _.merge(object, other);\n     * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] }\n     */\n\n\n    var merge = createAssigner(function (object, source, srcIndex) {\n      baseMerge(object, source, srcIndex);\n    });\n    /**\n     * This method is like `_.merge` except that it accepts `customizer` which\n     * is invoked to produce the merged values of the destination and source\n     * properties. If `customizer` returns `undefined`, merging is handled by the\n     * method instead. The `customizer` is invoked with six arguments:\n     * (objValue, srcValue, key, object, source, stack).\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The destination object.\n     * @param {...Object} sources The source objects.\n     * @param {Function} customizer The function to customize assigned values.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * function customizer(objValue, srcValue) {\n     *   if (_.isArray(objValue)) {\n     *     return objValue.concat(srcValue);\n     *   }\n     * }\n     *\n     * var object = { 'a': [1], 'b': [2] };\n     * var other = { 'a': [3], 'b': [4] };\n     *\n     * _.mergeWith(object, other, customizer);\n     * // => { 'a': [1, 3], 'b': [2, 4] }\n     */\n\n    var mergeWith = createAssigner(function (object, source, srcIndex, customizer) {\n      baseMerge(object, source, srcIndex, customizer);\n    });\n    /**\n     * The opposite of `_.pick`; this method creates an object composed of the\n     * own and inherited enumerable property paths of `object` that are not omitted.\n     *\n     * **Note:** This method is considerably slower than `_.pick`.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The source object.\n     * @param {...(string|string[])} [paths] The property paths to omit.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': '2', 'c': 3 };\n     *\n     * _.omit(object, ['a', 'c']);\n     * // => { 'b': '2' }\n     */\n\n    var omit = flatRest(function (object, paths) {\n      var result = {};\n\n      if (object == null) {\n        return result;\n      }\n\n      var isDeep = false;\n      paths = arrayMap(paths, function (path) {\n        path = castPath(path, object);\n        isDeep || (isDeep = path.length > 1);\n        return path;\n      });\n      copyObject(object, getAllKeysIn(object), result);\n\n      if (isDeep) {\n        result = baseClone(result, CLONE_DEEP_FLAG | CLONE_FLAT_FLAG | CLONE_SYMBOLS_FLAG, customOmitClone);\n      }\n\n      var length = paths.length;\n\n      while (length--) {\n        baseUnset(result, paths[length]);\n      }\n\n      return result;\n    });\n    /**\n     * The opposite of `_.pickBy`; this method creates an object composed of\n     * the own and inherited enumerable string keyed properties of `object` that\n     * `predicate` doesn't return truthy for. The predicate is invoked with two\n     * arguments: (value, key).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The source object.\n     * @param {Function} [predicate=_.identity] The function invoked per property.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': '2', 'c': 3 };\n     *\n     * _.omitBy(object, _.isNumber);\n     * // => { 'b': '2' }\n     */\n\n    function omitBy(object, predicate) {\n      return pickBy(object, negate(getIteratee(predicate)));\n    }\n    /**\n     * Creates an object composed of the picked `object` properties.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The source object.\n     * @param {...(string|string[])} [paths] The property paths to pick.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': '2', 'c': 3 };\n     *\n     * _.pick(object, ['a', 'c']);\n     * // => { 'a': 1, 'c': 3 }\n     */\n\n\n    var pick = flatRest(function (object, paths) {\n      return object == null ? {} : basePick(object, paths);\n    });\n    /**\n     * Creates an object composed of the `object` properties `predicate` returns\n     * truthy for. The predicate is invoked with two arguments: (value, key).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The source object.\n     * @param {Function} [predicate=_.identity] The function invoked per property.\n     * @returns {Object} Returns the new object.\n     * @example\n     *\n     * var object = { 'a': 1, 'b': '2', 'c': 3 };\n     *\n     * _.pickBy(object, _.isNumber);\n     * // => { 'a': 1, 'c': 3 }\n     */\n\n    function pickBy(object, predicate) {\n      if (object == null) {\n        return {};\n      }\n\n      var props = arrayMap(getAllKeysIn(object), function (prop) {\n        return [prop];\n      });\n      predicate = getIteratee(predicate);\n      return basePickBy(object, props, function (value, path) {\n        return predicate(value, path[0]);\n      });\n    }\n    /**\n     * This method is like `_.get` except that if the resolved value is a\n     * function it's invoked with the `this` binding of its parent object and\n     * its result is returned.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The object to query.\n     * @param {Array|string} path The path of the property to resolve.\n     * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n     * @returns {*} Returns the resolved value.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c1': 3, 'c2': _.constant(4) } }] };\n     *\n     * _.result(object, 'a[0].b.c1');\n     * // => 3\n     *\n     * _.result(object, 'a[0].b.c2');\n     * // => 4\n     *\n     * _.result(object, 'a[0].b.c3', 'default');\n     * // => 'default'\n     *\n     * _.result(object, 'a[0].b.c3', _.constant('default'));\n     * // => 'default'\n     */\n\n\n    function result(object, path, defaultValue) {\n      path = castPath(path, object);\n      var index = -1,\n          length = path.length; // Ensure the loop is entered when path is empty.\n\n      if (!length) {\n        length = 1;\n        object = undefined;\n      }\n\n      while (++index < length) {\n        var value = object == null ? undefined : object[toKey(path[index])];\n\n        if (value === undefined) {\n          index = length;\n          value = defaultValue;\n        }\n\n        object = isFunction(value) ? value.call(object) : value;\n      }\n\n      return object;\n    }\n    /**\n     * Sets the value at `path` of `object`. If a portion of `path` doesn't exist,\n     * it's created. Arrays are created for missing index properties while objects\n     * are created for all other missing properties. Use `_.setWith` to customize\n     * `path` creation.\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.7.0\n     * @category Object\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The path of the property to set.\n     * @param {*} value The value to set.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n     *\n     * _.set(object, 'a[0].b.c', 4);\n     * console.log(object.a[0].b.c);\n     * // => 4\n     *\n     * _.set(object, ['x', '0', 'y', 'z'], 5);\n     * console.log(object.x[0].y.z);\n     * // => 5\n     */\n\n\n    function set(object, path, value) {\n      return object == null ? object : baseSet(object, path, value);\n    }\n    /**\n     * This method is like `_.set` except that it accepts `customizer` which is\n     * invoked to produce the objects of `path`.  If `customizer` returns `undefined`\n     * path creation is handled by the method instead. The `customizer` is invoked\n     * with three arguments: (nsValue, key, nsObject).\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The path of the property to set.\n     * @param {*} value The value to set.\n     * @param {Function} [customizer] The function to customize assigned values.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * var object = {};\n     *\n     * _.setWith(object, '[0][1]', 'a', Object);\n     * // => { '0': { '1': 'a' } }\n     */\n\n\n    function setWith(object, path, value, customizer) {\n      customizer = typeof customizer == 'function' ? customizer : undefined;\n      return object == null ? object : baseSet(object, path, value, customizer);\n    }\n    /**\n     * Creates an array of own enumerable string keyed-value pairs for `object`\n     * which can be consumed by `_.fromPairs`. If `object` is a map or set, its\n     * entries are returned.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @alias entries\n     * @category Object\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the key-value pairs.\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.toPairs(new Foo);\n     * // => [['a', 1], ['b', 2]] (iteration order is not guaranteed)\n     */\n\n\n    var toPairs = createToPairs(keys);\n    /**\n     * Creates an array of own and inherited enumerable string keyed-value pairs\n     * for `object` which can be consumed by `_.fromPairs`. If `object` is a map\n     * or set, its entries are returned.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @alias entriesIn\n     * @category Object\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the key-value pairs.\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.toPairsIn(new Foo);\n     * // => [['a', 1], ['b', 2], ['c', 3]] (iteration order is not guaranteed)\n     */\n\n    var toPairsIn = createToPairs(keysIn);\n    /**\n     * An alternative to `_.reduce`; this method transforms `object` to a new\n     * `accumulator` object which is the result of running each of its own\n     * enumerable string keyed properties thru `iteratee`, with each invocation\n     * potentially mutating the `accumulator` object. If `accumulator` is not\n     * provided, a new object with the same `[[Prototype]]` will be used. The\n     * iteratee is invoked with four arguments: (accumulator, value, key, object).\n     * Iteratee functions may exit iteration early by explicitly returning `false`.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.3.0\n     * @category Object\n     * @param {Object} object The object to iterate over.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @param {*} [accumulator] The custom accumulator value.\n     * @returns {*} Returns the accumulated value.\n     * @example\n     *\n     * _.transform([2, 3, 4], function(result, n) {\n     *   result.push(n *= n);\n     *   return n % 2 == 0;\n     * }, []);\n     * // => [4, 9]\n     *\n     * _.transform({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) {\n     *   (result[value] || (result[value] = [])).push(key);\n     * }, {});\n     * // => { '1': ['a', 'c'], '2': ['b'] }\n     */\n\n    function transform(object, iteratee, accumulator) {\n      var isArr = isArray(object),\n          isArrLike = isArr || isBuffer(object) || isTypedArray(object);\n      iteratee = getIteratee(iteratee, 4);\n\n      if (accumulator == null) {\n        var Ctor = object && object.constructor;\n\n        if (isArrLike) {\n          accumulator = isArr ? new Ctor() : [];\n        } else if (isObject(object)) {\n          accumulator = isFunction(Ctor) ? baseCreate(getPrototype(object)) : {};\n        } else {\n          accumulator = {};\n        }\n      }\n\n      (isArrLike ? arrayEach : baseForOwn)(object, function (value, index, object) {\n        return iteratee(accumulator, value, index, object);\n      });\n      return accumulator;\n    }\n    /**\n     * Removes the property at `path` of `object`.\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Object\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The path of the property to unset.\n     * @returns {boolean} Returns `true` if the property is deleted, else `false`.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c': 7 } }] };\n     * _.unset(object, 'a[0].b.c');\n     * // => true\n     *\n     * console.log(object);\n     * // => { 'a': [{ 'b': {} }] };\n     *\n     * _.unset(object, ['a', '0', 'b', 'c']);\n     * // => true\n     *\n     * console.log(object);\n     * // => { 'a': [{ 'b': {} }] };\n     */\n\n\n    function unset(object, path) {\n      return object == null ? true : baseUnset(object, path);\n    }\n    /**\n     * This method is like `_.set` except that accepts `updater` to produce the\n     * value to set. Use `_.updateWith` to customize `path` creation. The `updater`\n     * is invoked with one argument: (value).\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.6.0\n     * @category Object\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The path of the property to set.\n     * @param {Function} updater The function to produce the updated value.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n     *\n     * _.update(object, 'a[0].b.c', function(n) { return n * n; });\n     * console.log(object.a[0].b.c);\n     * // => 9\n     *\n     * _.update(object, 'x[0].y.z', function(n) { return n ? n + 1 : 0; });\n     * console.log(object.x[0].y.z);\n     * // => 0\n     */\n\n\n    function update(object, path, updater) {\n      return object == null ? object : baseUpdate(object, path, castFunction(updater));\n    }\n    /**\n     * This method is like `_.update` except that it accepts `customizer` which is\n     * invoked to produce the objects of `path`.  If `customizer` returns `undefined`\n     * path creation is handled by the method instead. The `customizer` is invoked\n     * with three arguments: (nsValue, key, nsObject).\n     *\n     * **Note:** This method mutates `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.6.0\n     * @category Object\n     * @param {Object} object The object to modify.\n     * @param {Array|string} path The path of the property to set.\n     * @param {Function} updater The function to produce the updated value.\n     * @param {Function} [customizer] The function to customize assigned values.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * var object = {};\n     *\n     * _.updateWith(object, '[0][1]', _.constant('a'), Object);\n     * // => { '0': { '1': 'a' } }\n     */\n\n\n    function updateWith(object, path, updater, customizer) {\n      customizer = typeof customizer == 'function' ? customizer : undefined;\n      return object == null ? object : baseUpdate(object, path, castFunction(updater), customizer);\n    }\n    /**\n     * Creates an array of the own enumerable string keyed property values of `object`.\n     *\n     * **Note:** Non-object values are coerced to objects.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Object\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property values.\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.values(new Foo);\n     * // => [1, 2] (iteration order is not guaranteed)\n     *\n     * _.values('hi');\n     * // => ['h', 'i']\n     */\n\n\n    function values(object) {\n      return object == null ? [] : baseValues(object, keys(object));\n    }\n    /**\n     * Creates an array of the own and inherited enumerable string keyed property\n     * values of `object`.\n     *\n     * **Note:** Non-object values are coerced to objects.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Object\n     * @param {Object} object The object to query.\n     * @returns {Array} Returns the array of property values.\n     * @example\n     *\n     * function Foo() {\n     *   this.a = 1;\n     *   this.b = 2;\n     * }\n     *\n     * Foo.prototype.c = 3;\n     *\n     * _.valuesIn(new Foo);\n     * // => [1, 2, 3] (iteration order is not guaranteed)\n     */\n\n\n    function valuesIn(object) {\n      return object == null ? [] : baseValues(object, keysIn(object));\n    }\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Clamps `number` within the inclusive `lower` and `upper` bounds.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Number\n     * @param {number} number The number to clamp.\n     * @param {number} [lower] The lower bound.\n     * @param {number} upper The upper bound.\n     * @returns {number} Returns the clamped number.\n     * @example\n     *\n     * _.clamp(-10, -5, 5);\n     * // => -5\n     *\n     * _.clamp(10, -5, 5);\n     * // => 5\n     */\n\n\n    function clamp(number, lower, upper) {\n      if (upper === undefined) {\n        upper = lower;\n        lower = undefined;\n      }\n\n      if (upper !== undefined) {\n        upper = toNumber(upper);\n        upper = upper === upper ? upper : 0;\n      }\n\n      if (lower !== undefined) {\n        lower = toNumber(lower);\n        lower = lower === lower ? lower : 0;\n      }\n\n      return baseClamp(toNumber(number), lower, upper);\n    }\n    /**\n     * Checks if `n` is between `start` and up to, but not including, `end`. If\n     * `end` is not specified, it's set to `start` with `start` then set to `0`.\n     * If `start` is greater than `end` the params are swapped to support\n     * negative ranges.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.3.0\n     * @category Number\n     * @param {number} number The number to check.\n     * @param {number} [start=0] The start of the range.\n     * @param {number} end The end of the range.\n     * @returns {boolean} Returns `true` if `number` is in the range, else `false`.\n     * @see _.range, _.rangeRight\n     * @example\n     *\n     * _.inRange(3, 2, 4);\n     * // => true\n     *\n     * _.inRange(4, 8);\n     * // => true\n     *\n     * _.inRange(4, 2);\n     * // => false\n     *\n     * _.inRange(2, 2);\n     * // => false\n     *\n     * _.inRange(1.2, 2);\n     * // => true\n     *\n     * _.inRange(5.2, 4);\n     * // => false\n     *\n     * _.inRange(-3, -2, -6);\n     * // => true\n     */\n\n\n    function inRange(number, start, end) {\n      start = toFinite(start);\n\n      if (end === undefined) {\n        end = start;\n        start = 0;\n      } else {\n        end = toFinite(end);\n      }\n\n      number = toNumber(number);\n      return baseInRange(number, start, end);\n    }\n    /**\n     * Produces a random number between the inclusive `lower` and `upper` bounds.\n     * If only one argument is provided a number between `0` and the given number\n     * is returned. If `floating` is `true`, or either `lower` or `upper` are\n     * floats, a floating-point number is returned instead of an integer.\n     *\n     * **Note:** JavaScript follows the IEEE-754 standard for resolving\n     * floating-point values which can produce unexpected results.\n     *\n     * @static\n     * @memberOf _\n     * @since 0.7.0\n     * @category Number\n     * @param {number} [lower=0] The lower bound.\n     * @param {number} [upper=1] The upper bound.\n     * @param {boolean} [floating] Specify returning a floating-point number.\n     * @returns {number} Returns the random number.\n     * @example\n     *\n     * _.random(0, 5);\n     * // => an integer between 0 and 5\n     *\n     * _.random(5);\n     * // => also an integer between 0 and 5\n     *\n     * _.random(5, true);\n     * // => a floating-point number between 0 and 5\n     *\n     * _.random(1.2, 5.2);\n     * // => a floating-point number between 1.2 and 5.2\n     */\n\n\n    function random(lower, upper, floating) {\n      if (floating && typeof floating != 'boolean' && isIterateeCall(lower, upper, floating)) {\n        upper = floating = undefined;\n      }\n\n      if (floating === undefined) {\n        if (typeof upper == 'boolean') {\n          floating = upper;\n          upper = undefined;\n        } else if (typeof lower == 'boolean') {\n          floating = lower;\n          lower = undefined;\n        }\n      }\n\n      if (lower === undefined && upper === undefined) {\n        lower = 0;\n        upper = 1;\n      } else {\n        lower = toFinite(lower);\n\n        if (upper === undefined) {\n          upper = lower;\n          lower = 0;\n        } else {\n          upper = toFinite(upper);\n        }\n      }\n\n      if (lower > upper) {\n        var temp = lower;\n        lower = upper;\n        upper = temp;\n      }\n\n      if (floating || lower % 1 || upper % 1) {\n        var rand = nativeRandom();\n        return nativeMin(lower + rand * (upper - lower + freeParseFloat('1e-' + ((rand + '').length - 1))), upper);\n      }\n\n      return baseRandom(lower, upper);\n    }\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Converts `string` to [camel case](https://en.wikipedia.org/wiki/CamelCase).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the camel cased string.\n     * @example\n     *\n     * _.camelCase('Foo Bar');\n     * // => 'fooBar'\n     *\n     * _.camelCase('--foo-bar--');\n     * // => 'fooBar'\n     *\n     * _.camelCase('__FOO_BAR__');\n     * // => 'fooBar'\n     */\n\n\n    var camelCase = createCompounder(function (result, word, index) {\n      word = word.toLowerCase();\n      return result + (index ? capitalize(word) : word);\n    });\n    /**\n     * Converts the first character of `string` to upper case and the remaining\n     * to lower case.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to capitalize.\n     * @returns {string} Returns the capitalized string.\n     * @example\n     *\n     * _.capitalize('FRED');\n     * // => 'Fred'\n     */\n\n    function capitalize(string) {\n      return upperFirst(toString(string).toLowerCase());\n    }\n    /**\n     * Deburrs `string` by converting\n     * [Latin-1 Supplement](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table)\n     * and [Latin Extended-A](https://en.wikipedia.org/wiki/Latin_Extended-A)\n     * letters to basic Latin letters and removing\n     * [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to deburr.\n     * @returns {string} Returns the deburred string.\n     * @example\n     *\n     * _.deburr('déjà vu');\n     * // => 'deja vu'\n     */\n\n\n    function deburr(string) {\n      string = toString(string);\n      return string && string.replace(reLatin, deburrLetter).replace(reComboMark, '');\n    }\n    /**\n     * Checks if `string` ends with the given target string.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to inspect.\n     * @param {string} [target] The string to search for.\n     * @param {number} [position=string.length] The position to search up to.\n     * @returns {boolean} Returns `true` if `string` ends with `target`,\n     *  else `false`.\n     * @example\n     *\n     * _.endsWith('abc', 'c');\n     * // => true\n     *\n     * _.endsWith('abc', 'b');\n     * // => false\n     *\n     * _.endsWith('abc', 'b', 2);\n     * // => true\n     */\n\n\n    function endsWith(string, target, position) {\n      string = toString(string);\n      target = baseToString(target);\n      var length = string.length;\n      position = position === undefined ? length : baseClamp(toInteger(position), 0, length);\n      var end = position;\n      position -= target.length;\n      return position >= 0 && string.slice(position, end) == target;\n    }\n    /**\n     * Converts the characters \"&\", \"<\", \">\", '\"', and \"'\" in `string` to their\n     * corresponding HTML entities.\n     *\n     * **Note:** No other characters are escaped. To escape additional\n     * characters use a third-party library like [_he_](https://mths.be/he).\n     *\n     * Though the \">\" character is escaped for symmetry, characters like\n     * \">\" and \"/\" don't need escaping in HTML and have no special meaning\n     * unless they're part of a tag or unquoted attribute value. See\n     * [Mathias Bynens's article](https://mathiasbynens.be/notes/ambiguous-ampersands)\n     * (under \"semi-related fun fact\") for more details.\n     *\n     * When working with HTML you should always\n     * [quote attribute values](http://wonko.com/post/html-escaping) to reduce\n     * XSS vectors.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category String\n     * @param {string} [string=''] The string to escape.\n     * @returns {string} Returns the escaped string.\n     * @example\n     *\n     * _.escape('fred, barney, & pebbles');\n     * // => 'fred, barney, &amp; pebbles'\n     */\n\n\n    function escape(string) {\n      string = toString(string);\n      return string && reHasUnescapedHtml.test(string) ? string.replace(reUnescapedHtml, escapeHtmlChar) : string;\n    }\n    /**\n     * Escapes the `RegExp` special characters \"^\", \"$\", \"\\\", \".\", \"*\", \"+\",\n     * \"?\", \"(\", \")\", \"[\", \"]\", \"{\", \"}\", and \"|\" in `string`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to escape.\n     * @returns {string} Returns the escaped string.\n     * @example\n     *\n     * _.escapeRegExp('[lodash](https://lodash.com/)');\n     * // => '\\[lodash\\]\\(https://lodash\\.com/\\)'\n     */\n\n\n    function escapeRegExp(string) {\n      string = toString(string);\n      return string && reHasRegExpChar.test(string) ? string.replace(reRegExpChar, '\\\\$&') : string;\n    }\n    /**\n     * Converts `string` to\n     * [kebab case](https://en.wikipedia.org/wiki/Letter_case#Special_case_styles).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the kebab cased string.\n     * @example\n     *\n     * _.kebabCase('Foo Bar');\n     * // => 'foo-bar'\n     *\n     * _.kebabCase('fooBar');\n     * // => 'foo-bar'\n     *\n     * _.kebabCase('__FOO_BAR__');\n     * // => 'foo-bar'\n     */\n\n\n    var kebabCase = createCompounder(function (result, word, index) {\n      return result + (index ? '-' : '') + word.toLowerCase();\n    });\n    /**\n     * Converts `string`, as space separated words, to lower case.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the lower cased string.\n     * @example\n     *\n     * _.lowerCase('--Foo-Bar--');\n     * // => 'foo bar'\n     *\n     * _.lowerCase('fooBar');\n     * // => 'foo bar'\n     *\n     * _.lowerCase('__FOO_BAR__');\n     * // => 'foo bar'\n     */\n\n    var lowerCase = createCompounder(function (result, word, index) {\n      return result + (index ? ' ' : '') + word.toLowerCase();\n    });\n    /**\n     * Converts the first character of `string` to lower case.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the converted string.\n     * @example\n     *\n     * _.lowerFirst('Fred');\n     * // => 'fred'\n     *\n     * _.lowerFirst('FRED');\n     * // => 'fRED'\n     */\n\n    var lowerFirst = createCaseFirst('toLowerCase');\n    /**\n     * Pads `string` on the left and right sides if it's shorter than `length`.\n     * Padding characters are truncated if they can't be evenly divided by `length`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to pad.\n     * @param {number} [length=0] The padding length.\n     * @param {string} [chars=' '] The string used as padding.\n     * @returns {string} Returns the padded string.\n     * @example\n     *\n     * _.pad('abc', 8);\n     * // => '  abc   '\n     *\n     * _.pad('abc', 8, '_-');\n     * // => '_-abc_-_'\n     *\n     * _.pad('abc', 3);\n     * // => 'abc'\n     */\n\n    function pad(string, length, chars) {\n      string = toString(string);\n      length = toInteger(length);\n      var strLength = length ? stringSize(string) : 0;\n\n      if (!length || strLength >= length) {\n        return string;\n      }\n\n      var mid = (length - strLength) / 2;\n      return createPadding(nativeFloor(mid), chars) + string + createPadding(nativeCeil(mid), chars);\n    }\n    /**\n     * Pads `string` on the right side if it's shorter than `length`. Padding\n     * characters are truncated if they exceed `length`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to pad.\n     * @param {number} [length=0] The padding length.\n     * @param {string} [chars=' '] The string used as padding.\n     * @returns {string} Returns the padded string.\n     * @example\n     *\n     * _.padEnd('abc', 6);\n     * // => 'abc   '\n     *\n     * _.padEnd('abc', 6, '_-');\n     * // => 'abc_-_'\n     *\n     * _.padEnd('abc', 3);\n     * // => 'abc'\n     */\n\n\n    function padEnd(string, length, chars) {\n      string = toString(string);\n      length = toInteger(length);\n      var strLength = length ? stringSize(string) : 0;\n      return length && strLength < length ? string + createPadding(length - strLength, chars) : string;\n    }\n    /**\n     * Pads `string` on the left side if it's shorter than `length`. Padding\n     * characters are truncated if they exceed `length`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to pad.\n     * @param {number} [length=0] The padding length.\n     * @param {string} [chars=' '] The string used as padding.\n     * @returns {string} Returns the padded string.\n     * @example\n     *\n     * _.padStart('abc', 6);\n     * // => '   abc'\n     *\n     * _.padStart('abc', 6, '_-');\n     * // => '_-_abc'\n     *\n     * _.padStart('abc', 3);\n     * // => 'abc'\n     */\n\n\n    function padStart(string, length, chars) {\n      string = toString(string);\n      length = toInteger(length);\n      var strLength = length ? stringSize(string) : 0;\n      return length && strLength < length ? createPadding(length - strLength, chars) + string : string;\n    }\n    /**\n     * Converts `string` to an integer of the specified radix. If `radix` is\n     * `undefined` or `0`, a `radix` of `10` is used unless `value` is a\n     * hexadecimal, in which case a `radix` of `16` is used.\n     *\n     * **Note:** This method aligns with the\n     * [ES5 implementation](https://es5.github.io/#x15.1.2.2) of `parseInt`.\n     *\n     * @static\n     * @memberOf _\n     * @since 1.1.0\n     * @category String\n     * @param {string} string The string to convert.\n     * @param {number} [radix=10] The radix to interpret `value` by.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {number} Returns the converted integer.\n     * @example\n     *\n     * _.parseInt('08');\n     * // => 8\n     *\n     * _.map(['6', '08', '10'], _.parseInt);\n     * // => [6, 8, 10]\n     */\n\n\n    function parseInt(string, radix, guard) {\n      if (guard || radix == null) {\n        radix = 0;\n      } else if (radix) {\n        radix = +radix;\n      }\n\n      return nativeParseInt(toString(string).replace(reTrimStart, ''), radix || 0);\n    }\n    /**\n     * Repeats the given string `n` times.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to repeat.\n     * @param {number} [n=1] The number of times to repeat the string.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {string} Returns the repeated string.\n     * @example\n     *\n     * _.repeat('*', 3);\n     * // => '***'\n     *\n     * _.repeat('abc', 2);\n     * // => 'abcabc'\n     *\n     * _.repeat('abc', 0);\n     * // => ''\n     */\n\n\n    function repeat(string, n, guard) {\n      if (guard ? isIterateeCall(string, n, guard) : n === undefined) {\n        n = 1;\n      } else {\n        n = toInteger(n);\n      }\n\n      return baseRepeat(toString(string), n);\n    }\n    /**\n     * Replaces matches for `pattern` in `string` with `replacement`.\n     *\n     * **Note:** This method is based on\n     * [`String#replace`](https://mdn.io/String/replace).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to modify.\n     * @param {RegExp|string} pattern The pattern to replace.\n     * @param {Function|string} replacement The match replacement.\n     * @returns {string} Returns the modified string.\n     * @example\n     *\n     * _.replace('Hi Fred', 'Fred', 'Barney');\n     * // => 'Hi Barney'\n     */\n\n\n    function replace() {\n      var args = arguments,\n          string = toString(args[0]);\n      return args.length < 3 ? string : string.replace(args[1], args[2]);\n    }\n    /**\n     * Converts `string` to\n     * [snake case](https://en.wikipedia.org/wiki/Snake_case).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the snake cased string.\n     * @example\n     *\n     * _.snakeCase('Foo Bar');\n     * // => 'foo_bar'\n     *\n     * _.snakeCase('fooBar');\n     * // => 'foo_bar'\n     *\n     * _.snakeCase('--FOO-BAR--');\n     * // => 'foo_bar'\n     */\n\n\n    var snakeCase = createCompounder(function (result, word, index) {\n      return result + (index ? '_' : '') + word.toLowerCase();\n    });\n    /**\n     * Splits `string` by `separator`.\n     *\n     * **Note:** This method is based on\n     * [`String#split`](https://mdn.io/String/split).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to split.\n     * @param {RegExp|string} separator The separator pattern to split by.\n     * @param {number} [limit] The length to truncate results to.\n     * @returns {Array} Returns the string segments.\n     * @example\n     *\n     * _.split('a-b-c', '-', 2);\n     * // => ['a', 'b']\n     */\n\n    function split(string, separator, limit) {\n      if (limit && typeof limit != 'number' && isIterateeCall(string, separator, limit)) {\n        separator = limit = undefined;\n      }\n\n      limit = limit === undefined ? MAX_ARRAY_LENGTH : limit >>> 0;\n\n      if (!limit) {\n        return [];\n      }\n\n      string = toString(string);\n\n      if (string && (typeof separator == 'string' || separator != null && !isRegExp(separator))) {\n        separator = baseToString(separator);\n\n        if (!separator && hasUnicode(string)) {\n          return castSlice(stringToArray(string), 0, limit);\n        }\n      }\n\n      return string.split(separator, limit);\n    }\n    /**\n     * Converts `string` to\n     * [start case](https://en.wikipedia.org/wiki/Letter_case#Stylistic_or_specialised_usage).\n     *\n     * @static\n     * @memberOf _\n     * @since 3.1.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the start cased string.\n     * @example\n     *\n     * _.startCase('--foo-bar--');\n     * // => 'Foo Bar'\n     *\n     * _.startCase('fooBar');\n     * // => 'Foo Bar'\n     *\n     * _.startCase('__FOO_BAR__');\n     * // => 'FOO BAR'\n     */\n\n\n    var startCase = createCompounder(function (result, word, index) {\n      return result + (index ? ' ' : '') + upperFirst(word);\n    });\n    /**\n     * Checks if `string` starts with the given target string.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to inspect.\n     * @param {string} [target] The string to search for.\n     * @param {number} [position=0] The position to search from.\n     * @returns {boolean} Returns `true` if `string` starts with `target`,\n     *  else `false`.\n     * @example\n     *\n     * _.startsWith('abc', 'a');\n     * // => true\n     *\n     * _.startsWith('abc', 'b');\n     * // => false\n     *\n     * _.startsWith('abc', 'b', 1);\n     * // => true\n     */\n\n    function startsWith(string, target, position) {\n      string = toString(string);\n      position = position == null ? 0 : baseClamp(toInteger(position), 0, string.length);\n      target = baseToString(target);\n      return string.slice(position, position + target.length) == target;\n    }\n    /**\n     * Creates a compiled template function that can interpolate data properties\n     * in \"interpolate\" delimiters, HTML-escape interpolated data properties in\n     * \"escape\" delimiters, and execute JavaScript in \"evaluate\" delimiters. Data\n     * properties may be accessed as free variables in the template. If a setting\n     * object is given, it takes precedence over `_.templateSettings` values.\n     *\n     * **Note:** In the development build `_.template` utilizes\n     * [sourceURLs](http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/#toc-sourceurl)\n     * for easier debugging.\n     *\n     * For more information on precompiling templates see\n     * [lodash's custom builds documentation](https://lodash.com/custom-builds).\n     *\n     * For more information on Chrome extension sandboxes see\n     * [Chrome's extensions documentation](https://developer.chrome.com/extensions/sandboxingEval).\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category String\n     * @param {string} [string=''] The template string.\n     * @param {Object} [options={}] The options object.\n     * @param {RegExp} [options.escape=_.templateSettings.escape]\n     *  The HTML \"escape\" delimiter.\n     * @param {RegExp} [options.evaluate=_.templateSettings.evaluate]\n     *  The \"evaluate\" delimiter.\n     * @param {Object} [options.imports=_.templateSettings.imports]\n     *  An object to import into the template as free variables.\n     * @param {RegExp} [options.interpolate=_.templateSettings.interpolate]\n     *  The \"interpolate\" delimiter.\n     * @param {string} [options.sourceURL='lodash.templateSources[n]']\n     *  The sourceURL of the compiled template.\n     * @param {string} [options.variable='obj']\n     *  The data object variable name.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Function} Returns the compiled template function.\n     * @example\n     *\n     * // Use the \"interpolate\" delimiter to create a compiled template.\n     * var compiled = _.template('hello <%= user %>!');\n     * compiled({ 'user': 'fred' });\n     * // => 'hello fred!'\n     *\n     * // Use the HTML \"escape\" delimiter to escape data property values.\n     * var compiled = _.template('<b><%- value %></b>');\n     * compiled({ 'value': '<script>' });\n     * // => '<b>&lt;script&gt;</b>'\n     *\n     * // Use the \"evaluate\" delimiter to execute JavaScript and generate HTML.\n     * var compiled = _.template('<% _.forEach(users, function(user) { %><li><%- user %></li><% }); %>');\n     * compiled({ 'users': ['fred', 'barney'] });\n     * // => '<li>fred</li><li>barney</li>'\n     *\n     * // Use the internal `print` function in \"evaluate\" delimiters.\n     * var compiled = _.template('<% print(\"hello \" + user); %>!');\n     * compiled({ 'user': 'barney' });\n     * // => 'hello barney!'\n     *\n     * // Use the ES template literal delimiter as an \"interpolate\" delimiter.\n     * // Disable support by replacing the \"interpolate\" delimiter.\n     * var compiled = _.template('hello ${ user }!');\n     * compiled({ 'user': 'pebbles' });\n     * // => 'hello pebbles!'\n     *\n     * // Use backslashes to treat delimiters as plain text.\n     * var compiled = _.template('<%= \"\\\\<%- value %\\\\>\" %>');\n     * compiled({ 'value': 'ignored' });\n     * // => '<%- value %>'\n     *\n     * // Use the `imports` option to import `jQuery` as `jq`.\n     * var text = '<% jq.each(users, function(user) { %><li><%- user %></li><% }); %>';\n     * var compiled = _.template(text, { 'imports': { 'jq': jQuery } });\n     * compiled({ 'users': ['fred', 'barney'] });\n     * // => '<li>fred</li><li>barney</li>'\n     *\n     * // Use the `sourceURL` option to specify a custom sourceURL for the template.\n     * var compiled = _.template('hello <%= user %>!', { 'sourceURL': '/basic/greeting.jst' });\n     * compiled(data);\n     * // => Find the source of \"greeting.jst\" under the Sources tab or Resources panel of the web inspector.\n     *\n     * // Use the `variable` option to ensure a with-statement isn't used in the compiled template.\n     * var compiled = _.template('hi <%= data.user %>!', { 'variable': 'data' });\n     * compiled.source;\n     * // => function(data) {\n     * //   var __t, __p = '';\n     * //   __p += 'hi ' + ((__t = ( data.user )) == null ? '' : __t) + '!';\n     * //   return __p;\n     * // }\n     *\n     * // Use custom template delimiters.\n     * _.templateSettings.interpolate = /{{([\\s\\S]+?)}}/g;\n     * var compiled = _.template('hello {{ user }}!');\n     * compiled({ 'user': 'mustache' });\n     * // => 'hello mustache!'\n     *\n     * // Use the `source` property to inline compiled templates for meaningful\n     * // line numbers in error messages and stack traces.\n     * fs.writeFileSync(path.join(process.cwd(), 'jst.js'), '\\\n     *   var JST = {\\\n     *     \"main\": ' + _.template(mainText).source + '\\\n     *   };\\\n     * ');\n     */\n\n\n    function template(string, options, guard) {\n      // Based on John Resig's `tmpl` implementation\n      // (http://ejohn.org/blog/javascript-micro-templating/)\n      // and Laura Doktorova's doT.js (https://github.com/olado/doT).\n      var settings = lodash.templateSettings;\n\n      if (guard && isIterateeCall(string, options, guard)) {\n        options = undefined;\n      }\n\n      string = toString(string);\n      options = assignInWith({}, options, settings, customDefaultsAssignIn);\n      var imports = assignInWith({}, options.imports, settings.imports, customDefaultsAssignIn),\n          importsKeys = keys(imports),\n          importsValues = baseValues(imports, importsKeys);\n      var isEscaping,\n          isEvaluating,\n          index = 0,\n          interpolate = options.interpolate || reNoMatch,\n          source = \"__p += '\"; // Compile the regexp to match each delimiter.\n\n      var reDelimiters = RegExp((options.escape || reNoMatch).source + '|' + interpolate.source + '|' + (interpolate === reInterpolate ? reEsTemplate : reNoMatch).source + '|' + (options.evaluate || reNoMatch).source + '|$', 'g'); // Use a sourceURL for easier debugging.\n      // The sourceURL gets injected into the source that's eval-ed, so be careful\n      // with lookup (in case of e.g. prototype pollution), and strip newlines if any.\n      // A newline wouldn't be a valid sourceURL anyway, and it'd enable code injection.\n\n      var sourceURL = '//# sourceURL=' + (hasOwnProperty.call(options, 'sourceURL') ? (options.sourceURL + '').replace(/[\\r\\n]/g, ' ') : 'lodash.templateSources[' + ++templateCounter + ']') + '\\n';\n      string.replace(reDelimiters, function (match, escapeValue, interpolateValue, esTemplateValue, evaluateValue, offset) {\n        interpolateValue || (interpolateValue = esTemplateValue); // Escape characters that can't be included in string literals.\n\n        source += string.slice(index, offset).replace(reUnescapedString, escapeStringChar); // Replace delimiters with snippets.\n\n        if (escapeValue) {\n          isEscaping = true;\n          source += \"' +\\n__e(\" + escapeValue + \") +\\n'\";\n        }\n\n        if (evaluateValue) {\n          isEvaluating = true;\n          source += \"';\\n\" + evaluateValue + \";\\n__p += '\";\n        }\n\n        if (interpolateValue) {\n          source += \"' +\\n((__t = (\" + interpolateValue + \")) == null ? '' : __t) +\\n'\";\n        }\n\n        index = offset + match.length; // The JS engine embedded in Adobe products needs `match` returned in\n        // order to produce the correct `offset` value.\n\n        return match;\n      });\n      source += \"';\\n\"; // If `variable` is not specified wrap a with-statement around the generated\n      // code to add the data object to the top of the scope chain.\n      // Like with sourceURL, we take care to not check the option's prototype,\n      // as this configuration is a code injection vector.\n\n      var variable = hasOwnProperty.call(options, 'variable') && options.variable;\n\n      if (!variable) {\n        source = 'with (obj) {\\n' + source + '\\n}\\n';\n      } // Cleanup code by stripping empty strings.\n\n\n      source = (isEvaluating ? source.replace(reEmptyStringLeading, '') : source).replace(reEmptyStringMiddle, '$1').replace(reEmptyStringTrailing, '$1;'); // Frame code as the function body.\n\n      source = 'function(' + (variable || 'obj') + ') {\\n' + (variable ? '' : 'obj || (obj = {});\\n') + \"var __t, __p = ''\" + (isEscaping ? ', __e = _.escape' : '') + (isEvaluating ? ', __j = Array.prototype.join;\\n' + \"function print() { __p += __j.call(arguments, '') }\\n\" : ';\\n') + source + 'return __p\\n}';\n      var result = attempt(function () {\n        return Function(importsKeys, sourceURL + 'return ' + source).apply(undefined, importsValues);\n      }); // Provide the compiled function's source by its `toString` method or\n      // the `source` property as a convenience for inlining compiled templates.\n\n      result.source = source;\n\n      if (isError(result)) {\n        throw result;\n      }\n\n      return result;\n    }\n    /**\n     * Converts `string`, as a whole, to lower case just like\n     * [String#toLowerCase](https://mdn.io/toLowerCase).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the lower cased string.\n     * @example\n     *\n     * _.toLower('--Foo-Bar--');\n     * // => '--foo-bar--'\n     *\n     * _.toLower('fooBar');\n     * // => 'foobar'\n     *\n     * _.toLower('__FOO_BAR__');\n     * // => '__foo_bar__'\n     */\n\n\n    function toLower(value) {\n      return toString(value).toLowerCase();\n    }\n    /**\n     * Converts `string`, as a whole, to upper case just like\n     * [String#toUpperCase](https://mdn.io/toUpperCase).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the upper cased string.\n     * @example\n     *\n     * _.toUpper('--foo-bar--');\n     * // => '--FOO-BAR--'\n     *\n     * _.toUpper('fooBar');\n     * // => 'FOOBAR'\n     *\n     * _.toUpper('__foo_bar__');\n     * // => '__FOO_BAR__'\n     */\n\n\n    function toUpper(value) {\n      return toString(value).toUpperCase();\n    }\n    /**\n     * Removes leading and trailing whitespace or specified characters from `string`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to trim.\n     * @param {string} [chars=whitespace] The characters to trim.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {string} Returns the trimmed string.\n     * @example\n     *\n     * _.trim('  abc  ');\n     * // => 'abc'\n     *\n     * _.trim('-_-abc-_-', '_-');\n     * // => 'abc'\n     *\n     * _.map(['  foo  ', '  bar  '], _.trim);\n     * // => ['foo', 'bar']\n     */\n\n\n    function trim(string, chars, guard) {\n      string = toString(string);\n\n      if (string && (guard || chars === undefined)) {\n        return string.replace(reTrim, '');\n      }\n\n      if (!string || !(chars = baseToString(chars))) {\n        return string;\n      }\n\n      var strSymbols = stringToArray(string),\n          chrSymbols = stringToArray(chars),\n          start = charsStartIndex(strSymbols, chrSymbols),\n          end = charsEndIndex(strSymbols, chrSymbols) + 1;\n      return castSlice(strSymbols, start, end).join('');\n    }\n    /**\n     * Removes trailing whitespace or specified characters from `string`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to trim.\n     * @param {string} [chars=whitespace] The characters to trim.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {string} Returns the trimmed string.\n     * @example\n     *\n     * _.trimEnd('  abc  ');\n     * // => '  abc'\n     *\n     * _.trimEnd('-_-abc-_-', '_-');\n     * // => '-_-abc'\n     */\n\n\n    function trimEnd(string, chars, guard) {\n      string = toString(string);\n\n      if (string && (guard || chars === undefined)) {\n        return string.replace(reTrimEnd, '');\n      }\n\n      if (!string || !(chars = baseToString(chars))) {\n        return string;\n      }\n\n      var strSymbols = stringToArray(string),\n          end = charsEndIndex(strSymbols, stringToArray(chars)) + 1;\n      return castSlice(strSymbols, 0, end).join('');\n    }\n    /**\n     * Removes leading whitespace or specified characters from `string`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to trim.\n     * @param {string} [chars=whitespace] The characters to trim.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {string} Returns the trimmed string.\n     * @example\n     *\n     * _.trimStart('  abc  ');\n     * // => 'abc  '\n     *\n     * _.trimStart('-_-abc-_-', '_-');\n     * // => 'abc-_-'\n     */\n\n\n    function trimStart(string, chars, guard) {\n      string = toString(string);\n\n      if (string && (guard || chars === undefined)) {\n        return string.replace(reTrimStart, '');\n      }\n\n      if (!string || !(chars = baseToString(chars))) {\n        return string;\n      }\n\n      var strSymbols = stringToArray(string),\n          start = charsStartIndex(strSymbols, stringToArray(chars));\n      return castSlice(strSymbols, start).join('');\n    }\n    /**\n     * Truncates `string` if it's longer than the given maximum string length.\n     * The last characters of the truncated string are replaced with the omission\n     * string which defaults to \"...\".\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to truncate.\n     * @param {Object} [options={}] The options object.\n     * @param {number} [options.length=30] The maximum string length.\n     * @param {string} [options.omission='...'] The string to indicate text is omitted.\n     * @param {RegExp|string} [options.separator] The separator pattern to truncate to.\n     * @returns {string} Returns the truncated string.\n     * @example\n     *\n     * _.truncate('hi-diddly-ho there, neighborino');\n     * // => 'hi-diddly-ho there, neighbo...'\n     *\n     * _.truncate('hi-diddly-ho there, neighborino', {\n     *   'length': 24,\n     *   'separator': ' '\n     * });\n     * // => 'hi-diddly-ho there,...'\n     *\n     * _.truncate('hi-diddly-ho there, neighborino', {\n     *   'length': 24,\n     *   'separator': /,? +/\n     * });\n     * // => 'hi-diddly-ho there...'\n     *\n     * _.truncate('hi-diddly-ho there, neighborino', {\n     *   'omission': ' [...]'\n     * });\n     * // => 'hi-diddly-ho there, neig [...]'\n     */\n\n\n    function truncate(string, options) {\n      var length = DEFAULT_TRUNC_LENGTH,\n          omission = DEFAULT_TRUNC_OMISSION;\n\n      if (isObject(options)) {\n        var separator = 'separator' in options ? options.separator : separator;\n        length = 'length' in options ? toInteger(options.length) : length;\n        omission = 'omission' in options ? baseToString(options.omission) : omission;\n      }\n\n      string = toString(string);\n      var strLength = string.length;\n\n      if (hasUnicode(string)) {\n        var strSymbols = stringToArray(string);\n        strLength = strSymbols.length;\n      }\n\n      if (length >= strLength) {\n        return string;\n      }\n\n      var end = length - stringSize(omission);\n\n      if (end < 1) {\n        return omission;\n      }\n\n      var result = strSymbols ? castSlice(strSymbols, 0, end).join('') : string.slice(0, end);\n\n      if (separator === undefined) {\n        return result + omission;\n      }\n\n      if (strSymbols) {\n        end += result.length - end;\n      }\n\n      if (isRegExp(separator)) {\n        if (string.slice(end).search(separator)) {\n          var match,\n              substring = result;\n\n          if (!separator.global) {\n            separator = RegExp(separator.source, toString(reFlags.exec(separator)) + 'g');\n          }\n\n          separator.lastIndex = 0;\n\n          while (match = separator.exec(substring)) {\n            var newEnd = match.index;\n          }\n\n          result = result.slice(0, newEnd === undefined ? end : newEnd);\n        }\n      } else if (string.indexOf(baseToString(separator), end) != end) {\n        var index = result.lastIndexOf(separator);\n\n        if (index > -1) {\n          result = result.slice(0, index);\n        }\n      }\n\n      return result + omission;\n    }\n    /**\n     * The inverse of `_.escape`; this method converts the HTML entities\n     * `&amp;`, `&lt;`, `&gt;`, `&quot;`, and `&#39;` in `string` to\n     * their corresponding characters.\n     *\n     * **Note:** No other HTML entities are unescaped. To unescape additional\n     * HTML entities use a third-party library like [_he_](https://mths.be/he).\n     *\n     * @static\n     * @memberOf _\n     * @since 0.6.0\n     * @category String\n     * @param {string} [string=''] The string to unescape.\n     * @returns {string} Returns the unescaped string.\n     * @example\n     *\n     * _.unescape('fred, barney, &amp; pebbles');\n     * // => 'fred, barney, & pebbles'\n     */\n\n\n    function unescape(string) {\n      string = toString(string);\n      return string && reHasEscapedHtml.test(string) ? string.replace(reEscapedHtml, unescapeHtmlChar) : string;\n    }\n    /**\n     * Converts `string`, as space separated words, to upper case.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the upper cased string.\n     * @example\n     *\n     * _.upperCase('--foo-bar');\n     * // => 'FOO BAR'\n     *\n     * _.upperCase('fooBar');\n     * // => 'FOO BAR'\n     *\n     * _.upperCase('__foo_bar__');\n     * // => 'FOO BAR'\n     */\n\n\n    var upperCase = createCompounder(function (result, word, index) {\n      return result + (index ? ' ' : '') + word.toUpperCase();\n    });\n    /**\n     * Converts the first character of `string` to upper case.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category String\n     * @param {string} [string=''] The string to convert.\n     * @returns {string} Returns the converted string.\n     * @example\n     *\n     * _.upperFirst('fred');\n     * // => 'Fred'\n     *\n     * _.upperFirst('FRED');\n     * // => 'FRED'\n     */\n\n    var upperFirst = createCaseFirst('toUpperCase');\n    /**\n     * Splits `string` into an array of its words.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category String\n     * @param {string} [string=''] The string to inspect.\n     * @param {RegExp|string} [pattern] The pattern to match words.\n     * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n     * @returns {Array} Returns the words of `string`.\n     * @example\n     *\n     * _.words('fred, barney, & pebbles');\n     * // => ['fred', 'barney', 'pebbles']\n     *\n     * _.words('fred, barney, & pebbles', /[^, ]+/g);\n     * // => ['fred', 'barney', '&', 'pebbles']\n     */\n\n    function words(string, pattern, guard) {\n      string = toString(string);\n      pattern = guard ? undefined : pattern;\n\n      if (pattern === undefined) {\n        return hasUnicodeWord(string) ? unicodeWords(string) : asciiWords(string);\n      }\n\n      return string.match(pattern) || [];\n    }\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Attempts to invoke `func`, returning either the result or the caught error\n     * object. Any additional arguments are provided to `func` when it's invoked.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Util\n     * @param {Function} func The function to attempt.\n     * @param {...*} [args] The arguments to invoke `func` with.\n     * @returns {*} Returns the `func` result or error object.\n     * @example\n     *\n     * // Avoid throwing errors for invalid selectors.\n     * var elements = _.attempt(function(selector) {\n     *   return document.querySelectorAll(selector);\n     * }, '>_>');\n     *\n     * if (_.isError(elements)) {\n     *   elements = [];\n     * }\n     */\n\n\n    var attempt = baseRest(function (func, args) {\n      try {\n        return apply(func, undefined, args);\n      } catch (e) {\n        return isError(e) ? e : new Error(e);\n      }\n    });\n    /**\n     * Binds methods of an object to the object itself, overwriting the existing\n     * method.\n     *\n     * **Note:** This method doesn't set the \"length\" property of bound functions.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Util\n     * @param {Object} object The object to bind and assign the bound methods to.\n     * @param {...(string|string[])} methodNames The object method names to bind.\n     * @returns {Object} Returns `object`.\n     * @example\n     *\n     * var view = {\n     *   'label': 'docs',\n     *   'click': function() {\n     *     console.log('clicked ' + this.label);\n     *   }\n     * };\n     *\n     * _.bindAll(view, ['click']);\n     * jQuery(element).on('click', view.click);\n     * // => Logs 'clicked docs' when clicked.\n     */\n\n    var bindAll = flatRest(function (object, methodNames) {\n      arrayEach(methodNames, function (key) {\n        key = toKey(key);\n        baseAssignValue(object, key, bind(object[key], object));\n      });\n      return object;\n    });\n    /**\n     * Creates a function that iterates over `pairs` and invokes the corresponding\n     * function of the first predicate to return truthy. The predicate-function\n     * pairs are invoked with the `this` binding and arguments of the created\n     * function.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {Array} pairs The predicate-function pairs.\n     * @returns {Function} Returns the new composite function.\n     * @example\n     *\n     * var func = _.cond([\n     *   [_.matches({ 'a': 1 }),           _.constant('matches A')],\n     *   [_.conforms({ 'b': _.isNumber }), _.constant('matches B')],\n     *   [_.stubTrue,                      _.constant('no match')]\n     * ]);\n     *\n     * func({ 'a': 1, 'b': 2 });\n     * // => 'matches A'\n     *\n     * func({ 'a': 0, 'b': 1 });\n     * // => 'matches B'\n     *\n     * func({ 'a': '1', 'b': '2' });\n     * // => 'no match'\n     */\n\n    function cond(pairs) {\n      var length = pairs == null ? 0 : pairs.length,\n          toIteratee = getIteratee();\n      pairs = !length ? [] : arrayMap(pairs, function (pair) {\n        if (typeof pair[1] != 'function') {\n          throw new TypeError(FUNC_ERROR_TEXT);\n        }\n\n        return [toIteratee(pair[0]), pair[1]];\n      });\n      return baseRest(function (args) {\n        var index = -1;\n\n        while (++index < length) {\n          var pair = pairs[index];\n\n          if (apply(pair[0], this, args)) {\n            return apply(pair[1], this, args);\n          }\n        }\n      });\n    }\n    /**\n     * Creates a function that invokes the predicate properties of `source` with\n     * the corresponding property values of a given object, returning `true` if\n     * all predicates return truthy, else `false`.\n     *\n     * **Note:** The created function is equivalent to `_.conformsTo` with\n     * `source` partially applied.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {Object} source The object of property predicates to conform to.\n     * @returns {Function} Returns the new spec function.\n     * @example\n     *\n     * var objects = [\n     *   { 'a': 2, 'b': 1 },\n     *   { 'a': 1, 'b': 2 }\n     * ];\n     *\n     * _.filter(objects, _.conforms({ 'b': function(n) { return n > 1; } }));\n     * // => [{ 'a': 1, 'b': 2 }]\n     */\n\n\n    function conforms(source) {\n      return baseConforms(baseClone(source, CLONE_DEEP_FLAG));\n    }\n    /**\n     * Creates a function that returns `value`.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.4.0\n     * @category Util\n     * @param {*} value The value to return from the new function.\n     * @returns {Function} Returns the new constant function.\n     * @example\n     *\n     * var objects = _.times(2, _.constant({ 'a': 1 }));\n     *\n     * console.log(objects);\n     * // => [{ 'a': 1 }, { 'a': 1 }]\n     *\n     * console.log(objects[0] === objects[1]);\n     * // => true\n     */\n\n\n    function constant(value) {\n      return function () {\n        return value;\n      };\n    }\n    /**\n     * Checks `value` to determine whether a default value should be returned in\n     * its place. The `defaultValue` is returned if `value` is `NaN`, `null`,\n     * or `undefined`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.14.0\n     * @category Util\n     * @param {*} value The value to check.\n     * @param {*} defaultValue The default value.\n     * @returns {*} Returns the resolved value.\n     * @example\n     *\n     * _.defaultTo(1, 10);\n     * // => 1\n     *\n     * _.defaultTo(undefined, 10);\n     * // => 10\n     */\n\n\n    function defaultTo(value, defaultValue) {\n      return value == null || value !== value ? defaultValue : value;\n    }\n    /**\n     * Creates a function that returns the result of invoking the given functions\n     * with the `this` binding of the created function, where each successive\n     * invocation is supplied the return value of the previous.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Util\n     * @param {...(Function|Function[])} [funcs] The functions to invoke.\n     * @returns {Function} Returns the new composite function.\n     * @see _.flowRight\n     * @example\n     *\n     * function square(n) {\n     *   return n * n;\n     * }\n     *\n     * var addSquare = _.flow([_.add, square]);\n     * addSquare(1, 2);\n     * // => 9\n     */\n\n\n    var flow = createFlow();\n    /**\n     * This method is like `_.flow` except that it creates a function that\n     * invokes the given functions from right to left.\n     *\n     * @static\n     * @since 3.0.0\n     * @memberOf _\n     * @category Util\n     * @param {...(Function|Function[])} [funcs] The functions to invoke.\n     * @returns {Function} Returns the new composite function.\n     * @see _.flow\n     * @example\n     *\n     * function square(n) {\n     *   return n * n;\n     * }\n     *\n     * var addSquare = _.flowRight([square, _.add]);\n     * addSquare(1, 2);\n     * // => 9\n     */\n\n    var flowRight = createFlow(true);\n    /**\n     * This method returns the first argument it receives.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Util\n     * @param {*} value Any value.\n     * @returns {*} Returns `value`.\n     * @example\n     *\n     * var object = { 'a': 1 };\n     *\n     * console.log(_.identity(object) === object);\n     * // => true\n     */\n\n    function identity(value) {\n      return value;\n    }\n    /**\n     * Creates a function that invokes `func` with the arguments of the created\n     * function. If `func` is a property name, the created function returns the\n     * property value for a given element. If `func` is an array or object, the\n     * created function returns `true` for elements that contain the equivalent\n     * source properties, otherwise it returns `false`.\n     *\n     * @static\n     * @since 4.0.0\n     * @memberOf _\n     * @category Util\n     * @param {*} [func=_.identity] The value to convert to a callback.\n     * @returns {Function} Returns the callback.\n     * @example\n     *\n     * var users = [\n     *   { 'user': 'barney', 'age': 36, 'active': true },\n     *   { 'user': 'fred',   'age': 40, 'active': false }\n     * ];\n     *\n     * // The `_.matches` iteratee shorthand.\n     * _.filter(users, _.iteratee({ 'user': 'barney', 'active': true }));\n     * // => [{ 'user': 'barney', 'age': 36, 'active': true }]\n     *\n     * // The `_.matchesProperty` iteratee shorthand.\n     * _.filter(users, _.iteratee(['user', 'fred']));\n     * // => [{ 'user': 'fred', 'age': 40 }]\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.map(users, _.iteratee('user'));\n     * // => ['barney', 'fred']\n     *\n     * // Create custom iteratee shorthands.\n     * _.iteratee = _.wrap(_.iteratee, function(iteratee, func) {\n     *   return !_.isRegExp(func) ? iteratee(func) : function(string) {\n     *     return func.test(string);\n     *   };\n     * });\n     *\n     * _.filter(['abc', 'def'], /ef/);\n     * // => ['def']\n     */\n\n\n    function iteratee(func) {\n      return baseIteratee(typeof func == 'function' ? func : baseClone(func, CLONE_DEEP_FLAG));\n    }\n    /**\n     * Creates a function that performs a partial deep comparison between a given\n     * object and `source`, returning `true` if the given object has equivalent\n     * property values, else `false`.\n     *\n     * **Note:** The created function is equivalent to `_.isMatch` with `source`\n     * partially applied.\n     *\n     * Partial comparisons will match empty array and empty object `source`\n     * values against any array or object value, respectively. See `_.isEqual`\n     * for a list of supported value comparisons.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Util\n     * @param {Object} source The object of property values to match.\n     * @returns {Function} Returns the new spec function.\n     * @example\n     *\n     * var objects = [\n     *   { 'a': 1, 'b': 2, 'c': 3 },\n     *   { 'a': 4, 'b': 5, 'c': 6 }\n     * ];\n     *\n     * _.filter(objects, _.matches({ 'a': 4, 'c': 6 }));\n     * // => [{ 'a': 4, 'b': 5, 'c': 6 }]\n     */\n\n\n    function matches(source) {\n      return baseMatches(baseClone(source, CLONE_DEEP_FLAG));\n    }\n    /**\n     * Creates a function that performs a partial deep comparison between the\n     * value at `path` of a given object to `srcValue`, returning `true` if the\n     * object value is equivalent, else `false`.\n     *\n     * **Note:** Partial comparisons will match empty array and empty object\n     * `srcValue` values against any array or object value, respectively. See\n     * `_.isEqual` for a list of supported value comparisons.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.2.0\n     * @category Util\n     * @param {Array|string} path The path of the property to get.\n     * @param {*} srcValue The value to match.\n     * @returns {Function} Returns the new spec function.\n     * @example\n     *\n     * var objects = [\n     *   { 'a': 1, 'b': 2, 'c': 3 },\n     *   { 'a': 4, 'b': 5, 'c': 6 }\n     * ];\n     *\n     * _.find(objects, _.matchesProperty('a', 4));\n     * // => { 'a': 4, 'b': 5, 'c': 6 }\n     */\n\n\n    function matchesProperty(path, srcValue) {\n      return baseMatchesProperty(path, baseClone(srcValue, CLONE_DEEP_FLAG));\n    }\n    /**\n     * Creates a function that invokes the method at `path` of a given object.\n     * Any additional arguments are provided to the invoked method.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.7.0\n     * @category Util\n     * @param {Array|string} path The path of the method to invoke.\n     * @param {...*} [args] The arguments to invoke the method with.\n     * @returns {Function} Returns the new invoker function.\n     * @example\n     *\n     * var objects = [\n     *   { 'a': { 'b': _.constant(2) } },\n     *   { 'a': { 'b': _.constant(1) } }\n     * ];\n     *\n     * _.map(objects, _.method('a.b'));\n     * // => [2, 1]\n     *\n     * _.map(objects, _.method(['a', 'b']));\n     * // => [2, 1]\n     */\n\n\n    var method = baseRest(function (path, args) {\n      return function (object) {\n        return baseInvoke(object, path, args);\n      };\n    });\n    /**\n     * The opposite of `_.method`; this method creates a function that invokes\n     * the method at a given path of `object`. Any additional arguments are\n     * provided to the invoked method.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.7.0\n     * @category Util\n     * @param {Object} object The object to query.\n     * @param {...*} [args] The arguments to invoke the method with.\n     * @returns {Function} Returns the new invoker function.\n     * @example\n     *\n     * var array = _.times(3, _.constant),\n     *     object = { 'a': array, 'b': array, 'c': array };\n     *\n     * _.map(['a[2]', 'c[0]'], _.methodOf(object));\n     * // => [2, 0]\n     *\n     * _.map([['a', '2'], ['c', '0']], _.methodOf(object));\n     * // => [2, 0]\n     */\n\n    var methodOf = baseRest(function (object, args) {\n      return function (path) {\n        return baseInvoke(object, path, args);\n      };\n    });\n    /**\n     * Adds all own enumerable string keyed function properties of a source\n     * object to the destination object. If `object` is a function, then methods\n     * are added to its prototype as well.\n     *\n     * **Note:** Use `_.runInContext` to create a pristine `lodash` function to\n     * avoid conflicts caused by modifying the original.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Util\n     * @param {Function|Object} [object=lodash] The destination object.\n     * @param {Object} source The object of functions to add.\n     * @param {Object} [options={}] The options object.\n     * @param {boolean} [options.chain=true] Specify whether mixins are chainable.\n     * @returns {Function|Object} Returns `object`.\n     * @example\n     *\n     * function vowels(string) {\n     *   return _.filter(string, function(v) {\n     *     return /[aeiou]/i.test(v);\n     *   });\n     * }\n     *\n     * _.mixin({ 'vowels': vowels });\n     * _.vowels('fred');\n     * // => ['e']\n     *\n     * _('fred').vowels().value();\n     * // => ['e']\n     *\n     * _.mixin({ 'vowels': vowels }, { 'chain': false });\n     * _('fred').vowels();\n     * // => ['e']\n     */\n\n    function mixin(object, source, options) {\n      var props = keys(source),\n          methodNames = baseFunctions(source, props);\n\n      if (options == null && !(isObject(source) && (methodNames.length || !props.length))) {\n        options = source;\n        source = object;\n        object = this;\n        methodNames = baseFunctions(source, keys(source));\n      }\n\n      var chain = !(isObject(options) && 'chain' in options) || !!options.chain,\n          isFunc = isFunction(object);\n      arrayEach(methodNames, function (methodName) {\n        var func = source[methodName];\n        object[methodName] = func;\n\n        if (isFunc) {\n          object.prototype[methodName] = function () {\n            var chainAll = this.__chain__;\n\n            if (chain || chainAll) {\n              var result = object(this.__wrapped__),\n                  actions = result.__actions__ = copyArray(this.__actions__);\n              actions.push({\n                'func': func,\n                'args': arguments,\n                'thisArg': object\n              });\n              result.__chain__ = chainAll;\n              return result;\n            }\n\n            return func.apply(object, arrayPush([this.value()], arguments));\n          };\n        }\n      });\n      return object;\n    }\n    /**\n     * Reverts the `_` variable to its previous value and returns a reference to\n     * the `lodash` function.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Util\n     * @returns {Function} Returns the `lodash` function.\n     * @example\n     *\n     * var lodash = _.noConflict();\n     */\n\n\n    function noConflict() {\n      if (root._ === this) {\n        root._ = oldDash;\n      }\n\n      return this;\n    }\n    /**\n     * This method returns `undefined`.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.3.0\n     * @category Util\n     * @example\n     *\n     * _.times(2, _.noop);\n     * // => [undefined, undefined]\n     */\n\n\n    function noop() {} // No operation performed.\n\n    /**\n     * Creates a function that gets the argument at index `n`. If `n` is negative,\n     * the nth argument from the end is returned.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {number} [n=0] The index of the argument to return.\n     * @returns {Function} Returns the new pass-thru function.\n     * @example\n     *\n     * var func = _.nthArg(1);\n     * func('a', 'b', 'c', 'd');\n     * // => 'b'\n     *\n     * var func = _.nthArg(-2);\n     * func('a', 'b', 'c', 'd');\n     * // => 'c'\n     */\n\n\n    function nthArg(n) {\n      n = toInteger(n);\n      return baseRest(function (args) {\n        return baseNth(args, n);\n      });\n    }\n    /**\n     * Creates a function that invokes `iteratees` with the arguments it receives\n     * and returns their results.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {...(Function|Function[])} [iteratees=[_.identity]]\n     *  The iteratees to invoke.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var func = _.over([Math.max, Math.min]);\n     *\n     * func(1, 2, 3, 4);\n     * // => [4, 1]\n     */\n\n\n    var over = createOver(arrayMap);\n    /**\n     * Creates a function that checks if **all** of the `predicates` return\n     * truthy when invoked with the arguments it receives.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {...(Function|Function[])} [predicates=[_.identity]]\n     *  The predicates to check.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var func = _.overEvery([Boolean, isFinite]);\n     *\n     * func('1');\n     * // => true\n     *\n     * func(null);\n     * // => false\n     *\n     * func(NaN);\n     * // => false\n     */\n\n    var overEvery = createOver(arrayEvery);\n    /**\n     * Creates a function that checks if **any** of the `predicates` return\n     * truthy when invoked with the arguments it receives.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {...(Function|Function[])} [predicates=[_.identity]]\n     *  The predicates to check.\n     * @returns {Function} Returns the new function.\n     * @example\n     *\n     * var func = _.overSome([Boolean, isFinite]);\n     *\n     * func('1');\n     * // => true\n     *\n     * func(null);\n     * // => true\n     *\n     * func(NaN);\n     * // => false\n     */\n\n    var overSome = createOver(arraySome);\n    /**\n     * Creates a function that returns the value at `path` of a given object.\n     *\n     * @static\n     * @memberOf _\n     * @since 2.4.0\n     * @category Util\n     * @param {Array|string} path The path of the property to get.\n     * @returns {Function} Returns the new accessor function.\n     * @example\n     *\n     * var objects = [\n     *   { 'a': { 'b': 2 } },\n     *   { 'a': { 'b': 1 } }\n     * ];\n     *\n     * _.map(objects, _.property('a.b'));\n     * // => [2, 1]\n     *\n     * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b');\n     * // => [1, 2]\n     */\n\n    function property(path) {\n      return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path);\n    }\n    /**\n     * The opposite of `_.property`; this method creates a function that returns\n     * the value at a given path of `object`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.0.0\n     * @category Util\n     * @param {Object} object The object to query.\n     * @returns {Function} Returns the new accessor function.\n     * @example\n     *\n     * var array = [0, 1, 2],\n     *     object = { 'a': array, 'b': array, 'c': array };\n     *\n     * _.map(['a[2]', 'c[0]'], _.propertyOf(object));\n     * // => [2, 0]\n     *\n     * _.map([['a', '2'], ['c', '0']], _.propertyOf(object));\n     * // => [2, 0]\n     */\n\n\n    function propertyOf(object) {\n      return function (path) {\n        return object == null ? undefined : baseGet(object, path);\n      };\n    }\n    /**\n     * Creates an array of numbers (positive and/or negative) progressing from\n     * `start` up to, but not including, `end`. A step of `-1` is used if a negative\n     * `start` is specified without an `end` or `step`. If `end` is not specified,\n     * it's set to `start` with `start` then set to `0`.\n     *\n     * **Note:** JavaScript follows the IEEE-754 standard for resolving\n     * floating-point values which can produce unexpected results.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Util\n     * @param {number} [start=0] The start of the range.\n     * @param {number} end The end of the range.\n     * @param {number} [step=1] The value to increment or decrement by.\n     * @returns {Array} Returns the range of numbers.\n     * @see _.inRange, _.rangeRight\n     * @example\n     *\n     * _.range(4);\n     * // => [0, 1, 2, 3]\n     *\n     * _.range(-4);\n     * // => [0, -1, -2, -3]\n     *\n     * _.range(1, 5);\n     * // => [1, 2, 3, 4]\n     *\n     * _.range(0, 20, 5);\n     * // => [0, 5, 10, 15]\n     *\n     * _.range(0, -4, -1);\n     * // => [0, -1, -2, -3]\n     *\n     * _.range(1, 4, 0);\n     * // => [1, 1, 1]\n     *\n     * _.range(0);\n     * // => []\n     */\n\n\n    var range = createRange();\n    /**\n     * This method is like `_.range` except that it populates values in\n     * descending order.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {number} [start=0] The start of the range.\n     * @param {number} end The end of the range.\n     * @param {number} [step=1] The value to increment or decrement by.\n     * @returns {Array} Returns the range of numbers.\n     * @see _.inRange, _.range\n     * @example\n     *\n     * _.rangeRight(4);\n     * // => [3, 2, 1, 0]\n     *\n     * _.rangeRight(-4);\n     * // => [-3, -2, -1, 0]\n     *\n     * _.rangeRight(1, 5);\n     * // => [4, 3, 2, 1]\n     *\n     * _.rangeRight(0, 20, 5);\n     * // => [15, 10, 5, 0]\n     *\n     * _.rangeRight(0, -4, -1);\n     * // => [-3, -2, -1, 0]\n     *\n     * _.rangeRight(1, 4, 0);\n     * // => [1, 1, 1]\n     *\n     * _.rangeRight(0);\n     * // => []\n     */\n\n    var rangeRight = createRange(true);\n    /**\n     * This method returns a new empty array.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.13.0\n     * @category Util\n     * @returns {Array} Returns the new empty array.\n     * @example\n     *\n     * var arrays = _.times(2, _.stubArray);\n     *\n     * console.log(arrays);\n     * // => [[], []]\n     *\n     * console.log(arrays[0] === arrays[1]);\n     * // => false\n     */\n\n    function stubArray() {\n      return [];\n    }\n    /**\n     * This method returns `false`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.13.0\n     * @category Util\n     * @returns {boolean} Returns `false`.\n     * @example\n     *\n     * _.times(2, _.stubFalse);\n     * // => [false, false]\n     */\n\n\n    function stubFalse() {\n      return false;\n    }\n    /**\n     * This method returns a new empty object.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.13.0\n     * @category Util\n     * @returns {Object} Returns the new empty object.\n     * @example\n     *\n     * var objects = _.times(2, _.stubObject);\n     *\n     * console.log(objects);\n     * // => [{}, {}]\n     *\n     * console.log(objects[0] === objects[1]);\n     * // => false\n     */\n\n\n    function stubObject() {\n      return {};\n    }\n    /**\n     * This method returns an empty string.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.13.0\n     * @category Util\n     * @returns {string} Returns the empty string.\n     * @example\n     *\n     * _.times(2, _.stubString);\n     * // => ['', '']\n     */\n\n\n    function stubString() {\n      return '';\n    }\n    /**\n     * This method returns `true`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.13.0\n     * @category Util\n     * @returns {boolean} Returns `true`.\n     * @example\n     *\n     * _.times(2, _.stubTrue);\n     * // => [true, true]\n     */\n\n\n    function stubTrue() {\n      return true;\n    }\n    /**\n     * Invokes the iteratee `n` times, returning an array of the results of\n     * each invocation. The iteratee is invoked with one argument; (index).\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Util\n     * @param {number} n The number of times to invoke `iteratee`.\n     * @param {Function} [iteratee=_.identity] The function invoked per iteration.\n     * @returns {Array} Returns the array of results.\n     * @example\n     *\n     * _.times(3, String);\n     * // => ['0', '1', '2']\n     *\n     *  _.times(4, _.constant(0));\n     * // => [0, 0, 0, 0]\n     */\n\n\n    function times(n, iteratee) {\n      n = toInteger(n);\n\n      if (n < 1 || n > MAX_SAFE_INTEGER) {\n        return [];\n      }\n\n      var index = MAX_ARRAY_LENGTH,\n          length = nativeMin(n, MAX_ARRAY_LENGTH);\n      iteratee = getIteratee(iteratee);\n      n -= MAX_ARRAY_LENGTH;\n      var result = baseTimes(length, iteratee);\n\n      while (++index < n) {\n        iteratee(index);\n      }\n\n      return result;\n    }\n    /**\n     * Converts `value` to a property path array.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Util\n     * @param {*} value The value to convert.\n     * @returns {Array} Returns the new property path array.\n     * @example\n     *\n     * _.toPath('a.b.c');\n     * // => ['a', 'b', 'c']\n     *\n     * _.toPath('a[0].b.c');\n     * // => ['a', '0', 'b', 'c']\n     */\n\n\n    function toPath(value) {\n      if (isArray(value)) {\n        return arrayMap(value, toKey);\n      }\n\n      return isSymbol(value) ? [value] : copyArray(stringToPath(toString(value)));\n    }\n    /**\n     * Generates a unique ID. If `prefix` is given, the ID is appended to it.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Util\n     * @param {string} [prefix=''] The value to prefix the ID with.\n     * @returns {string} Returns the unique ID.\n     * @example\n     *\n     * _.uniqueId('contact_');\n     * // => 'contact_104'\n     *\n     * _.uniqueId();\n     * // => '105'\n     */\n\n\n    function uniqueId(prefix) {\n      var id = ++idCounter;\n      return toString(prefix) + id;\n    }\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * Adds two numbers.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.4.0\n     * @category Math\n     * @param {number} augend The first number in an addition.\n     * @param {number} addend The second number in an addition.\n     * @returns {number} Returns the total.\n     * @example\n     *\n     * _.add(6, 4);\n     * // => 10\n     */\n\n\n    var add = createMathOperation(function (augend, addend) {\n      return augend + addend;\n    }, 0);\n    /**\n     * Computes `number` rounded up to `precision`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.10.0\n     * @category Math\n     * @param {number} number The number to round up.\n     * @param {number} [precision=0] The precision to round up to.\n     * @returns {number} Returns the rounded up number.\n     * @example\n     *\n     * _.ceil(4.006);\n     * // => 5\n     *\n     * _.ceil(6.004, 2);\n     * // => 6.01\n     *\n     * _.ceil(6040, -2);\n     * // => 6100\n     */\n\n    var ceil = createRound('ceil');\n    /**\n     * Divide two numbers.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.7.0\n     * @category Math\n     * @param {number} dividend The first number in a division.\n     * @param {number} divisor The second number in a division.\n     * @returns {number} Returns the quotient.\n     * @example\n     *\n     * _.divide(6, 4);\n     * // => 1.5\n     */\n\n    var divide = createMathOperation(function (dividend, divisor) {\n      return dividend / divisor;\n    }, 1);\n    /**\n     * Computes `number` rounded down to `precision`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.10.0\n     * @category Math\n     * @param {number} number The number to round down.\n     * @param {number} [precision=0] The precision to round down to.\n     * @returns {number} Returns the rounded down number.\n     * @example\n     *\n     * _.floor(4.006);\n     * // => 4\n     *\n     * _.floor(0.046, 2);\n     * // => 0.04\n     *\n     * _.floor(4060, -2);\n     * // => 4000\n     */\n\n    var floor = createRound('floor');\n    /**\n     * Computes the maximum value of `array`. If `array` is empty or falsey,\n     * `undefined` is returned.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @returns {*} Returns the maximum value.\n     * @example\n     *\n     * _.max([4, 2, 8, 6]);\n     * // => 8\n     *\n     * _.max([]);\n     * // => undefined\n     */\n\n    function max(array) {\n      return array && array.length ? baseExtremum(array, identity, baseGt) : undefined;\n    }\n    /**\n     * This method is like `_.max` except that it accepts `iteratee` which is\n     * invoked for each element in `array` to generate the criterion by which\n     * the value is ranked. The iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {*} Returns the maximum value.\n     * @example\n     *\n     * var objects = [{ 'n': 1 }, { 'n': 2 }];\n     *\n     * _.maxBy(objects, function(o) { return o.n; });\n     * // => { 'n': 2 }\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.maxBy(objects, 'n');\n     * // => { 'n': 2 }\n     */\n\n\n    function maxBy(array, iteratee) {\n      return array && array.length ? baseExtremum(array, getIteratee(iteratee, 2), baseGt) : undefined;\n    }\n    /**\n     * Computes the mean of the values in `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @returns {number} Returns the mean.\n     * @example\n     *\n     * _.mean([4, 2, 8, 6]);\n     * // => 5\n     */\n\n\n    function mean(array) {\n      return baseMean(array, identity);\n    }\n    /**\n     * This method is like `_.mean` except that it accepts `iteratee` which is\n     * invoked for each element in `array` to generate the value to be averaged.\n     * The iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.7.0\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {number} Returns the mean.\n     * @example\n     *\n     * var objects = [{ 'n': 4 }, { 'n': 2 }, { 'n': 8 }, { 'n': 6 }];\n     *\n     * _.meanBy(objects, function(o) { return o.n; });\n     * // => 5\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.meanBy(objects, 'n');\n     * // => 5\n     */\n\n\n    function meanBy(array, iteratee) {\n      return baseMean(array, getIteratee(iteratee, 2));\n    }\n    /**\n     * Computes the minimum value of `array`. If `array` is empty or falsey,\n     * `undefined` is returned.\n     *\n     * @static\n     * @since 0.1.0\n     * @memberOf _\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @returns {*} Returns the minimum value.\n     * @example\n     *\n     * _.min([4, 2, 8, 6]);\n     * // => 2\n     *\n     * _.min([]);\n     * // => undefined\n     */\n\n\n    function min(array) {\n      return array && array.length ? baseExtremum(array, identity, baseLt) : undefined;\n    }\n    /**\n     * This method is like `_.min` except that it accepts `iteratee` which is\n     * invoked for each element in `array` to generate the criterion by which\n     * the value is ranked. The iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {*} Returns the minimum value.\n     * @example\n     *\n     * var objects = [{ 'n': 1 }, { 'n': 2 }];\n     *\n     * _.minBy(objects, function(o) { return o.n; });\n     * // => { 'n': 1 }\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.minBy(objects, 'n');\n     * // => { 'n': 1 }\n     */\n\n\n    function minBy(array, iteratee) {\n      return array && array.length ? baseExtremum(array, getIteratee(iteratee, 2), baseLt) : undefined;\n    }\n    /**\n     * Multiply two numbers.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.7.0\n     * @category Math\n     * @param {number} multiplier The first number in a multiplication.\n     * @param {number} multiplicand The second number in a multiplication.\n     * @returns {number} Returns the product.\n     * @example\n     *\n     * _.multiply(6, 4);\n     * // => 24\n     */\n\n\n    var multiply = createMathOperation(function (multiplier, multiplicand) {\n      return multiplier * multiplicand;\n    }, 1);\n    /**\n     * Computes `number` rounded to `precision`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.10.0\n     * @category Math\n     * @param {number} number The number to round.\n     * @param {number} [precision=0] The precision to round to.\n     * @returns {number} Returns the rounded number.\n     * @example\n     *\n     * _.round(4.006);\n     * // => 4\n     *\n     * _.round(4.006, 2);\n     * // => 4.01\n     *\n     * _.round(4060, -2);\n     * // => 4100\n     */\n\n    var round = createRound('round');\n    /**\n     * Subtract two numbers.\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Math\n     * @param {number} minuend The first number in a subtraction.\n     * @param {number} subtrahend The second number in a subtraction.\n     * @returns {number} Returns the difference.\n     * @example\n     *\n     * _.subtract(6, 4);\n     * // => 2\n     */\n\n    var subtract = createMathOperation(function (minuend, subtrahend) {\n      return minuend - subtrahend;\n    }, 0);\n    /**\n     * Computes the sum of the values in `array`.\n     *\n     * @static\n     * @memberOf _\n     * @since 3.4.0\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @returns {number} Returns the sum.\n     * @example\n     *\n     * _.sum([4, 2, 8, 6]);\n     * // => 20\n     */\n\n    function sum(array) {\n      return array && array.length ? baseSum(array, identity) : 0;\n    }\n    /**\n     * This method is like `_.sum` except that it accepts `iteratee` which is\n     * invoked for each element in `array` to generate the value to be summed.\n     * The iteratee is invoked with one argument: (value).\n     *\n     * @static\n     * @memberOf _\n     * @since 4.0.0\n     * @category Math\n     * @param {Array} array The array to iterate over.\n     * @param {Function} [iteratee=_.identity] The iteratee invoked per element.\n     * @returns {number} Returns the sum.\n     * @example\n     *\n     * var objects = [{ 'n': 4 }, { 'n': 2 }, { 'n': 8 }, { 'n': 6 }];\n     *\n     * _.sumBy(objects, function(o) { return o.n; });\n     * // => 20\n     *\n     * // The `_.property` iteratee shorthand.\n     * _.sumBy(objects, 'n');\n     * // => 20\n     */\n\n\n    function sumBy(array, iteratee) {\n      return array && array.length ? baseSum(array, getIteratee(iteratee, 2)) : 0;\n    }\n    /*------------------------------------------------------------------------*/\n    // Add methods that return wrapped values in chain sequences.\n\n\n    lodash.after = after;\n    lodash.ary = ary;\n    lodash.assign = assign;\n    lodash.assignIn = assignIn;\n    lodash.assignInWith = assignInWith;\n    lodash.assignWith = assignWith;\n    lodash.at = at;\n    lodash.before = before;\n    lodash.bind = bind;\n    lodash.bindAll = bindAll;\n    lodash.bindKey = bindKey;\n    lodash.castArray = castArray;\n    lodash.chain = chain;\n    lodash.chunk = chunk;\n    lodash.compact = compact;\n    lodash.concat = concat;\n    lodash.cond = cond;\n    lodash.conforms = conforms;\n    lodash.constant = constant;\n    lodash.countBy = countBy;\n    lodash.create = create;\n    lodash.curry = curry;\n    lodash.curryRight = curryRight;\n    lodash.debounce = debounce;\n    lodash.defaults = defaults;\n    lodash.defaultsDeep = defaultsDeep;\n    lodash.defer = defer;\n    lodash.delay = delay;\n    lodash.difference = difference;\n    lodash.differenceBy = differenceBy;\n    lodash.differenceWith = differenceWith;\n    lodash.drop = drop;\n    lodash.dropRight = dropRight;\n    lodash.dropRightWhile = dropRightWhile;\n    lodash.dropWhile = dropWhile;\n    lodash.fill = fill;\n    lodash.filter = filter;\n    lodash.flatMap = flatMap;\n    lodash.flatMapDeep = flatMapDeep;\n    lodash.flatMapDepth = flatMapDepth;\n    lodash.flatten = flatten;\n    lodash.flattenDeep = flattenDeep;\n    lodash.flattenDepth = flattenDepth;\n    lodash.flip = flip;\n    lodash.flow = flow;\n    lodash.flowRight = flowRight;\n    lodash.fromPairs = fromPairs;\n    lodash.functions = functions;\n    lodash.functionsIn = functionsIn;\n    lodash.groupBy = groupBy;\n    lodash.initial = initial;\n    lodash.intersection = intersection;\n    lodash.intersectionBy = intersectionBy;\n    lodash.intersectionWith = intersectionWith;\n    lodash.invert = invert;\n    lodash.invertBy = invertBy;\n    lodash.invokeMap = invokeMap;\n    lodash.iteratee = iteratee;\n    lodash.keyBy = keyBy;\n    lodash.keys = keys;\n    lodash.keysIn = keysIn;\n    lodash.map = map;\n    lodash.mapKeys = mapKeys;\n    lodash.mapValues = mapValues;\n    lodash.matches = matches;\n    lodash.matchesProperty = matchesProperty;\n    lodash.memoize = memoize;\n    lodash.merge = merge;\n    lodash.mergeWith = mergeWith;\n    lodash.method = method;\n    lodash.methodOf = methodOf;\n    lodash.mixin = mixin;\n    lodash.negate = negate;\n    lodash.nthArg = nthArg;\n    lodash.omit = omit;\n    lodash.omitBy = omitBy;\n    lodash.once = once;\n    lodash.orderBy = orderBy;\n    lodash.over = over;\n    lodash.overArgs = overArgs;\n    lodash.overEvery = overEvery;\n    lodash.overSome = overSome;\n    lodash.partial = partial;\n    lodash.partialRight = partialRight;\n    lodash.partition = partition;\n    lodash.pick = pick;\n    lodash.pickBy = pickBy;\n    lodash.property = property;\n    lodash.propertyOf = propertyOf;\n    lodash.pull = pull;\n    lodash.pullAll = pullAll;\n    lodash.pullAllBy = pullAllBy;\n    lodash.pullAllWith = pullAllWith;\n    lodash.pullAt = pullAt;\n    lodash.range = range;\n    lodash.rangeRight = rangeRight;\n    lodash.rearg = rearg;\n    lodash.reject = reject;\n    lodash.remove = remove;\n    lodash.rest = rest;\n    lodash.reverse = reverse;\n    lodash.sampleSize = sampleSize;\n    lodash.set = set;\n    lodash.setWith = setWith;\n    lodash.shuffle = shuffle;\n    lodash.slice = slice;\n    lodash.sortBy = sortBy;\n    lodash.sortedUniq = sortedUniq;\n    lodash.sortedUniqBy = sortedUniqBy;\n    lodash.split = split;\n    lodash.spread = spread;\n    lodash.tail = tail;\n    lodash.take = take;\n    lodash.takeRight = takeRight;\n    lodash.takeRightWhile = takeRightWhile;\n    lodash.takeWhile = takeWhile;\n    lodash.tap = tap;\n    lodash.throttle = throttle;\n    lodash.thru = thru;\n    lodash.toArray = toArray;\n    lodash.toPairs = toPairs;\n    lodash.toPairsIn = toPairsIn;\n    lodash.toPath = toPath;\n    lodash.toPlainObject = toPlainObject;\n    lodash.transform = transform;\n    lodash.unary = unary;\n    lodash.union = union;\n    lodash.unionBy = unionBy;\n    lodash.unionWith = unionWith;\n    lodash.uniq = uniq;\n    lodash.uniqBy = uniqBy;\n    lodash.uniqWith = uniqWith;\n    lodash.unset = unset;\n    lodash.unzip = unzip;\n    lodash.unzipWith = unzipWith;\n    lodash.update = update;\n    lodash.updateWith = updateWith;\n    lodash.values = values;\n    lodash.valuesIn = valuesIn;\n    lodash.without = without;\n    lodash.words = words;\n    lodash.wrap = wrap;\n    lodash.xor = xor;\n    lodash.xorBy = xorBy;\n    lodash.xorWith = xorWith;\n    lodash.zip = zip;\n    lodash.zipObject = zipObject;\n    lodash.zipObjectDeep = zipObjectDeep;\n    lodash.zipWith = zipWith; // Add aliases.\n\n    lodash.entries = toPairs;\n    lodash.entriesIn = toPairsIn;\n    lodash.extend = assignIn;\n    lodash.extendWith = assignInWith; // Add methods to `lodash.prototype`.\n\n    mixin(lodash, lodash);\n    /*------------------------------------------------------------------------*/\n    // Add methods that return unwrapped values in chain sequences.\n\n    lodash.add = add;\n    lodash.attempt = attempt;\n    lodash.camelCase = camelCase;\n    lodash.capitalize = capitalize;\n    lodash.ceil = ceil;\n    lodash.clamp = clamp;\n    lodash.clone = clone;\n    lodash.cloneDeep = cloneDeep;\n    lodash.cloneDeepWith = cloneDeepWith;\n    lodash.cloneWith = cloneWith;\n    lodash.conformsTo = conformsTo;\n    lodash.deburr = deburr;\n    lodash.defaultTo = defaultTo;\n    lodash.divide = divide;\n    lodash.endsWith = endsWith;\n    lodash.eq = eq;\n    lodash.escape = escape;\n    lodash.escapeRegExp = escapeRegExp;\n    lodash.every = every;\n    lodash.find = find;\n    lodash.findIndex = findIndex;\n    lodash.findKey = findKey;\n    lodash.findLast = findLast;\n    lodash.findLastIndex = findLastIndex;\n    lodash.findLastKey = findLastKey;\n    lodash.floor = floor;\n    lodash.forEach = forEach;\n    lodash.forEachRight = forEachRight;\n    lodash.forIn = forIn;\n    lodash.forInRight = forInRight;\n    lodash.forOwn = forOwn;\n    lodash.forOwnRight = forOwnRight;\n    lodash.get = get;\n    lodash.gt = gt;\n    lodash.gte = gte;\n    lodash.has = has;\n    lodash.hasIn = hasIn;\n    lodash.head = head;\n    lodash.identity = identity;\n    lodash.includes = includes;\n    lodash.indexOf = indexOf;\n    lodash.inRange = inRange;\n    lodash.invoke = invoke;\n    lodash.isArguments = isArguments;\n    lodash.isArray = isArray;\n    lodash.isArrayBuffer = isArrayBuffer;\n    lodash.isArrayLike = isArrayLike;\n    lodash.isArrayLikeObject = isArrayLikeObject;\n    lodash.isBoolean = isBoolean;\n    lodash.isBuffer = isBuffer;\n    lodash.isDate = isDate;\n    lodash.isElement = isElement;\n    lodash.isEmpty = isEmpty;\n    lodash.isEqual = isEqual;\n    lodash.isEqualWith = isEqualWith;\n    lodash.isError = isError;\n    lodash.isFinite = isFinite;\n    lodash.isFunction = isFunction;\n    lodash.isInteger = isInteger;\n    lodash.isLength = isLength;\n    lodash.isMap = isMap;\n    lodash.isMatch = isMatch;\n    lodash.isMatchWith = isMatchWith;\n    lodash.isNaN = isNaN;\n    lodash.isNative = isNative;\n    lodash.isNil = isNil;\n    lodash.isNull = isNull;\n    lodash.isNumber = isNumber;\n    lodash.isObject = isObject;\n    lodash.isObjectLike = isObjectLike;\n    lodash.isPlainObject = isPlainObject;\n    lodash.isRegExp = isRegExp;\n    lodash.isSafeInteger = isSafeInteger;\n    lodash.isSet = isSet;\n    lodash.isString = isString;\n    lodash.isSymbol = isSymbol;\n    lodash.isTypedArray = isTypedArray;\n    lodash.isUndefined = isUndefined;\n    lodash.isWeakMap = isWeakMap;\n    lodash.isWeakSet = isWeakSet;\n    lodash.join = join;\n    lodash.kebabCase = kebabCase;\n    lodash.last = last;\n    lodash.lastIndexOf = lastIndexOf;\n    lodash.lowerCase = lowerCase;\n    lodash.lowerFirst = lowerFirst;\n    lodash.lt = lt;\n    lodash.lte = lte;\n    lodash.max = max;\n    lodash.maxBy = maxBy;\n    lodash.mean = mean;\n    lodash.meanBy = meanBy;\n    lodash.min = min;\n    lodash.minBy = minBy;\n    lodash.stubArray = stubArray;\n    lodash.stubFalse = stubFalse;\n    lodash.stubObject = stubObject;\n    lodash.stubString = stubString;\n    lodash.stubTrue = stubTrue;\n    lodash.multiply = multiply;\n    lodash.nth = nth;\n    lodash.noConflict = noConflict;\n    lodash.noop = noop;\n    lodash.now = now;\n    lodash.pad = pad;\n    lodash.padEnd = padEnd;\n    lodash.padStart = padStart;\n    lodash.parseInt = parseInt;\n    lodash.random = random;\n    lodash.reduce = reduce;\n    lodash.reduceRight = reduceRight;\n    lodash.repeat = repeat;\n    lodash.replace = replace;\n    lodash.result = result;\n    lodash.round = round;\n    lodash.runInContext = runInContext;\n    lodash.sample = sample;\n    lodash.size = size;\n    lodash.snakeCase = snakeCase;\n    lodash.some = some;\n    lodash.sortedIndex = sortedIndex;\n    lodash.sortedIndexBy = sortedIndexBy;\n    lodash.sortedIndexOf = sortedIndexOf;\n    lodash.sortedLastIndex = sortedLastIndex;\n    lodash.sortedLastIndexBy = sortedLastIndexBy;\n    lodash.sortedLastIndexOf = sortedLastIndexOf;\n    lodash.startCase = startCase;\n    lodash.startsWith = startsWith;\n    lodash.subtract = subtract;\n    lodash.sum = sum;\n    lodash.sumBy = sumBy;\n    lodash.template = template;\n    lodash.times = times;\n    lodash.toFinite = toFinite;\n    lodash.toInteger = toInteger;\n    lodash.toLength = toLength;\n    lodash.toLower = toLower;\n    lodash.toNumber = toNumber;\n    lodash.toSafeInteger = toSafeInteger;\n    lodash.toString = toString;\n    lodash.toUpper = toUpper;\n    lodash.trim = trim;\n    lodash.trimEnd = trimEnd;\n    lodash.trimStart = trimStart;\n    lodash.truncate = truncate;\n    lodash.unescape = unescape;\n    lodash.uniqueId = uniqueId;\n    lodash.upperCase = upperCase;\n    lodash.upperFirst = upperFirst; // Add aliases.\n\n    lodash.each = forEach;\n    lodash.eachRight = forEachRight;\n    lodash.first = head;\n    mixin(lodash, function () {\n      var source = {};\n      baseForOwn(lodash, function (func, methodName) {\n        if (!hasOwnProperty.call(lodash.prototype, methodName)) {\n          source[methodName] = func;\n        }\n      });\n      return source;\n    }(), {\n      'chain': false\n    });\n    /*------------------------------------------------------------------------*/\n\n    /**\n     * The semantic version number.\n     *\n     * @static\n     * @memberOf _\n     * @type {string}\n     */\n\n    lodash.VERSION = VERSION; // Assign default placeholders.\n\n    arrayEach(['bind', 'bindKey', 'curry', 'curryRight', 'partial', 'partialRight'], function (methodName) {\n      lodash[methodName].placeholder = lodash;\n    }); // Add `LazyWrapper` methods for `_.drop` and `_.take` variants.\n\n    arrayEach(['drop', 'take'], function (methodName, index) {\n      LazyWrapper.prototype[methodName] = function (n) {\n        n = n === undefined ? 1 : nativeMax(toInteger(n), 0);\n        var result = this.__filtered__ && !index ? new LazyWrapper(this) : this.clone();\n\n        if (result.__filtered__) {\n          result.__takeCount__ = nativeMin(n, result.__takeCount__);\n        } else {\n          result.__views__.push({\n            'size': nativeMin(n, MAX_ARRAY_LENGTH),\n            'type': methodName + (result.__dir__ < 0 ? 'Right' : '')\n          });\n        }\n\n        return result;\n      };\n\n      LazyWrapper.prototype[methodName + 'Right'] = function (n) {\n        return this.reverse()[methodName](n).reverse();\n      };\n    }); // Add `LazyWrapper` methods that accept an `iteratee` value.\n\n    arrayEach(['filter', 'map', 'takeWhile'], function (methodName, index) {\n      var type = index + 1,\n          isFilter = type == LAZY_FILTER_FLAG || type == LAZY_WHILE_FLAG;\n\n      LazyWrapper.prototype[methodName] = function (iteratee) {\n        var result = this.clone();\n\n        result.__iteratees__.push({\n          'iteratee': getIteratee(iteratee, 3),\n          'type': type\n        });\n\n        result.__filtered__ = result.__filtered__ || isFilter;\n        return result;\n      };\n    }); // Add `LazyWrapper` methods for `_.head` and `_.last`.\n\n    arrayEach(['head', 'last'], function (methodName, index) {\n      var takeName = 'take' + (index ? 'Right' : '');\n\n      LazyWrapper.prototype[methodName] = function () {\n        return this[takeName](1).value()[0];\n      };\n    }); // Add `LazyWrapper` methods for `_.initial` and `_.tail`.\n\n    arrayEach(['initial', 'tail'], function (methodName, index) {\n      var dropName = 'drop' + (index ? '' : 'Right');\n\n      LazyWrapper.prototype[methodName] = function () {\n        return this.__filtered__ ? new LazyWrapper(this) : this[dropName](1);\n      };\n    });\n\n    LazyWrapper.prototype.compact = function () {\n      return this.filter(identity);\n    };\n\n    LazyWrapper.prototype.find = function (predicate) {\n      return this.filter(predicate).head();\n    };\n\n    LazyWrapper.prototype.findLast = function (predicate) {\n      return this.reverse().find(predicate);\n    };\n\n    LazyWrapper.prototype.invokeMap = baseRest(function (path, args) {\n      if (typeof path == 'function') {\n        return new LazyWrapper(this);\n      }\n\n      return this.map(function (value) {\n        return baseInvoke(value, path, args);\n      });\n    });\n\n    LazyWrapper.prototype.reject = function (predicate) {\n      return this.filter(negate(getIteratee(predicate)));\n    };\n\n    LazyWrapper.prototype.slice = function (start, end) {\n      start = toInteger(start);\n      var result = this;\n\n      if (result.__filtered__ && (start > 0 || end < 0)) {\n        return new LazyWrapper(result);\n      }\n\n      if (start < 0) {\n        result = result.takeRight(-start);\n      } else if (start) {\n        result = result.drop(start);\n      }\n\n      if (end !== undefined) {\n        end = toInteger(end);\n        result = end < 0 ? result.dropRight(-end) : result.take(end - start);\n      }\n\n      return result;\n    };\n\n    LazyWrapper.prototype.takeRightWhile = function (predicate) {\n      return this.reverse().takeWhile(predicate).reverse();\n    };\n\n    LazyWrapper.prototype.toArray = function () {\n      return this.take(MAX_ARRAY_LENGTH);\n    }; // Add `LazyWrapper` methods to `lodash.prototype`.\n\n\n    baseForOwn(LazyWrapper.prototype, function (func, methodName) {\n      var checkIteratee = /^(?:filter|find|map|reject)|While$/.test(methodName),\n          isTaker = /^(?:head|last)$/.test(methodName),\n          lodashFunc = lodash[isTaker ? 'take' + (methodName == 'last' ? 'Right' : '') : methodName],\n          retUnwrapped = isTaker || /^find/.test(methodName);\n\n      if (!lodashFunc) {\n        return;\n      }\n\n      lodash.prototype[methodName] = function () {\n        var value = this.__wrapped__,\n            args = isTaker ? [1] : arguments,\n            isLazy = value instanceof LazyWrapper,\n            iteratee = args[0],\n            useLazy = isLazy || isArray(value);\n\n        var interceptor = function interceptor(value) {\n          var result = lodashFunc.apply(lodash, arrayPush([value], args));\n          return isTaker && chainAll ? result[0] : result;\n        };\n\n        if (useLazy && checkIteratee && typeof iteratee == 'function' && iteratee.length != 1) {\n          // Avoid lazy use if the iteratee has a \"length\" value other than `1`.\n          isLazy = useLazy = false;\n        }\n\n        var chainAll = this.__chain__,\n            isHybrid = !!this.__actions__.length,\n            isUnwrapped = retUnwrapped && !chainAll,\n            onlyLazy = isLazy && !isHybrid;\n\n        if (!retUnwrapped && useLazy) {\n          value = onlyLazy ? value : new LazyWrapper(this);\n          var result = func.apply(value, args);\n\n          result.__actions__.push({\n            'func': thru,\n            'args': [interceptor],\n            'thisArg': undefined\n          });\n\n          return new LodashWrapper(result, chainAll);\n        }\n\n        if (isUnwrapped && onlyLazy) {\n          return func.apply(this, args);\n        }\n\n        result = this.thru(interceptor);\n        return isUnwrapped ? isTaker ? result.value()[0] : result.value() : result;\n      };\n    }); // Add `Array` methods to `lodash.prototype`.\n\n    arrayEach(['pop', 'push', 'shift', 'sort', 'splice', 'unshift'], function (methodName) {\n      var func = arrayProto[methodName],\n          chainName = /^(?:push|sort|unshift)$/.test(methodName) ? 'tap' : 'thru',\n          retUnwrapped = /^(?:pop|shift)$/.test(methodName);\n\n      lodash.prototype[methodName] = function () {\n        var args = arguments;\n\n        if (retUnwrapped && !this.__chain__) {\n          var value = this.value();\n          return func.apply(isArray(value) ? value : [], args);\n        }\n\n        return this[chainName](function (value) {\n          return func.apply(isArray(value) ? value : [], args);\n        });\n      };\n    }); // Map minified method names to their real names.\n\n    baseForOwn(LazyWrapper.prototype, function (func, methodName) {\n      var lodashFunc = lodash[methodName];\n\n      if (lodashFunc) {\n        var key = lodashFunc.name + '';\n\n        if (!hasOwnProperty.call(realNames, key)) {\n          realNames[key] = [];\n        }\n\n        realNames[key].push({\n          'name': methodName,\n          'func': lodashFunc\n        });\n      }\n    });\n    realNames[createHybrid(undefined, WRAP_BIND_KEY_FLAG).name] = [{\n      'name': 'wrapper',\n      'func': undefined\n    }]; // Add methods to `LazyWrapper`.\n\n    LazyWrapper.prototype.clone = lazyClone;\n    LazyWrapper.prototype.reverse = lazyReverse;\n    LazyWrapper.prototype.value = lazyValue; // Add chain sequence methods to the `lodash` wrapper.\n\n    lodash.prototype.at = wrapperAt;\n    lodash.prototype.chain = wrapperChain;\n    lodash.prototype.commit = wrapperCommit;\n    lodash.prototype.next = wrapperNext;\n    lodash.prototype.plant = wrapperPlant;\n    lodash.prototype.reverse = wrapperReverse;\n    lodash.prototype.toJSON = lodash.prototype.valueOf = lodash.prototype.value = wrapperValue; // Add lazy aliases.\n\n    lodash.prototype.first = lodash.prototype.head;\n\n    if (symIterator) {\n      lodash.prototype[symIterator] = wrapperToIterator;\n    }\n\n    return lodash;\n  };\n  /*--------------------------------------------------------------------------*/\n  // Export lodash.\n\n\n  var _ = runInContext(); // Some AMD build optimizers, like r.js, check for condition patterns like:\n\n\n  if (typeof define == 'function' && _typeof(define.amd) == 'object' && define.amd) {\n    // Expose Lodash on the global object to prevent errors when Lodash is\n    // loaded by a script tag in the presence of an AMD loader.\n    // See http://requirejs.org/docs/errors.html#mismatch for more details.\n    // Use `_.noConflict` to remove Lodash from the global object.\n    root._ = _; // Define as an anonymous module so, through path mapping, it can be\n    // referenced as the \"underscore\" module.\n\n    define(function () {\n      return _;\n    });\n  } // Check for `exports` after `define` in case a build optimizer adds it.\n  else if (freeModule) {\n      // Export for Node.js.\n      (freeModule.exports = _)._ = _; // Export for CommonJS support.\n\n      freeExports._ = _;\n    } else {\n      // Export to the global object.\n      root._ = _;\n    }\n}).call(this);","var g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || new Function(\"return this\")();\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === \"object\") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n","'use strict';\n/**\n * A worker that does nothing but passing chunks to the next one. This is like\n * a nodejs stream but with some differences. On the good side :\n * - it works on IE 6-9 without any issue / polyfill\n * - it weights less than the full dependencies bundled with browserify\n * - it forwards errors (no need to declare an error handler EVERYWHERE)\n *\n * A chunk is an object with 2 attributes : `meta` and `data`. The former is an\n * object containing anything (`percent` for example), see each worker for more\n * details. The latter is the real data (String, Uint8Array, etc).\n *\n * @constructor\n * @param {String} name the name of the stream (mainly used for debugging purposes)\n */\n\nfunction GenericWorker(name) {\n  // the name of the worker\n  this.name = name || \"default\"; // an object containing metadata about the workers chain\n\n  this.streamInfo = {}; // an error which happened when the worker was paused\n\n  this.generatedError = null; // an object containing metadata to be merged by this worker into the general metadata\n\n  this.extraStreamInfo = {}; // true if the stream is paused (and should not do anything), false otherwise\n\n  this.isPaused = true; // true if the stream is finished (and should not do anything), false otherwise\n\n  this.isFinished = false; // true if the stream is locked to prevent further structure updates (pipe), false otherwise\n\n  this.isLocked = false; // the event listeners\n\n  this._listeners = {\n    'data': [],\n    'end': [],\n    'error': []\n  }; // the previous worker, if any\n\n  this.previous = null;\n}\n\nGenericWorker.prototype = {\n  /**\n   * Push a chunk to the next workers.\n   * @param {Object} chunk the chunk to push\n   */\n  push: function push(chunk) {\n    this.emit(\"data\", chunk);\n  },\n\n  /**\n   * End the stream.\n   * @return {Boolean} true if this call ended the worker, false otherwise.\n   */\n  end: function end() {\n    if (this.isFinished) {\n      return false;\n    }\n\n    this.flush();\n\n    try {\n      this.emit(\"end\");\n      this.cleanUp();\n      this.isFinished = true;\n    } catch (e) {\n      this.emit(\"error\", e);\n    }\n\n    return true;\n  },\n\n  /**\n   * End the stream with an error.\n   * @param {Error} e the error which caused the premature end.\n   * @return {Boolean} true if this call ended the worker with an error, false otherwise.\n   */\n  error: function error(e) {\n    if (this.isFinished) {\n      return false;\n    }\n\n    if (this.isPaused) {\n      this.generatedError = e;\n    } else {\n      this.isFinished = true;\n      this.emit(\"error\", e); // in the workers chain exploded in the middle of the chain,\n      // the error event will go downward but we also need to notify\n      // workers upward that there has been an error.\n\n      if (this.previous) {\n        this.previous.error(e);\n      }\n\n      this.cleanUp();\n    }\n\n    return true;\n  },\n\n  /**\n   * Add a callback on an event.\n   * @param {String} name the name of the event (data, end, error)\n   * @param {Function} listener the function to call when the event is triggered\n   * @return {GenericWorker} the current object for chainability\n   */\n  on: function on(name, listener) {\n    this._listeners[name].push(listener);\n\n    return this;\n  },\n\n  /**\n   * Clean any references when a worker is ending.\n   */\n  cleanUp: function cleanUp() {\n    this.streamInfo = this.generatedError = this.extraStreamInfo = null;\n    this._listeners = [];\n  },\n\n  /**\n   * Trigger an event. This will call registered callback with the provided arg.\n   * @param {String} name the name of the event (data, end, error)\n   * @param {Object} arg the argument to call the callback with.\n   */\n  emit: function emit(name, arg) {\n    if (this._listeners[name]) {\n      for (var i = 0; i < this._listeners[name].length; i++) {\n        this._listeners[name][i].call(this, arg);\n      }\n    }\n  },\n\n  /**\n   * Chain a worker with an other.\n   * @param {Worker} next the worker receiving events from the current one.\n   * @return {worker} the next worker for chainability\n   */\n  pipe: function pipe(next) {\n    return next.registerPrevious(this);\n  },\n\n  /**\n   * Same as `pipe` in the other direction.\n   * Using an API with `pipe(next)` is very easy.\n   * Implementing the API with the point of view of the next one registering\n   * a source is easier, see the ZipFileWorker.\n   * @param {Worker} previous the previous worker, sending events to this one\n   * @return {Worker} the current worker for chainability\n   */\n  registerPrevious: function registerPrevious(previous) {\n    if (this.isLocked) {\n      throw new Error(\"The stream '\" + this + \"' has already been used.\");\n    } // sharing the streamInfo...\n\n\n    this.streamInfo = previous.streamInfo; // ... and adding our own bits\n\n    this.mergeStreamInfo();\n    this.previous = previous;\n    var self = this;\n    previous.on('data', function (chunk) {\n      self.processChunk(chunk);\n    });\n    previous.on('end', function () {\n      self.end();\n    });\n    previous.on('error', function (e) {\n      self.error(e);\n    });\n    return this;\n  },\n\n  /**\n   * Pause the stream so it doesn't send events anymore.\n   * @return {Boolean} true if this call paused the worker, false otherwise.\n   */\n  pause: function pause() {\n    if (this.isPaused || this.isFinished) {\n      return false;\n    }\n\n    this.isPaused = true;\n\n    if (this.previous) {\n      this.previous.pause();\n    }\n\n    return true;\n  },\n\n  /**\n   * Resume a paused stream.\n   * @return {Boolean} true if this call resumed the worker, false otherwise.\n   */\n  resume: function resume() {\n    if (!this.isPaused || this.isFinished) {\n      return false;\n    }\n\n    this.isPaused = false; // if true, the worker tried to resume but failed\n\n    var withError = false;\n\n    if (this.generatedError) {\n      this.error(this.generatedError);\n      withError = true;\n    }\n\n    if (this.previous) {\n      this.previous.resume();\n    }\n\n    return !withError;\n  },\n\n  /**\n   * Flush any remaining bytes as the stream is ending.\n   */\n  flush: function flush() {},\n\n  /**\n   * Process a chunk. This is usually the method overridden.\n   * @param {Object} chunk the chunk to process.\n   */\n  processChunk: function processChunk(chunk) {\n    this.push(chunk);\n  },\n\n  /**\n   * Add a key/value to be added in the workers chain streamInfo once activated.\n   * @param {String} key the key to use\n   * @param {Object} value the associated value\n   * @return {Worker} the current worker for chainability\n   */\n  withStreamInfo: function withStreamInfo(key, value) {\n    this.extraStreamInfo[key] = value;\n    this.mergeStreamInfo();\n    return this;\n  },\n\n  /**\n   * Merge this worker's streamInfo into the chain's streamInfo.\n   */\n  mergeStreamInfo: function mergeStreamInfo() {\n    for (var key in this.extraStreamInfo) {\n      if (!this.extraStreamInfo.hasOwnProperty(key)) {\n        continue;\n      }\n\n      this.streamInfo[key] = this.extraStreamInfo[key];\n    }\n  },\n\n  /**\n   * Lock the stream to prevent further updates on the workers chain.\n   * After calling this method, all calls to pipe will fail.\n   */\n  lock: function lock() {\n    if (this.isLocked) {\n      throw new Error(\"The stream '\" + this + \"' has already been used.\");\n    }\n\n    this.isLocked = true;\n\n    if (this.previous) {\n      this.previous.lock();\n    }\n  },\n\n  /**\n   *\n   * Pretty print the workers chain.\n   */\n  toString: function toString() {\n    var me = \"Worker \" + this.name;\n\n    if (this.previous) {\n      return this.previous + \" -> \" + me;\n    } else {\n      return me;\n    }\n  }\n};\nmodule.exports = GenericWorker;","module.exports = assert;\n\nfunction assert(val, msg) {\n  if (!val) throw new Error(msg || 'Assertion failed');\n}\n\nassert.equal = function assertEqual(l, r, msg) {\n  if (l != r) throw new Error(msg || 'Assertion failed: ' + l + ' != ' + r);\n};","'use strict';\n\nvar utils = exports;\n\nvar BN = require('bn.js');\n\nvar minAssert = require('minimalistic-assert');\n\nvar minUtils = require('minimalistic-crypto-utils');\n\nutils.assert = minAssert;\nutils.toArray = minUtils.toArray;\nutils.zero2 = minUtils.zero2;\nutils.toHex = minUtils.toHex;\nutils.encode = minUtils.encode; // Represent num in a w-NAF form\n\nfunction getNAF(num, w) {\n  var naf = [];\n  var ws = 1 << w + 1;\n  var k = num.clone();\n\n  while (k.cmpn(1) >= 0) {\n    var z;\n\n    if (k.isOdd()) {\n      var mod = k.andln(ws - 1);\n      if (mod > (ws >> 1) - 1) z = (ws >> 1) - mod;else z = mod;\n      k.isubn(z);\n    } else {\n      z = 0;\n    }\n\n    naf.push(z); // Optimization, shift by word if possible\n\n    var shift = k.cmpn(0) !== 0 && k.andln(ws - 1) === 0 ? w + 1 : 1;\n\n    for (var i = 1; i < shift; i++) {\n      naf.push(0);\n    }\n\n    k.iushrn(shift);\n  }\n\n  return naf;\n}\n\nutils.getNAF = getNAF; // Represent k1, k2 in a Joint Sparse Form\n\nfunction getJSF(k1, k2) {\n  var jsf = [[], []];\n  k1 = k1.clone();\n  k2 = k2.clone();\n  var d1 = 0;\n  var d2 = 0;\n\n  while (k1.cmpn(-d1) > 0 || k2.cmpn(-d2) > 0) {\n    // First phase\n    var m14 = k1.andln(3) + d1 & 3;\n    var m24 = k2.andln(3) + d2 & 3;\n    if (m14 === 3) m14 = -1;\n    if (m24 === 3) m24 = -1;\n    var u1;\n\n    if ((m14 & 1) === 0) {\n      u1 = 0;\n    } else {\n      var m8 = k1.andln(7) + d1 & 7;\n      if ((m8 === 3 || m8 === 5) && m24 === 2) u1 = -m14;else u1 = m14;\n    }\n\n    jsf[0].push(u1);\n    var u2;\n\n    if ((m24 & 1) === 0) {\n      u2 = 0;\n    } else {\n      var m8 = k2.andln(7) + d2 & 7;\n      if ((m8 === 3 || m8 === 5) && m14 === 2) u2 = -m24;else u2 = m24;\n    }\n\n    jsf[1].push(u2); // Second phase\n\n    if (2 * d1 === u1 + 1) d1 = 1 - d1;\n    if (2 * d2 === u2 + 1) d2 = 1 - d2;\n    k1.iushrn(1);\n    k2.iushrn(1);\n  }\n\n  return jsf;\n}\n\nutils.getJSF = getJSF;\n\nfunction cachedProperty(obj, name, computer) {\n  var key = '_' + name;\n\n  obj.prototype[name] = function cachedProperty() {\n    return this[key] !== undefined ? this[key] : this[key] = computer.call(this);\n  };\n}\n\nutils.cachedProperty = cachedProperty;\n\nfunction parseBytes(bytes) {\n  return typeof bytes === 'string' ? utils.toArray(bytes, 'hex') : bytes;\n}\n\nutils.parseBytes = parseBytes;\n\nfunction intFromLE(bytes) {\n  return new BN(bytes, 'hex', 'le');\n}\n\nutils.intFromLE = intFromLE;","// shim for using process in browser\nvar process = module.exports = {}; // cached from whatever global is present so that test runners that stub it\n// don't break things.  But we need to wrap it in a try catch in case it is\n// wrapped in strict mode code which doesn't define any globals.  It's inside a\n// function because try/catches deoptimize in certain engines.\n\nvar cachedSetTimeout;\nvar cachedClearTimeout;\n\nfunction defaultSetTimout() {\n  throw new Error('setTimeout has not been defined');\n}\n\nfunction defaultClearTimeout() {\n  throw new Error('clearTimeout has not been defined');\n}\n\n(function () {\n  try {\n    if (typeof setTimeout === 'function') {\n      cachedSetTimeout = setTimeout;\n    } else {\n      cachedSetTimeout = defaultSetTimout;\n    }\n  } catch (e) {\n    cachedSetTimeout = defaultSetTimout;\n  }\n\n  try {\n    if (typeof clearTimeout === 'function') {\n      cachedClearTimeout = clearTimeout;\n    } else {\n      cachedClearTimeout = defaultClearTimeout;\n    }\n  } catch (e) {\n    cachedClearTimeout = defaultClearTimeout;\n  }\n})();\n\nfunction runTimeout(fun) {\n  if (cachedSetTimeout === setTimeout) {\n    //normal enviroments in sane situations\n    return setTimeout(fun, 0);\n  } // if setTimeout wasn't available but was latter defined\n\n\n  if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) {\n    cachedSetTimeout = setTimeout;\n    return setTimeout(fun, 0);\n  }\n\n  try {\n    // when when somebody has screwed with setTimeout but no I.E. maddness\n    return cachedSetTimeout(fun, 0);\n  } catch (e) {\n    try {\n      // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally\n      return cachedSetTimeout.call(null, fun, 0);\n    } catch (e) {\n      // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error\n      return cachedSetTimeout.call(this, fun, 0);\n    }\n  }\n}\n\nfunction runClearTimeout(marker) {\n  if (cachedClearTimeout === clearTimeout) {\n    //normal enviroments in sane situations\n    return clearTimeout(marker);\n  } // if clearTimeout wasn't available but was latter defined\n\n\n  if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) {\n    cachedClearTimeout = clearTimeout;\n    return clearTimeout(marker);\n  }\n\n  try {\n    // when when somebody has screwed with setTimeout but no I.E. maddness\n    return cachedClearTimeout(marker);\n  } catch (e) {\n    try {\n      // When we are in I.E. but the script has been evaled so I.E. doesn't  trust the global object when called normally\n      return cachedClearTimeout.call(null, marker);\n    } catch (e) {\n      // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error.\n      // Some versions of I.E. have different rules for clearTimeout vs setTimeout\n      return cachedClearTimeout.call(this, marker);\n    }\n  }\n}\n\nvar queue = [];\nvar draining = false;\nvar currentQueue;\nvar queueIndex = -1;\n\nfunction cleanUpNextTick() {\n  if (!draining || !currentQueue) {\n    return;\n  }\n\n  draining = false;\n\n  if (currentQueue.length) {\n    queue = currentQueue.concat(queue);\n  } else {\n    queueIndex = -1;\n  }\n\n  if (queue.length) {\n    drainQueue();\n  }\n}\n\nfunction drainQueue() {\n  if (draining) {\n    return;\n  }\n\n  var timeout = runTimeout(cleanUpNextTick);\n  draining = true;\n  var len = queue.length;\n\n  while (len) {\n    currentQueue = queue;\n    queue = [];\n\n    while (++queueIndex < len) {\n      if (currentQueue) {\n        currentQueue[queueIndex].run();\n      }\n    }\n\n    queueIndex = -1;\n    len = queue.length;\n  }\n\n  currentQueue = null;\n  draining = false;\n  runClearTimeout(timeout);\n}\n\nprocess.nextTick = function (fun) {\n  var args = new Array(arguments.length - 1);\n\n  if (arguments.length > 1) {\n    for (var i = 1; i < arguments.length; i++) {\n      args[i - 1] = arguments[i];\n    }\n  }\n\n  queue.push(new Item(fun, args));\n\n  if (queue.length === 1 && !draining) {\n    runTimeout(drainQueue);\n  }\n}; // v8 likes predictible objects\n\n\nfunction Item(fun, array) {\n  this.fun = fun;\n  this.array = array;\n}\n\nItem.prototype.run = function () {\n  this.fun.apply(null, this.array);\n};\n\nprocess.title = 'browser';\nprocess.browser = true;\nprocess.env = {};\nprocess.argv = [];\nprocess.version = ''; // empty string to avoid regexp issues\n\nprocess.versions = {};\n\nfunction noop() {}\n\nprocess.on = noop;\nprocess.addListener = noop;\nprocess.once = noop;\nprocess.off = noop;\nprocess.removeListener = noop;\nprocess.removeAllListeners = noop;\nprocess.emit = noop;\nprocess.prependListener = noop;\nprocess.prependOnceListener = noop;\n\nprocess.listeners = function (name) {\n  return [];\n};\n\nprocess.binding = function (name) {\n  throw new Error('process.binding is not supported');\n};\n\nprocess.cwd = function () {\n  return '/';\n};\n\nprocess.chdir = function (dir) {\n  throw new Error('process.chdir is not supported');\n};\n\nprocess.umask = function () {\n  return 0;\n};","'use strict';\n\nvar assert = require('minimalistic-assert');\n\nvar inherits = require('inherits');\n\nexports.inherits = inherits;\n\nfunction isSurrogatePair(msg, i) {\n  if ((msg.charCodeAt(i) & 0xFC00) !== 0xD800) {\n    return false;\n  }\n\n  if (i < 0 || i + 1 >= msg.length) {\n    return false;\n  }\n\n  return (msg.charCodeAt(i + 1) & 0xFC00) === 0xDC00;\n}\n\nfunction toArray(msg, enc) {\n  if (Array.isArray(msg)) return msg.slice();\n  if (!msg) return [];\n  var res = [];\n\n  if (typeof msg === 'string') {\n    if (!enc) {\n      // Inspired by stringToUtf8ByteArray() in closure-library by Google\n      // https://github.com/google/closure-library/blob/8598d87242af59aac233270742c8984e2b2bdbe0/closure/goog/crypt/crypt.js#L117-L143\n      // Apache License 2.0\n      // https://github.com/google/closure-library/blob/master/LICENSE\n      var p = 0;\n\n      for (var i = 0; i < msg.length; i++) {\n        var c = msg.charCodeAt(i);\n\n        if (c < 128) {\n          res[p++] = c;\n        } else if (c < 2048) {\n          res[p++] = c >> 6 | 192;\n          res[p++] = c & 63 | 128;\n        } else if (isSurrogatePair(msg, i)) {\n          c = 0x10000 + ((c & 0x03FF) << 10) + (msg.charCodeAt(++i) & 0x03FF);\n          res[p++] = c >> 18 | 240;\n          res[p++] = c >> 12 & 63 | 128;\n          res[p++] = c >> 6 & 63 | 128;\n          res[p++] = c & 63 | 128;\n        } else {\n          res[p++] = c >> 12 | 224;\n          res[p++] = c >> 6 & 63 | 128;\n          res[p++] = c & 63 | 128;\n        }\n      }\n    } else if (enc === 'hex') {\n      msg = msg.replace(/[^a-z0-9]+/ig, '');\n      if (msg.length % 2 !== 0) msg = '0' + msg;\n\n      for (i = 0; i < msg.length; i += 2) {\n        res.push(parseInt(msg[i] + msg[i + 1], 16));\n      }\n    }\n  } else {\n    for (i = 0; i < msg.length; i++) {\n      res[i] = msg[i] | 0;\n    }\n  }\n\n  return res;\n}\n\nexports.toArray = toArray;\n\nfunction toHex(msg) {\n  var res = '';\n\n  for (var i = 0; i < msg.length; i++) {\n    res += zero2(msg[i].toString(16));\n  }\n\n  return res;\n}\n\nexports.toHex = toHex;\n\nfunction htonl(w) {\n  var res = w >>> 24 | w >>> 8 & 0xff00 | w << 8 & 0xff0000 | (w & 0xff) << 24;\n  return res >>> 0;\n}\n\nexports.htonl = htonl;\n\nfunction toHex32(msg, endian) {\n  var res = '';\n\n  for (var i = 0; i < msg.length; i++) {\n    var w = msg[i];\n    if (endian === 'little') w = htonl(w);\n    res += zero8(w.toString(16));\n  }\n\n  return res;\n}\n\nexports.toHex32 = toHex32;\n\nfunction zero2(word) {\n  if (word.length === 1) return '0' + word;else return word;\n}\n\nexports.zero2 = zero2;\n\nfunction zero8(word) {\n  if (word.length === 7) return '0' + word;else if (word.length === 6) return '00' + word;else if (word.length === 5) return '000' + word;else if (word.length === 4) return '0000' + word;else if (word.length === 3) return '00000' + word;else if (word.length === 2) return '000000' + word;else if (word.length === 1) return '0000000' + word;else return word;\n}\n\nexports.zero8 = zero8;\n\nfunction join32(msg, start, end, endian) {\n  var len = end - start;\n  assert(len % 4 === 0);\n  var res = new Array(len / 4);\n\n  for (var i = 0, k = start; i < res.length; i++, k += 4) {\n    var w;\n    if (endian === 'big') w = msg[k] << 24 | msg[k + 1] << 16 | msg[k + 2] << 8 | msg[k + 3];else w = msg[k + 3] << 24 | msg[k + 2] << 16 | msg[k + 1] << 8 | msg[k];\n    res[i] = w >>> 0;\n  }\n\n  return res;\n}\n\nexports.join32 = join32;\n\nfunction split32(msg, endian) {\n  var res = new Array(msg.length * 4);\n\n  for (var i = 0, k = 0; i < msg.length; i++, k += 4) {\n    var m = msg[i];\n\n    if (endian === 'big') {\n      res[k] = m >>> 24;\n      res[k + 1] = m >>> 16 & 0xff;\n      res[k + 2] = m >>> 8 & 0xff;\n      res[k + 3] = m & 0xff;\n    } else {\n      res[k + 3] = m >>> 24;\n      res[k + 2] = m >>> 16 & 0xff;\n      res[k + 1] = m >>> 8 & 0xff;\n      res[k] = m & 0xff;\n    }\n  }\n\n  return res;\n}\n\nexports.split32 = split32;\n\nfunction rotr32(w, b) {\n  return w >>> b | w << 32 - b;\n}\n\nexports.rotr32 = rotr32;\n\nfunction rotl32(w, b) {\n  return w << b | w >>> 32 - b;\n}\n\nexports.rotl32 = rotl32;\n\nfunction sum32(a, b) {\n  return a + b >>> 0;\n}\n\nexports.sum32 = sum32;\n\nfunction sum32_3(a, b, c) {\n  return a + b + c >>> 0;\n}\n\nexports.sum32_3 = sum32_3;\n\nfunction sum32_4(a, b, c, d) {\n  return a + b + c + d >>> 0;\n}\n\nexports.sum32_4 = sum32_4;\n\nfunction sum32_5(a, b, c, d, e) {\n  return a + b + c + d + e >>> 0;\n}\n\nexports.sum32_5 = sum32_5;\n\nfunction sum64(buf, pos, ah, al) {\n  var bh = buf[pos];\n  var bl = buf[pos + 1];\n  var lo = al + bl >>> 0;\n  var hi = (lo < al ? 1 : 0) + ah + bh;\n  buf[pos] = hi >>> 0;\n  buf[pos + 1] = lo;\n}\n\nexports.sum64 = sum64;\n\nfunction sum64_hi(ah, al, bh, bl) {\n  var lo = al + bl >>> 0;\n  var hi = (lo < al ? 1 : 0) + ah + bh;\n  return hi >>> 0;\n}\n\nexports.sum64_hi = sum64_hi;\n\nfunction sum64_lo(ah, al, bh, bl) {\n  var lo = al + bl;\n  return lo >>> 0;\n}\n\nexports.sum64_lo = sum64_lo;\n\nfunction sum64_4_hi(ah, al, bh, bl, ch, cl, dh, dl) {\n  var carry = 0;\n  var lo = al;\n  lo = lo + bl >>> 0;\n  carry += lo < al ? 1 : 0;\n  lo = lo + cl >>> 0;\n  carry += lo < cl ? 1 : 0;\n  lo = lo + dl >>> 0;\n  carry += lo < dl ? 1 : 0;\n  var hi = ah + bh + ch + dh + carry;\n  return hi >>> 0;\n}\n\nexports.sum64_4_hi = sum64_4_hi;\n\nfunction sum64_4_lo(ah, al, bh, bl, ch, cl, dh, dl) {\n  var lo = al + bl + cl + dl;\n  return lo >>> 0;\n}\n\nexports.sum64_4_lo = sum64_4_lo;\n\nfunction sum64_5_hi(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {\n  var carry = 0;\n  var lo = al;\n  lo = lo + bl >>> 0;\n  carry += lo < al ? 1 : 0;\n  lo = lo + cl >>> 0;\n  carry += lo < cl ? 1 : 0;\n  lo = lo + dl >>> 0;\n  carry += lo < dl ? 1 : 0;\n  lo = lo + el >>> 0;\n  carry += lo < el ? 1 : 0;\n  var hi = ah + bh + ch + dh + eh + carry;\n  return hi >>> 0;\n}\n\nexports.sum64_5_hi = sum64_5_hi;\n\nfunction sum64_5_lo(ah, al, bh, bl, ch, cl, dh, dl, eh, el) {\n  var lo = al + bl + cl + dl + el;\n  return lo >>> 0;\n}\n\nexports.sum64_5_lo = sum64_5_lo;\n\nfunction rotr64_hi(ah, al, num) {\n  var r = al << 32 - num | ah >>> num;\n  return r >>> 0;\n}\n\nexports.rotr64_hi = rotr64_hi;\n\nfunction rotr64_lo(ah, al, num) {\n  var r = ah << 32 - num | al >>> num;\n  return r >>> 0;\n}\n\nexports.rotr64_lo = rotr64_lo;\n\nfunction shr64_hi(ah, al, num) {\n  return ah >>> num;\n}\n\nexports.shr64_hi = shr64_hi;\n\nfunction shr64_lo(ah, al, num) {\n  var r = ah << 32 - num | al >>> num;\n  return r >>> 0;\n}\n\nexports.shr64_lo = shr64_lo;","\"use strict\";\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nvar _ = require(\"lodash\");\n/**\r\n * Method argument handler. Used for overloading methods.\r\n * @private\r\n */\n\n\nvar ArgHandler =\n/*#__PURE__*/\nfunction () {\n  /**\r\n   * Creates a new instance of ArgHandler.\r\n   * @param {string} name - The method name to use in error messages.\r\n   */\n  function ArgHandler(name) {\n    _classCallCheck(this, ArgHandler);\n\n    this._name = name;\n    this._cases = [];\n  }\n  /**\r\n   * Add a case.\r\n   * @param {string|Array.<string>} [types] - The type or types of arguments to match this case.\r\n   * @param {Function} handler - The function to call when this case is matched.\r\n   * @returns {ArgHandler} The handler for chaining.\r\n   */\n\n\n  _createClass(ArgHandler, [{\n    key: \"case\",\n    value: function _case(types, handler) {\n      if (arguments.length === 1) {\n        handler = types;\n        types = [];\n      }\n\n      if (!Array.isArray(types)) types = [types];\n\n      this._cases.push({\n        types: types,\n        handler: handler\n      });\n\n      return this;\n    }\n    /**\r\n     * Handle the method arguments by checking each case in order until one matches and then call its handler.\r\n     * @param {Arguments|Array.<*>} args - The method arguments.\r\n     * @returns {*} The result of the handler.\r\n     * @throws {Error} Throws if no case matches.\r\n     */\n\n  }, {\n    key: \"handle\",\n    value: function handle(args) {\n      for (var i = 0; i < this._cases.length; i++) {\n        var c = this._cases[i];\n\n        if (this._argsMatchTypes(args, c.types)) {\n          return c.handler.apply(null, args);\n        }\n      }\n\n      throw new Error(\"\".concat(this._name, \": Invalid arguments.\"));\n    }\n    /**\r\n     * Check if the arguments match the given types.\r\n     * @param {Arguments} args - The arguments.\r\n     * @param {Array.<string>} types - The types.\r\n     * @returns {boolean} True if matches, false otherwise.\r\n     * @throws {Error} Throws if unknown type.\r\n     * @private\r\n     */\n\n  }, {\n    key: \"_argsMatchTypes\",\n    value: function _argsMatchTypes(args, types) {\n      if (args.length !== types.length) return false;\n      return _.every(args, function (arg, i) {\n        var type = types[i];\n        if (type === '*') return true;\n        if (type === 'nil') return _.isNil(arg);\n        if (type === 'string') return typeof arg === \"string\";\n        if (type === 'boolean') return typeof arg === \"boolean\";\n        if (type === 'number') return typeof arg === \"number\";\n        if (type === 'integer') return typeof arg === \"number\" && _.isInteger(arg);\n        if (type === 'function') return typeof arg === \"function\";\n        if (type === 'array') return Array.isArray(arg);\n        if (type === 'date') return arg && arg.constructor === Date;\n        if (type === 'object') return arg && arg.constructor === Object;\n        if (arg && arg.constructor && arg.constructor.name === type) return true;\n        throw new Error(\"Unknown type: \".concat(type));\n      });\n    }\n  }]);\n\n  return ArgHandler;\n}();\n\nmodule.exports = ArgHandler;","'use strict';\n\nexports.base64 = true;\nexports.array = true;\nexports.string = true;\nexports.arraybuffer = typeof ArrayBuffer !== \"undefined\" && typeof Uint8Array !== \"undefined\";\nexports.nodebuffer = typeof Buffer !== \"undefined\"; // contains true if JSZip can read/generate Uint8Array, false otherwise.\n\nexports.uint8array = typeof Uint8Array !== \"undefined\";\n\nif (typeof ArrayBuffer === \"undefined\") {\n  exports.blob = false;\n} else {\n  var buffer = new ArrayBuffer(0);\n\n  try {\n    exports.blob = new Blob([buffer], {\n      type: \"application/zip\"\n    }).size === 0;\n  } catch (e) {\n    try {\n      var Builder = self.BlobBuilder || self.WebKitBlobBuilder || self.MozBlobBuilder || self.MSBlobBuilder;\n      var builder = new Builder();\n      builder.append(buffer);\n      exports.blob = builder.getBlob('application/zip').size === 0;\n    } catch (e) {\n      exports.blob = false;\n    }\n  }\n}\n\ntry {\n  exports.nodestream = !!require('readable-stream').Readable;\n} catch (e) {\n  exports.nodestream = false;\n}","'use strict';\n\nfunction _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nvar TYPED_OK = typeof Uint8Array !== 'undefined' && typeof Uint16Array !== 'undefined' && typeof Int32Array !== 'undefined';\n\nfunction _has(obj, key) {\n  return Object.prototype.hasOwnProperty.call(obj, key);\n}\n\nexports.assign = function (obj\n/*from1, from2, from3, ...*/\n) {\n  var sources = Array.prototype.slice.call(arguments, 1);\n\n  while (sources.length) {\n    var source = sources.shift();\n\n    if (!source) {\n      continue;\n    }\n\n    if (_typeof(source) !== 'object') {\n      throw new TypeError(source + 'must be non-object');\n    }\n\n    for (var p in source) {\n      if (_has(source, p)) {\n        obj[p] = source[p];\n      }\n    }\n  }\n\n  return obj;\n}; // reduce buffer size, avoiding mem copy\n\n\nexports.shrinkBuf = function (buf, size) {\n  if (buf.length === size) {\n    return buf;\n  }\n\n  if (buf.subarray) {\n    return buf.subarray(0, size);\n  }\n\n  buf.length = size;\n  return buf;\n};\n\nvar fnTyped = {\n  arraySet: function arraySet(dest, src, src_offs, len, dest_offs) {\n    if (src.subarray && dest.subarray) {\n      dest.set(src.subarray(src_offs, src_offs + len), dest_offs);\n      return;\n    } // Fallback to ordinary array\n\n\n    for (var i = 0; i < len; i++) {\n      dest[dest_offs + i] = src[src_offs + i];\n    }\n  },\n  // Join array of chunks to single array.\n  flattenChunks: function flattenChunks(chunks) {\n    var i, l, len, pos, chunk, result; // calculate data length\n\n    len = 0;\n\n    for (i = 0, l = chunks.length; i < l; i++) {\n      len += chunks[i].length;\n    } // join chunks\n\n\n    result = new Uint8Array(len);\n    pos = 0;\n\n    for (i = 0, l = chunks.length; i < l; i++) {\n      chunk = chunks[i];\n      result.set(chunk, pos);\n      pos += chunk.length;\n    }\n\n    return result;\n  }\n};\nvar fnUntyped = {\n  arraySet: function arraySet(dest, src, src_offs, len, dest_offs) {\n    for (var i = 0; i < len; i++) {\n      dest[dest_offs + i] = src[src_offs + i];\n    }\n  },\n  // Join array of chunks to single array.\n  flattenChunks: function flattenChunks(chunks) {\n    return [].concat.apply([], chunks);\n  }\n}; // Enable/Disable typed arrays use, for testing\n//\n\nexports.setTyped = function (on) {\n  if (on) {\n    exports.Buf8 = Uint8Array;\n    exports.Buf16 = Uint16Array;\n    exports.Buf32 = Int32Array;\n    exports.assign(exports, fnTyped);\n  } else {\n    exports.Buf8 = Array;\n    exports.Buf16 = Array;\n    exports.Buf32 = Array;\n    exports.assign(exports, fnUntyped);\n  }\n};\n\nexports.setTyped(TYPED_OK);","\"use strict\";\n\nvar _ = require(\"lodash\");\n/**\r\n * XML query methods.\r\n * @private\r\n */\n\n\nmodule.exports = {\n  /**\r\n   * Append a child to the node.\r\n   * @param {{}} node - The parent node.\r\n   * @param {{}} child - The child node.\r\n   * @returns {undefined}\r\n   */\n  appendChild: function appendChild(node, child) {\n    if (!node.children) node.children = [];\n    node.children.push(child);\n  },\n\n  /**\r\n   * Append a child if one with the given name is not found.\r\n   * @param {{}} node - The parent node.\r\n   * @param {string} name - The child node name.\r\n   * @returns {{}} The child.\r\n   */\n  appendChildIfNotFound: function appendChildIfNotFound(node, name) {\n    var child = this.findChild(node, name);\n\n    if (!child) {\n      child = {\n        name: name,\n        attributes: {},\n        children: []\n      };\n      this.appendChild(node, child);\n    }\n\n    return child;\n  },\n\n  /**\r\n   * Find a child with the given name.\r\n   * @param {{}} node - The parent node.\r\n   * @param {string} name - The name to find.\r\n   * @returns {undefined|{}} The child if found.\r\n   */\n  findChild: function findChild(node, name) {\n    return _.find(node.children, {\n      name: name\n    });\n  },\n\n  /**\r\n   * Get an attribute from a child node.\r\n   * @param {{}} node - The parent node.\r\n   * @param {string} name - The name of the child node.\r\n   * @param {string} attribute - The name of the attribute.\r\n   * @returns {undefined|*} The value of the attribute if found.\r\n   */\n  getChildAttribute: function getChildAttribute(node, name, attribute) {\n    var child = this.findChild(node, name);\n    if (child) return child.attributes && child.attributes[attribute];\n  },\n\n  /**\r\n   * Returns a value indicating whether the node has a child with the given name.\r\n   * @param {{}} node - The parent node.\r\n   * @param {string} name - The name of the child node.\r\n   * @returns {boolean} True if found, false otherwise.\r\n   */\n  hasChild: function hasChild(node, name) {\n    return _.some(node.children, {\n      name: name\n    });\n  },\n\n  /**\r\n   * Insert the child after the specified node.\r\n   * @param {{}} node - The parent node.\r\n   * @param {{}} child - The child node.\r\n   * @param {{}} after - The node to insert after.\r\n   * @returns {undefined}\r\n   */\n  insertAfter: function insertAfter(node, child, after) {\n    if (!node.children) node.children = [];\n    var index = node.children.indexOf(after);\n    node.children.splice(index + 1, 0, child);\n  },\n\n  /**\r\n   * Insert the child before the specified node.\r\n   * @param {{}} node - The parent node.\r\n   * @param {{}} child - The child node.\r\n   * @param {{}} before - The node to insert before.\r\n   * @returns {undefined}\r\n   */\n  insertBefore: function insertBefore(node, child, before) {\n    if (!node.children) node.children = [];\n    var index = node.children.indexOf(before);\n    node.children.splice(index, 0, child);\n  },\n\n  /**\r\n   * Insert a child node in the correct order.\r\n   * @param {{}} node - The parent node.\r\n   * @param {{}} child - The child node.\r\n   * @param {Array.<string>} nodeOrder - The order of the node names.\r\n   * @returns {undefined}\r\n   */\n  insertInOrder: function insertInOrder(node, child, nodeOrder) {\n    var childIndex = nodeOrder.indexOf(child.name);\n\n    if (node.children && childIndex >= 0) {\n      for (var i = childIndex + 1; i < nodeOrder.length; i++) {\n        var sibling = this.findChild(node, nodeOrder[i]);\n\n        if (sibling) {\n          this.insertBefore(node, child, sibling);\n          return;\n        }\n      }\n    }\n\n    this.appendChild(node, child);\n  },\n\n  /**\r\n   * Check if the node is empty (no attributes and no children).\r\n   * @param {{}} node - The node.\r\n   * @returns {boolean} True if empty, false otherwise.\r\n   */\n  isEmpty: function isEmpty(node) {\n    return _.isEmpty(node.children) && _.isEmpty(node.attributes);\n  },\n\n  /**\r\n   * Remove a child node.\r\n   * @param {{}} node - The parent node.\r\n   * @param {string|{}} child - The child node or name of node.\r\n   * @returns {undefined}\r\n   */\n  removeChild: function removeChild(node, child) {\n    if (!node.children) return;\n\n    if (typeof child === 'string') {\n      _.remove(node.children, {\n        name: child\n      });\n    } else {\n      var index = node.children.indexOf(child);\n      if (index >= 0) node.children.splice(index, 1);\n    }\n  },\n\n  /**\r\n   * Set/unset the attributes on the node.\r\n   * @param {{}} node - The node.\r\n   * @param {{}} attributes - The attributes to set.\r\n   * @returns {undefined}\r\n   */\n  setAttributes: function setAttributes(node, attributes) {\n    _.forOwn(attributes, function (value, attribute) {\n      if (_.isNil(value)) {\n        if (node.attributes) delete node.attributes[attribute];\n      } else {\n        if (!node.attributes) node.attributes = {};\n        node.attributes[attribute] = value;\n      }\n    });\n  },\n\n  /**\r\n   * Set attributes on a child node, creating the child if necessary.\r\n   * @param {{}} node - The parent node.\r\n   * @param {string} name - The name of the child node.\r\n   * @param {{}} attributes - The attributes to set.\r\n   * @returns {{}} The child.\r\n   */\n  setChildAttributes: function setChildAttributes(node, name, attributes) {\n    var _this = this;\n\n    var child = this.findChild(node, name);\n\n    _.forOwn(attributes, function (value, attribute) {\n      if (_.isNil(value)) {\n        if (child && child.attributes) delete child.attributes[attribute];\n      } else {\n        if (!child) {\n          child = {\n            name: name,\n            attributes: {},\n            children: []\n          };\n\n          _this.appendChild(node, child);\n        }\n\n        if (!child.attributes) child.attributes = {};\n        child.attributes[attribute] = value;\n      }\n    });\n\n    return child;\n  },\n\n  /**\r\n   * Remove the child node if empty.\r\n   * @param {{}} node - The parent node.\r\n   * @param {string|{}} child - The child or name of child node.\r\n   * @returns {undefined}\r\n   */\n  removeChildIfEmpty: function removeChildIfEmpty(node, child) {\n    if (typeof child === 'string') child = this.findChild(node, child);\n    if (child && this.isEmpty(child)) this.removeChild(node, child);\n  }\n};","var Buffer = require('safe-buffer').Buffer;\n\nvar Transform = require('stream').Transform;\n\nvar StringDecoder = require('string_decoder').StringDecoder;\n\nvar inherits = require('inherits');\n\nfunction CipherBase(hashMode) {\n  Transform.call(this);\n  this.hashMode = typeof hashMode === 'string';\n\n  if (this.hashMode) {\n    this[hashMode] = this._finalOrDigest;\n  } else {\n    this[\"final\"] = this._finalOrDigest;\n  }\n\n  if (this._final) {\n    this.__final = this._final;\n    this._final = null;\n  }\n\n  this._decoder = null;\n  this._encoding = null;\n}\n\ninherits(CipherBase, Transform);\n\nCipherBase.prototype.update = function (data, inputEnc, outputEnc) {\n  if (typeof data === 'string') {\n    data = Buffer.from(data, inputEnc);\n  }\n\n  var outData = this._update(data);\n\n  if (this.hashMode) return this;\n\n  if (outputEnc) {\n    outData = this._toString(outData, outputEnc);\n  }\n\n  return outData;\n};\n\nCipherBase.prototype.setAutoPadding = function () {};\n\nCipherBase.prototype.getAuthTag = function () {\n  throw new Error('trying to get auth tag in unsupported state');\n};\n\nCipherBase.prototype.setAuthTag = function () {\n  throw new Error('trying to set auth tag in unsupported state');\n};\n\nCipherBase.prototype.setAAD = function () {\n  throw new Error('trying to set aad in unsupported state');\n};\n\nCipherBase.prototype._transform = function (data, _, next) {\n  var err;\n\n  try {\n    if (this.hashMode) {\n      this._update(data);\n    } else {\n      this.push(this._update(data));\n    }\n  } catch (e) {\n    err = e;\n  } finally {\n    next(err);\n  }\n};\n\nCipherBase.prototype._flush = function (done) {\n  var err;\n\n  try {\n    this.push(this.__final());\n  } catch (e) {\n    err = e;\n  }\n\n  done(err);\n};\n\nCipherBase.prototype._finalOrDigest = function (outputEnc) {\n  var outData = this.__final() || Buffer.alloc(0);\n\n  if (outputEnc) {\n    outData = this._toString(outData, outputEnc, true);\n  }\n\n  return outData;\n};\n\nCipherBase.prototype._toString = function (value, enc, fin) {\n  if (!this._decoder) {\n    this._decoder = new StringDecoder(enc);\n    this._encoding = enc;\n  }\n\n  if (this._encoding !== enc) throw new Error('can\\'t switch encodings');\n\n  var out = this._decoder.write(value);\n\n  if (fin) {\n    out += this._decoder.end();\n  }\n\n  return out;\n};\n\nmodule.exports = CipherBase;","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n// a duplex stream is just a stream that is both readable and writable.\n// Since JS doesn't have multiple prototypal inheritance, this class\n// prototypally inherits from Readable, and then parasitically from\n// Writable.\n'use strict';\n/*<replacement>*/\n\nvar pna = require('process-nextick-args');\n/*</replacement>*/\n\n/*<replacement>*/\n\n\nvar objectKeys = Object.keys || function (obj) {\n  var keys = [];\n\n  for (var key in obj) {\n    keys.push(key);\n  }\n\n  return keys;\n};\n/*</replacement>*/\n\n\nmodule.exports = Duplex;\n/*<replacement>*/\n\nvar util = require('core-util-is');\n\nutil.inherits = require('inherits');\n/*</replacement>*/\n\nvar Readable = require('./_stream_readable');\n\nvar Writable = require('./_stream_writable');\n\nutil.inherits(Duplex, Readable);\n{\n  // avoid scope creep, the keys array can then be collected\n  var keys = objectKeys(Writable.prototype);\n\n  for (var v = 0; v < keys.length; v++) {\n    var method = keys[v];\n    if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method];\n  }\n}\n\nfunction Duplex(options) {\n  if (!(this instanceof Duplex)) return new Duplex(options);\n  Readable.call(this, options);\n  Writable.call(this, options);\n  if (options && options.readable === false) this.readable = false;\n  if (options && options.writable === false) this.writable = false;\n  this.allowHalfOpen = true;\n  if (options && options.allowHalfOpen === false) this.allowHalfOpen = false;\n  this.once('end', onend);\n}\n\nObject.defineProperty(Duplex.prototype, 'writableHighWaterMark', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    return this._writableState.highWaterMark;\n  }\n}); // the no-half-open enforcer\n\nfunction onend() {\n  // if we allow half-open state, or if the writable side ended,\n  // then we're ok.\n  if (this.allowHalfOpen || this._writableState.ended) return; // no more data can be written.\n  // But allow more writes to happen in this tick.\n\n  pna.nextTick(onEndNT, this);\n}\n\nfunction onEndNT(self) {\n  self.end();\n}\n\nObject.defineProperty(Duplex.prototype, 'destroyed', {\n  get: function get() {\n    if (this._readableState === undefined || this._writableState === undefined) {\n      return false;\n    }\n\n    return this._readableState.destroyed && this._writableState.destroyed;\n  },\n  set: function set(value) {\n    // we ignore the value if the stream\n    // has not been initialized yet\n    if (this._readableState === undefined || this._writableState === undefined) {\n      return;\n    } // backward compatibility, the user is explicitly\n    // managing destroyed\n\n\n    this._readableState.destroyed = value;\n    this._writableState.destroyed = value;\n  }\n});\n\nDuplex.prototype._destroy = function (err, cb) {\n  this.push(null);\n  this.end();\n  pna.nextTick(cb, err);\n};","'use strict';\n\nvar utils = require('./utils');\n\nvar support = require('./support');\n\nvar nodejsUtils = require('./nodejsUtils');\n\nvar GenericWorker = require('./stream/GenericWorker');\n/**\n * The following functions come from pako, from pako/lib/utils/strings\n * released under the MIT license, see pako https://github.com/nodeca/pako/\n */\n// Table with utf8 lengths (calculated by first byte of sequence)\n// Note, that 5 & 6-byte values and some 4-byte values can not be represented in JS,\n// because max possible codepoint is 0x10ffff\n\n\nvar _utf8len = new Array(256);\n\nfor (var i = 0; i < 256; i++) {\n  _utf8len[i] = i >= 252 ? 6 : i >= 248 ? 5 : i >= 240 ? 4 : i >= 224 ? 3 : i >= 192 ? 2 : 1;\n}\n\n_utf8len[254] = _utf8len[254] = 1; // Invalid sequence start\n// convert string to array (typed, when possible)\n\nvar string2buf = function string2buf(str) {\n  var buf,\n      c,\n      c2,\n      m_pos,\n      i,\n      str_len = str.length,\n      buf_len = 0; // count binary size\n\n  for (m_pos = 0; m_pos < str_len; m_pos++) {\n    c = str.charCodeAt(m_pos);\n\n    if ((c & 0xfc00) === 0xd800 && m_pos + 1 < str_len) {\n      c2 = str.charCodeAt(m_pos + 1);\n\n      if ((c2 & 0xfc00) === 0xdc00) {\n        c = 0x10000 + (c - 0xd800 << 10) + (c2 - 0xdc00);\n        m_pos++;\n      }\n    }\n\n    buf_len += c < 0x80 ? 1 : c < 0x800 ? 2 : c < 0x10000 ? 3 : 4;\n  } // allocate buffer\n\n\n  if (support.uint8array) {\n    buf = new Uint8Array(buf_len);\n  } else {\n    buf = new Array(buf_len);\n  } // convert\n\n\n  for (i = 0, m_pos = 0; i < buf_len; m_pos++) {\n    c = str.charCodeAt(m_pos);\n\n    if ((c & 0xfc00) === 0xd800 && m_pos + 1 < str_len) {\n      c2 = str.charCodeAt(m_pos + 1);\n\n      if ((c2 & 0xfc00) === 0xdc00) {\n        c = 0x10000 + (c - 0xd800 << 10) + (c2 - 0xdc00);\n        m_pos++;\n      }\n    }\n\n    if (c < 0x80) {\n      /* one byte */\n      buf[i++] = c;\n    } else if (c < 0x800) {\n      /* two bytes */\n      buf[i++] = 0xC0 | c >>> 6;\n      buf[i++] = 0x80 | c & 0x3f;\n    } else if (c < 0x10000) {\n      /* three bytes */\n      buf[i++] = 0xE0 | c >>> 12;\n      buf[i++] = 0x80 | c >>> 6 & 0x3f;\n      buf[i++] = 0x80 | c & 0x3f;\n    } else {\n      /* four bytes */\n      buf[i++] = 0xf0 | c >>> 18;\n      buf[i++] = 0x80 | c >>> 12 & 0x3f;\n      buf[i++] = 0x80 | c >>> 6 & 0x3f;\n      buf[i++] = 0x80 | c & 0x3f;\n    }\n  }\n\n  return buf;\n}; // Calculate max possible position in utf8 buffer,\n// that will not break sequence. If that's not possible\n// - (very small limits) return max size as is.\n//\n// buf[] - utf8 bytes array\n// max   - length limit (mandatory);\n\n\nvar utf8border = function utf8border(buf, max) {\n  var pos;\n  max = max || buf.length;\n\n  if (max > buf.length) {\n    max = buf.length;\n  } // go back from last position, until start of sequence found\n\n\n  pos = max - 1;\n\n  while (pos >= 0 && (buf[pos] & 0xC0) === 0x80) {\n    pos--;\n  } // Fuckup - very small and broken sequence,\n  // return max, because we should return something anyway.\n\n\n  if (pos < 0) {\n    return max;\n  } // If we came to start of buffer - that means vuffer is too small,\n  // return max too.\n\n\n  if (pos === 0) {\n    return max;\n  }\n\n  return pos + _utf8len[buf[pos]] > max ? pos : max;\n}; // convert array to string\n\n\nvar buf2string = function buf2string(buf) {\n  var str, i, out, c, c_len;\n  var len = buf.length; // Reserve max possible length (2 words per char)\n  // NB: by unknown reasons, Array is significantly faster for\n  //     String.fromCharCode.apply than Uint16Array.\n\n  var utf16buf = new Array(len * 2);\n\n  for (out = 0, i = 0; i < len;) {\n    c = buf[i++]; // quick process ascii\n\n    if (c < 0x80) {\n      utf16buf[out++] = c;\n      continue;\n    }\n\n    c_len = _utf8len[c]; // skip 5 & 6 byte codes\n\n    if (c_len > 4) {\n      utf16buf[out++] = 0xfffd;\n      i += c_len - 1;\n      continue;\n    } // apply mask on first byte\n\n\n    c &= c_len === 2 ? 0x1f : c_len === 3 ? 0x0f : 0x07; // join the rest\n\n    while (c_len > 1 && i < len) {\n      c = c << 6 | buf[i++] & 0x3f;\n      c_len--;\n    } // terminated by end of string?\n\n\n    if (c_len > 1) {\n      utf16buf[out++] = 0xfffd;\n      continue;\n    }\n\n    if (c < 0x10000) {\n      utf16buf[out++] = c;\n    } else {\n      c -= 0x10000;\n      utf16buf[out++] = 0xd800 | c >> 10 & 0x3ff;\n      utf16buf[out++] = 0xdc00 | c & 0x3ff;\n    }\n  } // shrinkBuf(utf16buf, out)\n\n\n  if (utf16buf.length !== out) {\n    if (utf16buf.subarray) {\n      utf16buf = utf16buf.subarray(0, out);\n    } else {\n      utf16buf.length = out;\n    }\n  } // return String.fromCharCode.apply(null, utf16buf);\n\n\n  return utils.applyFromCharCode(utf16buf);\n}; // That's all for the pako functions.\n\n/**\n * Transform a javascript string into an array (typed if possible) of bytes,\n * UTF-8 encoded.\n * @param {String} str the string to encode\n * @return {Array|Uint8Array|Buffer} the UTF-8 encoded string.\n */\n\n\nexports.utf8encode = function utf8encode(str) {\n  if (support.nodebuffer) {\n    return nodejsUtils.newBufferFrom(str, \"utf-8\");\n  }\n\n  return string2buf(str);\n};\n/**\n * Transform a bytes array (or a representation) representing an UTF-8 encoded\n * string into a javascript string.\n * @param {Array|Uint8Array|Buffer} buf the data de decode\n * @return {String} the decoded string.\n */\n\n\nexports.utf8decode = function utf8decode(buf) {\n  if (support.nodebuffer) {\n    return utils.transformTo(\"nodebuffer\", buf).toString(\"utf-8\");\n  }\n\n  buf = utils.transformTo(support.uint8array ? \"uint8array\" : \"array\", buf);\n  return buf2string(buf);\n};\n/**\n * A worker to decode utf8 encoded binary chunks into string chunks.\n * @constructor\n */\n\n\nfunction Utf8DecodeWorker() {\n  GenericWorker.call(this, \"utf-8 decode\"); // the last bytes if a chunk didn't end with a complete codepoint.\n\n  this.leftOver = null;\n}\n\nutils.inherits(Utf8DecodeWorker, GenericWorker);\n/**\n * @see GenericWorker.processChunk\n */\n\nUtf8DecodeWorker.prototype.processChunk = function (chunk) {\n  var data = utils.transformTo(support.uint8array ? \"uint8array\" : \"array\", chunk.data); // 1st step, re-use what's left of the previous chunk\n\n  if (this.leftOver && this.leftOver.length) {\n    if (support.uint8array) {\n      var previousData = data;\n      data = new Uint8Array(previousData.length + this.leftOver.length);\n      data.set(this.leftOver, 0);\n      data.set(previousData, this.leftOver.length);\n    } else {\n      data = this.leftOver.concat(data);\n    }\n\n    this.leftOver = null;\n  }\n\n  var nextBoundary = utf8border(data);\n  var usableData = data;\n\n  if (nextBoundary !== data.length) {\n    if (support.uint8array) {\n      usableData = data.subarray(0, nextBoundary);\n      this.leftOver = data.subarray(nextBoundary, data.length);\n    } else {\n      usableData = data.slice(0, nextBoundary);\n      this.leftOver = data.slice(nextBoundary, data.length);\n    }\n  }\n\n  this.push({\n    data: exports.utf8decode(usableData),\n    meta: chunk.meta\n  });\n};\n/**\n * @see GenericWorker.flush\n */\n\n\nUtf8DecodeWorker.prototype.flush = function () {\n  if (this.leftOver && this.leftOver.length) {\n    this.push({\n      data: exports.utf8decode(this.leftOver),\n      meta: {}\n    });\n    this.leftOver = null;\n  }\n};\n\nexports.Utf8DecodeWorker = Utf8DecodeWorker;\n/**\n * A worker to endcode string chunks into utf8 encoded binary chunks.\n * @constructor\n */\n\nfunction Utf8EncodeWorker() {\n  GenericWorker.call(this, \"utf-8 encode\");\n}\n\nutils.inherits(Utf8EncodeWorker, GenericWorker);\n/**\n * @see GenericWorker.processChunk\n */\n\nUtf8EncodeWorker.prototype.processChunk = function (chunk) {\n  this.push({\n    data: exports.utf8encode(chunk.data),\n    meta: chunk.meta\n  });\n};\n\nexports.Utf8EncodeWorker = Utf8EncodeWorker;","\"use strict\"; // V8 doesn't support optimization for compound assignment of let variables.\n// These methods get called a lot so disable the rule to allow V8 opmtimization.\n\n/* eslint-disable operator-assignment */\n\nvar _ = require(\"lodash\");\n\nvar ADDRESS_REGEX = /^(?:'?(.+?)'?!)?(?:(\\$)?([A-Z]+)(\\$)?(\\d+)(?::(\\$)?([A-Z]+)(\\$)?(\\d+))?|(\\$)?([A-Z]+):(\\$)?([A-Z]+)|(\\$)?(\\d+):(\\$)?(\\d+))$/;\n/**\r\n * Address converter.\r\n * @private\r\n */\n\nmodule.exports = {\n  /**\r\n   * Convert a column name to a number.\r\n   * @param {string} name - The column name.\r\n   * @returns {number} The number.\r\n   */\n  columnNameToNumber: function columnNameToNumber(name) {\n    if (!name || typeof name !== \"string\") return;\n    name = name.toUpperCase();\n    var sum = 0;\n\n    for (var i = 0; i < name.length; i++) {\n      sum = sum * 26;\n      sum = sum + (name[i].charCodeAt(0) - 'A'.charCodeAt(0) + 1);\n    }\n\n    return sum;\n  },\n\n  /**\r\n   * Convert a column number to a name.\r\n   * @param {number} number - The column number.\r\n   * @returns {string} The name.\r\n   */\n  columnNumberToName: function columnNumberToName(number) {\n    var dividend = number;\n    var name = '';\n    var modulo = 0;\n\n    while (dividend > 0) {\n      modulo = (dividend - 1) % 26;\n      name = String.fromCharCode('A'.charCodeAt(0) + modulo) + name;\n      dividend = Math.floor((dividend - modulo) / 26);\n    }\n\n    return name;\n  },\n\n  /**\r\n   * Convert an address to a reference object.\r\n   * @param {string} address - The address.\r\n   * @returns {{}} The reference object.\r\n   */\n  fromAddress: function fromAddress(address) {\n    var match = address.match(ADDRESS_REGEX);\n    if (!match) return;\n    var ref = {};\n    if (match[1]) ref.sheetName = match[1].replace(/''/g, \"'\");\n\n    if (match[3] && match[7]) {\n      ref.type = 'range';\n      ref.startColumnAnchored = !!match[2];\n      ref.startColumnName = match[3];\n      ref.startColumnNumber = this.columnNameToNumber(ref.startColumnName);\n      ref.startRowAnchored = !!match[4];\n      ref.startRowNumber = parseInt(match[5]);\n      ref.endColumnAnchored = !!match[6];\n      ref.endColumnName = match[7];\n      ref.endColumnNumber = this.columnNameToNumber(ref.endColumnName);\n      ref.endRowAnchored = !!match[8];\n      ref.endRowNumber = parseInt(match[9]);\n    } else if (match[3]) {\n      ref.type = 'cell';\n      ref.columnAnchored = !!match[2];\n      ref.columnName = match[3];\n      ref.columnNumber = this.columnNameToNumber(ref.columnName);\n      ref.rowAnchored = !!match[4];\n      ref.rowNumber = parseInt(match[5]);\n    } else if (match[11] && match[11] !== match[13]) {\n      ref.type = 'columnRange';\n      ref.startColumnAnchored = !!match[10];\n      ref.startColumnName = match[11];\n      ref.startColumnNumber = this.columnNameToNumber(ref.startColumnName);\n      ref.endColumnAnchored = !!match[12];\n      ref.endColumnName = match[13];\n      ref.endColumnNumber = this.columnNameToNumber(ref.endColumnName);\n    } else if (match[11]) {\n      ref.type = 'column';\n      ref.columnAnchored = !!match[10];\n      ref.columnName = match[11];\n      ref.columnNumber = this.columnNameToNumber(ref.columnName);\n    } else if (match[15] && match[15] !== match[17]) {\n      ref.type = 'rowRange';\n      ref.startRowAnchored = !!match[14];\n      ref.startRowNumber = parseInt(match[15]);\n      ref.endRowAnchored = !!match[16];\n      ref.endRowNumber = parseInt(match[17]);\n    } else if (match[15]) {\n      ref.type = 'row';\n      ref.rowAnchored = !!match[14];\n      ref.rowNumber = parseInt(match[15]);\n    }\n\n    return ref;\n  },\n\n  /**\r\n   * Convert a reference object to an address.\r\n   * @param {{}} ref - The reference object.\r\n   * @returns {string} The address.\r\n   */\n  toAddress: function toAddress(ref) {\n    var a, b;\n    var sheetName = ref.sheetName;\n\n    if (ref.type === 'cell') {\n      a = {\n        columnName: ref.columnName,\n        columnNumber: ref.columnNumber,\n        columnAnchored: ref.columnAnchored,\n        rowNumber: ref.rowNumber,\n        rowAnchored: ref.rowAnchored\n      };\n    } else if (ref.type === 'range') {\n      a = {\n        columnName: ref.startColumnName,\n        columnNumber: ref.startColumnNumber,\n        columnAnchored: ref.startColumnAnchored,\n        rowNumber: ref.startRowNumber,\n        rowAnchored: ref.startRowAnchored\n      };\n      b = {\n        columnName: ref.endColumnName,\n        columnNumber: ref.endColumnNumber,\n        columnAnchored: ref.endColumnAnchored,\n        rowNumber: ref.endRowNumber,\n        rowAnchored: ref.endRowAnchored\n      };\n    } else if (ref.type === 'column') {\n      a = b = {\n        columnName: ref.columnName,\n        columnNumber: ref.columnNumber,\n        columnAnchored: ref.columnAnchored\n      };\n    } else if (ref.type === 'row') {\n      a = b = {\n        rowNumber: ref.rowNumber,\n        rowAnchored: ref.rowAnchored\n      };\n    } else if (ref.type === 'columnRange') {\n      a = {\n        columnName: ref.startColumnName,\n        columnNumber: ref.startColumnNumber,\n        columnAnchored: ref.startColumnAnchored\n      };\n      b = {\n        columnName: ref.endColumnName,\n        columnNumber: ref.endColumnNumber,\n        columnAnchored: ref.endColumnAnchored\n      };\n    } else if (ref.type === 'rowRange') {\n      a = {\n        rowNumber: ref.startRowNumber,\n        rowAnchored: ref.startRowAnchored\n      };\n      b = {\n        rowNumber: ref.endRowNumber,\n        rowAnchored: ref.endRowAnchored\n      };\n    }\n\n    var address = '';\n    if (sheetName) address = \"\".concat(address, \"'\").concat(sheetName.replace(/'/g, \"''\"), \"'!\");\n    if (a.columnAnchored) address = \"\".concat(address, \"$\");\n    if (a.columnName) address = address + a.columnName;else if (a.columnNumber) address = address + this.columnNumberToName(a.columnNumber);\n    if (a.rowAnchored) address = \"\".concat(address, \"$\");\n    if (a.rowNumber) address = address + a.rowNumber;\n\n    if (b) {\n      address = \"\".concat(address, \":\");\n      if (b.columnAnchored) address = \"\".concat(address, \"$\");\n      if (b.columnName) address = address + b.columnName;else if (b.columnNumber) address = address + this.columnNumberToName(b.columnNumber);\n      if (b.rowAnchored) address = \"\".concat(address, \"$\");\n      if (b.rowNumber) address = address + b.rowNumber;\n    }\n\n    return address;\n  }\n};","'use strict'; // limit of Crypto.getRandomValues()\n// https://developer.mozilla.org/en-US/docs/Web/API/Crypto/getRandomValues\n\nvar MAX_BYTES = 65536; // Node supports requesting up to this number of bytes\n// https://github.com/nodejs/node/blob/master/lib/internal/crypto/random.js#L48\n\nvar MAX_UINT32 = 4294967295;\n\nfunction oldBrowser() {\n  throw new Error('Secure random number generation is not supported by this browser.\\nUse Chrome, Firefox or Internet Explorer 11');\n}\n\nvar Buffer = require('safe-buffer').Buffer;\n\nvar crypto = global.crypto || global.msCrypto;\n\nif (crypto && crypto.getRandomValues) {\n  module.exports = randomBytes;\n} else {\n  module.exports = oldBrowser;\n}\n\nfunction randomBytes(size, cb) {\n  // phantomjs needs to throw\n  if (size > MAX_UINT32) throw new RangeError('requested too many random bytes');\n  var bytes = Buffer.allocUnsafe(size);\n\n  if (size > 0) {\n    // getRandomValues fails on IE if size == 0\n    if (size > MAX_BYTES) {\n      // this is the max bytes crypto.getRandomValues\n      // can do at once see https://developer.mozilla.org/en-US/docs/Web/API/window.crypto.getRandomValues\n      for (var generated = 0; generated < size; generated += MAX_BYTES) {\n        // buffer.slice automatically checks if the end is past the end of\n        // the buffer so we don't have to here\n        crypto.getRandomValues(bytes.slice(generated, generated + MAX_BYTES));\n      }\n    } else {\n      crypto.getRandomValues(bytes);\n    }\n  }\n\n  if (typeof cb === 'function') {\n    return process.nextTick(function () {\n      cb(null, bytes);\n    });\n  }\n\n  return bytes;\n}","var Buffer = require('safe-buffer').Buffer; // prototype class for hash functions\n\n\nfunction Hash(blockSize, finalSize) {\n  this._block = Buffer.alloc(blockSize);\n  this._finalSize = finalSize;\n  this._blockSize = blockSize;\n  this._len = 0;\n}\n\nHash.prototype.update = function (data, enc) {\n  if (typeof data === 'string') {\n    enc = enc || 'utf8';\n    data = Buffer.from(data, enc);\n  }\n\n  var block = this._block;\n  var blockSize = this._blockSize;\n  var length = data.length;\n  var accum = this._len;\n\n  for (var offset = 0; offset < length;) {\n    var assigned = accum % blockSize;\n    var remainder = Math.min(length - offset, blockSize - assigned);\n\n    for (var i = 0; i < remainder; i++) {\n      block[assigned + i] = data[offset + i];\n    }\n\n    accum += remainder;\n    offset += remainder;\n\n    if (accum % blockSize === 0) {\n      this._update(block);\n    }\n  }\n\n  this._len += length;\n  return this;\n};\n\nHash.prototype.digest = function (enc) {\n  var rem = this._len % this._blockSize;\n  this._block[rem] = 0x80; // zero (rem + 1) trailing bits, where (rem + 1) is the smallest\n  // non-negative solution to the equation (length + 1 + (rem + 1)) === finalSize mod blockSize\n\n  this._block.fill(0, rem + 1);\n\n  if (rem >= this._finalSize) {\n    this._update(this._block);\n\n    this._block.fill(0);\n  }\n\n  var bits = this._len * 8; // uint32\n\n  if (bits <= 0xffffffff) {\n    this._block.writeUInt32BE(bits, this._blockSize - 4); // uint64\n\n  } else {\n    var lowBits = (bits & 0xffffffff) >>> 0;\n    var highBits = (bits - lowBits) / 0x100000000;\n\n    this._block.writeUInt32BE(highBits, this._blockSize - 8);\n\n    this._block.writeUInt32BE(lowBits, this._blockSize - 4);\n  }\n\n  this._update(this._block);\n\n  var hash = this._hash();\n\n  return enc ? hash.toString(enc) : hash;\n};\n\nHash.prototype._update = function () {\n  throw new Error('_update must be implemented by subclass');\n};\n\nmodule.exports = Hash;","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\nmodule.exports = Stream;\n\nvar EE = require('events').EventEmitter;\n\nvar inherits = require('inherits');\n\ninherits(Stream, EE);\nStream.Readable = require('readable-stream/readable.js');\nStream.Writable = require('readable-stream/writable.js');\nStream.Duplex = require('readable-stream/duplex.js');\nStream.Transform = require('readable-stream/transform.js');\nStream.PassThrough = require('readable-stream/passthrough.js'); // Backwards-compat with node 0.4.x\n\nStream.Stream = Stream; // old-style streams.  Note that the pipe method (the only relevant\n// part of this class) is overridden in the Readable class.\n\nfunction Stream() {\n  EE.call(this);\n}\n\nStream.prototype.pipe = function (dest, options) {\n  var source = this;\n\n  function ondata(chunk) {\n    if (dest.writable) {\n      if (false === dest.write(chunk) && source.pause) {\n        source.pause();\n      }\n    }\n  }\n\n  source.on('data', ondata);\n\n  function ondrain() {\n    if (source.readable && source.resume) {\n      source.resume();\n    }\n  }\n\n  dest.on('drain', ondrain); // If the 'end' option is not supplied, dest.end() will be called when\n  // source gets the 'end' or 'close' events.  Only dest.end() once.\n\n  if (!dest._isStdio && (!options || options.end !== false)) {\n    source.on('end', onend);\n    source.on('close', onclose);\n  }\n\n  var didOnEnd = false;\n\n  function onend() {\n    if (didOnEnd) return;\n    didOnEnd = true;\n    dest.end();\n  }\n\n  function onclose() {\n    if (didOnEnd) return;\n    didOnEnd = true;\n    if (typeof dest.destroy === 'function') dest.destroy();\n  } // don't leave dangling pipes when there are errors.\n\n\n  function onerror(er) {\n    cleanup();\n\n    if (EE.listenerCount(this, 'error') === 0) {\n      throw er; // Unhandled stream error in pipe.\n    }\n  }\n\n  source.on('error', onerror);\n  dest.on('error', onerror); // remove all the event listeners that were added.\n\n  function cleanup() {\n    source.removeListener('data', ondata);\n    dest.removeListener('drain', ondrain);\n    source.removeListener('end', onend);\n    source.removeListener('close', onclose);\n    source.removeListener('error', onerror);\n    dest.removeListener('error', onerror);\n    source.removeListener('end', cleanup);\n    source.removeListener('close', cleanup);\n    dest.removeListener('close', cleanup);\n  }\n\n  source.on('end', cleanup);\n  source.on('close', cleanup);\n  dest.on('close', cleanup);\n  dest.emit('pipe', source); // Allow for unix-like usage: A.pipe(B).pipe(C)\n\n  return dest;\n};","function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n// NOTE: These type checking functions intentionally don't use `instanceof`\n// because it is fragile and can be easily faked with `Object.create()`.\nfunction isArray(arg) {\n  if (Array.isArray) {\n    return Array.isArray(arg);\n  }\n\n  return objectToString(arg) === '[object Array]';\n}\n\nexports.isArray = isArray;\n\nfunction isBoolean(arg) {\n  return typeof arg === 'boolean';\n}\n\nexports.isBoolean = isBoolean;\n\nfunction isNull(arg) {\n  return arg === null;\n}\n\nexports.isNull = isNull;\n\nfunction isNullOrUndefined(arg) {\n  return arg == null;\n}\n\nexports.isNullOrUndefined = isNullOrUndefined;\n\nfunction isNumber(arg) {\n  return typeof arg === 'number';\n}\n\nexports.isNumber = isNumber;\n\nfunction isString(arg) {\n  return typeof arg === 'string';\n}\n\nexports.isString = isString;\n\nfunction isSymbol(arg) {\n  return _typeof(arg) === 'symbol';\n}\n\nexports.isSymbol = isSymbol;\n\nfunction isUndefined(arg) {\n  return arg === void 0;\n}\n\nexports.isUndefined = isUndefined;\n\nfunction isRegExp(re) {\n  return objectToString(re) === '[object RegExp]';\n}\n\nexports.isRegExp = isRegExp;\n\nfunction isObject(arg) {\n  return _typeof(arg) === 'object' && arg !== null;\n}\n\nexports.isObject = isObject;\n\nfunction isDate(d) {\n  return objectToString(d) === '[object Date]';\n}\n\nexports.isDate = isDate;\n\nfunction isError(e) {\n  return objectToString(e) === '[object Error]' || e instanceof Error;\n}\n\nexports.isError = isError;\n\nfunction isFunction(arg) {\n  return typeof arg === 'function';\n}\n\nexports.isFunction = isFunction;\n\nfunction isPrimitive(arg) {\n  return arg === null || typeof arg === 'boolean' || typeof arg === 'number' || typeof arg === 'string' || _typeof(arg) === 'symbol' || // ES6 symbol\n  typeof arg === 'undefined';\n}\n\nexports.isPrimitive = isPrimitive;\nexports.isBuffer = Buffer.isBuffer;\n\nfunction objectToString(o) {\n  return Object.prototype.toString.call(o);\n}","/* global Promise */\n'use strict'; // load the global object first:\n// - it should be better integrated in the system (unhandledRejection in node)\n// - the environment may have a custom Promise implementation (see zone.js)\n\nvar ES6Promise = null;\n\nif (typeof Promise !== \"undefined\") {\n  ES6Promise = Promise;\n} else {\n  ES6Promise = require(\"lie\");\n}\n/**\n * Let the user use/change some implementations.\n */\n\n\nmodule.exports = {\n  Promise: ES6Promise\n};","'use strict';\n\nvar inherits = require('inherits');\n\nvar MD5 = require('md5.js');\n\nvar RIPEMD160 = require('ripemd160');\n\nvar sha = require('sha.js');\n\nvar Base = require('cipher-base');\n\nfunction Hash(hash) {\n  Base.call(this, 'digest');\n  this._hash = hash;\n}\n\ninherits(Hash, Base);\n\nHash.prototype._update = function (data) {\n  this._hash.update(data);\n};\n\nHash.prototype._final = function () {\n  return this._hash.digest();\n};\n\nmodule.exports = function createHash(alg) {\n  alg = alg.toLowerCase();\n  if (alg === 'md5') return new MD5();\n  if (alg === 'rmd160' || alg === 'ripemd160') return new RIPEMD160();\n  return new Hash(sha(alg));\n};","module.exports = function xor(a, b) {\n  var length = Math.min(a.length, b.length);\n  var buffer = new Buffer(length);\n\n  for (var i = 0; i < length; ++i) {\n    buffer[i] = a[i] ^ b[i];\n  }\n\n  return buffer;\n};","'use strict';\n\nvar utils = require('./utils');\n\nvar assert = require('minimalistic-assert');\n\nfunction BlockHash() {\n  this.pending = null;\n  this.pendingTotal = 0;\n  this.blockSize = this.constructor.blockSize;\n  this.outSize = this.constructor.outSize;\n  this.hmacStrength = this.constructor.hmacStrength;\n  this.padLength = this.constructor.padLength / 8;\n  this.endian = 'big';\n  this._delta8 = this.blockSize / 8;\n  this._delta32 = this.blockSize / 32;\n}\n\nexports.BlockHash = BlockHash;\n\nBlockHash.prototype.update = function update(msg, enc) {\n  // Convert message to array, pad it, and join into 32bit blocks\n  msg = utils.toArray(msg, enc);\n  if (!this.pending) this.pending = msg;else this.pending = this.pending.concat(msg);\n  this.pendingTotal += msg.length; // Enough data, try updating\n\n  if (this.pending.length >= this._delta8) {\n    msg = this.pending; // Process pending data in blocks\n\n    var r = msg.length % this._delta8;\n    this.pending = msg.slice(msg.length - r, msg.length);\n    if (this.pending.length === 0) this.pending = null;\n    msg = utils.join32(msg, 0, msg.length - r, this.endian);\n\n    for (var i = 0; i < msg.length; i += this._delta32) {\n      this._update(msg, i, i + this._delta32);\n    }\n  }\n\n  return this;\n};\n\nBlockHash.prototype.digest = function digest(enc) {\n  this.update(this._pad());\n  assert(this.pending === null);\n  return this._digest(enc);\n};\n\nBlockHash.prototype._pad = function pad() {\n  var len = this.pendingTotal;\n  var bytes = this._delta8;\n  var k = bytes - (len + this.padLength) % bytes;\n  var res = new Array(k + this.padLength);\n  res[0] = 0x80;\n\n  for (var i = 1; i < k; i++) {\n    res[i] = 0;\n  } // Append length\n\n\n  len <<= 3;\n\n  if (this.endian === 'big') {\n    for (var t = 8; t < this.padLength; t++) {\n      res[i++] = 0;\n    }\n\n    res[i++] = 0;\n    res[i++] = 0;\n    res[i++] = 0;\n    res[i++] = 0;\n    res[i++] = len >>> 24 & 0xff;\n    res[i++] = len >>> 16 & 0xff;\n    res[i++] = len >>> 8 & 0xff;\n    res[i++] = len & 0xff;\n  } else {\n    res[i++] = len & 0xff;\n    res[i++] = len >>> 8 & 0xff;\n    res[i++] = len >>> 16 & 0xff;\n    res[i++] = len >>> 24 & 0xff;\n    res[i++] = 0;\n    res[i++] = 0;\n    res[i++] = 0;\n    res[i++] = 0;\n\n    for (t = 8; t < this.padLength; t++) {\n      res[i++] = 0;\n    }\n  }\n\n  return res;\n};","var asn1 = exports;\nasn1.bignum = require('bn.js');\nasn1.define = require('./asn1/api').define;\nasn1.base = require('./asn1/base');\nasn1.constants = require('./asn1/constants');\nasn1.decoders = require('./asn1/decoders');\nasn1.encoders = require('./asn1/encoders');","var base = exports;\nbase.Reporter = require('./reporter').Reporter;\nbase.DecoderBuffer = require('./buffer').DecoderBuffer;\nbase.EncoderBuffer = require('./buffer').EncoderBuffer;\nbase.Node = require('./node');","var util = require('./util');\n\nvar EncodingTable = require('./encoding-table');\n\nvar hasOwnProperty = Object.prototype.hasOwnProperty; // Alternate character when can't detect\n\nexports.UNKNOWN_CHARACTER = 63; // '?'\n\nvar HAS_TYPED = exports.HAS_TYPED = typeof Uint8Array !== 'undefined' && typeof Uint16Array !== 'undefined'; // Test for String.fromCharCode.apply\n\nvar CAN_CHARCODE_APPLY = false;\nvar CAN_CHARCODE_APPLY_TYPED = false;\n\ntry {\n  if (String.fromCharCode.apply(null, [0x61]) === 'a') {\n    CAN_CHARCODE_APPLY = true;\n  }\n} catch (e) {}\n\nif (HAS_TYPED) {\n  try {\n    if (String.fromCharCode.apply(null, new Uint8Array([0x61])) === 'a') {\n      CAN_CHARCODE_APPLY_TYPED = true;\n    }\n  } catch (e) {}\n}\n\nexports.CAN_CHARCODE_APPLY = CAN_CHARCODE_APPLY;\nexports.CAN_CHARCODE_APPLY_TYPED = CAN_CHARCODE_APPLY_TYPED; // Function.prototype.apply stack max range\n\nexports.APPLY_BUFFER_SIZE = 65533;\nexports.APPLY_BUFFER_SIZE_OK = null;\nvar EncodingNames = exports.EncodingNames = {\n  UTF32: {\n    order: 0\n  },\n  UTF32BE: {\n    alias: ['UCS4']\n  },\n  UTF32LE: null,\n  UTF16: {\n    order: 1\n  },\n  UTF16BE: {\n    alias: ['UCS2']\n  },\n  UTF16LE: null,\n  BINARY: {\n    order: 2\n  },\n  ASCII: {\n    order: 3,\n    alias: ['ISO646', 'CP367']\n  },\n  JIS: {\n    order: 4,\n    alias: ['ISO2022JP']\n  },\n  UTF8: {\n    order: 5\n  },\n  EUCJP: {\n    order: 6\n  },\n  SJIS: {\n    order: 7,\n    alias: ['CP932', 'MSKANJI', 'WINDOWS31J']\n  },\n  UNICODE: {\n    order: 8\n  }\n};\nvar EncodingAliases = {};\n\nexports.EncodingOrders = function () {\n  var aliases = EncodingAliases;\n  var names = util.getKeys(EncodingNames);\n  var orders = [];\n  var name, encoding, j, l;\n\n  for (var i = 0, len = names.length; i < len; i++) {\n    name = names[i];\n    aliases[name] = name;\n    encoding = EncodingNames[name];\n\n    if (encoding != null) {\n      if (typeof encoding.order !== 'undefined') {\n        orders[orders.length] = name;\n      }\n\n      if (encoding.alias) {\n        // Create encoding aliases\n        for (j = 0, l = encoding.alias.length; j < l; j++) {\n          aliases[encoding.alias[j]] = name;\n        }\n      }\n    }\n  }\n\n  orders.sort(function (a, b) {\n    return EncodingNames[a].order - EncodingNames[b].order;\n  });\n  return orders;\n}();\n\nfunction init_JIS_TO_UTF8_TABLE() {\n  if (EncodingTable.JIS_TO_UTF8_TABLE === null) {\n    EncodingTable.JIS_TO_UTF8_TABLE = {};\n    var keys = util.getKeys(EncodingTable.UTF8_TO_JIS_TABLE);\n    var i = 0;\n    var len = keys.length;\n    var key, value;\n\n    for (; i < len; i++) {\n      key = keys[i];\n      value = EncodingTable.UTF8_TO_JIS_TABLE[key];\n\n      if (value > 0x5F) {\n        EncodingTable.JIS_TO_UTF8_TABLE[value] = key | 0;\n      }\n    }\n\n    EncodingTable.JISX0212_TO_UTF8_TABLE = {};\n    keys = util.getKeys(EncodingTable.UTF8_TO_JISX0212_TABLE);\n    len = keys.length;\n\n    for (i = 0; i < len; i++) {\n      key = keys[i];\n      value = EncodingTable.UTF8_TO_JISX0212_TABLE[key];\n      EncodingTable.JISX0212_TO_UTF8_TABLE[value] = key | 0;\n    }\n  }\n}\n\nexports.init_JIS_TO_UTF8_TABLE = init_JIS_TO_UTF8_TABLE;\n/**\n * Assign the internal encoding name from the argument encoding name\n */\n\nfunction assignEncodingName(target) {\n  var name = '';\n  var expect = ('' + target).toUpperCase().replace(/[^A-Z0-9]+/g, '');\n  var aliasNames = util.getKeys(EncodingAliases);\n  var len = aliasNames.length;\n  var hit = 0;\n  var encoding, encodingLen, j;\n\n  for (var i = 0; i < len; i++) {\n    encoding = aliasNames[i];\n\n    if (encoding === expect) {\n      name = encoding;\n      break;\n    }\n\n    encodingLen = encoding.length;\n\n    for (j = hit; j < encodingLen; j++) {\n      if (encoding.slice(0, j) === expect.slice(0, j) || encoding.slice(-j) === expect.slice(-j)) {\n        name = encoding;\n        hit = j;\n      }\n    }\n  }\n\n  if (hasOwnProperty.call(EncodingAliases, name)) {\n    return EncodingAliases[name];\n  }\n\n  return name;\n}\n\nexports.assignEncodingName = assignEncodingName;","function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nvar config = require('./config');\n\nvar fromCharCode = String.fromCharCode;\nvar slice = Array.prototype.slice;\nvar toString = Object.prototype.toString;\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\n\nfunction isObject(x) {\n  var type = _typeof(x);\n\n  return type === 'function' || type === 'object' && !!x;\n}\n\nexports.isObject = isObject;\n\nfunction isArray(x) {\n  return Array.isArray ? Array.isArray(x) : toString.call(x) === '[object Array]';\n}\n\nexports.isArray = isArray;\n\nfunction isString(x) {\n  return typeof x === 'string' || toString.call(x) === '[object String]';\n}\n\nexports.isString = isString;\n\nfunction getKeys(object) {\n  if (Object.keys) {\n    return Object.keys(object);\n  }\n\n  var keys = [];\n\n  for (var key in object) {\n    if (hasOwnProperty.call(object, key)) {\n      keys[keys.length] = key;\n    }\n  }\n\n  return keys;\n}\n\nexports.getKeys = getKeys;\n\nfunction createBuffer(bits, size) {\n  if (!config.HAS_TYPED) {\n    return new Array(size);\n  }\n\n  switch (bits) {\n    case 8:\n      return new Uint8Array(size);\n\n    case 16:\n      return new Uint16Array(size);\n  }\n}\n\nexports.createBuffer = createBuffer;\n\nfunction stringToBuffer(string) {\n  var length = string.length;\n  var buffer = createBuffer(16, length);\n\n  for (var i = 0; i < length; i++) {\n    buffer[i] = string.charCodeAt(i);\n  }\n\n  return buffer;\n}\n\nexports.stringToBuffer = stringToBuffer;\n\nfunction codeToString_fast(code) {\n  if (config.CAN_CHARCODE_APPLY && config.CAN_CHARCODE_APPLY_TYPED) {\n    var len = code && code.length;\n\n    if (len < config.APPLY_BUFFER_SIZE && config.APPLY_BUFFER_SIZE_OK) {\n      return fromCharCode.apply(null, code);\n    }\n\n    if (config.APPLY_BUFFER_SIZE_OK === null) {\n      try {\n        var s = fromCharCode.apply(null, code);\n\n        if (len > config.APPLY_BUFFER_SIZE) {\n          config.APPLY_BUFFER_SIZE_OK = true;\n        }\n\n        return s;\n      } catch (e) {\n        // Ignore RangeError: arguments too large\n        config.APPLY_BUFFER_SIZE_OK = false;\n      }\n    }\n  }\n\n  return codeToString_chunked(code);\n}\n\nexports.codeToString_fast = codeToString_fast;\n\nfunction codeToString_chunked(code) {\n  var string = '';\n  var length = code && code.length;\n  var i = 0;\n  var sub;\n\n  while (i < length) {\n    if (code.subarray) {\n      sub = code.subarray(i, i + config.APPLY_BUFFER_SIZE);\n    } else {\n      sub = code.slice(i, i + config.APPLY_BUFFER_SIZE);\n    }\n\n    i += config.APPLY_BUFFER_SIZE;\n\n    if (config.APPLY_BUFFER_SIZE_OK) {\n      string += fromCharCode.apply(null, sub);\n      continue;\n    }\n\n    if (config.APPLY_BUFFER_SIZE_OK === null) {\n      try {\n        string += fromCharCode.apply(null, sub);\n\n        if (sub.length > config.APPLY_BUFFER_SIZE) {\n          config.APPLY_BUFFER_SIZE_OK = true;\n        }\n\n        continue;\n      } catch (e) {\n        config.APPLY_BUFFER_SIZE_OK = false;\n      }\n    }\n\n    return codeToString_slow(code);\n  }\n\n  return string;\n}\n\nexports.codeToString_chunked = codeToString_chunked;\n\nfunction codeToString_slow(code) {\n  var string = '';\n  var length = code && code.length;\n\n  for (var i = 0; i < length; i++) {\n    string += fromCharCode(code[i]);\n  }\n\n  return string;\n}\n\nexports.codeToString_slow = codeToString_slow;\n\nfunction stringToCode(string) {\n  var code = [];\n  var len = string && string.length;\n\n  for (var i = 0; i < len; i++) {\n    code[i] = string.charCodeAt(i);\n  }\n\n  return code;\n}\n\nexports.stringToCode = stringToCode;\n\nfunction codeToBuffer(code) {\n  if (config.HAS_TYPED) {\n    // Use Uint16Array for Unicode codepoint.\n    return new Uint16Array(code);\n  } else {\n    if (isArray(code)) {\n      return code;\n    }\n  }\n\n  var length = code && code.length;\n  var buffer = [];\n\n  for (var i = 0; i < length; i++) {\n    buffer[i] = code[i];\n  }\n\n  return buffer;\n}\n\nexports.codeToBuffer = codeToBuffer;\n\nfunction bufferToCode(buffer) {\n  if (isArray(buffer)) {\n    return buffer;\n  }\n\n  return slice.call(buffer);\n}\n\nexports.bufferToCode = bufferToCode; // Base64\n\n/* Copyright (C) 1999 Masanao Izumo <iz@onicos.co.jp>\n * Version: 1.0\n * LastModified: Dec 25 1999\n * This library is free.  You can redistribute it and/or modify it.\n */\n// -- Masanao Izumo Copyright 1999 \"free\"\n// Modified to add support for Binary Array for Encoding.js\n\nvar base64EncodeChars = [65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 43, 47];\nvar base64DecodeChars = [-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 62, -1, -1, -1, 63, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, -1, -1, -1, -1, -1, -1, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, -1, -1, -1, -1, -1, -1, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, -1, -1, -1, -1, -1];\nvar base64EncodePadding = '='.charCodeAt(0);\n\nfunction base64encode(data) {\n  var out, i, len;\n  var c1, c2, c3;\n  len = data && data.length;\n  i = 0;\n  out = [];\n\n  while (i < len) {\n    c1 = data[i++];\n\n    if (i == len) {\n      out[out.length] = base64EncodeChars[c1 >> 2];\n      out[out.length] = base64EncodeChars[(c1 & 0x3) << 4];\n      out[out.length] = base64EncodePadding;\n      out[out.length] = base64EncodePadding;\n      break;\n    }\n\n    c2 = data[i++];\n\n    if (i == len) {\n      out[out.length] = base64EncodeChars[c1 >> 2];\n      out[out.length] = base64EncodeChars[(c1 & 0x3) << 4 | (c2 & 0xF0) >> 4];\n      out[out.length] = base64EncodeChars[(c2 & 0xF) << 2];\n      out[out.length] = base64EncodePadding;\n      break;\n    }\n\n    c3 = data[i++];\n    out[out.length] = base64EncodeChars[c1 >> 2];\n    out[out.length] = base64EncodeChars[(c1 & 0x3) << 4 | (c2 & 0xF0) >> 4];\n    out[out.length] = base64EncodeChars[(c2 & 0xF) << 2 | (c3 & 0xC0) >> 6];\n    out[out.length] = base64EncodeChars[c3 & 0x3F];\n  }\n\n  return codeToString_fast(out);\n}\n\nexports.base64encode = base64encode;\n\nfunction base64decode(str) {\n  var c1, c2, c3, c4;\n  var i, len, out;\n  len = str && str.length;\n  i = 0;\n  out = [];\n\n  while (i < len) {\n    /* c1 */\n    do {\n      c1 = base64DecodeChars[str.charCodeAt(i++) & 0xFF];\n    } while (i < len && c1 == -1);\n\n    if (c1 == -1) {\n      break;\n    }\n    /* c2 */\n\n\n    do {\n      c2 = base64DecodeChars[str.charCodeAt(i++) & 0xFF];\n    } while (i < len && c2 == -1);\n\n    if (c2 == -1) {\n      break;\n    }\n\n    out[out.length] = c1 << 2 | (c2 & 0x30) >> 4;\n    /* c3 */\n\n    do {\n      c3 = str.charCodeAt(i++) & 0xFF;\n\n      if (c3 == 61) {\n        return out;\n      }\n\n      c3 = base64DecodeChars[c3];\n    } while (i < len && c3 == -1);\n\n    if (c3 == -1) {\n      break;\n    }\n\n    out[out.length] = (c2 & 0xF) << 4 | (c3 & 0x3C) >> 2;\n    /* c4 */\n\n    do {\n      c4 = str.charCodeAt(i++) & 0xFF;\n\n      if (c4 == 61) {\n        return out;\n      }\n\n      c4 = base64DecodeChars[c4];\n    } while (i < len && c4 == -1);\n\n    if (c4 == -1) {\n      break;\n    }\n\n    out[out.length] = (c3 & 0x03) << 6 | c4;\n  }\n\n  return out;\n}\n\nexports.base64decode = base64decode;","var scope = typeof global !== \"undefined\" && global || typeof self !== \"undefined\" && self || window;\nvar apply = Function.prototype.apply; // DOM APIs, for completeness\n\nexports.setTimeout = function () {\n  return new Timeout(apply.call(setTimeout, scope, arguments), clearTimeout);\n};\n\nexports.setInterval = function () {\n  return new Timeout(apply.call(setInterval, scope, arguments), clearInterval);\n};\n\nexports.clearTimeout = exports.clearInterval = function (timeout) {\n  if (timeout) {\n    timeout.close();\n  }\n};\n\nfunction Timeout(id, clearFn) {\n  this._id = id;\n  this._clearFn = clearFn;\n}\n\nTimeout.prototype.unref = Timeout.prototype.ref = function () {};\n\nTimeout.prototype.close = function () {\n  this._clearFn.call(scope, this._id);\n}; // Does not start the time, just sets up the members needed.\n\n\nexports.enroll = function (item, msecs) {\n  clearTimeout(item._idleTimeoutId);\n  item._idleTimeout = msecs;\n};\n\nexports.unenroll = function (item) {\n  clearTimeout(item._idleTimeoutId);\n  item._idleTimeout = -1;\n};\n\nexports._unrefActive = exports.active = function (item) {\n  clearTimeout(item._idleTimeoutId);\n  var msecs = item._idleTimeout;\n\n  if (msecs >= 0) {\n    item._idleTimeoutId = setTimeout(function onTimeout() {\n      if (item._onTimeout) item._onTimeout();\n    }, msecs);\n  }\n}; // setimmediate attaches itself to the global object\n\n\nrequire(\"setimmediate\"); // On some exotic environments, it's not clear which object `setimmediate` was\n// able to install onto.  Search each possibility in the same order as the\n// `setimmediate` library.\n\n\nexports.setImmediate = typeof self !== \"undefined\" && self.setImmediate || typeof global !== \"undefined\" && global.setImmediate || this && this.setImmediate;\nexports.clearImmediate = typeof self !== \"undefined\" && self.clearImmediate || typeof global !== \"undefined\" && global.clearImmediate || this && this.clearImmediate;","\"use strict\";\n\nvar JSZip = require(\"jszip\");\n/**\r\n * External modules.\r\n * @private\r\n */\n\n\nmodule.exports = {\n  /**\r\n   * The Promise library.\r\n   * @type {Promise}\r\n   */\n  get Promise() {\n    return JSZip.external.Promise;\n  },\n\n  set Promise(Promise) {\n    JSZip.external.Promise = Promise;\n  }\n\n};","'use strict';\n\nif (typeof process === 'undefined' || !process.version || process.version.indexOf('v0.') === 0 || process.version.indexOf('v1.') === 0 && process.version.indexOf('v1.8.') !== 0) {\n  module.exports = {\n    nextTick: nextTick\n  };\n} else {\n  module.exports = process;\n}\n\nfunction nextTick(fn, arg1, arg2, arg3) {\n  if (typeof fn !== 'function') {\n    throw new TypeError('\"callback\" argument must be a function');\n  }\n\n  var len = arguments.length;\n  var args, i;\n\n  switch (len) {\n    case 0:\n    case 1:\n      return process.nextTick(fn);\n\n    case 2:\n      return process.nextTick(function afterTickOne() {\n        fn.call(null, arg1);\n      });\n\n    case 3:\n      return process.nextTick(function afterTickTwo() {\n        fn.call(null, arg1, arg2);\n      });\n\n    case 4:\n      return process.nextTick(function afterTickThree() {\n        fn.call(null, arg1, arg2, arg3);\n      });\n\n    default:\n      args = new Array(len - 1);\n      i = 0;\n\n      while (i < args.length) {\n        args[i++] = arguments[i];\n      }\n\n      return process.nextTick(function afterTick() {\n        fn.apply(null, args);\n      });\n  }\n}","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n'use strict';\n/*<replacement>*/\n\nvar Buffer = require('safe-buffer').Buffer;\n/*</replacement>*/\n\n\nvar isEncoding = Buffer.isEncoding || function (encoding) {\n  encoding = '' + encoding;\n\n  switch (encoding && encoding.toLowerCase()) {\n    case 'hex':\n    case 'utf8':\n    case 'utf-8':\n    case 'ascii':\n    case 'binary':\n    case 'base64':\n    case 'ucs2':\n    case 'ucs-2':\n    case 'utf16le':\n    case 'utf-16le':\n    case 'raw':\n      return true;\n\n    default:\n      return false;\n  }\n};\n\nfunction _normalizeEncoding(enc) {\n  if (!enc) return 'utf8';\n  var retried;\n\n  while (true) {\n    switch (enc) {\n      case 'utf8':\n      case 'utf-8':\n        return 'utf8';\n\n      case 'ucs2':\n      case 'ucs-2':\n      case 'utf16le':\n      case 'utf-16le':\n        return 'utf16le';\n\n      case 'latin1':\n      case 'binary':\n        return 'latin1';\n\n      case 'base64':\n      case 'ascii':\n      case 'hex':\n        return enc;\n\n      default:\n        if (retried) return; // undefined\n\n        enc = ('' + enc).toLowerCase();\n        retried = true;\n    }\n  }\n}\n\n; // Do not cache `Buffer.isEncoding` when checking encoding names as some\n// modules monkey-patch it to support additional encodings\n\nfunction normalizeEncoding(enc) {\n  var nenc = _normalizeEncoding(enc);\n\n  if (typeof nenc !== 'string' && (Buffer.isEncoding === isEncoding || !isEncoding(enc))) throw new Error('Unknown encoding: ' + enc);\n  return nenc || enc;\n} // StringDecoder provides an interface for efficiently splitting a series of\n// buffers into a series of JS strings without breaking apart multi-byte\n// characters.\n\n\nexports.StringDecoder = StringDecoder;\n\nfunction StringDecoder(encoding) {\n  this.encoding = normalizeEncoding(encoding);\n  var nb;\n\n  switch (this.encoding) {\n    case 'utf16le':\n      this.text = utf16Text;\n      this.end = utf16End;\n      nb = 4;\n      break;\n\n    case 'utf8':\n      this.fillLast = utf8FillLast;\n      nb = 4;\n      break;\n\n    case 'base64':\n      this.text = base64Text;\n      this.end = base64End;\n      nb = 3;\n      break;\n\n    default:\n      this.write = simpleWrite;\n      this.end = simpleEnd;\n      return;\n  }\n\n  this.lastNeed = 0;\n  this.lastTotal = 0;\n  this.lastChar = Buffer.allocUnsafe(nb);\n}\n\nStringDecoder.prototype.write = function (buf) {\n  if (buf.length === 0) return '';\n  var r;\n  var i;\n\n  if (this.lastNeed) {\n    r = this.fillLast(buf);\n    if (r === undefined) return '';\n    i = this.lastNeed;\n    this.lastNeed = 0;\n  } else {\n    i = 0;\n  }\n\n  if (i < buf.length) return r ? r + this.text(buf, i) : this.text(buf, i);\n  return r || '';\n};\n\nStringDecoder.prototype.end = utf8End; // Returns only complete characters in a Buffer\n\nStringDecoder.prototype.text = utf8Text; // Attempts to complete a partial non-UTF-8 character using bytes from a Buffer\n\nStringDecoder.prototype.fillLast = function (buf) {\n  if (this.lastNeed <= buf.length) {\n    buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, this.lastNeed);\n    return this.lastChar.toString(this.encoding, 0, this.lastTotal);\n  }\n\n  buf.copy(this.lastChar, this.lastTotal - this.lastNeed, 0, buf.length);\n  this.lastNeed -= buf.length;\n}; // Checks the type of a UTF-8 byte, whether it's ASCII, a leading byte, or a\n// continuation byte. If an invalid byte is detected, -2 is returned.\n\n\nfunction utf8CheckByte(_byte) {\n  if (_byte <= 0x7F) return 0;else if (_byte >> 5 === 0x06) return 2;else if (_byte >> 4 === 0x0E) return 3;else if (_byte >> 3 === 0x1E) return 4;\n  return _byte >> 6 === 0x02 ? -1 : -2;\n} // Checks at most 3 bytes at the end of a Buffer in order to detect an\n// incomplete multi-byte UTF-8 character. The total number of bytes (2, 3, or 4)\n// needed to complete the UTF-8 character (if applicable) are returned.\n\n\nfunction utf8CheckIncomplete(self, buf, i) {\n  var j = buf.length - 1;\n  if (j < i) return 0;\n  var nb = utf8CheckByte(buf[j]);\n\n  if (nb >= 0) {\n    if (nb > 0) self.lastNeed = nb - 1;\n    return nb;\n  }\n\n  if (--j < i || nb === -2) return 0;\n  nb = utf8CheckByte(buf[j]);\n\n  if (nb >= 0) {\n    if (nb > 0) self.lastNeed = nb - 2;\n    return nb;\n  }\n\n  if (--j < i || nb === -2) return 0;\n  nb = utf8CheckByte(buf[j]);\n\n  if (nb >= 0) {\n    if (nb > 0) {\n      if (nb === 2) nb = 0;else self.lastNeed = nb - 3;\n    }\n\n    return nb;\n  }\n\n  return 0;\n} // Validates as many continuation bytes for a multi-byte UTF-8 character as\n// needed or are available. If we see a non-continuation byte where we expect\n// one, we \"replace\" the validated continuation bytes we've seen so far with\n// a single UTF-8 replacement character ('\\ufffd'), to match v8's UTF-8 decoding\n// behavior. The continuation byte check is included three times in the case\n// where all of the continuation bytes for a character exist in the same buffer.\n// It is also done this way as a slight performance increase instead of using a\n// loop.\n\n\nfunction utf8CheckExtraBytes(self, buf, p) {\n  if ((buf[0] & 0xC0) !== 0x80) {\n    self.lastNeed = 0;\n    return \"\\uFFFD\";\n  }\n\n  if (self.lastNeed > 1 && buf.length > 1) {\n    if ((buf[1] & 0xC0) !== 0x80) {\n      self.lastNeed = 1;\n      return \"\\uFFFD\";\n    }\n\n    if (self.lastNeed > 2 && buf.length > 2) {\n      if ((buf[2] & 0xC0) !== 0x80) {\n        self.lastNeed = 2;\n        return \"\\uFFFD\";\n      }\n    }\n  }\n} // Attempts to complete a multi-byte UTF-8 character using bytes from a Buffer.\n\n\nfunction utf8FillLast(buf) {\n  var p = this.lastTotal - this.lastNeed;\n  var r = utf8CheckExtraBytes(this, buf, p);\n  if (r !== undefined) return r;\n\n  if (this.lastNeed <= buf.length) {\n    buf.copy(this.lastChar, p, 0, this.lastNeed);\n    return this.lastChar.toString(this.encoding, 0, this.lastTotal);\n  }\n\n  buf.copy(this.lastChar, p, 0, buf.length);\n  this.lastNeed -= buf.length;\n} // Returns all complete UTF-8 characters in a Buffer. If the Buffer ended on a\n// partial character, the character's bytes are buffered until the required\n// number of bytes are available.\n\n\nfunction utf8Text(buf, i) {\n  var total = utf8CheckIncomplete(this, buf, i);\n  if (!this.lastNeed) return buf.toString('utf8', i);\n  this.lastTotal = total;\n  var end = buf.length - (total - this.lastNeed);\n  buf.copy(this.lastChar, 0, end);\n  return buf.toString('utf8', i, end);\n} // For UTF-8, a replacement character is added when ending on a partial\n// character.\n\n\nfunction utf8End(buf) {\n  var r = buf && buf.length ? this.write(buf) : '';\n  if (this.lastNeed) return r + \"\\uFFFD\";\n  return r;\n} // UTF-16LE typically needs two bytes per character, but even if we have an even\n// number of bytes available, we need to check if we end on a leading/high\n// surrogate. In that case, we need to wait for the next two bytes in order to\n// decode the last character properly.\n\n\nfunction utf16Text(buf, i) {\n  if ((buf.length - i) % 2 === 0) {\n    var r = buf.toString('utf16le', i);\n\n    if (r) {\n      var c = r.charCodeAt(r.length - 1);\n\n      if (c >= 0xD800 && c <= 0xDBFF) {\n        this.lastNeed = 2;\n        this.lastTotal = 4;\n        this.lastChar[0] = buf[buf.length - 2];\n        this.lastChar[1] = buf[buf.length - 1];\n        return r.slice(0, -1);\n      }\n    }\n\n    return r;\n  }\n\n  this.lastNeed = 1;\n  this.lastTotal = 2;\n  this.lastChar[0] = buf[buf.length - 1];\n  return buf.toString('utf16le', i, buf.length - 1);\n} // For UTF-16LE we do not explicitly append special replacement characters if we\n// end on a partial character, we simply let v8 handle that.\n\n\nfunction utf16End(buf) {\n  var r = buf && buf.length ? this.write(buf) : '';\n\n  if (this.lastNeed) {\n    var end = this.lastTotal - this.lastNeed;\n    return r + this.lastChar.toString('utf16le', 0, end);\n  }\n\n  return r;\n}\n\nfunction base64Text(buf, i) {\n  var n = (buf.length - i) % 3;\n  if (n === 0) return buf.toString('base64', i);\n  this.lastNeed = 3 - n;\n  this.lastTotal = 3;\n\n  if (n === 1) {\n    this.lastChar[0] = buf[buf.length - 1];\n  } else {\n    this.lastChar[0] = buf[buf.length - 2];\n    this.lastChar[1] = buf[buf.length - 1];\n  }\n\n  return buf.toString('base64', i, buf.length - n);\n}\n\nfunction base64End(buf) {\n  var r = buf && buf.length ? this.write(buf) : '';\n  if (this.lastNeed) return r + this.lastChar.toString('base64', 0, 3 - this.lastNeed);\n  return r;\n} // Pass bytes on through for single-byte encodings (e.g. ascii, latin1, hex)\n\n\nfunction simpleWrite(buf) {\n  return buf.toString(this.encoding);\n}\n\nfunction simpleEnd(buf) {\n  return buf && buf.length ? this.write(buf) : '';\n}","'use strict';\n\nmodule.exports = {\n  /**\n   * True if this is running in Nodejs, will be undefined in a browser.\n   * In a browser, browserify won't include this file and the whole module\n   * will be resolved an empty object.\n   */\n  isNode: typeof Buffer !== \"undefined\",\n\n  /**\n   * Create a new nodejs Buffer from an existing content.\n   * @param {Object} data the data to pass to the constructor.\n   * @param {String} encoding the encoding to use.\n   * @return {Buffer} a new Buffer.\n   */\n  newBufferFrom: function newBufferFrom(data, encoding) {\n    if (Buffer.from && Buffer.from !== Uint8Array.from) {\n      return Buffer.from(data, encoding);\n    } else {\n      if (typeof data === \"number\") {\n        // Safeguard for old Node.js versions. On newer versions,\n        // Buffer.from(number) / Buffer(number, encoding) already throw.\n        throw new Error(\"The \\\"data\\\" argument must not be a number\");\n      }\n\n      return new Buffer(data, encoding);\n    }\n  },\n\n  /**\n   * Create a new nodejs Buffer with the specified size.\n   * @param {Integer} size the size of the buffer.\n   * @return {Buffer} a new Buffer.\n   */\n  allocBuffer: function allocBuffer(size) {\n    if (Buffer.alloc) {\n      return Buffer.alloc(size);\n    } else {\n      var buf = new Buffer(size);\n      buf.fill(0);\n      return buf;\n    }\n  },\n\n  /**\n   * Find out if an object is a Buffer.\n   * @param {Object} b the object to test.\n   * @return {Boolean} true if the object is a Buffer, false otherwise.\n   */\n  isBuffer: function isBuffer(b) {\n    return Buffer.isBuffer(b);\n  },\n  isStream: function isStream(obj) {\n    return obj && typeof obj.on === \"function\" && typeof obj.pause === \"function\" && typeof obj.resume === \"function\";\n  }\n};","\"use strict\";\n\nvar _ = require(\"lodash\");\n/**\r\n * Convert a pattern to a RegExp.\r\n * @param {RegExp|string} pattern - The pattern to convert.\r\n * @returns {RegExp} The regex.\r\n * @private\r\n */\n\n\nmodule.exports = function (pattern) {\n  if (typeof pattern === \"string\") {\n    pattern = new RegExp(_.escapeRegExp(pattern), \"igm\");\n  }\n\n  pattern.lastIndex = 0;\n  return pattern;\n};","// based on the aes implimentation in triple sec\n// https://github.com/keybase/triplesec\n// which is in turn based on the one from crypto-js\n// https://code.google.com/p/crypto-js/\nvar Buffer = require('safe-buffer').Buffer;\n\nfunction asUInt32Array(buf) {\n  if (!Buffer.isBuffer(buf)) buf = Buffer.from(buf);\n  var len = buf.length / 4 | 0;\n  var out = new Array(len);\n\n  for (var i = 0; i < len; i++) {\n    out[i] = buf.readUInt32BE(i * 4);\n  }\n\n  return out;\n}\n\nfunction scrubVec(v) {\n  for (var i = 0; i < v.length; v++) {\n    v[i] = 0;\n  }\n}\n\nfunction cryptBlock(M, keySchedule, SUB_MIX, SBOX, nRounds) {\n  var SUB_MIX0 = SUB_MIX[0];\n  var SUB_MIX1 = SUB_MIX[1];\n  var SUB_MIX2 = SUB_MIX[2];\n  var SUB_MIX3 = SUB_MIX[3];\n  var s0 = M[0] ^ keySchedule[0];\n  var s1 = M[1] ^ keySchedule[1];\n  var s2 = M[2] ^ keySchedule[2];\n  var s3 = M[3] ^ keySchedule[3];\n  var t0, t1, t2, t3;\n  var ksRow = 4;\n\n  for (var round = 1; round < nRounds; round++) {\n    t0 = SUB_MIX0[s0 >>> 24] ^ SUB_MIX1[s1 >>> 16 & 0xff] ^ SUB_MIX2[s2 >>> 8 & 0xff] ^ SUB_MIX3[s3 & 0xff] ^ keySchedule[ksRow++];\n    t1 = SUB_MIX0[s1 >>> 24] ^ SUB_MIX1[s2 >>> 16 & 0xff] ^ SUB_MIX2[s3 >>> 8 & 0xff] ^ SUB_MIX3[s0 & 0xff] ^ keySchedule[ksRow++];\n    t2 = SUB_MIX0[s2 >>> 24] ^ SUB_MIX1[s3 >>> 16 & 0xff] ^ SUB_MIX2[s0 >>> 8 & 0xff] ^ SUB_MIX3[s1 & 0xff] ^ keySchedule[ksRow++];\n    t3 = SUB_MIX0[s3 >>> 24] ^ SUB_MIX1[s0 >>> 16 & 0xff] ^ SUB_MIX2[s1 >>> 8 & 0xff] ^ SUB_MIX3[s2 & 0xff] ^ keySchedule[ksRow++];\n    s0 = t0;\n    s1 = t1;\n    s2 = t2;\n    s3 = t3;\n  }\n\n  t0 = (SBOX[s0 >>> 24] << 24 | SBOX[s1 >>> 16 & 0xff] << 16 | SBOX[s2 >>> 8 & 0xff] << 8 | SBOX[s3 & 0xff]) ^ keySchedule[ksRow++];\n  t1 = (SBOX[s1 >>> 24] << 24 | SBOX[s2 >>> 16 & 0xff] << 16 | SBOX[s3 >>> 8 & 0xff] << 8 | SBOX[s0 & 0xff]) ^ keySchedule[ksRow++];\n  t2 = (SBOX[s2 >>> 24] << 24 | SBOX[s3 >>> 16 & 0xff] << 16 | SBOX[s0 >>> 8 & 0xff] << 8 | SBOX[s1 & 0xff]) ^ keySchedule[ksRow++];\n  t3 = (SBOX[s3 >>> 24] << 24 | SBOX[s0 >>> 16 & 0xff] << 16 | SBOX[s1 >>> 8 & 0xff] << 8 | SBOX[s2 & 0xff]) ^ keySchedule[ksRow++];\n  t0 = t0 >>> 0;\n  t1 = t1 >>> 0;\n  t2 = t2 >>> 0;\n  t3 = t3 >>> 0;\n  return [t0, t1, t2, t3];\n} // AES constants\n\n\nvar RCON = [0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36];\n\nvar G = function () {\n  // Compute double table\n  var d = new Array(256);\n\n  for (var j = 0; j < 256; j++) {\n    if (j < 128) {\n      d[j] = j << 1;\n    } else {\n      d[j] = j << 1 ^ 0x11b;\n    }\n  }\n\n  var SBOX = [];\n  var INV_SBOX = [];\n  var SUB_MIX = [[], [], [], []];\n  var INV_SUB_MIX = [[], [], [], []]; // Walk GF(2^8)\n\n  var x = 0;\n  var xi = 0;\n\n  for (var i = 0; i < 256; ++i) {\n    // Compute sbox\n    var sx = xi ^ xi << 1 ^ xi << 2 ^ xi << 3 ^ xi << 4;\n    sx = sx >>> 8 ^ sx & 0xff ^ 0x63;\n    SBOX[x] = sx;\n    INV_SBOX[sx] = x; // Compute multiplication\n\n    var x2 = d[x];\n    var x4 = d[x2];\n    var x8 = d[x4]; // Compute sub bytes, mix columns tables\n\n    var t = d[sx] * 0x101 ^ sx * 0x1010100;\n    SUB_MIX[0][x] = t << 24 | t >>> 8;\n    SUB_MIX[1][x] = t << 16 | t >>> 16;\n    SUB_MIX[2][x] = t << 8 | t >>> 24;\n    SUB_MIX[3][x] = t; // Compute inv sub bytes, inv mix columns tables\n\n    t = x8 * 0x1010101 ^ x4 * 0x10001 ^ x2 * 0x101 ^ x * 0x1010100;\n    INV_SUB_MIX[0][sx] = t << 24 | t >>> 8;\n    INV_SUB_MIX[1][sx] = t << 16 | t >>> 16;\n    INV_SUB_MIX[2][sx] = t << 8 | t >>> 24;\n    INV_SUB_MIX[3][sx] = t;\n\n    if (x === 0) {\n      x = xi = 1;\n    } else {\n      x = x2 ^ d[d[d[x8 ^ x2]]];\n      xi ^= d[d[xi]];\n    }\n  }\n\n  return {\n    SBOX: SBOX,\n    INV_SBOX: INV_SBOX,\n    SUB_MIX: SUB_MIX,\n    INV_SUB_MIX: INV_SUB_MIX\n  };\n}();\n\nfunction AES(key) {\n  this._key = asUInt32Array(key);\n\n  this._reset();\n}\n\nAES.blockSize = 4 * 4;\nAES.keySize = 256 / 8;\nAES.prototype.blockSize = AES.blockSize;\nAES.prototype.keySize = AES.keySize;\n\nAES.prototype._reset = function () {\n  var keyWords = this._key;\n  var keySize = keyWords.length;\n  var nRounds = keySize + 6;\n  var ksRows = (nRounds + 1) * 4;\n  var keySchedule = [];\n\n  for (var k = 0; k < keySize; k++) {\n    keySchedule[k] = keyWords[k];\n  }\n\n  for (k = keySize; k < ksRows; k++) {\n    var t = keySchedule[k - 1];\n\n    if (k % keySize === 0) {\n      t = t << 8 | t >>> 24;\n      t = G.SBOX[t >>> 24] << 24 | G.SBOX[t >>> 16 & 0xff] << 16 | G.SBOX[t >>> 8 & 0xff] << 8 | G.SBOX[t & 0xff];\n      t ^= RCON[k / keySize | 0] << 24;\n    } else if (keySize > 6 && k % keySize === 4) {\n      t = G.SBOX[t >>> 24] << 24 | G.SBOX[t >>> 16 & 0xff] << 16 | G.SBOX[t >>> 8 & 0xff] << 8 | G.SBOX[t & 0xff];\n    }\n\n    keySchedule[k] = keySchedule[k - keySize] ^ t;\n  }\n\n  var invKeySchedule = [];\n\n  for (var ik = 0; ik < ksRows; ik++) {\n    var ksR = ksRows - ik;\n    var tt = keySchedule[ksR - (ik % 4 ? 0 : 4)];\n\n    if (ik < 4 || ksR <= 4) {\n      invKeySchedule[ik] = tt;\n    } else {\n      invKeySchedule[ik] = G.INV_SUB_MIX[0][G.SBOX[tt >>> 24]] ^ G.INV_SUB_MIX[1][G.SBOX[tt >>> 16 & 0xff]] ^ G.INV_SUB_MIX[2][G.SBOX[tt >>> 8 & 0xff]] ^ G.INV_SUB_MIX[3][G.SBOX[tt & 0xff]];\n    }\n  }\n\n  this._nRounds = nRounds;\n  this._keySchedule = keySchedule;\n  this._invKeySchedule = invKeySchedule;\n};\n\nAES.prototype.encryptBlockRaw = function (M) {\n  M = asUInt32Array(M);\n  return cryptBlock(M, this._keySchedule, G.SUB_MIX, G.SBOX, this._nRounds);\n};\n\nAES.prototype.encryptBlock = function (M) {\n  var out = this.encryptBlockRaw(M);\n  var buf = Buffer.allocUnsafe(16);\n  buf.writeUInt32BE(out[0], 0);\n  buf.writeUInt32BE(out[1], 4);\n  buf.writeUInt32BE(out[2], 8);\n  buf.writeUInt32BE(out[3], 12);\n  return buf;\n};\n\nAES.prototype.decryptBlock = function (M) {\n  M = asUInt32Array(M); // swap\n\n  var m1 = M[1];\n  M[1] = M[3];\n  M[3] = m1;\n  var out = cryptBlock(M, this._invKeySchedule, G.INV_SUB_MIX, G.INV_SBOX, this._nRounds);\n  var buf = Buffer.allocUnsafe(16);\n  buf.writeUInt32BE(out[0], 0);\n  buf.writeUInt32BE(out[3], 4);\n  buf.writeUInt32BE(out[2], 8);\n  buf.writeUInt32BE(out[1], 12);\n  return buf;\n};\n\nAES.prototype.scrub = function () {\n  scrubVec(this._keySchedule);\n  scrubVec(this._invKeySchedule);\n  scrubVec(this._key);\n};\n\nmodule.exports.AES = AES;","var Buffer = require('safe-buffer').Buffer;\n\nvar MD5 = require('md5.js');\n/* eslint-disable camelcase */\n\n\nfunction EVP_BytesToKey(password, salt, keyBits, ivLen) {\n  if (!Buffer.isBuffer(password)) password = Buffer.from(password, 'binary');\n\n  if (salt) {\n    if (!Buffer.isBuffer(salt)) salt = Buffer.from(salt, 'binary');\n    if (salt.length !== 8) throw new RangeError('salt should be Buffer with 8 byte length');\n  }\n\n  var keyLen = keyBits / 8;\n  var key = Buffer.alloc(keyLen);\n  var iv = Buffer.alloc(ivLen || 0);\n  var tmp = Buffer.alloc(0);\n\n  while (keyLen > 0 || ivLen > 0) {\n    var hash = new MD5();\n    hash.update(tmp);\n    hash.update(password);\n    if (salt) hash.update(salt);\n    tmp = hash.digest();\n    var used = 0;\n\n    if (keyLen > 0) {\n      var keyStart = key.length - keyLen;\n      used = Math.min(keyLen, tmp.length);\n      tmp.copy(key, keyStart, 0, used);\n      keyLen -= used;\n    }\n\n    if (used < tmp.length && ivLen > 0) {\n      var ivStart = iv.length - ivLen;\n      var length = Math.min(ivLen, tmp.length - used);\n      tmp.copy(iv, ivStart, used, used + length);\n      ivLen -= length;\n    }\n  }\n\n  tmp.fill(0);\n  return {\n    key: key,\n    iv: iv\n  };\n}\n\nmodule.exports = EVP_BytesToKey;","'use strict';\n\nvar BN = require('bn.js');\n\nvar utils = require('../utils');\n\nvar getNAF = utils.getNAF;\nvar getJSF = utils.getJSF;\nvar assert = utils.assert;\n\nfunction BaseCurve(type, conf) {\n  this.type = type;\n  this.p = new BN(conf.p, 16); // Use Montgomery, when there is no fast reduction for the prime\n\n  this.red = conf.prime ? BN.red(conf.prime) : BN.mont(this.p); // Useful for many curves\n\n  this.zero = new BN(0).toRed(this.red);\n  this.one = new BN(1).toRed(this.red);\n  this.two = new BN(2).toRed(this.red); // Curve configuration, optional\n\n  this.n = conf.n && new BN(conf.n, 16);\n  this.g = conf.g && this.pointFromJSON(conf.g, conf.gRed); // Temporary arrays\n\n  this._wnafT1 = new Array(4);\n  this._wnafT2 = new Array(4);\n  this._wnafT3 = new Array(4);\n  this._wnafT4 = new Array(4); // Generalized Greg Maxwell's trick\n\n  var adjustCount = this.n && this.p.div(this.n);\n\n  if (!adjustCount || adjustCount.cmpn(100) > 0) {\n    this.redN = null;\n  } else {\n    this._maxwellTrick = true;\n    this.redN = this.n.toRed(this.red);\n  }\n}\n\nmodule.exports = BaseCurve;\n\nBaseCurve.prototype.point = function point() {\n  throw new Error('Not implemented');\n};\n\nBaseCurve.prototype.validate = function validate() {\n  throw new Error('Not implemented');\n};\n\nBaseCurve.prototype._fixedNafMul = function _fixedNafMul(p, k) {\n  assert(p.precomputed);\n\n  var doubles = p._getDoubles();\n\n  var naf = getNAF(k, 1);\n  var I = (1 << doubles.step + 1) - (doubles.step % 2 === 0 ? 2 : 1);\n  I /= 3; // Translate into more windowed form\n\n  var repr = [];\n\n  for (var j = 0; j < naf.length; j += doubles.step) {\n    var nafW = 0;\n\n    for (var k = j + doubles.step - 1; k >= j; k--) {\n      nafW = (nafW << 1) + naf[k];\n    }\n\n    repr.push(nafW);\n  }\n\n  var a = this.jpoint(null, null, null);\n  var b = this.jpoint(null, null, null);\n\n  for (var i = I; i > 0; i--) {\n    for (var j = 0; j < repr.length; j++) {\n      var nafW = repr[j];\n      if (nafW === i) b = b.mixedAdd(doubles.points[j]);else if (nafW === -i) b = b.mixedAdd(doubles.points[j].neg());\n    }\n\n    a = a.add(b);\n  }\n\n  return a.toP();\n};\n\nBaseCurve.prototype._wnafMul = function _wnafMul(p, k) {\n  var w = 4; // Precompute window\n\n  var nafPoints = p._getNAFPoints(w);\n\n  w = nafPoints.wnd;\n  var wnd = nafPoints.points; // Get NAF form\n\n  var naf = getNAF(k, w); // Add `this`*(N+1) for every w-NAF index\n\n  var acc = this.jpoint(null, null, null);\n\n  for (var i = naf.length - 1; i >= 0; i--) {\n    // Count zeroes\n    for (var k = 0; i >= 0 && naf[i] === 0; i--) {\n      k++;\n    }\n\n    if (i >= 0) k++;\n    acc = acc.dblp(k);\n    if (i < 0) break;\n    var z = naf[i];\n    assert(z !== 0);\n\n    if (p.type === 'affine') {\n      // J +- P\n      if (z > 0) acc = acc.mixedAdd(wnd[z - 1 >> 1]);else acc = acc.mixedAdd(wnd[-z - 1 >> 1].neg());\n    } else {\n      // J +- J\n      if (z > 0) acc = acc.add(wnd[z - 1 >> 1]);else acc = acc.add(wnd[-z - 1 >> 1].neg());\n    }\n  }\n\n  return p.type === 'affine' ? acc.toP() : acc;\n};\n\nBaseCurve.prototype._wnafMulAdd = function _wnafMulAdd(defW, points, coeffs, len, jacobianResult) {\n  var wndWidth = this._wnafT1;\n  var wnd = this._wnafT2;\n  var naf = this._wnafT3; // Fill all arrays\n\n  var max = 0;\n\n  for (var i = 0; i < len; i++) {\n    var p = points[i];\n\n    var nafPoints = p._getNAFPoints(defW);\n\n    wndWidth[i] = nafPoints.wnd;\n    wnd[i] = nafPoints.points;\n  } // Comb small window NAFs\n\n\n  for (var i = len - 1; i >= 1; i -= 2) {\n    var a = i - 1;\n    var b = i;\n\n    if (wndWidth[a] !== 1 || wndWidth[b] !== 1) {\n      naf[a] = getNAF(coeffs[a], wndWidth[a]);\n      naf[b] = getNAF(coeffs[b], wndWidth[b]);\n      max = Math.max(naf[a].length, max);\n      max = Math.max(naf[b].length, max);\n      continue;\n    }\n\n    var comb = [points[a],\n    /* 1 */\n    null,\n    /* 3 */\n    null,\n    /* 5 */\n    points[b]\n    /* 7 */\n    ]; // Try to avoid Projective points, if possible\n\n    if (points[a].y.cmp(points[b].y) === 0) {\n      comb[1] = points[a].add(points[b]);\n      comb[2] = points[a].toJ().mixedAdd(points[b].neg());\n    } else if (points[a].y.cmp(points[b].y.redNeg()) === 0) {\n      comb[1] = points[a].toJ().mixedAdd(points[b]);\n      comb[2] = points[a].add(points[b].neg());\n    } else {\n      comb[1] = points[a].toJ().mixedAdd(points[b]);\n      comb[2] = points[a].toJ().mixedAdd(points[b].neg());\n    }\n\n    var index = [-3,\n    /* -1 -1 */\n    -1,\n    /* -1 0 */\n    -5,\n    /* -1 1 */\n    -7,\n    /* 0 -1 */\n    0,\n    /* 0 0 */\n    7,\n    /* 0 1 */\n    5,\n    /* 1 -1 */\n    1,\n    /* 1 0 */\n    3\n    /* 1 1 */\n    ];\n    var jsf = getJSF(coeffs[a], coeffs[b]);\n    max = Math.max(jsf[0].length, max);\n    naf[a] = new Array(max);\n    naf[b] = new Array(max);\n\n    for (var j = 0; j < max; j++) {\n      var ja = jsf[0][j] | 0;\n      var jb = jsf[1][j] | 0;\n      naf[a][j] = index[(ja + 1) * 3 + (jb + 1)];\n      naf[b][j] = 0;\n      wnd[a] = comb;\n    }\n  }\n\n  var acc = this.jpoint(null, null, null);\n  var tmp = this._wnafT4;\n\n  for (var i = max; i >= 0; i--) {\n    var k = 0;\n\n    while (i >= 0) {\n      var zero = true;\n\n      for (var j = 0; j < len; j++) {\n        tmp[j] = naf[j][i] | 0;\n        if (tmp[j] !== 0) zero = false;\n      }\n\n      if (!zero) break;\n      k++;\n      i--;\n    }\n\n    if (i >= 0) k++;\n    acc = acc.dblp(k);\n    if (i < 0) break;\n\n    for (var j = 0; j < len; j++) {\n      var z = tmp[j];\n      var p;\n      if (z === 0) continue;else if (z > 0) p = wnd[j][z - 1 >> 1];else if (z < 0) p = wnd[j][-z - 1 >> 1].neg();\n      if (p.type === 'affine') acc = acc.mixedAdd(p);else acc = acc.add(p);\n    }\n  } // Zeroify references\n\n\n  for (var i = 0; i < len; i++) {\n    wnd[i] = null;\n  }\n\n  if (jacobianResult) return acc;else return acc.toP();\n};\n\nfunction BasePoint(curve, type) {\n  this.curve = curve;\n  this.type = type;\n  this.precomputed = null;\n}\n\nBaseCurve.BasePoint = BasePoint;\n\nBasePoint.prototype.eq = function eq()\n/*other*/\n{\n  throw new Error('Not implemented');\n};\n\nBasePoint.prototype.validate = function validate() {\n  return this.curve.validate(this);\n};\n\nBaseCurve.prototype.decodePoint = function decodePoint(bytes, enc) {\n  bytes = utils.toArray(bytes, enc);\n  var len = this.p.byteLength(); // uncompressed, hybrid-odd, hybrid-even\n\n  if ((bytes[0] === 0x04 || bytes[0] === 0x06 || bytes[0] === 0x07) && bytes.length - 1 === 2 * len) {\n    if (bytes[0] === 0x06) assert(bytes[bytes.length - 1] % 2 === 0);else if (bytes[0] === 0x07) assert(bytes[bytes.length - 1] % 2 === 1);\n    var res = this.point(bytes.slice(1, 1 + len), bytes.slice(1 + len, 1 + 2 * len));\n    return res;\n  } else if ((bytes[0] === 0x02 || bytes[0] === 0x03) && bytes.length - 1 === len) {\n    return this.pointFromX(bytes.slice(1, 1 + len), bytes[0] === 0x03);\n  }\n\n  throw new Error('Unknown point format');\n};\n\nBasePoint.prototype.encodeCompressed = function encodeCompressed(enc) {\n  return this.encode(enc, true);\n};\n\nBasePoint.prototype._encode = function _encode(compact) {\n  var len = this.curve.p.byteLength();\n  var x = this.getX().toArray('be', len);\n  if (compact) return [this.getY().isEven() ? 0x02 : 0x03].concat(x);\n  return [0x04].concat(x, this.getY().toArray('be', len));\n};\n\nBasePoint.prototype.encode = function encode(enc, compact) {\n  return utils.encode(this._encode(compact), enc);\n};\n\nBasePoint.prototype.precompute = function precompute(power) {\n  if (this.precomputed) return this;\n  var precomputed = {\n    doubles: null,\n    naf: null,\n    beta: null\n  };\n  precomputed.naf = this._getNAFPoints(8);\n  precomputed.doubles = this._getDoubles(4, power);\n  precomputed.beta = this._getBeta();\n  this.precomputed = precomputed;\n  return this;\n};\n\nBasePoint.prototype._hasDoubles = function _hasDoubles(k) {\n  if (!this.precomputed) return false;\n  var doubles = this.precomputed.doubles;\n  if (!doubles) return false;\n  return doubles.points.length >= Math.ceil((k.bitLength() + 1) / doubles.step);\n};\n\nBasePoint.prototype._getDoubles = function _getDoubles(step, power) {\n  if (this.precomputed && this.precomputed.doubles) return this.precomputed.doubles;\n  var doubles = [this];\n  var acc = this;\n\n  for (var i = 0; i < power; i += step) {\n    for (var j = 0; j < step; j++) {\n      acc = acc.dbl();\n    }\n\n    doubles.push(acc);\n  }\n\n  return {\n    step: step,\n    points: doubles\n  };\n};\n\nBasePoint.prototype._getNAFPoints = function _getNAFPoints(wnd) {\n  if (this.precomputed && this.precomputed.naf) return this.precomputed.naf;\n  var res = [this];\n  var max = (1 << wnd) - 1;\n  var dbl = max === 1 ? null : this.dbl();\n\n  for (var i = 1; i < max; i++) {\n    res[i] = res[i - 1].add(dbl);\n  }\n\n  return {\n    wnd: wnd,\n    points: res\n  };\n};\n\nBasePoint.prototype._getBeta = function _getBeta() {\n  return null;\n};\n\nBasePoint.prototype.dblp = function dblp(k) {\n  var r = this;\n\n  for (var i = 0; i < k; i++) {\n    r = r.dbl();\n  }\n\n  return r;\n};","function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nvar asn1 = require('./asn1');\n\nvar aesid = require('./aesid.json');\n\nvar fixProc = require('./fixProc');\n\nvar ciphers = require('browserify-aes');\n\nvar compat = require('pbkdf2');\n\nvar Buffer = require('safe-buffer').Buffer;\n\nmodule.exports = parseKeys;\n\nfunction parseKeys(buffer) {\n  var password;\n\n  if (_typeof(buffer) === 'object' && !Buffer.isBuffer(buffer)) {\n    password = buffer.passphrase;\n    buffer = buffer.key;\n  }\n\n  if (typeof buffer === 'string') {\n    buffer = Buffer.from(buffer);\n  }\n\n  var stripped = fixProc(buffer, password);\n  var type = stripped.tag;\n  var data = stripped.data;\n  var subtype, ndata;\n\n  switch (type) {\n    case 'CERTIFICATE':\n      ndata = asn1.certificate.decode(data, 'der').tbsCertificate.subjectPublicKeyInfo;\n    // falls through\n\n    case 'PUBLIC KEY':\n      if (!ndata) {\n        ndata = asn1.PublicKey.decode(data, 'der');\n      }\n\n      subtype = ndata.algorithm.algorithm.join('.');\n\n      switch (subtype) {\n        case '1.2.840.113549.1.1.1':\n          return asn1.RSAPublicKey.decode(ndata.subjectPublicKey.data, 'der');\n\n        case '1.2.840.10045.2.1':\n          ndata.subjectPrivateKey = ndata.subjectPublicKey;\n          return {\n            type: 'ec',\n            data: ndata\n          };\n\n        case '1.2.840.10040.4.1':\n          ndata.algorithm.params.pub_key = asn1.DSAparam.decode(ndata.subjectPublicKey.data, 'der');\n          return {\n            type: 'dsa',\n            data: ndata.algorithm.params\n          };\n\n        default:\n          throw new Error('unknown key id ' + subtype);\n      }\n\n      throw new Error('unknown key type ' + type);\n\n    case 'ENCRYPTED PRIVATE KEY':\n      data = asn1.EncryptedPrivateKey.decode(data, 'der');\n      data = decrypt(data, password);\n    // falls through\n\n    case 'PRIVATE KEY':\n      ndata = asn1.PrivateKey.decode(data, 'der');\n      subtype = ndata.algorithm.algorithm.join('.');\n\n      switch (subtype) {\n        case '1.2.840.113549.1.1.1':\n          return asn1.RSAPrivateKey.decode(ndata.subjectPrivateKey, 'der');\n\n        case '1.2.840.10045.2.1':\n          return {\n            curve: ndata.algorithm.curve,\n            privateKey: asn1.ECPrivateKey.decode(ndata.subjectPrivateKey, 'der').privateKey\n          };\n\n        case '1.2.840.10040.4.1':\n          ndata.algorithm.params.priv_key = asn1.DSAparam.decode(ndata.subjectPrivateKey, 'der');\n          return {\n            type: 'dsa',\n            params: ndata.algorithm.params\n          };\n\n        default:\n          throw new Error('unknown key id ' + subtype);\n      }\n\n      throw new Error('unknown key type ' + type);\n\n    case 'RSA PUBLIC KEY':\n      return asn1.RSAPublicKey.decode(data, 'der');\n\n    case 'RSA PRIVATE KEY':\n      return asn1.RSAPrivateKey.decode(data, 'der');\n\n    case 'DSA PRIVATE KEY':\n      return {\n        type: 'dsa',\n        params: asn1.DSAPrivateKey.decode(data, 'der')\n      };\n\n    case 'EC PRIVATE KEY':\n      data = asn1.ECPrivateKey.decode(data, 'der');\n      return {\n        curve: data.parameters.value,\n        privateKey: data.privateKey\n      };\n\n    default:\n      throw new Error('unknown key type ' + type);\n  }\n}\n\nparseKeys.signature = asn1.signature;\n\nfunction decrypt(data, password) {\n  var salt = data.algorithm.decrypt.kde.kdeparams.salt;\n  var iters = parseInt(data.algorithm.decrypt.kde.kdeparams.iters.toString(), 10);\n  var algo = aesid[data.algorithm.decrypt.cipher.algo.join('.')];\n  var iv = data.algorithm.decrypt.cipher.iv;\n  var cipherText = data.subjectPrivateKey;\n  var keylen = parseInt(algo.split('-')[1], 10) / 8;\n  var key = compat.pbkdf2Sync(password, salt, iters, keylen, 'sha1');\n  var cipher = ciphers.createDecipheriv(algo, key, iv);\n  var out = [];\n  out.push(cipher.update(cipherText));\n  out.push(cipher[\"final\"]());\n  return Buffer.concat(out);\n}","exports.UTF8_TO_JIS_TABLE = require('./utf8-to-jis-table');\nexports.UTF8_TO_JISX0212_TABLE = require('./utf8-to-jisx0212-table');\nexports.JIS_TO_UTF8_TABLE = require('./jis-to-utf8-table');\nexports.JISX0212_TO_UTF8_TABLE = require('./jisx0212-to-utf8-table');","/**\n * Binary (exe, images and so, etc.)\n *\n * Note:\n *   This function is not considered for Unicode\n */\nfunction isBINARY(data) {\n  var i = 0;\n  var len = data && data.length;\n  var c;\n\n  for (; i < len; i++) {\n    c = data[i];\n\n    if (c > 0xFF) {\n      return false;\n    }\n\n    if (c >= 0x00 && c <= 0x07 || c === 0xFF) {\n      return true;\n    }\n  }\n\n  return false;\n}\n\nexports.isBINARY = isBINARY;\n/**\n * ASCII (ISO-646)\n */\n\nfunction isASCII(data) {\n  var i = 0;\n  var len = data && data.length;\n  var b;\n\n  for (; i < len; i++) {\n    b = data[i];\n\n    if (b > 0xFF || b >= 0x80 && b <= 0xFF || b === 0x1B) {\n      return false;\n    }\n  }\n\n  return true;\n}\n\nexports.isASCII = isASCII;\n/**\n * ISO-2022-JP (JIS)\n *\n * RFC1468 Japanese Character Encoding for Internet Messages\n * RFC1554 ISO-2022-JP-2: Multilingual Extension of ISO-2022-JP\n * RFC2237 Japanese Character Encoding for Internet Messages\n */\n\nfunction isJIS(data) {\n  var i = 0;\n  var len = data && data.length;\n  var b, esc1, esc2;\n\n  for (; i < len; i++) {\n    b = data[i];\n\n    if (b > 0xFF || b >= 0x80 && b <= 0xFF) {\n      return false;\n    }\n\n    if (b === 0x1B) {\n      if (i + 2 >= len) {\n        return false;\n      }\n\n      esc1 = data[i + 1];\n      esc2 = data[i + 2];\n\n      if (esc1 === 0x24) {\n        if (esc2 === 0x28 || // JIS X 0208-1990/2000/2004\n        esc2 === 0x40 || // JIS X 0208-1978\n        esc2 === 0x42) {\n          // JIS X 0208-1983\n          return true;\n        }\n      } else if (esc1 === 0x26 && // JIS X 0208-1990\n      esc2 === 0x40) {\n        return true;\n      } else if (esc1 === 0x28) {\n        if (esc2 === 0x42 || // ASCII\n        esc2 === 0x49 || // JIS X 0201 Halfwidth Katakana\n        esc2 === 0x4A) {\n          // JIS X 0201-1976 Roman set\n          return true;\n        }\n      }\n    }\n  }\n\n  return false;\n}\n\nexports.isJIS = isJIS;\n/**\n * EUC-JP\n */\n\nfunction isEUCJP(data) {\n  var i = 0;\n  var len = data && data.length;\n  var b;\n\n  for (; i < len; i++) {\n    b = data[i];\n\n    if (b < 0x80) {\n      continue;\n    }\n\n    if (b > 0xFF || b < 0x8E) {\n      return false;\n    }\n\n    if (b === 0x8E) {\n      if (i + 1 >= len) {\n        return false;\n      }\n\n      b = data[++i];\n\n      if (b < 0xA1 || 0xDF < b) {\n        return false;\n      }\n    } else if (b === 0x8F) {\n      if (i + 2 >= len) {\n        return false;\n      }\n\n      b = data[++i];\n\n      if (b < 0xA2 || 0xED < b) {\n        return false;\n      }\n\n      b = data[++i];\n\n      if (b < 0xA1 || 0xFE < b) {\n        return false;\n      }\n    } else if (0xA1 <= b && b <= 0xFE) {\n      if (i + 1 >= len) {\n        return false;\n      }\n\n      b = data[++i];\n\n      if (b < 0xA1 || 0xFE < b) {\n        return false;\n      }\n    } else {\n      return false;\n    }\n  }\n\n  return true;\n}\n\nexports.isEUCJP = isEUCJP;\n/**\n * Shift-JIS (SJIS)\n */\n\nfunction isSJIS(data) {\n  var i = 0;\n  var len = data && data.length;\n  var b;\n\n  while (i < len && data[i] > 0x80) {\n    if (data[i++] > 0xFF) {\n      return false;\n    }\n  }\n\n  for (; i < len; i++) {\n    b = data[i];\n\n    if (b <= 0x80 || 0xA1 <= b && b <= 0xDF) {\n      continue;\n    }\n\n    if (b === 0xA0 || b > 0xEF || i + 1 >= len) {\n      return false;\n    }\n\n    b = data[++i];\n\n    if (b < 0x40 || b === 0x7F || b > 0xFC) {\n      return false;\n    }\n  }\n\n  return true;\n}\n\nexports.isSJIS = isSJIS;\n/**\n * UTF-8\n */\n\nfunction isUTF8(data) {\n  var i = 0;\n  var len = data && data.length;\n  var b;\n\n  for (; i < len; i++) {\n    b = data[i];\n\n    if (b > 0xFF) {\n      return false;\n    }\n\n    if (b === 0x09 || b === 0x0A || b === 0x0D || b >= 0x20 && b <= 0x7E) {\n      continue;\n    }\n\n    if (b >= 0xC2 && b <= 0xDF) {\n      if (i + 1 >= len || data[i + 1] < 0x80 || data[i + 1] > 0xBF) {\n        return false;\n      }\n\n      i++;\n    } else if (b === 0xE0) {\n      if (i + 2 >= len || data[i + 1] < 0xA0 || data[i + 1] > 0xBF || data[i + 2] < 0x80 || data[i + 2] > 0xBF) {\n        return false;\n      }\n\n      i += 2;\n    } else if (b >= 0xE1 && b <= 0xEC || b === 0xEE || b === 0xEF) {\n      if (i + 2 >= len || data[i + 1] < 0x80 || data[i + 1] > 0xBF || data[i + 2] < 0x80 || data[i + 2] > 0xBF) {\n        return false;\n      }\n\n      i += 2;\n    } else if (b === 0xED) {\n      if (i + 2 >= len || data[i + 1] < 0x80 || data[i + 1] > 0x9F || data[i + 2] < 0x80 || data[i + 2] > 0xBF) {\n        return false;\n      }\n\n      i += 2;\n    } else if (b === 0xF0) {\n      if (i + 3 >= len || data[i + 1] < 0x90 || data[i + 1] > 0xBF || data[i + 2] < 0x80 || data[i + 2] > 0xBF || data[i + 3] < 0x80 || data[i + 3] > 0xBF) {\n        return false;\n      }\n\n      i += 3;\n    } else if (b >= 0xF1 && b <= 0xF3) {\n      if (i + 3 >= len || data[i + 1] < 0x80 || data[i + 1] > 0xBF || data[i + 2] < 0x80 || data[i + 2] > 0xBF || data[i + 3] < 0x80 || data[i + 3] > 0xBF) {\n        return false;\n      }\n\n      i += 3;\n    } else if (b === 0xF4) {\n      if (i + 3 >= len || data[i + 1] < 0x80 || data[i + 1] > 0x8F || data[i + 2] < 0x80 || data[i + 2] > 0xBF || data[i + 3] < 0x80 || data[i + 3] > 0xBF) {\n        return false;\n      }\n\n      i += 3;\n    } else {\n      return false;\n    }\n  }\n\n  return true;\n}\n\nexports.isUTF8 = isUTF8;\n/**\n * UTF-16 (LE or BE)\n *\n * RFC2781: UTF-16, an encoding of ISO 10646\n *\n * @link http://www.ietf.org/rfc/rfc2781.txt\n */\n\nfunction isUTF16(data) {\n  var i = 0;\n  var len = data && data.length;\n  var pos = null;\n  var b1, b2, next, prev;\n\n  if (len < 2) {\n    if (data[0] > 0xFF) {\n      return false;\n    }\n  } else {\n    b1 = data[0];\n    b2 = data[1];\n\n    if (b1 === 0xFF && // BOM (little-endian)\n    b2 === 0xFE) {\n      return true;\n    }\n\n    if (b1 === 0xFE && // BOM (big-endian)\n    b2 === 0xFF) {\n      return true;\n    }\n\n    for (; i < len; i++) {\n      if (data[i] === 0x00) {\n        pos = i;\n        break;\n      } else if (data[i] > 0xFF) {\n        return false;\n      }\n    }\n\n    if (pos === null) {\n      return false; // Non ASCII\n    }\n\n    next = data[pos + 1]; // BE\n\n    if (next !== void 0 && next > 0x00 && next < 0x80) {\n      return true;\n    }\n\n    prev = data[pos - 1]; // LE\n\n    if (prev !== void 0 && prev > 0x00 && prev < 0x80) {\n      return true;\n    }\n  }\n\n  return false;\n}\n\nexports.isUTF16 = isUTF16;\n/**\n * UTF-16BE (big-endian)\n *\n * RFC 2781 4.3 Interpreting text labelled as UTF-16\n * Text labelled \"UTF-16BE\" can always be interpreted as being big-endian\n *  when BOM does not founds (SHOULD)\n *\n * @link http://www.ietf.org/rfc/rfc2781.txt\n */\n\nfunction isUTF16BE(data) {\n  var i = 0;\n  var len = data && data.length;\n  var pos = null;\n  var b1, b2;\n\n  if (len < 2) {\n    if (data[0] > 0xFF) {\n      return false;\n    }\n  } else {\n    b1 = data[0];\n    b2 = data[1];\n\n    if (b1 === 0xFE && // BOM\n    b2 === 0xFF) {\n      return true;\n    }\n\n    for (; i < len; i++) {\n      if (data[i] === 0x00) {\n        pos = i;\n        break;\n      } else if (data[i] > 0xFF) {\n        return false;\n      }\n    }\n\n    if (pos === null) {\n      return false; // Non ASCII\n    }\n\n    if (pos % 2 === 0) {\n      return true;\n    }\n  }\n\n  return false;\n}\n\nexports.isUTF16BE = isUTF16BE;\n/**\n * UTF-16LE (little-endian)\n */\n\nfunction isUTF16LE(data) {\n  var i = 0;\n  var len = data && data.length;\n  var pos = null;\n  var b1, b2;\n\n  if (len < 2) {\n    if (data[0] > 0xFF) {\n      return false;\n    }\n  } else {\n    b1 = data[0];\n    b2 = data[1];\n\n    if (b1 === 0xFF && // BOM\n    b2 === 0xFE) {\n      return true;\n    }\n\n    for (; i < len; i++) {\n      if (data[i] === 0x00) {\n        pos = i;\n        break;\n      } else if (data[i] > 0xFF) {\n        return false;\n      }\n    }\n\n    if (pos === null) {\n      return false; // Non ASCII\n    }\n\n    if (pos % 2 !== 0) {\n      return true;\n    }\n  }\n\n  return false;\n}\n\nexports.isUTF16LE = isUTF16LE;\n/**\n * UTF-32\n *\n * Unicode 3.2.0: Unicode Standard Annex #19\n *\n * @link http://www.iana.org/assignments/charset-reg/UTF-32\n * @link http://www.unicode.org/reports/tr19/tr19-9.html\n */\n\nfunction isUTF32(data) {\n  var i = 0;\n  var len = data && data.length;\n  var pos = null;\n  var b1, b2, b3, b4;\n  var next, prev;\n\n  if (len < 4) {\n    for (; i < len; i++) {\n      if (data[i] > 0xFF) {\n        return false;\n      }\n    }\n  } else {\n    b1 = data[0];\n    b2 = data[1];\n    b3 = data[2];\n    b4 = data[3];\n\n    if (b1 === 0x00 && b2 === 0x00 && // BOM (big-endian)\n    b3 === 0xFE && b4 === 0xFF) {\n      return true;\n    }\n\n    if (b1 === 0xFF && b2 === 0xFE && // BOM (little-endian)\n    b3 === 0x00 && b4 === 0x00) {\n      return true;\n    }\n\n    for (; i < len; i++) {\n      if (data[i] === 0x00 && data[i + 1] === 0x00 && data[i + 2] === 0x00) {\n        pos = i;\n        break;\n      } else if (data[i] > 0xFF) {\n        return false;\n      }\n    }\n\n    if (pos === null) {\n      return false;\n    } // The byte order should be the big-endian when BOM is not detected.\n\n\n    next = data[pos + 3];\n\n    if (next !== void 0 && next > 0x00 && next <= 0x7F) {\n      // big-endian\n      return data[pos + 2] === 0x00 && data[pos + 1] === 0x00;\n    }\n\n    prev = data[pos - 1];\n\n    if (prev !== void 0 && prev > 0x00 && prev <= 0x7F) {\n      // little-endian\n      return data[pos + 1] === 0x00 && data[pos + 2] === 0x00;\n    }\n  }\n\n  return false;\n}\n\nexports.isUTF32 = isUTF32;\n/**\n * JavaScript Unicode array\n */\n\nfunction isUNICODE(data) {\n  var i = 0;\n  var len = data && data.length;\n  var c;\n\n  for (; i < len; i++) {\n    c = data[i];\n\n    if (c < 0 || c > 0x10FFFF) {\n      return false;\n    }\n  }\n\n  return true;\n}\n\nexports.isUNICODE = isUNICODE;","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n'use strict';\n\nfunction _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nvar R = (typeof Reflect === \"undefined\" ? \"undefined\" : _typeof(Reflect)) === 'object' ? Reflect : null;\nvar ReflectApply = R && typeof R.apply === 'function' ? R.apply : function ReflectApply(target, receiver, args) {\n  return Function.prototype.apply.call(target, receiver, args);\n};\nvar ReflectOwnKeys;\n\nif (R && typeof R.ownKeys === 'function') {\n  ReflectOwnKeys = R.ownKeys;\n} else if (Object.getOwnPropertySymbols) {\n  ReflectOwnKeys = function ReflectOwnKeys(target) {\n    return Object.getOwnPropertyNames(target).concat(Object.getOwnPropertySymbols(target));\n  };\n} else {\n  ReflectOwnKeys = function ReflectOwnKeys(target) {\n    return Object.getOwnPropertyNames(target);\n  };\n}\n\nfunction ProcessEmitWarning(warning) {\n  if (console && console.warn) console.warn(warning);\n}\n\nvar NumberIsNaN = Number.isNaN || function NumberIsNaN(value) {\n  return value !== value;\n};\n\nfunction EventEmitter() {\n  EventEmitter.init.call(this);\n}\n\nmodule.exports = EventEmitter; // Backwards-compat with node 0.10.x\n\nEventEmitter.EventEmitter = EventEmitter;\nEventEmitter.prototype._events = undefined;\nEventEmitter.prototype._eventsCount = 0;\nEventEmitter.prototype._maxListeners = undefined; // By default EventEmitters will print a warning if more than 10 listeners are\n// added to it. This is a useful default which helps finding memory leaks.\n\nvar defaultMaxListeners = 10;\nObject.defineProperty(EventEmitter, 'defaultMaxListeners', {\n  enumerable: true,\n  get: function get() {\n    return defaultMaxListeners;\n  },\n  set: function set(arg) {\n    if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) {\n      throw new RangeError('The value of \"defaultMaxListeners\" is out of range. It must be a non-negative number. Received ' + arg + '.');\n    }\n\n    defaultMaxListeners = arg;\n  }\n});\n\nEventEmitter.init = function () {\n  if (this._events === undefined || this._events === Object.getPrototypeOf(this)._events) {\n    this._events = Object.create(null);\n    this._eventsCount = 0;\n  }\n\n  this._maxListeners = this._maxListeners || undefined;\n}; // Obviously not all Emitters should be limited to 10. This function allows\n// that to be increased. Set to zero for unlimited.\n\n\nEventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {\n  if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) {\n    throw new RangeError('The value of \"n\" is out of range. It must be a non-negative number. Received ' + n + '.');\n  }\n\n  this._maxListeners = n;\n  return this;\n};\n\nfunction $getMaxListeners(that) {\n  if (that._maxListeners === undefined) return EventEmitter.defaultMaxListeners;\n  return that._maxListeners;\n}\n\nEventEmitter.prototype.getMaxListeners = function getMaxListeners() {\n  return $getMaxListeners(this);\n};\n\nEventEmitter.prototype.emit = function emit(type) {\n  var args = [];\n\n  for (var i = 1; i < arguments.length; i++) {\n    args.push(arguments[i]);\n  }\n\n  var doError = type === 'error';\n  var events = this._events;\n  if (events !== undefined) doError = doError && events.error === undefined;else if (!doError) return false; // If there is no 'error' event listener then throw.\n\n  if (doError) {\n    var er;\n    if (args.length > 0) er = args[0];\n\n    if (er instanceof Error) {\n      // Note: The comments on the `throw` lines are intentional, they show\n      // up in Node's output if this results in an unhandled exception.\n      throw er; // Unhandled 'error' event\n    } // At least give some kind of context to the user\n\n\n    var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : ''));\n    err.context = er;\n    throw err; // Unhandled 'error' event\n  }\n\n  var handler = events[type];\n  if (handler === undefined) return false;\n\n  if (typeof handler === 'function') {\n    ReflectApply(handler, this, args);\n  } else {\n    var len = handler.length;\n    var listeners = arrayClone(handler, len);\n\n    for (var i = 0; i < len; ++i) {\n      ReflectApply(listeners[i], this, args);\n    }\n  }\n\n  return true;\n};\n\nfunction _addListener(target, type, listener, prepend) {\n  var m;\n  var events;\n  var existing;\n\n  if (typeof listener !== 'function') {\n    throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + _typeof(listener));\n  }\n\n  events = target._events;\n\n  if (events === undefined) {\n    events = target._events = Object.create(null);\n    target._eventsCount = 0;\n  } else {\n    // To avoid recursion in the case that type === \"newListener\"! Before\n    // adding it to the listeners, first emit \"newListener\".\n    if (events.newListener !== undefined) {\n      target.emit('newListener', type, listener.listener ? listener.listener : listener); // Re-assign `events` because a newListener handler could have caused the\n      // this._events to be assigned to a new object\n\n      events = target._events;\n    }\n\n    existing = events[type];\n  }\n\n  if (existing === undefined) {\n    // Optimize the case of one listener. Don't need the extra array object.\n    existing = events[type] = listener;\n    ++target._eventsCount;\n  } else {\n    if (typeof existing === 'function') {\n      // Adding the second element, need to change to array.\n      existing = events[type] = prepend ? [listener, existing] : [existing, listener]; // If we've already got an array, just append.\n    } else if (prepend) {\n      existing.unshift(listener);\n    } else {\n      existing.push(listener);\n    } // Check for listener leak\n\n\n    m = $getMaxListeners(target);\n\n    if (m > 0 && existing.length > m && !existing.warned) {\n      existing.warned = true; // No error code for this since it is a Warning\n      // eslint-disable-next-line no-restricted-syntax\n\n      var w = new Error('Possible EventEmitter memory leak detected. ' + existing.length + ' ' + String(type) + ' listeners ' + 'added. Use emitter.setMaxListeners() to ' + 'increase limit');\n      w.name = 'MaxListenersExceededWarning';\n      w.emitter = target;\n      w.type = type;\n      w.count = existing.length;\n      ProcessEmitWarning(w);\n    }\n  }\n\n  return target;\n}\n\nEventEmitter.prototype.addListener = function addListener(type, listener) {\n  return _addListener(this, type, listener, false);\n};\n\nEventEmitter.prototype.on = EventEmitter.prototype.addListener;\n\nEventEmitter.prototype.prependListener = function prependListener(type, listener) {\n  return _addListener(this, type, listener, true);\n};\n\nfunction onceWrapper() {\n  var args = [];\n\n  for (var i = 0; i < arguments.length; i++) {\n    args.push(arguments[i]);\n  }\n\n  if (!this.fired) {\n    this.target.removeListener(this.type, this.wrapFn);\n    this.fired = true;\n    ReflectApply(this.listener, this.target, args);\n  }\n}\n\nfunction _onceWrap(target, type, listener) {\n  var state = {\n    fired: false,\n    wrapFn: undefined,\n    target: target,\n    type: type,\n    listener: listener\n  };\n  var wrapped = onceWrapper.bind(state);\n  wrapped.listener = listener;\n  state.wrapFn = wrapped;\n  return wrapped;\n}\n\nEventEmitter.prototype.once = function once(type, listener) {\n  if (typeof listener !== 'function') {\n    throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + _typeof(listener));\n  }\n\n  this.on(type, _onceWrap(this, type, listener));\n  return this;\n};\n\nEventEmitter.prototype.prependOnceListener = function prependOnceListener(type, listener) {\n  if (typeof listener !== 'function') {\n    throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + _typeof(listener));\n  }\n\n  this.prependListener(type, _onceWrap(this, type, listener));\n  return this;\n}; // Emits a 'removeListener' event if and only if the listener was removed.\n\n\nEventEmitter.prototype.removeListener = function removeListener(type, listener) {\n  var list, events, position, i, originalListener;\n\n  if (typeof listener !== 'function') {\n    throw new TypeError('The \"listener\" argument must be of type Function. Received type ' + _typeof(listener));\n  }\n\n  events = this._events;\n  if (events === undefined) return this;\n  list = events[type];\n  if (list === undefined) return this;\n\n  if (list === listener || list.listener === listener) {\n    if (--this._eventsCount === 0) this._events = Object.create(null);else {\n      delete events[type];\n      if (events.removeListener) this.emit('removeListener', type, list.listener || listener);\n    }\n  } else if (typeof list !== 'function') {\n    position = -1;\n\n    for (i = list.length - 1; i >= 0; i--) {\n      if (list[i] === listener || list[i].listener === listener) {\n        originalListener = list[i].listener;\n        position = i;\n        break;\n      }\n    }\n\n    if (position < 0) return this;\n    if (position === 0) list.shift();else {\n      spliceOne(list, position);\n    }\n    if (list.length === 1) events[type] = list[0];\n    if (events.removeListener !== undefined) this.emit('removeListener', type, originalListener || listener);\n  }\n\n  return this;\n};\n\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\n\nEventEmitter.prototype.removeAllListeners = function removeAllListeners(type) {\n  var listeners, events, i;\n  events = this._events;\n  if (events === undefined) return this; // not listening for removeListener, no need to emit\n\n  if (events.removeListener === undefined) {\n    if (arguments.length === 0) {\n      this._events = Object.create(null);\n      this._eventsCount = 0;\n    } else if (events[type] !== undefined) {\n      if (--this._eventsCount === 0) this._events = Object.create(null);else delete events[type];\n    }\n\n    return this;\n  } // emit removeListener for all listeners on all events\n\n\n  if (arguments.length === 0) {\n    var keys = Object.keys(events);\n    var key;\n\n    for (i = 0; i < keys.length; ++i) {\n      key = keys[i];\n      if (key === 'removeListener') continue;\n      this.removeAllListeners(key);\n    }\n\n    this.removeAllListeners('removeListener');\n    this._events = Object.create(null);\n    this._eventsCount = 0;\n    return this;\n  }\n\n  listeners = events[type];\n\n  if (typeof listeners === 'function') {\n    this.removeListener(type, listeners);\n  } else if (listeners !== undefined) {\n    // LIFO order\n    for (i = listeners.length - 1; i >= 0; i--) {\n      this.removeListener(type, listeners[i]);\n    }\n  }\n\n  return this;\n};\n\nfunction _listeners(target, type, unwrap) {\n  var events = target._events;\n  if (events === undefined) return [];\n  var evlistener = events[type];\n  if (evlistener === undefined) return [];\n  if (typeof evlistener === 'function') return unwrap ? [evlistener.listener || evlistener] : [evlistener];\n  return unwrap ? unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);\n}\n\nEventEmitter.prototype.listeners = function listeners(type) {\n  return _listeners(this, type, true);\n};\n\nEventEmitter.prototype.rawListeners = function rawListeners(type) {\n  return _listeners(this, type, false);\n};\n\nEventEmitter.listenerCount = function (emitter, type) {\n  if (typeof emitter.listenerCount === 'function') {\n    return emitter.listenerCount(type);\n  } else {\n    return listenerCount.call(emitter, type);\n  }\n};\n\nEventEmitter.prototype.listenerCount = listenerCount;\n\nfunction listenerCount(type) {\n  var events = this._events;\n\n  if (events !== undefined) {\n    var evlistener = events[type];\n\n    if (typeof evlistener === 'function') {\n      return 1;\n    } else if (evlistener !== undefined) {\n      return evlistener.length;\n    }\n  }\n\n  return 0;\n}\n\nEventEmitter.prototype.eventNames = function eventNames() {\n  return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : [];\n};\n\nfunction arrayClone(arr, n) {\n  var copy = new Array(n);\n\n  for (var i = 0; i < n; ++i) {\n    copy[i] = arr[i];\n  }\n\n  return copy;\n}\n\nfunction spliceOne(list, index) {\n  for (; index + 1 < list.length; index++) {\n    list[index] = list[index + 1];\n  }\n\n  list.pop();\n}\n\nfunction unwrapListeners(arr) {\n  var ret = new Array(arr.length);\n\n  for (var i = 0; i < ret.length; ++i) {\n    ret[i] = arr[i].listener || arr[i];\n  }\n\n  return ret;\n}","exports = module.exports = require('./lib/_stream_readable.js');\nexports.Stream = exports;\nexports.Readable = exports;\nexports.Writable = require('./lib/_stream_writable.js');\nexports.Duplex = require('./lib/_stream_duplex.js');\nexports.Transform = require('./lib/_stream_transform.js');\nexports.PassThrough = require('./lib/_stream_passthrough.js');","/* eslint-disable node/no-deprecated-api */\nvar buffer = require('buffer');\n\nvar Buffer = buffer.Buffer; // alternative to using Object.keys for old browsers\n\nfunction copyProps(src, dst) {\n  for (var key in src) {\n    dst[key] = src[key];\n  }\n}\n\nif (Buffer.from && Buffer.alloc && Buffer.allocUnsafe && Buffer.allocUnsafeSlow) {\n  module.exports = buffer;\n} else {\n  // Copy properties from require('buffer')\n  copyProps(buffer, exports);\n  exports.Buffer = SafeBuffer;\n}\n\nfunction SafeBuffer(arg, encodingOrOffset, length) {\n  return Buffer(arg, encodingOrOffset, length);\n} // Copy static methods from Buffer\n\n\ncopyProps(Buffer, SafeBuffer);\n\nSafeBuffer.from = function (arg, encodingOrOffset, length) {\n  if (typeof arg === 'number') {\n    throw new TypeError('Argument must not be a number');\n  }\n\n  return Buffer(arg, encodingOrOffset, length);\n};\n\nSafeBuffer.alloc = function (size, fill, encoding) {\n  if (typeof size !== 'number') {\n    throw new TypeError('Argument must be a number');\n  }\n\n  var buf = Buffer(size);\n\n  if (fill !== undefined) {\n    if (typeof encoding === 'string') {\n      buf.fill(fill, encoding);\n    } else {\n      buf.fill(fill);\n    }\n  } else {\n    buf.fill(0);\n  }\n\n  return buf;\n};\n\nSafeBuffer.allocUnsafe = function (size) {\n  if (typeof size !== 'number') {\n    throw new TypeError('Argument must be a number');\n  }\n\n  return Buffer(size);\n};\n\nSafeBuffer.allocUnsafeSlow = function (size) {\n  if (typeof size !== 'number') {\n    throw new TypeError('Argument must be a number');\n  }\n\n  return buffer.SlowBuffer(size);\n};","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n// A bit simpler than readable streams.\n// Implement an async ._write(chunk, encoding, cb), and it'll handle all\n// the drain event emission and buffering.\n'use strict';\n/*<replacement>*/\n\nvar pna = require('process-nextick-args');\n/*</replacement>*/\n\n\nmodule.exports = Writable;\n/* <replacement> */\n\nfunction WriteReq(chunk, encoding, cb) {\n  this.chunk = chunk;\n  this.encoding = encoding;\n  this.callback = cb;\n  this.next = null;\n} // It seems a linked list but it is not\n// there will be only 2 of these for each stream\n\n\nfunction CorkedRequest(state) {\n  var _this = this;\n\n  this.next = null;\n  this.entry = null;\n\n  this.finish = function () {\n    onCorkedFinish(_this, state);\n  };\n}\n/* </replacement> */\n\n/*<replacement>*/\n\n\nvar asyncWrite = !process.browser && ['v0.10', 'v0.9.'].indexOf(process.version.slice(0, 5)) > -1 ? setImmediate : pna.nextTick;\n/*</replacement>*/\n\n/*<replacement>*/\n\nvar Duplex;\n/*</replacement>*/\n\nWritable.WritableState = WritableState;\n/*<replacement>*/\n\nvar util = require('core-util-is');\n\nutil.inherits = require('inherits');\n/*</replacement>*/\n\n/*<replacement>*/\n\nvar internalUtil = {\n  deprecate: require('util-deprecate')\n};\n/*</replacement>*/\n\n/*<replacement>*/\n\nvar Stream = require('./internal/streams/stream');\n/*</replacement>*/\n\n/*<replacement>*/\n\n\nvar Buffer = require('safe-buffer').Buffer;\n\nvar OurUint8Array = global.Uint8Array || function () {};\n\nfunction _uint8ArrayToBuffer(chunk) {\n  return Buffer.from(chunk);\n}\n\nfunction _isUint8Array(obj) {\n  return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\n/*</replacement>*/\n\n\nvar destroyImpl = require('./internal/streams/destroy');\n\nutil.inherits(Writable, Stream);\n\nfunction nop() {}\n\nfunction WritableState(options, stream) {\n  Duplex = Duplex || require('./_stream_duplex');\n  options = options || {}; // Duplex streams are both readable and writable, but share\n  // the same options object.\n  // However, some cases require setting options to different\n  // values for the readable and the writable sides of the duplex stream.\n  // These options can be provided separately as readableXXX and writableXXX.\n\n  var isDuplex = stream instanceof Duplex; // object stream flag to indicate whether or not this stream\n  // contains buffers or objects.\n\n  this.objectMode = !!options.objectMode;\n  if (isDuplex) this.objectMode = this.objectMode || !!options.writableObjectMode; // the point at which write() starts returning false\n  // Note: 0 is a valid value, means that we always return false if\n  // the entire buffer is not flushed immediately on write()\n\n  var hwm = options.highWaterMark;\n  var writableHwm = options.writableHighWaterMark;\n  var defaultHwm = this.objectMode ? 16 : 16 * 1024;\n  if (hwm || hwm === 0) this.highWaterMark = hwm;else if (isDuplex && (writableHwm || writableHwm === 0)) this.highWaterMark = writableHwm;else this.highWaterMark = defaultHwm; // cast to ints.\n\n  this.highWaterMark = Math.floor(this.highWaterMark); // if _final has been called\n\n  this.finalCalled = false; // drain event flag.\n\n  this.needDrain = false; // at the start of calling end()\n\n  this.ending = false; // when end() has been called, and returned\n\n  this.ended = false; // when 'finish' is emitted\n\n  this.finished = false; // has it been destroyed\n\n  this.destroyed = false; // should we decode strings into buffers before passing to _write?\n  // this is here so that some node-core streams can optimize string\n  // handling at a lower level.\n\n  var noDecode = options.decodeStrings === false;\n  this.decodeStrings = !noDecode; // Crypto is kind of old and crusty.  Historically, its default string\n  // encoding is 'binary' so we have to make this configurable.\n  // Everything else in the universe uses 'utf8', though.\n\n  this.defaultEncoding = options.defaultEncoding || 'utf8'; // not an actual buffer we keep track of, but a measurement\n  // of how much we're waiting to get pushed to some underlying\n  // socket or file.\n\n  this.length = 0; // a flag to see when we're in the middle of a write.\n\n  this.writing = false; // when true all writes will be buffered until .uncork() call\n\n  this.corked = 0; // a flag to be able to tell if the onwrite cb is called immediately,\n  // or on a later tick.  We set this to true at first, because any\n  // actions that shouldn't happen until \"later\" should generally also\n  // not happen before the first write call.\n\n  this.sync = true; // a flag to know if we're processing previously buffered items, which\n  // may call the _write() callback in the same tick, so that we don't\n  // end up in an overlapped onwrite situation.\n\n  this.bufferProcessing = false; // the callback that's passed to _write(chunk,cb)\n\n  this.onwrite = function (er) {\n    onwrite(stream, er);\n  }; // the callback that the user supplies to write(chunk,encoding,cb)\n\n\n  this.writecb = null; // the amount that is being written when _write is called.\n\n  this.writelen = 0;\n  this.bufferedRequest = null;\n  this.lastBufferedRequest = null; // number of pending user-supplied write callbacks\n  // this must be 0 before 'finish' can be emitted\n\n  this.pendingcb = 0; // emit prefinish if the only thing we're waiting for is _write cbs\n  // This is relevant for synchronous Transform streams\n\n  this.prefinished = false; // True if the error was already emitted and should not be thrown again\n\n  this.errorEmitted = false; // count buffered requests\n\n  this.bufferedRequestCount = 0; // allocate the first CorkedRequest, there is always\n  // one allocated and free to use, and we maintain at most two\n\n  this.corkedRequestsFree = new CorkedRequest(this);\n}\n\nWritableState.prototype.getBuffer = function getBuffer() {\n  var current = this.bufferedRequest;\n  var out = [];\n\n  while (current) {\n    out.push(current);\n    current = current.next;\n  }\n\n  return out;\n};\n\n(function () {\n  try {\n    Object.defineProperty(WritableState.prototype, 'buffer', {\n      get: internalUtil.deprecate(function () {\n        return this.getBuffer();\n      }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.', 'DEP0003')\n    });\n  } catch (_) {}\n})(); // Test _writableState for inheritance to account for Duplex streams,\n// whose prototype chain only points to Readable.\n\n\nvar realHasInstance;\n\nif (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') {\n  realHasInstance = Function.prototype[Symbol.hasInstance];\n  Object.defineProperty(Writable, Symbol.hasInstance, {\n    value: function value(object) {\n      if (realHasInstance.call(this, object)) return true;\n      if (this !== Writable) return false;\n      return object && object._writableState instanceof WritableState;\n    }\n  });\n} else {\n  realHasInstance = function realHasInstance(object) {\n    return object instanceof this;\n  };\n}\n\nfunction Writable(options) {\n  Duplex = Duplex || require('./_stream_duplex'); // Writable ctor is applied to Duplexes, too.\n  // `realHasInstance` is necessary because using plain `instanceof`\n  // would return false, as no `_writableState` property is attached.\n  // Trying to use the custom `instanceof` for Writable here will also break the\n  // Node.js LazyTransform implementation, which has a non-trivial getter for\n  // `_writableState` that would lead to infinite recursion.\n\n  if (!realHasInstance.call(Writable, this) && !(this instanceof Duplex)) {\n    return new Writable(options);\n  }\n\n  this._writableState = new WritableState(options, this); // legacy.\n\n  this.writable = true;\n\n  if (options) {\n    if (typeof options.write === 'function') this._write = options.write;\n    if (typeof options.writev === 'function') this._writev = options.writev;\n    if (typeof options.destroy === 'function') this._destroy = options.destroy;\n    if (typeof options[\"final\"] === 'function') this._final = options[\"final\"];\n  }\n\n  Stream.call(this);\n} // Otherwise people can pipe Writable streams, which is just wrong.\n\n\nWritable.prototype.pipe = function () {\n  this.emit('error', new Error('Cannot pipe, not readable'));\n};\n\nfunction writeAfterEnd(stream, cb) {\n  var er = new Error('write after end'); // TODO: defer error events consistently everywhere, not just the cb\n\n  stream.emit('error', er);\n  pna.nextTick(cb, er);\n} // Checks that a user-supplied chunk is valid, especially for the particular\n// mode the stream is in. Currently this means that `null` is never accepted\n// and undefined/non-string values are only allowed in object mode.\n\n\nfunction validChunk(stream, state, chunk, cb) {\n  var valid = true;\n  var er = false;\n\n  if (chunk === null) {\n    er = new TypeError('May not write null values to stream');\n  } else if (typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {\n    er = new TypeError('Invalid non-string/buffer chunk');\n  }\n\n  if (er) {\n    stream.emit('error', er);\n    pna.nextTick(cb, er);\n    valid = false;\n  }\n\n  return valid;\n}\n\nWritable.prototype.write = function (chunk, encoding, cb) {\n  var state = this._writableState;\n  var ret = false;\n\n  var isBuf = !state.objectMode && _isUint8Array(chunk);\n\n  if (isBuf && !Buffer.isBuffer(chunk)) {\n    chunk = _uint8ArrayToBuffer(chunk);\n  }\n\n  if (typeof encoding === 'function') {\n    cb = encoding;\n    encoding = null;\n  }\n\n  if (isBuf) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding;\n  if (typeof cb !== 'function') cb = nop;\n  if (state.ended) writeAfterEnd(this, cb);else if (isBuf || validChunk(this, state, chunk, cb)) {\n    state.pendingcb++;\n    ret = writeOrBuffer(this, state, isBuf, chunk, encoding, cb);\n  }\n  return ret;\n};\n\nWritable.prototype.cork = function () {\n  var state = this._writableState;\n  state.corked++;\n};\n\nWritable.prototype.uncork = function () {\n  var state = this._writableState;\n\n  if (state.corked) {\n    state.corked--;\n    if (!state.writing && !state.corked && !state.finished && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state);\n  }\n};\n\nWritable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) {\n  // node::ParseEncoding() requires lower case.\n  if (typeof encoding === 'string') encoding = encoding.toLowerCase();\n  if (!(['hex', 'utf8', 'utf-8', 'ascii', 'binary', 'base64', 'ucs2', 'ucs-2', 'utf16le', 'utf-16le', 'raw'].indexOf((encoding + '').toLowerCase()) > -1)) throw new TypeError('Unknown encoding: ' + encoding);\n  this._writableState.defaultEncoding = encoding;\n  return this;\n};\n\nfunction decodeChunk(state, chunk, encoding) {\n  if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') {\n    chunk = Buffer.from(chunk, encoding);\n  }\n\n  return chunk;\n}\n\nObject.defineProperty(Writable.prototype, 'writableHighWaterMark', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    return this._writableState.highWaterMark;\n  }\n}); // if we're already writing something, then just put this\n// in the queue, and wait our turn.  Otherwise, call _write\n// If we return false, then we need a drain event, so set that flag.\n\nfunction writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) {\n  if (!isBuf) {\n    var newChunk = decodeChunk(state, chunk, encoding);\n\n    if (chunk !== newChunk) {\n      isBuf = true;\n      encoding = 'buffer';\n      chunk = newChunk;\n    }\n  }\n\n  var len = state.objectMode ? 1 : chunk.length;\n  state.length += len;\n  var ret = state.length < state.highWaterMark; // we must ensure that previous needDrain will not be reset to false.\n\n  if (!ret) state.needDrain = true;\n\n  if (state.writing || state.corked) {\n    var last = state.lastBufferedRequest;\n    state.lastBufferedRequest = {\n      chunk: chunk,\n      encoding: encoding,\n      isBuf: isBuf,\n      callback: cb,\n      next: null\n    };\n\n    if (last) {\n      last.next = state.lastBufferedRequest;\n    } else {\n      state.bufferedRequest = state.lastBufferedRequest;\n    }\n\n    state.bufferedRequestCount += 1;\n  } else {\n    doWrite(stream, state, false, len, chunk, encoding, cb);\n  }\n\n  return ret;\n}\n\nfunction doWrite(stream, state, writev, len, chunk, encoding, cb) {\n  state.writelen = len;\n  state.writecb = cb;\n  state.writing = true;\n  state.sync = true;\n  if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite);\n  state.sync = false;\n}\n\nfunction onwriteError(stream, state, sync, er, cb) {\n  --state.pendingcb;\n\n  if (sync) {\n    // defer the callback if we are being called synchronously\n    // to avoid piling up things on the stack\n    pna.nextTick(cb, er); // this can emit finish, and it will always happen\n    // after error\n\n    pna.nextTick(finishMaybe, stream, state);\n    stream._writableState.errorEmitted = true;\n    stream.emit('error', er);\n  } else {\n    // the caller expect this to happen before if\n    // it is async\n    cb(er);\n    stream._writableState.errorEmitted = true;\n    stream.emit('error', er); // this can emit finish, but finish must\n    // always follow error\n\n    finishMaybe(stream, state);\n  }\n}\n\nfunction onwriteStateUpdate(state) {\n  state.writing = false;\n  state.writecb = null;\n  state.length -= state.writelen;\n  state.writelen = 0;\n}\n\nfunction onwrite(stream, er) {\n  var state = stream._writableState;\n  var sync = state.sync;\n  var cb = state.writecb;\n  onwriteStateUpdate(state);\n  if (er) onwriteError(stream, state, sync, er, cb);else {\n    // Check if we're actually ready to finish, but don't emit yet\n    var finished = needFinish(state);\n\n    if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) {\n      clearBuffer(stream, state);\n    }\n\n    if (sync) {\n      /*<replacement>*/\n      asyncWrite(afterWrite, stream, state, finished, cb);\n      /*</replacement>*/\n    } else {\n      afterWrite(stream, state, finished, cb);\n    }\n  }\n}\n\nfunction afterWrite(stream, state, finished, cb) {\n  if (!finished) onwriteDrain(stream, state);\n  state.pendingcb--;\n  cb();\n  finishMaybe(stream, state);\n} // Must force callback to be called on nextTick, so that we don't\n// emit 'drain' before the write() consumer gets the 'false' return\n// value, and has a chance to attach a 'drain' listener.\n\n\nfunction onwriteDrain(stream, state) {\n  if (state.length === 0 && state.needDrain) {\n    state.needDrain = false;\n    stream.emit('drain');\n  }\n} // if there's something in the buffer waiting, then process it\n\n\nfunction clearBuffer(stream, state) {\n  state.bufferProcessing = true;\n  var entry = state.bufferedRequest;\n\n  if (stream._writev && entry && entry.next) {\n    // Fast case, write everything using _writev()\n    var l = state.bufferedRequestCount;\n    var buffer = new Array(l);\n    var holder = state.corkedRequestsFree;\n    holder.entry = entry;\n    var count = 0;\n    var allBuffers = true;\n\n    while (entry) {\n      buffer[count] = entry;\n      if (!entry.isBuf) allBuffers = false;\n      entry = entry.next;\n      count += 1;\n    }\n\n    buffer.allBuffers = allBuffers;\n    doWrite(stream, state, true, state.length, buffer, '', holder.finish); // doWrite is almost always async, defer these to save a bit of time\n    // as the hot path ends with doWrite\n\n    state.pendingcb++;\n    state.lastBufferedRequest = null;\n\n    if (holder.next) {\n      state.corkedRequestsFree = holder.next;\n      holder.next = null;\n    } else {\n      state.corkedRequestsFree = new CorkedRequest(state);\n    }\n\n    state.bufferedRequestCount = 0;\n  } else {\n    // Slow case, write chunks one-by-one\n    while (entry) {\n      var chunk = entry.chunk;\n      var encoding = entry.encoding;\n      var cb = entry.callback;\n      var len = state.objectMode ? 1 : chunk.length;\n      doWrite(stream, state, false, len, chunk, encoding, cb);\n      entry = entry.next;\n      state.bufferedRequestCount--; // if we didn't call the onwrite immediately, then\n      // it means that we need to wait until it does.\n      // also, that means that the chunk and cb are currently\n      // being processed, so move the buffer counter past them.\n\n      if (state.writing) {\n        break;\n      }\n    }\n\n    if (entry === null) state.lastBufferedRequest = null;\n  }\n\n  state.bufferedRequest = entry;\n  state.bufferProcessing = false;\n}\n\nWritable.prototype._write = function (chunk, encoding, cb) {\n  cb(new Error('_write() is not implemented'));\n};\n\nWritable.prototype._writev = null;\n\nWritable.prototype.end = function (chunk, encoding, cb) {\n  var state = this._writableState;\n\n  if (typeof chunk === 'function') {\n    cb = chunk;\n    chunk = null;\n    encoding = null;\n  } else if (typeof encoding === 'function') {\n    cb = encoding;\n    encoding = null;\n  }\n\n  if (chunk !== null && chunk !== undefined) this.write(chunk, encoding); // .end() fully uncorks\n\n  if (state.corked) {\n    state.corked = 1;\n    this.uncork();\n  } // ignore unnecessary end() calls.\n\n\n  if (!state.ending && !state.finished) endWritable(this, state, cb);\n};\n\nfunction needFinish(state) {\n  return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing;\n}\n\nfunction callFinal(stream, state) {\n  stream._final(function (err) {\n    state.pendingcb--;\n\n    if (err) {\n      stream.emit('error', err);\n    }\n\n    state.prefinished = true;\n    stream.emit('prefinish');\n    finishMaybe(stream, state);\n  });\n}\n\nfunction prefinish(stream, state) {\n  if (!state.prefinished && !state.finalCalled) {\n    if (typeof stream._final === 'function') {\n      state.pendingcb++;\n      state.finalCalled = true;\n      pna.nextTick(callFinal, stream, state);\n    } else {\n      state.prefinished = true;\n      stream.emit('prefinish');\n    }\n  }\n}\n\nfunction finishMaybe(stream, state) {\n  var need = needFinish(state);\n\n  if (need) {\n    prefinish(stream, state);\n\n    if (state.pendingcb === 0) {\n      state.finished = true;\n      stream.emit('finish');\n    }\n  }\n\n  return need;\n}\n\nfunction endWritable(stream, state, cb) {\n  state.ending = true;\n  finishMaybe(stream, state);\n\n  if (cb) {\n    if (state.finished) pna.nextTick(cb);else stream.once('finish', cb);\n  }\n\n  state.ended = true;\n  stream.writable = false;\n}\n\nfunction onCorkedFinish(corkReq, state, err) {\n  var entry = corkReq.entry;\n  corkReq.entry = null;\n\n  while (entry) {\n    var cb = entry.callback;\n    state.pendingcb--;\n    cb(err);\n    entry = entry.next;\n  }\n\n  if (state.corkedRequestsFree) {\n    state.corkedRequestsFree.next = corkReq;\n  } else {\n    state.corkedRequestsFree = corkReq;\n  }\n}\n\nObject.defineProperty(Writable.prototype, 'destroyed', {\n  get: function get() {\n    if (this._writableState === undefined) {\n      return false;\n    }\n\n    return this._writableState.destroyed;\n  },\n  set: function set(value) {\n    // we ignore the value if the stream\n    // has not been initialized yet\n    if (!this._writableState) {\n      return;\n    } // backward compatibility, the user is explicitly\n    // managing destroyed\n\n\n    this._writableState.destroyed = value;\n  }\n});\nWritable.prototype.destroy = destroyImpl.destroy;\nWritable.prototype._undestroy = destroyImpl.undestroy;\n\nWritable.prototype._destroy = function (err, cb) {\n  this.end();\n  cb(err);\n};","'use strict';\n\nvar external = require(\"./external\");\n\nvar DataWorker = require('./stream/DataWorker');\n\nvar DataLengthProbe = require('./stream/DataLengthProbe');\n\nvar Crc32Probe = require('./stream/Crc32Probe');\n\nvar DataLengthProbe = require('./stream/DataLengthProbe');\n/**\n * Represent a compressed object, with everything needed to decompress it.\n * @constructor\n * @param {number} compressedSize the size of the data compressed.\n * @param {number} uncompressedSize the size of the data after decompression.\n * @param {number} crc32 the crc32 of the decompressed file.\n * @param {object} compression the type of compression, see lib/compressions.js.\n * @param {String|ArrayBuffer|Uint8Array|Buffer} data the compressed data.\n */\n\n\nfunction CompressedObject(compressedSize, uncompressedSize, crc32, compression, data) {\n  this.compressedSize = compressedSize;\n  this.uncompressedSize = uncompressedSize;\n  this.crc32 = crc32;\n  this.compression = compression;\n  this.compressedContent = data;\n}\n\nCompressedObject.prototype = {\n  /**\n   * Create a worker to get the uncompressed content.\n   * @return {GenericWorker} the worker.\n   */\n  getContentWorker: function getContentWorker() {\n    var worker = new DataWorker(external.Promise.resolve(this.compressedContent)).pipe(this.compression.uncompressWorker()).pipe(new DataLengthProbe(\"data_length\"));\n    var that = this;\n    worker.on(\"end\", function () {\n      if (this.streamInfo['data_length'] !== that.uncompressedSize) {\n        throw new Error(\"Bug : uncompressed data size mismatch\");\n      }\n    });\n    return worker;\n  },\n\n  /**\n   * Create a worker to get the compressed content.\n   * @return {GenericWorker} the worker.\n   */\n  getCompressedWorker: function getCompressedWorker() {\n    return new DataWorker(external.Promise.resolve(this.compressedContent)).withStreamInfo(\"compressedSize\", this.compressedSize).withStreamInfo(\"uncompressedSize\", this.uncompressedSize).withStreamInfo(\"crc32\", this.crc32).withStreamInfo(\"compression\", this.compression);\n  }\n};\n/**\n * Chain the given worker with other workers to compress the content with the\n * given compresion.\n * @param {GenericWorker} uncompressedWorker the worker to pipe.\n * @param {Object} compression the compression object.\n * @param {Object} compressionOptions the options to use when compressing.\n * @return {GenericWorker} the new worker compressing the content.\n */\n\nCompressedObject.createWorkerFrom = function (uncompressedWorker, compression, compressionOptions) {\n  return uncompressedWorker.pipe(new Crc32Probe()).pipe(new DataLengthProbe(\"uncompressedSize\")).pipe(compression.compressWorker(compressionOptions)).pipe(new DataLengthProbe(\"compressedSize\")).withStreamInfo(\"compression\", compression);\n};\n\nmodule.exports = CompressedObject;","'use strict';\n\nvar utils = require('./utils');\n/**\n * The following functions come from pako, from pako/lib/zlib/crc32.js\n * released under the MIT license, see pako https://github.com/nodeca/pako/\n */\n// Use ordinary array, since untyped makes no boost here\n\n\nfunction makeTable() {\n  var c,\n      table = [];\n\n  for (var n = 0; n < 256; n++) {\n    c = n;\n\n    for (var k = 0; k < 8; k++) {\n      c = c & 1 ? 0xEDB88320 ^ c >>> 1 : c >>> 1;\n    }\n\n    table[n] = c;\n  }\n\n  return table;\n} // Create table on load. Just 255 signed longs. Not a problem.\n\n\nvar crcTable = makeTable();\n\nfunction crc32(crc, buf, len, pos) {\n  var t = crcTable,\n      end = pos + len;\n  crc = crc ^ -1;\n\n  for (var i = pos; i < end; i++) {\n    crc = crc >>> 8 ^ t[(crc ^ buf[i]) & 0xFF];\n  }\n\n  return crc ^ -1; // >>> 0;\n} // That's all for the pako functions.\n\n/**\n * Compute the crc32 of a string.\n * This is almost the same as the function crc32, but for strings. Using the\n * same function for the two use cases leads to horrible performances.\n * @param {Number} crc the starting value of the crc.\n * @param {String} str the string to use.\n * @param {Number} len the length of the string.\n * @param {Number} pos the starting position for the crc32 computation.\n * @return {Number} the computed crc32.\n */\n\n\nfunction crc32str(crc, str, len, pos) {\n  var t = crcTable,\n      end = pos + len;\n  crc = crc ^ -1;\n\n  for (var i = pos; i < end; i++) {\n    crc = crc >>> 8 ^ t[(crc ^ str.charCodeAt(i)) & 0xFF];\n  }\n\n  return crc ^ -1; // >>> 0;\n}\n\nmodule.exports = function crc32wrapper(input, crc) {\n  if (typeof input === \"undefined\" || !input.length) {\n    return 0;\n  }\n\n  var isArray = utils.getTypeOf(input) !== \"string\";\n\n  if (isArray) {\n    return crc32(crc | 0, input, input.length, 0);\n  } else {\n    return crc32str(crc | 0, input, input.length, 0);\n  }\n};","'use strict'; // (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nmodule.exports = {\n  2: 'need dictionary',\n\n  /* Z_NEED_DICT       2  */\n  1: 'stream end',\n\n  /* Z_STREAM_END      1  */\n  0: '',\n\n  /* Z_OK              0  */\n  '-1': 'file error',\n\n  /* Z_ERRNO         (-1) */\n  '-2': 'stream error',\n\n  /* Z_STREAM_ERROR  (-2) */\n  '-3': 'data error',\n\n  /* Z_DATA_ERROR    (-3) */\n  '-4': 'insufficient memory',\n\n  /* Z_MEM_ERROR     (-4) */\n  '-5': 'buffer error',\n\n  /* Z_BUF_ERROR     (-5) */\n  '-6': 'incompatible version'\n  /* Z_VERSION_ERROR (-6) */\n\n};","\"use strict\";\n/**\r\n * Legacy color indexes.\r\n * https://msdn.microsoft.com/en-us/library/documentformat.openxml.spreadsheet.indexedcolors(v=office.15).aspx\r\n */\n\nmodule.exports = [\"000000\", \"FFFFFF\", \"FF0000\", \"00FF00\", \"0000FF\", \"FFFF00\", \"FF00FF\", \"00FFFF\", \"000000\", \"FFFFFF\", \"FF0000\", \"00FF00\", \"0000FF\", \"FFFF00\", \"FF00FF\", \"00FFFF\", \"800000\", \"008000\", \"000080\", \"808000\", \"800080\", \"008080\", \"C0C0C0\", \"808080\", \"9999FF\", \"993366\", \"FFFFCC\", \"CCFFFF\", \"660066\", \"FF8080\", \"0066CC\", \"CCCCFF\", \"000080\", \"FF00FF\", \"FFFF00\", \"00FFFF\", \"800080\", \"800000\", \"008080\", \"0000FF\", \"00CCFF\", \"CCFFFF\", \"CCFFCC\", \"FFFF99\", \"99CCFF\", \"FF99CC\", \"CC99FF\", \"FFCC99\", \"3366FF\", \"33CCCC\", \"99CC00\", \"FFCC00\", \"FF9900\", \"FF6600\", \"666699\", \"969696\", \"003366\", \"339966\", \"003300\", \"333300\", \"993300\", \"993366\", \"333399\", \"333333\", \"System Foreground\", \"System Background\"];","'use strict';\n\nvar inherits = require('inherits');\n\nvar HashBase = require('hash-base');\n\nvar Buffer = require('safe-buffer').Buffer;\n\nvar ARRAY16 = new Array(16);\n\nfunction MD5() {\n  HashBase.call(this, 64); // state\n\n  this._a = 0x67452301;\n  this._b = 0xefcdab89;\n  this._c = 0x98badcfe;\n  this._d = 0x10325476;\n}\n\ninherits(MD5, HashBase);\n\nMD5.prototype._update = function () {\n  var M = ARRAY16;\n\n  for (var i = 0; i < 16; ++i) {\n    M[i] = this._block.readInt32LE(i * 4);\n  }\n\n  var a = this._a;\n  var b = this._b;\n  var c = this._c;\n  var d = this._d;\n  a = fnF(a, b, c, d, M[0], 0xd76aa478, 7);\n  d = fnF(d, a, b, c, M[1], 0xe8c7b756, 12);\n  c = fnF(c, d, a, b, M[2], 0x242070db, 17);\n  b = fnF(b, c, d, a, M[3], 0xc1bdceee, 22);\n  a = fnF(a, b, c, d, M[4], 0xf57c0faf, 7);\n  d = fnF(d, a, b, c, M[5], 0x4787c62a, 12);\n  c = fnF(c, d, a, b, M[6], 0xa8304613, 17);\n  b = fnF(b, c, d, a, M[7], 0xfd469501, 22);\n  a = fnF(a, b, c, d, M[8], 0x698098d8, 7);\n  d = fnF(d, a, b, c, M[9], 0x8b44f7af, 12);\n  c = fnF(c, d, a, b, M[10], 0xffff5bb1, 17);\n  b = fnF(b, c, d, a, M[11], 0x895cd7be, 22);\n  a = fnF(a, b, c, d, M[12], 0x6b901122, 7);\n  d = fnF(d, a, b, c, M[13], 0xfd987193, 12);\n  c = fnF(c, d, a, b, M[14], 0xa679438e, 17);\n  b = fnF(b, c, d, a, M[15], 0x49b40821, 22);\n  a = fnG(a, b, c, d, M[1], 0xf61e2562, 5);\n  d = fnG(d, a, b, c, M[6], 0xc040b340, 9);\n  c = fnG(c, d, a, b, M[11], 0x265e5a51, 14);\n  b = fnG(b, c, d, a, M[0], 0xe9b6c7aa, 20);\n  a = fnG(a, b, c, d, M[5], 0xd62f105d, 5);\n  d = fnG(d, a, b, c, M[10], 0x02441453, 9);\n  c = fnG(c, d, a, b, M[15], 0xd8a1e681, 14);\n  b = fnG(b, c, d, a, M[4], 0xe7d3fbc8, 20);\n  a = fnG(a, b, c, d, M[9], 0x21e1cde6, 5);\n  d = fnG(d, a, b, c, M[14], 0xc33707d6, 9);\n  c = fnG(c, d, a, b, M[3], 0xf4d50d87, 14);\n  b = fnG(b, c, d, a, M[8], 0x455a14ed, 20);\n  a = fnG(a, b, c, d, M[13], 0xa9e3e905, 5);\n  d = fnG(d, a, b, c, M[2], 0xfcefa3f8, 9);\n  c = fnG(c, d, a, b, M[7], 0x676f02d9, 14);\n  b = fnG(b, c, d, a, M[12], 0x8d2a4c8a, 20);\n  a = fnH(a, b, c, d, M[5], 0xfffa3942, 4);\n  d = fnH(d, a, b, c, M[8], 0x8771f681, 11);\n  c = fnH(c, d, a, b, M[11], 0x6d9d6122, 16);\n  b = fnH(b, c, d, a, M[14], 0xfde5380c, 23);\n  a = fnH(a, b, c, d, M[1], 0xa4beea44, 4);\n  d = fnH(d, a, b, c, M[4], 0x4bdecfa9, 11);\n  c = fnH(c, d, a, b, M[7], 0xf6bb4b60, 16);\n  b = fnH(b, c, d, a, M[10], 0xbebfbc70, 23);\n  a = fnH(a, b, c, d, M[13], 0x289b7ec6, 4);\n  d = fnH(d, a, b, c, M[0], 0xeaa127fa, 11);\n  c = fnH(c, d, a, b, M[3], 0xd4ef3085, 16);\n  b = fnH(b, c, d, a, M[6], 0x04881d05, 23);\n  a = fnH(a, b, c, d, M[9], 0xd9d4d039, 4);\n  d = fnH(d, a, b, c, M[12], 0xe6db99e5, 11);\n  c = fnH(c, d, a, b, M[15], 0x1fa27cf8, 16);\n  b = fnH(b, c, d, a, M[2], 0xc4ac5665, 23);\n  a = fnI(a, b, c, d, M[0], 0xf4292244, 6);\n  d = fnI(d, a, b, c, M[7], 0x432aff97, 10);\n  c = fnI(c, d, a, b, M[14], 0xab9423a7, 15);\n  b = fnI(b, c, d, a, M[5], 0xfc93a039, 21);\n  a = fnI(a, b, c, d, M[12], 0x655b59c3, 6);\n  d = fnI(d, a, b, c, M[3], 0x8f0ccc92, 10);\n  c = fnI(c, d, a, b, M[10], 0xffeff47d, 15);\n  b = fnI(b, c, d, a, M[1], 0x85845dd1, 21);\n  a = fnI(a, b, c, d, M[8], 0x6fa87e4f, 6);\n  d = fnI(d, a, b, c, M[15], 0xfe2ce6e0, 10);\n  c = fnI(c, d, a, b, M[6], 0xa3014314, 15);\n  b = fnI(b, c, d, a, M[13], 0x4e0811a1, 21);\n  a = fnI(a, b, c, d, M[4], 0xf7537e82, 6);\n  d = fnI(d, a, b, c, M[11], 0xbd3af235, 10);\n  c = fnI(c, d, a, b, M[2], 0x2ad7d2bb, 15);\n  b = fnI(b, c, d, a, M[9], 0xeb86d391, 21);\n  this._a = this._a + a | 0;\n  this._b = this._b + b | 0;\n  this._c = this._c + c | 0;\n  this._d = this._d + d | 0;\n};\n\nMD5.prototype._digest = function () {\n  // create padding and handle blocks\n  this._block[this._blockOffset++] = 0x80;\n\n  if (this._blockOffset > 56) {\n    this._block.fill(0, this._blockOffset, 64);\n\n    this._update();\n\n    this._blockOffset = 0;\n  }\n\n  this._block.fill(0, this._blockOffset, 56);\n\n  this._block.writeUInt32LE(this._length[0], 56);\n\n  this._block.writeUInt32LE(this._length[1], 60);\n\n  this._update(); // produce result\n\n\n  var buffer = Buffer.allocUnsafe(16);\n  buffer.writeInt32LE(this._a, 0);\n  buffer.writeInt32LE(this._b, 4);\n  buffer.writeInt32LE(this._c, 8);\n  buffer.writeInt32LE(this._d, 12);\n  return buffer;\n};\n\nfunction rotl(x, n) {\n  return x << n | x >>> 32 - n;\n}\n\nfunction fnF(a, b, c, d, m, k, s) {\n  return rotl(a + (b & c | ~b & d) + m + k | 0, s) + b | 0;\n}\n\nfunction fnG(a, b, c, d, m, k, s) {\n  return rotl(a + (b & d | c & ~d) + m + k | 0, s) + b | 0;\n}\n\nfunction fnH(a, b, c, d, m, k, s) {\n  return rotl(a + (b ^ c ^ d) + m + k | 0, s) + b | 0;\n}\n\nfunction fnI(a, b, c, d, m, k, s) {\n  return rotl(a + (c ^ (b | ~d)) + m + k | 0, s) + b | 0;\n}\n\nmodule.exports = MD5;","'use strict';\n\nvar Buffer = require('buffer').Buffer;\n\nvar inherits = require('inherits');\n\nvar HashBase = require('hash-base');\n\nvar ARRAY16 = new Array(16);\nvar zl = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8, 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12, 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2, 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13];\nvar zr = [5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12, 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2, 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13, 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14, 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11];\nvar sl = [11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8, 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12, 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5, 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12, 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6];\nvar sr = [8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6, 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11, 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5, 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8, 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11];\nvar hl = [0x00000000, 0x5a827999, 0x6ed9eba1, 0x8f1bbcdc, 0xa953fd4e];\nvar hr = [0x50a28be6, 0x5c4dd124, 0x6d703ef3, 0x7a6d76e9, 0x00000000];\n\nfunction RIPEMD160() {\n  HashBase.call(this, 64); // state\n\n  this._a = 0x67452301;\n  this._b = 0xefcdab89;\n  this._c = 0x98badcfe;\n  this._d = 0x10325476;\n  this._e = 0xc3d2e1f0;\n}\n\ninherits(RIPEMD160, HashBase);\n\nRIPEMD160.prototype._update = function () {\n  var words = ARRAY16;\n\n  for (var j = 0; j < 16; ++j) {\n    words[j] = this._block.readInt32LE(j * 4);\n  }\n\n  var al = this._a | 0;\n  var bl = this._b | 0;\n  var cl = this._c | 0;\n  var dl = this._d | 0;\n  var el = this._e | 0;\n  var ar = this._a | 0;\n  var br = this._b | 0;\n  var cr = this._c | 0;\n  var dr = this._d | 0;\n  var er = this._e | 0; // computation\n\n  for (var i = 0; i < 80; i += 1) {\n    var tl;\n    var tr;\n\n    if (i < 16) {\n      tl = fn1(al, bl, cl, dl, el, words[zl[i]], hl[0], sl[i]);\n      tr = fn5(ar, br, cr, dr, er, words[zr[i]], hr[0], sr[i]);\n    } else if (i < 32) {\n      tl = fn2(al, bl, cl, dl, el, words[zl[i]], hl[1], sl[i]);\n      tr = fn4(ar, br, cr, dr, er, words[zr[i]], hr[1], sr[i]);\n    } else if (i < 48) {\n      tl = fn3(al, bl, cl, dl, el, words[zl[i]], hl[2], sl[i]);\n      tr = fn3(ar, br, cr, dr, er, words[zr[i]], hr[2], sr[i]);\n    } else if (i < 64) {\n      tl = fn4(al, bl, cl, dl, el, words[zl[i]], hl[3], sl[i]);\n      tr = fn2(ar, br, cr, dr, er, words[zr[i]], hr[3], sr[i]);\n    } else {\n      // if (i<80) {\n      tl = fn5(al, bl, cl, dl, el, words[zl[i]], hl[4], sl[i]);\n      tr = fn1(ar, br, cr, dr, er, words[zr[i]], hr[4], sr[i]);\n    }\n\n    al = el;\n    el = dl;\n    dl = rotl(cl, 10);\n    cl = bl;\n    bl = tl;\n    ar = er;\n    er = dr;\n    dr = rotl(cr, 10);\n    cr = br;\n    br = tr;\n  } // update state\n\n\n  var t = this._b + cl + dr | 0;\n  this._b = this._c + dl + er | 0;\n  this._c = this._d + el + ar | 0;\n  this._d = this._e + al + br | 0;\n  this._e = this._a + bl + cr | 0;\n  this._a = t;\n};\n\nRIPEMD160.prototype._digest = function () {\n  // create padding and handle blocks\n  this._block[this._blockOffset++] = 0x80;\n\n  if (this._blockOffset > 56) {\n    this._block.fill(0, this._blockOffset, 64);\n\n    this._update();\n\n    this._blockOffset = 0;\n  }\n\n  this._block.fill(0, this._blockOffset, 56);\n\n  this._block.writeUInt32LE(this._length[0], 56);\n\n  this._block.writeUInt32LE(this._length[1], 60);\n\n  this._update(); // produce result\n\n\n  var buffer = Buffer.alloc ? Buffer.alloc(20) : new Buffer(20);\n  buffer.writeInt32LE(this._a, 0);\n  buffer.writeInt32LE(this._b, 4);\n  buffer.writeInt32LE(this._c, 8);\n  buffer.writeInt32LE(this._d, 12);\n  buffer.writeInt32LE(this._e, 16);\n  return buffer;\n};\n\nfunction rotl(x, n) {\n  return x << n | x >>> 32 - n;\n}\n\nfunction fn1(a, b, c, d, e, m, k, s) {\n  return rotl(a + (b ^ c ^ d) + m + k | 0, s) + e | 0;\n}\n\nfunction fn2(a, b, c, d, e, m, k, s) {\n  return rotl(a + (b & c | ~b & d) + m + k | 0, s) + e | 0;\n}\n\nfunction fn3(a, b, c, d, e, m, k, s) {\n  return rotl(a + ((b | ~c) ^ d) + m + k | 0, s) + e | 0;\n}\n\nfunction fn4(a, b, c, d, e, m, k, s) {\n  return rotl(a + (b & d | c & ~d) + m + k | 0, s) + e | 0;\n}\n\nfunction fn5(a, b, c, d, e, m, k, s) {\n  return rotl(a + (b ^ (c | ~d)) + m + k | 0, s) + e | 0;\n}\n\nmodule.exports = RIPEMD160;","var exports = module.exports = function SHA(algorithm) {\n  algorithm = algorithm.toLowerCase();\n  var Algorithm = exports[algorithm];\n  if (!Algorithm) throw new Error(algorithm + ' is not supported (we accept pull requests)');\n  return new Algorithm();\n};\n\nexports.sha = require('./sha');\nexports.sha1 = require('./sha1');\nexports.sha224 = require('./sha224');\nexports.sha256 = require('./sha256');\nexports.sha384 = require('./sha384');\nexports.sha512 = require('./sha512');","'use strict';\n\nexports.utils = require('./des/utils');\nexports.Cipher = require('./des/cipher');\nexports.DES = require('./des/des');\nexports.CBC = require('./des/cbc');\nexports.EDE = require('./des/ede');","var ciphers = require('./encrypter');\n\nvar deciphers = require('./decrypter');\n\nvar modes = require('./modes/list.json');\n\nfunction getCiphers() {\n  return Object.keys(modes);\n}\n\nexports.createCipher = exports.Cipher = ciphers.createCipher;\nexports.createCipheriv = exports.Cipheriv = ciphers.createCipheriv;\nexports.createDecipher = exports.Decipher = deciphers.createDecipher;\nexports.createDecipheriv = exports.Decipheriv = deciphers.createDecipheriv;\nexports.listCiphers = exports.getCiphers = getCiphers;","var modeModules = {\n  ECB: require('./ecb'),\n  CBC: require('./cbc'),\n  CFB: require('./cfb'),\n  CFB8: require('./cfb8'),\n  CFB1: require('./cfb1'),\n  OFB: require('./ofb'),\n  CTR: require('./ctr'),\n  GCM: require('./ctr')\n};\n\nvar modes = require('./list.json');\n\nfor (var key in modes) {\n  modes[key].module = modeModules[modes[key].mode];\n}\n\nmodule.exports = modes;","function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nvar r;\n\nmodule.exports = function rand(len) {\n  if (!r) r = new Rand(null);\n  return r.generate(len);\n};\n\nfunction Rand(rand) {\n  this.rand = rand;\n}\n\nmodule.exports.Rand = Rand;\n\nRand.prototype.generate = function generate(len) {\n  return this._rand(len);\n}; // Emulate crypto API using randy\n\n\nRand.prototype._rand = function _rand(n) {\n  if (this.rand.getBytes) return this.rand.getBytes(n);\n  var res = new Uint8Array(n);\n\n  for (var i = 0; i < res.length; i++) {\n    res[i] = this.rand.getByte();\n  }\n\n  return res;\n};\n\nif ((typeof self === \"undefined\" ? \"undefined\" : _typeof(self)) === 'object') {\n  if (self.crypto && self.crypto.getRandomValues) {\n    // Modern browsers\n    Rand.prototype._rand = function _rand(n) {\n      var arr = new Uint8Array(n);\n      self.crypto.getRandomValues(arr);\n      return arr;\n    };\n  } else if (self.msCrypto && self.msCrypto.getRandomValues) {\n    // IE\n    Rand.prototype._rand = function _rand(n) {\n      var arr = new Uint8Array(n);\n      self.msCrypto.getRandomValues(arr);\n      return arr;\n    }; // Safari's WebWorkers do not have `crypto`\n\n  } else if ((typeof window === \"undefined\" ? \"undefined\" : _typeof(window)) === 'object') {\n    // Old junk\n    Rand.prototype._rand = function () {\n      throw new Error('Not implemented yet');\n    };\n  }\n} else {\n  // Node.js or Web worker with no crypto support\n  try {\n    var crypto = require('crypto');\n\n    if (typeof crypto.randomBytes !== 'function') throw new Error('Not supported');\n\n    Rand.prototype._rand = function _rand(n) {\n      return crypto.randomBytes(n);\n    };\n  } catch (e) {}\n}","var bn = require('bn.js');\n\nvar randomBytes = require('randombytes');\n\nmodule.exports = crt;\n\nfunction blind(priv) {\n  var r = getr(priv);\n  var blinder = r.toRed(bn.mont(priv.modulus)).redPow(new bn(priv.publicExponent)).fromRed();\n  return {\n    blinder: blinder,\n    unblinder: r.invm(priv.modulus)\n  };\n}\n\nfunction crt(msg, priv) {\n  var blinds = blind(priv);\n  var len = priv.modulus.byteLength();\n  var mod = bn.mont(priv.modulus);\n  var blinded = new bn(msg).mul(blinds.blinder).umod(priv.modulus);\n  var c1 = blinded.toRed(bn.mont(priv.prime1));\n  var c2 = blinded.toRed(bn.mont(priv.prime2));\n  var qinv = priv.coefficient;\n  var p = priv.prime1;\n  var q = priv.prime2;\n  var m1 = c1.redPow(priv.exponent1);\n  var m2 = c2.redPow(priv.exponent2);\n  m1 = m1.fromRed();\n  m2 = m2.fromRed();\n  var h = m1.isub(m2).imul(qinv).umod(p);\n  h.imul(q);\n  m2.iadd(h);\n  return new Buffer(m2.imul(blinds.unblinder).umod(priv.modulus).toArray(false, len));\n}\n\ncrt.getr = getr;\n\nfunction getr(priv) {\n  var len = priv.modulus.byteLength();\n  var r = new bn(randomBytes(len));\n\n  while (r.cmp(priv.modulus) >= 0 || !r.umod(priv.prime1) || !r.umod(priv.prime2)) {\n    r = new bn(randomBytes(len));\n  }\n\n  return r;\n}","'use strict';\n\nvar elliptic = exports;\nelliptic.version = require('../package.json').version;\nelliptic.utils = require('./elliptic/utils');\nelliptic.rand = require('brorand');\nelliptic.curve = require('./elliptic/curve');\nelliptic.curves = require('./elliptic/curves'); // Protocols\n\nelliptic.ec = require('./elliptic/ec');\nelliptic.eddsa = require('./elliptic/eddsa');","'use strict';\n\nvar curves = exports;\n\nvar hash = require('hash.js');\n\nvar curve = require('./curve');\n\nvar utils = require('./utils');\n\nvar assert = utils.assert;\n\nfunction PresetCurve(options) {\n  if (options.type === 'short') this.curve = new curve[\"short\"](options);else if (options.type === 'edwards') this.curve = new curve.edwards(options);else this.curve = new curve.mont(options);\n  this.g = this.curve.g;\n  this.n = this.curve.n;\n  this.hash = options.hash;\n  assert(this.g.validate(), 'Invalid curve');\n  assert(this.g.mul(this.n).isInfinity(), 'Invalid curve, G*N != O');\n}\n\ncurves.PresetCurve = PresetCurve;\n\nfunction defineCurve(name, options) {\n  Object.defineProperty(curves, name, {\n    configurable: true,\n    enumerable: true,\n    get: function get() {\n      var curve = new PresetCurve(options);\n      Object.defineProperty(curves, name, {\n        configurable: true,\n        enumerable: true,\n        value: curve\n      });\n      return curve;\n    }\n  });\n}\n\ndefineCurve('p192', {\n  type: 'short',\n  prime: 'p192',\n  p: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff',\n  a: 'ffffffff ffffffff ffffffff fffffffe ffffffff fffffffc',\n  b: '64210519 e59c80e7 0fa7e9ab 72243049 feb8deec c146b9b1',\n  n: 'ffffffff ffffffff ffffffff 99def836 146bc9b1 b4d22831',\n  hash: hash.sha256,\n  gRed: false,\n  g: ['188da80e b03090f6 7cbf20eb 43a18800 f4ff0afd 82ff1012', '07192b95 ffc8da78 631011ed 6b24cdd5 73f977a1 1e794811']\n});\ndefineCurve('p224', {\n  type: 'short',\n  prime: 'p224',\n  p: 'ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001',\n  a: 'ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff fffffffe',\n  b: 'b4050a85 0c04b3ab f5413256 5044b0b7 d7bfd8ba 270b3943 2355ffb4',\n  n: 'ffffffff ffffffff ffffffff ffff16a2 e0b8f03e 13dd2945 5c5c2a3d',\n  hash: hash.sha256,\n  gRed: false,\n  g: ['b70e0cbd 6bb4bf7f 321390b9 4a03c1d3 56c21122 343280d6 115c1d21', 'bd376388 b5f723fb 4c22dfe6 cd4375a0 5a074764 44d58199 85007e34']\n});\ndefineCurve('p256', {\n  type: 'short',\n  prime: null,\n  p: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff ffffffff',\n  a: 'ffffffff 00000001 00000000 00000000 00000000 ffffffff ffffffff fffffffc',\n  b: '5ac635d8 aa3a93e7 b3ebbd55 769886bc 651d06b0 cc53b0f6 3bce3c3e 27d2604b',\n  n: 'ffffffff 00000000 ffffffff ffffffff bce6faad a7179e84 f3b9cac2 fc632551',\n  hash: hash.sha256,\n  gRed: false,\n  g: ['6b17d1f2 e12c4247 f8bce6e5 63a440f2 77037d81 2deb33a0 f4a13945 d898c296', '4fe342e2 fe1a7f9b 8ee7eb4a 7c0f9e16 2bce3357 6b315ece cbb64068 37bf51f5']\n});\ndefineCurve('p384', {\n  type: 'short',\n  prime: null,\n  p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' + 'fffffffe ffffffff 00000000 00000000 ffffffff',\n  a: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' + 'fffffffe ffffffff 00000000 00000000 fffffffc',\n  b: 'b3312fa7 e23ee7e4 988e056b e3f82d19 181d9c6e fe814112 0314088f ' + '5013875a c656398d 8a2ed19d 2a85c8ed d3ec2aef',\n  n: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff c7634d81 ' + 'f4372ddf 581a0db2 48b0a77a ecec196a ccc52973',\n  hash: hash.sha384,\n  gRed: false,\n  g: ['aa87ca22 be8b0537 8eb1c71e f320ad74 6e1d3b62 8ba79b98 59f741e0 82542a38 ' + '5502f25d bf55296c 3a545e38 72760ab7', '3617de4a 96262c6f 5d9e98bf 9292dc29 f8f41dbd 289a147c e9da3113 b5f0b8c0 ' + '0a60b1ce 1d7e819d 7a431d7c 90ea0e5f']\n});\ndefineCurve('p521', {\n  type: 'short',\n  prime: null,\n  p: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' + 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' + 'ffffffff ffffffff ffffffff ffffffff ffffffff',\n  a: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' + 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff ' + 'ffffffff ffffffff ffffffff ffffffff fffffffc',\n  b: '00000051 953eb961 8e1c9a1f 929a21a0 b68540ee a2da725b ' + '99b315f3 b8b48991 8ef109e1 56193951 ec7e937b 1652c0bd ' + '3bb1bf07 3573df88 3d2c34f1 ef451fd4 6b503f00',\n  n: '000001ff ffffffff ffffffff ffffffff ffffffff ffffffff ' + 'ffffffff ffffffff fffffffa 51868783 bf2f966b 7fcc0148 ' + 'f709a5d0 3bb5c9b8 899c47ae bb6fb71e 91386409',\n  hash: hash.sha512,\n  gRed: false,\n  g: ['000000c6 858e06b7 0404e9cd 9e3ecb66 2395b442 9c648139 ' + '053fb521 f828af60 6b4d3dba a14b5e77 efe75928 fe1dc127 ' + 'a2ffa8de 3348b3c1 856a429b f97e7e31 c2e5bd66', '00000118 39296a78 9a3bc004 5c8a5fb4 2c7d1bd9 98f54449 ' + '579b4468 17afbd17 273e662c 97ee7299 5ef42640 c550b901 ' + '3fad0761 353c7086 a272c240 88be9476 9fd16650']\n});\ndefineCurve('curve25519', {\n  type: 'mont',\n  prime: 'p25519',\n  p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',\n  a: '76d06',\n  b: '1',\n  n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',\n  hash: hash.sha256,\n  gRed: false,\n  g: ['9']\n});\ndefineCurve('ed25519', {\n  type: 'edwards',\n  prime: 'p25519',\n  p: '7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed',\n  a: '-1',\n  c: '1',\n  // -121665 * (121666^(-1)) (mod P)\n  d: '52036cee2b6ffe73 8cc740797779e898 00700a4d4141d8ab 75eb4dca135978a3',\n  n: '1000000000000000 0000000000000000 14def9dea2f79cd6 5812631a5cf5d3ed',\n  hash: hash.sha256,\n  gRed: false,\n  g: ['216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51a', // 4/5\n  '6666666666666666666666666666666666666666666666666666666666666658']\n});\nvar pre;\n\ntry {\n  pre = require('./precomputed/secp256k1');\n} catch (e) {\n  pre = undefined;\n}\n\ndefineCurve('secp256k1', {\n  type: 'short',\n  prime: 'k256',\n  p: 'ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f',\n  a: '0',\n  b: '7',\n  n: 'ffffffff ffffffff ffffffff fffffffe baaedce6 af48a03b bfd25e8c d0364141',\n  h: '1',\n  hash: hash.sha256,\n  // Precomputed endomorphism\n  beta: '7ae96a2b657c07106e64479eac3434e99cf0497512f58995c1396c28719501ee',\n  lambda: '5363ad4cc05c30e0a5261c028812645a122e22ea20816678df02967c1b23bd72',\n  basis: [{\n    a: '3086d221a7d46bcde86c90e49284eb15',\n    b: '-e4437ed6010e88286f547fa90abfe4c3'\n  }, {\n    a: '114ca50f7a8e2f3f657c1108d9d44cfd8',\n    b: '3086d221a7d46bcde86c90e49284eb15'\n  }],\n  gRed: false,\n  g: ['79be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798', '483ada7726a3c4655da4fbfc0e1108a8fd17b448a68554199c47d08ffb10d4b8', pre]\n});","var hash = exports;\nhash.utils = require('./hash/utils');\nhash.common = require('./hash/common');\nhash.sha = require('./hash/sha');\nhash.ripemd = require('./hash/ripemd');\nhash.hmac = require('./hash/hmac'); // Proxy hash functions to the main object\n\nhash.sha1 = hash.sha.sha1;\nhash.sha256 = hash.sha.sha256;\nhash.sha224 = hash.sha.sha224;\nhash.sha384 = hash.sha.sha384;\nhash.sha512 = hash.sha.sha512;\nhash.ripemd160 = hash.ripemd.ripemd160;","function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n//! moment.js locale configuration\n;\n\n(function (global, factory) {\n  (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  var ja = moment.defineLocale('ja', {\n    months: '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split('_'),\n    monthsShort: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'),\n    weekdays: '日曜日_月曜日_火曜日_水曜日_木曜日_金曜日_土曜日'.split('_'),\n    weekdaysShort: '日_月_火_水_木_金_土'.split('_'),\n    weekdaysMin: '日_月_火_水_木_金_土'.split('_'),\n    longDateFormat: {\n      LT: 'HH:mm',\n      LTS: 'HH:mm:ss',\n      L: 'YYYY/MM/DD',\n      LL: 'YYYY年M月D日',\n      LLL: 'YYYY年M月D日 HH:mm',\n      LLLL: 'YYYY年M月D日 dddd HH:mm',\n      l: 'YYYY/MM/DD',\n      ll: 'YYYY年M月D日',\n      lll: 'YYYY年M月D日 HH:mm',\n      llll: 'YYYY年M月D日(ddd) HH:mm'\n    },\n    meridiemParse: /午前|午後/i,\n    isPM: function isPM(input) {\n      return input === '午後';\n    },\n    meridiem: function meridiem(hour, minute, isLower) {\n      if (hour < 12) {\n        return '午前';\n      } else {\n        return '午後';\n      }\n    },\n    calendar: {\n      sameDay: '[今日] LT',\n      nextDay: '[明日] LT',\n      nextWeek: function nextWeek(now) {\n        if (now.week() < this.week()) {\n          return '[来週]dddd LT';\n        } else {\n          return 'dddd LT';\n        }\n      },\n      lastDay: '[昨日] LT',\n      lastWeek: function lastWeek(now) {\n        if (this.week() < now.week()) {\n          return '[先週]dddd LT';\n        } else {\n          return 'dddd LT';\n        }\n      },\n      sameElse: 'L'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}日/,\n    ordinal: function ordinal(number, period) {\n      switch (period) {\n        case 'd':\n        case 'D':\n        case 'DDD':\n          return number + '日';\n\n        default:\n          return number;\n      }\n    },\n    relativeTime: {\n      future: '%s後',\n      past: '%s前',\n      s: '数秒',\n      ss: '%d秒',\n      m: '1分',\n      mm: '%d分',\n      h: '1時間',\n      hh: '%d時間',\n      d: '1日',\n      dd: '%d日',\n      M: '1ヶ月',\n      MM: '%dヶ月',\n      y: '1年',\n      yy: '%d年'\n    }\n  });\n  return ja;\n});","function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n/* @license\nPapa Parse\nv5.1.0\nhttps://github.com/mholt/PapaParse\nLicense: MIT\n*/\n!function (e, t) {\n  \"function\" == typeof define && define.amd ? define([], t) : \"object\" == (typeof module === \"undefined\" ? \"undefined\" : _typeof(module)) && \"undefined\" != typeof exports ? module.exports = t() : e.Papa = t();\n}(this, function s() {\n  \"use strict\";\n\n  var f = \"undefined\" != typeof self ? self : \"undefined\" != typeof window ? window : void 0 !== f ? f : {};\n  var n = !f.document && !!f.postMessage,\n      o = n && /blob:/i.test((f.location || {}).protocol),\n      a = {},\n      h = 0,\n      b = {\n    parse: function parse(e, t) {\n      var r = (t = t || {}).dynamicTyping || !1;\n      q(r) && (t.dynamicTypingFunction = r, r = {});\n\n      if (t.dynamicTyping = r, t.transform = !!q(t.transform) && t.transform, t.worker && b.WORKERS_SUPPORTED) {\n        var i = function () {\n          if (!b.WORKERS_SUPPORTED) return !1;\n          var e = (r = f.URL || f.webkitURL || null, i = s.toString(), b.BLOB_URL || (b.BLOB_URL = r.createObjectURL(new Blob([\"(\", i, \")();\"], {\n            type: \"text/javascript\"\n          })))),\n              t = new f.Worker(e);\n          var r, i;\n          return t.onmessage = _, t.id = h++, a[t.id] = t;\n        }();\n\n        return i.userStep = t.step, i.userChunk = t.chunk, i.userComplete = t.complete, i.userError = t.error, t.step = q(t.step), t.chunk = q(t.chunk), t.complete = q(t.complete), t.error = q(t.error), delete t.worker, void i.postMessage({\n          input: e,\n          config: t,\n          workerId: i.id\n        });\n      }\n\n      var n = null;\n      b.NODE_STREAM_INPUT, \"string\" == typeof e ? n = t.download ? new l(t) : new p(t) : !0 === e.readable && q(e.read) && q(e.on) ? n = new m(t) : (f.File && e instanceof File || e instanceof Object) && (n = new c(t));\n      return n.stream(e);\n    },\n    unparse: function unparse(e, t) {\n      var n = !1,\n          _ = !0,\n          g = \",\",\n          v = \"\\r\\n\",\n          s = '\"',\n          a = s + s,\n          r = !1,\n          i = null;\n\n      !function () {\n        if (\"object\" != _typeof(t)) return;\n        \"string\" != typeof t.delimiter || b.BAD_DELIMITERS.filter(function (e) {\n          return -1 !== t.delimiter.indexOf(e);\n        }).length || (g = t.delimiter);\n        (\"boolean\" == typeof t.quotes || \"function\" == typeof t.quotes || Array.isArray(t.quotes)) && (n = t.quotes);\n        \"boolean\" != typeof t.skipEmptyLines && \"string\" != typeof t.skipEmptyLines || (r = t.skipEmptyLines);\n        \"string\" == typeof t.newline && (v = t.newline);\n        \"string\" == typeof t.quoteChar && (s = t.quoteChar);\n        \"boolean\" == typeof t.header && (_ = t.header);\n\n        if (Array.isArray(t.columns)) {\n          if (0 === t.columns.length) throw new Error(\"Option columns is empty\");\n          i = t.columns;\n        }\n\n        void 0 !== t.escapeChar && (a = t.escapeChar + s);\n      }();\n      var o = new RegExp(U(s), \"g\");\n      \"string\" == typeof e && (e = JSON.parse(e));\n\n      if (Array.isArray(e)) {\n        if (!e.length || Array.isArray(e[0])) return u(null, e, r);\n        if (\"object\" == _typeof(e[0])) return u(i || h(e[0]), e, r);\n      } else if (\"object\" == _typeof(e)) return \"string\" == typeof e.data && (e.data = JSON.parse(e.data)), Array.isArray(e.data) && (e.fields || (e.fields = e.meta && e.meta.fields), e.fields || (e.fields = Array.isArray(e.data[0]) ? e.fields : h(e.data[0])), Array.isArray(e.data[0]) || \"object\" == _typeof(e.data[0]) || (e.data = [e.data])), u(e.fields || [], e.data || [], r);\n\n      throw new Error(\"Unable to serialize unrecognized input\");\n\n      function h(e) {\n        if (\"object\" != _typeof(e)) return [];\n        var t = [];\n\n        for (var r in e) {\n          t.push(r);\n        }\n\n        return t;\n      }\n\n      function u(e, t, r) {\n        var i = \"\";\n        \"string\" == typeof e && (e = JSON.parse(e)), \"string\" == typeof t && (t = JSON.parse(t));\n        var n = Array.isArray(e) && 0 < e.length,\n            s = !Array.isArray(t[0]);\n\n        if (n && _) {\n          for (var a = 0; a < e.length; a++) {\n            0 < a && (i += g), i += y(e[a], a);\n          }\n\n          0 < t.length && (i += v);\n        }\n\n        for (var o = 0; o < t.length; o++) {\n          var h = n ? e.length : t[o].length,\n              u = !1,\n              f = n ? 0 === Object.keys(t[o]).length : 0 === t[o].length;\n\n          if (r && !n && (u = \"greedy\" === r ? \"\" === t[o].join(\"\").trim() : 1 === t[o].length && 0 === t[o][0].length), \"greedy\" === r && n) {\n            for (var d = [], l = 0; l < h; l++) {\n              var c = s ? e[l] : l;\n              d.push(t[o][c]);\n            }\n\n            u = \"\" === d.join(\"\").trim();\n          }\n\n          if (!u) {\n            for (var p = 0; p < h; p++) {\n              0 < p && !f && (i += g);\n              var m = n && s ? e[p] : p;\n              i += y(t[o][m], p);\n            }\n\n            o < t.length - 1 && (!r || 0 < h && !f) && (i += v);\n          }\n        }\n\n        return i;\n      }\n\n      function y(e, t) {\n        if (null == e) return \"\";\n        if (e.constructor === Date) return JSON.stringify(e).slice(1, 25);\n\n        var r = e.toString().replace(o, a),\n            i = \"boolean\" == typeof n && n || \"function\" == typeof n && n(e, t) || Array.isArray(n) && n[t] || function (e, t) {\n          for (var r = 0; r < t.length; r++) {\n            if (-1 < e.indexOf(t[r])) return !0;\n          }\n\n          return !1;\n        }(r, b.BAD_DELIMITERS) || -1 < r.indexOf(g) || \" \" === r.charAt(0) || \" \" === r.charAt(r.length - 1);\n\n        return i ? s + r + s : r;\n      }\n    }\n  };\n\n  if (b.RECORD_SEP = String.fromCharCode(30), b.UNIT_SEP = String.fromCharCode(31), b.BYTE_ORDER_MARK = \"\\uFEFF\", b.BAD_DELIMITERS = [\"\\r\", \"\\n\", '\"', b.BYTE_ORDER_MARK], b.WORKERS_SUPPORTED = !n && !!f.Worker, b.NODE_STREAM_INPUT = 1, b.LocalChunkSize = 10485760, b.RemoteChunkSize = 5242880, b.DefaultDelimiter = \",\", b.Parser = E, b.ParserHandle = r, b.NetworkStreamer = l, b.FileStreamer = c, b.StringStreamer = p, b.ReadableStreamStreamer = m, f.jQuery) {\n    var d = f.jQuery;\n\n    d.fn.parse = function (o) {\n      var r = o.config || {},\n          h = [];\n      return this.each(function (e) {\n        if (!(\"INPUT\" === d(this).prop(\"tagName\").toUpperCase() && \"file\" === d(this).attr(\"type\").toLowerCase() && f.FileReader) || !this.files || 0 === this.files.length) return !0;\n\n        for (var t = 0; t < this.files.length; t++) {\n          h.push({\n            file: this.files[t],\n            inputElem: this,\n            instanceConfig: d.extend({}, r)\n          });\n        }\n      }), e(), this;\n\n      function e() {\n        if (0 !== h.length) {\n          var e,\n              t,\n              r,\n              i,\n              n = h[0];\n\n          if (q(o.before)) {\n            var s = o.before(n.file, n.inputElem);\n\n            if (\"object\" == _typeof(s)) {\n              if (\"abort\" === s.action) return e = \"AbortError\", t = n.file, r = n.inputElem, i = s.reason, void (q(o.error) && o.error({\n                name: e\n              }, t, r, i));\n              if (\"skip\" === s.action) return void u();\n              \"object\" == _typeof(s.config) && (n.instanceConfig = d.extend(n.instanceConfig, s.config));\n            } else if (\"skip\" === s) return void u();\n          }\n\n          var a = n.instanceConfig.complete;\n          n.instanceConfig.complete = function (e) {\n            q(a) && a(e, n.file, n.inputElem), u();\n          }, b.parse(n.file, n.instanceConfig);\n        } else q(o.complete) && o.complete();\n      }\n\n      function u() {\n        h.splice(0, 1), e();\n      }\n    };\n  }\n\n  function u(e) {\n    this._handle = null, this._finished = !1, this._completed = !1, this._halted = !1, this._input = null, this._baseIndex = 0, this._partialLine = \"\", this._rowCount = 0, this._start = 0, this._nextChunk = null, this.isFirstChunk = !0, this._completeResults = {\n      data: [],\n      errors: [],\n      meta: {}\n    }, function (e) {\n      var t = w(e);\n      t.chunkSize = parseInt(t.chunkSize), e.step || e.chunk || (t.chunkSize = null);\n      this._handle = new r(t), (this._handle.streamer = this)._config = t;\n    }.call(this, e), this.parseChunk = function (e, t) {\n      if (this.isFirstChunk && q(this._config.beforeFirstChunk)) {\n        var r = this._config.beforeFirstChunk(e);\n\n        void 0 !== r && (e = r);\n      }\n\n      this.isFirstChunk = !1, this._halted = !1;\n      var i = this._partialLine + e;\n      this._partialLine = \"\";\n\n      var n = this._handle.parse(i, this._baseIndex, !this._finished);\n\n      if (!this._handle.paused() && !this._handle.aborted()) {\n        var s = n.meta.cursor;\n        this._finished || (this._partialLine = i.substring(s - this._baseIndex), this._baseIndex = s), n && n.data && (this._rowCount += n.data.length);\n        var a = this._finished || this._config.preview && this._rowCount >= this._config.preview;\n        if (o) f.postMessage({\n          results: n,\n          workerId: b.WORKER_ID,\n          finished: a\n        });else if (q(this._config.chunk) && !t) {\n          if (this._config.chunk(n, this._handle), this._handle.paused() || this._handle.aborted()) return void (this._halted = !0);\n          n = void 0, this._completeResults = void 0;\n        }\n        return this._config.step || this._config.chunk || (this._completeResults.data = this._completeResults.data.concat(n.data), this._completeResults.errors = this._completeResults.errors.concat(n.errors), this._completeResults.meta = n.meta), this._completed || !a || !q(this._config.complete) || n && n.meta.aborted || (this._config.complete(this._completeResults, this._input), this._completed = !0), a || n && n.meta.paused || this._nextChunk(), n;\n      }\n\n      this._halted = !0;\n    }, this._sendError = function (e) {\n      q(this._config.error) ? this._config.error(e) : o && this._config.error && f.postMessage({\n        workerId: b.WORKER_ID,\n        error: e,\n        finished: !1\n      });\n    };\n  }\n\n  function l(e) {\n    var i;\n    (e = e || {}).chunkSize || (e.chunkSize = b.RemoteChunkSize), u.call(this, e), this._nextChunk = n ? function () {\n      this._readChunk(), this._chunkLoaded();\n    } : function () {\n      this._readChunk();\n    }, this.stream = function (e) {\n      this._input = e, this._nextChunk();\n    }, this._readChunk = function () {\n      if (this._finished) this._chunkLoaded();else {\n        if (i = new XMLHttpRequest(), this._config.withCredentials && (i.withCredentials = this._config.withCredentials), n || (i.onload = y(this._chunkLoaded, this), i.onerror = y(this._chunkError, this)), i.open(\"GET\", this._input, !n), this._config.downloadRequestHeaders) {\n          var e = this._config.downloadRequestHeaders;\n\n          for (var t in e) {\n            i.setRequestHeader(t, e[t]);\n          }\n        }\n\n        if (this._config.chunkSize) {\n          var r = this._start + this._config.chunkSize - 1;\n          i.setRequestHeader(\"Range\", \"bytes=\" + this._start + \"-\" + r);\n        }\n\n        try {\n          i.send();\n        } catch (e) {\n          this._chunkError(e.message);\n        }\n\n        n && 0 === i.status && this._chunkError();\n      }\n    }, this._chunkLoaded = function () {\n      4 === i.readyState && (i.status < 200 || 400 <= i.status ? this._chunkError() : (this._start += i.responseText.length, this._finished = !this._config.chunkSize || this._start >= function (e) {\n        var t = e.getResponseHeader(\"Content-Range\");\n        if (null === t) return -1;\n        return parseInt(t.substr(t.lastIndexOf(\"/\") + 1));\n      }(i), this.parseChunk(i.responseText)));\n    }, this._chunkError = function (e) {\n      var t = i.statusText || e;\n\n      this._sendError(new Error(t));\n    };\n  }\n\n  function c(e) {\n    var i, n;\n    (e = e || {}).chunkSize || (e.chunkSize = b.LocalChunkSize), u.call(this, e);\n    var s = \"undefined\" != typeof FileReader;\n    this.stream = function (e) {\n      this._input = e, n = e.slice || e.webkitSlice || e.mozSlice, s ? ((i = new FileReader()).onload = y(this._chunkLoaded, this), i.onerror = y(this._chunkError, this)) : i = new FileReaderSync(), this._nextChunk();\n    }, this._nextChunk = function () {\n      this._finished || this._config.preview && !(this._rowCount < this._config.preview) || this._readChunk();\n    }, this._readChunk = function () {\n      var e = this._input;\n\n      if (this._config.chunkSize) {\n        var t = Math.min(this._start + this._config.chunkSize, this._input.size);\n        e = n.call(e, this._start, t);\n      }\n\n      var r = i.readAsText(e, this._config.encoding);\n      s || this._chunkLoaded({\n        target: {\n          result: r\n        }\n      });\n    }, this._chunkLoaded = function (e) {\n      this._start += this._config.chunkSize, this._finished = !this._config.chunkSize || this._start >= this._input.size, this.parseChunk(e.target.result);\n    }, this._chunkError = function () {\n      this._sendError(i.error);\n    };\n  }\n\n  function p(e) {\n    var r;\n    u.call(this, e = e || {}), this.stream = function (e) {\n      return r = e, this._nextChunk();\n    }, this._nextChunk = function () {\n      if (!this._finished) {\n        var e = this._config.chunkSize,\n            t = e ? r.substr(0, e) : r;\n        return r = e ? r.substr(e) : \"\", this._finished = !r, this.parseChunk(t);\n      }\n    };\n  }\n\n  function m(e) {\n    u.call(this, e = e || {});\n    var t = [],\n        r = !0,\n        i = !1;\n    this.pause = function () {\n      u.prototype.pause.apply(this, arguments), this._input.pause();\n    }, this.resume = function () {\n      u.prototype.resume.apply(this, arguments), this._input.resume();\n    }, this.stream = function (e) {\n      this._input = e, this._input.on(\"data\", this._streamData), this._input.on(\"end\", this._streamEnd), this._input.on(\"error\", this._streamError);\n    }, this._checkIsFinished = function () {\n      i && 1 === t.length && (this._finished = !0);\n    }, this._nextChunk = function () {\n      this._checkIsFinished(), t.length ? this.parseChunk(t.shift()) : r = !0;\n    }, this._streamData = y(function (e) {\n      try {\n        t.push(\"string\" == typeof e ? e : e.toString(this._config.encoding)), r && (r = !1, this._checkIsFinished(), this.parseChunk(t.shift()));\n      } catch (e) {\n        this._streamError(e);\n      }\n    }, this), this._streamError = y(function (e) {\n      this._streamCleanUp(), this._sendError(e);\n    }, this), this._streamEnd = y(function () {\n      this._streamCleanUp(), i = !0, this._streamData(\"\");\n    }, this), this._streamCleanUp = y(function () {\n      this._input.removeListener(\"data\", this._streamData), this._input.removeListener(\"end\", this._streamEnd), this._input.removeListener(\"error\", this._streamError);\n    }, this);\n  }\n\n  function r(g) {\n    var a,\n        o,\n        h,\n        i = Math.pow(2, 53),\n        n = -i,\n        s = /^\\s*-?(\\d*\\.?\\d+|\\d+\\.?\\d*)(e[-+]?\\d+)?\\s*$/i,\n        u = /(\\d{4}-[01]\\d-[0-3]\\dT[0-2]\\d:[0-5]\\d:[0-5]\\d\\.\\d+([+-][0-2]\\d:[0-5]\\d|Z))|(\\d{4}-[01]\\d-[0-3]\\dT[0-2]\\d:[0-5]\\d:[0-5]\\d([+-][0-2]\\d:[0-5]\\d|Z))|(\\d{4}-[01]\\d-[0-3]\\dT[0-2]\\d:[0-5]\\d([+-][0-2]\\d:[0-5]\\d|Z))/,\n        t = this,\n        r = 0,\n        f = 0,\n        d = !1,\n        e = !1,\n        l = [],\n        c = {\n      data: [],\n      errors: [],\n      meta: {}\n    };\n\n    if (q(g.step)) {\n      var p = g.step;\n\n      g.step = function (e) {\n        if (c = e, _()) m();else {\n          if (m(), 0 === c.data.length) return;\n          r += e.data.length, g.preview && r > g.preview ? o.abort() : p(c, t);\n        }\n      };\n    }\n\n    function v(e) {\n      return \"greedy\" === g.skipEmptyLines ? \"\" === e.join(\"\").trim() : 1 === e.length && 0 === e[0].length;\n    }\n\n    function m() {\n      if (c && h && (k(\"Delimiter\", \"UndetectableDelimiter\", \"Unable to auto-detect delimiting character; defaulted to '\" + b.DefaultDelimiter + \"'\"), h = !1), g.skipEmptyLines) for (var e = 0; e < c.data.length; e++) {\n        v(c.data[e]) && c.data.splice(e--, 1);\n      }\n      return _() && function () {\n        if (!c) return;\n\n        function e(e) {\n          q(g.transformHeader) && (e = g.transformHeader(e)), l.push(e);\n        }\n\n        if (Array.isArray(c.data[0])) {\n          for (var t = 0; _() && t < c.data.length; t++) {\n            c.data[t].forEach(e);\n          }\n\n          c.data.splice(0, 1);\n        } else c.data.forEach(e);\n      }(), function () {\n        if (!c || !g.header && !g.dynamicTyping && !g.transform) return c;\n\n        function e(e, t) {\n          var r,\n              i = g.header ? {} : [];\n\n          for (r = 0; r < e.length; r++) {\n            var n = r,\n                s = e[r];\n            g.header && (n = r >= l.length ? \"__parsed_extra\" : l[r]), g.transform && (s = g.transform(s, n)), s = y(n, s), \"__parsed_extra\" === n ? (i[n] = i[n] || [], i[n].push(s)) : i[n] = s;\n          }\n\n          return g.header && (r > l.length ? k(\"FieldMismatch\", \"TooManyFields\", \"Too many fields: expected \" + l.length + \" fields but parsed \" + r, f + t) : r < l.length && k(\"FieldMismatch\", \"TooFewFields\", \"Too few fields: expected \" + l.length + \" fields but parsed \" + r, f + t)), i;\n        }\n\n        var t = 1;\n        !c.data.length || Array.isArray(c.data[0]) ? (c.data = c.data.map(e), t = c.data.length) : c.data = e(c.data, 0);\n        g.header && c.meta && (c.meta.fields = l);\n        return f += t, c;\n      }();\n    }\n\n    function _() {\n      return g.header && 0 === l.length;\n    }\n\n    function y(e, t) {\n      return r = e, g.dynamicTypingFunction && void 0 === g.dynamicTyping[r] && (g.dynamicTyping[r] = g.dynamicTypingFunction(r)), !0 === (g.dynamicTyping[r] || g.dynamicTyping) ? \"true\" === t || \"TRUE\" === t || \"false\" !== t && \"FALSE\" !== t && (function (e) {\n        if (s.test(e)) {\n          var t = parseFloat(e);\n          if (n < t && t < i) return !0;\n        }\n\n        return !1;\n      }(t) ? parseFloat(t) : u.test(t) ? new Date(t) : \"\" === t ? null : t) : t;\n      var r;\n    }\n\n    function k(e, t, r, i) {\n      c.errors.push({\n        type: e,\n        code: t,\n        message: r,\n        row: i\n      });\n    }\n\n    this.parse = function (e, t, r) {\n      var i = g.quoteChar || '\"';\n      if (g.newline || (g.newline = function (e, t) {\n        e = e.substr(0, 1048576);\n        var r = new RegExp(U(t) + \"([^]*?)\" + U(t), \"gm\"),\n            i = (e = e.replace(r, \"\")).split(\"\\r\"),\n            n = e.split(\"\\n\"),\n            s = 1 < n.length && n[0].length < i[0].length;\n        if (1 === i.length || s) return \"\\n\";\n\n        for (var a = 0, o = 0; o < i.length; o++) {\n          \"\\n\" === i[o][0] && a++;\n        }\n\n        return a >= i.length / 2 ? \"\\r\\n\" : \"\\r\";\n      }(e, i)), h = !1, g.delimiter) q(g.delimiter) && (g.delimiter = g.delimiter(e), c.meta.delimiter = g.delimiter);else {\n        var n = function (e, t, r, i, n) {\n          var s, a, o, h;\n          n = n || [\",\", \"\\t\", \"|\", \";\", b.RECORD_SEP, b.UNIT_SEP];\n\n          for (var u = 0; u < n.length; u++) {\n            var f = n[u],\n                d = 0,\n                l = 0,\n                c = 0;\n            o = void 0;\n\n            for (var p = new E({\n              comments: i,\n              delimiter: f,\n              newline: t,\n              preview: 10\n            }).parse(e), m = 0; m < p.data.length; m++) {\n              if (r && v(p.data[m])) c++;else {\n                var _ = p.data[m].length;\n                l += _, void 0 !== o ? 0 < _ && (d += Math.abs(_ - o), o = _) : o = _;\n              }\n            }\n\n            0 < p.data.length && (l /= p.data.length - c), (void 0 === a || d <= a) && (void 0 === h || h < l) && 1.99 < l && (a = d, s = f, h = l);\n          }\n\n          return {\n            successful: !!(g.delimiter = s),\n            bestDelimiter: s\n          };\n        }(e, g.newline, g.skipEmptyLines, g.comments, g.delimitersToGuess);\n\n        n.successful ? g.delimiter = n.bestDelimiter : (h = !0, g.delimiter = b.DefaultDelimiter), c.meta.delimiter = g.delimiter;\n      }\n      var s = w(g);\n      return g.preview && g.header && s.preview++, a = e, o = new E(s), c = o.parse(a, t, r), m(), d ? {\n        meta: {\n          paused: !0\n        }\n      } : c || {\n        meta: {\n          paused: !1\n        }\n      };\n    }, this.paused = function () {\n      return d;\n    }, this.pause = function () {\n      d = !0, o.abort(), a = a.substr(o.getCharIndex());\n    }, this.resume = function () {\n      t.streamer._halted ? (d = !1, t.streamer.parseChunk(a, !0)) : setTimeout(this.resume, 3);\n    }, this.aborted = function () {\n      return e;\n    }, this.abort = function () {\n      e = !0, o.abort(), c.meta.aborted = !0, q(g.complete) && g.complete(c), a = \"\";\n    };\n  }\n\n  function U(e) {\n    return e.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n  }\n\n  function E(e) {\n    var O,\n        D = (e = e || {}).delimiter,\n        I = e.newline,\n        T = e.comments,\n        A = e.step,\n        L = e.preview,\n        F = e.fastMode,\n        M = O = void 0 === e.quoteChar ? '\"' : e.quoteChar;\n    if (void 0 !== e.escapeChar && (M = e.escapeChar), (\"string\" != typeof D || -1 < b.BAD_DELIMITERS.indexOf(D)) && (D = \",\"), T === D) throw new Error(\"Comment character same as delimiter\");\n    !0 === T ? T = \"#\" : (\"string\" != typeof T || -1 < b.BAD_DELIMITERS.indexOf(T)) && (T = !1), \"\\n\" !== I && \"\\r\" !== I && \"\\r\\n\" !== I && (I = \"\\n\");\n    var z = 0,\n        j = !1;\n    this.parse = function (a, r, t) {\n      if (\"string\" != typeof a) throw new Error(\"Input must be a string\");\n      var i = a.length,\n          e = D.length,\n          n = I.length,\n          s = T.length,\n          o = q(A),\n          h = [],\n          u = [],\n          f = [],\n          d = z = 0;\n      if (!a) return R();\n\n      if (F || !1 !== F && -1 === a.indexOf(O)) {\n        for (var l = a.split(I), c = 0; c < l.length; c++) {\n          if (f = l[c], z += f.length, c !== l.length - 1) z += I.length;else if (t) return R();\n\n          if (!T || f.substr(0, s) !== T) {\n            if (o) {\n              if (h = [], b(f.split(D)), S(), j) return R();\n            } else b(f.split(D));\n\n            if (L && L <= c) return h = h.slice(0, L), R(!0);\n          }\n        }\n\n        return R();\n      }\n\n      for (var p = a.indexOf(D, z), m = a.indexOf(I, z), _ = new RegExp(U(M) + U(O), \"g\"), g = a.indexOf(O, z);;) {\n        if (a[z] !== O) {\n          if (T && 0 === f.length && a.substr(z, s) === T) {\n            if (-1 === m) return R();\n            z = m + n, m = a.indexOf(I, z), p = a.indexOf(D, z);\n          } else {\n            if (-1 !== p && (p < m || -1 === m)) {\n              if (!(p < g)) {\n                f.push(a.substring(z, p)), z = p + e, p = a.indexOf(D, z);\n                continue;\n              }\n\n              var v = x(p, g, m);\n\n              if (v && void 0 !== v.nextDelim) {\n                p = v.nextDelim, g = v.quoteSearch, f.push(a.substring(z, p)), z = p + e, p = a.indexOf(D, z);\n                continue;\n              }\n            }\n\n            if (-1 === m) break;\n            if (f.push(a.substring(z, m)), C(m + n), o && (S(), j)) return R();\n            if (L && h.length >= L) return R(!0);\n          }\n        } else for (g = z, z++;;) {\n          if (-1 === (g = a.indexOf(O, g + 1))) return t || u.push({\n            type: \"Quotes\",\n            code: \"MissingQuotes\",\n            message: \"Quoted field unterminated\",\n            row: h.length,\n            index: z\n          }), w();\n          if (g === i - 1) return w(a.substring(z, g).replace(_, O));\n\n          if (O !== M || a[g + 1] !== M) {\n            if (O === M || 0 === g || a[g - 1] !== M) {\n              var y = E(-1 === m ? p : Math.min(p, m));\n\n              if (a[g + 1 + y] === D) {\n                f.push(a.substring(z, g).replace(_, O)), a[z = g + 1 + y + e] !== O && (g = a.indexOf(O, z)), p = a.indexOf(D, z), m = a.indexOf(I, z);\n                break;\n              }\n\n              var k = E(m);\n\n              if (a.substr(g + 1 + k, n) === I) {\n                if (f.push(a.substring(z, g).replace(_, O)), C(g + 1 + k + n), p = a.indexOf(D, z), g = a.indexOf(O, z), o && (S(), j)) return R();\n                if (L && h.length >= L) return R(!0);\n                break;\n              }\n\n              u.push({\n                type: \"Quotes\",\n                code: \"InvalidQuotes\",\n                message: \"Trailing quote on quoted field is malformed\",\n                row: h.length,\n                index: z\n              }), g++;\n            }\n          } else g++;\n        }\n      }\n\n      return w();\n\n      function b(e) {\n        h.push(e), d = z;\n      }\n\n      function E(e) {\n        var t = 0;\n\n        if (-1 !== e) {\n          var r = a.substring(g + 1, e);\n          r && \"\" === r.trim() && (t = r.length);\n        }\n\n        return t;\n      }\n\n      function w(e) {\n        return t || (void 0 === e && (e = a.substr(z)), f.push(e), z = i, b(f), o && S()), R();\n      }\n\n      function C(e) {\n        z = e, b(f), f = [], m = a.indexOf(I, z);\n      }\n\n      function R(e, t) {\n        return {\n          data: t || !1 ? h[0] : h,\n          errors: u,\n          meta: {\n            delimiter: D,\n            linebreak: I,\n            aborted: j,\n            truncated: !!e,\n            cursor: d + (r || 0)\n          }\n        };\n      }\n\n      function S() {\n        A(R(void 0, !0)), h = [], u = [];\n      }\n\n      function x(e, t, r) {\n        var i = {\n          nextDelim: void 0,\n          quoteSearch: void 0\n        },\n            n = a.indexOf(O, t + 1);\n\n        if (t < e && e < n && (n < r || -1 === r)) {\n          var s = a.indexOf(D, n);\n          if (-1 === s) return i;\n          n < s && (n = a.indexOf(O, n + 1)), i = x(s, n, r);\n        } else i = {\n          nextDelim: e,\n          quoteSearch: t\n        };\n\n        return i;\n      }\n    }, this.abort = function () {\n      j = !0;\n    }, this.getCharIndex = function () {\n      return z;\n    };\n  }\n\n  function _(e) {\n    var t = e.data,\n        r = a[t.workerId],\n        i = !1;\n    if (t.error) r.userError(t.error, t.file);else if (t.results && t.results.data) {\n      var n = {\n        abort: function abort() {\n          i = !0, g(t.workerId, {\n            data: [],\n            errors: [],\n            meta: {\n              aborted: !0\n            }\n          });\n        },\n        pause: v,\n        resume: v\n      };\n\n      if (q(r.userStep)) {\n        for (var s = 0; s < t.results.data.length && (r.userStep({\n          data: t.results.data[s],\n          errors: t.results.errors,\n          meta: t.results.meta\n        }, n), !i); s++) {\n          ;\n        }\n\n        delete t.results;\n      } else q(r.userChunk) && (r.userChunk(t.results, n, t.file), delete t.results);\n    }\n    t.finished && !i && g(t.workerId, t.results);\n  }\n\n  function g(e, t) {\n    var r = a[e];\n    q(r.userComplete) && r.userComplete(t), r.terminate(), delete a[e];\n  }\n\n  function v() {\n    throw new Error(\"Not implemented.\");\n  }\n\n  function w(e) {\n    if (\"object\" != _typeof(e) || null === e) return e;\n    var t = Array.isArray(e) ? [] : {};\n\n    for (var r in e) {\n      t[r] = w(e[r]);\n    }\n\n    return t;\n  }\n\n  function y(e, t) {\n    return function () {\n      e.apply(t, arguments);\n    };\n  }\n\n  function q(e) {\n    return \"function\" == typeof e;\n  }\n\n  return o && (f.onmessage = function (e) {\n    var t = e.data;\n    void 0 === b.WORKER_ID && t && (b.WORKER_ID = t.workerId);\n    if (\"string\" == typeof t.input) f.postMessage({\n      workerId: b.WORKER_ID,\n      results: b.parse(t.input, t.config),\n      finished: !0\n    });else if (f.File && t.input instanceof File || t.input instanceof Object) {\n      var r = b.parse(t.input, t.config);\n      r && f.postMessage({\n        workerId: b.WORKER_ID,\n        results: r,\n        finished: !0\n      });\n    }\n  }), (l.prototype = Object.create(u.prototype)).constructor = l, (c.prototype = Object.create(u.prototype)).constructor = c, (p.prototype = Object.create(p.prototype)).constructor = p, (m.prototype = Object.create(u.prototype)).constructor = m, b;\n});","var config = require('./config');\n\nvar util = require('./util');\n\nvar EncodingDetect = require('./encoding-detect');\n\nvar EncodingConvert = require('./encoding-convert');\n\nvar KanaCaseTable = require('./kana-case-table');\n\nvar hasOwnProperty = Object.prototype.hasOwnProperty;\nvar Encoding = {\n  /**\n   * Encoding orders\n   */\n  orders: config.EncodingOrders,\n\n  /**\n   * Detects character encoding\n   *\n   * If encodings is \"AUTO\", or the encoding-list as an array, or\n   *   comma separated list string it will be detected automatically\n   *\n   * @param {Array.<number>|TypedArray|string} data The data being detected\n   * @param {(Object|string|Array.<string>)=} [encodings] The encoding-list of\n   *   character encoding\n   * @return {string|boolean} The detected character encoding, or false\n   */\n  detect: function detect(data, encodings) {\n    if (data == null || data.length === 0) {\n      return false;\n    }\n\n    if (util.isObject(encodings) && !util.isArray(encodings)) {\n      encodings = encodings.encoding;\n    }\n\n    if (util.isString(data)) {\n      data = util.stringToBuffer(data);\n    }\n\n    if (encodings == null) {\n      encodings = Encoding.orders;\n    } else {\n      if (util.isString(encodings)) {\n        encodings = encodings.toUpperCase();\n\n        if (encodings === 'AUTO') {\n          encodings = Encoding.orders;\n        } else if (~encodings.indexOf(',')) {\n          encodings = encodings.split(/\\s*,\\s*/);\n        } else {\n          encodings = [encodings];\n        }\n      }\n    }\n\n    var len = encodings.length;\n    var e, encoding, method;\n\n    for (var i = 0; i < len; i++) {\n      e = encodings[i];\n      encoding = config.assignEncodingName(e);\n\n      if (!encoding) {\n        continue;\n      }\n\n      method = 'is' + encoding;\n\n      if (!hasOwnProperty.call(EncodingDetect, method)) {\n        throw new Error('Undefined encoding: ' + e);\n      }\n\n      if (EncodingDetect[method](data)) {\n        return encoding;\n      }\n    }\n\n    return false;\n  },\n\n  /**\n   * Convert character encoding\n   *\n   * If `from` is \"AUTO\", or the encoding-list as an array, or\n   *   comma separated list string it will be detected automatically\n   *\n   * @param {Array.<number>|TypedArray|string} data The data being converted\n   * @param {(string|Object)} to The name of encoding to\n   * @param {(string|Array.<string>)=} [from] The encoding-list of\n   *   character encoding\n   * @return {Array|TypedArray|string} The converted data\n   */\n  convert: function convert(data, to, from) {\n    var result;\n    var type;\n    var options = {};\n\n    if (util.isObject(to)) {\n      options = to;\n      from = options.from;\n      to = options.to;\n\n      if (options.type) {\n        type = options.type;\n      }\n    }\n\n    if (util.isString(data)) {\n      type = type || 'string';\n      data = util.stringToBuffer(data);\n    } else if (data == null || data.length === 0) {\n      data = [];\n    }\n\n    var encodingFrom;\n\n    if (from != null && util.isString(from) && from.toUpperCase() !== 'AUTO' && !~from.indexOf(',')) {\n      encodingFrom = config.assignEncodingName(from);\n    } else {\n      encodingFrom = Encoding.detect(data);\n    }\n\n    var encodingTo = config.assignEncodingName(to);\n    var method = encodingFrom + 'To' + encodingTo;\n\n    if (hasOwnProperty.call(EncodingConvert, method)) {\n      result = EncodingConvert[method](data, options);\n    } else {\n      // Returns the raw data if the method is undefined.\n      result = data;\n    }\n\n    switch (('' + type).toLowerCase()) {\n      case 'string':\n        return util.codeToString_fast(result);\n\n      case 'arraybuffer':\n        return util.codeToBuffer(result);\n\n      case 'array':\n      /* falls through */\n\n      default:\n        return util.bufferToCode(result);\n    }\n  },\n\n  /**\n   * Encode a character code array to URL string like encodeURIComponent\n   *\n   * @param {Array.<number>|TypedArray} data The data being encoded\n   * @return {string} The percent encoded string\n   */\n  urlEncode: function urlEncode(data) {\n    if (util.isString(data)) {\n      data = util.stringToBuffer(data);\n    }\n\n    var alpha = util.stringToCode('0123456789ABCDEF');\n    var results = [];\n    var i = 0;\n    var len = data && data.length;\n    var b;\n\n    for (; i < len; i++) {\n      b = data[i]; //FIXME: JavaScript UTF-16 encoding\n\n      if (b > 0xFF) {\n        return encodeURIComponent(util.codeToString_fast(data));\n      }\n\n      if (b >= 0x61\n      /*a*/\n      && b <= 0x7A\n      /*z*/\n      || b >= 0x41\n      /*A*/\n      && b <= 0x5A\n      /*Z*/\n      || b >= 0x30\n      /*0*/\n      && b <= 0x39\n      /*9*/\n      || b === 0x21\n      /*!*/\n      || b >= 0x27\n      /*'*/\n      && b <= 0x2A\n      /***/\n      || b === 0x2D\n      /*-*/\n      || b === 0x2E\n      /*.*/\n      || b === 0x5F\n      /*_*/\n      || b === 0x7E\n      /*~*/\n      ) {\n          results[results.length] = b;\n        } else {\n        results[results.length] = 0x25;\n        /*%*/\n\n        if (b < 0x10) {\n          results[results.length] = 0x30;\n          /*0*/\n\n          results[results.length] = alpha[b];\n        } else {\n          results[results.length] = alpha[b >> 4 & 0xF];\n          results[results.length] = alpha[b & 0xF];\n        }\n      }\n    }\n\n    return util.codeToString_fast(results);\n  },\n\n  /**\n   * Decode a percent encoded string to\n   *  character code array like decodeURIComponent\n   *\n   * @param {string} string The data being decoded\n   * @return {Array.<number>} The decoded array\n   */\n  urlDecode: function urlDecode(string) {\n    var results = [];\n    var i = 0;\n    var len = string && string.length;\n    var c;\n\n    while (i < len) {\n      c = string.charCodeAt(i++);\n\n      if (c === 0x25\n      /*%*/\n      ) {\n          results[results.length] = parseInt(string.charAt(i++) + string.charAt(i++), 16);\n        } else {\n        results[results.length] = c;\n      }\n    }\n\n    return results;\n  },\n\n  /**\n   * Encode a character code array to Base64 encoded string\n   *\n   * @param {Array.<number>|TypedArray} data The data being encoded\n   * @return {string} The Base64 encoded string\n   */\n  base64Encode: function base64Encode(data) {\n    if (util.isString(data)) {\n      data = util.stringToBuffer(data);\n    }\n\n    return util.base64encode(data);\n  },\n\n  /**\n   * Decode a Base64 encoded string to character code array\n   *\n   * @param {string} string The data being decoded\n   * @return {Array.<number>} The decoded array\n   */\n  base64Decode: function base64Decode(string) {\n    return util.base64decode(string);\n  },\n\n  /**\n   * Joins a character code array to string\n   *\n   * @param {Array.<number>|TypedArray} data The data being joined\n   * @return {String} The joined string\n   */\n  codeToString: util.codeToString_fast,\n\n  /**\n   * Splits string to an array of character codes\n   *\n   * @param {string} string The input string\n   * @return {Array.<number>} The character code array\n   */\n  stringToCode: util.stringToCode,\n\n  /**\n   * 全角英数記号文字を半角英数記号文字に変換\n   *\n   * Convert the ascii symbols and alphanumeric characters to\n   *   the zenkaku symbols and alphanumeric characters\n   *\n   * @example\n   *   console.log(Encoding.toHankakuCase('Hello World! 12345'));\n   *   // 'Hello World! 12345'\n   *\n   * @param {Array.<number>|TypedArray|string} data The input unicode data\n   * @return {Array.<number>|string} The conveted data\n   */\n  toHankakuCase: function toHankakuCase(data) {\n    var asString = false;\n\n    if (util.isString(data)) {\n      asString = true;\n      data = util.stringToBuffer(data);\n    }\n\n    var results = [];\n    var len = data && data.length;\n    var i = 0;\n    var c;\n\n    while (i < len) {\n      c = data[i++];\n\n      if (c >= 0xFF01 && c <= 0xFF5E) {\n        c -= 0xFEE0;\n      }\n\n      results[results.length] = c;\n    }\n\n    return asString ? util.codeToString_fast(results) : results;\n  },\n\n  /**\n   * 半角英数記号文字を全角英数記号文字に変換\n   *\n   * Convert to the zenkaku symbols and alphanumeric characters\n   *  from the ascii symbols and alphanumeric characters\n   *\n   * @example\n   *   console.log(Encoding.toZenkakuCase('Hello World! 12345'));\n   *   // 'Hello World! 12345'\n   *\n   * @param {Array.<number>|TypedArray|string} data The input unicode data\n   * @return {Array.<number>|string} The conveted data\n   */\n  toZenkakuCase: function toZenkakuCase(data) {\n    var asString = false;\n\n    if (util.isString(data)) {\n      asString = true;\n      data = util.stringToBuffer(data);\n    }\n\n    var results = [];\n    var len = data && data.length;\n    var i = 0;\n    var c;\n\n    while (i < len) {\n      c = data[i++];\n\n      if (c >= 0x21 && c <= 0x7E) {\n        c += 0xFEE0;\n      }\n\n      results[results.length] = c;\n    }\n\n    return asString ? util.codeToString_fast(results) : results;\n  },\n\n  /**\n   * 全角カタカナを全角ひらがなに変換\n   *\n   * Convert to the zenkaku hiragana from the zenkaku katakana\n   *\n   * @example\n   *   console.log(Encoding.toHiraganaCase('ボポヴァアィイゥウェエォオ'));\n   *   // 'ぼぽう゛ぁあぃいぅうぇえぉお'\n   *\n   * @param {Array.<number>|TypedArray|string} data The input unicode data\n   * @return {Array.<number>|string} The conveted data\n   */\n  toHiraganaCase: function toHiraganaCase(data) {\n    var asString = false;\n\n    if (util.isString(data)) {\n      asString = true;\n      data = util.stringToBuffer(data);\n    }\n\n    var results = [];\n    var len = data && data.length;\n    var i = 0;\n    var c;\n\n    while (i < len) {\n      c = data[i++];\n\n      if (c >= 0x30A1 && c <= 0x30F6) {\n        c -= 0x0060; // 「ワ゛」 => 「わ」 + 「゛」\n      } else if (c === 0x30F7) {\n        results[results.length] = 0x308F;\n        c = 0x309B; // 「ヲ゛」 => 「を」 + 「゛」\n      } else if (c === 0x30FA) {\n        results[results.length] = 0x3092;\n        c = 0x309B;\n      }\n\n      results[results.length] = c;\n    }\n\n    return asString ? util.codeToString_fast(results) : results;\n  },\n\n  /**\n   * 全角ひらがなを全角カタカナに変換\n   *\n   * Convert to the zenkaku katakana from the zenkaku hiragana\n   *\n   * @example\n   *   console.log(Encoding.toKatakanaCase('ぼぽう゛ぁあぃいぅうぇえぉお'));\n   *   // 'ボポヴァアィイゥウェエォオ'\n   *\n   * @param {Array.<number>|TypedArray|string} data The input unicode data\n   * @return {Array.<number>|string} The conveted data\n   */\n  toKatakanaCase: function toKatakanaCase(data) {\n    var asString = false;\n\n    if (util.isString(data)) {\n      asString = true;\n      data = util.stringToBuffer(data);\n    }\n\n    var results = [];\n    var len = data && data.length;\n    var i = 0;\n    var c;\n\n    while (i < len) {\n      c = data[i++];\n\n      if (c >= 0x3041 && c <= 0x3096) {\n        if ((c === 0x308F || // 「わ」 + 「゛」 => 「ワ゛」\n        c === 0x3092) && // 「を」 + 「゛」 => 「ヲ゛」\n        i < len && data[i] === 0x309B) {\n          c = c === 0x308F ? 0x30F7 : 0x30FA;\n          i++;\n        } else {\n          c += 0x0060;\n        }\n      }\n\n      results[results.length] = c;\n    }\n\n    return asString ? util.codeToString_fast(results) : results;\n  },\n\n  /**\n   * 全角カタカナを半角カタカナに変換\n   *\n   * Convert to the hankaku katakana from the zenkaku katakana\n   *\n   * @example\n   *   console.log(Encoding.toHankanaCase('ボポヴァアィイゥウェエォオ'));\n   *   // 'ボポヴァアィイゥウェエォオ'\n   *\n   * @param {Array.<number>|TypedArray|string} data The input unicode data\n   * @return {Array.<number>|string} The conveted data\n   */\n  toHankanaCase: function toHankanaCase(data) {\n    var asString = false;\n\n    if (util.isString(data)) {\n      asString = true;\n      data = util.stringToBuffer(data);\n    }\n\n    var results = [];\n    var len = data && data.length;\n    var i = 0;\n    var c, d, t;\n\n    while (i < len) {\n      c = data[i++];\n\n      if (c >= 0x3001 && c <= 0x30FC) {\n        t = KanaCaseTable.HANKANA_TABLE[c];\n\n        if (t !== void 0) {\n          results[results.length] = t;\n          continue;\n        }\n      } // 「ヴ」, 「ワ」+「゛」, 「ヲ」+「゛」\n\n\n      if (c === 0x30F4 || c === 0x30F7 || c === 0x30FA) {\n        results[results.length] = KanaCaseTable.HANKANA_SONANTS[c];\n        results[results.length] = 0xFF9E; // 「カ」 - 「ド」\n      } else if (c >= 0x30AB && c <= 0x30C9) {\n        results[results.length] = KanaCaseTable.HANKANA_TABLE[c - 1];\n        results[results.length] = 0xFF9E; // 「ハ」 - 「ポ」\n      } else if (c >= 0x30CF && c <= 0x30DD) {\n        d = c % 3;\n        results[results.length] = KanaCaseTable.HANKANA_TABLE[c - d];\n        results[results.length] = KanaCaseTable.HANKANA_MARKS[d - 1];\n      } else {\n        results[results.length] = c;\n      }\n    }\n\n    return asString ? util.codeToString_fast(results) : results;\n  },\n\n  /**\n   * 半角カタカナを全角カタカナに変換 (濁音含む)\n   *\n   * Convert to the zenkaku katakana from the hankaku katakana\n   *\n   * @example\n   *   console.log(Encoding.toZenkanaCase('ボポヴァアィイゥウェエォオ'));\n   *   // 'ボポヴァアィイゥウェエォオ'\n   *\n   * @param {Array.<number>|TypedArray|string} data The input unicode data\n   * @return {Array.<number>|string} The conveted data\n   */\n  toZenkanaCase: function toZenkanaCase(data) {\n    var asString = false;\n\n    if (util.isString(data)) {\n      asString = true;\n      data = util.stringToBuffer(data);\n    }\n\n    var results = [];\n    var len = data && data.length;\n    var i = 0;\n    var c, code, next;\n\n    for (i = 0; i < len; i++) {\n      c = data[i]; // Hankaku katakana\n\n      if (c > 0xFF60 && c < 0xFFA0) {\n        code = KanaCaseTable.ZENKANA_TABLE[c - 0xFF61];\n\n        if (i + 1 < len) {\n          next = data[i + 1]; // 「゙」 + 「ヴ」\n\n          if (next === 0xFF9E && c === 0xFF73) {\n            code = 0x30F4;\n            i++; // 「゙」 + 「ワ゛」\n          } else if (next === 0xFF9E && c === 0xFF9C) {\n            code = 0x30F7;\n            i++; // 「゙」 + 「ヲ゛」\n          } else if (next === 0xFF9E && c === 0xFF66) {\n            code = 0x30FA;\n            i++; // 「゙」 + 「カ」 - 「コ」 or 「ハ」 - 「ホ」\n          } else if (next === 0xFF9E && (c > 0xFF75 && c < 0xFF85 || c > 0xFF89 && c < 0xFF8F)) {\n            code++;\n            i++; // 「゚」 + 「ハ」 - 「ホ」\n          } else if (next === 0xFF9F && c > 0xFF89 && c < 0xFF8F) {\n            code += 2;\n            i++;\n          }\n        }\n\n        c = code;\n      }\n\n      results[results.length] = c;\n    }\n\n    return asString ? util.codeToString_fast(results) : results;\n  },\n\n  /**\n   * 全角スペースを半角スペースに変換\n   *\n   * Convert the em space(U+3000) to the single space(U+0020)\n   *\n   * @param {Array.<number>|TypedArray|string} data The input unicode data\n   * @return {Array.<number>|string} The conveted data\n   */\n  toHankakuSpace: function toHankakuSpace(data) {\n    if (util.isString(data)) {\n      return data.replace(/\\u3000/g, ' ');\n    }\n\n    var results = [];\n    var len = data && data.length;\n    var i = 0;\n    var c;\n\n    while (i < len) {\n      c = data[i++];\n\n      if (c === 0x3000) {\n        c = 0x20;\n      }\n\n      results[results.length] = c;\n    }\n\n    return results;\n  },\n\n  /**\n   * 半角スペースを全角スペースに変換\n   *\n   * Convert the single space(U+0020) to the em space(U+3000)\n   *\n   * @param {Array.<number>|TypedArray|string} data The input unicode data\n   * @return {Array.<number>|string} The conveted data\n   */\n  toZenkakuSpace: function toZenkakuSpace(data) {\n    if (util.isString(data)) {\n      return data.replace(/\\u0020/g, \"\\u3000\");\n    }\n\n    var results = [];\n    var len = data && data.length;\n    var i = 0;\n    var c;\n\n    while (i < len) {\n      c = data[i++];\n\n      if (c === 0x20) {\n        c = 0x3000;\n      }\n\n      results[results.length] = c;\n    }\n\n    return results;\n  }\n};\nmodule.exports = Encoding;","(function (global, undefined) {\n  \"use strict\";\n\n  if (global.setImmediate) {\n    return;\n  }\n\n  var nextHandle = 1; // Spec says greater than zero\n\n  var tasksByHandle = {};\n  var currentlyRunningATask = false;\n  var doc = global.document;\n  var registerImmediate;\n\n  function setImmediate(callback) {\n    // Callback can either be a function or a string\n    if (typeof callback !== \"function\") {\n      callback = new Function(\"\" + callback);\n    } // Copy function arguments\n\n\n    var args = new Array(arguments.length - 1);\n\n    for (var i = 0; i < args.length; i++) {\n      args[i] = arguments[i + 1];\n    } // Store and register the task\n\n\n    var task = {\n      callback: callback,\n      args: args\n    };\n    tasksByHandle[nextHandle] = task;\n    registerImmediate(nextHandle);\n    return nextHandle++;\n  }\n\n  function clearImmediate(handle) {\n    delete tasksByHandle[handle];\n  }\n\n  function run(task) {\n    var callback = task.callback;\n    var args = task.args;\n\n    switch (args.length) {\n      case 0:\n        callback();\n        break;\n\n      case 1:\n        callback(args[0]);\n        break;\n\n      case 2:\n        callback(args[0], args[1]);\n        break;\n\n      case 3:\n        callback(args[0], args[1], args[2]);\n        break;\n\n      default:\n        callback.apply(undefined, args);\n        break;\n    }\n  }\n\n  function runIfPresent(handle) {\n    // From the spec: \"Wait until any invocations of this algorithm started before this one have completed.\"\n    // So if we're currently running a task, we'll need to delay this invocation.\n    if (currentlyRunningATask) {\n      // Delay by doing a setTimeout. setImmediate was tried instead, but in Firefox 7 it generated a\n      // \"too much recursion\" error.\n      setTimeout(runIfPresent, 0, handle);\n    } else {\n      var task = tasksByHandle[handle];\n\n      if (task) {\n        currentlyRunningATask = true;\n\n        try {\n          run(task);\n        } finally {\n          clearImmediate(handle);\n          currentlyRunningATask = false;\n        }\n      }\n    }\n  }\n\n  function installNextTickImplementation() {\n    registerImmediate = function registerImmediate(handle) {\n      process.nextTick(function () {\n        runIfPresent(handle);\n      });\n    };\n  }\n\n  function canUsePostMessage() {\n    // The test against `importScripts` prevents this implementation from being installed inside a web worker,\n    // where `global.postMessage` means something completely different and can't be used for this purpose.\n    if (global.postMessage && !global.importScripts) {\n      var postMessageIsAsynchronous = true;\n      var oldOnMessage = global.onmessage;\n\n      global.onmessage = function () {\n        postMessageIsAsynchronous = false;\n      };\n\n      global.postMessage(\"\", \"*\");\n      global.onmessage = oldOnMessage;\n      return postMessageIsAsynchronous;\n    }\n  }\n\n  function installPostMessageImplementation() {\n    // Installs an event handler on `global` for the `message` event: see\n    // * https://developer.mozilla.org/en/DOM/window.postMessage\n    // * http://www.whatwg.org/specs/web-apps/current-work/multipage/comms.html#crossDocumentMessages\n    var messagePrefix = \"setImmediate$\" + Math.random() + \"$\";\n\n    var onGlobalMessage = function onGlobalMessage(event) {\n      if (event.source === global && typeof event.data === \"string\" && event.data.indexOf(messagePrefix) === 0) {\n        runIfPresent(+event.data.slice(messagePrefix.length));\n      }\n    };\n\n    if (global.addEventListener) {\n      global.addEventListener(\"message\", onGlobalMessage, false);\n    } else {\n      global.attachEvent(\"onmessage\", onGlobalMessage);\n    }\n\n    registerImmediate = function registerImmediate(handle) {\n      global.postMessage(messagePrefix + handle, \"*\");\n    };\n  }\n\n  function installMessageChannelImplementation() {\n    var channel = new MessageChannel();\n\n    channel.port1.onmessage = function (event) {\n      var handle = event.data;\n      runIfPresent(handle);\n    };\n\n    registerImmediate = function registerImmediate(handle) {\n      channel.port2.postMessage(handle);\n    };\n  }\n\n  function installReadyStateChangeImplementation() {\n    var html = doc.documentElement;\n\n    registerImmediate = function registerImmediate(handle) {\n      // Create a <script> element; its readystatechange event will be fired asynchronously once it is inserted\n      // into the document. Do so, thus queuing up the task. Remember to clean up once it's been called.\n      var script = doc.createElement(\"script\");\n\n      script.onreadystatechange = function () {\n        runIfPresent(handle);\n        script.onreadystatechange = null;\n        html.removeChild(script);\n        script = null;\n      };\n\n      html.appendChild(script);\n    };\n  }\n\n  function installSetTimeoutImplementation() {\n    registerImmediate = function registerImmediate(handle) {\n      setTimeout(runIfPresent, 0, handle);\n    };\n  } // If supported, we should attach to the prototype of global, since that is where setTimeout et al. live.\n\n\n  var attachTo = Object.getPrototypeOf && Object.getPrototypeOf(global);\n  attachTo = attachTo && attachTo.setTimeout ? attachTo : global; // Don't get fooled by e.g. browserify environments.\n\n  if ({}.toString.call(global.process) === \"[object process]\") {\n    // For Node.js before 0.9\n    installNextTickImplementation();\n  } else if (canUsePostMessage()) {\n    // For non-IE10 modern browsers\n    installPostMessageImplementation();\n  } else if (global.MessageChannel) {\n    // For web workers, where supported\n    installMessageChannelImplementation();\n  } else if (doc && \"onreadystatechange\" in doc.createElement(\"script\")) {\n    // For IE 6–8\n    installReadyStateChangeImplementation();\n  } else {\n    // For older browsers\n    installSetTimeoutImplementation();\n  }\n\n  attachTo.setImmediate = setImmediate;\n  attachTo.clearImmediate = clearImmediate;\n})(typeof self === \"undefined\" ? typeof global === \"undefined\" ? this : global : self);","function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n//! moment.js locale configuration\n;\n\n(function (global, factory) {\n  (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  var af = moment.defineLocale('af', {\n    months: 'Januarie_Februarie_Maart_April_Mei_Junie_Julie_Augustus_September_Oktober_November_Desember'.split('_'),\n    monthsShort: 'Jan_Feb_Mrt_Apr_Mei_Jun_Jul_Aug_Sep_Okt_Nov_Des'.split('_'),\n    weekdays: 'Sondag_Maandag_Dinsdag_Woensdag_Donderdag_Vrydag_Saterdag'.split('_'),\n    weekdaysShort: 'Son_Maa_Din_Woe_Don_Vry_Sat'.split('_'),\n    weekdaysMin: 'So_Ma_Di_Wo_Do_Vr_Sa'.split('_'),\n    meridiemParse: /vm|nm/i,\n    isPM: function isPM(input) {\n      return /^nm$/i.test(input);\n    },\n    meridiem: function meridiem(hours, minutes, isLower) {\n      if (hours < 12) {\n        return isLower ? 'vm' : 'VM';\n      } else {\n        return isLower ? 'nm' : 'NM';\n      }\n    },\n    longDateFormat: {\n      LT: 'HH:mm',\n      LTS: 'HH:mm:ss',\n      L: 'DD/MM/YYYY',\n      LL: 'D MMMM YYYY',\n      LLL: 'D MMMM YYYY HH:mm',\n      LLLL: 'dddd, D MMMM YYYY HH:mm'\n    },\n    calendar: {\n      sameDay: '[Vandag om] LT',\n      nextDay: '[Môre om] LT',\n      nextWeek: 'dddd [om] LT',\n      lastDay: '[Gister om] LT',\n      lastWeek: '[Laas] dddd [om] LT',\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: 'oor %s',\n      past: '%s gelede',\n      s: '\\'n paar sekondes',\n      ss: '%d sekondes',\n      m: '\\'n minuut',\n      mm: '%d minute',\n      h: '\\'n uur',\n      hh: '%d ure',\n      d: '\\'n dag',\n      dd: '%d dae',\n      M: '\\'n maand',\n      MM: '%d maande',\n      y: '\\'n jaar',\n      yy: '%d jaar'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}(ste|de)/,\n    ordinal: function ordinal(number) {\n      return number + (number === 1 || number === 8 || number >= 20 ? 'ste' : 'de'); // Thanks to Joris Röling : https://github.com/jjupiter\n    },\n    week: {\n      dow: 1,\n      // Maandag is die eerste dag van die week.\n      doy: 4 // Die week wat die 4de Januarie bevat is die eerste week van die jaar.\n\n    }\n  });\n  return af;\n});","function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n//! moment.js locale configuration\n;\n\n(function (global, factory) {\n  (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  var symbolMap = {\n    '1': '١',\n    '2': '٢',\n    '3': '٣',\n    '4': '٤',\n    '5': '٥',\n    '6': '٦',\n    '7': '٧',\n    '8': '٨',\n    '9': '٩',\n    '0': '٠'\n  },\n      numberMap = {\n    '١': '1',\n    '٢': '2',\n    '٣': '3',\n    '٤': '4',\n    '٥': '5',\n    '٦': '6',\n    '٧': '7',\n    '٨': '8',\n    '٩': '9',\n    '٠': '0'\n  },\n      pluralForm = function pluralForm(n) {\n    return n === 0 ? 0 : n === 1 ? 1 : n === 2 ? 2 : n % 100 >= 3 && n % 100 <= 10 ? 3 : n % 100 >= 11 ? 4 : 5;\n  },\n      plurals = {\n    s: ['أقل من ثانية', 'ثانية واحدة', ['ثانيتان', 'ثانيتين'], '%d ثوان', '%d ثانية', '%d ثانية'],\n    m: ['أقل من دقيقة', 'دقيقة واحدة', ['دقيقتان', 'دقيقتين'], '%d دقائق', '%d دقيقة', '%d دقيقة'],\n    h: ['أقل من ساعة', 'ساعة واحدة', ['ساعتان', 'ساعتين'], '%d ساعات', '%d ساعة', '%d ساعة'],\n    d: ['أقل من يوم', 'يوم واحد', ['يومان', 'يومين'], '%d أيام', '%d يومًا', '%d يوم'],\n    M: ['أقل من شهر', 'شهر واحد', ['شهران', 'شهرين'], '%d أشهر', '%d شهرا', '%d شهر'],\n    y: ['أقل من عام', 'عام واحد', ['عامان', 'عامين'], '%d أعوام', '%d عامًا', '%d عام']\n  },\n      pluralize = function pluralize(u) {\n    return function (number, withoutSuffix, string, isFuture) {\n      var f = pluralForm(number),\n          str = plurals[u][pluralForm(number)];\n\n      if (f === 2) {\n        str = str[withoutSuffix ? 0 : 1];\n      }\n\n      return str.replace(/%d/i, number);\n    };\n  },\n      months = ['يناير', 'فبراير', 'مارس', 'أبريل', 'مايو', 'يونيو', 'يوليو', 'أغسطس', 'سبتمبر', 'أكتوبر', 'نوفمبر', 'ديسمبر'];\n\n  var ar = moment.defineLocale('ar', {\n    months: months,\n    monthsShort: months,\n    weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n    weekdaysShort: 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),\n    weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),\n    weekdaysParseExact: true,\n    longDateFormat: {\n      LT: 'HH:mm',\n      LTS: 'HH:mm:ss',\n      L: \"D/\\u200FM/\\u200FYYYY\",\n      LL: 'D MMMM YYYY',\n      LLL: 'D MMMM YYYY HH:mm',\n      LLLL: 'dddd D MMMM YYYY HH:mm'\n    },\n    meridiemParse: /ص|م/,\n    isPM: function isPM(input) {\n      return 'م' === input;\n    },\n    meridiem: function meridiem(hour, minute, isLower) {\n      if (hour < 12) {\n        return 'ص';\n      } else {\n        return 'م';\n      }\n    },\n    calendar: {\n      sameDay: '[اليوم عند الساعة] LT',\n      nextDay: '[غدًا عند الساعة] LT',\n      nextWeek: 'dddd [عند الساعة] LT',\n      lastDay: '[أمس عند الساعة] LT',\n      lastWeek: 'dddd [عند الساعة] LT',\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: 'بعد %s',\n      past: 'منذ %s',\n      s: pluralize('s'),\n      ss: pluralize('s'),\n      m: pluralize('m'),\n      mm: pluralize('m'),\n      h: pluralize('h'),\n      hh: pluralize('h'),\n      d: pluralize('d'),\n      dd: pluralize('d'),\n      M: pluralize('M'),\n      MM: pluralize('M'),\n      y: pluralize('y'),\n      yy: pluralize('y')\n    },\n    preparse: function preparse(string) {\n      return string.replace(/[١٢٣٤٥٦٧٨٩٠]/g, function (match) {\n        return numberMap[match];\n      }).replace(/،/g, ',');\n    },\n    postformat: function postformat(string) {\n      return string.replace(/\\d/g, function (match) {\n        return symbolMap[match];\n      }).replace(/,/g, '،');\n    },\n    week: {\n      dow: 6,\n      // Saturday is the first day of the week.\n      doy: 12 // The week that contains Jan 12th is the first week of the year.\n\n    }\n  });\n  return ar;\n});","function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n//! moment.js locale configuration\n;\n\n(function (global, factory) {\n  (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  var arDz = moment.defineLocale('ar-dz', {\n    months: 'جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'),\n    monthsShort: 'جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'),\n    weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n    weekdaysShort: 'احد_اثنين_ثلاثاء_اربعاء_خميس_جمعة_سبت'.split('_'),\n    weekdaysMin: 'أح_إث_ثلا_أر_خم_جم_سب'.split('_'),\n    weekdaysParseExact: true,\n    longDateFormat: {\n      LT: 'HH:mm',\n      LTS: 'HH:mm:ss',\n      L: 'DD/MM/YYYY',\n      LL: 'D MMMM YYYY',\n      LLL: 'D MMMM YYYY HH:mm',\n      LLLL: 'dddd D MMMM YYYY HH:mm'\n    },\n    calendar: {\n      sameDay: '[اليوم على الساعة] LT',\n      nextDay: '[غدا على الساعة] LT',\n      nextWeek: 'dddd [على الساعة] LT',\n      lastDay: '[أمس على الساعة] LT',\n      lastWeek: 'dddd [على الساعة] LT',\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: 'في %s',\n      past: 'منذ %s',\n      s: 'ثوان',\n      ss: '%d ثانية',\n      m: 'دقيقة',\n      mm: '%d دقائق',\n      h: 'ساعة',\n      hh: '%d ساعات',\n      d: 'يوم',\n      dd: '%d أيام',\n      M: 'شهر',\n      MM: '%d أشهر',\n      y: 'سنة',\n      yy: '%d سنوات'\n    },\n    week: {\n      dow: 0,\n      // Sunday is the first day of the week.\n      doy: 4 // The week that contains Jan 4th is the first week of the year.\n\n    }\n  });\n  return arDz;\n});","function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n//! moment.js locale configuration\n;\n\n(function (global, factory) {\n  (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  var arKw = moment.defineLocale('ar-kw', {\n    months: 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split('_'),\n    monthsShort: 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split('_'),\n    weekdays: 'الأحد_الإتنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n    weekdaysShort: 'احد_اتنين_ثلاثاء_اربعاء_خميس_جمعة_سبت'.split('_'),\n    weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),\n    weekdaysParseExact: true,\n    longDateFormat: {\n      LT: 'HH:mm',\n      LTS: 'HH:mm:ss',\n      L: 'DD/MM/YYYY',\n      LL: 'D MMMM YYYY',\n      LLL: 'D MMMM YYYY HH:mm',\n      LLLL: 'dddd D MMMM YYYY HH:mm'\n    },\n    calendar: {\n      sameDay: '[اليوم على الساعة] LT',\n      nextDay: '[غدا على الساعة] LT',\n      nextWeek: 'dddd [على الساعة] LT',\n      lastDay: '[أمس على الساعة] LT',\n      lastWeek: 'dddd [على الساعة] LT',\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: 'في %s',\n      past: 'منذ %s',\n      s: 'ثوان',\n      ss: '%d ثانية',\n      m: 'دقيقة',\n      mm: '%d دقائق',\n      h: 'ساعة',\n      hh: '%d ساعات',\n      d: 'يوم',\n      dd: '%d أيام',\n      M: 'شهر',\n      MM: '%d أشهر',\n      y: 'سنة',\n      yy: '%d سنوات'\n    },\n    week: {\n      dow: 0,\n      // Sunday is the first day of the week.\n      doy: 12 // The week that contains Jan 12th is the first week of the year.\n\n    }\n  });\n  return arKw;\n});","function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n//! moment.js locale configuration\n;\n\n(function (global, factory) {\n  (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  var symbolMap = {\n    '1': '1',\n    '2': '2',\n    '3': '3',\n    '4': '4',\n    '5': '5',\n    '6': '6',\n    '7': '7',\n    '8': '8',\n    '9': '9',\n    '0': '0'\n  },\n      pluralForm = function pluralForm(n) {\n    return n === 0 ? 0 : n === 1 ? 1 : n === 2 ? 2 : n % 100 >= 3 && n % 100 <= 10 ? 3 : n % 100 >= 11 ? 4 : 5;\n  },\n      plurals = {\n    s: ['أقل من ثانية', 'ثانية واحدة', ['ثانيتان', 'ثانيتين'], '%d ثوان', '%d ثانية', '%d ثانية'],\n    m: ['أقل من دقيقة', 'دقيقة واحدة', ['دقيقتان', 'دقيقتين'], '%d دقائق', '%d دقيقة', '%d دقيقة'],\n    h: ['أقل من ساعة', 'ساعة واحدة', ['ساعتان', 'ساعتين'], '%d ساعات', '%d ساعة', '%d ساعة'],\n    d: ['أقل من يوم', 'يوم واحد', ['يومان', 'يومين'], '%d أيام', '%d يومًا', '%d يوم'],\n    M: ['أقل من شهر', 'شهر واحد', ['شهران', 'شهرين'], '%d أشهر', '%d شهرا', '%d شهر'],\n    y: ['أقل من عام', 'عام واحد', ['عامان', 'عامين'], '%d أعوام', '%d عامًا', '%d عام']\n  },\n      pluralize = function pluralize(u) {\n    return function (number, withoutSuffix, string, isFuture) {\n      var f = pluralForm(number),\n          str = plurals[u][pluralForm(number)];\n\n      if (f === 2) {\n        str = str[withoutSuffix ? 0 : 1];\n      }\n\n      return str.replace(/%d/i, number);\n    };\n  },\n      months = ['يناير', 'فبراير', 'مارس', 'أبريل', 'مايو', 'يونيو', 'يوليو', 'أغسطس', 'سبتمبر', 'أكتوبر', 'نوفمبر', 'ديسمبر'];\n\n  var arLy = moment.defineLocale('ar-ly', {\n    months: months,\n    monthsShort: months,\n    weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n    weekdaysShort: 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),\n    weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),\n    weekdaysParseExact: true,\n    longDateFormat: {\n      LT: 'HH:mm',\n      LTS: 'HH:mm:ss',\n      L: \"D/\\u200FM/\\u200FYYYY\",\n      LL: 'D MMMM YYYY',\n      LLL: 'D MMMM YYYY HH:mm',\n      LLLL: 'dddd D MMMM YYYY HH:mm'\n    },\n    meridiemParse: /ص|م/,\n    isPM: function isPM(input) {\n      return 'م' === input;\n    },\n    meridiem: function meridiem(hour, minute, isLower) {\n      if (hour < 12) {\n        return 'ص';\n      } else {\n        return 'م';\n      }\n    },\n    calendar: {\n      sameDay: '[اليوم عند الساعة] LT',\n      nextDay: '[غدًا عند الساعة] LT',\n      nextWeek: 'dddd [عند الساعة] LT',\n      lastDay: '[أمس عند الساعة] LT',\n      lastWeek: 'dddd [عند الساعة] LT',\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: 'بعد %s',\n      past: 'منذ %s',\n      s: pluralize('s'),\n      ss: pluralize('s'),\n      m: pluralize('m'),\n      mm: pluralize('m'),\n      h: pluralize('h'),\n      hh: pluralize('h'),\n      d: pluralize('d'),\n      dd: pluralize('d'),\n      M: pluralize('M'),\n      MM: pluralize('M'),\n      y: pluralize('y'),\n      yy: pluralize('y')\n    },\n    preparse: function preparse(string) {\n      return string.replace(/،/g, ',');\n    },\n    postformat: function postformat(string) {\n      return string.replace(/\\d/g, function (match) {\n        return symbolMap[match];\n      }).replace(/,/g, '،');\n    },\n    week: {\n      dow: 6,\n      // Saturday is the first day of the week.\n      doy: 12 // The week that contains Jan 12th is the first week of the year.\n\n    }\n  });\n  return arLy;\n});","function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n//! moment.js locale configuration\n;\n\n(function (global, factory) {\n  (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  var arMa = moment.defineLocale('ar-ma', {\n    months: 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split('_'),\n    monthsShort: 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split('_'),\n    weekdays: 'الأحد_الإتنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n    weekdaysShort: 'احد_اتنين_ثلاثاء_اربعاء_خميس_جمعة_سبت'.split('_'),\n    weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),\n    weekdaysParseExact: true,\n    longDateFormat: {\n      LT: 'HH:mm',\n      LTS: 'HH:mm:ss',\n      L: 'DD/MM/YYYY',\n      LL: 'D MMMM YYYY',\n      LLL: 'D MMMM YYYY HH:mm',\n      LLLL: 'dddd D MMMM YYYY HH:mm'\n    },\n    calendar: {\n      sameDay: '[اليوم على الساعة] LT',\n      nextDay: '[غدا على الساعة] LT',\n      nextWeek: 'dddd [على الساعة] LT',\n      lastDay: '[أمس على الساعة] LT',\n      lastWeek: 'dddd [على الساعة] LT',\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: 'في %s',\n      past: 'منذ %s',\n      s: 'ثوان',\n      ss: '%d ثانية',\n      m: 'دقيقة',\n      mm: '%d دقائق',\n      h: 'ساعة',\n      hh: '%d ساعات',\n      d: 'يوم',\n      dd: '%d أيام',\n      M: 'شهر',\n      MM: '%d أشهر',\n      y: 'سنة',\n      yy: '%d سنوات'\n    },\n    week: {\n      dow: 6,\n      // Saturday is the first day of the week.\n      doy: 12 // The week that contains Jan 12th is the first week of the year.\n\n    }\n  });\n  return arMa;\n});","function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n//! moment.js locale configuration\n;\n\n(function (global, factory) {\n  (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  var symbolMap = {\n    '1': '١',\n    '2': '٢',\n    '3': '٣',\n    '4': '٤',\n    '5': '٥',\n    '6': '٦',\n    '7': '٧',\n    '8': '٨',\n    '9': '٩',\n    '0': '٠'\n  },\n      numberMap = {\n    '١': '1',\n    '٢': '2',\n    '٣': '3',\n    '٤': '4',\n    '٥': '5',\n    '٦': '6',\n    '٧': '7',\n    '٨': '8',\n    '٩': '9',\n    '٠': '0'\n  };\n  var arSa = moment.defineLocale('ar-sa', {\n    months: 'يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'),\n    monthsShort: 'يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'),\n    weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n    weekdaysShort: 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),\n    weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),\n    weekdaysParseExact: true,\n    longDateFormat: {\n      LT: 'HH:mm',\n      LTS: 'HH:mm:ss',\n      L: 'DD/MM/YYYY',\n      LL: 'D MMMM YYYY',\n      LLL: 'D MMMM YYYY HH:mm',\n      LLLL: 'dddd D MMMM YYYY HH:mm'\n    },\n    meridiemParse: /ص|م/,\n    isPM: function isPM(input) {\n      return 'م' === input;\n    },\n    meridiem: function meridiem(hour, minute, isLower) {\n      if (hour < 12) {\n        return 'ص';\n      } else {\n        return 'م';\n      }\n    },\n    calendar: {\n      sameDay: '[اليوم على الساعة] LT',\n      nextDay: '[غدا على الساعة] LT',\n      nextWeek: 'dddd [على الساعة] LT',\n      lastDay: '[أمس على الساعة] LT',\n      lastWeek: 'dddd [على الساعة] LT',\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: 'في %s',\n      past: 'منذ %s',\n      s: 'ثوان',\n      ss: '%d ثانية',\n      m: 'دقيقة',\n      mm: '%d دقائق',\n      h: 'ساعة',\n      hh: '%d ساعات',\n      d: 'يوم',\n      dd: '%d أيام',\n      M: 'شهر',\n      MM: '%d أشهر',\n      y: 'سنة',\n      yy: '%d سنوات'\n    },\n    preparse: function preparse(string) {\n      return string.replace(/[١٢٣٤٥٦٧٨٩٠]/g, function (match) {\n        return numberMap[match];\n      }).replace(/،/g, ',');\n    },\n    postformat: function postformat(string) {\n      return string.replace(/\\d/g, function (match) {\n        return symbolMap[match];\n      }).replace(/,/g, '،');\n    },\n    week: {\n      dow: 0,\n      // Sunday is the first day of the week.\n      doy: 6 // The week that contains Jan 6th is the first week of the year.\n\n    }\n  });\n  return arSa;\n});","function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n//! moment.js locale configuration\n;\n\n(function (global, factory) {\n  (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  var arTn = moment.defineLocale('ar-tn', {\n    months: 'جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'),\n    monthsShort: 'جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split('_'),\n    weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n    weekdaysShort: 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),\n    weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),\n    weekdaysParseExact: true,\n    longDateFormat: {\n      LT: 'HH:mm',\n      LTS: 'HH:mm:ss',\n      L: 'DD/MM/YYYY',\n      LL: 'D MMMM YYYY',\n      LLL: 'D MMMM YYYY HH:mm',\n      LLLL: 'dddd D MMMM YYYY HH:mm'\n    },\n    calendar: {\n      sameDay: '[اليوم على الساعة] LT',\n      nextDay: '[غدا على الساعة] LT',\n      nextWeek: 'dddd [على الساعة] LT',\n      lastDay: '[أمس على الساعة] LT',\n      lastWeek: 'dddd [على الساعة] LT',\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: 'في %s',\n      past: 'منذ %s',\n      s: 'ثوان',\n      ss: '%d ثانية',\n      m: 'دقيقة',\n      mm: '%d دقائق',\n      h: 'ساعة',\n      hh: '%d ساعات',\n      d: 'يوم',\n      dd: '%d أيام',\n      M: 'شهر',\n      MM: '%d أشهر',\n      y: 'سنة',\n      yy: '%d سنوات'\n    },\n    week: {\n      dow: 1,\n      // Monday is the first day of the week.\n      doy: 4 // The week that contains Jan 4th is the first week of the year.\n\n    }\n  });\n  return arTn;\n});","function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n//! moment.js locale configuration\n;\n\n(function (global, factory) {\n  (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  var suffixes = {\n    1: '-inci',\n    5: '-inci',\n    8: '-inci',\n    70: '-inci',\n    80: '-inci',\n    2: '-nci',\n    7: '-nci',\n    20: '-nci',\n    50: '-nci',\n    3: '-üncü',\n    4: '-üncü',\n    100: '-üncü',\n    6: '-ncı',\n    9: '-uncu',\n    10: '-uncu',\n    30: '-uncu',\n    60: '-ıncı',\n    90: '-ıncı'\n  };\n  var az = moment.defineLocale('az', {\n    months: 'yanvar_fevral_mart_aprel_may_iyun_iyul_avqust_sentyabr_oktyabr_noyabr_dekabr'.split('_'),\n    monthsShort: 'yan_fev_mar_apr_may_iyn_iyl_avq_sen_okt_noy_dek'.split('_'),\n    weekdays: 'Bazar_Bazar ertəsi_Çərşənbə axşamı_Çərşənbə_Cümə axşamı_Cümə_Şənbə'.split('_'),\n    weekdaysShort: 'Baz_BzE_ÇAx_Çər_CAx_Cüm_Şən'.split('_'),\n    weekdaysMin: 'Bz_BE_ÇA_Çə_CA_Cü_Şə'.split('_'),\n    weekdaysParseExact: true,\n    longDateFormat: {\n      LT: 'HH:mm',\n      LTS: 'HH:mm:ss',\n      L: 'DD.MM.YYYY',\n      LL: 'D MMMM YYYY',\n      LLL: 'D MMMM YYYY HH:mm',\n      LLLL: 'dddd, D MMMM YYYY HH:mm'\n    },\n    calendar: {\n      sameDay: '[bugün saat] LT',\n      nextDay: '[sabah saat] LT',\n      nextWeek: '[gələn həftə] dddd [saat] LT',\n      lastDay: '[dünən] LT',\n      lastWeek: '[keçən həftə] dddd [saat] LT',\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: '%s sonra',\n      past: '%s əvvəl',\n      s: 'birneçə saniyə',\n      ss: '%d saniyə',\n      m: 'bir dəqiqə',\n      mm: '%d dəqiqə',\n      h: 'bir saat',\n      hh: '%d saat',\n      d: 'bir gün',\n      dd: '%d gün',\n      M: 'bir ay',\n      MM: '%d ay',\n      y: 'bir il',\n      yy: '%d il'\n    },\n    meridiemParse: /gecə|səhər|gündüz|axşam/,\n    isPM: function isPM(input) {\n      return /^(gündüz|axşam)$/.test(input);\n    },\n    meridiem: function meridiem(hour, minute, isLower) {\n      if (hour < 4) {\n        return 'gecə';\n      } else if (hour < 12) {\n        return 'səhər';\n      } else if (hour < 17) {\n        return 'gündüz';\n      } else {\n        return 'axşam';\n      }\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}-(ıncı|inci|nci|üncü|ncı|uncu)/,\n    ordinal: function ordinal(number) {\n      if (number === 0) {\n        // special case for zero\n        return number + '-ıncı';\n      }\n\n      var a = number % 10,\n          b = number % 100 - a,\n          c = number >= 100 ? 100 : null;\n      return number + (suffixes[a] || suffixes[b] || suffixes[c]);\n    },\n    week: {\n      dow: 1,\n      // Monday is the first day of the week.\n      doy: 7 // The week that contains Jan 7th is the first week of the year.\n\n    }\n  });\n  return az;\n});","function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n//! moment.js locale configuration\n;\n\n(function (global, factory) {\n  (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  function plural(word, num) {\n    var forms = word.split('_');\n    return num % 10 === 1 && num % 100 !== 11 ? forms[0] : num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20) ? forms[1] : forms[2];\n  }\n\n  function relativeTimeWithPlural(number, withoutSuffix, key) {\n    var format = {\n      'ss': withoutSuffix ? 'секунда_секунды_секунд' : 'секунду_секунды_секунд',\n      'mm': withoutSuffix ? 'хвіліна_хвіліны_хвілін' : 'хвіліну_хвіліны_хвілін',\n      'hh': withoutSuffix ? 'гадзіна_гадзіны_гадзін' : 'гадзіну_гадзіны_гадзін',\n      'dd': 'дзень_дні_дзён',\n      'MM': 'месяц_месяцы_месяцаў',\n      'yy': 'год_гады_гадоў'\n    };\n\n    if (key === 'm') {\n      return withoutSuffix ? 'хвіліна' : 'хвіліну';\n    } else if (key === 'h') {\n      return withoutSuffix ? 'гадзіна' : 'гадзіну';\n    } else {\n      return number + ' ' + plural(format[key], +number);\n    }\n  }\n\n  var be = moment.defineLocale('be', {\n    months: {\n      format: 'студзеня_лютага_сакавіка_красавіка_траўня_чэрвеня_ліпеня_жніўня_верасня_кастрычніка_лістапада_снежня'.split('_'),\n      standalone: 'студзень_люты_сакавік_красавік_травень_чэрвень_ліпень_жнівень_верасень_кастрычнік_лістапад_снежань'.split('_')\n    },\n    monthsShort: 'студ_лют_сак_крас_трав_чэрв_ліп_жнів_вер_каст_ліст_снеж'.split('_'),\n    weekdays: {\n      format: 'нядзелю_панядзелак_аўторак_сераду_чацвер_пятніцу_суботу'.split('_'),\n      standalone: 'нядзеля_панядзелак_аўторак_серада_чацвер_пятніца_субота'.split('_'),\n      isFormat: /\\[ ?[Ууў] ?(?:мінулую|наступную)? ?\\] ?dddd/\n    },\n    weekdaysShort: 'нд_пн_ат_ср_чц_пт_сб'.split('_'),\n    weekdaysMin: 'нд_пн_ат_ср_чц_пт_сб'.split('_'),\n    longDateFormat: {\n      LT: 'HH:mm',\n      LTS: 'HH:mm:ss',\n      L: 'DD.MM.YYYY',\n      LL: 'D MMMM YYYY г.',\n      LLL: 'D MMMM YYYY г., HH:mm',\n      LLLL: 'dddd, D MMMM YYYY г., HH:mm'\n    },\n    calendar: {\n      sameDay: '[Сёння ў] LT',\n      nextDay: '[Заўтра ў] LT',\n      lastDay: '[Учора ў] LT',\n      nextWeek: function nextWeek() {\n        return '[У] dddd [ў] LT';\n      },\n      lastWeek: function lastWeek() {\n        switch (this.day()) {\n          case 0:\n          case 3:\n          case 5:\n          case 6:\n            return '[У мінулую] dddd [ў] LT';\n\n          case 1:\n          case 2:\n          case 4:\n            return '[У мінулы] dddd [ў] LT';\n        }\n      },\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: 'праз %s',\n      past: '%s таму',\n      s: 'некалькі секунд',\n      m: relativeTimeWithPlural,\n      mm: relativeTimeWithPlural,\n      h: relativeTimeWithPlural,\n      hh: relativeTimeWithPlural,\n      d: 'дзень',\n      dd: relativeTimeWithPlural,\n      M: 'месяц',\n      MM: relativeTimeWithPlural,\n      y: 'год',\n      yy: relativeTimeWithPlural\n    },\n    meridiemParse: /ночы|раніцы|дня|вечара/,\n    isPM: function isPM(input) {\n      return /^(дня|вечара)$/.test(input);\n    },\n    meridiem: function meridiem(hour, minute, isLower) {\n      if (hour < 4) {\n        return 'ночы';\n      } else if (hour < 12) {\n        return 'раніцы';\n      } else if (hour < 17) {\n        return 'дня';\n      } else {\n        return 'вечара';\n      }\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}-(і|ы|га)/,\n    ordinal: function ordinal(number, period) {\n      switch (period) {\n        case 'M':\n        case 'd':\n        case 'DDD':\n        case 'w':\n        case 'W':\n          return (number % 10 === 2 || number % 10 === 3) && number % 100 !== 12 && number % 100 !== 13 ? number + '-і' : number + '-ы';\n\n        case 'D':\n          return number + '-га';\n\n        default:\n          return number;\n      }\n    },\n    week: {\n      dow: 1,\n      // Monday is the first day of the week.\n      doy: 7 // The week that contains Jan 7th is the first week of the year.\n\n    }\n  });\n  return be;\n});","function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n//! moment.js locale configuration\n;\n\n(function (global, factory) {\n  (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  var bg = moment.defineLocale('bg', {\n    months: 'януари_февруари_март_април_май_юни_юли_август_септември_октомври_ноември_декември'.split('_'),\n    monthsShort: 'янр_фев_мар_апр_май_юни_юли_авг_сеп_окт_ное_дек'.split('_'),\n    weekdays: 'неделя_понеделник_вторник_сряда_четвъртък_петък_събота'.split('_'),\n    weekdaysShort: 'нед_пон_вто_сря_чет_пет_съб'.split('_'),\n    weekdaysMin: 'нд_пн_вт_ср_чт_пт_сб'.split('_'),\n    longDateFormat: {\n      LT: 'H:mm',\n      LTS: 'H:mm:ss',\n      L: 'D.MM.YYYY',\n      LL: 'D MMMM YYYY',\n      LLL: 'D MMMM YYYY H:mm',\n      LLLL: 'dddd, D MMMM YYYY H:mm'\n    },\n    calendar: {\n      sameDay: '[Днес в] LT',\n      nextDay: '[Утре в] LT',\n      nextWeek: 'dddd [в] LT',\n      lastDay: '[Вчера в] LT',\n      lastWeek: function lastWeek() {\n        switch (this.day()) {\n          case 0:\n          case 3:\n          case 6:\n            return '[В изминалата] dddd [в] LT';\n\n          case 1:\n          case 2:\n          case 4:\n          case 5:\n            return '[В изминалия] dddd [в] LT';\n        }\n      },\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: 'след %s',\n      past: 'преди %s',\n      s: 'няколко секунди',\n      ss: '%d секунди',\n      m: 'минута',\n      mm: '%d минути',\n      h: 'час',\n      hh: '%d часа',\n      d: 'ден',\n      dd: '%d дни',\n      M: 'месец',\n      MM: '%d месеца',\n      y: 'година',\n      yy: '%d години'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}-(ев|ен|ти|ви|ри|ми)/,\n    ordinal: function ordinal(number) {\n      var lastDigit = number % 10,\n          last2Digits = number % 100;\n\n      if (number === 0) {\n        return number + '-ев';\n      } else if (last2Digits === 0) {\n        return number + '-ен';\n      } else if (last2Digits > 10 && last2Digits < 20) {\n        return number + '-ти';\n      } else if (lastDigit === 1) {\n        return number + '-ви';\n      } else if (lastDigit === 2) {\n        return number + '-ри';\n      } else if (lastDigit === 7 || lastDigit === 8) {\n        return number + '-ми';\n      } else {\n        return number + '-ти';\n      }\n    },\n    week: {\n      dow: 1,\n      // Monday is the first day of the week.\n      doy: 7 // The week that contains Jan 7th is the first week of the year.\n\n    }\n  });\n  return bg;\n});","function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n//! moment.js locale configuration\n;\n\n(function (global, factory) {\n  (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  var bm = moment.defineLocale('bm', {\n    months: 'Zanwuyekalo_Fewuruyekalo_Marisikalo_Awirilikalo_Mɛkalo_Zuwɛnkalo_Zuluyekalo_Utikalo_Sɛtanburukalo_ɔkutɔburukalo_Nowanburukalo_Desanburukalo'.split('_'),\n    monthsShort: 'Zan_Few_Mar_Awi_Mɛ_Zuw_Zul_Uti_Sɛt_ɔku_Now_Des'.split('_'),\n    weekdays: 'Kari_Ntɛnɛn_Tarata_Araba_Alamisa_Juma_Sibiri'.split('_'),\n    weekdaysShort: 'Kar_Ntɛ_Tar_Ara_Ala_Jum_Sib'.split('_'),\n    weekdaysMin: 'Ka_Nt_Ta_Ar_Al_Ju_Si'.split('_'),\n    longDateFormat: {\n      LT: 'HH:mm',\n      LTS: 'HH:mm:ss',\n      L: 'DD/MM/YYYY',\n      LL: 'MMMM [tile] D [san] YYYY',\n      LLL: 'MMMM [tile] D [san] YYYY [lɛrɛ] HH:mm',\n      LLLL: 'dddd MMMM [tile] D [san] YYYY [lɛrɛ] HH:mm'\n    },\n    calendar: {\n      sameDay: '[Bi lɛrɛ] LT',\n      nextDay: '[Sini lɛrɛ] LT',\n      nextWeek: 'dddd [don lɛrɛ] LT',\n      lastDay: '[Kunu lɛrɛ] LT',\n      lastWeek: 'dddd [tɛmɛnen lɛrɛ] LT',\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: '%s kɔnɔ',\n      past: 'a bɛ %s bɔ',\n      s: 'sanga dama dama',\n      ss: 'sekondi %d',\n      m: 'miniti kelen',\n      mm: 'miniti %d',\n      h: 'lɛrɛ kelen',\n      hh: 'lɛrɛ %d',\n      d: 'tile kelen',\n      dd: 'tile %d',\n      M: 'kalo kelen',\n      MM: 'kalo %d',\n      y: 'san kelen',\n      yy: 'san %d'\n    },\n    week: {\n      dow: 1,\n      // Monday is the first day of the week.\n      doy: 4 // The week that contains Jan 4th is the first week of the year.\n\n    }\n  });\n  return bm;\n});","function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n//! moment.js locale configuration\n;\n\n(function (global, factory) {\n  (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  var symbolMap = {\n    '1': '১',\n    '2': '২',\n    '3': '৩',\n    '4': '৪',\n    '5': '৫',\n    '6': '৬',\n    '7': '৭',\n    '8': '৮',\n    '9': '৯',\n    '0': '০'\n  },\n      numberMap = {\n    '১': '1',\n    '২': '2',\n    '৩': '3',\n    '৪': '4',\n    '৫': '5',\n    '৬': '6',\n    '৭': '7',\n    '৮': '8',\n    '৯': '9',\n    '০': '0'\n  };\n  var bn = moment.defineLocale('bn', {\n    months: 'জানুয়ারী_ফেব্রুয়ারি_মার্চ_এপ্রিল_মে_জুন_জুলাই_আগস্ট_সেপ্টেম্বর_অক্টোবর_নভেম্বর_ডিসেম্বর'.split('_'),\n    monthsShort: 'জানু_ফেব_মার্চ_এপ্র_মে_জুন_জুল_আগ_সেপ্ট_অক্টো_নভে_ডিসে'.split('_'),\n    weekdays: 'রবিবার_সোমবার_মঙ্গলবার_বুধবার_বৃহস্পতিবার_শুক্রবার_শনিবার'.split('_'),\n    weekdaysShort: 'রবি_সোম_মঙ্গল_বুধ_বৃহস্পতি_শুক্র_শনি'.split('_'),\n    weekdaysMin: 'রবি_সোম_মঙ্গ_বুধ_বৃহঃ_শুক্র_শনি'.split('_'),\n    longDateFormat: {\n      LT: 'A h:mm সময়',\n      LTS: 'A h:mm:ss সময়',\n      L: 'DD/MM/YYYY',\n      LL: 'D MMMM YYYY',\n      LLL: 'D MMMM YYYY, A h:mm সময়',\n      LLLL: 'dddd, D MMMM YYYY, A h:mm সময়'\n    },\n    calendar: {\n      sameDay: '[আজ] LT',\n      nextDay: '[আগামীকাল] LT',\n      nextWeek: 'dddd, LT',\n      lastDay: '[গতকাল] LT',\n      lastWeek: '[গত] dddd, LT',\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: '%s পরে',\n      past: '%s আগে',\n      s: 'কয়েক সেকেন্ড',\n      ss: '%d সেকেন্ড',\n      m: 'এক মিনিট',\n      mm: '%d মিনিট',\n      h: 'এক ঘন্টা',\n      hh: '%d ঘন্টা',\n      d: 'এক দিন',\n      dd: '%d দিন',\n      M: 'এক মাস',\n      MM: '%d মাস',\n      y: 'এক বছর',\n      yy: '%d বছর'\n    },\n    preparse: function preparse(string) {\n      return string.replace(/[১২৩৪৫৬৭৮৯০]/g, function (match) {\n        return numberMap[match];\n      });\n    },\n    postformat: function postformat(string) {\n      return string.replace(/\\d/g, function (match) {\n        return symbolMap[match];\n      });\n    },\n    meridiemParse: /রাত|সকাল|দুপুর|বিকাল|রাত/,\n    meridiemHour: function meridiemHour(hour, meridiem) {\n      if (hour === 12) {\n        hour = 0;\n      }\n\n      if (meridiem === 'রাত' && hour >= 4 || meridiem === 'দুপুর' && hour < 5 || meridiem === 'বিকাল') {\n        return hour + 12;\n      } else {\n        return hour;\n      }\n    },\n    meridiem: function meridiem(hour, minute, isLower) {\n      if (hour < 4) {\n        return 'রাত';\n      } else if (hour < 10) {\n        return 'সকাল';\n      } else if (hour < 17) {\n        return 'দুপুর';\n      } else if (hour < 20) {\n        return 'বিকাল';\n      } else {\n        return 'রাত';\n      }\n    },\n    week: {\n      dow: 0,\n      // Sunday is the first day of the week.\n      doy: 6 // The week that contains Jan 6th is the first week of the year.\n\n    }\n  });\n  return bn;\n});","function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n//! moment.js locale configuration\n;\n\n(function (global, factory) {\n  (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  var symbolMap = {\n    '1': '༡',\n    '2': '༢',\n    '3': '༣',\n    '4': '༤',\n    '5': '༥',\n    '6': '༦',\n    '7': '༧',\n    '8': '༨',\n    '9': '༩',\n    '0': '༠'\n  },\n      numberMap = {\n    '༡': '1',\n    '༢': '2',\n    '༣': '3',\n    '༤': '4',\n    '༥': '5',\n    '༦': '6',\n    '༧': '7',\n    '༨': '8',\n    '༩': '9',\n    '༠': '0'\n  };\n  var bo = moment.defineLocale('bo', {\n    months: 'ཟླ་བ་དང་པོ_ཟླ་བ་གཉིས་པ_ཟླ་བ་གསུམ་པ_ཟླ་བ་བཞི་པ_ཟླ་བ་ལྔ་པ_ཟླ་བ་དྲུག་པ_ཟླ་བ་བདུན་པ_ཟླ་བ་བརྒྱད་པ_ཟླ་བ་དགུ་པ_ཟླ་བ་བཅུ་པ_ཟླ་བ་བཅུ་གཅིག་པ_ཟླ་བ་བཅུ་གཉིས་པ'.split('_'),\n    monthsShort: 'ཟླ་བ་དང་པོ_ཟླ་བ་གཉིས་པ_ཟླ་བ་གསུམ་པ_ཟླ་བ་བཞི་པ_ཟླ་བ་ལྔ་པ_ཟླ་བ་དྲུག་པ_ཟླ་བ་བདུན་པ_ཟླ་བ་བརྒྱད་པ_ཟླ་བ་དགུ་པ_ཟླ་བ་བཅུ་པ_ཟླ་བ་བཅུ་གཅིག་པ_ཟླ་བ་བཅུ་གཉིས་པ'.split('_'),\n    weekdays: 'གཟའ་ཉི་མ་_གཟའ་ཟླ་བ་_གཟའ་མིག་དམར་_གཟའ་ལྷག་པ་_གཟའ་ཕུར་བུ_གཟའ་པ་སངས་_གཟའ་སྤེན་པ་'.split('_'),\n    weekdaysShort: 'ཉི་མ་_ཟླ་བ་_མིག་དམར་_ལྷག་པ་_ཕུར་བུ_པ་སངས་_སྤེན་པ་'.split('_'),\n    weekdaysMin: 'ཉི་མ་_ཟླ་བ་_མིག་དམར་_ལྷག་པ་_ཕུར་བུ_པ་སངས་_སྤེན་པ་'.split('_'),\n    longDateFormat: {\n      LT: 'A h:mm',\n      LTS: 'A h:mm:ss',\n      L: 'DD/MM/YYYY',\n      LL: 'D MMMM YYYY',\n      LLL: 'D MMMM YYYY, A h:mm',\n      LLLL: 'dddd, D MMMM YYYY, A h:mm'\n    },\n    calendar: {\n      sameDay: '[དི་རིང] LT',\n      nextDay: '[སང་ཉིན] LT',\n      nextWeek: '[བདུན་ཕྲག་རྗེས་མ], LT',\n      lastDay: '[ཁ་སང] LT',\n      lastWeek: '[བདུན་ཕྲག་མཐའ་མ] dddd, LT',\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: '%s ལ་',\n      past: '%s སྔན་ལ',\n      s: 'ལམ་སང',\n      ss: '%d སྐར་ཆ།',\n      m: 'སྐར་མ་གཅིག',\n      mm: '%d སྐར་མ',\n      h: 'ཆུ་ཚོད་གཅིག',\n      hh: '%d ཆུ་ཚོད',\n      d: 'ཉིན་གཅིག',\n      dd: '%d ཉིན་',\n      M: 'ཟླ་བ་གཅིག',\n      MM: '%d ཟླ་བ',\n      y: 'ལོ་གཅིག',\n      yy: '%d ལོ'\n    },\n    preparse: function preparse(string) {\n      return string.replace(/[༡༢༣༤༥༦༧༨༩༠]/g, function (match) {\n        return numberMap[match];\n      });\n    },\n    postformat: function postformat(string) {\n      return string.replace(/\\d/g, function (match) {\n        return symbolMap[match];\n      });\n    },\n    meridiemParse: /མཚན་མོ|ཞོགས་ཀས|ཉིན་གུང|དགོང་དག|མཚན་མོ/,\n    meridiemHour: function meridiemHour(hour, meridiem) {\n      if (hour === 12) {\n        hour = 0;\n      }\n\n      if (meridiem === 'མཚན་མོ' && hour >= 4 || meridiem === 'ཉིན་གུང' && hour < 5 || meridiem === 'དགོང་དག') {\n        return hour + 12;\n      } else {\n        return hour;\n      }\n    },\n    meridiem: function meridiem(hour, minute, isLower) {\n      if (hour < 4) {\n        return 'མཚན་མོ';\n      } else if (hour < 10) {\n        return 'ཞོགས་ཀས';\n      } else if (hour < 17) {\n        return 'ཉིན་གུང';\n      } else if (hour < 20) {\n        return 'དགོང་དག';\n      } else {\n        return 'མཚན་མོ';\n      }\n    },\n    week: {\n      dow: 0,\n      // Sunday is the first day of the week.\n      doy: 6 // The week that contains Jan 6th is the first week of the year.\n\n    }\n  });\n  return bo;\n});","function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n//! moment.js locale configuration\n;\n\n(function (global, factory) {\n  (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  function relativeTimeWithMutation(number, withoutSuffix, key) {\n    var format = {\n      'mm': 'munutenn',\n      'MM': 'miz',\n      'dd': 'devezh'\n    };\n    return number + ' ' + mutation(format[key], number);\n  }\n\n  function specialMutationForYears(number) {\n    switch (lastNumber(number)) {\n      case 1:\n      case 3:\n      case 4:\n      case 5:\n      case 9:\n        return number + ' bloaz';\n\n      default:\n        return number + ' vloaz';\n    }\n  }\n\n  function lastNumber(number) {\n    if (number > 9) {\n      return lastNumber(number % 10);\n    }\n\n    return number;\n  }\n\n  function mutation(text, number) {\n    if (number === 2) {\n      return softMutation(text);\n    }\n\n    return text;\n  }\n\n  function softMutation(text) {\n    var mutationTable = {\n      'm': 'v',\n      'b': 'v',\n      'd': 'z'\n    };\n\n    if (mutationTable[text.charAt(0)] === undefined) {\n      return text;\n    }\n\n    return mutationTable[text.charAt(0)] + text.substring(1);\n  }\n\n  var br = moment.defineLocale('br', {\n    months: 'Genver_C\\'hwevrer_Meurzh_Ebrel_Mae_Mezheven_Gouere_Eost_Gwengolo_Here_Du_Kerzu'.split('_'),\n    monthsShort: 'Gen_C\\'hwe_Meu_Ebr_Mae_Eve_Gou_Eos_Gwe_Her_Du_Ker'.split('_'),\n    weekdays: 'Sul_Lun_Meurzh_Merc\\'her_Yaou_Gwener_Sadorn'.split('_'),\n    weekdaysShort: 'Sul_Lun_Meu_Mer_Yao_Gwe_Sad'.split('_'),\n    weekdaysMin: 'Su_Lu_Me_Mer_Ya_Gw_Sa'.split('_'),\n    weekdaysParseExact: true,\n    longDateFormat: {\n      LT: 'h[e]mm A',\n      LTS: 'h[e]mm:ss A',\n      L: 'DD/MM/YYYY',\n      LL: 'D [a viz] MMMM YYYY',\n      LLL: 'D [a viz] MMMM YYYY h[e]mm A',\n      LLLL: 'dddd, D [a viz] MMMM YYYY h[e]mm A'\n    },\n    calendar: {\n      sameDay: '[Hiziv da] LT',\n      nextDay: '[Warc\\'hoazh da] LT',\n      nextWeek: 'dddd [da] LT',\n      lastDay: '[Dec\\'h da] LT',\n      lastWeek: 'dddd [paset da] LT',\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: 'a-benn %s',\n      past: '%s \\'zo',\n      s: 'un nebeud segondennoù',\n      ss: '%d eilenn',\n      m: 'ur vunutenn',\n      mm: relativeTimeWithMutation,\n      h: 'un eur',\n      hh: '%d eur',\n      d: 'un devezh',\n      dd: relativeTimeWithMutation,\n      M: 'ur miz',\n      MM: relativeTimeWithMutation,\n      y: 'ur bloaz',\n      yy: specialMutationForYears\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}(añ|vet)/,\n    ordinal: function ordinal(number) {\n      var output = number === 1 ? 'añ' : 'vet';\n      return number + output;\n    },\n    week: {\n      dow: 1,\n      // Monday is the first day of the week.\n      doy: 4 // The week that contains Jan 4th is the first week of the year.\n\n    }\n  });\n  return br;\n});","function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n//! moment.js locale configuration\n;\n\n(function (global, factory) {\n  (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  function translate(number, withoutSuffix, key) {\n    var result = number + ' ';\n\n    switch (key) {\n      case 'ss':\n        if (number === 1) {\n          result += 'sekunda';\n        } else if (number === 2 || number === 3 || number === 4) {\n          result += 'sekunde';\n        } else {\n          result += 'sekundi';\n        }\n\n        return result;\n\n      case 'm':\n        return withoutSuffix ? 'jedna minuta' : 'jedne minute';\n\n      case 'mm':\n        if (number === 1) {\n          result += 'minuta';\n        } else if (number === 2 || number === 3 || number === 4) {\n          result += 'minute';\n        } else {\n          result += 'minuta';\n        }\n\n        return result;\n\n      case 'h':\n        return withoutSuffix ? 'jedan sat' : 'jednog sata';\n\n      case 'hh':\n        if (number === 1) {\n          result += 'sat';\n        } else if (number === 2 || number === 3 || number === 4) {\n          result += 'sata';\n        } else {\n          result += 'sati';\n        }\n\n        return result;\n\n      case 'dd':\n        if (number === 1) {\n          result += 'dan';\n        } else {\n          result += 'dana';\n        }\n\n        return result;\n\n      case 'MM':\n        if (number === 1) {\n          result += 'mjesec';\n        } else if (number === 2 || number === 3 || number === 4) {\n          result += 'mjeseca';\n        } else {\n          result += 'mjeseci';\n        }\n\n        return result;\n\n      case 'yy':\n        if (number === 1) {\n          result += 'godina';\n        } else if (number === 2 || number === 3 || number === 4) {\n          result += 'godine';\n        } else {\n          result += 'godina';\n        }\n\n        return result;\n    }\n  }\n\n  var bs = moment.defineLocale('bs', {\n    months: 'januar_februar_mart_april_maj_juni_juli_august_septembar_oktobar_novembar_decembar'.split('_'),\n    monthsShort: 'jan._feb._mar._apr._maj._jun._jul._aug._sep._okt._nov._dec.'.split('_'),\n    monthsParseExact: true,\n    weekdays: 'nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota'.split('_'),\n    weekdaysShort: 'ned._pon._uto._sri._čet._pet._sub.'.split('_'),\n    weekdaysMin: 'ne_po_ut_sr_če_pe_su'.split('_'),\n    weekdaysParseExact: true,\n    longDateFormat: {\n      LT: 'H:mm',\n      LTS: 'H:mm:ss',\n      L: 'DD.MM.YYYY',\n      LL: 'D. MMMM YYYY',\n      LLL: 'D. MMMM YYYY H:mm',\n      LLLL: 'dddd, D. MMMM YYYY H:mm'\n    },\n    calendar: {\n      sameDay: '[danas u] LT',\n      nextDay: '[sutra u] LT',\n      nextWeek: function nextWeek() {\n        switch (this.day()) {\n          case 0:\n            return '[u] [nedjelju] [u] LT';\n\n          case 3:\n            return '[u] [srijedu] [u] LT';\n\n          case 6:\n            return '[u] [subotu] [u] LT';\n\n          case 1:\n          case 2:\n          case 4:\n          case 5:\n            return '[u] dddd [u] LT';\n        }\n      },\n      lastDay: '[jučer u] LT',\n      lastWeek: function lastWeek() {\n        switch (this.day()) {\n          case 0:\n          case 3:\n            return '[prošlu] dddd [u] LT';\n\n          case 6:\n            return '[prošle] [subote] [u] LT';\n\n          case 1:\n          case 2:\n          case 4:\n          case 5:\n            return '[prošli] dddd [u] LT';\n        }\n      },\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: 'za %s',\n      past: 'prije %s',\n      s: 'par sekundi',\n      ss: translate,\n      m: translate,\n      mm: translate,\n      h: translate,\n      hh: translate,\n      d: 'dan',\n      dd: translate,\n      M: 'mjesec',\n      MM: translate,\n      y: 'godinu',\n      yy: translate\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n    ordinal: '%d.',\n    week: {\n      dow: 1,\n      // Monday is the first day of the week.\n      doy: 7 // The week that contains Jan 7th is the first week of the year.\n\n    }\n  });\n  return bs;\n});","function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n//! moment.js locale configuration\n;\n\n(function (global, factory) {\n  (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  var ca = moment.defineLocale('ca', {\n    months: {\n      standalone: 'gener_febrer_març_abril_maig_juny_juliol_agost_setembre_octubre_novembre_desembre'.split('_'),\n      format: 'de gener_de febrer_de març_d\\'abril_de maig_de juny_de juliol_d\\'agost_de setembre_d\\'octubre_de novembre_de desembre'.split('_'),\n      isFormat: /D[oD]?(\\s)+MMMM/\n    },\n    monthsShort: 'gen._febr._març_abr._maig_juny_jul._ag._set._oct._nov._des.'.split('_'),\n    monthsParseExact: true,\n    weekdays: 'diumenge_dilluns_dimarts_dimecres_dijous_divendres_dissabte'.split('_'),\n    weekdaysShort: 'dg._dl._dt._dc._dj._dv._ds.'.split('_'),\n    weekdaysMin: 'dg_dl_dt_dc_dj_dv_ds'.split('_'),\n    weekdaysParseExact: true,\n    longDateFormat: {\n      LT: 'H:mm',\n      LTS: 'H:mm:ss',\n      L: 'DD/MM/YYYY',\n      LL: 'D MMMM [de] YYYY',\n      ll: 'D MMM YYYY',\n      LLL: 'D MMMM [de] YYYY [a les] H:mm',\n      lll: 'D MMM YYYY, H:mm',\n      LLLL: 'dddd D MMMM [de] YYYY [a les] H:mm',\n      llll: 'ddd D MMM YYYY, H:mm'\n    },\n    calendar: {\n      sameDay: function sameDay() {\n        return '[avui a ' + (this.hours() !== 1 ? 'les' : 'la') + '] LT';\n      },\n      nextDay: function nextDay() {\n        return '[demà a ' + (this.hours() !== 1 ? 'les' : 'la') + '] LT';\n      },\n      nextWeek: function nextWeek() {\n        return 'dddd [a ' + (this.hours() !== 1 ? 'les' : 'la') + '] LT';\n      },\n      lastDay: function lastDay() {\n        return '[ahir a ' + (this.hours() !== 1 ? 'les' : 'la') + '] LT';\n      },\n      lastWeek: function lastWeek() {\n        return '[el] dddd [passat a ' + (this.hours() !== 1 ? 'les' : 'la') + '] LT';\n      },\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: 'd\\'aquí %s',\n      past: 'fa %s',\n      s: 'uns segons',\n      ss: '%d segons',\n      m: 'un minut',\n      mm: '%d minuts',\n      h: 'una hora',\n      hh: '%d hores',\n      d: 'un dia',\n      dd: '%d dies',\n      M: 'un mes',\n      MM: '%d mesos',\n      y: 'un any',\n      yy: '%d anys'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}(r|n|t|è|a)/,\n    ordinal: function ordinal(number, period) {\n      var output = number === 1 ? 'r' : number === 2 ? 'n' : number === 3 ? 'r' : number === 4 ? 't' : 'è';\n\n      if (period === 'w' || period === 'W') {\n        output = 'a';\n      }\n\n      return number + output;\n    },\n    week: {\n      dow: 1,\n      // Monday is the first day of the week.\n      doy: 4 // The week that contains Jan 4th is the first week of the year.\n\n    }\n  });\n  return ca;\n});","function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n//! moment.js locale configuration\n;\n\n(function (global, factory) {\n  (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  var months = 'leden_únor_březen_duben_květen_červen_červenec_srpen_září_říjen_listopad_prosinec'.split('_'),\n      monthsShort = 'led_úno_bře_dub_kvě_čvn_čvc_srp_zář_říj_lis_pro'.split('_');\n  var monthsParse = [/^led/i, /^úno/i, /^bře/i, /^dub/i, /^kvě/i, /^(čvn|červen$|června)/i, /^(čvc|červenec|července)/i, /^srp/i, /^zář/i, /^říj/i, /^lis/i, /^pro/i]; // NOTE: 'červen' is substring of 'červenec'; therefore 'červenec' must precede 'červen' in the regex to be fully matched.\n  // Otherwise parser matches '1. červenec' as '1. červen' + 'ec'.\n\n  var monthsRegex = /^(leden|únor|březen|duben|květen|červenec|července|červen|června|srpen|září|říjen|listopad|prosinec|led|úno|bře|dub|kvě|čvn|čvc|srp|zář|říj|lis|pro)/i;\n\n  function plural(n) {\n    return n > 1 && n < 5 && ~~(n / 10) !== 1;\n  }\n\n  function translate(number, withoutSuffix, key, isFuture) {\n    var result = number + ' ';\n\n    switch (key) {\n      case 's':\n        // a few seconds / in a few seconds / a few seconds ago\n        return withoutSuffix || isFuture ? 'pár sekund' : 'pár sekundami';\n\n      case 'ss':\n        // 9 seconds / in 9 seconds / 9 seconds ago\n        if (withoutSuffix || isFuture) {\n          return result + (plural(number) ? 'sekundy' : 'sekund');\n        } else {\n          return result + 'sekundami';\n        }\n\n        break;\n\n      case 'm':\n        // a minute / in a minute / a minute ago\n        return withoutSuffix ? 'minuta' : isFuture ? 'minutu' : 'minutou';\n\n      case 'mm':\n        // 9 minutes / in 9 minutes / 9 minutes ago\n        if (withoutSuffix || isFuture) {\n          return result + (plural(number) ? 'minuty' : 'minut');\n        } else {\n          return result + 'minutami';\n        }\n\n        break;\n\n      case 'h':\n        // an hour / in an hour / an hour ago\n        return withoutSuffix ? 'hodina' : isFuture ? 'hodinu' : 'hodinou';\n\n      case 'hh':\n        // 9 hours / in 9 hours / 9 hours ago\n        if (withoutSuffix || isFuture) {\n          return result + (plural(number) ? 'hodiny' : 'hodin');\n        } else {\n          return result + 'hodinami';\n        }\n\n        break;\n\n      case 'd':\n        // a day / in a day / a day ago\n        return withoutSuffix || isFuture ? 'den' : 'dnem';\n\n      case 'dd':\n        // 9 days / in 9 days / 9 days ago\n        if (withoutSuffix || isFuture) {\n          return result + (plural(number) ? 'dny' : 'dní');\n        } else {\n          return result + 'dny';\n        }\n\n        break;\n\n      case 'M':\n        // a month / in a month / a month ago\n        return withoutSuffix || isFuture ? 'měsíc' : 'měsícem';\n\n      case 'MM':\n        // 9 months / in 9 months / 9 months ago\n        if (withoutSuffix || isFuture) {\n          return result + (plural(number) ? 'měsíce' : 'měsíců');\n        } else {\n          return result + 'měsíci';\n        }\n\n        break;\n\n      case 'y':\n        // a year / in a year / a year ago\n        return withoutSuffix || isFuture ? 'rok' : 'rokem';\n\n      case 'yy':\n        // 9 years / in 9 years / 9 years ago\n        if (withoutSuffix || isFuture) {\n          return result + (plural(number) ? 'roky' : 'let');\n        } else {\n          return result + 'lety';\n        }\n\n        break;\n    }\n  }\n\n  var cs = moment.defineLocale('cs', {\n    months: months,\n    monthsShort: monthsShort,\n    monthsRegex: monthsRegex,\n    monthsShortRegex: monthsRegex,\n    // NOTE: 'červen' is substring of 'červenec'; therefore 'červenec' must precede 'červen' in the regex to be fully matched.\n    // Otherwise parser matches '1. červenec' as '1. červen' + 'ec'.\n    monthsStrictRegex: /^(leden|ledna|února|únor|březen|března|duben|dubna|květen|května|červenec|července|červen|června|srpen|srpna|září|říjen|října|listopadu|listopad|prosinec|prosince)/i,\n    monthsShortStrictRegex: /^(led|úno|bře|dub|kvě|čvn|čvc|srp|zář|říj|lis|pro)/i,\n    monthsParse: monthsParse,\n    longMonthsParse: monthsParse,\n    shortMonthsParse: monthsParse,\n    weekdays: 'neděle_pondělí_úterý_středa_čtvrtek_pátek_sobota'.split('_'),\n    weekdaysShort: 'ne_po_út_st_čt_pá_so'.split('_'),\n    weekdaysMin: 'ne_po_út_st_čt_pá_so'.split('_'),\n    longDateFormat: {\n      LT: 'H:mm',\n      LTS: 'H:mm:ss',\n      L: 'DD.MM.YYYY',\n      LL: 'D. MMMM YYYY',\n      LLL: 'D. MMMM YYYY H:mm',\n      LLLL: 'dddd D. MMMM YYYY H:mm',\n      l: 'D. M. YYYY'\n    },\n    calendar: {\n      sameDay: '[dnes v] LT',\n      nextDay: '[zítra v] LT',\n      nextWeek: function nextWeek() {\n        switch (this.day()) {\n          case 0:\n            return '[v neděli v] LT';\n\n          case 1:\n          case 2:\n            return '[v] dddd [v] LT';\n\n          case 3:\n            return '[ve středu v] LT';\n\n          case 4:\n            return '[ve čtvrtek v] LT';\n\n          case 5:\n            return '[v pátek v] LT';\n\n          case 6:\n            return '[v sobotu v] LT';\n        }\n      },\n      lastDay: '[včera v] LT',\n      lastWeek: function lastWeek() {\n        switch (this.day()) {\n          case 0:\n            return '[minulou neděli v] LT';\n\n          case 1:\n          case 2:\n            return '[minulé] dddd [v] LT';\n\n          case 3:\n            return '[minulou středu v] LT';\n\n          case 4:\n          case 5:\n            return '[minulý] dddd [v] LT';\n\n          case 6:\n            return '[minulou sobotu v] LT';\n        }\n      },\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: 'za %s',\n      past: 'před %s',\n      s: translate,\n      ss: translate,\n      m: translate,\n      mm: translate,\n      h: translate,\n      hh: translate,\n      d: translate,\n      dd: translate,\n      M: translate,\n      MM: translate,\n      y: translate,\n      yy: translate\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n    ordinal: '%d.',\n    week: {\n      dow: 1,\n      // Monday is the first day of the week.\n      doy: 4 // The week that contains Jan 4th is the first week of the year.\n\n    }\n  });\n  return cs;\n});","function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n//! moment.js locale configuration\n;\n\n(function (global, factory) {\n  (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  var cv = moment.defineLocale('cv', {\n    months: 'кӑрлач_нарӑс_пуш_ака_май_ҫӗртме_утӑ_ҫурла_авӑн_юпа_чӳк_раштав'.split('_'),\n    monthsShort: 'кӑр_нар_пуш_ака_май_ҫӗр_утӑ_ҫур_авн_юпа_чӳк_раш'.split('_'),\n    weekdays: 'вырсарникун_тунтикун_ытларикун_юнкун_кӗҫнерникун_эрнекун_шӑматкун'.split('_'),\n    weekdaysShort: 'выр_тун_ытл_юн_кӗҫ_эрн_шӑм'.split('_'),\n    weekdaysMin: 'вр_тн_ыт_юн_кҫ_эр_шм'.split('_'),\n    longDateFormat: {\n      LT: 'HH:mm',\n      LTS: 'HH:mm:ss',\n      L: 'DD-MM-YYYY',\n      LL: 'YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ]',\n      LLL: 'YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ], HH:mm',\n      LLLL: 'dddd, YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ], HH:mm'\n    },\n    calendar: {\n      sameDay: '[Паян] LT [сехетре]',\n      nextDay: '[Ыран] LT [сехетре]',\n      lastDay: '[Ӗнер] LT [сехетре]',\n      nextWeek: '[Ҫитес] dddd LT [сехетре]',\n      lastWeek: '[Иртнӗ] dddd LT [сехетре]',\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: function future(output) {\n        var affix = /сехет$/i.exec(output) ? 'рен' : /ҫул$/i.exec(output) ? 'тан' : 'ран';\n        return output + affix;\n      },\n      past: '%s каялла',\n      s: 'пӗр-ик ҫеккунт',\n      ss: '%d ҫеккунт',\n      m: 'пӗр минут',\n      mm: '%d минут',\n      h: 'пӗр сехет',\n      hh: '%d сехет',\n      d: 'пӗр кун',\n      dd: '%d кун',\n      M: 'пӗр уйӑх',\n      MM: '%d уйӑх',\n      y: 'пӗр ҫул',\n      yy: '%d ҫул'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}-мӗш/,\n    ordinal: '%d-мӗш',\n    week: {\n      dow: 1,\n      // Monday is the first day of the week.\n      doy: 7 // The week that contains Jan 7th is the first week of the year.\n\n    }\n  });\n  return cv;\n});","function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n//! moment.js locale configuration\n;\n\n(function (global, factory) {\n  (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  var cy = moment.defineLocale('cy', {\n    months: 'Ionawr_Chwefror_Mawrth_Ebrill_Mai_Mehefin_Gorffennaf_Awst_Medi_Hydref_Tachwedd_Rhagfyr'.split('_'),\n    monthsShort: 'Ion_Chwe_Maw_Ebr_Mai_Meh_Gor_Aws_Med_Hyd_Tach_Rhag'.split('_'),\n    weekdays: 'Dydd Sul_Dydd Llun_Dydd Mawrth_Dydd Mercher_Dydd Iau_Dydd Gwener_Dydd Sadwrn'.split('_'),\n    weekdaysShort: 'Sul_Llun_Maw_Mer_Iau_Gwe_Sad'.split('_'),\n    weekdaysMin: 'Su_Ll_Ma_Me_Ia_Gw_Sa'.split('_'),\n    weekdaysParseExact: true,\n    // time formats are the same as en-gb\n    longDateFormat: {\n      LT: 'HH:mm',\n      LTS: 'HH:mm:ss',\n      L: 'DD/MM/YYYY',\n      LL: 'D MMMM YYYY',\n      LLL: 'D MMMM YYYY HH:mm',\n      LLLL: 'dddd, D MMMM YYYY HH:mm'\n    },\n    calendar: {\n      sameDay: '[Heddiw am] LT',\n      nextDay: '[Yfory am] LT',\n      nextWeek: 'dddd [am] LT',\n      lastDay: '[Ddoe am] LT',\n      lastWeek: 'dddd [diwethaf am] LT',\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: 'mewn %s',\n      past: '%s yn ôl',\n      s: 'ychydig eiliadau',\n      ss: '%d eiliad',\n      m: 'munud',\n      mm: '%d munud',\n      h: 'awr',\n      hh: '%d awr',\n      d: 'diwrnod',\n      dd: '%d diwrnod',\n      M: 'mis',\n      MM: '%d mis',\n      y: 'blwyddyn',\n      yy: '%d flynedd'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}(fed|ain|af|il|ydd|ed|eg)/,\n    // traditional ordinal numbers above 31 are not commonly used in colloquial Welsh\n    ordinal: function ordinal(number) {\n      var b = number,\n          output = '',\n          lookup = ['', 'af', 'il', 'ydd', 'ydd', 'ed', 'ed', 'ed', 'fed', 'fed', 'fed', // 1af to 10fed\n      'eg', 'fed', 'eg', 'eg', 'fed', 'eg', 'eg', 'fed', 'eg', 'fed' // 11eg to 20fed\n      ];\n\n      if (b > 20) {\n        if (b === 40 || b === 50 || b === 60 || b === 80 || b === 100) {\n          output = 'fed'; // not 30ain, 70ain or 90ain\n        } else {\n          output = 'ain';\n        }\n      } else if (b > 0) {\n        output = lookup[b];\n      }\n\n      return number + output;\n    },\n    week: {\n      dow: 1,\n      // Monday is the first day of the week.\n      doy: 4 // The week that contains Jan 4th is the first week of the year.\n\n    }\n  });\n  return cy;\n});","function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n//! moment.js locale configuration\n;\n\n(function (global, factory) {\n  (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  var da = moment.defineLocale('da', {\n    months: 'januar_februar_marts_april_maj_juni_juli_august_september_oktober_november_december'.split('_'),\n    monthsShort: 'jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec'.split('_'),\n    weekdays: 'søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag'.split('_'),\n    weekdaysShort: 'søn_man_tir_ons_tor_fre_lør'.split('_'),\n    weekdaysMin: 'sø_ma_ti_on_to_fr_lø'.split('_'),\n    longDateFormat: {\n      LT: 'HH:mm',\n      LTS: 'HH:mm:ss',\n      L: 'DD.MM.YYYY',\n      LL: 'D. MMMM YYYY',\n      LLL: 'D. MMMM YYYY HH:mm',\n      LLLL: 'dddd [d.] D. MMMM YYYY [kl.] HH:mm'\n    },\n    calendar: {\n      sameDay: '[i dag kl.] LT',\n      nextDay: '[i morgen kl.] LT',\n      nextWeek: 'på dddd [kl.] LT',\n      lastDay: '[i går kl.] LT',\n      lastWeek: '[i] dddd[s kl.] LT',\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: 'om %s',\n      past: '%s siden',\n      s: 'få sekunder',\n      ss: '%d sekunder',\n      m: 'et minut',\n      mm: '%d minutter',\n      h: 'en time',\n      hh: '%d timer',\n      d: 'en dag',\n      dd: '%d dage',\n      M: 'en måned',\n      MM: '%d måneder',\n      y: 'et år',\n      yy: '%d år'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n    ordinal: '%d.',\n    week: {\n      dow: 1,\n      // Monday is the first day of the week.\n      doy: 4 // The week that contains Jan 4th is the first week of the year.\n\n    }\n  });\n  return da;\n});","function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n//! moment.js locale configuration\n;\n\n(function (global, factory) {\n  (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  function processRelativeTime(number, withoutSuffix, key, isFuture) {\n    var format = {\n      'm': ['eine Minute', 'einer Minute'],\n      'h': ['eine Stunde', 'einer Stunde'],\n      'd': ['ein Tag', 'einem Tag'],\n      'dd': [number + ' Tage', number + ' Tagen'],\n      'M': ['ein Monat', 'einem Monat'],\n      'MM': [number + ' Monate', number + ' Monaten'],\n      'y': ['ein Jahr', 'einem Jahr'],\n      'yy': [number + ' Jahre', number + ' Jahren']\n    };\n    return withoutSuffix ? format[key][0] : format[key][1];\n  }\n\n  var de = moment.defineLocale('de', {\n    months: 'Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split('_'),\n    monthsShort: 'Jan._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.'.split('_'),\n    monthsParseExact: true,\n    weekdays: 'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split('_'),\n    weekdaysShort: 'So._Mo._Di._Mi._Do._Fr._Sa.'.split('_'),\n    weekdaysMin: 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),\n    weekdaysParseExact: true,\n    longDateFormat: {\n      LT: 'HH:mm',\n      LTS: 'HH:mm:ss',\n      L: 'DD.MM.YYYY',\n      LL: 'D. MMMM YYYY',\n      LLL: 'D. MMMM YYYY HH:mm',\n      LLLL: 'dddd, D. MMMM YYYY HH:mm'\n    },\n    calendar: {\n      sameDay: '[heute um] LT [Uhr]',\n      sameElse: 'L',\n      nextDay: '[morgen um] LT [Uhr]',\n      nextWeek: 'dddd [um] LT [Uhr]',\n      lastDay: '[gestern um] LT [Uhr]',\n      lastWeek: '[letzten] dddd [um] LT [Uhr]'\n    },\n    relativeTime: {\n      future: 'in %s',\n      past: 'vor %s',\n      s: 'ein paar Sekunden',\n      ss: '%d Sekunden',\n      m: processRelativeTime,\n      mm: '%d Minuten',\n      h: processRelativeTime,\n      hh: '%d Stunden',\n      d: processRelativeTime,\n      dd: processRelativeTime,\n      M: processRelativeTime,\n      MM: processRelativeTime,\n      y: processRelativeTime,\n      yy: processRelativeTime\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n    ordinal: '%d.',\n    week: {\n      dow: 1,\n      // Monday is the first day of the week.\n      doy: 4 // The week that contains Jan 4th is the first week of the year.\n\n    }\n  });\n  return de;\n});","function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n//! moment.js locale configuration\n;\n\n(function (global, factory) {\n  (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  function processRelativeTime(number, withoutSuffix, key, isFuture) {\n    var format = {\n      'm': ['eine Minute', 'einer Minute'],\n      'h': ['eine Stunde', 'einer Stunde'],\n      'd': ['ein Tag', 'einem Tag'],\n      'dd': [number + ' Tage', number + ' Tagen'],\n      'M': ['ein Monat', 'einem Monat'],\n      'MM': [number + ' Monate', number + ' Monaten'],\n      'y': ['ein Jahr', 'einem Jahr'],\n      'yy': [number + ' Jahre', number + ' Jahren']\n    };\n    return withoutSuffix ? format[key][0] : format[key][1];\n  }\n\n  var deAt = moment.defineLocale('de-at', {\n    months: 'Jänner_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split('_'),\n    monthsShort: 'Jän._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.'.split('_'),\n    monthsParseExact: true,\n    weekdays: 'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split('_'),\n    weekdaysShort: 'So._Mo._Di._Mi._Do._Fr._Sa.'.split('_'),\n    weekdaysMin: 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),\n    weekdaysParseExact: true,\n    longDateFormat: {\n      LT: 'HH:mm',\n      LTS: 'HH:mm:ss',\n      L: 'DD.MM.YYYY',\n      LL: 'D. MMMM YYYY',\n      LLL: 'D. MMMM YYYY HH:mm',\n      LLLL: 'dddd, D. MMMM YYYY HH:mm'\n    },\n    calendar: {\n      sameDay: '[heute um] LT [Uhr]',\n      sameElse: 'L',\n      nextDay: '[morgen um] LT [Uhr]',\n      nextWeek: 'dddd [um] LT [Uhr]',\n      lastDay: '[gestern um] LT [Uhr]',\n      lastWeek: '[letzten] dddd [um] LT [Uhr]'\n    },\n    relativeTime: {\n      future: 'in %s',\n      past: 'vor %s',\n      s: 'ein paar Sekunden',\n      ss: '%d Sekunden',\n      m: processRelativeTime,\n      mm: '%d Minuten',\n      h: processRelativeTime,\n      hh: '%d Stunden',\n      d: processRelativeTime,\n      dd: processRelativeTime,\n      M: processRelativeTime,\n      MM: processRelativeTime,\n      y: processRelativeTime,\n      yy: processRelativeTime\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n    ordinal: '%d.',\n    week: {\n      dow: 1,\n      // Monday is the first day of the week.\n      doy: 4 // The week that contains Jan 4th is the first week of the year.\n\n    }\n  });\n  return deAt;\n});","function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n//! moment.js locale configuration\n;\n\n(function (global, factory) {\n  (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  function processRelativeTime(number, withoutSuffix, key, isFuture) {\n    var format = {\n      'm': ['eine Minute', 'einer Minute'],\n      'h': ['eine Stunde', 'einer Stunde'],\n      'd': ['ein Tag', 'einem Tag'],\n      'dd': [number + ' Tage', number + ' Tagen'],\n      'M': ['ein Monat', 'einem Monat'],\n      'MM': [number + ' Monate', number + ' Monaten'],\n      'y': ['ein Jahr', 'einem Jahr'],\n      'yy': [number + ' Jahre', number + ' Jahren']\n    };\n    return withoutSuffix ? format[key][0] : format[key][1];\n  }\n\n  var deCh = moment.defineLocale('de-ch', {\n    months: 'Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split('_'),\n    monthsShort: 'Jan._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.'.split('_'),\n    monthsParseExact: true,\n    weekdays: 'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split('_'),\n    weekdaysShort: 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),\n    weekdaysMin: 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),\n    weekdaysParseExact: true,\n    longDateFormat: {\n      LT: 'HH:mm',\n      LTS: 'HH:mm:ss',\n      L: 'DD.MM.YYYY',\n      LL: 'D. MMMM YYYY',\n      LLL: 'D. MMMM YYYY HH:mm',\n      LLLL: 'dddd, D. MMMM YYYY HH:mm'\n    },\n    calendar: {\n      sameDay: '[heute um] LT [Uhr]',\n      sameElse: 'L',\n      nextDay: '[morgen um] LT [Uhr]',\n      nextWeek: 'dddd [um] LT [Uhr]',\n      lastDay: '[gestern um] LT [Uhr]',\n      lastWeek: '[letzten] dddd [um] LT [Uhr]'\n    },\n    relativeTime: {\n      future: 'in %s',\n      past: 'vor %s',\n      s: 'ein paar Sekunden',\n      ss: '%d Sekunden',\n      m: processRelativeTime,\n      mm: '%d Minuten',\n      h: processRelativeTime,\n      hh: '%d Stunden',\n      d: processRelativeTime,\n      dd: processRelativeTime,\n      M: processRelativeTime,\n      MM: processRelativeTime,\n      y: processRelativeTime,\n      yy: processRelativeTime\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n    ordinal: '%d.',\n    week: {\n      dow: 1,\n      // Monday is the first day of the week.\n      doy: 4 // The week that contains Jan 4th is the first week of the year.\n\n    }\n  });\n  return deCh;\n});","function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n//! moment.js locale configuration\n;\n\n(function (global, factory) {\n  (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  var months = ['ޖެނުއަރީ', 'ފެބްރުއަރީ', 'މާރިޗު', 'އޭޕްރީލު', 'މޭ', 'ޖޫން', 'ޖުލައި', 'އޯގަސްޓު', 'ސެޕްޓެމްބަރު', 'އޮކްޓޯބަރު', 'ނޮވެމްބަރު', 'ޑިސެމްބަރު'],\n      weekdays = ['އާދިއްތަ', 'ހޯމަ', 'އަންގާރަ', 'ބުދަ', 'ބުރާސްފަތި', 'ހުކުރު', 'ހޮނިހިރު'];\n  var dv = moment.defineLocale('dv', {\n    months: months,\n    monthsShort: months,\n    weekdays: weekdays,\n    weekdaysShort: weekdays,\n    weekdaysMin: 'އާދި_ހޯމަ_އަން_ބުދަ_ބުރާ_ހުކު_ހޮނި'.split('_'),\n    longDateFormat: {\n      LT: 'HH:mm',\n      LTS: 'HH:mm:ss',\n      L: 'D/M/YYYY',\n      LL: 'D MMMM YYYY',\n      LLL: 'D MMMM YYYY HH:mm',\n      LLLL: 'dddd D MMMM YYYY HH:mm'\n    },\n    meridiemParse: /މކ|މފ/,\n    isPM: function isPM(input) {\n      return 'މފ' === input;\n    },\n    meridiem: function meridiem(hour, minute, isLower) {\n      if (hour < 12) {\n        return 'މކ';\n      } else {\n        return 'މފ';\n      }\n    },\n    calendar: {\n      sameDay: '[މިއަދު] LT',\n      nextDay: '[މާދަމާ] LT',\n      nextWeek: 'dddd LT',\n      lastDay: '[އިއްޔެ] LT',\n      lastWeek: '[ފާއިތުވި] dddd LT',\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: 'ތެރޭގައި %s',\n      past: 'ކުރިން %s',\n      s: 'ސިކުންތުކޮޅެއް',\n      ss: 'd% ސިކުންތު',\n      m: 'މިނިޓެއް',\n      mm: 'މިނިޓު %d',\n      h: 'ގަޑިއިރެއް',\n      hh: 'ގަޑިއިރު %d',\n      d: 'ދުވަހެއް',\n      dd: 'ދުވަސް %d',\n      M: 'މަހެއް',\n      MM: 'މަސް %d',\n      y: 'އަހަރެއް',\n      yy: 'އަހަރު %d'\n    },\n    preparse: function preparse(string) {\n      return string.replace(/،/g, ',');\n    },\n    postformat: function postformat(string) {\n      return string.replace(/,/g, '،');\n    },\n    week: {\n      dow: 7,\n      // Sunday is the first day of the week.\n      doy: 12 // The week that contains Jan 12th is the first week of the year.\n\n    }\n  });\n  return dv;\n});","function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n//! moment.js locale configuration\n;\n\n(function (global, factory) {\n  (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  function isFunction(input) {\n    return input instanceof Function || Object.prototype.toString.call(input) === '[object Function]';\n  }\n\n  var el = moment.defineLocale('el', {\n    monthsNominativeEl: 'Ιανουάριος_Φεβρουάριος_Μάρτιος_Απρίλιος_Μάιος_Ιούνιος_Ιούλιος_Αύγουστος_Σεπτέμβριος_Οκτώβριος_Νοέμβριος_Δεκέμβριος'.split('_'),\n    monthsGenitiveEl: 'Ιανουαρίου_Φεβρουαρίου_Μαρτίου_Απριλίου_Μαΐου_Ιουνίου_Ιουλίου_Αυγούστου_Σεπτεμβρίου_Οκτωβρίου_Νοεμβρίου_Δεκεμβρίου'.split('_'),\n    months: function months(momentToFormat, format) {\n      if (!momentToFormat) {\n        return this._monthsNominativeEl;\n      } else if (typeof format === 'string' && /D/.test(format.substring(0, format.indexOf('MMMM')))) {\n        // if there is a day number before 'MMMM'\n        return this._monthsGenitiveEl[momentToFormat.month()];\n      } else {\n        return this._monthsNominativeEl[momentToFormat.month()];\n      }\n    },\n    monthsShort: 'Ιαν_Φεβ_Μαρ_Απρ_Μαϊ_Ιουν_Ιουλ_Αυγ_Σεπ_Οκτ_Νοε_Δεκ'.split('_'),\n    weekdays: 'Κυριακή_Δευτέρα_Τρίτη_Τετάρτη_Πέμπτη_Παρασκευή_Σάββατο'.split('_'),\n    weekdaysShort: 'Κυρ_Δευ_Τρι_Τετ_Πεμ_Παρ_Σαβ'.split('_'),\n    weekdaysMin: 'Κυ_Δε_Τρ_Τε_Πε_Πα_Σα'.split('_'),\n    meridiem: function meridiem(hours, minutes, isLower) {\n      if (hours > 11) {\n        return isLower ? 'μμ' : 'ΜΜ';\n      } else {\n        return isLower ? 'πμ' : 'ΠΜ';\n      }\n    },\n    isPM: function isPM(input) {\n      return (input + '').toLowerCase()[0] === 'μ';\n    },\n    meridiemParse: /[ΠΜ]\\.?Μ?\\.?/i,\n    longDateFormat: {\n      LT: 'h:mm A',\n      LTS: 'h:mm:ss A',\n      L: 'DD/MM/YYYY',\n      LL: 'D MMMM YYYY',\n      LLL: 'D MMMM YYYY h:mm A',\n      LLLL: 'dddd, D MMMM YYYY h:mm A'\n    },\n    calendarEl: {\n      sameDay: '[Σήμερα {}] LT',\n      nextDay: '[Αύριο {}] LT',\n      nextWeek: 'dddd [{}] LT',\n      lastDay: '[Χθες {}] LT',\n      lastWeek: function lastWeek() {\n        switch (this.day()) {\n          case 6:\n            return '[το προηγούμενο] dddd [{}] LT';\n\n          default:\n            return '[την προηγούμενη] dddd [{}] LT';\n        }\n      },\n      sameElse: 'L'\n    },\n    calendar: function calendar(key, mom) {\n      var output = this._calendarEl[key],\n          hours = mom && mom.hours();\n\n      if (isFunction(output)) {\n        output = output.apply(mom);\n      }\n\n      return output.replace('{}', hours % 12 === 1 ? 'στη' : 'στις');\n    },\n    relativeTime: {\n      future: 'σε %s',\n      past: '%s πριν',\n      s: 'λίγα δευτερόλεπτα',\n      ss: '%d δευτερόλεπτα',\n      m: 'ένα λεπτό',\n      mm: '%d λεπτά',\n      h: 'μία ώρα',\n      hh: '%d ώρες',\n      d: 'μία μέρα',\n      dd: '%d μέρες',\n      M: 'ένας μήνας',\n      MM: '%d μήνες',\n      y: 'ένας χρόνος',\n      yy: '%d χρόνια'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}η/,\n    ordinal: '%dη',\n    week: {\n      dow: 1,\n      // Monday is the first day of the week.\n      doy: 4 // The week that contains Jan 4st is the first week of the year.\n\n    }\n  });\n  return el;\n});","function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n//! moment.js locale configuration\n;\n\n(function (global, factory) {\n  (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  var enSG = moment.defineLocale('en-SG', {\n    months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),\n    monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n    weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),\n    weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n    weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n    longDateFormat: {\n      LT: 'HH:mm',\n      LTS: 'HH:mm:ss',\n      L: 'DD/MM/YYYY',\n      LL: 'D MMMM YYYY',\n      LLL: 'D MMMM YYYY HH:mm',\n      LLLL: 'dddd, D MMMM YYYY HH:mm'\n    },\n    calendar: {\n      sameDay: '[Today at] LT',\n      nextDay: '[Tomorrow at] LT',\n      nextWeek: 'dddd [at] LT',\n      lastDay: '[Yesterday at] LT',\n      lastWeek: '[Last] dddd [at] LT',\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: 'in %s',\n      past: '%s ago',\n      s: 'a few seconds',\n      ss: '%d seconds',\n      m: 'a minute',\n      mm: '%d minutes',\n      h: 'an hour',\n      hh: '%d hours',\n      d: 'a day',\n      dd: '%d days',\n      M: 'a month',\n      MM: '%d months',\n      y: 'a year',\n      yy: '%d years'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n    ordinal: function ordinal(number) {\n      var b = number % 10,\n          output = ~~(number % 100 / 10) === 1 ? 'th' : b === 1 ? 'st' : b === 2 ? 'nd' : b === 3 ? 'rd' : 'th';\n      return number + output;\n    },\n    week: {\n      dow: 1,\n      // Monday is the first day of the week.\n      doy: 4 // The week that contains Jan 4th is the first week of the year.\n\n    }\n  });\n  return enSG;\n});","function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n//! moment.js locale configuration\n;\n\n(function (global, factory) {\n  (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  var enAu = moment.defineLocale('en-au', {\n    months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),\n    monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n    weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),\n    weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n    weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n    longDateFormat: {\n      LT: 'h:mm A',\n      LTS: 'h:mm:ss A',\n      L: 'DD/MM/YYYY',\n      LL: 'D MMMM YYYY',\n      LLL: 'D MMMM YYYY h:mm A',\n      LLLL: 'dddd, D MMMM YYYY h:mm A'\n    },\n    calendar: {\n      sameDay: '[Today at] LT',\n      nextDay: '[Tomorrow at] LT',\n      nextWeek: 'dddd [at] LT',\n      lastDay: '[Yesterday at] LT',\n      lastWeek: '[Last] dddd [at] LT',\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: 'in %s',\n      past: '%s ago',\n      s: 'a few seconds',\n      ss: '%d seconds',\n      m: 'a minute',\n      mm: '%d minutes',\n      h: 'an hour',\n      hh: '%d hours',\n      d: 'a day',\n      dd: '%d days',\n      M: 'a month',\n      MM: '%d months',\n      y: 'a year',\n      yy: '%d years'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n    ordinal: function ordinal(number) {\n      var b = number % 10,\n          output = ~~(number % 100 / 10) === 1 ? 'th' : b === 1 ? 'st' : b === 2 ? 'nd' : b === 3 ? 'rd' : 'th';\n      return number + output;\n    },\n    week: {\n      dow: 1,\n      // Monday is the first day of the week.\n      doy: 4 // The week that contains Jan 4th is the first week of the year.\n\n    }\n  });\n  return enAu;\n});","function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n//! moment.js locale configuration\n;\n\n(function (global, factory) {\n  (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  var enCa = moment.defineLocale('en-ca', {\n    months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),\n    monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n    weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),\n    weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n    weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n    longDateFormat: {\n      LT: 'h:mm A',\n      LTS: 'h:mm:ss A',\n      L: 'YYYY-MM-DD',\n      LL: 'MMMM D, YYYY',\n      LLL: 'MMMM D, YYYY h:mm A',\n      LLLL: 'dddd, MMMM D, YYYY h:mm A'\n    },\n    calendar: {\n      sameDay: '[Today at] LT',\n      nextDay: '[Tomorrow at] LT',\n      nextWeek: 'dddd [at] LT',\n      lastDay: '[Yesterday at] LT',\n      lastWeek: '[Last] dddd [at] LT',\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: 'in %s',\n      past: '%s ago',\n      s: 'a few seconds',\n      ss: '%d seconds',\n      m: 'a minute',\n      mm: '%d minutes',\n      h: 'an hour',\n      hh: '%d hours',\n      d: 'a day',\n      dd: '%d days',\n      M: 'a month',\n      MM: '%d months',\n      y: 'a year',\n      yy: '%d years'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n    ordinal: function ordinal(number) {\n      var b = number % 10,\n          output = ~~(number % 100 / 10) === 1 ? 'th' : b === 1 ? 'st' : b === 2 ? 'nd' : b === 3 ? 'rd' : 'th';\n      return number + output;\n    }\n  });\n  return enCa;\n});","function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n//! moment.js locale configuration\n;\n\n(function (global, factory) {\n  (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  var enGb = moment.defineLocale('en-gb', {\n    months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),\n    monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n    weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),\n    weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n    weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n    longDateFormat: {\n      LT: 'HH:mm',\n      LTS: 'HH:mm:ss',\n      L: 'DD/MM/YYYY',\n      LL: 'D MMMM YYYY',\n      LLL: 'D MMMM YYYY HH:mm',\n      LLLL: 'dddd, D MMMM YYYY HH:mm'\n    },\n    calendar: {\n      sameDay: '[Today at] LT',\n      nextDay: '[Tomorrow at] LT',\n      nextWeek: 'dddd [at] LT',\n      lastDay: '[Yesterday at] LT',\n      lastWeek: '[Last] dddd [at] LT',\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: 'in %s',\n      past: '%s ago',\n      s: 'a few seconds',\n      ss: '%d seconds',\n      m: 'a minute',\n      mm: '%d minutes',\n      h: 'an hour',\n      hh: '%d hours',\n      d: 'a day',\n      dd: '%d days',\n      M: 'a month',\n      MM: '%d months',\n      y: 'a year',\n      yy: '%d years'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n    ordinal: function ordinal(number) {\n      var b = number % 10,\n          output = ~~(number % 100 / 10) === 1 ? 'th' : b === 1 ? 'st' : b === 2 ? 'nd' : b === 3 ? 'rd' : 'th';\n      return number + output;\n    },\n    week: {\n      dow: 1,\n      // Monday is the first day of the week.\n      doy: 4 // The week that contains Jan 4th is the first week of the year.\n\n    }\n  });\n  return enGb;\n});","function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n//! moment.js locale configuration\n;\n\n(function (global, factory) {\n  (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  var enIe = moment.defineLocale('en-ie', {\n    months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),\n    monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n    weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),\n    weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n    weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n    longDateFormat: {\n      LT: 'HH:mm',\n      LTS: 'HH:mm:ss',\n      L: 'DD/MM/YYYY',\n      LL: 'D MMMM YYYY',\n      LLL: 'D MMMM YYYY HH:mm',\n      LLLL: 'dddd D MMMM YYYY HH:mm'\n    },\n    calendar: {\n      sameDay: '[Today at] LT',\n      nextDay: '[Tomorrow at] LT',\n      nextWeek: 'dddd [at] LT',\n      lastDay: '[Yesterday at] LT',\n      lastWeek: '[Last] dddd [at] LT',\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: 'in %s',\n      past: '%s ago',\n      s: 'a few seconds',\n      ss: '%d seconds',\n      m: 'a minute',\n      mm: '%d minutes',\n      h: 'an hour',\n      hh: '%d hours',\n      d: 'a day',\n      dd: '%d days',\n      M: 'a month',\n      MM: '%d months',\n      y: 'a year',\n      yy: '%d years'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n    ordinal: function ordinal(number) {\n      var b = number % 10,\n          output = ~~(number % 100 / 10) === 1 ? 'th' : b === 1 ? 'st' : b === 2 ? 'nd' : b === 3 ? 'rd' : 'th';\n      return number + output;\n    },\n    week: {\n      dow: 1,\n      // Monday is the first day of the week.\n      doy: 4 // The week that contains Jan 4th is the first week of the year.\n\n    }\n  });\n  return enIe;\n});","function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n//! moment.js locale configuration\n;\n\n(function (global, factory) {\n  (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  var enIl = moment.defineLocale('en-il', {\n    months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),\n    monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n    weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),\n    weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n    weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n    longDateFormat: {\n      LT: 'HH:mm',\n      LTS: 'HH:mm:ss',\n      L: 'DD/MM/YYYY',\n      LL: 'D MMMM YYYY',\n      LLL: 'D MMMM YYYY HH:mm',\n      LLLL: 'dddd, D MMMM YYYY HH:mm'\n    },\n    calendar: {\n      sameDay: '[Today at] LT',\n      nextDay: '[Tomorrow at] LT',\n      nextWeek: 'dddd [at] LT',\n      lastDay: '[Yesterday at] LT',\n      lastWeek: '[Last] dddd [at] LT',\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: 'in %s',\n      past: '%s ago',\n      s: 'a few seconds',\n      m: 'a minute',\n      mm: '%d minutes',\n      h: 'an hour',\n      hh: '%d hours',\n      d: 'a day',\n      dd: '%d days',\n      M: 'a month',\n      MM: '%d months',\n      y: 'a year',\n      yy: '%d years'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n    ordinal: function ordinal(number) {\n      var b = number % 10,\n          output = ~~(number % 100 / 10) === 1 ? 'th' : b === 1 ? 'st' : b === 2 ? 'nd' : b === 3 ? 'rd' : 'th';\n      return number + output;\n    }\n  });\n  return enIl;\n});","function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n//! moment.js locale configuration\n;\n\n(function (global, factory) {\n  (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  var enNz = moment.defineLocale('en-nz', {\n    months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'),\n    monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n    weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),\n    weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n    weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n    longDateFormat: {\n      LT: 'h:mm A',\n      LTS: 'h:mm:ss A',\n      L: 'DD/MM/YYYY',\n      LL: 'D MMMM YYYY',\n      LLL: 'D MMMM YYYY h:mm A',\n      LLLL: 'dddd, D MMMM YYYY h:mm A'\n    },\n    calendar: {\n      sameDay: '[Today at] LT',\n      nextDay: '[Tomorrow at] LT',\n      nextWeek: 'dddd [at] LT',\n      lastDay: '[Yesterday at] LT',\n      lastWeek: '[Last] dddd [at] LT',\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: 'in %s',\n      past: '%s ago',\n      s: 'a few seconds',\n      ss: '%d seconds',\n      m: 'a minute',\n      mm: '%d minutes',\n      h: 'an hour',\n      hh: '%d hours',\n      d: 'a day',\n      dd: '%d days',\n      M: 'a month',\n      MM: '%d months',\n      y: 'a year',\n      yy: '%d years'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n    ordinal: function ordinal(number) {\n      var b = number % 10,\n          output = ~~(number % 100 / 10) === 1 ? 'th' : b === 1 ? 'st' : b === 2 ? 'nd' : b === 3 ? 'rd' : 'th';\n      return number + output;\n    },\n    week: {\n      dow: 1,\n      // Monday is the first day of the week.\n      doy: 4 // The week that contains Jan 4th is the first week of the year.\n\n    }\n  });\n  return enNz;\n});","function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n//! moment.js locale configuration\n;\n\n(function (global, factory) {\n  (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  var eo = moment.defineLocale('eo', {\n    months: 'januaro_februaro_marto_aprilo_majo_junio_julio_aŭgusto_septembro_oktobro_novembro_decembro'.split('_'),\n    monthsShort: 'jan_feb_mar_apr_maj_jun_jul_aŭg_sep_okt_nov_dec'.split('_'),\n    weekdays: 'dimanĉo_lundo_mardo_merkredo_ĵaŭdo_vendredo_sabato'.split('_'),\n    weekdaysShort: 'dim_lun_mard_merk_ĵaŭ_ven_sab'.split('_'),\n    weekdaysMin: 'di_lu_ma_me_ĵa_ve_sa'.split('_'),\n    longDateFormat: {\n      LT: 'HH:mm',\n      LTS: 'HH:mm:ss',\n      L: 'YYYY-MM-DD',\n      LL: 'D[-a de] MMMM, YYYY',\n      LLL: 'D[-a de] MMMM, YYYY HH:mm',\n      LLLL: 'dddd, [la] D[-a de] MMMM, YYYY HH:mm'\n    },\n    meridiemParse: /[ap]\\.t\\.m/i,\n    isPM: function isPM(input) {\n      return input.charAt(0).toLowerCase() === 'p';\n    },\n    meridiem: function meridiem(hours, minutes, isLower) {\n      if (hours > 11) {\n        return isLower ? 'p.t.m.' : 'P.T.M.';\n      } else {\n        return isLower ? 'a.t.m.' : 'A.T.M.';\n      }\n    },\n    calendar: {\n      sameDay: '[Hodiaŭ je] LT',\n      nextDay: '[Morgaŭ je] LT',\n      nextWeek: 'dddd [je] LT',\n      lastDay: '[Hieraŭ je] LT',\n      lastWeek: '[pasinta] dddd [je] LT',\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: 'post %s',\n      past: 'antaŭ %s',\n      s: 'sekundoj',\n      ss: '%d sekundoj',\n      m: 'minuto',\n      mm: '%d minutoj',\n      h: 'horo',\n      hh: '%d horoj',\n      d: 'tago',\n      //ne 'diurno', ĉar estas uzita por proksimumo\n      dd: '%d tagoj',\n      M: 'monato',\n      MM: '%d monatoj',\n      y: 'jaro',\n      yy: '%d jaroj'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}a/,\n    ordinal: '%da',\n    week: {\n      dow: 1,\n      // Monday is the first day of the week.\n      doy: 7 // The week that contains Jan 7th is the first week of the year.\n\n    }\n  });\n  return eo;\n});","function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n//! moment.js locale configuration\n;\n\n(function (global, factory) {\n  (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  var monthsShortDot = 'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split('_'),\n      _monthsShort = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_');\n\n  var monthsParse = [/^ene/i, /^feb/i, /^mar/i, /^abr/i, /^may/i, /^jun/i, /^jul/i, /^ago/i, /^sep/i, /^oct/i, /^nov/i, /^dic/i];\n  var monthsRegex = /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i;\n  var es = moment.defineLocale('es', {\n    months: 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split('_'),\n    monthsShort: function monthsShort(m, format) {\n      if (!m) {\n        return monthsShortDot;\n      } else if (/-MMM-/.test(format)) {\n        return _monthsShort[m.month()];\n      } else {\n        return monthsShortDot[m.month()];\n      }\n    },\n    monthsRegex: monthsRegex,\n    monthsShortRegex: monthsRegex,\n    monthsStrictRegex: /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,\n    monthsShortStrictRegex: /^(ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i,\n    monthsParse: monthsParse,\n    longMonthsParse: monthsParse,\n    shortMonthsParse: monthsParse,\n    weekdays: 'domingo_lunes_martes_miércoles_jueves_viernes_sábado'.split('_'),\n    weekdaysShort: 'dom._lun._mar._mié._jue._vie._sáb.'.split('_'),\n    weekdaysMin: 'do_lu_ma_mi_ju_vi_sá'.split('_'),\n    weekdaysParseExact: true,\n    longDateFormat: {\n      LT: 'H:mm',\n      LTS: 'H:mm:ss',\n      L: 'DD/MM/YYYY',\n      LL: 'D [de] MMMM [de] YYYY',\n      LLL: 'D [de] MMMM [de] YYYY H:mm',\n      LLLL: 'dddd, D [de] MMMM [de] YYYY H:mm'\n    },\n    calendar: {\n      sameDay: function sameDay() {\n        return '[hoy a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n      },\n      nextDay: function nextDay() {\n        return '[mañana a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n      },\n      nextWeek: function nextWeek() {\n        return 'dddd [a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n      },\n      lastDay: function lastDay() {\n        return '[ayer a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n      },\n      lastWeek: function lastWeek() {\n        return '[el] dddd [pasado a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n      },\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: 'en %s',\n      past: 'hace %s',\n      s: 'unos segundos',\n      ss: '%d segundos',\n      m: 'un minuto',\n      mm: '%d minutos',\n      h: 'una hora',\n      hh: '%d horas',\n      d: 'un día',\n      dd: '%d días',\n      M: 'un mes',\n      MM: '%d meses',\n      y: 'un año',\n      yy: '%d años'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}º/,\n    ordinal: '%dº',\n    week: {\n      dow: 1,\n      // Monday is the first day of the week.\n      doy: 4 // The week that contains Jan 4th is the first week of the year.\n\n    }\n  });\n  return es;\n});","function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n//! moment.js locale configuration\n;\n\n(function (global, factory) {\n  (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  var monthsShortDot = 'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split('_'),\n      _monthsShort = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_');\n\n  var monthsParse = [/^ene/i, /^feb/i, /^mar/i, /^abr/i, /^may/i, /^jun/i, /^jul/i, /^ago/i, /^sep/i, /^oct/i, /^nov/i, /^dic/i];\n  var monthsRegex = /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i;\n  var esDo = moment.defineLocale('es-do', {\n    months: 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split('_'),\n    monthsShort: function monthsShort(m, format) {\n      if (!m) {\n        return monthsShortDot;\n      } else if (/-MMM-/.test(format)) {\n        return _monthsShort[m.month()];\n      } else {\n        return monthsShortDot[m.month()];\n      }\n    },\n    monthsRegex: monthsRegex,\n    monthsShortRegex: monthsRegex,\n    monthsStrictRegex: /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,\n    monthsShortStrictRegex: /^(ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i,\n    monthsParse: monthsParse,\n    longMonthsParse: monthsParse,\n    shortMonthsParse: monthsParse,\n    weekdays: 'domingo_lunes_martes_miércoles_jueves_viernes_sábado'.split('_'),\n    weekdaysShort: 'dom._lun._mar._mié._jue._vie._sáb.'.split('_'),\n    weekdaysMin: 'do_lu_ma_mi_ju_vi_sá'.split('_'),\n    weekdaysParseExact: true,\n    longDateFormat: {\n      LT: 'h:mm A',\n      LTS: 'h:mm:ss A',\n      L: 'DD/MM/YYYY',\n      LL: 'D [de] MMMM [de] YYYY',\n      LLL: 'D [de] MMMM [de] YYYY h:mm A',\n      LLLL: 'dddd, D [de] MMMM [de] YYYY h:mm A'\n    },\n    calendar: {\n      sameDay: function sameDay() {\n        return '[hoy a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n      },\n      nextDay: function nextDay() {\n        return '[mañana a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n      },\n      nextWeek: function nextWeek() {\n        return 'dddd [a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n      },\n      lastDay: function lastDay() {\n        return '[ayer a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n      },\n      lastWeek: function lastWeek() {\n        return '[el] dddd [pasado a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n      },\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: 'en %s',\n      past: 'hace %s',\n      s: 'unos segundos',\n      ss: '%d segundos',\n      m: 'un minuto',\n      mm: '%d minutos',\n      h: 'una hora',\n      hh: '%d horas',\n      d: 'un día',\n      dd: '%d días',\n      M: 'un mes',\n      MM: '%d meses',\n      y: 'un año',\n      yy: '%d años'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}º/,\n    ordinal: '%dº',\n    week: {\n      dow: 1,\n      // Monday is the first day of the week.\n      doy: 4 // The week that contains Jan 4th is the first week of the year.\n\n    }\n  });\n  return esDo;\n});","function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n//! moment.js locale configuration\n;\n\n(function (global, factory) {\n  (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  var monthsShortDot = 'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split('_'),\n      _monthsShort = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_');\n\n  var monthsParse = [/^ene/i, /^feb/i, /^mar/i, /^abr/i, /^may/i, /^jun/i, /^jul/i, /^ago/i, /^sep/i, /^oct/i, /^nov/i, /^dic/i];\n  var monthsRegex = /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i;\n  var esUs = moment.defineLocale('es-us', {\n    months: 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split('_'),\n    monthsShort: function monthsShort(m, format) {\n      if (!m) {\n        return monthsShortDot;\n      } else if (/-MMM-/.test(format)) {\n        return _monthsShort[m.month()];\n      } else {\n        return monthsShortDot[m.month()];\n      }\n    },\n    monthsRegex: monthsRegex,\n    monthsShortRegex: monthsRegex,\n    monthsStrictRegex: /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,\n    monthsShortStrictRegex: /^(ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i,\n    monthsParse: monthsParse,\n    longMonthsParse: monthsParse,\n    shortMonthsParse: monthsParse,\n    weekdays: 'domingo_lunes_martes_miércoles_jueves_viernes_sábado'.split('_'),\n    weekdaysShort: 'dom._lun._mar._mié._jue._vie._sáb.'.split('_'),\n    weekdaysMin: 'do_lu_ma_mi_ju_vi_sá'.split('_'),\n    weekdaysParseExact: true,\n    longDateFormat: {\n      LT: 'h:mm A',\n      LTS: 'h:mm:ss A',\n      L: 'MM/DD/YYYY',\n      LL: 'D [de] MMMM [de] YYYY',\n      LLL: 'D [de] MMMM [de] YYYY h:mm A',\n      LLLL: 'dddd, D [de] MMMM [de] YYYY h:mm A'\n    },\n    calendar: {\n      sameDay: function sameDay() {\n        return '[hoy a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n      },\n      nextDay: function nextDay() {\n        return '[mañana a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n      },\n      nextWeek: function nextWeek() {\n        return 'dddd [a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n      },\n      lastDay: function lastDay() {\n        return '[ayer a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n      },\n      lastWeek: function lastWeek() {\n        return '[el] dddd [pasado a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n      },\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: 'en %s',\n      past: 'hace %s',\n      s: 'unos segundos',\n      ss: '%d segundos',\n      m: 'un minuto',\n      mm: '%d minutos',\n      h: 'una hora',\n      hh: '%d horas',\n      d: 'un día',\n      dd: '%d días',\n      M: 'un mes',\n      MM: '%d meses',\n      y: 'un año',\n      yy: '%d años'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}º/,\n    ordinal: '%dº',\n    week: {\n      dow: 0,\n      // Sunday is the first day of the week.\n      doy: 6 // The week that contains Jan 6th is the first week of the year.\n\n    }\n  });\n  return esUs;\n});","function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n//! moment.js locale configuration\n;\n\n(function (global, factory) {\n  (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  function processRelativeTime(number, withoutSuffix, key, isFuture) {\n    var format = {\n      's': ['mõne sekundi', 'mõni sekund', 'paar sekundit'],\n      'ss': [number + 'sekundi', number + 'sekundit'],\n      'm': ['ühe minuti', 'üks minut'],\n      'mm': [number + ' minuti', number + ' minutit'],\n      'h': ['ühe tunni', 'tund aega', 'üks tund'],\n      'hh': [number + ' tunni', number + ' tundi'],\n      'd': ['ühe päeva', 'üks päev'],\n      'M': ['kuu aja', 'kuu aega', 'üks kuu'],\n      'MM': [number + ' kuu', number + ' kuud'],\n      'y': ['ühe aasta', 'aasta', 'üks aasta'],\n      'yy': [number + ' aasta', number + ' aastat']\n    };\n\n    if (withoutSuffix) {\n      return format[key][2] ? format[key][2] : format[key][1];\n    }\n\n    return isFuture ? format[key][0] : format[key][1];\n  }\n\n  var et = moment.defineLocale('et', {\n    months: 'jaanuar_veebruar_märts_aprill_mai_juuni_juuli_august_september_oktoober_november_detsember'.split('_'),\n    monthsShort: 'jaan_veebr_märts_apr_mai_juuni_juuli_aug_sept_okt_nov_dets'.split('_'),\n    weekdays: 'pühapäev_esmaspäev_teisipäev_kolmapäev_neljapäev_reede_laupäev'.split('_'),\n    weekdaysShort: 'P_E_T_K_N_R_L'.split('_'),\n    weekdaysMin: 'P_E_T_K_N_R_L'.split('_'),\n    longDateFormat: {\n      LT: 'H:mm',\n      LTS: 'H:mm:ss',\n      L: 'DD.MM.YYYY',\n      LL: 'D. MMMM YYYY',\n      LLL: 'D. MMMM YYYY H:mm',\n      LLLL: 'dddd, D. MMMM YYYY H:mm'\n    },\n    calendar: {\n      sameDay: '[Täna,] LT',\n      nextDay: '[Homme,] LT',\n      nextWeek: '[Järgmine] dddd LT',\n      lastDay: '[Eile,] LT',\n      lastWeek: '[Eelmine] dddd LT',\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: '%s pärast',\n      past: '%s tagasi',\n      s: processRelativeTime,\n      ss: processRelativeTime,\n      m: processRelativeTime,\n      mm: processRelativeTime,\n      h: processRelativeTime,\n      hh: processRelativeTime,\n      d: processRelativeTime,\n      dd: '%d päeva',\n      M: processRelativeTime,\n      MM: processRelativeTime,\n      y: processRelativeTime,\n      yy: processRelativeTime\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n    ordinal: '%d.',\n    week: {\n      dow: 1,\n      // Monday is the first day of the week.\n      doy: 4 // The week that contains Jan 4th is the first week of the year.\n\n    }\n  });\n  return et;\n});","function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n//! moment.js locale configuration\n;\n\n(function (global, factory) {\n  (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  var eu = moment.defineLocale('eu', {\n    months: 'urtarrila_otsaila_martxoa_apirila_maiatza_ekaina_uztaila_abuztua_iraila_urria_azaroa_abendua'.split('_'),\n    monthsShort: 'urt._ots._mar._api._mai._eka._uzt._abu._ira._urr._aza._abe.'.split('_'),\n    monthsParseExact: true,\n    weekdays: 'igandea_astelehena_asteartea_asteazkena_osteguna_ostirala_larunbata'.split('_'),\n    weekdaysShort: 'ig._al._ar._az._og._ol._lr.'.split('_'),\n    weekdaysMin: 'ig_al_ar_az_og_ol_lr'.split('_'),\n    weekdaysParseExact: true,\n    longDateFormat: {\n      LT: 'HH:mm',\n      LTS: 'HH:mm:ss',\n      L: 'YYYY-MM-DD',\n      LL: 'YYYY[ko] MMMM[ren] D[a]',\n      LLL: 'YYYY[ko] MMMM[ren] D[a] HH:mm',\n      LLLL: 'dddd, YYYY[ko] MMMM[ren] D[a] HH:mm',\n      l: 'YYYY-M-D',\n      ll: 'YYYY[ko] MMM D[a]',\n      lll: 'YYYY[ko] MMM D[a] HH:mm',\n      llll: 'ddd, YYYY[ko] MMM D[a] HH:mm'\n    },\n    calendar: {\n      sameDay: '[gaur] LT[etan]',\n      nextDay: '[bihar] LT[etan]',\n      nextWeek: 'dddd LT[etan]',\n      lastDay: '[atzo] LT[etan]',\n      lastWeek: '[aurreko] dddd LT[etan]',\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: '%s barru',\n      past: 'duela %s',\n      s: 'segundo batzuk',\n      ss: '%d segundo',\n      m: 'minutu bat',\n      mm: '%d minutu',\n      h: 'ordu bat',\n      hh: '%d ordu',\n      d: 'egun bat',\n      dd: '%d egun',\n      M: 'hilabete bat',\n      MM: '%d hilabete',\n      y: 'urte bat',\n      yy: '%d urte'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n    ordinal: '%d.',\n    week: {\n      dow: 1,\n      // Monday is the first day of the week.\n      doy: 7 // The week that contains Jan 7th is the first week of the year.\n\n    }\n  });\n  return eu;\n});","function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n//! moment.js locale configuration\n;\n\n(function (global, factory) {\n  (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  var symbolMap = {\n    '1': '۱',\n    '2': '۲',\n    '3': '۳',\n    '4': '۴',\n    '5': '۵',\n    '6': '۶',\n    '7': '۷',\n    '8': '۸',\n    '9': '۹',\n    '0': '۰'\n  },\n      numberMap = {\n    '۱': '1',\n    '۲': '2',\n    '۳': '3',\n    '۴': '4',\n    '۵': '5',\n    '۶': '6',\n    '۷': '7',\n    '۸': '8',\n    '۹': '9',\n    '۰': '0'\n  };\n  var fa = moment.defineLocale('fa', {\n    months: 'ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر'.split('_'),\n    monthsShort: 'ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر'.split('_'),\n    weekdays: \"\\u06CC\\u06A9\\u200C\\u0634\\u0646\\u0628\\u0647_\\u062F\\u0648\\u0634\\u0646\\u0628\\u0647_\\u0633\\u0647\\u200C\\u0634\\u0646\\u0628\\u0647_\\u0686\\u0647\\u0627\\u0631\\u0634\\u0646\\u0628\\u0647_\\u067E\\u0646\\u062C\\u200C\\u0634\\u0646\\u0628\\u0647_\\u062C\\u0645\\u0639\\u0647_\\u0634\\u0646\\u0628\\u0647\".split('_'),\n    weekdaysShort: \"\\u06CC\\u06A9\\u200C\\u0634\\u0646\\u0628\\u0647_\\u062F\\u0648\\u0634\\u0646\\u0628\\u0647_\\u0633\\u0647\\u200C\\u0634\\u0646\\u0628\\u0647_\\u0686\\u0647\\u0627\\u0631\\u0634\\u0646\\u0628\\u0647_\\u067E\\u0646\\u062C\\u200C\\u0634\\u0646\\u0628\\u0647_\\u062C\\u0645\\u0639\\u0647_\\u0634\\u0646\\u0628\\u0647\".split('_'),\n    weekdaysMin: 'ی_د_س_چ_پ_ج_ش'.split('_'),\n    weekdaysParseExact: true,\n    longDateFormat: {\n      LT: 'HH:mm',\n      LTS: 'HH:mm:ss',\n      L: 'DD/MM/YYYY',\n      LL: 'D MMMM YYYY',\n      LLL: 'D MMMM YYYY HH:mm',\n      LLLL: 'dddd, D MMMM YYYY HH:mm'\n    },\n    meridiemParse: /قبل از ظهر|بعد از ظهر/,\n    isPM: function isPM(input) {\n      return /بعد از ظهر/.test(input);\n    },\n    meridiem: function meridiem(hour, minute, isLower) {\n      if (hour < 12) {\n        return 'قبل از ظهر';\n      } else {\n        return 'بعد از ظهر';\n      }\n    },\n    calendar: {\n      sameDay: '[امروز ساعت] LT',\n      nextDay: '[فردا ساعت] LT',\n      nextWeek: 'dddd [ساعت] LT',\n      lastDay: '[دیروز ساعت] LT',\n      lastWeek: 'dddd [پیش] [ساعت] LT',\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: 'در %s',\n      past: '%s پیش',\n      s: 'چند ثانیه',\n      ss: 'ثانیه d%',\n      m: 'یک دقیقه',\n      mm: '%d دقیقه',\n      h: 'یک ساعت',\n      hh: '%d ساعت',\n      d: 'یک روز',\n      dd: '%d روز',\n      M: 'یک ماه',\n      MM: '%d ماه',\n      y: 'یک سال',\n      yy: '%d سال'\n    },\n    preparse: function preparse(string) {\n      return string.replace(/[۰-۹]/g, function (match) {\n        return numberMap[match];\n      }).replace(/،/g, ',');\n    },\n    postformat: function postformat(string) {\n      return string.replace(/\\d/g, function (match) {\n        return symbolMap[match];\n      }).replace(/,/g, '،');\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}م/,\n    ordinal: '%dم',\n    week: {\n      dow: 6,\n      // Saturday is the first day of the week.\n      doy: 12 // The week that contains Jan 12th is the first week of the year.\n\n    }\n  });\n  return fa;\n});","function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n//! moment.js locale configuration\n;\n\n(function (global, factory) {\n  (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  var numbersPast = 'nolla yksi kaksi kolme neljä viisi kuusi seitsemän kahdeksan yhdeksän'.split(' '),\n      numbersFuture = ['nolla', 'yhden', 'kahden', 'kolmen', 'neljän', 'viiden', 'kuuden', numbersPast[7], numbersPast[8], numbersPast[9]];\n\n  function translate(number, withoutSuffix, key, isFuture) {\n    var result = '';\n\n    switch (key) {\n      case 's':\n        return isFuture ? 'muutaman sekunnin' : 'muutama sekunti';\n\n      case 'ss':\n        return isFuture ? 'sekunnin' : 'sekuntia';\n\n      case 'm':\n        return isFuture ? 'minuutin' : 'minuutti';\n\n      case 'mm':\n        result = isFuture ? 'minuutin' : 'minuuttia';\n        break;\n\n      case 'h':\n        return isFuture ? 'tunnin' : 'tunti';\n\n      case 'hh':\n        result = isFuture ? 'tunnin' : 'tuntia';\n        break;\n\n      case 'd':\n        return isFuture ? 'päivän' : 'päivä';\n\n      case 'dd':\n        result = isFuture ? 'päivän' : 'päivää';\n        break;\n\n      case 'M':\n        return isFuture ? 'kuukauden' : 'kuukausi';\n\n      case 'MM':\n        result = isFuture ? 'kuukauden' : 'kuukautta';\n        break;\n\n      case 'y':\n        return isFuture ? 'vuoden' : 'vuosi';\n\n      case 'yy':\n        result = isFuture ? 'vuoden' : 'vuotta';\n        break;\n    }\n\n    result = verbalNumber(number, isFuture) + ' ' + result;\n    return result;\n  }\n\n  function verbalNumber(number, isFuture) {\n    return number < 10 ? isFuture ? numbersFuture[number] : numbersPast[number] : number;\n  }\n\n  var fi = moment.defineLocale('fi', {\n    months: 'tammikuu_helmikuu_maaliskuu_huhtikuu_toukokuu_kesäkuu_heinäkuu_elokuu_syyskuu_lokakuu_marraskuu_joulukuu'.split('_'),\n    monthsShort: 'tammi_helmi_maalis_huhti_touko_kesä_heinä_elo_syys_loka_marras_joulu'.split('_'),\n    weekdays: 'sunnuntai_maanantai_tiistai_keskiviikko_torstai_perjantai_lauantai'.split('_'),\n    weekdaysShort: 'su_ma_ti_ke_to_pe_la'.split('_'),\n    weekdaysMin: 'su_ma_ti_ke_to_pe_la'.split('_'),\n    longDateFormat: {\n      LT: 'HH.mm',\n      LTS: 'HH.mm.ss',\n      L: 'DD.MM.YYYY',\n      LL: 'Do MMMM[ta] YYYY',\n      LLL: 'Do MMMM[ta] YYYY, [klo] HH.mm',\n      LLLL: 'dddd, Do MMMM[ta] YYYY, [klo] HH.mm',\n      l: 'D.M.YYYY',\n      ll: 'Do MMM YYYY',\n      lll: 'Do MMM YYYY, [klo] HH.mm',\n      llll: 'ddd, Do MMM YYYY, [klo] HH.mm'\n    },\n    calendar: {\n      sameDay: '[tänään] [klo] LT',\n      nextDay: '[huomenna] [klo] LT',\n      nextWeek: 'dddd [klo] LT',\n      lastDay: '[eilen] [klo] LT',\n      lastWeek: '[viime] dddd[na] [klo] LT',\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: '%s päästä',\n      past: '%s sitten',\n      s: translate,\n      ss: translate,\n      m: translate,\n      mm: translate,\n      h: translate,\n      hh: translate,\n      d: translate,\n      dd: translate,\n      M: translate,\n      MM: translate,\n      y: translate,\n      yy: translate\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n    ordinal: '%d.',\n    week: {\n      dow: 1,\n      // Monday is the first day of the week.\n      doy: 4 // The week that contains Jan 4th is the first week of the year.\n\n    }\n  });\n  return fi;\n});","function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n//! moment.js locale configuration\n;\n\n(function (global, factory) {\n  (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  var fo = moment.defineLocale('fo', {\n    months: 'januar_februar_mars_apríl_mai_juni_juli_august_september_oktober_november_desember'.split('_'),\n    monthsShort: 'jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des'.split('_'),\n    weekdays: 'sunnudagur_mánadagur_týsdagur_mikudagur_hósdagur_fríggjadagur_leygardagur'.split('_'),\n    weekdaysShort: 'sun_mán_týs_mik_hós_frí_ley'.split('_'),\n    weekdaysMin: 'su_má_tý_mi_hó_fr_le'.split('_'),\n    longDateFormat: {\n      LT: 'HH:mm',\n      LTS: 'HH:mm:ss',\n      L: 'DD/MM/YYYY',\n      LL: 'D MMMM YYYY',\n      LLL: 'D MMMM YYYY HH:mm',\n      LLLL: 'dddd D. MMMM, YYYY HH:mm'\n    },\n    calendar: {\n      sameDay: '[Í dag kl.] LT',\n      nextDay: '[Í morgin kl.] LT',\n      nextWeek: 'dddd [kl.] LT',\n      lastDay: '[Í gjár kl.] LT',\n      lastWeek: '[síðstu] dddd [kl] LT',\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: 'um %s',\n      past: '%s síðani',\n      s: 'fá sekund',\n      ss: '%d sekundir',\n      m: 'ein minuttur',\n      mm: '%d minuttir',\n      h: 'ein tími',\n      hh: '%d tímar',\n      d: 'ein dagur',\n      dd: '%d dagar',\n      M: 'ein mánaður',\n      MM: '%d mánaðir',\n      y: 'eitt ár',\n      yy: '%d ár'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n    ordinal: '%d.',\n    week: {\n      dow: 1,\n      // Monday is the first day of the week.\n      doy: 4 // The week that contains Jan 4th is the first week of the year.\n\n    }\n  });\n  return fo;\n});","function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n//! moment.js locale configuration\n;\n\n(function (global, factory) {\n  (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  var fr = moment.defineLocale('fr', {\n    months: 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split('_'),\n    monthsShort: 'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split('_'),\n    monthsParseExact: true,\n    weekdays: 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'),\n    weekdaysShort: 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'),\n    weekdaysMin: 'di_lu_ma_me_je_ve_sa'.split('_'),\n    weekdaysParseExact: true,\n    longDateFormat: {\n      LT: 'HH:mm',\n      LTS: 'HH:mm:ss',\n      L: 'DD/MM/YYYY',\n      LL: 'D MMMM YYYY',\n      LLL: 'D MMMM YYYY HH:mm',\n      LLLL: 'dddd D MMMM YYYY HH:mm'\n    },\n    calendar: {\n      sameDay: '[Aujourd’hui à] LT',\n      nextDay: '[Demain à] LT',\n      nextWeek: 'dddd [à] LT',\n      lastDay: '[Hier à] LT',\n      lastWeek: 'dddd [dernier à] LT',\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: 'dans %s',\n      past: 'il y a %s',\n      s: 'quelques secondes',\n      ss: '%d secondes',\n      m: 'une minute',\n      mm: '%d minutes',\n      h: 'une heure',\n      hh: '%d heures',\n      d: 'un jour',\n      dd: '%d jours',\n      M: 'un mois',\n      MM: '%d mois',\n      y: 'un an',\n      yy: '%d ans'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}(er|)/,\n    ordinal: function ordinal(number, period) {\n      switch (period) {\n        // TODO: Return 'e' when day of month > 1. Move this case inside\n        // block for masculine words below.\n        // See https://github.com/moment/moment/issues/3375\n        case 'D':\n          return number + (number === 1 ? 'er' : '');\n        // Words with masculine grammatical gender: mois, trimestre, jour\n\n        default:\n        case 'M':\n        case 'Q':\n        case 'DDD':\n        case 'd':\n          return number + (number === 1 ? 'er' : 'e');\n        // Words with feminine grammatical gender: semaine\n\n        case 'w':\n        case 'W':\n          return number + (number === 1 ? 're' : 'e');\n      }\n    },\n    week: {\n      dow: 1,\n      // Monday is the first day of the week.\n      doy: 4 // The week that contains Jan 4th is the first week of the year.\n\n    }\n  });\n  return fr;\n});","function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n//! moment.js locale configuration\n;\n\n(function (global, factory) {\n  (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  var frCa = moment.defineLocale('fr-ca', {\n    months: 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split('_'),\n    monthsShort: 'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split('_'),\n    monthsParseExact: true,\n    weekdays: 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'),\n    weekdaysShort: 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'),\n    weekdaysMin: 'di_lu_ma_me_je_ve_sa'.split('_'),\n    weekdaysParseExact: true,\n    longDateFormat: {\n      LT: 'HH:mm',\n      LTS: 'HH:mm:ss',\n      L: 'YYYY-MM-DD',\n      LL: 'D MMMM YYYY',\n      LLL: 'D MMMM YYYY HH:mm',\n      LLLL: 'dddd D MMMM YYYY HH:mm'\n    },\n    calendar: {\n      sameDay: '[Aujourd’hui à] LT',\n      nextDay: '[Demain à] LT',\n      nextWeek: 'dddd [à] LT',\n      lastDay: '[Hier à] LT',\n      lastWeek: 'dddd [dernier à] LT',\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: 'dans %s',\n      past: 'il y a %s',\n      s: 'quelques secondes',\n      ss: '%d secondes',\n      m: 'une minute',\n      mm: '%d minutes',\n      h: 'une heure',\n      hh: '%d heures',\n      d: 'un jour',\n      dd: '%d jours',\n      M: 'un mois',\n      MM: '%d mois',\n      y: 'un an',\n      yy: '%d ans'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}(er|e)/,\n    ordinal: function ordinal(number, period) {\n      switch (period) {\n        // Words with masculine grammatical gender: mois, trimestre, jour\n        default:\n        case 'M':\n        case 'Q':\n        case 'D':\n        case 'DDD':\n        case 'd':\n          return number + (number === 1 ? 'er' : 'e');\n        // Words with feminine grammatical gender: semaine\n\n        case 'w':\n        case 'W':\n          return number + (number === 1 ? 're' : 'e');\n      }\n    }\n  });\n  return frCa;\n});","function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n//! moment.js locale configuration\n;\n\n(function (global, factory) {\n  (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  var frCh = moment.defineLocale('fr-ch', {\n    months: 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split('_'),\n    monthsShort: 'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split('_'),\n    monthsParseExact: true,\n    weekdays: 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'),\n    weekdaysShort: 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'),\n    weekdaysMin: 'di_lu_ma_me_je_ve_sa'.split('_'),\n    weekdaysParseExact: true,\n    longDateFormat: {\n      LT: 'HH:mm',\n      LTS: 'HH:mm:ss',\n      L: 'DD.MM.YYYY',\n      LL: 'D MMMM YYYY',\n      LLL: 'D MMMM YYYY HH:mm',\n      LLLL: 'dddd D MMMM YYYY HH:mm'\n    },\n    calendar: {\n      sameDay: '[Aujourd’hui à] LT',\n      nextDay: '[Demain à] LT',\n      nextWeek: 'dddd [à] LT',\n      lastDay: '[Hier à] LT',\n      lastWeek: 'dddd [dernier à] LT',\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: 'dans %s',\n      past: 'il y a %s',\n      s: 'quelques secondes',\n      ss: '%d secondes',\n      m: 'une minute',\n      mm: '%d minutes',\n      h: 'une heure',\n      hh: '%d heures',\n      d: 'un jour',\n      dd: '%d jours',\n      M: 'un mois',\n      MM: '%d mois',\n      y: 'un an',\n      yy: '%d ans'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}(er|e)/,\n    ordinal: function ordinal(number, period) {\n      switch (period) {\n        // Words with masculine grammatical gender: mois, trimestre, jour\n        default:\n        case 'M':\n        case 'Q':\n        case 'D':\n        case 'DDD':\n        case 'd':\n          return number + (number === 1 ? 'er' : 'e');\n        // Words with feminine grammatical gender: semaine\n\n        case 'w':\n        case 'W':\n          return number + (number === 1 ? 're' : 'e');\n      }\n    },\n    week: {\n      dow: 1,\n      // Monday is the first day of the week.\n      doy: 4 // The week that contains Jan 4th is the first week of the year.\n\n    }\n  });\n  return frCh;\n});","function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n//! moment.js locale configuration\n;\n\n(function (global, factory) {\n  (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  var monthsShortWithDots = 'jan._feb._mrt._apr._mai_jun._jul._aug._sep._okt._nov._des.'.split('_'),\n      monthsShortWithoutDots = 'jan_feb_mrt_apr_mai_jun_jul_aug_sep_okt_nov_des'.split('_');\n  var fy = moment.defineLocale('fy', {\n    months: 'jannewaris_febrewaris_maart_april_maaie_juny_july_augustus_septimber_oktober_novimber_desimber'.split('_'),\n    monthsShort: function monthsShort(m, format) {\n      if (!m) {\n        return monthsShortWithDots;\n      } else if (/-MMM-/.test(format)) {\n        return monthsShortWithoutDots[m.month()];\n      } else {\n        return monthsShortWithDots[m.month()];\n      }\n    },\n    monthsParseExact: true,\n    weekdays: 'snein_moandei_tiisdei_woansdei_tongersdei_freed_sneon'.split('_'),\n    weekdaysShort: 'si._mo._ti._wo._to._fr._so.'.split('_'),\n    weekdaysMin: 'Si_Mo_Ti_Wo_To_Fr_So'.split('_'),\n    weekdaysParseExact: true,\n    longDateFormat: {\n      LT: 'HH:mm',\n      LTS: 'HH:mm:ss',\n      L: 'DD-MM-YYYY',\n      LL: 'D MMMM YYYY',\n      LLL: 'D MMMM YYYY HH:mm',\n      LLLL: 'dddd D MMMM YYYY HH:mm'\n    },\n    calendar: {\n      sameDay: '[hjoed om] LT',\n      nextDay: '[moarn om] LT',\n      nextWeek: 'dddd [om] LT',\n      lastDay: '[juster om] LT',\n      lastWeek: '[ôfrûne] dddd [om] LT',\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: 'oer %s',\n      past: '%s lyn',\n      s: 'in pear sekonden',\n      ss: '%d sekonden',\n      m: 'ien minút',\n      mm: '%d minuten',\n      h: 'ien oere',\n      hh: '%d oeren',\n      d: 'ien dei',\n      dd: '%d dagen',\n      M: 'ien moanne',\n      MM: '%d moannen',\n      y: 'ien jier',\n      yy: '%d jierren'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}(ste|de)/,\n    ordinal: function ordinal(number) {\n      return number + (number === 1 || number === 8 || number >= 20 ? 'ste' : 'de');\n    },\n    week: {\n      dow: 1,\n      // Monday is the first day of the week.\n      doy: 4 // The week that contains Jan 4th is the first week of the year.\n\n    }\n  });\n  return fy;\n});","function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n//! moment.js locale configuration\n;\n\n(function (global, factory) {\n  (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  var months = ['Eanáir', 'Feabhra', 'Márta', 'Aibreán', 'Bealtaine', 'Méitheamh', 'Iúil', 'Lúnasa', 'Meán Fómhair', 'Deaireadh Fómhair', 'Samhain', 'Nollaig'];\n  var monthsShort = ['Eaná', 'Feab', 'Márt', 'Aibr', 'Beal', 'Méit', 'Iúil', 'Lúna', 'Meán', 'Deai', 'Samh', 'Noll'];\n  var weekdays = ['Dé Domhnaigh', 'Dé Luain', 'Dé Máirt', 'Dé Céadaoin', 'Déardaoin', 'Dé hAoine', 'Dé Satharn'];\n  var weekdaysShort = ['Dom', 'Lua', 'Mái', 'Céa', 'Déa', 'hAo', 'Sat'];\n  var weekdaysMin = ['Do', 'Lu', 'Má', 'Ce', 'Dé', 'hA', 'Sa'];\n  var ga = moment.defineLocale('ga', {\n    months: months,\n    monthsShort: monthsShort,\n    monthsParseExact: true,\n    weekdays: weekdays,\n    weekdaysShort: weekdaysShort,\n    weekdaysMin: weekdaysMin,\n    longDateFormat: {\n      LT: 'HH:mm',\n      LTS: 'HH:mm:ss',\n      L: 'DD/MM/YYYY',\n      LL: 'D MMMM YYYY',\n      LLL: 'D MMMM YYYY HH:mm',\n      LLLL: 'dddd, D MMMM YYYY HH:mm'\n    },\n    calendar: {\n      sameDay: '[Inniu ag] LT',\n      nextDay: '[Amárach ag] LT',\n      nextWeek: 'dddd [ag] LT',\n      lastDay: '[Inné aig] LT',\n      lastWeek: 'dddd [seo caite] [ag] LT',\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: 'i %s',\n      past: '%s ó shin',\n      s: 'cúpla soicind',\n      ss: '%d soicind',\n      m: 'nóiméad',\n      mm: '%d nóiméad',\n      h: 'uair an chloig',\n      hh: '%d uair an chloig',\n      d: 'lá',\n      dd: '%d lá',\n      M: 'mí',\n      MM: '%d mí',\n      y: 'bliain',\n      yy: '%d bliain'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}(d|na|mh)/,\n    ordinal: function ordinal(number) {\n      var output = number === 1 ? 'd' : number % 10 === 2 ? 'na' : 'mh';\n      return number + output;\n    },\n    week: {\n      dow: 1,\n      // Monday is the first day of the week.\n      doy: 4 // The week that contains Jan 4th is the first week of the year.\n\n    }\n  });\n  return ga;\n});","function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n//! moment.js locale configuration\n;\n\n(function (global, factory) {\n  (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  var months = ['Am Faoilleach', 'An Gearran', 'Am Màrt', 'An Giblean', 'An Cèitean', 'An t-Ògmhios', 'An t-Iuchar', 'An Lùnastal', 'An t-Sultain', 'An Dàmhair', 'An t-Samhain', 'An Dùbhlachd'];\n  var monthsShort = ['Faoi', 'Gear', 'Màrt', 'Gibl', 'Cèit', 'Ògmh', 'Iuch', 'Lùn', 'Sult', 'Dàmh', 'Samh', 'Dùbh'];\n  var weekdays = ['Didòmhnaich', 'Diluain', 'Dimàirt', 'Diciadain', 'Diardaoin', 'Dihaoine', 'Disathairne'];\n  var weekdaysShort = ['Did', 'Dil', 'Dim', 'Dic', 'Dia', 'Dih', 'Dis'];\n  var weekdaysMin = ['Dò', 'Lu', 'Mà', 'Ci', 'Ar', 'Ha', 'Sa'];\n  var gd = moment.defineLocale('gd', {\n    months: months,\n    monthsShort: monthsShort,\n    monthsParseExact: true,\n    weekdays: weekdays,\n    weekdaysShort: weekdaysShort,\n    weekdaysMin: weekdaysMin,\n    longDateFormat: {\n      LT: 'HH:mm',\n      LTS: 'HH:mm:ss',\n      L: 'DD/MM/YYYY',\n      LL: 'D MMMM YYYY',\n      LLL: 'D MMMM YYYY HH:mm',\n      LLLL: 'dddd, D MMMM YYYY HH:mm'\n    },\n    calendar: {\n      sameDay: '[An-diugh aig] LT',\n      nextDay: '[A-màireach aig] LT',\n      nextWeek: 'dddd [aig] LT',\n      lastDay: '[An-dè aig] LT',\n      lastWeek: 'dddd [seo chaidh] [aig] LT',\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: 'ann an %s',\n      past: 'bho chionn %s',\n      s: 'beagan diogan',\n      ss: '%d diogan',\n      m: 'mionaid',\n      mm: '%d mionaidean',\n      h: 'uair',\n      hh: '%d uairean',\n      d: 'latha',\n      dd: '%d latha',\n      M: 'mìos',\n      MM: '%d mìosan',\n      y: 'bliadhna',\n      yy: '%d bliadhna'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}(d|na|mh)/,\n    ordinal: function ordinal(number) {\n      var output = number === 1 ? 'd' : number % 10 === 2 ? 'na' : 'mh';\n      return number + output;\n    },\n    week: {\n      dow: 1,\n      // Monday is the first day of the week.\n      doy: 4 // The week that contains Jan 4th is the first week of the year.\n\n    }\n  });\n  return gd;\n});","function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n//! moment.js locale configuration\n;\n\n(function (global, factory) {\n  (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  var gl = moment.defineLocale('gl', {\n    months: 'xaneiro_febreiro_marzo_abril_maio_xuño_xullo_agosto_setembro_outubro_novembro_decembro'.split('_'),\n    monthsShort: 'xan._feb._mar._abr._mai._xuñ._xul._ago._set._out._nov._dec.'.split('_'),\n    monthsParseExact: true,\n    weekdays: 'domingo_luns_martes_mércores_xoves_venres_sábado'.split('_'),\n    weekdaysShort: 'dom._lun._mar._mér._xov._ven._sáb.'.split('_'),\n    weekdaysMin: 'do_lu_ma_mé_xo_ve_sá'.split('_'),\n    weekdaysParseExact: true,\n    longDateFormat: {\n      LT: 'H:mm',\n      LTS: 'H:mm:ss',\n      L: 'DD/MM/YYYY',\n      LL: 'D [de] MMMM [de] YYYY',\n      LLL: 'D [de] MMMM [de] YYYY H:mm',\n      LLLL: 'dddd, D [de] MMMM [de] YYYY H:mm'\n    },\n    calendar: {\n      sameDay: function sameDay() {\n        return '[hoxe ' + (this.hours() !== 1 ? 'ás' : 'á') + '] LT';\n      },\n      nextDay: function nextDay() {\n        return '[mañá ' + (this.hours() !== 1 ? 'ás' : 'á') + '] LT';\n      },\n      nextWeek: function nextWeek() {\n        return 'dddd [' + (this.hours() !== 1 ? 'ás' : 'a') + '] LT';\n      },\n      lastDay: function lastDay() {\n        return '[onte ' + (this.hours() !== 1 ? 'á' : 'a') + '] LT';\n      },\n      lastWeek: function lastWeek() {\n        return '[o] dddd [pasado ' + (this.hours() !== 1 ? 'ás' : 'a') + '] LT';\n      },\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: function future(str) {\n        if (str.indexOf('un') === 0) {\n          return 'n' + str;\n        }\n\n        return 'en ' + str;\n      },\n      past: 'hai %s',\n      s: 'uns segundos',\n      ss: '%d segundos',\n      m: 'un minuto',\n      mm: '%d minutos',\n      h: 'unha hora',\n      hh: '%d horas',\n      d: 'un día',\n      dd: '%d días',\n      M: 'un mes',\n      MM: '%d meses',\n      y: 'un ano',\n      yy: '%d anos'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}º/,\n    ordinal: '%dº',\n    week: {\n      dow: 1,\n      // Monday is the first day of the week.\n      doy: 4 // The week that contains Jan 4th is the first week of the year.\n\n    }\n  });\n  return gl;\n});","function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n//! moment.js locale configuration\n;\n\n(function (global, factory) {\n  (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  function processRelativeTime(number, withoutSuffix, key, isFuture) {\n    var format = {\n      's': ['thodde secondanim', 'thodde second'],\n      'ss': [number + ' secondanim', number + ' second'],\n      'm': ['eka mintan', 'ek minute'],\n      'mm': [number + ' mintanim', number + ' mintam'],\n      'h': ['eka voran', 'ek vor'],\n      'hh': [number + ' voranim', number + ' voram'],\n      'd': ['eka disan', 'ek dis'],\n      'dd': [number + ' disanim', number + ' dis'],\n      'M': ['eka mhoinean', 'ek mhoino'],\n      'MM': [number + ' mhoineanim', number + ' mhoine'],\n      'y': ['eka vorsan', 'ek voros'],\n      'yy': [number + ' vorsanim', number + ' vorsam']\n    };\n    return withoutSuffix ? format[key][0] : format[key][1];\n  }\n\n  var gomLatn = moment.defineLocale('gom-latn', {\n    months: 'Janer_Febrer_Mars_Abril_Mai_Jun_Julai_Agost_Setembr_Otubr_Novembr_Dezembr'.split('_'),\n    monthsShort: 'Jan._Feb._Mars_Abr._Mai_Jun_Jul._Ago._Set._Otu._Nov._Dez.'.split('_'),\n    monthsParseExact: true,\n    weekdays: 'Aitar_Somar_Mongllar_Budvar_Brestar_Sukrar_Son\\'var'.split('_'),\n    weekdaysShort: 'Ait._Som._Mon._Bud._Bre._Suk._Son.'.split('_'),\n    weekdaysMin: 'Ai_Sm_Mo_Bu_Br_Su_Sn'.split('_'),\n    weekdaysParseExact: true,\n    longDateFormat: {\n      LT: 'A h:mm [vazta]',\n      LTS: 'A h:mm:ss [vazta]',\n      L: 'DD-MM-YYYY',\n      LL: 'D MMMM YYYY',\n      LLL: 'D MMMM YYYY A h:mm [vazta]',\n      LLLL: 'dddd, MMMM[achea] Do, YYYY, A h:mm [vazta]',\n      llll: 'ddd, D MMM YYYY, A h:mm [vazta]'\n    },\n    calendar: {\n      sameDay: '[Aiz] LT',\n      nextDay: '[Faleam] LT',\n      nextWeek: '[Ieta to] dddd[,] LT',\n      lastDay: '[Kal] LT',\n      lastWeek: '[Fatlo] dddd[,] LT',\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: '%s',\n      past: '%s adim',\n      s: processRelativeTime,\n      ss: processRelativeTime,\n      m: processRelativeTime,\n      mm: processRelativeTime,\n      h: processRelativeTime,\n      hh: processRelativeTime,\n      d: processRelativeTime,\n      dd: processRelativeTime,\n      M: processRelativeTime,\n      MM: processRelativeTime,\n      y: processRelativeTime,\n      yy: processRelativeTime\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}(er)/,\n    ordinal: function ordinal(number, period) {\n      switch (period) {\n        // the ordinal 'er' only applies to day of the month\n        case 'D':\n          return number + 'er';\n\n        default:\n        case 'M':\n        case 'Q':\n        case 'DDD':\n        case 'd':\n        case 'w':\n        case 'W':\n          return number;\n      }\n    },\n    week: {\n      dow: 1,\n      // Monday is the first day of the week.\n      doy: 4 // The week that contains Jan 4th is the first week of the year.\n\n    },\n    meridiemParse: /rati|sokalli|donparam|sanje/,\n    meridiemHour: function meridiemHour(hour, meridiem) {\n      if (hour === 12) {\n        hour = 0;\n      }\n\n      if (meridiem === 'rati') {\n        return hour < 4 ? hour : hour + 12;\n      } else if (meridiem === 'sokalli') {\n        return hour;\n      } else if (meridiem === 'donparam') {\n        return hour > 12 ? hour : hour + 12;\n      } else if (meridiem === 'sanje') {\n        return hour + 12;\n      }\n    },\n    meridiem: function meridiem(hour, minute, isLower) {\n      if (hour < 4) {\n        return 'rati';\n      } else if (hour < 12) {\n        return 'sokalli';\n      } else if (hour < 16) {\n        return 'donparam';\n      } else if (hour < 20) {\n        return 'sanje';\n      } else {\n        return 'rati';\n      }\n    }\n  });\n  return gomLatn;\n});","function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n//! moment.js locale configuration\n;\n\n(function (global, factory) {\n  (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  var symbolMap = {\n    '1': '૧',\n    '2': '૨',\n    '3': '૩',\n    '4': '૪',\n    '5': '૫',\n    '6': '૬',\n    '7': '૭',\n    '8': '૮',\n    '9': '૯',\n    '0': '૦'\n  },\n      numberMap = {\n    '૧': '1',\n    '૨': '2',\n    '૩': '3',\n    '૪': '4',\n    '૫': '5',\n    '૬': '6',\n    '૭': '7',\n    '૮': '8',\n    '૯': '9',\n    '૦': '0'\n  };\n  var gu = moment.defineLocale('gu', {\n    months: 'જાન્યુઆરી_ફેબ્રુઆરી_માર્ચ_એપ્રિલ_મે_જૂન_જુલાઈ_ઑગસ્ટ_સપ્ટેમ્બર_ઑક્ટ્બર_નવેમ્બર_ડિસેમ્બર'.split('_'),\n    monthsShort: 'જાન્યુ._ફેબ્રુ._માર્ચ_એપ્રિ._મે_જૂન_જુલા._ઑગ._સપ્ટે._ઑક્ટ્._નવે._ડિસે.'.split('_'),\n    monthsParseExact: true,\n    weekdays: 'રવિવાર_સોમવાર_મંગળવાર_બુધ્વાર_ગુરુવાર_શુક્રવાર_શનિવાર'.split('_'),\n    weekdaysShort: 'રવિ_સોમ_મંગળ_બુધ્_ગુરુ_શુક્ર_શનિ'.split('_'),\n    weekdaysMin: 'ર_સો_મં_બુ_ગુ_શુ_શ'.split('_'),\n    longDateFormat: {\n      LT: 'A h:mm વાગ્યે',\n      LTS: 'A h:mm:ss વાગ્યે',\n      L: 'DD/MM/YYYY',\n      LL: 'D MMMM YYYY',\n      LLL: 'D MMMM YYYY, A h:mm વાગ્યે',\n      LLLL: 'dddd, D MMMM YYYY, A h:mm વાગ્યે'\n    },\n    calendar: {\n      sameDay: '[આજ] LT',\n      nextDay: '[કાલે] LT',\n      nextWeek: 'dddd, LT',\n      lastDay: '[ગઇકાલે] LT',\n      lastWeek: '[પાછલા] dddd, LT',\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: '%s મા',\n      past: '%s પેહલા',\n      s: 'અમુક પળો',\n      ss: '%d સેકંડ',\n      m: 'એક મિનિટ',\n      mm: '%d મિનિટ',\n      h: 'એક કલાક',\n      hh: '%d કલાક',\n      d: 'એક દિવસ',\n      dd: '%d દિવસ',\n      M: 'એક મહિનો',\n      MM: '%d મહિનો',\n      y: 'એક વર્ષ',\n      yy: '%d વર્ષ'\n    },\n    preparse: function preparse(string) {\n      return string.replace(/[૧૨૩૪૫૬૭૮૯૦]/g, function (match) {\n        return numberMap[match];\n      });\n    },\n    postformat: function postformat(string) {\n      return string.replace(/\\d/g, function (match) {\n        return symbolMap[match];\n      });\n    },\n    // Gujarati notation for meridiems are quite fuzzy in practice. While there exists\n    // a rigid notion of a 'Pahar' it is not used as rigidly in modern Gujarati.\n    meridiemParse: /રાત|બપોર|સવાર|સાંજ/,\n    meridiemHour: function meridiemHour(hour, meridiem) {\n      if (hour === 12) {\n        hour = 0;\n      }\n\n      if (meridiem === 'રાત') {\n        return hour < 4 ? hour : hour + 12;\n      } else if (meridiem === 'સવાર') {\n        return hour;\n      } else if (meridiem === 'બપોર') {\n        return hour >= 10 ? hour : hour + 12;\n      } else if (meridiem === 'સાંજ') {\n        return hour + 12;\n      }\n    },\n    meridiem: function meridiem(hour, minute, isLower) {\n      if (hour < 4) {\n        return 'રાત';\n      } else if (hour < 10) {\n        return 'સવાર';\n      } else if (hour < 17) {\n        return 'બપોર';\n      } else if (hour < 20) {\n        return 'સાંજ';\n      } else {\n        return 'રાત';\n      }\n    },\n    week: {\n      dow: 0,\n      // Sunday is the first day of the week.\n      doy: 6 // The week that contains Jan 6th is the first week of the year.\n\n    }\n  });\n  return gu;\n});","function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n//! moment.js locale configuration\n;\n\n(function (global, factory) {\n  (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  var he = moment.defineLocale('he', {\n    months: 'ינואר_פברואר_מרץ_אפריל_מאי_יוני_יולי_אוגוסט_ספטמבר_אוקטובר_נובמבר_דצמבר'.split('_'),\n    monthsShort: 'ינו׳_פבר׳_מרץ_אפר׳_מאי_יוני_יולי_אוג׳_ספט׳_אוק׳_נוב׳_דצמ׳'.split('_'),\n    weekdays: 'ראשון_שני_שלישי_רביעי_חמישי_שישי_שבת'.split('_'),\n    weekdaysShort: 'א׳_ב׳_ג׳_ד׳_ה׳_ו׳_ש׳'.split('_'),\n    weekdaysMin: 'א_ב_ג_ד_ה_ו_ש'.split('_'),\n    longDateFormat: {\n      LT: 'HH:mm',\n      LTS: 'HH:mm:ss',\n      L: 'DD/MM/YYYY',\n      LL: 'D [ב]MMMM YYYY',\n      LLL: 'D [ב]MMMM YYYY HH:mm',\n      LLLL: 'dddd, D [ב]MMMM YYYY HH:mm',\n      l: 'D/M/YYYY',\n      ll: 'D MMM YYYY',\n      lll: 'D MMM YYYY HH:mm',\n      llll: 'ddd, D MMM YYYY HH:mm'\n    },\n    calendar: {\n      sameDay: '[היום ב־]LT',\n      nextDay: '[מחר ב־]LT',\n      nextWeek: 'dddd [בשעה] LT',\n      lastDay: '[אתמול ב־]LT',\n      lastWeek: '[ביום] dddd [האחרון בשעה] LT',\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: 'בעוד %s',\n      past: 'לפני %s',\n      s: 'מספר שניות',\n      ss: '%d שניות',\n      m: 'דקה',\n      mm: '%d דקות',\n      h: 'שעה',\n      hh: function hh(number) {\n        if (number === 2) {\n          return 'שעתיים';\n        }\n\n        return number + ' שעות';\n      },\n      d: 'יום',\n      dd: function dd(number) {\n        if (number === 2) {\n          return 'יומיים';\n        }\n\n        return number + ' ימים';\n      },\n      M: 'חודש',\n      MM: function MM(number) {\n        if (number === 2) {\n          return 'חודשיים';\n        }\n\n        return number + ' חודשים';\n      },\n      y: 'שנה',\n      yy: function yy(number) {\n        if (number === 2) {\n          return 'שנתיים';\n        } else if (number % 10 === 0 && number !== 10) {\n          return number + ' שנה';\n        }\n\n        return number + ' שנים';\n      }\n    },\n    meridiemParse: /אחה\"צ|לפנה\"צ|אחרי הצהריים|לפני הצהריים|לפנות בוקר|בבוקר|בערב/i,\n    isPM: function isPM(input) {\n      return /^(אחה\"צ|אחרי הצהריים|בערב)$/.test(input);\n    },\n    meridiem: function meridiem(hour, minute, isLower) {\n      if (hour < 5) {\n        return 'לפנות בוקר';\n      } else if (hour < 10) {\n        return 'בבוקר';\n      } else if (hour < 12) {\n        return isLower ? 'לפנה\"צ' : 'לפני הצהריים';\n      } else if (hour < 18) {\n        return isLower ? 'אחה\"צ' : 'אחרי הצהריים';\n      } else {\n        return 'בערב';\n      }\n    }\n  });\n  return he;\n});","function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n//! moment.js locale configuration\n;\n\n(function (global, factory) {\n  (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  var symbolMap = {\n    '1': '१',\n    '2': '२',\n    '3': '३',\n    '4': '४',\n    '5': '५',\n    '6': '६',\n    '7': '७',\n    '8': '८',\n    '9': '९',\n    '0': '०'\n  },\n      numberMap = {\n    '१': '1',\n    '२': '2',\n    '३': '3',\n    '४': '4',\n    '५': '5',\n    '६': '6',\n    '७': '7',\n    '८': '8',\n    '९': '9',\n    '०': '0'\n  };\n  var hi = moment.defineLocale('hi', {\n    months: 'जनवरी_फ़रवरी_मार्च_अप्रैल_मई_जून_जुलाई_अगस्त_सितम्बर_अक्टूबर_नवम्बर_दिसम्बर'.split('_'),\n    monthsShort: 'जन._फ़र._मार्च_अप्रै._मई_जून_जुल._अग._सित._अक्टू._नव._दिस.'.split('_'),\n    monthsParseExact: true,\n    weekdays: 'रविवार_सोमवार_मंगलवार_बुधवार_गुरूवार_शुक्रवार_शनिवार'.split('_'),\n    weekdaysShort: 'रवि_सोम_मंगल_बुध_गुरू_शुक्र_शनि'.split('_'),\n    weekdaysMin: 'र_सो_मं_बु_गु_शु_श'.split('_'),\n    longDateFormat: {\n      LT: 'A h:mm बजे',\n      LTS: 'A h:mm:ss बजे',\n      L: 'DD/MM/YYYY',\n      LL: 'D MMMM YYYY',\n      LLL: 'D MMMM YYYY, A h:mm बजे',\n      LLLL: 'dddd, D MMMM YYYY, A h:mm बजे'\n    },\n    calendar: {\n      sameDay: '[आज] LT',\n      nextDay: '[कल] LT',\n      nextWeek: 'dddd, LT',\n      lastDay: '[कल] LT',\n      lastWeek: '[पिछले] dddd, LT',\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: '%s में',\n      past: '%s पहले',\n      s: 'कुछ ही क्षण',\n      ss: '%d सेकंड',\n      m: 'एक मिनट',\n      mm: '%d मिनट',\n      h: 'एक घंटा',\n      hh: '%d घंटे',\n      d: 'एक दिन',\n      dd: '%d दिन',\n      M: 'एक महीने',\n      MM: '%d महीने',\n      y: 'एक वर्ष',\n      yy: '%d वर्ष'\n    },\n    preparse: function preparse(string) {\n      return string.replace(/[१२३४५६७८९०]/g, function (match) {\n        return numberMap[match];\n      });\n    },\n    postformat: function postformat(string) {\n      return string.replace(/\\d/g, function (match) {\n        return symbolMap[match];\n      });\n    },\n    // Hindi notation for meridiems are quite fuzzy in practice. While there exists\n    // a rigid notion of a 'Pahar' it is not used as rigidly in modern Hindi.\n    meridiemParse: /रात|सुबह|दोपहर|शाम/,\n    meridiemHour: function meridiemHour(hour, meridiem) {\n      if (hour === 12) {\n        hour = 0;\n      }\n\n      if (meridiem === 'रात') {\n        return hour < 4 ? hour : hour + 12;\n      } else if (meridiem === 'सुबह') {\n        return hour;\n      } else if (meridiem === 'दोपहर') {\n        return hour >= 10 ? hour : hour + 12;\n      } else if (meridiem === 'शाम') {\n        return hour + 12;\n      }\n    },\n    meridiem: function meridiem(hour, minute, isLower) {\n      if (hour < 4) {\n        return 'रात';\n      } else if (hour < 10) {\n        return 'सुबह';\n      } else if (hour < 17) {\n        return 'दोपहर';\n      } else if (hour < 20) {\n        return 'शाम';\n      } else {\n        return 'रात';\n      }\n    },\n    week: {\n      dow: 0,\n      // Sunday is the first day of the week.\n      doy: 6 // The week that contains Jan 6th is the first week of the year.\n\n    }\n  });\n  return hi;\n});","function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n//! moment.js locale configuration\n;\n\n(function (global, factory) {\n  (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  function translate(number, withoutSuffix, key) {\n    var result = number + ' ';\n\n    switch (key) {\n      case 'ss':\n        if (number === 1) {\n          result += 'sekunda';\n        } else if (number === 2 || number === 3 || number === 4) {\n          result += 'sekunde';\n        } else {\n          result += 'sekundi';\n        }\n\n        return result;\n\n      case 'm':\n        return withoutSuffix ? 'jedna minuta' : 'jedne minute';\n\n      case 'mm':\n        if (number === 1) {\n          result += 'minuta';\n        } else if (number === 2 || number === 3 || number === 4) {\n          result += 'minute';\n        } else {\n          result += 'minuta';\n        }\n\n        return result;\n\n      case 'h':\n        return withoutSuffix ? 'jedan sat' : 'jednog sata';\n\n      case 'hh':\n        if (number === 1) {\n          result += 'sat';\n        } else if (number === 2 || number === 3 || number === 4) {\n          result += 'sata';\n        } else {\n          result += 'sati';\n        }\n\n        return result;\n\n      case 'dd':\n        if (number === 1) {\n          result += 'dan';\n        } else {\n          result += 'dana';\n        }\n\n        return result;\n\n      case 'MM':\n        if (number === 1) {\n          result += 'mjesec';\n        } else if (number === 2 || number === 3 || number === 4) {\n          result += 'mjeseca';\n        } else {\n          result += 'mjeseci';\n        }\n\n        return result;\n\n      case 'yy':\n        if (number === 1) {\n          result += 'godina';\n        } else if (number === 2 || number === 3 || number === 4) {\n          result += 'godine';\n        } else {\n          result += 'godina';\n        }\n\n        return result;\n    }\n  }\n\n  var hr = moment.defineLocale('hr', {\n    months: {\n      format: 'siječnja_veljače_ožujka_travnja_svibnja_lipnja_srpnja_kolovoza_rujna_listopada_studenoga_prosinca'.split('_'),\n      standalone: 'siječanj_veljača_ožujak_travanj_svibanj_lipanj_srpanj_kolovoz_rujan_listopad_studeni_prosinac'.split('_')\n    },\n    monthsShort: 'sij._velj._ožu._tra._svi._lip._srp._kol._ruj._lis._stu._pro.'.split('_'),\n    monthsParseExact: true,\n    weekdays: 'nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota'.split('_'),\n    weekdaysShort: 'ned._pon._uto._sri._čet._pet._sub.'.split('_'),\n    weekdaysMin: 'ne_po_ut_sr_če_pe_su'.split('_'),\n    weekdaysParseExact: true,\n    longDateFormat: {\n      LT: 'H:mm',\n      LTS: 'H:mm:ss',\n      L: 'DD.MM.YYYY',\n      LL: 'D. MMMM YYYY',\n      LLL: 'D. MMMM YYYY H:mm',\n      LLLL: 'dddd, D. MMMM YYYY H:mm'\n    },\n    calendar: {\n      sameDay: '[danas u] LT',\n      nextDay: '[sutra u] LT',\n      nextWeek: function nextWeek() {\n        switch (this.day()) {\n          case 0:\n            return '[u] [nedjelju] [u] LT';\n\n          case 3:\n            return '[u] [srijedu] [u] LT';\n\n          case 6:\n            return '[u] [subotu] [u] LT';\n\n          case 1:\n          case 2:\n          case 4:\n          case 5:\n            return '[u] dddd [u] LT';\n        }\n      },\n      lastDay: '[jučer u] LT',\n      lastWeek: function lastWeek() {\n        switch (this.day()) {\n          case 0:\n          case 3:\n            return '[prošlu] dddd [u] LT';\n\n          case 6:\n            return '[prošle] [subote] [u] LT';\n\n          case 1:\n          case 2:\n          case 4:\n          case 5:\n            return '[prošli] dddd [u] LT';\n        }\n      },\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: 'za %s',\n      past: 'prije %s',\n      s: 'par sekundi',\n      ss: translate,\n      m: translate,\n      mm: translate,\n      h: translate,\n      hh: translate,\n      d: 'dan',\n      dd: translate,\n      M: 'mjesec',\n      MM: translate,\n      y: 'godinu',\n      yy: translate\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n    ordinal: '%d.',\n    week: {\n      dow: 1,\n      // Monday is the first day of the week.\n      doy: 7 // The week that contains Jan 7th is the first week of the year.\n\n    }\n  });\n  return hr;\n});","function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n//! moment.js locale configuration\n;\n\n(function (global, factory) {\n  (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  var weekEndings = 'vasárnap hétfőn kedden szerdán csütörtökön pénteken szombaton'.split(' ');\n\n  function translate(number, withoutSuffix, key, isFuture) {\n    var num = number;\n\n    switch (key) {\n      case 's':\n        return isFuture || withoutSuffix ? 'néhány másodperc' : 'néhány másodperce';\n\n      case 'ss':\n        return num + (isFuture || withoutSuffix) ? ' másodperc' : ' másodperce';\n\n      case 'm':\n        return 'egy' + (isFuture || withoutSuffix ? ' perc' : ' perce');\n\n      case 'mm':\n        return num + (isFuture || withoutSuffix ? ' perc' : ' perce');\n\n      case 'h':\n        return 'egy' + (isFuture || withoutSuffix ? ' óra' : ' órája');\n\n      case 'hh':\n        return num + (isFuture || withoutSuffix ? ' óra' : ' órája');\n\n      case 'd':\n        return 'egy' + (isFuture || withoutSuffix ? ' nap' : ' napja');\n\n      case 'dd':\n        return num + (isFuture || withoutSuffix ? ' nap' : ' napja');\n\n      case 'M':\n        return 'egy' + (isFuture || withoutSuffix ? ' hónap' : ' hónapja');\n\n      case 'MM':\n        return num + (isFuture || withoutSuffix ? ' hónap' : ' hónapja');\n\n      case 'y':\n        return 'egy' + (isFuture || withoutSuffix ? ' év' : ' éve');\n\n      case 'yy':\n        return num + (isFuture || withoutSuffix ? ' év' : ' éve');\n    }\n\n    return '';\n  }\n\n  function week(isFuture) {\n    return (isFuture ? '' : '[múlt] ') + '[' + weekEndings[this.day()] + '] LT[-kor]';\n  }\n\n  var hu = moment.defineLocale('hu', {\n    months: 'január_február_március_április_május_június_július_augusztus_szeptember_október_november_december'.split('_'),\n    monthsShort: 'jan_feb_márc_ápr_máj_jún_júl_aug_szept_okt_nov_dec'.split('_'),\n    weekdays: 'vasárnap_hétfő_kedd_szerda_csütörtök_péntek_szombat'.split('_'),\n    weekdaysShort: 'vas_hét_kedd_sze_csüt_pén_szo'.split('_'),\n    weekdaysMin: 'v_h_k_sze_cs_p_szo'.split('_'),\n    longDateFormat: {\n      LT: 'H:mm',\n      LTS: 'H:mm:ss',\n      L: 'YYYY.MM.DD.',\n      LL: 'YYYY. MMMM D.',\n      LLL: 'YYYY. MMMM D. H:mm',\n      LLLL: 'YYYY. MMMM D., dddd H:mm'\n    },\n    meridiemParse: /de|du/i,\n    isPM: function isPM(input) {\n      return input.charAt(1).toLowerCase() === 'u';\n    },\n    meridiem: function meridiem(hours, minutes, isLower) {\n      if (hours < 12) {\n        return isLower === true ? 'de' : 'DE';\n      } else {\n        return isLower === true ? 'du' : 'DU';\n      }\n    },\n    calendar: {\n      sameDay: '[ma] LT[-kor]',\n      nextDay: '[holnap] LT[-kor]',\n      nextWeek: function nextWeek() {\n        return week.call(this, true);\n      },\n      lastDay: '[tegnap] LT[-kor]',\n      lastWeek: function lastWeek() {\n        return week.call(this, false);\n      },\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: '%s múlva',\n      past: '%s',\n      s: translate,\n      ss: translate,\n      m: translate,\n      mm: translate,\n      h: translate,\n      hh: translate,\n      d: translate,\n      dd: translate,\n      M: translate,\n      MM: translate,\n      y: translate,\n      yy: translate\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n    ordinal: '%d.',\n    week: {\n      dow: 1,\n      // Monday is the first day of the week.\n      doy: 4 // The week that contains Jan 4th is the first week of the year.\n\n    }\n  });\n  return hu;\n});","function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n//! moment.js locale configuration\n;\n\n(function (global, factory) {\n  (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  var hyAm = moment.defineLocale('hy-am', {\n    months: {\n      format: 'հունվարի_փետրվարի_մարտի_ապրիլի_մայիսի_հունիսի_հուլիսի_օգոստոսի_սեպտեմբերի_հոկտեմբերի_նոյեմբերի_դեկտեմբերի'.split('_'),\n      standalone: 'հունվար_փետրվար_մարտ_ապրիլ_մայիս_հունիս_հուլիս_օգոստոս_սեպտեմբեր_հոկտեմբեր_նոյեմբեր_դեկտեմբեր'.split('_')\n    },\n    monthsShort: 'հնվ_փտր_մրտ_ապր_մյս_հնս_հլս_օգս_սպտ_հկտ_նմբ_դկտ'.split('_'),\n    weekdays: 'կիրակի_երկուշաբթի_երեքշաբթի_չորեքշաբթի_հինգշաբթի_ուրբաթ_շաբաթ'.split('_'),\n    weekdaysShort: 'կրկ_երկ_երք_չրք_հնգ_ուրբ_շբթ'.split('_'),\n    weekdaysMin: 'կրկ_երկ_երք_չրք_հնգ_ուրբ_շբթ'.split('_'),\n    longDateFormat: {\n      LT: 'HH:mm',\n      LTS: 'HH:mm:ss',\n      L: 'DD.MM.YYYY',\n      LL: 'D MMMM YYYY թ.',\n      LLL: 'D MMMM YYYY թ., HH:mm',\n      LLLL: 'dddd, D MMMM YYYY թ., HH:mm'\n    },\n    calendar: {\n      sameDay: '[այսօր] LT',\n      nextDay: '[վաղը] LT',\n      lastDay: '[երեկ] LT',\n      nextWeek: function nextWeek() {\n        return 'dddd [օրը ժամը] LT';\n      },\n      lastWeek: function lastWeek() {\n        return '[անցած] dddd [օրը ժամը] LT';\n      },\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: '%s հետո',\n      past: '%s առաջ',\n      s: 'մի քանի վայրկյան',\n      ss: '%d վայրկյան',\n      m: 'րոպե',\n      mm: '%d րոպե',\n      h: 'ժամ',\n      hh: '%d ժամ',\n      d: 'օր',\n      dd: '%d օր',\n      M: 'ամիս',\n      MM: '%d ամիս',\n      y: 'տարի',\n      yy: '%d տարի'\n    },\n    meridiemParse: /գիշերվա|առավոտվա|ցերեկվա|երեկոյան/,\n    isPM: function isPM(input) {\n      return /^(ցերեկվա|երեկոյան)$/.test(input);\n    },\n    meridiem: function meridiem(hour) {\n      if (hour < 4) {\n        return 'գիշերվա';\n      } else if (hour < 12) {\n        return 'առավոտվա';\n      } else if (hour < 17) {\n        return 'ցերեկվա';\n      } else {\n        return 'երեկոյան';\n      }\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}|\\d{1,2}-(ին|րդ)/,\n    ordinal: function ordinal(number, period) {\n      switch (period) {\n        case 'DDD':\n        case 'w':\n        case 'W':\n        case 'DDDo':\n          if (number === 1) {\n            return number + '-ին';\n          }\n\n          return number + '-րդ';\n\n        default:\n          return number;\n      }\n    },\n    week: {\n      dow: 1,\n      // Monday is the first day of the week.\n      doy: 7 // The week that contains Jan 7th is the first week of the year.\n\n    }\n  });\n  return hyAm;\n});","function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n//! moment.js locale configuration\n;\n\n(function (global, factory) {\n  (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  var id = moment.defineLocale('id', {\n    months: 'Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_November_Desember'.split('_'),\n    monthsShort: 'Jan_Feb_Mar_Apr_Mei_Jun_Jul_Agt_Sep_Okt_Nov_Des'.split('_'),\n    weekdays: 'Minggu_Senin_Selasa_Rabu_Kamis_Jumat_Sabtu'.split('_'),\n    weekdaysShort: 'Min_Sen_Sel_Rab_Kam_Jum_Sab'.split('_'),\n    weekdaysMin: 'Mg_Sn_Sl_Rb_Km_Jm_Sb'.split('_'),\n    longDateFormat: {\n      LT: 'HH.mm',\n      LTS: 'HH.mm.ss',\n      L: 'DD/MM/YYYY',\n      LL: 'D MMMM YYYY',\n      LLL: 'D MMMM YYYY [pukul] HH.mm',\n      LLLL: 'dddd, D MMMM YYYY [pukul] HH.mm'\n    },\n    meridiemParse: /pagi|siang|sore|malam/,\n    meridiemHour: function meridiemHour(hour, meridiem) {\n      if (hour === 12) {\n        hour = 0;\n      }\n\n      if (meridiem === 'pagi') {\n        return hour;\n      } else if (meridiem === 'siang') {\n        return hour >= 11 ? hour : hour + 12;\n      } else if (meridiem === 'sore' || meridiem === 'malam') {\n        return hour + 12;\n      }\n    },\n    meridiem: function meridiem(hours, minutes, isLower) {\n      if (hours < 11) {\n        return 'pagi';\n      } else if (hours < 15) {\n        return 'siang';\n      } else if (hours < 19) {\n        return 'sore';\n      } else {\n        return 'malam';\n      }\n    },\n    calendar: {\n      sameDay: '[Hari ini pukul] LT',\n      nextDay: '[Besok pukul] LT',\n      nextWeek: 'dddd [pukul] LT',\n      lastDay: '[Kemarin pukul] LT',\n      lastWeek: 'dddd [lalu pukul] LT',\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: 'dalam %s',\n      past: '%s yang lalu',\n      s: 'beberapa detik',\n      ss: '%d detik',\n      m: 'semenit',\n      mm: '%d menit',\n      h: 'sejam',\n      hh: '%d jam',\n      d: 'sehari',\n      dd: '%d hari',\n      M: 'sebulan',\n      MM: '%d bulan',\n      y: 'setahun',\n      yy: '%d tahun'\n    },\n    week: {\n      dow: 1,\n      // Monday is the first day of the week.\n      doy: 7 // The week that contains Jan 7th is the first week of the year.\n\n    }\n  });\n  return id;\n});","function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n//! moment.js locale configuration\n;\n\n(function (global, factory) {\n  (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  function plural(n) {\n    if (n % 100 === 11) {\n      return true;\n    } else if (n % 10 === 1) {\n      return false;\n    }\n\n    return true;\n  }\n\n  function translate(number, withoutSuffix, key, isFuture) {\n    var result = number + ' ';\n\n    switch (key) {\n      case 's':\n        return withoutSuffix || isFuture ? 'nokkrar sekúndur' : 'nokkrum sekúndum';\n\n      case 'ss':\n        if (plural(number)) {\n          return result + (withoutSuffix || isFuture ? 'sekúndur' : 'sekúndum');\n        }\n\n        return result + 'sekúnda';\n\n      case 'm':\n        return withoutSuffix ? 'mínúta' : 'mínútu';\n\n      case 'mm':\n        if (plural(number)) {\n          return result + (withoutSuffix || isFuture ? 'mínútur' : 'mínútum');\n        } else if (withoutSuffix) {\n          return result + 'mínúta';\n        }\n\n        return result + 'mínútu';\n\n      case 'hh':\n        if (plural(number)) {\n          return result + (withoutSuffix || isFuture ? 'klukkustundir' : 'klukkustundum');\n        }\n\n        return result + 'klukkustund';\n\n      case 'd':\n        if (withoutSuffix) {\n          return 'dagur';\n        }\n\n        return isFuture ? 'dag' : 'degi';\n\n      case 'dd':\n        if (plural(number)) {\n          if (withoutSuffix) {\n            return result + 'dagar';\n          }\n\n          return result + (isFuture ? 'daga' : 'dögum');\n        } else if (withoutSuffix) {\n          return result + 'dagur';\n        }\n\n        return result + (isFuture ? 'dag' : 'degi');\n\n      case 'M':\n        if (withoutSuffix) {\n          return 'mánuður';\n        }\n\n        return isFuture ? 'mánuð' : 'mánuði';\n\n      case 'MM':\n        if (plural(number)) {\n          if (withoutSuffix) {\n            return result + 'mánuðir';\n          }\n\n          return result + (isFuture ? 'mánuði' : 'mánuðum');\n        } else if (withoutSuffix) {\n          return result + 'mánuður';\n        }\n\n        return result + (isFuture ? 'mánuð' : 'mánuði');\n\n      case 'y':\n        return withoutSuffix || isFuture ? 'ár' : 'ári';\n\n      case 'yy':\n        if (plural(number)) {\n          return result + (withoutSuffix || isFuture ? 'ár' : 'árum');\n        }\n\n        return result + (withoutSuffix || isFuture ? 'ár' : 'ári');\n    }\n  }\n\n  var is = moment.defineLocale('is', {\n    months: 'janúar_febrúar_mars_apríl_maí_júní_júlí_ágúst_september_október_nóvember_desember'.split('_'),\n    monthsShort: 'jan_feb_mar_apr_maí_jún_júl_ágú_sep_okt_nóv_des'.split('_'),\n    weekdays: 'sunnudagur_mánudagur_þriðjudagur_miðvikudagur_fimmtudagur_föstudagur_laugardagur'.split('_'),\n    weekdaysShort: 'sun_mán_þri_mið_fim_fös_lau'.split('_'),\n    weekdaysMin: 'Su_Má_Þr_Mi_Fi_Fö_La'.split('_'),\n    longDateFormat: {\n      LT: 'H:mm',\n      LTS: 'H:mm:ss',\n      L: 'DD.MM.YYYY',\n      LL: 'D. MMMM YYYY',\n      LLL: 'D. MMMM YYYY [kl.] H:mm',\n      LLLL: 'dddd, D. MMMM YYYY [kl.] H:mm'\n    },\n    calendar: {\n      sameDay: '[í dag kl.] LT',\n      nextDay: '[á morgun kl.] LT',\n      nextWeek: 'dddd [kl.] LT',\n      lastDay: '[í gær kl.] LT',\n      lastWeek: '[síðasta] dddd [kl.] LT',\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: 'eftir %s',\n      past: 'fyrir %s síðan',\n      s: translate,\n      ss: translate,\n      m: translate,\n      mm: translate,\n      h: 'klukkustund',\n      hh: translate,\n      d: translate,\n      dd: translate,\n      M: translate,\n      MM: translate,\n      y: translate,\n      yy: translate\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n    ordinal: '%d.',\n    week: {\n      dow: 1,\n      // Monday is the first day of the week.\n      doy: 4 // The week that contains Jan 4th is the first week of the year.\n\n    }\n  });\n  return is;\n});","function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n//! moment.js locale configuration\n;\n\n(function (global, factory) {\n  (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  var it = moment.defineLocale('it', {\n    months: 'gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre'.split('_'),\n    monthsShort: 'gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic'.split('_'),\n    weekdays: 'domenica_lunedì_martedì_mercoledì_giovedì_venerdì_sabato'.split('_'),\n    weekdaysShort: 'dom_lun_mar_mer_gio_ven_sab'.split('_'),\n    weekdaysMin: 'do_lu_ma_me_gi_ve_sa'.split('_'),\n    longDateFormat: {\n      LT: 'HH:mm',\n      LTS: 'HH:mm:ss',\n      L: 'DD/MM/YYYY',\n      LL: 'D MMMM YYYY',\n      LLL: 'D MMMM YYYY HH:mm',\n      LLLL: 'dddd D MMMM YYYY HH:mm'\n    },\n    calendar: {\n      sameDay: '[Oggi alle] LT',\n      nextDay: '[Domani alle] LT',\n      nextWeek: 'dddd [alle] LT',\n      lastDay: '[Ieri alle] LT',\n      lastWeek: function lastWeek() {\n        switch (this.day()) {\n          case 0:\n            return '[la scorsa] dddd [alle] LT';\n\n          default:\n            return '[lo scorso] dddd [alle] LT';\n        }\n      },\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: function future(s) {\n        return (/^[0-9].+$/.test(s) ? 'tra' : 'in') + ' ' + s;\n      },\n      past: '%s fa',\n      s: 'alcuni secondi',\n      ss: '%d secondi',\n      m: 'un minuto',\n      mm: '%d minuti',\n      h: 'un\\'ora',\n      hh: '%d ore',\n      d: 'un giorno',\n      dd: '%d giorni',\n      M: 'un mese',\n      MM: '%d mesi',\n      y: 'un anno',\n      yy: '%d anni'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}º/,\n    ordinal: '%dº',\n    week: {\n      dow: 1,\n      // Monday is the first day of the week.\n      doy: 4 // The week that contains Jan 4th is the first week of the year.\n\n    }\n  });\n  return it;\n});","function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n//! moment.js locale configuration\n;\n\n(function (global, factory) {\n  (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  var itCh = moment.defineLocale('it-ch', {\n    months: 'gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre'.split('_'),\n    monthsShort: 'gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic'.split('_'),\n    weekdays: 'domenica_lunedì_martedì_mercoledì_giovedì_venerdì_sabato'.split('_'),\n    weekdaysShort: 'dom_lun_mar_mer_gio_ven_sab'.split('_'),\n    weekdaysMin: 'do_lu_ma_me_gi_ve_sa'.split('_'),\n    longDateFormat: {\n      LT: 'HH:mm',\n      LTS: 'HH:mm:ss',\n      L: 'DD.MM.YYYY',\n      LL: 'D MMMM YYYY',\n      LLL: 'D MMMM YYYY HH:mm',\n      LLLL: 'dddd D MMMM YYYY HH:mm'\n    },\n    calendar: {\n      sameDay: '[Oggi alle] LT',\n      nextDay: '[Domani alle] LT',\n      nextWeek: 'dddd [alle] LT',\n      lastDay: '[Ieri alle] LT',\n      lastWeek: function lastWeek() {\n        switch (this.day()) {\n          case 0:\n            return '[la scorsa] dddd [alle] LT';\n\n          default:\n            return '[lo scorso] dddd [alle] LT';\n        }\n      },\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: function future(s) {\n        return (/^[0-9].+$/.test(s) ? 'tra' : 'in') + ' ' + s;\n      },\n      past: '%s fa',\n      s: 'alcuni secondi',\n      ss: '%d secondi',\n      m: 'un minuto',\n      mm: '%d minuti',\n      h: 'un\\'ora',\n      hh: '%d ore',\n      d: 'un giorno',\n      dd: '%d giorni',\n      M: 'un mese',\n      MM: '%d mesi',\n      y: 'un anno',\n      yy: '%d anni'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}º/,\n    ordinal: '%dº',\n    week: {\n      dow: 1,\n      // Monday is the first day of the week.\n      doy: 4 // The week that contains Jan 4th is the first week of the year.\n\n    }\n  });\n  return itCh;\n});","function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n//! moment.js locale configuration\n;\n\n(function (global, factory) {\n  (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  var jv = moment.defineLocale('jv', {\n    months: 'Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_Nopember_Desember'.split('_'),\n    monthsShort: 'Jan_Feb_Mar_Apr_Mei_Jun_Jul_Ags_Sep_Okt_Nop_Des'.split('_'),\n    weekdays: 'Minggu_Senen_Seloso_Rebu_Kemis_Jemuwah_Septu'.split('_'),\n    weekdaysShort: 'Min_Sen_Sel_Reb_Kem_Jem_Sep'.split('_'),\n    weekdaysMin: 'Mg_Sn_Sl_Rb_Km_Jm_Sp'.split('_'),\n    longDateFormat: {\n      LT: 'HH.mm',\n      LTS: 'HH.mm.ss',\n      L: 'DD/MM/YYYY',\n      LL: 'D MMMM YYYY',\n      LLL: 'D MMMM YYYY [pukul] HH.mm',\n      LLLL: 'dddd, D MMMM YYYY [pukul] HH.mm'\n    },\n    meridiemParse: /enjing|siyang|sonten|ndalu/,\n    meridiemHour: function meridiemHour(hour, meridiem) {\n      if (hour === 12) {\n        hour = 0;\n      }\n\n      if (meridiem === 'enjing') {\n        return hour;\n      } else if (meridiem === 'siyang') {\n        return hour >= 11 ? hour : hour + 12;\n      } else if (meridiem === 'sonten' || meridiem === 'ndalu') {\n        return hour + 12;\n      }\n    },\n    meridiem: function meridiem(hours, minutes, isLower) {\n      if (hours < 11) {\n        return 'enjing';\n      } else if (hours < 15) {\n        return 'siyang';\n      } else if (hours < 19) {\n        return 'sonten';\n      } else {\n        return 'ndalu';\n      }\n    },\n    calendar: {\n      sameDay: '[Dinten puniko pukul] LT',\n      nextDay: '[Mbenjang pukul] LT',\n      nextWeek: 'dddd [pukul] LT',\n      lastDay: '[Kala wingi pukul] LT',\n      lastWeek: 'dddd [kepengker pukul] LT',\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: 'wonten ing %s',\n      past: '%s ingkang kepengker',\n      s: 'sawetawis detik',\n      ss: '%d detik',\n      m: 'setunggal menit',\n      mm: '%d menit',\n      h: 'setunggal jam',\n      hh: '%d jam',\n      d: 'sedinten',\n      dd: '%d dinten',\n      M: 'sewulan',\n      MM: '%d wulan',\n      y: 'setaun',\n      yy: '%d taun'\n    },\n    week: {\n      dow: 1,\n      // Monday is the first day of the week.\n      doy: 7 // The week that contains Jan 7th is the first week of the year.\n\n    }\n  });\n  return jv;\n});","function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n//! moment.js locale configuration\n;\n\n(function (global, factory) {\n  (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  var ka = moment.defineLocale('ka', {\n    months: {\n      standalone: 'იანვარი_თებერვალი_მარტი_აპრილი_მაისი_ივნისი_ივლისი_აგვისტო_სექტემბერი_ოქტომბერი_ნოემბერი_დეკემბერი'.split('_'),\n      format: 'იანვარს_თებერვალს_მარტს_აპრილის_მაისს_ივნისს_ივლისს_აგვისტს_სექტემბერს_ოქტომბერს_ნოემბერს_დეკემბერს'.split('_')\n    },\n    monthsShort: 'იან_თებ_მარ_აპრ_მაი_ივნ_ივლ_აგვ_სექ_ოქტ_ნოე_დეკ'.split('_'),\n    weekdays: {\n      standalone: 'კვირა_ორშაბათი_სამშაბათი_ოთხშაბათი_ხუთშაბათი_პარასკევი_შაბათი'.split('_'),\n      format: 'კვირას_ორშაბათს_სამშაბათს_ოთხშაბათს_ხუთშაბათს_პარასკევს_შაბათს'.split('_'),\n      isFormat: /(წინა|შემდეგ)/\n    },\n    weekdaysShort: 'კვი_ორშ_სამ_ოთხ_ხუთ_პარ_შაბ'.split('_'),\n    weekdaysMin: 'კვ_ორ_სა_ოთ_ხუ_პა_შა'.split('_'),\n    longDateFormat: {\n      LT: 'h:mm A',\n      LTS: 'h:mm:ss A',\n      L: 'DD/MM/YYYY',\n      LL: 'D MMMM YYYY',\n      LLL: 'D MMMM YYYY h:mm A',\n      LLLL: 'dddd, D MMMM YYYY h:mm A'\n    },\n    calendar: {\n      sameDay: '[დღეს] LT[-ზე]',\n      nextDay: '[ხვალ] LT[-ზე]',\n      lastDay: '[გუშინ] LT[-ზე]',\n      nextWeek: '[შემდეგ] dddd LT[-ზე]',\n      lastWeek: '[წინა] dddd LT-ზე',\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: function future(s) {\n        return /(წამი|წუთი|საათი|წელი)/.test(s) ? s.replace(/ი$/, 'ში') : s + 'ში';\n      },\n      past: function past(s) {\n        if (/(წამი|წუთი|საათი|დღე|თვე)/.test(s)) {\n          return s.replace(/(ი|ე)$/, 'ის წინ');\n        }\n\n        if (/წელი/.test(s)) {\n          return s.replace(/წელი$/, 'წლის წინ');\n        }\n      },\n      s: 'რამდენიმე წამი',\n      ss: '%d წამი',\n      m: 'წუთი',\n      mm: '%d წუთი',\n      h: 'საათი',\n      hh: '%d საათი',\n      d: 'დღე',\n      dd: '%d დღე',\n      M: 'თვე',\n      MM: '%d თვე',\n      y: 'წელი',\n      yy: '%d წელი'\n    },\n    dayOfMonthOrdinalParse: /0|1-ლი|მე-\\d{1,2}|\\d{1,2}-ე/,\n    ordinal: function ordinal(number) {\n      if (number === 0) {\n        return number;\n      }\n\n      if (number === 1) {\n        return number + '-ლი';\n      }\n\n      if (number < 20 || number <= 100 && number % 20 === 0 || number % 100 === 0) {\n        return 'მე-' + number;\n      }\n\n      return number + '-ე';\n    },\n    week: {\n      dow: 1,\n      doy: 7\n    }\n  });\n  return ka;\n});","function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n//! moment.js locale configuration\n;\n\n(function (global, factory) {\n  (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  var suffixes = {\n    0: '-ші',\n    1: '-ші',\n    2: '-ші',\n    3: '-ші',\n    4: '-ші',\n    5: '-ші',\n    6: '-шы',\n    7: '-ші',\n    8: '-ші',\n    9: '-шы',\n    10: '-шы',\n    20: '-шы',\n    30: '-шы',\n    40: '-шы',\n    50: '-ші',\n    60: '-шы',\n    70: '-ші',\n    80: '-ші',\n    90: '-шы',\n    100: '-ші'\n  };\n  var kk = moment.defineLocale('kk', {\n    months: 'қаңтар_ақпан_наурыз_сәуір_мамыр_маусым_шілде_тамыз_қыркүйек_қазан_қараша_желтоқсан'.split('_'),\n    monthsShort: 'қаң_ақп_нау_сәу_мам_мау_шіл_там_қыр_қаз_қар_жел'.split('_'),\n    weekdays: 'жексенбі_дүйсенбі_сейсенбі_сәрсенбі_бейсенбі_жұма_сенбі'.split('_'),\n    weekdaysShort: 'жек_дүй_сей_сәр_бей_жұм_сен'.split('_'),\n    weekdaysMin: 'жк_дй_сй_ср_бй_жм_сн'.split('_'),\n    longDateFormat: {\n      LT: 'HH:mm',\n      LTS: 'HH:mm:ss',\n      L: 'DD.MM.YYYY',\n      LL: 'D MMMM YYYY',\n      LLL: 'D MMMM YYYY HH:mm',\n      LLLL: 'dddd, D MMMM YYYY HH:mm'\n    },\n    calendar: {\n      sameDay: '[Бүгін сағат] LT',\n      nextDay: '[Ертең сағат] LT',\n      nextWeek: 'dddd [сағат] LT',\n      lastDay: '[Кеше сағат] LT',\n      lastWeek: '[Өткен аптаның] dddd [сағат] LT',\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: '%s ішінде',\n      past: '%s бұрын',\n      s: 'бірнеше секунд',\n      ss: '%d секунд',\n      m: 'бір минут',\n      mm: '%d минут',\n      h: 'бір сағат',\n      hh: '%d сағат',\n      d: 'бір күн',\n      dd: '%d күн',\n      M: 'бір ай',\n      MM: '%d ай',\n      y: 'бір жыл',\n      yy: '%d жыл'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}-(ші|шы)/,\n    ordinal: function ordinal(number) {\n      var a = number % 10,\n          b = number >= 100 ? 100 : null;\n      return number + (suffixes[number] || suffixes[a] || suffixes[b]);\n    },\n    week: {\n      dow: 1,\n      // Monday is the first day of the week.\n      doy: 7 // The week that contains Jan 7th is the first week of the year.\n\n    }\n  });\n  return kk;\n});","function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n//! moment.js locale configuration\n;\n\n(function (global, factory) {\n  (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  var symbolMap = {\n    '1': '១',\n    '2': '២',\n    '3': '៣',\n    '4': '៤',\n    '5': '៥',\n    '6': '៦',\n    '7': '៧',\n    '8': '៨',\n    '9': '៩',\n    '0': '០'\n  },\n      numberMap = {\n    '១': '1',\n    '២': '2',\n    '៣': '3',\n    '៤': '4',\n    '៥': '5',\n    '៦': '6',\n    '៧': '7',\n    '៨': '8',\n    '៩': '9',\n    '០': '0'\n  };\n  var km = moment.defineLocale('km', {\n    months: 'មករា_កុម្ភៈ_មីនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ'.split('_'),\n    monthsShort: 'មករា_កុម្ភៈ_មីនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ'.split('_'),\n    weekdays: 'អាទិត្យ_ច័ន្ទ_អង្គារ_ពុធ_ព្រហស្បតិ៍_សុក្រ_សៅរ៍'.split('_'),\n    weekdaysShort: 'អា_ច_អ_ព_ព្រ_សុ_ស'.split('_'),\n    weekdaysMin: 'អា_ច_អ_ព_ព្រ_សុ_ស'.split('_'),\n    weekdaysParseExact: true,\n    longDateFormat: {\n      LT: 'HH:mm',\n      LTS: 'HH:mm:ss',\n      L: 'DD/MM/YYYY',\n      LL: 'D MMMM YYYY',\n      LLL: 'D MMMM YYYY HH:mm',\n      LLLL: 'dddd, D MMMM YYYY HH:mm'\n    },\n    meridiemParse: /ព្រឹក|ល្ងាច/,\n    isPM: function isPM(input) {\n      return input === 'ល្ងាច';\n    },\n    meridiem: function meridiem(hour, minute, isLower) {\n      if (hour < 12) {\n        return 'ព្រឹក';\n      } else {\n        return 'ល្ងាច';\n      }\n    },\n    calendar: {\n      sameDay: '[ថ្ងៃនេះ ម៉ោង] LT',\n      nextDay: '[ស្អែក ម៉ោង] LT',\n      nextWeek: 'dddd [ម៉ោង] LT',\n      lastDay: '[ម្សិលមិញ ម៉ោង] LT',\n      lastWeek: 'dddd [សប្តាហ៍មុន] [ម៉ោង] LT',\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: '%sទៀត',\n      past: '%sមុន',\n      s: 'ប៉ុន្មានវិនាទី',\n      ss: '%d វិនាទី',\n      m: 'មួយនាទី',\n      mm: '%d នាទី',\n      h: 'មួយម៉ោង',\n      hh: '%d ម៉ោង',\n      d: 'មួយថ្ងៃ',\n      dd: '%d ថ្ងៃ',\n      M: 'មួយខែ',\n      MM: '%d ខែ',\n      y: 'មួយឆ្នាំ',\n      yy: '%d ឆ្នាំ'\n    },\n    dayOfMonthOrdinalParse: /ទី\\d{1,2}/,\n    ordinal: 'ទី%d',\n    preparse: function preparse(string) {\n      return string.replace(/[១២៣៤៥៦៧៨៩០]/g, function (match) {\n        return numberMap[match];\n      });\n    },\n    postformat: function postformat(string) {\n      return string.replace(/\\d/g, function (match) {\n        return symbolMap[match];\n      });\n    },\n    week: {\n      dow: 1,\n      // Monday is the first day of the week.\n      doy: 4 // The week that contains Jan 4th is the first week of the year.\n\n    }\n  });\n  return km;\n});","function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n//! moment.js locale configuration\n;\n\n(function (global, factory) {\n  (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  var symbolMap = {\n    '1': '೧',\n    '2': '೨',\n    '3': '೩',\n    '4': '೪',\n    '5': '೫',\n    '6': '೬',\n    '7': '೭',\n    '8': '೮',\n    '9': '೯',\n    '0': '೦'\n  },\n      numberMap = {\n    '೧': '1',\n    '೨': '2',\n    '೩': '3',\n    '೪': '4',\n    '೫': '5',\n    '೬': '6',\n    '೭': '7',\n    '೮': '8',\n    '೯': '9',\n    '೦': '0'\n  };\n  var kn = moment.defineLocale('kn', {\n    months: 'ಜನವರಿ_ಫೆಬ್ರವರಿ_ಮಾರ್ಚ್_ಏಪ್ರಿಲ್_ಮೇ_ಜೂನ್_ಜುಲೈ_ಆಗಸ್ಟ್_ಸೆಪ್ಟೆಂಬರ್_ಅಕ್ಟೋಬರ್_ನವೆಂಬರ್_ಡಿಸೆಂಬರ್'.split('_'),\n    monthsShort: 'ಜನ_ಫೆಬ್ರ_ಮಾರ್ಚ್_ಏಪ್ರಿಲ್_ಮೇ_ಜೂನ್_ಜುಲೈ_ಆಗಸ್ಟ್_ಸೆಪ್ಟೆಂ_ಅಕ್ಟೋ_ನವೆಂ_ಡಿಸೆಂ'.split('_'),\n    monthsParseExact: true,\n    weekdays: 'ಭಾನುವಾರ_ಸೋಮವಾರ_ಮಂಗಳವಾರ_ಬುಧವಾರ_ಗುರುವಾರ_ಶುಕ್ರವಾರ_ಶನಿವಾರ'.split('_'),\n    weekdaysShort: 'ಭಾನು_ಸೋಮ_ಮಂಗಳ_ಬುಧ_ಗುರು_ಶುಕ್ರ_ಶನಿ'.split('_'),\n    weekdaysMin: 'ಭಾ_ಸೋ_ಮಂ_ಬು_ಗು_ಶು_ಶ'.split('_'),\n    longDateFormat: {\n      LT: 'A h:mm',\n      LTS: 'A h:mm:ss',\n      L: 'DD/MM/YYYY',\n      LL: 'D MMMM YYYY',\n      LLL: 'D MMMM YYYY, A h:mm',\n      LLLL: 'dddd, D MMMM YYYY, A h:mm'\n    },\n    calendar: {\n      sameDay: '[ಇಂದು] LT',\n      nextDay: '[ನಾಳೆ] LT',\n      nextWeek: 'dddd, LT',\n      lastDay: '[ನಿನ್ನೆ] LT',\n      lastWeek: '[ಕೊನೆಯ] dddd, LT',\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: '%s ನಂತರ',\n      past: '%s ಹಿಂದೆ',\n      s: 'ಕೆಲವು ಕ್ಷಣಗಳು',\n      ss: '%d ಸೆಕೆಂಡುಗಳು',\n      m: 'ಒಂದು ನಿಮಿಷ',\n      mm: '%d ನಿಮಿಷ',\n      h: 'ಒಂದು ಗಂಟೆ',\n      hh: '%d ಗಂಟೆ',\n      d: 'ಒಂದು ದಿನ',\n      dd: '%d ದಿನ',\n      M: 'ಒಂದು ತಿಂಗಳು',\n      MM: '%d ತಿಂಗಳು',\n      y: 'ಒಂದು ವರ್ಷ',\n      yy: '%d ವರ್ಷ'\n    },\n    preparse: function preparse(string) {\n      return string.replace(/[೧೨೩೪೫೬೭೮೯೦]/g, function (match) {\n        return numberMap[match];\n      });\n    },\n    postformat: function postformat(string) {\n      return string.replace(/\\d/g, function (match) {\n        return symbolMap[match];\n      });\n    },\n    meridiemParse: /ರಾತ್ರಿ|ಬೆಳಿಗ್ಗೆ|ಮಧ್ಯಾಹ್ನ|ಸಂಜೆ/,\n    meridiemHour: function meridiemHour(hour, meridiem) {\n      if (hour === 12) {\n        hour = 0;\n      }\n\n      if (meridiem === 'ರಾತ್ರಿ') {\n        return hour < 4 ? hour : hour + 12;\n      } else if (meridiem === 'ಬೆಳಿಗ್ಗೆ') {\n        return hour;\n      } else if (meridiem === 'ಮಧ್ಯಾಹ್ನ') {\n        return hour >= 10 ? hour : hour + 12;\n      } else if (meridiem === 'ಸಂಜೆ') {\n        return hour + 12;\n      }\n    },\n    meridiem: function meridiem(hour, minute, isLower) {\n      if (hour < 4) {\n        return 'ರಾತ್ರಿ';\n      } else if (hour < 10) {\n        return 'ಬೆಳಿಗ್ಗೆ';\n      } else if (hour < 17) {\n        return 'ಮಧ್ಯಾಹ್ನ';\n      } else if (hour < 20) {\n        return 'ಸಂಜೆ';\n      } else {\n        return 'ರಾತ್ರಿ';\n      }\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}(ನೇ)/,\n    ordinal: function ordinal(number) {\n      return number + 'ನೇ';\n    },\n    week: {\n      dow: 0,\n      // Sunday is the first day of the week.\n      doy: 6 // The week that contains Jan 6th is the first week of the year.\n\n    }\n  });\n  return kn;\n});","function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n//! moment.js locale configuration\n;\n\n(function (global, factory) {\n  (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  var ko = moment.defineLocale('ko', {\n    months: '1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월'.split('_'),\n    monthsShort: '1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월'.split('_'),\n    weekdays: '일요일_월요일_화요일_수요일_목요일_금요일_토요일'.split('_'),\n    weekdaysShort: '일_월_화_수_목_금_토'.split('_'),\n    weekdaysMin: '일_월_화_수_목_금_토'.split('_'),\n    longDateFormat: {\n      LT: 'A h:mm',\n      LTS: 'A h:mm:ss',\n      L: 'YYYY.MM.DD.',\n      LL: 'YYYY년 MMMM D일',\n      LLL: 'YYYY년 MMMM D일 A h:mm',\n      LLLL: 'YYYY년 MMMM D일 dddd A h:mm',\n      l: 'YYYY.MM.DD.',\n      ll: 'YYYY년 MMMM D일',\n      lll: 'YYYY년 MMMM D일 A h:mm',\n      llll: 'YYYY년 MMMM D일 dddd A h:mm'\n    },\n    calendar: {\n      sameDay: '오늘 LT',\n      nextDay: '내일 LT',\n      nextWeek: 'dddd LT',\n      lastDay: '어제 LT',\n      lastWeek: '지난주 dddd LT',\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: '%s 후',\n      past: '%s 전',\n      s: '몇 초',\n      ss: '%d초',\n      m: '1분',\n      mm: '%d분',\n      h: '한 시간',\n      hh: '%d시간',\n      d: '하루',\n      dd: '%d일',\n      M: '한 달',\n      MM: '%d달',\n      y: '일 년',\n      yy: '%d년'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}(일|월|주)/,\n    ordinal: function ordinal(number, period) {\n      switch (period) {\n        case 'd':\n        case 'D':\n        case 'DDD':\n          return number + '일';\n\n        case 'M':\n          return number + '월';\n\n        case 'w':\n        case 'W':\n          return number + '주';\n\n        default:\n          return number;\n      }\n    },\n    meridiemParse: /오전|오후/,\n    isPM: function isPM(token) {\n      return token === '오후';\n    },\n    meridiem: function meridiem(hour, minute, isUpper) {\n      return hour < 12 ? '오전' : '오후';\n    }\n  });\n  return ko;\n});","function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n//! moment.js locale configuration\n;\n\n(function (global, factory) {\n  (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  var symbolMap = {\n    '1': '١',\n    '2': '٢',\n    '3': '٣',\n    '4': '٤',\n    '5': '٥',\n    '6': '٦',\n    '7': '٧',\n    '8': '٨',\n    '9': '٩',\n    '0': '٠'\n  },\n      numberMap = {\n    '١': '1',\n    '٢': '2',\n    '٣': '3',\n    '٤': '4',\n    '٥': '5',\n    '٦': '6',\n    '٧': '7',\n    '٨': '8',\n    '٩': '9',\n    '٠': '0'\n  },\n      months = ['کانونی دووەم', 'شوبات', 'ئازار', 'نیسان', 'ئایار', 'حوزەیران', 'تەمموز', 'ئاب', 'ئەیلوول', 'تشرینی یەكەم', 'تشرینی دووەم', 'كانونی یەکەم'];\n  var ku = moment.defineLocale('ku', {\n    months: months,\n    monthsShort: months,\n    weekdays: 'یه‌كشه‌ممه‌_دووشه‌ممه‌_سێشه‌ممه‌_چوارشه‌ممه‌_پێنجشه‌ممه‌_هه‌ینی_شه‌ممه‌'.split('_'),\n    weekdaysShort: 'یه‌كشه‌م_دووشه‌م_سێشه‌م_چوارشه‌م_پێنجشه‌م_هه‌ینی_شه‌ممه‌'.split('_'),\n    weekdaysMin: 'ی_د_س_چ_پ_ه_ش'.split('_'),\n    weekdaysParseExact: true,\n    longDateFormat: {\n      LT: 'HH:mm',\n      LTS: 'HH:mm:ss',\n      L: 'DD/MM/YYYY',\n      LL: 'D MMMM YYYY',\n      LLL: 'D MMMM YYYY HH:mm',\n      LLLL: 'dddd, D MMMM YYYY HH:mm'\n    },\n    meridiemParse: /ئێواره‌|به‌یانی/,\n    isPM: function isPM(input) {\n      return /ئێواره‌/.test(input);\n    },\n    meridiem: function meridiem(hour, minute, isLower) {\n      if (hour < 12) {\n        return 'به‌یانی';\n      } else {\n        return 'ئێواره‌';\n      }\n    },\n    calendar: {\n      sameDay: '[ئه‌مرۆ كاتژمێر] LT',\n      nextDay: '[به‌یانی كاتژمێر] LT',\n      nextWeek: 'dddd [كاتژمێر] LT',\n      lastDay: '[دوێنێ كاتژمێر] LT',\n      lastWeek: 'dddd [كاتژمێر] LT',\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: 'له‌ %s',\n      past: '%s',\n      s: 'چه‌ند چركه‌یه‌ك',\n      ss: 'چركه‌ %d',\n      m: 'یه‌ك خوله‌ك',\n      mm: '%d خوله‌ك',\n      h: 'یه‌ك كاتژمێر',\n      hh: '%d كاتژمێر',\n      d: 'یه‌ك ڕۆژ',\n      dd: '%d ڕۆژ',\n      M: 'یه‌ك مانگ',\n      MM: '%d مانگ',\n      y: 'یه‌ك ساڵ',\n      yy: '%d ساڵ'\n    },\n    preparse: function preparse(string) {\n      return string.replace(/[١٢٣٤٥٦٧٨٩٠]/g, function (match) {\n        return numberMap[match];\n      }).replace(/،/g, ',');\n    },\n    postformat: function postformat(string) {\n      return string.replace(/\\d/g, function (match) {\n        return symbolMap[match];\n      }).replace(/,/g, '،');\n    },\n    week: {\n      dow: 6,\n      // Saturday is the first day of the week.\n      doy: 12 // The week that contains Jan 12th is the first week of the year.\n\n    }\n  });\n  return ku;\n});","function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n//! moment.js locale configuration\n;\n\n(function (global, factory) {\n  (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  var suffixes = {\n    0: '-чү',\n    1: '-чи',\n    2: '-чи',\n    3: '-чү',\n    4: '-чү',\n    5: '-чи',\n    6: '-чы',\n    7: '-чи',\n    8: '-чи',\n    9: '-чу',\n    10: '-чу',\n    20: '-чы',\n    30: '-чу',\n    40: '-чы',\n    50: '-чү',\n    60: '-чы',\n    70: '-чи',\n    80: '-чи',\n    90: '-чу',\n    100: '-чү'\n  };\n  var ky = moment.defineLocale('ky', {\n    months: 'январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь'.split('_'),\n    monthsShort: 'янв_фев_март_апр_май_июнь_июль_авг_сен_окт_ноя_дек'.split('_'),\n    weekdays: 'Жекшемби_Дүйшөмбү_Шейшемби_Шаршемби_Бейшемби_Жума_Ишемби'.split('_'),\n    weekdaysShort: 'Жек_Дүй_Шей_Шар_Бей_Жум_Ише'.split('_'),\n    weekdaysMin: 'Жк_Дй_Шй_Шр_Бй_Жм_Иш'.split('_'),\n    longDateFormat: {\n      LT: 'HH:mm',\n      LTS: 'HH:mm:ss',\n      L: 'DD.MM.YYYY',\n      LL: 'D MMMM YYYY',\n      LLL: 'D MMMM YYYY HH:mm',\n      LLLL: 'dddd, D MMMM YYYY HH:mm'\n    },\n    calendar: {\n      sameDay: '[Бүгүн саат] LT',\n      nextDay: '[Эртең саат] LT',\n      nextWeek: 'dddd [саат] LT',\n      lastDay: '[Кечээ саат] LT',\n      lastWeek: '[Өткөн аптанын] dddd [күнү] [саат] LT',\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: '%s ичинде',\n      past: '%s мурун',\n      s: 'бирнече секунд',\n      ss: '%d секунд',\n      m: 'бир мүнөт',\n      mm: '%d мүнөт',\n      h: 'бир саат',\n      hh: '%d саат',\n      d: 'бир күн',\n      dd: '%d күн',\n      M: 'бир ай',\n      MM: '%d ай',\n      y: 'бир жыл',\n      yy: '%d жыл'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}-(чи|чы|чү|чу)/,\n    ordinal: function ordinal(number) {\n      var a = number % 10,\n          b = number >= 100 ? 100 : null;\n      return number + (suffixes[number] || suffixes[a] || suffixes[b]);\n    },\n    week: {\n      dow: 1,\n      // Monday is the first day of the week.\n      doy: 7 // The week that contains Jan 7th is the first week of the year.\n\n    }\n  });\n  return ky;\n});","function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n//! moment.js locale configuration\n;\n\n(function (global, factory) {\n  (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  function processRelativeTime(number, withoutSuffix, key, isFuture) {\n    var format = {\n      'm': ['eng Minutt', 'enger Minutt'],\n      'h': ['eng Stonn', 'enger Stonn'],\n      'd': ['een Dag', 'engem Dag'],\n      'M': ['ee Mount', 'engem Mount'],\n      'y': ['ee Joer', 'engem Joer']\n    };\n    return withoutSuffix ? format[key][0] : format[key][1];\n  }\n\n  function processFutureTime(string) {\n    var number = string.substr(0, string.indexOf(' '));\n\n    if (eifelerRegelAppliesToNumber(number)) {\n      return 'a ' + string;\n    }\n\n    return 'an ' + string;\n  }\n\n  function processPastTime(string) {\n    var number = string.substr(0, string.indexOf(' '));\n\n    if (eifelerRegelAppliesToNumber(number)) {\n      return 'viru ' + string;\n    }\n\n    return 'virun ' + string;\n  }\n  /**\n   * Returns true if the word before the given number loses the '-n' ending.\n   * e.g. 'an 10 Deeg' but 'a 5 Deeg'\n   *\n   * @param number {integer}\n   * @returns {boolean}\n   */\n\n\n  function eifelerRegelAppliesToNumber(number) {\n    number = parseInt(number, 10);\n\n    if (isNaN(number)) {\n      return false;\n    }\n\n    if (number < 0) {\n      // Negative Number --> always true\n      return true;\n    } else if (number < 10) {\n      // Only 1 digit\n      if (4 <= number && number <= 7) {\n        return true;\n      }\n\n      return false;\n    } else if (number < 100) {\n      // 2 digits\n      var lastDigit = number % 10,\n          firstDigit = number / 10;\n\n      if (lastDigit === 0) {\n        return eifelerRegelAppliesToNumber(firstDigit);\n      }\n\n      return eifelerRegelAppliesToNumber(lastDigit);\n    } else if (number < 10000) {\n      // 3 or 4 digits --> recursively check first digit\n      while (number >= 10) {\n        number = number / 10;\n      }\n\n      return eifelerRegelAppliesToNumber(number);\n    } else {\n      // Anything larger than 4 digits: recursively check first n-3 digits\n      number = number / 1000;\n      return eifelerRegelAppliesToNumber(number);\n    }\n  }\n\n  var lb = moment.defineLocale('lb', {\n    months: 'Januar_Februar_Mäerz_Abrëll_Mee_Juni_Juli_August_September_Oktober_November_Dezember'.split('_'),\n    monthsShort: 'Jan._Febr._Mrz._Abr._Mee_Jun._Jul._Aug._Sept._Okt._Nov._Dez.'.split('_'),\n    monthsParseExact: true,\n    weekdays: 'Sonndeg_Méindeg_Dënschdeg_Mëttwoch_Donneschdeg_Freideg_Samschdeg'.split('_'),\n    weekdaysShort: 'So._Mé._Dë._Më._Do._Fr._Sa.'.split('_'),\n    weekdaysMin: 'So_Mé_Dë_Më_Do_Fr_Sa'.split('_'),\n    weekdaysParseExact: true,\n    longDateFormat: {\n      LT: 'H:mm [Auer]',\n      LTS: 'H:mm:ss [Auer]',\n      L: 'DD.MM.YYYY',\n      LL: 'D. MMMM YYYY',\n      LLL: 'D. MMMM YYYY H:mm [Auer]',\n      LLLL: 'dddd, D. MMMM YYYY H:mm [Auer]'\n    },\n    calendar: {\n      sameDay: '[Haut um] LT',\n      sameElse: 'L',\n      nextDay: '[Muer um] LT',\n      nextWeek: 'dddd [um] LT',\n      lastDay: '[Gëschter um] LT',\n      lastWeek: function lastWeek() {\n        // Different date string for 'Dënschdeg' (Tuesday) and 'Donneschdeg' (Thursday) due to phonological rule\n        switch (this.day()) {\n          case 2:\n          case 4:\n            return '[Leschten] dddd [um] LT';\n\n          default:\n            return '[Leschte] dddd [um] LT';\n        }\n      }\n    },\n    relativeTime: {\n      future: processFutureTime,\n      past: processPastTime,\n      s: 'e puer Sekonnen',\n      ss: '%d Sekonnen',\n      m: processRelativeTime,\n      mm: '%d Minutten',\n      h: processRelativeTime,\n      hh: '%d Stonnen',\n      d: processRelativeTime,\n      dd: '%d Deeg',\n      M: processRelativeTime,\n      MM: '%d Méint',\n      y: processRelativeTime,\n      yy: '%d Joer'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n    ordinal: '%d.',\n    week: {\n      dow: 1,\n      // Monday is the first day of the week.\n      doy: 4 // The week that contains Jan 4th is the first week of the year.\n\n    }\n  });\n  return lb;\n});","function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n//! moment.js locale configuration\n;\n\n(function (global, factory) {\n  (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  var lo = moment.defineLocale('lo', {\n    months: 'ມັງກອນ_ກຸມພາ_ມີນາ_ເມສາ_ພຶດສະພາ_ມິຖຸນາ_ກໍລະກົດ_ສິງຫາ_ກັນຍາ_ຕຸລາ_ພະຈິກ_ທັນວາ'.split('_'),\n    monthsShort: 'ມັງກອນ_ກຸມພາ_ມີນາ_ເມສາ_ພຶດສະພາ_ມິຖຸນາ_ກໍລະກົດ_ສິງຫາ_ກັນຍາ_ຕຸລາ_ພະຈິກ_ທັນວາ'.split('_'),\n    weekdays: 'ອາທິດ_ຈັນ_ອັງຄານ_ພຸດ_ພະຫັດ_ສຸກ_ເສົາ'.split('_'),\n    weekdaysShort: 'ທິດ_ຈັນ_ອັງຄານ_ພຸດ_ພະຫັດ_ສຸກ_ເສົາ'.split('_'),\n    weekdaysMin: 'ທ_ຈ_ອຄ_ພ_ພຫ_ສກ_ສ'.split('_'),\n    weekdaysParseExact: true,\n    longDateFormat: {\n      LT: 'HH:mm',\n      LTS: 'HH:mm:ss',\n      L: 'DD/MM/YYYY',\n      LL: 'D MMMM YYYY',\n      LLL: 'D MMMM YYYY HH:mm',\n      LLLL: 'ວັນdddd D MMMM YYYY HH:mm'\n    },\n    meridiemParse: /ຕອນເຊົ້າ|ຕອນແລງ/,\n    isPM: function isPM(input) {\n      return input === 'ຕອນແລງ';\n    },\n    meridiem: function meridiem(hour, minute, isLower) {\n      if (hour < 12) {\n        return 'ຕອນເຊົ້າ';\n      } else {\n        return 'ຕອນແລງ';\n      }\n    },\n    calendar: {\n      sameDay: '[ມື້ນີ້ເວລາ] LT',\n      nextDay: '[ມື້ອື່ນເວລາ] LT',\n      nextWeek: '[ວັນ]dddd[ໜ້າເວລາ] LT',\n      lastDay: '[ມື້ວານນີ້ເວລາ] LT',\n      lastWeek: '[ວັນ]dddd[ແລ້ວນີ້ເວລາ] LT',\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: 'ອີກ %s',\n      past: '%sຜ່ານມາ',\n      s: 'ບໍ່ເທົ່າໃດວິນາທີ',\n      ss: '%d ວິນາທີ',\n      m: '1 ນາທີ',\n      mm: '%d ນາທີ',\n      h: '1 ຊົ່ວໂມງ',\n      hh: '%d ຊົ່ວໂມງ',\n      d: '1 ມື້',\n      dd: '%d ມື້',\n      M: '1 ເດືອນ',\n      MM: '%d ເດືອນ',\n      y: '1 ປີ',\n      yy: '%d ປີ'\n    },\n    dayOfMonthOrdinalParse: /(ທີ່)\\d{1,2}/,\n    ordinal: function ordinal(number) {\n      return 'ທີ່' + number;\n    }\n  });\n  return lo;\n});","function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n//! moment.js locale configuration\n;\n\n(function (global, factory) {\n  (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  var units = {\n    'ss': 'sekundė_sekundžių_sekundes',\n    'm': 'minutė_minutės_minutę',\n    'mm': 'minutės_minučių_minutes',\n    'h': 'valanda_valandos_valandą',\n    'hh': 'valandos_valandų_valandas',\n    'd': 'diena_dienos_dieną',\n    'dd': 'dienos_dienų_dienas',\n    'M': 'mėnuo_mėnesio_mėnesį',\n    'MM': 'mėnesiai_mėnesių_mėnesius',\n    'y': 'metai_metų_metus',\n    'yy': 'metai_metų_metus'\n  };\n\n  function translateSeconds(number, withoutSuffix, key, isFuture) {\n    if (withoutSuffix) {\n      return 'kelios sekundės';\n    } else {\n      return isFuture ? 'kelių sekundžių' : 'kelias sekundes';\n    }\n  }\n\n  function translateSingular(number, withoutSuffix, key, isFuture) {\n    return withoutSuffix ? forms(key)[0] : isFuture ? forms(key)[1] : forms(key)[2];\n  }\n\n  function special(number) {\n    return number % 10 === 0 || number > 10 && number < 20;\n  }\n\n  function forms(key) {\n    return units[key].split('_');\n  }\n\n  function translate(number, withoutSuffix, key, isFuture) {\n    var result = number + ' ';\n\n    if (number === 1) {\n      return result + translateSingular(number, withoutSuffix, key[0], isFuture);\n    } else if (withoutSuffix) {\n      return result + (special(number) ? forms(key)[1] : forms(key)[0]);\n    } else {\n      if (isFuture) {\n        return result + forms(key)[1];\n      } else {\n        return result + (special(number) ? forms(key)[1] : forms(key)[2]);\n      }\n    }\n  }\n\n  var lt = moment.defineLocale('lt', {\n    months: {\n      format: 'sausio_vasario_kovo_balandžio_gegužės_birželio_liepos_rugpjūčio_rugsėjo_spalio_lapkričio_gruodžio'.split('_'),\n      standalone: 'sausis_vasaris_kovas_balandis_gegužė_birželis_liepa_rugpjūtis_rugsėjis_spalis_lapkritis_gruodis'.split('_'),\n      isFormat: /D[oD]?(\\[[^\\[\\]]*\\]|\\s)+MMMM?|MMMM?(\\[[^\\[\\]]*\\]|\\s)+D[oD]?/\n    },\n    monthsShort: 'sau_vas_kov_bal_geg_bir_lie_rgp_rgs_spa_lap_grd'.split('_'),\n    weekdays: {\n      format: 'sekmadienį_pirmadienį_antradienį_trečiadienį_ketvirtadienį_penktadienį_šeštadienį'.split('_'),\n      standalone: 'sekmadienis_pirmadienis_antradienis_trečiadienis_ketvirtadienis_penktadienis_šeštadienis'.split('_'),\n      isFormat: /dddd HH:mm/\n    },\n    weekdaysShort: 'Sek_Pir_Ant_Tre_Ket_Pen_Šeš'.split('_'),\n    weekdaysMin: 'S_P_A_T_K_Pn_Š'.split('_'),\n    weekdaysParseExact: true,\n    longDateFormat: {\n      LT: 'HH:mm',\n      LTS: 'HH:mm:ss',\n      L: 'YYYY-MM-DD',\n      LL: 'YYYY [m.] MMMM D [d.]',\n      LLL: 'YYYY [m.] MMMM D [d.], HH:mm [val.]',\n      LLLL: 'YYYY [m.] MMMM D [d.], dddd, HH:mm [val.]',\n      l: 'YYYY-MM-DD',\n      ll: 'YYYY [m.] MMMM D [d.]',\n      lll: 'YYYY [m.] MMMM D [d.], HH:mm [val.]',\n      llll: 'YYYY [m.] MMMM D [d.], ddd, HH:mm [val.]'\n    },\n    calendar: {\n      sameDay: '[Šiandien] LT',\n      nextDay: '[Rytoj] LT',\n      nextWeek: 'dddd LT',\n      lastDay: '[Vakar] LT',\n      lastWeek: '[Praėjusį] dddd LT',\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: 'po %s',\n      past: 'prieš %s',\n      s: translateSeconds,\n      ss: translate,\n      m: translateSingular,\n      mm: translate,\n      h: translateSingular,\n      hh: translate,\n      d: translateSingular,\n      dd: translate,\n      M: translateSingular,\n      MM: translate,\n      y: translateSingular,\n      yy: translate\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}-oji/,\n    ordinal: function ordinal(number) {\n      return number + '-oji';\n    },\n    week: {\n      dow: 1,\n      // Monday is the first day of the week.\n      doy: 4 // The week that contains Jan 4th is the first week of the year.\n\n    }\n  });\n  return lt;\n});","function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n//! moment.js locale configuration\n;\n\n(function (global, factory) {\n  (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  var units = {\n    'ss': 'sekundes_sekundēm_sekunde_sekundes'.split('_'),\n    'm': 'minūtes_minūtēm_minūte_minūtes'.split('_'),\n    'mm': 'minūtes_minūtēm_minūte_minūtes'.split('_'),\n    'h': 'stundas_stundām_stunda_stundas'.split('_'),\n    'hh': 'stundas_stundām_stunda_stundas'.split('_'),\n    'd': 'dienas_dienām_diena_dienas'.split('_'),\n    'dd': 'dienas_dienām_diena_dienas'.split('_'),\n    'M': 'mēneša_mēnešiem_mēnesis_mēneši'.split('_'),\n    'MM': 'mēneša_mēnešiem_mēnesis_mēneši'.split('_'),\n    'y': 'gada_gadiem_gads_gadi'.split('_'),\n    'yy': 'gada_gadiem_gads_gadi'.split('_')\n  };\n  /**\n   * @param withoutSuffix boolean true = a length of time; false = before/after a period of time.\n   */\n\n  function format(forms, number, withoutSuffix) {\n    if (withoutSuffix) {\n      // E.g. \"21 minūte\", \"3 minūtes\".\n      return number % 10 === 1 && number % 100 !== 11 ? forms[2] : forms[3];\n    } else {\n      // E.g. \"21 minūtes\" as in \"pēc 21 minūtes\".\n      // E.g. \"3 minūtēm\" as in \"pēc 3 minūtēm\".\n      return number % 10 === 1 && number % 100 !== 11 ? forms[0] : forms[1];\n    }\n  }\n\n  function relativeTimeWithPlural(number, withoutSuffix, key) {\n    return number + ' ' + format(units[key], number, withoutSuffix);\n  }\n\n  function relativeTimeWithSingular(number, withoutSuffix, key) {\n    return format(units[key], number, withoutSuffix);\n  }\n\n  function relativeSeconds(number, withoutSuffix) {\n    return withoutSuffix ? 'dažas sekundes' : 'dažām sekundēm';\n  }\n\n  var lv = moment.defineLocale('lv', {\n    months: 'janvāris_februāris_marts_aprīlis_maijs_jūnijs_jūlijs_augusts_septembris_oktobris_novembris_decembris'.split('_'),\n    monthsShort: 'jan_feb_mar_apr_mai_jūn_jūl_aug_sep_okt_nov_dec'.split('_'),\n    weekdays: 'svētdiena_pirmdiena_otrdiena_trešdiena_ceturtdiena_piektdiena_sestdiena'.split('_'),\n    weekdaysShort: 'Sv_P_O_T_C_Pk_S'.split('_'),\n    weekdaysMin: 'Sv_P_O_T_C_Pk_S'.split('_'),\n    weekdaysParseExact: true,\n    longDateFormat: {\n      LT: 'HH:mm',\n      LTS: 'HH:mm:ss',\n      L: 'DD.MM.YYYY.',\n      LL: 'YYYY. [gada] D. MMMM',\n      LLL: 'YYYY. [gada] D. MMMM, HH:mm',\n      LLLL: 'YYYY. [gada] D. MMMM, dddd, HH:mm'\n    },\n    calendar: {\n      sameDay: '[Šodien pulksten] LT',\n      nextDay: '[Rīt pulksten] LT',\n      nextWeek: 'dddd [pulksten] LT',\n      lastDay: '[Vakar pulksten] LT',\n      lastWeek: '[Pagājušā] dddd [pulksten] LT',\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: 'pēc %s',\n      past: 'pirms %s',\n      s: relativeSeconds,\n      ss: relativeTimeWithPlural,\n      m: relativeTimeWithSingular,\n      mm: relativeTimeWithPlural,\n      h: relativeTimeWithSingular,\n      hh: relativeTimeWithPlural,\n      d: relativeTimeWithSingular,\n      dd: relativeTimeWithPlural,\n      M: relativeTimeWithSingular,\n      MM: relativeTimeWithPlural,\n      y: relativeTimeWithSingular,\n      yy: relativeTimeWithPlural\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n    ordinal: '%d.',\n    week: {\n      dow: 1,\n      // Monday is the first day of the week.\n      doy: 4 // The week that contains Jan 4th is the first week of the year.\n\n    }\n  });\n  return lv;\n});","function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n//! moment.js locale configuration\n;\n\n(function (global, factory) {\n  (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  var translator = {\n    words: {\n      //Different grammatical cases\n      ss: ['sekund', 'sekunda', 'sekundi'],\n      m: ['jedan minut', 'jednog minuta'],\n      mm: ['minut', 'minuta', 'minuta'],\n      h: ['jedan sat', 'jednog sata'],\n      hh: ['sat', 'sata', 'sati'],\n      dd: ['dan', 'dana', 'dana'],\n      MM: ['mjesec', 'mjeseca', 'mjeseci'],\n      yy: ['godina', 'godine', 'godina']\n    },\n    correctGrammaticalCase: function correctGrammaticalCase(number, wordKey) {\n      return number === 1 ? wordKey[0] : number >= 2 && number <= 4 ? wordKey[1] : wordKey[2];\n    },\n    translate: function translate(number, withoutSuffix, key) {\n      var wordKey = translator.words[key];\n\n      if (key.length === 1) {\n        return withoutSuffix ? wordKey[0] : wordKey[1];\n      } else {\n        return number + ' ' + translator.correctGrammaticalCase(number, wordKey);\n      }\n    }\n  };\n  var me = moment.defineLocale('me', {\n    months: 'januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar'.split('_'),\n    monthsShort: 'jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.'.split('_'),\n    monthsParseExact: true,\n    weekdays: 'nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota'.split('_'),\n    weekdaysShort: 'ned._pon._uto._sri._čet._pet._sub.'.split('_'),\n    weekdaysMin: 'ne_po_ut_sr_če_pe_su'.split('_'),\n    weekdaysParseExact: true,\n    longDateFormat: {\n      LT: 'H:mm',\n      LTS: 'H:mm:ss',\n      L: 'DD.MM.YYYY',\n      LL: 'D. MMMM YYYY',\n      LLL: 'D. MMMM YYYY H:mm',\n      LLLL: 'dddd, D. MMMM YYYY H:mm'\n    },\n    calendar: {\n      sameDay: '[danas u] LT',\n      nextDay: '[sjutra u] LT',\n      nextWeek: function nextWeek() {\n        switch (this.day()) {\n          case 0:\n            return '[u] [nedjelju] [u] LT';\n\n          case 3:\n            return '[u] [srijedu] [u] LT';\n\n          case 6:\n            return '[u] [subotu] [u] LT';\n\n          case 1:\n          case 2:\n          case 4:\n          case 5:\n            return '[u] dddd [u] LT';\n        }\n      },\n      lastDay: '[juče u] LT',\n      lastWeek: function lastWeek() {\n        var lastWeekDays = ['[prošle] [nedjelje] [u] LT', '[prošlog] [ponedjeljka] [u] LT', '[prošlog] [utorka] [u] LT', '[prošle] [srijede] [u] LT', '[prošlog] [četvrtka] [u] LT', '[prošlog] [petka] [u] LT', '[prošle] [subote] [u] LT'];\n        return lastWeekDays[this.day()];\n      },\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: 'za %s',\n      past: 'prije %s',\n      s: 'nekoliko sekundi',\n      ss: translator.translate,\n      m: translator.translate,\n      mm: translator.translate,\n      h: translator.translate,\n      hh: translator.translate,\n      d: 'dan',\n      dd: translator.translate,\n      M: 'mjesec',\n      MM: translator.translate,\n      y: 'godinu',\n      yy: translator.translate\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n    ordinal: '%d.',\n    week: {\n      dow: 1,\n      // Monday is the first day of the week.\n      doy: 7 // The week that contains Jan 7th is the first week of the year.\n\n    }\n  });\n  return me;\n});","function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n//! moment.js locale configuration\n;\n\n(function (global, factory) {\n  (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  var mi = moment.defineLocale('mi', {\n    months: 'Kohi-tāte_Hui-tanguru_Poutū-te-rangi_Paenga-whāwhā_Haratua_Pipiri_Hōngoingoi_Here-turi-kōkā_Mahuru_Whiringa-ā-nuku_Whiringa-ā-rangi_Hakihea'.split('_'),\n    monthsShort: 'Kohi_Hui_Pou_Pae_Hara_Pipi_Hōngoi_Here_Mahu_Whi-nu_Whi-ra_Haki'.split('_'),\n    monthsRegex: /(?:['a-z\\u0101\\u014D\\u016B]+\\-?){1,3}/i,\n    monthsStrictRegex: /(?:['a-z\\u0101\\u014D\\u016B]+\\-?){1,3}/i,\n    monthsShortRegex: /(?:['a-z\\u0101\\u014D\\u016B]+\\-?){1,3}/i,\n    monthsShortStrictRegex: /(?:['a-z\\u0101\\u014D\\u016B]+\\-?){1,2}/i,\n    weekdays: 'Rātapu_Mane_Tūrei_Wenerei_Tāite_Paraire_Hātarei'.split('_'),\n    weekdaysShort: 'Ta_Ma_Tū_We_Tāi_Pa_Hā'.split('_'),\n    weekdaysMin: 'Ta_Ma_Tū_We_Tāi_Pa_Hā'.split('_'),\n    longDateFormat: {\n      LT: 'HH:mm',\n      LTS: 'HH:mm:ss',\n      L: 'DD/MM/YYYY',\n      LL: 'D MMMM YYYY',\n      LLL: 'D MMMM YYYY [i] HH:mm',\n      LLLL: 'dddd, D MMMM YYYY [i] HH:mm'\n    },\n    calendar: {\n      sameDay: '[i teie mahana, i] LT',\n      nextDay: '[apopo i] LT',\n      nextWeek: 'dddd [i] LT',\n      lastDay: '[inanahi i] LT',\n      lastWeek: 'dddd [whakamutunga i] LT',\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: 'i roto i %s',\n      past: '%s i mua',\n      s: 'te hēkona ruarua',\n      ss: '%d hēkona',\n      m: 'he meneti',\n      mm: '%d meneti',\n      h: 'te haora',\n      hh: '%d haora',\n      d: 'he ra',\n      dd: '%d ra',\n      M: 'he marama',\n      MM: '%d marama',\n      y: 'he tau',\n      yy: '%d tau'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}º/,\n    ordinal: '%dº',\n    week: {\n      dow: 1,\n      // Monday is the first day of the week.\n      doy: 4 // The week that contains Jan 4th is the first week of the year.\n\n    }\n  });\n  return mi;\n});","function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n//! moment.js locale configuration\n;\n\n(function (global, factory) {\n  (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  var mk = moment.defineLocale('mk', {\n    months: 'јануари_февруари_март_април_мај_јуни_јули_август_септември_октомври_ноември_декември'.split('_'),\n    monthsShort: 'јан_фев_мар_апр_мај_јун_јул_авг_сеп_окт_ное_дек'.split('_'),\n    weekdays: 'недела_понеделник_вторник_среда_четврток_петок_сабота'.split('_'),\n    weekdaysShort: 'нед_пон_вто_сре_чет_пет_саб'.split('_'),\n    weekdaysMin: 'нe_пo_вт_ср_че_пе_сa'.split('_'),\n    longDateFormat: {\n      LT: 'H:mm',\n      LTS: 'H:mm:ss',\n      L: 'D.MM.YYYY',\n      LL: 'D MMMM YYYY',\n      LLL: 'D MMMM YYYY H:mm',\n      LLLL: 'dddd, D MMMM YYYY H:mm'\n    },\n    calendar: {\n      sameDay: '[Денес во] LT',\n      nextDay: '[Утре во] LT',\n      nextWeek: '[Во] dddd [во] LT',\n      lastDay: '[Вчера во] LT',\n      lastWeek: function lastWeek() {\n        switch (this.day()) {\n          case 0:\n          case 3:\n          case 6:\n            return '[Изминатата] dddd [во] LT';\n\n          case 1:\n          case 2:\n          case 4:\n          case 5:\n            return '[Изминатиот] dddd [во] LT';\n        }\n      },\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: 'после %s',\n      past: 'пред %s',\n      s: 'неколку секунди',\n      ss: '%d секунди',\n      m: 'минута',\n      mm: '%d минути',\n      h: 'час',\n      hh: '%d часа',\n      d: 'ден',\n      dd: '%d дена',\n      M: 'месец',\n      MM: '%d месеци',\n      y: 'година',\n      yy: '%d години'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}-(ев|ен|ти|ви|ри|ми)/,\n    ordinal: function ordinal(number) {\n      var lastDigit = number % 10,\n          last2Digits = number % 100;\n\n      if (number === 0) {\n        return number + '-ев';\n      } else if (last2Digits === 0) {\n        return number + '-ен';\n      } else if (last2Digits > 10 && last2Digits < 20) {\n        return number + '-ти';\n      } else if (lastDigit === 1) {\n        return number + '-ви';\n      } else if (lastDigit === 2) {\n        return number + '-ри';\n      } else if (lastDigit === 7 || lastDigit === 8) {\n        return number + '-ми';\n      } else {\n        return number + '-ти';\n      }\n    },\n    week: {\n      dow: 1,\n      // Monday is the first day of the week.\n      doy: 7 // The week that contains Jan 7th is the first week of the year.\n\n    }\n  });\n  return mk;\n});","function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n//! moment.js locale configuration\n;\n\n(function (global, factory) {\n  (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  var ml = moment.defineLocale('ml', {\n    months: 'ജനുവരി_ഫെബ്രുവരി_മാർച്ച്_ഏപ്രിൽ_മേയ്_ജൂൺ_ജൂലൈ_ഓഗസ്റ്റ്_സെപ്റ്റംബർ_ഒക്ടോബർ_നവംബർ_ഡിസംബർ'.split('_'),\n    monthsShort: 'ജനു._ഫെബ്രു._മാർ._ഏപ്രി._മേയ്_ജൂൺ_ജൂലൈ._ഓഗ._സെപ്റ്റ._ഒക്ടോ._നവം._ഡിസം.'.split('_'),\n    monthsParseExact: true,\n    weekdays: 'ഞായറാഴ്ച_തിങ്കളാഴ്ച_ചൊവ്വാഴ്ച_ബുധനാഴ്ച_വ്യാഴാഴ്ച_വെള്ളിയാഴ്ച_ശനിയാഴ്ച'.split('_'),\n    weekdaysShort: 'ഞായർ_തിങ്കൾ_ചൊവ്വ_ബുധൻ_വ്യാഴം_വെള്ളി_ശനി'.split('_'),\n    weekdaysMin: 'ഞാ_തി_ചൊ_ബു_വ്യാ_വെ_ശ'.split('_'),\n    longDateFormat: {\n      LT: 'A h:mm -നു',\n      LTS: 'A h:mm:ss -നു',\n      L: 'DD/MM/YYYY',\n      LL: 'D MMMM YYYY',\n      LLL: 'D MMMM YYYY, A h:mm -നു',\n      LLLL: 'dddd, D MMMM YYYY, A h:mm -നു'\n    },\n    calendar: {\n      sameDay: '[ഇന്ന്] LT',\n      nextDay: '[നാളെ] LT',\n      nextWeek: 'dddd, LT',\n      lastDay: '[ഇന്നലെ] LT',\n      lastWeek: '[കഴിഞ്ഞ] dddd, LT',\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: '%s കഴിഞ്ഞ്',\n      past: '%s മുൻപ്',\n      s: 'അൽപ നിമിഷങ്ങൾ',\n      ss: '%d സെക്കൻഡ്',\n      m: 'ഒരു മിനിറ്റ്',\n      mm: '%d മിനിറ്റ്',\n      h: 'ഒരു മണിക്കൂർ',\n      hh: '%d മണിക്കൂർ',\n      d: 'ഒരു ദിവസം',\n      dd: '%d ദിവസം',\n      M: 'ഒരു മാസം',\n      MM: '%d മാസം',\n      y: 'ഒരു വർഷം',\n      yy: '%d വർഷം'\n    },\n    meridiemParse: /രാത്രി|രാവിലെ|ഉച്ച കഴിഞ്ഞ്|വൈകുന്നേരം|രാത്രി/i,\n    meridiemHour: function meridiemHour(hour, meridiem) {\n      if (hour === 12) {\n        hour = 0;\n      }\n\n      if (meridiem === 'രാത്രി' && hour >= 4 || meridiem === 'ഉച്ച കഴിഞ്ഞ്' || meridiem === 'വൈകുന്നേരം') {\n        return hour + 12;\n      } else {\n        return hour;\n      }\n    },\n    meridiem: function meridiem(hour, minute, isLower) {\n      if (hour < 4) {\n        return 'രാത്രി';\n      } else if (hour < 12) {\n        return 'രാവിലെ';\n      } else if (hour < 17) {\n        return 'ഉച്ച കഴിഞ്ഞ്';\n      } else if (hour < 20) {\n        return 'വൈകുന്നേരം';\n      } else {\n        return 'രാത്രി';\n      }\n    }\n  });\n  return ml;\n});","function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n//! moment.js locale configuration\n;\n\n(function (global, factory) {\n  (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  function translate(number, withoutSuffix, key, isFuture) {\n    switch (key) {\n      case 's':\n        return withoutSuffix ? 'хэдхэн секунд' : 'хэдхэн секундын';\n\n      case 'ss':\n        return number + (withoutSuffix ? ' секунд' : ' секундын');\n\n      case 'm':\n      case 'mm':\n        return number + (withoutSuffix ? ' минут' : ' минутын');\n\n      case 'h':\n      case 'hh':\n        return number + (withoutSuffix ? ' цаг' : ' цагийн');\n\n      case 'd':\n      case 'dd':\n        return number + (withoutSuffix ? ' өдөр' : ' өдрийн');\n\n      case 'M':\n      case 'MM':\n        return number + (withoutSuffix ? ' сар' : ' сарын');\n\n      case 'y':\n      case 'yy':\n        return number + (withoutSuffix ? ' жил' : ' жилийн');\n\n      default:\n        return number;\n    }\n  }\n\n  var mn = moment.defineLocale('mn', {\n    months: 'Нэгдүгээр сар_Хоёрдугаар сар_Гуравдугаар сар_Дөрөвдүгээр сар_Тавдугаар сар_Зургадугаар сар_Долдугаар сар_Наймдугаар сар_Есдүгээр сар_Аравдугаар сар_Арван нэгдүгээр сар_Арван хоёрдугаар сар'.split('_'),\n    monthsShort: '1 сар_2 сар_3 сар_4 сар_5 сар_6 сар_7 сар_8 сар_9 сар_10 сар_11 сар_12 сар'.split('_'),\n    monthsParseExact: true,\n    weekdays: 'Ням_Даваа_Мягмар_Лхагва_Пүрэв_Баасан_Бямба'.split('_'),\n    weekdaysShort: 'Ням_Дав_Мяг_Лха_Пүр_Баа_Бям'.split('_'),\n    weekdaysMin: 'Ня_Да_Мя_Лх_Пү_Ба_Бя'.split('_'),\n    weekdaysParseExact: true,\n    longDateFormat: {\n      LT: 'HH:mm',\n      LTS: 'HH:mm:ss',\n      L: 'YYYY-MM-DD',\n      LL: 'YYYY оны MMMMын D',\n      LLL: 'YYYY оны MMMMын D HH:mm',\n      LLLL: 'dddd, YYYY оны MMMMын D HH:mm'\n    },\n    meridiemParse: /ҮӨ|ҮХ/i,\n    isPM: function isPM(input) {\n      return input === 'ҮХ';\n    },\n    meridiem: function meridiem(hour, minute, isLower) {\n      if (hour < 12) {\n        return 'ҮӨ';\n      } else {\n        return 'ҮХ';\n      }\n    },\n    calendar: {\n      sameDay: '[Өнөөдөр] LT',\n      nextDay: '[Маргааш] LT',\n      nextWeek: '[Ирэх] dddd LT',\n      lastDay: '[Өчигдөр] LT',\n      lastWeek: '[Өнгөрсөн] dddd LT',\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: '%s дараа',\n      past: '%s өмнө',\n      s: translate,\n      ss: translate,\n      m: translate,\n      mm: translate,\n      h: translate,\n      hh: translate,\n      d: translate,\n      dd: translate,\n      M: translate,\n      MM: translate,\n      y: translate,\n      yy: translate\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2} өдөр/,\n    ordinal: function ordinal(number, period) {\n      switch (period) {\n        case 'd':\n        case 'D':\n        case 'DDD':\n          return number + ' өдөр';\n\n        default:\n          return number;\n      }\n    }\n  });\n  return mn;\n});","function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n//! moment.js locale configuration\n;\n\n(function (global, factory) {\n  (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  var symbolMap = {\n    '1': '१',\n    '2': '२',\n    '3': '३',\n    '4': '४',\n    '5': '५',\n    '6': '६',\n    '7': '७',\n    '8': '८',\n    '9': '९',\n    '0': '०'\n  },\n      numberMap = {\n    '१': '1',\n    '२': '2',\n    '३': '3',\n    '४': '4',\n    '५': '5',\n    '६': '6',\n    '७': '7',\n    '८': '8',\n    '९': '9',\n    '०': '0'\n  };\n\n  function relativeTimeMr(number, withoutSuffix, string, isFuture) {\n    var output = '';\n\n    if (withoutSuffix) {\n      switch (string) {\n        case 's':\n          output = 'काही सेकंद';\n          break;\n\n        case 'ss':\n          output = '%d सेकंद';\n          break;\n\n        case 'm':\n          output = 'एक मिनिट';\n          break;\n\n        case 'mm':\n          output = '%d मिनिटे';\n          break;\n\n        case 'h':\n          output = 'एक तास';\n          break;\n\n        case 'hh':\n          output = '%d तास';\n          break;\n\n        case 'd':\n          output = 'एक दिवस';\n          break;\n\n        case 'dd':\n          output = '%d दिवस';\n          break;\n\n        case 'M':\n          output = 'एक महिना';\n          break;\n\n        case 'MM':\n          output = '%d महिने';\n          break;\n\n        case 'y':\n          output = 'एक वर्ष';\n          break;\n\n        case 'yy':\n          output = '%d वर्षे';\n          break;\n      }\n    } else {\n      switch (string) {\n        case 's':\n          output = 'काही सेकंदां';\n          break;\n\n        case 'ss':\n          output = '%d सेकंदां';\n          break;\n\n        case 'm':\n          output = 'एका मिनिटा';\n          break;\n\n        case 'mm':\n          output = '%d मिनिटां';\n          break;\n\n        case 'h':\n          output = 'एका तासा';\n          break;\n\n        case 'hh':\n          output = '%d तासां';\n          break;\n\n        case 'd':\n          output = 'एका दिवसा';\n          break;\n\n        case 'dd':\n          output = '%d दिवसां';\n          break;\n\n        case 'M':\n          output = 'एका महिन्या';\n          break;\n\n        case 'MM':\n          output = '%d महिन्यां';\n          break;\n\n        case 'y':\n          output = 'एका वर्षा';\n          break;\n\n        case 'yy':\n          output = '%d वर्षां';\n          break;\n      }\n    }\n\n    return output.replace(/%d/i, number);\n  }\n\n  var mr = moment.defineLocale('mr', {\n    months: 'जानेवारी_फेब्रुवारी_मार्च_एप्रिल_मे_जून_जुलै_ऑगस्ट_सप्टेंबर_ऑक्टोबर_नोव्हेंबर_डिसेंबर'.split('_'),\n    monthsShort: 'जाने._फेब्रु._मार्च._एप्रि._मे._जून._जुलै._ऑग._सप्टें._ऑक्टो._नोव्हें._डिसें.'.split('_'),\n    monthsParseExact: true,\n    weekdays: 'रविवार_सोमवार_मंगळवार_बुधवार_गुरूवार_शुक्रवार_शनिवार'.split('_'),\n    weekdaysShort: 'रवि_सोम_मंगळ_बुध_गुरू_शुक्र_शनि'.split('_'),\n    weekdaysMin: 'र_सो_मं_बु_गु_शु_श'.split('_'),\n    longDateFormat: {\n      LT: 'A h:mm वाजता',\n      LTS: 'A h:mm:ss वाजता',\n      L: 'DD/MM/YYYY',\n      LL: 'D MMMM YYYY',\n      LLL: 'D MMMM YYYY, A h:mm वाजता',\n      LLLL: 'dddd, D MMMM YYYY, A h:mm वाजता'\n    },\n    calendar: {\n      sameDay: '[आज] LT',\n      nextDay: '[उद्या] LT',\n      nextWeek: 'dddd, LT',\n      lastDay: '[काल] LT',\n      lastWeek: '[मागील] dddd, LT',\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: '%sमध्ये',\n      past: '%sपूर्वी',\n      s: relativeTimeMr,\n      ss: relativeTimeMr,\n      m: relativeTimeMr,\n      mm: relativeTimeMr,\n      h: relativeTimeMr,\n      hh: relativeTimeMr,\n      d: relativeTimeMr,\n      dd: relativeTimeMr,\n      M: relativeTimeMr,\n      MM: relativeTimeMr,\n      y: relativeTimeMr,\n      yy: relativeTimeMr\n    },\n    preparse: function preparse(string) {\n      return string.replace(/[१२३४५६७८९०]/g, function (match) {\n        return numberMap[match];\n      });\n    },\n    postformat: function postformat(string) {\n      return string.replace(/\\d/g, function (match) {\n        return symbolMap[match];\n      });\n    },\n    meridiemParse: /रात्री|सकाळी|दुपारी|सायंकाळी/,\n    meridiemHour: function meridiemHour(hour, meridiem) {\n      if (hour === 12) {\n        hour = 0;\n      }\n\n      if (meridiem === 'रात्री') {\n        return hour < 4 ? hour : hour + 12;\n      } else if (meridiem === 'सकाळी') {\n        return hour;\n      } else if (meridiem === 'दुपारी') {\n        return hour >= 10 ? hour : hour + 12;\n      } else if (meridiem === 'सायंकाळी') {\n        return hour + 12;\n      }\n    },\n    meridiem: function meridiem(hour, minute, isLower) {\n      if (hour < 4) {\n        return 'रात्री';\n      } else if (hour < 10) {\n        return 'सकाळी';\n      } else if (hour < 17) {\n        return 'दुपारी';\n      } else if (hour < 20) {\n        return 'सायंकाळी';\n      } else {\n        return 'रात्री';\n      }\n    },\n    week: {\n      dow: 0,\n      // Sunday is the first day of the week.\n      doy: 6 // The week that contains Jan 6th is the first week of the year.\n\n    }\n  });\n  return mr;\n});","function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n//! moment.js locale configuration\n;\n\n(function (global, factory) {\n  (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  var ms = moment.defineLocale('ms', {\n    months: 'Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember'.split('_'),\n    monthsShort: 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis'.split('_'),\n    weekdays: 'Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu'.split('_'),\n    weekdaysShort: 'Ahd_Isn_Sel_Rab_Kha_Jum_Sab'.split('_'),\n    weekdaysMin: 'Ah_Is_Sl_Rb_Km_Jm_Sb'.split('_'),\n    longDateFormat: {\n      LT: 'HH.mm',\n      LTS: 'HH.mm.ss',\n      L: 'DD/MM/YYYY',\n      LL: 'D MMMM YYYY',\n      LLL: 'D MMMM YYYY [pukul] HH.mm',\n      LLLL: 'dddd, D MMMM YYYY [pukul] HH.mm'\n    },\n    meridiemParse: /pagi|tengahari|petang|malam/,\n    meridiemHour: function meridiemHour(hour, meridiem) {\n      if (hour === 12) {\n        hour = 0;\n      }\n\n      if (meridiem === 'pagi') {\n        return hour;\n      } else if (meridiem === 'tengahari') {\n        return hour >= 11 ? hour : hour + 12;\n      } else if (meridiem === 'petang' || meridiem === 'malam') {\n        return hour + 12;\n      }\n    },\n    meridiem: function meridiem(hours, minutes, isLower) {\n      if (hours < 11) {\n        return 'pagi';\n      } else if (hours < 15) {\n        return 'tengahari';\n      } else if (hours < 19) {\n        return 'petang';\n      } else {\n        return 'malam';\n      }\n    },\n    calendar: {\n      sameDay: '[Hari ini pukul] LT',\n      nextDay: '[Esok pukul] LT',\n      nextWeek: 'dddd [pukul] LT',\n      lastDay: '[Kelmarin pukul] LT',\n      lastWeek: 'dddd [lepas pukul] LT',\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: 'dalam %s',\n      past: '%s yang lepas',\n      s: 'beberapa saat',\n      ss: '%d saat',\n      m: 'seminit',\n      mm: '%d minit',\n      h: 'sejam',\n      hh: '%d jam',\n      d: 'sehari',\n      dd: '%d hari',\n      M: 'sebulan',\n      MM: '%d bulan',\n      y: 'setahun',\n      yy: '%d tahun'\n    },\n    week: {\n      dow: 1,\n      // Monday is the first day of the week.\n      doy: 7 // The week that contains Jan 7th is the first week of the year.\n\n    }\n  });\n  return ms;\n});","function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n//! moment.js locale configuration\n;\n\n(function (global, factory) {\n  (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  var msMy = moment.defineLocale('ms-my', {\n    months: 'Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember'.split('_'),\n    monthsShort: 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis'.split('_'),\n    weekdays: 'Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu'.split('_'),\n    weekdaysShort: 'Ahd_Isn_Sel_Rab_Kha_Jum_Sab'.split('_'),\n    weekdaysMin: 'Ah_Is_Sl_Rb_Km_Jm_Sb'.split('_'),\n    longDateFormat: {\n      LT: 'HH.mm',\n      LTS: 'HH.mm.ss',\n      L: 'DD/MM/YYYY',\n      LL: 'D MMMM YYYY',\n      LLL: 'D MMMM YYYY [pukul] HH.mm',\n      LLLL: 'dddd, D MMMM YYYY [pukul] HH.mm'\n    },\n    meridiemParse: /pagi|tengahari|petang|malam/,\n    meridiemHour: function meridiemHour(hour, meridiem) {\n      if (hour === 12) {\n        hour = 0;\n      }\n\n      if (meridiem === 'pagi') {\n        return hour;\n      } else if (meridiem === 'tengahari') {\n        return hour >= 11 ? hour : hour + 12;\n      } else if (meridiem === 'petang' || meridiem === 'malam') {\n        return hour + 12;\n      }\n    },\n    meridiem: function meridiem(hours, minutes, isLower) {\n      if (hours < 11) {\n        return 'pagi';\n      } else if (hours < 15) {\n        return 'tengahari';\n      } else if (hours < 19) {\n        return 'petang';\n      } else {\n        return 'malam';\n      }\n    },\n    calendar: {\n      sameDay: '[Hari ini pukul] LT',\n      nextDay: '[Esok pukul] LT',\n      nextWeek: 'dddd [pukul] LT',\n      lastDay: '[Kelmarin pukul] LT',\n      lastWeek: 'dddd [lepas pukul] LT',\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: 'dalam %s',\n      past: '%s yang lepas',\n      s: 'beberapa saat',\n      ss: '%d saat',\n      m: 'seminit',\n      mm: '%d minit',\n      h: 'sejam',\n      hh: '%d jam',\n      d: 'sehari',\n      dd: '%d hari',\n      M: 'sebulan',\n      MM: '%d bulan',\n      y: 'setahun',\n      yy: '%d tahun'\n    },\n    week: {\n      dow: 1,\n      // Monday is the first day of the week.\n      doy: 7 // The week that contains Jan 7th is the first week of the year.\n\n    }\n  });\n  return msMy;\n});","function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n//! moment.js locale configuration\n;\n\n(function (global, factory) {\n  (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  var mt = moment.defineLocale('mt', {\n    months: 'Jannar_Frar_Marzu_April_Mejju_Ġunju_Lulju_Awwissu_Settembru_Ottubru_Novembru_Diċembru'.split('_'),\n    monthsShort: 'Jan_Fra_Mar_Apr_Mej_Ġun_Lul_Aww_Set_Ott_Nov_Diċ'.split('_'),\n    weekdays: 'Il-Ħadd_It-Tnejn_It-Tlieta_L-Erbgħa_Il-Ħamis_Il-Ġimgħa_Is-Sibt'.split('_'),\n    weekdaysShort: 'Ħad_Tne_Tli_Erb_Ħam_Ġim_Sib'.split('_'),\n    weekdaysMin: 'Ħa_Tn_Tl_Er_Ħa_Ġi_Si'.split('_'),\n    longDateFormat: {\n      LT: 'HH:mm',\n      LTS: 'HH:mm:ss',\n      L: 'DD/MM/YYYY',\n      LL: 'D MMMM YYYY',\n      LLL: 'D MMMM YYYY HH:mm',\n      LLLL: 'dddd, D MMMM YYYY HH:mm'\n    },\n    calendar: {\n      sameDay: '[Illum fil-]LT',\n      nextDay: '[Għada fil-]LT',\n      nextWeek: 'dddd [fil-]LT',\n      lastDay: '[Il-bieraħ fil-]LT',\n      lastWeek: 'dddd [li għadda] [fil-]LT',\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: 'f’ %s',\n      past: '%s ilu',\n      s: 'ftit sekondi',\n      ss: '%d sekondi',\n      m: 'minuta',\n      mm: '%d minuti',\n      h: 'siegħa',\n      hh: '%d siegħat',\n      d: 'ġurnata',\n      dd: '%d ġranet',\n      M: 'xahar',\n      MM: '%d xhur',\n      y: 'sena',\n      yy: '%d sni'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}º/,\n    ordinal: '%dº',\n    week: {\n      dow: 1,\n      // Monday is the first day of the week.\n      doy: 4 // The week that contains Jan 4th is the first week of the year.\n\n    }\n  });\n  return mt;\n});","function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n//! moment.js locale configuration\n;\n\n(function (global, factory) {\n  (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  var symbolMap = {\n    '1': '၁',\n    '2': '၂',\n    '3': '၃',\n    '4': '၄',\n    '5': '၅',\n    '6': '၆',\n    '7': '၇',\n    '8': '၈',\n    '9': '၉',\n    '0': '၀'\n  },\n      numberMap = {\n    '၁': '1',\n    '၂': '2',\n    '၃': '3',\n    '၄': '4',\n    '၅': '5',\n    '၆': '6',\n    '၇': '7',\n    '၈': '8',\n    '၉': '9',\n    '၀': '0'\n  };\n  var my = moment.defineLocale('my', {\n    months: 'ဇန်နဝါရီ_ဖေဖော်ဝါရီ_မတ်_ဧပြီ_မေ_ဇွန်_ဇူလိုင်_သြဂုတ်_စက်တင်ဘာ_အောက်တိုဘာ_နိုဝင်ဘာ_ဒီဇင်ဘာ'.split('_'),\n    monthsShort: 'ဇန်_ဖေ_မတ်_ပြီ_မေ_ဇွန်_လိုင်_သြ_စက်_အောက်_နို_ဒီ'.split('_'),\n    weekdays: 'တနင်္ဂနွေ_တနင်္လာ_အင်္ဂါ_ဗုဒ္ဓဟူး_ကြာသပတေး_သောကြာ_စနေ'.split('_'),\n    weekdaysShort: 'နွေ_လာ_ဂါ_ဟူး_ကြာ_သော_နေ'.split('_'),\n    weekdaysMin: 'နွေ_လာ_ဂါ_ဟူး_ကြာ_သော_နေ'.split('_'),\n    longDateFormat: {\n      LT: 'HH:mm',\n      LTS: 'HH:mm:ss',\n      L: 'DD/MM/YYYY',\n      LL: 'D MMMM YYYY',\n      LLL: 'D MMMM YYYY HH:mm',\n      LLLL: 'dddd D MMMM YYYY HH:mm'\n    },\n    calendar: {\n      sameDay: '[ယနေ.] LT [မှာ]',\n      nextDay: '[မနက်ဖြန်] LT [မှာ]',\n      nextWeek: 'dddd LT [မှာ]',\n      lastDay: '[မနေ.က] LT [မှာ]',\n      lastWeek: '[ပြီးခဲ့သော] dddd LT [မှာ]',\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: 'လာမည့် %s မှာ',\n      past: 'လွန်ခဲ့သော %s က',\n      s: 'စက္ကန်.အနည်းငယ်',\n      ss: '%d စက္ကန့်',\n      m: 'တစ်မိနစ်',\n      mm: '%d မိနစ်',\n      h: 'တစ်နာရီ',\n      hh: '%d နာရီ',\n      d: 'တစ်ရက်',\n      dd: '%d ရက်',\n      M: 'တစ်လ',\n      MM: '%d လ',\n      y: 'တစ်နှစ်',\n      yy: '%d နှစ်'\n    },\n    preparse: function preparse(string) {\n      return string.replace(/[၁၂၃၄၅၆၇၈၉၀]/g, function (match) {\n        return numberMap[match];\n      });\n    },\n    postformat: function postformat(string) {\n      return string.replace(/\\d/g, function (match) {\n        return symbolMap[match];\n      });\n    },\n    week: {\n      dow: 1,\n      // Monday is the first day of the week.\n      doy: 4 // The week that contains Jan 4th is the first week of the year.\n\n    }\n  });\n  return my;\n});","function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n//! moment.js locale configuration\n;\n\n(function (global, factory) {\n  (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  var nb = moment.defineLocale('nb', {\n    months: 'januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember'.split('_'),\n    monthsShort: 'jan._feb._mars_april_mai_juni_juli_aug._sep._okt._nov._des.'.split('_'),\n    monthsParseExact: true,\n    weekdays: 'søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag'.split('_'),\n    weekdaysShort: 'sø._ma._ti._on._to._fr._lø.'.split('_'),\n    weekdaysMin: 'sø_ma_ti_on_to_fr_lø'.split('_'),\n    weekdaysParseExact: true,\n    longDateFormat: {\n      LT: 'HH:mm',\n      LTS: 'HH:mm:ss',\n      L: 'DD.MM.YYYY',\n      LL: 'D. MMMM YYYY',\n      LLL: 'D. MMMM YYYY [kl.] HH:mm',\n      LLLL: 'dddd D. MMMM YYYY [kl.] HH:mm'\n    },\n    calendar: {\n      sameDay: '[i dag kl.] LT',\n      nextDay: '[i morgen kl.] LT',\n      nextWeek: 'dddd [kl.] LT',\n      lastDay: '[i går kl.] LT',\n      lastWeek: '[forrige] dddd [kl.] LT',\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: 'om %s',\n      past: '%s siden',\n      s: 'noen sekunder',\n      ss: '%d sekunder',\n      m: 'ett minutt',\n      mm: '%d minutter',\n      h: 'en time',\n      hh: '%d timer',\n      d: 'en dag',\n      dd: '%d dager',\n      M: 'en måned',\n      MM: '%d måneder',\n      y: 'ett år',\n      yy: '%d år'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n    ordinal: '%d.',\n    week: {\n      dow: 1,\n      // Monday is the first day of the week.\n      doy: 4 // The week that contains Jan 4th is the first week of the year.\n\n    }\n  });\n  return nb;\n});","function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n//! moment.js locale configuration\n;\n\n(function (global, factory) {\n  (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  var symbolMap = {\n    '1': '१',\n    '2': '२',\n    '3': '३',\n    '4': '४',\n    '5': '५',\n    '6': '६',\n    '7': '७',\n    '8': '८',\n    '9': '९',\n    '0': '०'\n  },\n      numberMap = {\n    '१': '1',\n    '२': '2',\n    '३': '3',\n    '४': '4',\n    '५': '5',\n    '६': '6',\n    '७': '7',\n    '८': '8',\n    '९': '9',\n    '०': '0'\n  };\n  var ne = moment.defineLocale('ne', {\n    months: 'जनवरी_फेब्रुवरी_मार्च_अप्रिल_मई_जुन_जुलाई_अगष्ट_सेप्टेम्बर_अक्टोबर_नोभेम्बर_डिसेम्बर'.split('_'),\n    monthsShort: 'जन._फेब्रु._मार्च_अप्रि._मई_जुन_जुलाई._अग._सेप्ट._अक्टो._नोभे._डिसे.'.split('_'),\n    monthsParseExact: true,\n    weekdays: 'आइतबार_सोमबार_मङ्गलबार_बुधबार_बिहिबार_शुक्रबार_शनिबार'.split('_'),\n    weekdaysShort: 'आइत._सोम._मङ्गल._बुध._बिहि._शुक्र._शनि.'.split('_'),\n    weekdaysMin: 'आ._सो._मं._बु._बि._शु._श.'.split('_'),\n    weekdaysParseExact: true,\n    longDateFormat: {\n      LT: 'Aको h:mm बजे',\n      LTS: 'Aको h:mm:ss बजे',\n      L: 'DD/MM/YYYY',\n      LL: 'D MMMM YYYY',\n      LLL: 'D MMMM YYYY, Aको h:mm बजे',\n      LLLL: 'dddd, D MMMM YYYY, Aको h:mm बजे'\n    },\n    preparse: function preparse(string) {\n      return string.replace(/[१२३४५६७८९०]/g, function (match) {\n        return numberMap[match];\n      });\n    },\n    postformat: function postformat(string) {\n      return string.replace(/\\d/g, function (match) {\n        return symbolMap[match];\n      });\n    },\n    meridiemParse: /राति|बिहान|दिउँसो|साँझ/,\n    meridiemHour: function meridiemHour(hour, meridiem) {\n      if (hour === 12) {\n        hour = 0;\n      }\n\n      if (meridiem === 'राति') {\n        return hour < 4 ? hour : hour + 12;\n      } else if (meridiem === 'बिहान') {\n        return hour;\n      } else if (meridiem === 'दिउँसो') {\n        return hour >= 10 ? hour : hour + 12;\n      } else if (meridiem === 'साँझ') {\n        return hour + 12;\n      }\n    },\n    meridiem: function meridiem(hour, minute, isLower) {\n      if (hour < 3) {\n        return 'राति';\n      } else if (hour < 12) {\n        return 'बिहान';\n      } else if (hour < 16) {\n        return 'दिउँसो';\n      } else if (hour < 20) {\n        return 'साँझ';\n      } else {\n        return 'राति';\n      }\n    },\n    calendar: {\n      sameDay: '[आज] LT',\n      nextDay: '[भोलि] LT',\n      nextWeek: '[आउँदो] dddd[,] LT',\n      lastDay: '[हिजो] LT',\n      lastWeek: '[गएको] dddd[,] LT',\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: '%sमा',\n      past: '%s अगाडि',\n      s: 'केही क्षण',\n      ss: '%d सेकेण्ड',\n      m: 'एक मिनेट',\n      mm: '%d मिनेट',\n      h: 'एक घण्टा',\n      hh: '%d घण्टा',\n      d: 'एक दिन',\n      dd: '%d दिन',\n      M: 'एक महिना',\n      MM: '%d महिना',\n      y: 'एक बर्ष',\n      yy: '%d बर्ष'\n    },\n    week: {\n      dow: 0,\n      // Sunday is the first day of the week.\n      doy: 6 // The week that contains Jan 6th is the first week of the year.\n\n    }\n  });\n  return ne;\n});","function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n//! moment.js locale configuration\n;\n\n(function (global, factory) {\n  (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  var monthsShortWithDots = 'jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.'.split('_'),\n      monthsShortWithoutDots = 'jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec'.split('_');\n  var monthsParse = [/^jan/i, /^feb/i, /^maart|mrt.?$/i, /^apr/i, /^mei$/i, /^jun[i.]?$/i, /^jul[i.]?$/i, /^aug/i, /^sep/i, /^okt/i, /^nov/i, /^dec/i];\n  var monthsRegex = /^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december|jan\\.?|feb\\.?|mrt\\.?|apr\\.?|ju[nl]\\.?|aug\\.?|sep\\.?|okt\\.?|nov\\.?|dec\\.?)/i;\n  var nl = moment.defineLocale('nl', {\n    months: 'januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december'.split('_'),\n    monthsShort: function monthsShort(m, format) {\n      if (!m) {\n        return monthsShortWithDots;\n      } else if (/-MMM-/.test(format)) {\n        return monthsShortWithoutDots[m.month()];\n      } else {\n        return monthsShortWithDots[m.month()];\n      }\n    },\n    monthsRegex: monthsRegex,\n    monthsShortRegex: monthsRegex,\n    monthsStrictRegex: /^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december)/i,\n    monthsShortStrictRegex: /^(jan\\.?|feb\\.?|mrt\\.?|apr\\.?|mei|ju[nl]\\.?|aug\\.?|sep\\.?|okt\\.?|nov\\.?|dec\\.?)/i,\n    monthsParse: monthsParse,\n    longMonthsParse: monthsParse,\n    shortMonthsParse: monthsParse,\n    weekdays: 'zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag'.split('_'),\n    weekdaysShort: 'zo._ma._di._wo._do._vr._za.'.split('_'),\n    weekdaysMin: 'zo_ma_di_wo_do_vr_za'.split('_'),\n    weekdaysParseExact: true,\n    longDateFormat: {\n      LT: 'HH:mm',\n      LTS: 'HH:mm:ss',\n      L: 'DD-MM-YYYY',\n      LL: 'D MMMM YYYY',\n      LLL: 'D MMMM YYYY HH:mm',\n      LLLL: 'dddd D MMMM YYYY HH:mm'\n    },\n    calendar: {\n      sameDay: '[vandaag om] LT',\n      nextDay: '[morgen om] LT',\n      nextWeek: 'dddd [om] LT',\n      lastDay: '[gisteren om] LT',\n      lastWeek: '[afgelopen] dddd [om] LT',\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: 'over %s',\n      past: '%s geleden',\n      s: 'een paar seconden',\n      ss: '%d seconden',\n      m: 'één minuut',\n      mm: '%d minuten',\n      h: 'één uur',\n      hh: '%d uur',\n      d: 'één dag',\n      dd: '%d dagen',\n      M: 'één maand',\n      MM: '%d maanden',\n      y: 'één jaar',\n      yy: '%d jaar'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}(ste|de)/,\n    ordinal: function ordinal(number) {\n      return number + (number === 1 || number === 8 || number >= 20 ? 'ste' : 'de');\n    },\n    week: {\n      dow: 1,\n      // Monday is the first day of the week.\n      doy: 4 // The week that contains Jan 4th is the first week of the year.\n\n    }\n  });\n  return nl;\n});","function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n//! moment.js locale configuration\n;\n\n(function (global, factory) {\n  (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  var monthsShortWithDots = 'jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.'.split('_'),\n      monthsShortWithoutDots = 'jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec'.split('_');\n  var monthsParse = [/^jan/i, /^feb/i, /^maart|mrt.?$/i, /^apr/i, /^mei$/i, /^jun[i.]?$/i, /^jul[i.]?$/i, /^aug/i, /^sep/i, /^okt/i, /^nov/i, /^dec/i];\n  var monthsRegex = /^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december|jan\\.?|feb\\.?|mrt\\.?|apr\\.?|ju[nl]\\.?|aug\\.?|sep\\.?|okt\\.?|nov\\.?|dec\\.?)/i;\n  var nlBe = moment.defineLocale('nl-be', {\n    months: 'januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december'.split('_'),\n    monthsShort: function monthsShort(m, format) {\n      if (!m) {\n        return monthsShortWithDots;\n      } else if (/-MMM-/.test(format)) {\n        return monthsShortWithoutDots[m.month()];\n      } else {\n        return monthsShortWithDots[m.month()];\n      }\n    },\n    monthsRegex: monthsRegex,\n    monthsShortRegex: monthsRegex,\n    monthsStrictRegex: /^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december)/i,\n    monthsShortStrictRegex: /^(jan\\.?|feb\\.?|mrt\\.?|apr\\.?|mei|ju[nl]\\.?|aug\\.?|sep\\.?|okt\\.?|nov\\.?|dec\\.?)/i,\n    monthsParse: monthsParse,\n    longMonthsParse: monthsParse,\n    shortMonthsParse: monthsParse,\n    weekdays: 'zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag'.split('_'),\n    weekdaysShort: 'zo._ma._di._wo._do._vr._za.'.split('_'),\n    weekdaysMin: 'zo_ma_di_wo_do_vr_za'.split('_'),\n    weekdaysParseExact: true,\n    longDateFormat: {\n      LT: 'HH:mm',\n      LTS: 'HH:mm:ss',\n      L: 'DD/MM/YYYY',\n      LL: 'D MMMM YYYY',\n      LLL: 'D MMMM YYYY HH:mm',\n      LLLL: 'dddd D MMMM YYYY HH:mm'\n    },\n    calendar: {\n      sameDay: '[vandaag om] LT',\n      nextDay: '[morgen om] LT',\n      nextWeek: 'dddd [om] LT',\n      lastDay: '[gisteren om] LT',\n      lastWeek: '[afgelopen] dddd [om] LT',\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: 'over %s',\n      past: '%s geleden',\n      s: 'een paar seconden',\n      ss: '%d seconden',\n      m: 'één minuut',\n      mm: '%d minuten',\n      h: 'één uur',\n      hh: '%d uur',\n      d: 'één dag',\n      dd: '%d dagen',\n      M: 'één maand',\n      MM: '%d maanden',\n      y: 'één jaar',\n      yy: '%d jaar'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}(ste|de)/,\n    ordinal: function ordinal(number) {\n      return number + (number === 1 || number === 8 || number >= 20 ? 'ste' : 'de');\n    },\n    week: {\n      dow: 1,\n      // Monday is the first day of the week.\n      doy: 4 // The week that contains Jan 4th is the first week of the year.\n\n    }\n  });\n  return nlBe;\n});","function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n//! moment.js locale configuration\n;\n\n(function (global, factory) {\n  (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  var nn = moment.defineLocale('nn', {\n    months: 'januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember'.split('_'),\n    monthsShort: 'jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des'.split('_'),\n    weekdays: 'sundag_måndag_tysdag_onsdag_torsdag_fredag_laurdag'.split('_'),\n    weekdaysShort: 'sun_mån_tys_ons_tor_fre_lau'.split('_'),\n    weekdaysMin: 'su_må_ty_on_to_fr_lø'.split('_'),\n    longDateFormat: {\n      LT: 'HH:mm',\n      LTS: 'HH:mm:ss',\n      L: 'DD.MM.YYYY',\n      LL: 'D. MMMM YYYY',\n      LLL: 'D. MMMM YYYY [kl.] H:mm',\n      LLLL: 'dddd D. MMMM YYYY [kl.] HH:mm'\n    },\n    calendar: {\n      sameDay: '[I dag klokka] LT',\n      nextDay: '[I morgon klokka] LT',\n      nextWeek: 'dddd [klokka] LT',\n      lastDay: '[I går klokka] LT',\n      lastWeek: '[Føregåande] dddd [klokka] LT',\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: 'om %s',\n      past: '%s sidan',\n      s: 'nokre sekund',\n      ss: '%d sekund',\n      m: 'eit minutt',\n      mm: '%d minutt',\n      h: 'ein time',\n      hh: '%d timar',\n      d: 'ein dag',\n      dd: '%d dagar',\n      M: 'ein månad',\n      MM: '%d månader',\n      y: 'eit år',\n      yy: '%d år'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n    ordinal: '%d.',\n    week: {\n      dow: 1,\n      // Monday is the first day of the week.\n      doy: 4 // The week that contains Jan 4th is the first week of the year.\n\n    }\n  });\n  return nn;\n});","function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n//! moment.js locale configuration\n;\n\n(function (global, factory) {\n  (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  var symbolMap = {\n    '1': '੧',\n    '2': '੨',\n    '3': '੩',\n    '4': '੪',\n    '5': '੫',\n    '6': '੬',\n    '7': '੭',\n    '8': '੮',\n    '9': '੯',\n    '0': '੦'\n  },\n      numberMap = {\n    '੧': '1',\n    '੨': '2',\n    '੩': '3',\n    '੪': '4',\n    '੫': '5',\n    '੬': '6',\n    '੭': '7',\n    '੮': '8',\n    '੯': '9',\n    '੦': '0'\n  };\n  var paIn = moment.defineLocale('pa-in', {\n    // There are months name as per Nanakshahi Calendar but they are not used as rigidly in modern Punjabi.\n    months: 'ਜਨਵਰੀ_ਫ਼ਰਵਰੀ_ਮਾਰਚ_ਅਪ੍ਰੈਲ_ਮਈ_ਜੂਨ_ਜੁਲਾਈ_ਅਗਸਤ_ਸਤੰਬਰ_ਅਕਤੂਬਰ_ਨਵੰਬਰ_ਦਸੰਬਰ'.split('_'),\n    monthsShort: 'ਜਨਵਰੀ_ਫ਼ਰਵਰੀ_ਮਾਰਚ_ਅਪ੍ਰੈਲ_ਮਈ_ਜੂਨ_ਜੁਲਾਈ_ਅਗਸਤ_ਸਤੰਬਰ_ਅਕਤੂਬਰ_ਨਵੰਬਰ_ਦਸੰਬਰ'.split('_'),\n    weekdays: 'ਐਤਵਾਰ_ਸੋਮਵਾਰ_ਮੰਗਲਵਾਰ_ਬੁਧਵਾਰ_ਵੀਰਵਾਰ_ਸ਼ੁੱਕਰਵਾਰ_ਸ਼ਨੀਚਰਵਾਰ'.split('_'),\n    weekdaysShort: 'ਐਤ_ਸੋਮ_ਮੰਗਲ_ਬੁਧ_ਵੀਰ_ਸ਼ੁਕਰ_ਸ਼ਨੀ'.split('_'),\n    weekdaysMin: 'ਐਤ_ਸੋਮ_ਮੰਗਲ_ਬੁਧ_ਵੀਰ_ਸ਼ੁਕਰ_ਸ਼ਨੀ'.split('_'),\n    longDateFormat: {\n      LT: 'A h:mm ਵਜੇ',\n      LTS: 'A h:mm:ss ਵਜੇ',\n      L: 'DD/MM/YYYY',\n      LL: 'D MMMM YYYY',\n      LLL: 'D MMMM YYYY, A h:mm ਵਜੇ',\n      LLLL: 'dddd, D MMMM YYYY, A h:mm ਵਜੇ'\n    },\n    calendar: {\n      sameDay: '[ਅਜ] LT',\n      nextDay: '[ਕਲ] LT',\n      nextWeek: '[ਅਗਲਾ] dddd, LT',\n      lastDay: '[ਕਲ] LT',\n      lastWeek: '[ਪਿਛਲੇ] dddd, LT',\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: '%s ਵਿੱਚ',\n      past: '%s ਪਿਛਲੇ',\n      s: 'ਕੁਝ ਸਕਿੰਟ',\n      ss: '%d ਸਕਿੰਟ',\n      m: 'ਇਕ ਮਿੰਟ',\n      mm: '%d ਮਿੰਟ',\n      h: 'ਇੱਕ ਘੰਟਾ',\n      hh: '%d ਘੰਟੇ',\n      d: 'ਇੱਕ ਦਿਨ',\n      dd: '%d ਦਿਨ',\n      M: 'ਇੱਕ ਮਹੀਨਾ',\n      MM: '%d ਮਹੀਨੇ',\n      y: 'ਇੱਕ ਸਾਲ',\n      yy: '%d ਸਾਲ'\n    },\n    preparse: function preparse(string) {\n      return string.replace(/[੧੨੩੪੫੬੭੮੯੦]/g, function (match) {\n        return numberMap[match];\n      });\n    },\n    postformat: function postformat(string) {\n      return string.replace(/\\d/g, function (match) {\n        return symbolMap[match];\n      });\n    },\n    // Punjabi notation for meridiems are quite fuzzy in practice. While there exists\n    // a rigid notion of a 'Pahar' it is not used as rigidly in modern Punjabi.\n    meridiemParse: /ਰਾਤ|ਸਵੇਰ|ਦੁਪਹਿਰ|ਸ਼ਾਮ/,\n    meridiemHour: function meridiemHour(hour, meridiem) {\n      if (hour === 12) {\n        hour = 0;\n      }\n\n      if (meridiem === 'ਰਾਤ') {\n        return hour < 4 ? hour : hour + 12;\n      } else if (meridiem === 'ਸਵੇਰ') {\n        return hour;\n      } else if (meridiem === 'ਦੁਪਹਿਰ') {\n        return hour >= 10 ? hour : hour + 12;\n      } else if (meridiem === 'ਸ਼ਾਮ') {\n        return hour + 12;\n      }\n    },\n    meridiem: function meridiem(hour, minute, isLower) {\n      if (hour < 4) {\n        return 'ਰਾਤ';\n      } else if (hour < 10) {\n        return 'ਸਵੇਰ';\n      } else if (hour < 17) {\n        return 'ਦੁਪਹਿਰ';\n      } else if (hour < 20) {\n        return 'ਸ਼ਾਮ';\n      } else {\n        return 'ਰਾਤ';\n      }\n    },\n    week: {\n      dow: 0,\n      // Sunday is the first day of the week.\n      doy: 6 // The week that contains Jan 6th is the first week of the year.\n\n    }\n  });\n  return paIn;\n});","function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n//! moment.js locale configuration\n;\n\n(function (global, factory) {\n  (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  var monthsNominative = 'styczeń_luty_marzec_kwiecień_maj_czerwiec_lipiec_sierpień_wrzesień_październik_listopad_grudzień'.split('_'),\n      monthsSubjective = 'stycznia_lutego_marca_kwietnia_maja_czerwca_lipca_sierpnia_września_października_listopada_grudnia'.split('_');\n\n  function plural(n) {\n    return n % 10 < 5 && n % 10 > 1 && ~~(n / 10) % 10 !== 1;\n  }\n\n  function translate(number, withoutSuffix, key) {\n    var result = number + ' ';\n\n    switch (key) {\n      case 'ss':\n        return result + (plural(number) ? 'sekundy' : 'sekund');\n\n      case 'm':\n        return withoutSuffix ? 'minuta' : 'minutę';\n\n      case 'mm':\n        return result + (plural(number) ? 'minuty' : 'minut');\n\n      case 'h':\n        return withoutSuffix ? 'godzina' : 'godzinę';\n\n      case 'hh':\n        return result + (plural(number) ? 'godziny' : 'godzin');\n\n      case 'MM':\n        return result + (plural(number) ? 'miesiące' : 'miesięcy');\n\n      case 'yy':\n        return result + (plural(number) ? 'lata' : 'lat');\n    }\n  }\n\n  var pl = moment.defineLocale('pl', {\n    months: function months(momentToFormat, format) {\n      if (!momentToFormat) {\n        return monthsNominative;\n      } else if (format === '') {\n        // Hack: if format empty we know this is used to generate\n        // RegExp by moment. Give then back both valid forms of months\n        // in RegExp ready format.\n        return '(' + monthsSubjective[momentToFormat.month()] + '|' + monthsNominative[momentToFormat.month()] + ')';\n      } else if (/D MMMM/.test(format)) {\n        return monthsSubjective[momentToFormat.month()];\n      } else {\n        return monthsNominative[momentToFormat.month()];\n      }\n    },\n    monthsShort: 'sty_lut_mar_kwi_maj_cze_lip_sie_wrz_paź_lis_gru'.split('_'),\n    weekdays: 'niedziela_poniedziałek_wtorek_środa_czwartek_piątek_sobota'.split('_'),\n    weekdaysShort: 'ndz_pon_wt_śr_czw_pt_sob'.split('_'),\n    weekdaysMin: 'Nd_Pn_Wt_Śr_Cz_Pt_So'.split('_'),\n    longDateFormat: {\n      LT: 'HH:mm',\n      LTS: 'HH:mm:ss',\n      L: 'DD.MM.YYYY',\n      LL: 'D MMMM YYYY',\n      LLL: 'D MMMM YYYY HH:mm',\n      LLLL: 'dddd, D MMMM YYYY HH:mm'\n    },\n    calendar: {\n      sameDay: '[Dziś o] LT',\n      nextDay: '[Jutro o] LT',\n      nextWeek: function nextWeek() {\n        switch (this.day()) {\n          case 0:\n            return '[W niedzielę o] LT';\n\n          case 2:\n            return '[We wtorek o] LT';\n\n          case 3:\n            return '[W środę o] LT';\n\n          case 6:\n            return '[W sobotę o] LT';\n\n          default:\n            return '[W] dddd [o] LT';\n        }\n      },\n      lastDay: '[Wczoraj o] LT',\n      lastWeek: function lastWeek() {\n        switch (this.day()) {\n          case 0:\n            return '[W zeszłą niedzielę o] LT';\n\n          case 3:\n            return '[W zeszłą środę o] LT';\n\n          case 6:\n            return '[W zeszłą sobotę o] LT';\n\n          default:\n            return '[W zeszły] dddd [o] LT';\n        }\n      },\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: 'za %s',\n      past: '%s temu',\n      s: 'kilka sekund',\n      ss: translate,\n      m: translate,\n      mm: translate,\n      h: translate,\n      hh: translate,\n      d: '1 dzień',\n      dd: '%d dni',\n      M: 'miesiąc',\n      MM: translate,\n      y: 'rok',\n      yy: translate\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n    ordinal: '%d.',\n    week: {\n      dow: 1,\n      // Monday is the first day of the week.\n      doy: 4 // The week that contains Jan 4th is the first week of the year.\n\n    }\n  });\n  return pl;\n});","function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n//! moment.js locale configuration\n;\n\n(function (global, factory) {\n  (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  var pt = moment.defineLocale('pt', {\n    months: 'Janeiro_Fevereiro_Março_Abril_Maio_Junho_Julho_Agosto_Setembro_Outubro_Novembro_Dezembro'.split('_'),\n    monthsShort: 'Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez'.split('_'),\n    weekdays: 'Domingo_Segunda-feira_Terça-feira_Quarta-feira_Quinta-feira_Sexta-feira_Sábado'.split('_'),\n    weekdaysShort: 'Dom_Seg_Ter_Qua_Qui_Sex_Sáb'.split('_'),\n    weekdaysMin: 'Do_2ª_3ª_4ª_5ª_6ª_Sá'.split('_'),\n    weekdaysParseExact: true,\n    longDateFormat: {\n      LT: 'HH:mm',\n      LTS: 'HH:mm:ss',\n      L: 'DD/MM/YYYY',\n      LL: 'D [de] MMMM [de] YYYY',\n      LLL: 'D [de] MMMM [de] YYYY HH:mm',\n      LLLL: 'dddd, D [de] MMMM [de] YYYY HH:mm'\n    },\n    calendar: {\n      sameDay: '[Hoje às] LT',\n      nextDay: '[Amanhã às] LT',\n      nextWeek: 'dddd [às] LT',\n      lastDay: '[Ontem às] LT',\n      lastWeek: function lastWeek() {\n        return this.day() === 0 || this.day() === 6 ? '[Último] dddd [às] LT' : // Saturday + Sunday\n        '[Última] dddd [às] LT'; // Monday - Friday\n      },\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: 'em %s',\n      past: 'há %s',\n      s: 'segundos',\n      ss: '%d segundos',\n      m: 'um minuto',\n      mm: '%d minutos',\n      h: 'uma hora',\n      hh: '%d horas',\n      d: 'um dia',\n      dd: '%d dias',\n      M: 'um mês',\n      MM: '%d meses',\n      y: 'um ano',\n      yy: '%d anos'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}º/,\n    ordinal: '%dº',\n    week: {\n      dow: 1,\n      // Monday is the first day of the week.\n      doy: 4 // The week that contains Jan 4th is the first week of the year.\n\n    }\n  });\n  return pt;\n});","function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n//! moment.js locale configuration\n;\n\n(function (global, factory) {\n  (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  var ptBr = moment.defineLocale('pt-br', {\n    months: 'Janeiro_Fevereiro_Março_Abril_Maio_Junho_Julho_Agosto_Setembro_Outubro_Novembro_Dezembro'.split('_'),\n    monthsShort: 'Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez'.split('_'),\n    weekdays: 'Domingo_Segunda-feira_Terça-feira_Quarta-feira_Quinta-feira_Sexta-feira_Sábado'.split('_'),\n    weekdaysShort: 'Dom_Seg_Ter_Qua_Qui_Sex_Sáb'.split('_'),\n    weekdaysMin: 'Do_2ª_3ª_4ª_5ª_6ª_Sá'.split('_'),\n    weekdaysParseExact: true,\n    longDateFormat: {\n      LT: 'HH:mm',\n      LTS: 'HH:mm:ss',\n      L: 'DD/MM/YYYY',\n      LL: 'D [de] MMMM [de] YYYY',\n      LLL: 'D [de] MMMM [de] YYYY [às] HH:mm',\n      LLLL: 'dddd, D [de] MMMM [de] YYYY [às] HH:mm'\n    },\n    calendar: {\n      sameDay: '[Hoje às] LT',\n      nextDay: '[Amanhã às] LT',\n      nextWeek: 'dddd [às] LT',\n      lastDay: '[Ontem às] LT',\n      lastWeek: function lastWeek() {\n        return this.day() === 0 || this.day() === 6 ? '[Último] dddd [às] LT' : // Saturday + Sunday\n        '[Última] dddd [às] LT'; // Monday - Friday\n      },\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: 'em %s',\n      past: 'há %s',\n      s: 'poucos segundos',\n      ss: '%d segundos',\n      m: 'um minuto',\n      mm: '%d minutos',\n      h: 'uma hora',\n      hh: '%d horas',\n      d: 'um dia',\n      dd: '%d dias',\n      M: 'um mês',\n      MM: '%d meses',\n      y: 'um ano',\n      yy: '%d anos'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}º/,\n    ordinal: '%dº'\n  });\n  return ptBr;\n});","function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n//! moment.js locale configuration\n;\n\n(function (global, factory) {\n  (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  function relativeTimeWithPlural(number, withoutSuffix, key) {\n    var format = {\n      'ss': 'secunde',\n      'mm': 'minute',\n      'hh': 'ore',\n      'dd': 'zile',\n      'MM': 'luni',\n      'yy': 'ani'\n    },\n        separator = ' ';\n\n    if (number % 100 >= 20 || number >= 100 && number % 100 === 0) {\n      separator = ' de ';\n    }\n\n    return number + separator + format[key];\n  }\n\n  var ro = moment.defineLocale('ro', {\n    months: 'ianuarie_februarie_martie_aprilie_mai_iunie_iulie_august_septembrie_octombrie_noiembrie_decembrie'.split('_'),\n    monthsShort: 'ian._febr._mart._apr._mai_iun._iul._aug._sept._oct._nov._dec.'.split('_'),\n    monthsParseExact: true,\n    weekdays: 'duminică_luni_marți_miercuri_joi_vineri_sâmbătă'.split('_'),\n    weekdaysShort: 'Dum_Lun_Mar_Mie_Joi_Vin_Sâm'.split('_'),\n    weekdaysMin: 'Du_Lu_Ma_Mi_Jo_Vi_Sâ'.split('_'),\n    longDateFormat: {\n      LT: 'H:mm',\n      LTS: 'H:mm:ss',\n      L: 'DD.MM.YYYY',\n      LL: 'D MMMM YYYY',\n      LLL: 'D MMMM YYYY H:mm',\n      LLLL: 'dddd, D MMMM YYYY H:mm'\n    },\n    calendar: {\n      sameDay: '[azi la] LT',\n      nextDay: '[mâine la] LT',\n      nextWeek: 'dddd [la] LT',\n      lastDay: '[ieri la] LT',\n      lastWeek: '[fosta] dddd [la] LT',\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: 'peste %s',\n      past: '%s în urmă',\n      s: 'câteva secunde',\n      ss: relativeTimeWithPlural,\n      m: 'un minut',\n      mm: relativeTimeWithPlural,\n      h: 'o oră',\n      hh: relativeTimeWithPlural,\n      d: 'o zi',\n      dd: relativeTimeWithPlural,\n      M: 'o lună',\n      MM: relativeTimeWithPlural,\n      y: 'un an',\n      yy: relativeTimeWithPlural\n    },\n    week: {\n      dow: 1,\n      // Monday is the first day of the week.\n      doy: 7 // The week that contains Jan 7th is the first week of the year.\n\n    }\n  });\n  return ro;\n});","function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n//! moment.js locale configuration\n;\n\n(function (global, factory) {\n  (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  function plural(word, num) {\n    var forms = word.split('_');\n    return num % 10 === 1 && num % 100 !== 11 ? forms[0] : num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20) ? forms[1] : forms[2];\n  }\n\n  function relativeTimeWithPlural(number, withoutSuffix, key) {\n    var format = {\n      'ss': withoutSuffix ? 'секунда_секунды_секунд' : 'секунду_секунды_секунд',\n      'mm': withoutSuffix ? 'минута_минуты_минут' : 'минуту_минуты_минут',\n      'hh': 'час_часа_часов',\n      'dd': 'день_дня_дней',\n      'MM': 'месяц_месяца_месяцев',\n      'yy': 'год_года_лет'\n    };\n\n    if (key === 'm') {\n      return withoutSuffix ? 'минута' : 'минуту';\n    } else {\n      return number + ' ' + plural(format[key], +number);\n    }\n  }\n\n  var monthsParse = [/^янв/i, /^фев/i, /^мар/i, /^апр/i, /^ма[йя]/i, /^июн/i, /^июл/i, /^авг/i, /^сен/i, /^окт/i, /^ноя/i, /^дек/i]; // http://new.gramota.ru/spravka/rules/139-prop : § 103\n  // Сокращения месяцев: http://new.gramota.ru/spravka/buro/search-answer?s=242637\n  // CLDR data:          http://www.unicode.org/cldr/charts/28/summary/ru.html#1753\n\n  var ru = moment.defineLocale('ru', {\n    months: {\n      format: 'января_февраля_марта_апреля_мая_июня_июля_августа_сентября_октября_ноября_декабря'.split('_'),\n      standalone: 'январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь'.split('_')\n    },\n    monthsShort: {\n      // по CLDR именно \"июл.\" и \"июн.\", но какой смысл менять букву на точку ?\n      format: 'янв._февр._мар._апр._мая_июня_июля_авг._сент._окт._нояб._дек.'.split('_'),\n      standalone: 'янв._февр._март_апр._май_июнь_июль_авг._сент._окт._нояб._дек.'.split('_')\n    },\n    weekdays: {\n      standalone: 'воскресенье_понедельник_вторник_среда_четверг_пятница_суббота'.split('_'),\n      format: 'воскресенье_понедельник_вторник_среду_четверг_пятницу_субботу'.split('_'),\n      isFormat: /\\[ ?[Вв] ?(?:прошлую|следующую|эту)? ?\\] ?dddd/\n    },\n    weekdaysShort: 'вс_пн_вт_ср_чт_пт_сб'.split('_'),\n    weekdaysMin: 'вс_пн_вт_ср_чт_пт_сб'.split('_'),\n    monthsParse: monthsParse,\n    longMonthsParse: monthsParse,\n    shortMonthsParse: monthsParse,\n    // полные названия с падежами, по три буквы, для некоторых, по 4 буквы, сокращения с точкой и без точки\n    monthsRegex: /^(январ[ья]|янв\\.?|феврал[ья]|февр?\\.?|марта?|мар\\.?|апрел[ья]|апр\\.?|ма[йя]|июн[ья]|июн\\.?|июл[ья]|июл\\.?|августа?|авг\\.?|сентябр[ья]|сент?\\.?|октябр[ья]|окт\\.?|ноябр[ья]|нояб?\\.?|декабр[ья]|дек\\.?)/i,\n    // копия предыдущего\n    monthsShortRegex: /^(январ[ья]|янв\\.?|феврал[ья]|февр?\\.?|марта?|мар\\.?|апрел[ья]|апр\\.?|ма[йя]|июн[ья]|июн\\.?|июл[ья]|июл\\.?|августа?|авг\\.?|сентябр[ья]|сент?\\.?|октябр[ья]|окт\\.?|ноябр[ья]|нояб?\\.?|декабр[ья]|дек\\.?)/i,\n    // полные названия с падежами\n    monthsStrictRegex: /^(январ[яь]|феврал[яь]|марта?|апрел[яь]|ма[яй]|июн[яь]|июл[яь]|августа?|сентябр[яь]|октябр[яь]|ноябр[яь]|декабр[яь])/i,\n    // Выражение, которое соотвествует только сокращённым формам\n    monthsShortStrictRegex: /^(янв\\.|февр?\\.|мар[т.]|апр\\.|ма[яй]|июн[ья.]|июл[ья.]|авг\\.|сент?\\.|окт\\.|нояб?\\.|дек\\.)/i,\n    longDateFormat: {\n      LT: 'H:mm',\n      LTS: 'H:mm:ss',\n      L: 'DD.MM.YYYY',\n      LL: 'D MMMM YYYY г.',\n      LLL: 'D MMMM YYYY г., H:mm',\n      LLLL: 'dddd, D MMMM YYYY г., H:mm'\n    },\n    calendar: {\n      sameDay: '[Сегодня, в] LT',\n      nextDay: '[Завтра, в] LT',\n      lastDay: '[Вчера, в] LT',\n      nextWeek: function nextWeek(now) {\n        if (now.week() !== this.week()) {\n          switch (this.day()) {\n            case 0:\n              return '[В следующее] dddd, [в] LT';\n\n            case 1:\n            case 2:\n            case 4:\n              return '[В следующий] dddd, [в] LT';\n\n            case 3:\n            case 5:\n            case 6:\n              return '[В следующую] dddd, [в] LT';\n          }\n        } else {\n          if (this.day() === 2) {\n            return '[Во] dddd, [в] LT';\n          } else {\n            return '[В] dddd, [в] LT';\n          }\n        }\n      },\n      lastWeek: function lastWeek(now) {\n        if (now.week() !== this.week()) {\n          switch (this.day()) {\n            case 0:\n              return '[В прошлое] dddd, [в] LT';\n\n            case 1:\n            case 2:\n            case 4:\n              return '[В прошлый] dddd, [в] LT';\n\n            case 3:\n            case 5:\n            case 6:\n              return '[В прошлую] dddd, [в] LT';\n          }\n        } else {\n          if (this.day() === 2) {\n            return '[Во] dddd, [в] LT';\n          } else {\n            return '[В] dddd, [в] LT';\n          }\n        }\n      },\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: 'через %s',\n      past: '%s назад',\n      s: 'несколько секунд',\n      ss: relativeTimeWithPlural,\n      m: relativeTimeWithPlural,\n      mm: relativeTimeWithPlural,\n      h: 'час',\n      hh: relativeTimeWithPlural,\n      d: 'день',\n      dd: relativeTimeWithPlural,\n      M: 'месяц',\n      MM: relativeTimeWithPlural,\n      y: 'год',\n      yy: relativeTimeWithPlural\n    },\n    meridiemParse: /ночи|утра|дня|вечера/i,\n    isPM: function isPM(input) {\n      return /^(дня|вечера)$/.test(input);\n    },\n    meridiem: function meridiem(hour, minute, isLower) {\n      if (hour < 4) {\n        return 'ночи';\n      } else if (hour < 12) {\n        return 'утра';\n      } else if (hour < 17) {\n        return 'дня';\n      } else {\n        return 'вечера';\n      }\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}-(й|го|я)/,\n    ordinal: function ordinal(number, period) {\n      switch (period) {\n        case 'M':\n        case 'd':\n        case 'DDD':\n          return number + '-й';\n\n        case 'D':\n          return number + '-го';\n\n        case 'w':\n        case 'W':\n          return number + '-я';\n\n        default:\n          return number;\n      }\n    },\n    week: {\n      dow: 1,\n      // Monday is the first day of the week.\n      doy: 4 // The week that contains Jan 4th is the first week of the year.\n\n    }\n  });\n  return ru;\n});","function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n//! moment.js locale configuration\n;\n\n(function (global, factory) {\n  (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  var months = ['جنوري', 'فيبروري', 'مارچ', 'اپريل', 'مئي', 'جون', 'جولاءِ', 'آگسٽ', 'سيپٽمبر', 'آڪٽوبر', 'نومبر', 'ڊسمبر'];\n  var days = ['آچر', 'سومر', 'اڱارو', 'اربع', 'خميس', 'جمع', 'ڇنڇر'];\n  var sd = moment.defineLocale('sd', {\n    months: months,\n    monthsShort: months,\n    weekdays: days,\n    weekdaysShort: days,\n    weekdaysMin: days,\n    longDateFormat: {\n      LT: 'HH:mm',\n      LTS: 'HH:mm:ss',\n      L: 'DD/MM/YYYY',\n      LL: 'D MMMM YYYY',\n      LLL: 'D MMMM YYYY HH:mm',\n      LLLL: 'dddd، D MMMM YYYY HH:mm'\n    },\n    meridiemParse: /صبح|شام/,\n    isPM: function isPM(input) {\n      return 'شام' === input;\n    },\n    meridiem: function meridiem(hour, minute, isLower) {\n      if (hour < 12) {\n        return 'صبح';\n      }\n\n      return 'شام';\n    },\n    calendar: {\n      sameDay: '[اڄ] LT',\n      nextDay: '[سڀاڻي] LT',\n      nextWeek: 'dddd [اڳين هفتي تي] LT',\n      lastDay: '[ڪالهه] LT',\n      lastWeek: '[گزريل هفتي] dddd [تي] LT',\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: '%s پوء',\n      past: '%s اڳ',\n      s: 'چند سيڪنڊ',\n      ss: '%d سيڪنڊ',\n      m: 'هڪ منٽ',\n      mm: '%d منٽ',\n      h: 'هڪ ڪلاڪ',\n      hh: '%d ڪلاڪ',\n      d: 'هڪ ڏينهن',\n      dd: '%d ڏينهن',\n      M: 'هڪ مهينو',\n      MM: '%d مهينا',\n      y: 'هڪ سال',\n      yy: '%d سال'\n    },\n    preparse: function preparse(string) {\n      return string.replace(/،/g, ',');\n    },\n    postformat: function postformat(string) {\n      return string.replace(/,/g, '،');\n    },\n    week: {\n      dow: 1,\n      // Monday is the first day of the week.\n      doy: 4 // The week that contains Jan 4th is the first week of the year.\n\n    }\n  });\n  return sd;\n});","function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n//! moment.js locale configuration\n;\n\n(function (global, factory) {\n  (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  var se = moment.defineLocale('se', {\n    months: 'ođđajagemánnu_guovvamánnu_njukčamánnu_cuoŋománnu_miessemánnu_geassemánnu_suoidnemánnu_borgemánnu_čakčamánnu_golggotmánnu_skábmamánnu_juovlamánnu'.split('_'),\n    monthsShort: 'ođđj_guov_njuk_cuo_mies_geas_suoi_borg_čakč_golg_skáb_juov'.split('_'),\n    weekdays: 'sotnabeaivi_vuossárga_maŋŋebárga_gaskavahkku_duorastat_bearjadat_lávvardat'.split('_'),\n    weekdaysShort: 'sotn_vuos_maŋ_gask_duor_bear_láv'.split('_'),\n    weekdaysMin: 's_v_m_g_d_b_L'.split('_'),\n    longDateFormat: {\n      LT: 'HH:mm',\n      LTS: 'HH:mm:ss',\n      L: 'DD.MM.YYYY',\n      LL: 'MMMM D. [b.] YYYY',\n      LLL: 'MMMM D. [b.] YYYY [ti.] HH:mm',\n      LLLL: 'dddd, MMMM D. [b.] YYYY [ti.] HH:mm'\n    },\n    calendar: {\n      sameDay: '[otne ti] LT',\n      nextDay: '[ihttin ti] LT',\n      nextWeek: 'dddd [ti] LT',\n      lastDay: '[ikte ti] LT',\n      lastWeek: '[ovddit] dddd [ti] LT',\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: '%s geažes',\n      past: 'maŋit %s',\n      s: 'moadde sekunddat',\n      ss: '%d sekunddat',\n      m: 'okta minuhta',\n      mm: '%d minuhtat',\n      h: 'okta diimmu',\n      hh: '%d diimmut',\n      d: 'okta beaivi',\n      dd: '%d beaivvit',\n      M: 'okta mánnu',\n      MM: '%d mánut',\n      y: 'okta jahki',\n      yy: '%d jagit'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n    ordinal: '%d.',\n    week: {\n      dow: 1,\n      // Monday is the first day of the week.\n      doy: 4 // The week that contains Jan 4th is the first week of the year.\n\n    }\n  });\n  return se;\n});","function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n//! moment.js locale configuration\n;\n\n(function (global, factory) {\n  (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n  /*jshint -W100*/\n\n  var si = moment.defineLocale('si', {\n    months: 'ජනවාරි_පෙබරවාරි_මාර්තු_අප්‍රේල්_මැයි_ජූනි_ජූලි_අගෝස්තු_සැප්තැම්බර්_ඔක්තෝබර්_නොවැම්බර්_දෙසැම්බර්'.split('_'),\n    monthsShort: 'ජන_පෙබ_මාර්_අප්_මැයි_ජූනි_ජූලි_අගෝ_සැප්_ඔක්_නොවැ_දෙසැ'.split('_'),\n    weekdays: 'ඉරිදා_සඳුදා_අඟහරුවාදා_බදාදා_බ්‍රහස්පතින්දා_සිකුරාදා_සෙනසුරාදා'.split('_'),\n    weekdaysShort: 'ඉරි_සඳු_අඟ_බදා_බ්‍රහ_සිකු_සෙන'.split('_'),\n    weekdaysMin: 'ඉ_ස_අ_බ_බ්‍ර_සි_සෙ'.split('_'),\n    weekdaysParseExact: true,\n    longDateFormat: {\n      LT: 'a h:mm',\n      LTS: 'a h:mm:ss',\n      L: 'YYYY/MM/DD',\n      LL: 'YYYY MMMM D',\n      LLL: 'YYYY MMMM D, a h:mm',\n      LLLL: 'YYYY MMMM D [වැනි] dddd, a h:mm:ss'\n    },\n    calendar: {\n      sameDay: '[අද] LT[ට]',\n      nextDay: '[හෙට] LT[ට]',\n      nextWeek: 'dddd LT[ට]',\n      lastDay: '[ඊයේ] LT[ට]',\n      lastWeek: '[පසුගිය] dddd LT[ට]',\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: '%sකින්',\n      past: '%sකට පෙර',\n      s: 'තත්පර කිහිපය',\n      ss: 'තත්පර %d',\n      m: 'මිනිත්තුව',\n      mm: 'මිනිත්තු %d',\n      h: 'පැය',\n      hh: 'පැය %d',\n      d: 'දිනය',\n      dd: 'දින %d',\n      M: 'මාසය',\n      MM: 'මාස %d',\n      y: 'වසර',\n      yy: 'වසර %d'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2} වැනි/,\n    ordinal: function ordinal(number) {\n      return number + ' වැනි';\n    },\n    meridiemParse: /පෙර වරු|පස් වරු|පෙ.ව|ප.ව./,\n    isPM: function isPM(input) {\n      return input === 'ප.ව.' || input === 'පස් වරු';\n    },\n    meridiem: function meridiem(hours, minutes, isLower) {\n      if (hours > 11) {\n        return isLower ? 'ප.ව.' : 'පස් වරු';\n      } else {\n        return isLower ? 'පෙ.ව.' : 'පෙර වරු';\n      }\n    }\n  });\n  return si;\n});","function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n//! moment.js locale configuration\n;\n\n(function (global, factory) {\n  (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  var months = 'január_február_marec_apríl_máj_jún_júl_august_september_október_november_december'.split('_'),\n      monthsShort = 'jan_feb_mar_apr_máj_jún_júl_aug_sep_okt_nov_dec'.split('_');\n\n  function plural(n) {\n    return n > 1 && n < 5;\n  }\n\n  function translate(number, withoutSuffix, key, isFuture) {\n    var result = number + ' ';\n\n    switch (key) {\n      case 's':\n        // a few seconds / in a few seconds / a few seconds ago\n        return withoutSuffix || isFuture ? 'pár sekúnd' : 'pár sekundami';\n\n      case 'ss':\n        // 9 seconds / in 9 seconds / 9 seconds ago\n        if (withoutSuffix || isFuture) {\n          return result + (plural(number) ? 'sekundy' : 'sekúnd');\n        } else {\n          return result + 'sekundami';\n        }\n\n        break;\n\n      case 'm':\n        // a minute / in a minute / a minute ago\n        return withoutSuffix ? 'minúta' : isFuture ? 'minútu' : 'minútou';\n\n      case 'mm':\n        // 9 minutes / in 9 minutes / 9 minutes ago\n        if (withoutSuffix || isFuture) {\n          return result + (plural(number) ? 'minúty' : 'minút');\n        } else {\n          return result + 'minútami';\n        }\n\n        break;\n\n      case 'h':\n        // an hour / in an hour / an hour ago\n        return withoutSuffix ? 'hodina' : isFuture ? 'hodinu' : 'hodinou';\n\n      case 'hh':\n        // 9 hours / in 9 hours / 9 hours ago\n        if (withoutSuffix || isFuture) {\n          return result + (plural(number) ? 'hodiny' : 'hodín');\n        } else {\n          return result + 'hodinami';\n        }\n\n        break;\n\n      case 'd':\n        // a day / in a day / a day ago\n        return withoutSuffix || isFuture ? 'deň' : 'dňom';\n\n      case 'dd':\n        // 9 days / in 9 days / 9 days ago\n        if (withoutSuffix || isFuture) {\n          return result + (plural(number) ? 'dni' : 'dní');\n        } else {\n          return result + 'dňami';\n        }\n\n        break;\n\n      case 'M':\n        // a month / in a month / a month ago\n        return withoutSuffix || isFuture ? 'mesiac' : 'mesiacom';\n\n      case 'MM':\n        // 9 months / in 9 months / 9 months ago\n        if (withoutSuffix || isFuture) {\n          return result + (plural(number) ? 'mesiace' : 'mesiacov');\n        } else {\n          return result + 'mesiacmi';\n        }\n\n        break;\n\n      case 'y':\n        // a year / in a year / a year ago\n        return withoutSuffix || isFuture ? 'rok' : 'rokom';\n\n      case 'yy':\n        // 9 years / in 9 years / 9 years ago\n        if (withoutSuffix || isFuture) {\n          return result + (plural(number) ? 'roky' : 'rokov');\n        } else {\n          return result + 'rokmi';\n        }\n\n        break;\n    }\n  }\n\n  var sk = moment.defineLocale('sk', {\n    months: months,\n    monthsShort: monthsShort,\n    weekdays: 'nedeľa_pondelok_utorok_streda_štvrtok_piatok_sobota'.split('_'),\n    weekdaysShort: 'ne_po_ut_st_št_pi_so'.split('_'),\n    weekdaysMin: 'ne_po_ut_st_št_pi_so'.split('_'),\n    longDateFormat: {\n      LT: 'H:mm',\n      LTS: 'H:mm:ss',\n      L: 'DD.MM.YYYY',\n      LL: 'D. MMMM YYYY',\n      LLL: 'D. MMMM YYYY H:mm',\n      LLLL: 'dddd D. MMMM YYYY H:mm'\n    },\n    calendar: {\n      sameDay: '[dnes o] LT',\n      nextDay: '[zajtra o] LT',\n      nextWeek: function nextWeek() {\n        switch (this.day()) {\n          case 0:\n            return '[v nedeľu o] LT';\n\n          case 1:\n          case 2:\n            return '[v] dddd [o] LT';\n\n          case 3:\n            return '[v stredu o] LT';\n\n          case 4:\n            return '[vo štvrtok o] LT';\n\n          case 5:\n            return '[v piatok o] LT';\n\n          case 6:\n            return '[v sobotu o] LT';\n        }\n      },\n      lastDay: '[včera o] LT',\n      lastWeek: function lastWeek() {\n        switch (this.day()) {\n          case 0:\n            return '[minulú nedeľu o] LT';\n\n          case 1:\n          case 2:\n            return '[minulý] dddd [o] LT';\n\n          case 3:\n            return '[minulú stredu o] LT';\n\n          case 4:\n          case 5:\n            return '[minulý] dddd [o] LT';\n\n          case 6:\n            return '[minulú sobotu o] LT';\n        }\n      },\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: 'za %s',\n      past: 'pred %s',\n      s: translate,\n      ss: translate,\n      m: translate,\n      mm: translate,\n      h: translate,\n      hh: translate,\n      d: translate,\n      dd: translate,\n      M: translate,\n      MM: translate,\n      y: translate,\n      yy: translate\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n    ordinal: '%d.',\n    week: {\n      dow: 1,\n      // Monday is the first day of the week.\n      doy: 4 // The week that contains Jan 4th is the first week of the year.\n\n    }\n  });\n  return sk;\n});","function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n//! moment.js locale configuration\n;\n\n(function (global, factory) {\n  (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  function processRelativeTime(number, withoutSuffix, key, isFuture) {\n    var result = number + ' ';\n\n    switch (key) {\n      case 's':\n        return withoutSuffix || isFuture ? 'nekaj sekund' : 'nekaj sekundami';\n\n      case 'ss':\n        if (number === 1) {\n          result += withoutSuffix ? 'sekundo' : 'sekundi';\n        } else if (number === 2) {\n          result += withoutSuffix || isFuture ? 'sekundi' : 'sekundah';\n        } else if (number < 5) {\n          result += withoutSuffix || isFuture ? 'sekunde' : 'sekundah';\n        } else {\n          result += 'sekund';\n        }\n\n        return result;\n\n      case 'm':\n        return withoutSuffix ? 'ena minuta' : 'eno minuto';\n\n      case 'mm':\n        if (number === 1) {\n          result += withoutSuffix ? 'minuta' : 'minuto';\n        } else if (number === 2) {\n          result += withoutSuffix || isFuture ? 'minuti' : 'minutama';\n        } else if (number < 5) {\n          result += withoutSuffix || isFuture ? 'minute' : 'minutami';\n        } else {\n          result += withoutSuffix || isFuture ? 'minut' : 'minutami';\n        }\n\n        return result;\n\n      case 'h':\n        return withoutSuffix ? 'ena ura' : 'eno uro';\n\n      case 'hh':\n        if (number === 1) {\n          result += withoutSuffix ? 'ura' : 'uro';\n        } else if (number === 2) {\n          result += withoutSuffix || isFuture ? 'uri' : 'urama';\n        } else if (number < 5) {\n          result += withoutSuffix || isFuture ? 'ure' : 'urami';\n        } else {\n          result += withoutSuffix || isFuture ? 'ur' : 'urami';\n        }\n\n        return result;\n\n      case 'd':\n        return withoutSuffix || isFuture ? 'en dan' : 'enim dnem';\n\n      case 'dd':\n        if (number === 1) {\n          result += withoutSuffix || isFuture ? 'dan' : 'dnem';\n        } else if (number === 2) {\n          result += withoutSuffix || isFuture ? 'dni' : 'dnevoma';\n        } else {\n          result += withoutSuffix || isFuture ? 'dni' : 'dnevi';\n        }\n\n        return result;\n\n      case 'M':\n        return withoutSuffix || isFuture ? 'en mesec' : 'enim mesecem';\n\n      case 'MM':\n        if (number === 1) {\n          result += withoutSuffix || isFuture ? 'mesec' : 'mesecem';\n        } else if (number === 2) {\n          result += withoutSuffix || isFuture ? 'meseca' : 'mesecema';\n        } else if (number < 5) {\n          result += withoutSuffix || isFuture ? 'mesece' : 'meseci';\n        } else {\n          result += withoutSuffix || isFuture ? 'mesecev' : 'meseci';\n        }\n\n        return result;\n\n      case 'y':\n        return withoutSuffix || isFuture ? 'eno leto' : 'enim letom';\n\n      case 'yy':\n        if (number === 1) {\n          result += withoutSuffix || isFuture ? 'leto' : 'letom';\n        } else if (number === 2) {\n          result += withoutSuffix || isFuture ? 'leti' : 'letoma';\n        } else if (number < 5) {\n          result += withoutSuffix || isFuture ? 'leta' : 'leti';\n        } else {\n          result += withoutSuffix || isFuture ? 'let' : 'leti';\n        }\n\n        return result;\n    }\n  }\n\n  var sl = moment.defineLocale('sl', {\n    months: 'januar_februar_marec_april_maj_junij_julij_avgust_september_oktober_november_december'.split('_'),\n    monthsShort: 'jan._feb._mar._apr._maj._jun._jul._avg._sep._okt._nov._dec.'.split('_'),\n    monthsParseExact: true,\n    weekdays: 'nedelja_ponedeljek_torek_sreda_četrtek_petek_sobota'.split('_'),\n    weekdaysShort: 'ned._pon._tor._sre._čet._pet._sob.'.split('_'),\n    weekdaysMin: 'ne_po_to_sr_če_pe_so'.split('_'),\n    weekdaysParseExact: true,\n    longDateFormat: {\n      LT: 'H:mm',\n      LTS: 'H:mm:ss',\n      L: 'DD.MM.YYYY',\n      LL: 'D. MMMM YYYY',\n      LLL: 'D. MMMM YYYY H:mm',\n      LLLL: 'dddd, D. MMMM YYYY H:mm'\n    },\n    calendar: {\n      sameDay: '[danes ob] LT',\n      nextDay: '[jutri ob] LT',\n      nextWeek: function nextWeek() {\n        switch (this.day()) {\n          case 0:\n            return '[v] [nedeljo] [ob] LT';\n\n          case 3:\n            return '[v] [sredo] [ob] LT';\n\n          case 6:\n            return '[v] [soboto] [ob] LT';\n\n          case 1:\n          case 2:\n          case 4:\n          case 5:\n            return '[v] dddd [ob] LT';\n        }\n      },\n      lastDay: '[včeraj ob] LT',\n      lastWeek: function lastWeek() {\n        switch (this.day()) {\n          case 0:\n            return '[prejšnjo] [nedeljo] [ob] LT';\n\n          case 3:\n            return '[prejšnjo] [sredo] [ob] LT';\n\n          case 6:\n            return '[prejšnjo] [soboto] [ob] LT';\n\n          case 1:\n          case 2:\n          case 4:\n          case 5:\n            return '[prejšnji] dddd [ob] LT';\n        }\n      },\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: 'čez %s',\n      past: 'pred %s',\n      s: processRelativeTime,\n      ss: processRelativeTime,\n      m: processRelativeTime,\n      mm: processRelativeTime,\n      h: processRelativeTime,\n      hh: processRelativeTime,\n      d: processRelativeTime,\n      dd: processRelativeTime,\n      M: processRelativeTime,\n      MM: processRelativeTime,\n      y: processRelativeTime,\n      yy: processRelativeTime\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n    ordinal: '%d.',\n    week: {\n      dow: 1,\n      // Monday is the first day of the week.\n      doy: 7 // The week that contains Jan 7th is the first week of the year.\n\n    }\n  });\n  return sl;\n});","function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n//! moment.js locale configuration\n;\n\n(function (global, factory) {\n  (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  var sq = moment.defineLocale('sq', {\n    months: 'Janar_Shkurt_Mars_Prill_Maj_Qershor_Korrik_Gusht_Shtator_Tetor_Nëntor_Dhjetor'.split('_'),\n    monthsShort: 'Jan_Shk_Mar_Pri_Maj_Qer_Kor_Gus_Sht_Tet_Nën_Dhj'.split('_'),\n    weekdays: 'E Diel_E Hënë_E Martë_E Mërkurë_E Enjte_E Premte_E Shtunë'.split('_'),\n    weekdaysShort: 'Die_Hën_Mar_Mër_Enj_Pre_Sht'.split('_'),\n    weekdaysMin: 'D_H_Ma_Më_E_P_Sh'.split('_'),\n    weekdaysParseExact: true,\n    meridiemParse: /PD|MD/,\n    isPM: function isPM(input) {\n      return input.charAt(0) === 'M';\n    },\n    meridiem: function meridiem(hours, minutes, isLower) {\n      return hours < 12 ? 'PD' : 'MD';\n    },\n    longDateFormat: {\n      LT: 'HH:mm',\n      LTS: 'HH:mm:ss',\n      L: 'DD/MM/YYYY',\n      LL: 'D MMMM YYYY',\n      LLL: 'D MMMM YYYY HH:mm',\n      LLLL: 'dddd, D MMMM YYYY HH:mm'\n    },\n    calendar: {\n      sameDay: '[Sot në] LT',\n      nextDay: '[Nesër në] LT',\n      nextWeek: 'dddd [në] LT',\n      lastDay: '[Dje në] LT',\n      lastWeek: 'dddd [e kaluar në] LT',\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: 'në %s',\n      past: '%s më parë',\n      s: 'disa sekonda',\n      ss: '%d sekonda',\n      m: 'një minutë',\n      mm: '%d minuta',\n      h: 'një orë',\n      hh: '%d orë',\n      d: 'një ditë',\n      dd: '%d ditë',\n      M: 'një muaj',\n      MM: '%d muaj',\n      y: 'një vit',\n      yy: '%d vite'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n    ordinal: '%d.',\n    week: {\n      dow: 1,\n      // Monday is the first day of the week.\n      doy: 4 // The week that contains Jan 4th is the first week of the year.\n\n    }\n  });\n  return sq;\n});","function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n//! moment.js locale configuration\n;\n\n(function (global, factory) {\n  (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  var translator = {\n    words: {\n      //Different grammatical cases\n      ss: ['sekunda', 'sekunde', 'sekundi'],\n      m: ['jedan minut', 'jedne minute'],\n      mm: ['minut', 'minute', 'minuta'],\n      h: ['jedan sat', 'jednog sata'],\n      hh: ['sat', 'sata', 'sati'],\n      dd: ['dan', 'dana', 'dana'],\n      MM: ['mesec', 'meseca', 'meseci'],\n      yy: ['godina', 'godine', 'godina']\n    },\n    correctGrammaticalCase: function correctGrammaticalCase(number, wordKey) {\n      return number === 1 ? wordKey[0] : number >= 2 && number <= 4 ? wordKey[1] : wordKey[2];\n    },\n    translate: function translate(number, withoutSuffix, key) {\n      var wordKey = translator.words[key];\n\n      if (key.length === 1) {\n        return withoutSuffix ? wordKey[0] : wordKey[1];\n      } else {\n        return number + ' ' + translator.correctGrammaticalCase(number, wordKey);\n      }\n    }\n  };\n  var sr = moment.defineLocale('sr', {\n    months: 'januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar'.split('_'),\n    monthsShort: 'jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.'.split('_'),\n    monthsParseExact: true,\n    weekdays: 'nedelja_ponedeljak_utorak_sreda_četvrtak_petak_subota'.split('_'),\n    weekdaysShort: 'ned._pon._uto._sre._čet._pet._sub.'.split('_'),\n    weekdaysMin: 'ne_po_ut_sr_če_pe_su'.split('_'),\n    weekdaysParseExact: true,\n    longDateFormat: {\n      LT: 'H:mm',\n      LTS: 'H:mm:ss',\n      L: 'DD.MM.YYYY',\n      LL: 'D. MMMM YYYY',\n      LLL: 'D. MMMM YYYY H:mm',\n      LLLL: 'dddd, D. MMMM YYYY H:mm'\n    },\n    calendar: {\n      sameDay: '[danas u] LT',\n      nextDay: '[sutra u] LT',\n      nextWeek: function nextWeek() {\n        switch (this.day()) {\n          case 0:\n            return '[u] [nedelju] [u] LT';\n\n          case 3:\n            return '[u] [sredu] [u] LT';\n\n          case 6:\n            return '[u] [subotu] [u] LT';\n\n          case 1:\n          case 2:\n          case 4:\n          case 5:\n            return '[u] dddd [u] LT';\n        }\n      },\n      lastDay: '[juče u] LT',\n      lastWeek: function lastWeek() {\n        var lastWeekDays = ['[prošle] [nedelje] [u] LT', '[prošlog] [ponedeljka] [u] LT', '[prošlog] [utorka] [u] LT', '[prošle] [srede] [u] LT', '[prošlog] [četvrtka] [u] LT', '[prošlog] [petka] [u] LT', '[prošle] [subote] [u] LT'];\n        return lastWeekDays[this.day()];\n      },\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: 'za %s',\n      past: 'pre %s',\n      s: 'nekoliko sekundi',\n      ss: translator.translate,\n      m: translator.translate,\n      mm: translator.translate,\n      h: translator.translate,\n      hh: translator.translate,\n      d: 'dan',\n      dd: translator.translate,\n      M: 'mesec',\n      MM: translator.translate,\n      y: 'godinu',\n      yy: translator.translate\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n    ordinal: '%d.',\n    week: {\n      dow: 1,\n      // Monday is the first day of the week.\n      doy: 7 // The week that contains Jan 7th is the first week of the year.\n\n    }\n  });\n  return sr;\n});","function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n//! moment.js locale configuration\n;\n\n(function (global, factory) {\n  (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  var translator = {\n    words: {\n      //Different grammatical cases\n      ss: ['секунда', 'секунде', 'секунди'],\n      m: ['један минут', 'једне минуте'],\n      mm: ['минут', 'минуте', 'минута'],\n      h: ['један сат', 'једног сата'],\n      hh: ['сат', 'сата', 'сати'],\n      dd: ['дан', 'дана', 'дана'],\n      MM: ['месец', 'месеца', 'месеци'],\n      yy: ['година', 'године', 'година']\n    },\n    correctGrammaticalCase: function correctGrammaticalCase(number, wordKey) {\n      return number === 1 ? wordKey[0] : number >= 2 && number <= 4 ? wordKey[1] : wordKey[2];\n    },\n    translate: function translate(number, withoutSuffix, key) {\n      var wordKey = translator.words[key];\n\n      if (key.length === 1) {\n        return withoutSuffix ? wordKey[0] : wordKey[1];\n      } else {\n        return number + ' ' + translator.correctGrammaticalCase(number, wordKey);\n      }\n    }\n  };\n  var srCyrl = moment.defineLocale('sr-cyrl', {\n    months: 'јануар_фебруар_март_април_мај_јун_јул_август_септембар_октобар_новембар_децембар'.split('_'),\n    monthsShort: 'јан._феб._мар._апр._мај_јун_јул_авг._сеп._окт._нов._дец.'.split('_'),\n    monthsParseExact: true,\n    weekdays: 'недеља_понедељак_уторак_среда_четвртак_петак_субота'.split('_'),\n    weekdaysShort: 'нед._пон._уто._сре._чет._пет._суб.'.split('_'),\n    weekdaysMin: 'не_по_ут_ср_че_пе_су'.split('_'),\n    weekdaysParseExact: true,\n    longDateFormat: {\n      LT: 'H:mm',\n      LTS: 'H:mm:ss',\n      L: 'DD.MM.YYYY',\n      LL: 'D. MMMM YYYY',\n      LLL: 'D. MMMM YYYY H:mm',\n      LLLL: 'dddd, D. MMMM YYYY H:mm'\n    },\n    calendar: {\n      sameDay: '[данас у] LT',\n      nextDay: '[сутра у] LT',\n      nextWeek: function nextWeek() {\n        switch (this.day()) {\n          case 0:\n            return '[у] [недељу] [у] LT';\n\n          case 3:\n            return '[у] [среду] [у] LT';\n\n          case 6:\n            return '[у] [суботу] [у] LT';\n\n          case 1:\n          case 2:\n          case 4:\n          case 5:\n            return '[у] dddd [у] LT';\n        }\n      },\n      lastDay: '[јуче у] LT',\n      lastWeek: function lastWeek() {\n        var lastWeekDays = ['[прошле] [недеље] [у] LT', '[прошлог] [понедељка] [у] LT', '[прошлог] [уторка] [у] LT', '[прошле] [среде] [у] LT', '[прошлог] [четвртка] [у] LT', '[прошлог] [петка] [у] LT', '[прошле] [суботе] [у] LT'];\n        return lastWeekDays[this.day()];\n      },\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: 'за %s',\n      past: 'пре %s',\n      s: 'неколико секунди',\n      ss: translator.translate,\n      m: translator.translate,\n      mm: translator.translate,\n      h: translator.translate,\n      hh: translator.translate,\n      d: 'дан',\n      dd: translator.translate,\n      M: 'месец',\n      MM: translator.translate,\n      y: 'годину',\n      yy: translator.translate\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n    ordinal: '%d.',\n    week: {\n      dow: 1,\n      // Monday is the first day of the week.\n      doy: 7 // The week that contains Jan 7th is the first week of the year.\n\n    }\n  });\n  return srCyrl;\n});","function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n//! moment.js locale configuration\n;\n\n(function (global, factory) {\n  (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  var ss = moment.defineLocale('ss', {\n    months: \"Bhimbidvwane_Indlovana_Indlov'lenkhulu_Mabasa_Inkhwekhweti_Inhlaba_Kholwane_Ingci_Inyoni_Imphala_Lweti_Ingongoni\".split('_'),\n    monthsShort: 'Bhi_Ina_Inu_Mab_Ink_Inh_Kho_Igc_Iny_Imp_Lwe_Igo'.split('_'),\n    weekdays: 'Lisontfo_Umsombuluko_Lesibili_Lesitsatfu_Lesine_Lesihlanu_Umgcibelo'.split('_'),\n    weekdaysShort: 'Lis_Umb_Lsb_Les_Lsi_Lsh_Umg'.split('_'),\n    weekdaysMin: 'Li_Us_Lb_Lt_Ls_Lh_Ug'.split('_'),\n    weekdaysParseExact: true,\n    longDateFormat: {\n      LT: 'h:mm A',\n      LTS: 'h:mm:ss A',\n      L: 'DD/MM/YYYY',\n      LL: 'D MMMM YYYY',\n      LLL: 'D MMMM YYYY h:mm A',\n      LLLL: 'dddd, D MMMM YYYY h:mm A'\n    },\n    calendar: {\n      sameDay: '[Namuhla nga] LT',\n      nextDay: '[Kusasa nga] LT',\n      nextWeek: 'dddd [nga] LT',\n      lastDay: '[Itolo nga] LT',\n      lastWeek: 'dddd [leliphelile] [nga] LT',\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: 'nga %s',\n      past: 'wenteka nga %s',\n      s: 'emizuzwana lomcane',\n      ss: '%d mzuzwana',\n      m: 'umzuzu',\n      mm: '%d emizuzu',\n      h: 'lihora',\n      hh: '%d emahora',\n      d: 'lilanga',\n      dd: '%d emalanga',\n      M: 'inyanga',\n      MM: '%d tinyanga',\n      y: 'umnyaka',\n      yy: '%d iminyaka'\n    },\n    meridiemParse: /ekuseni|emini|entsambama|ebusuku/,\n    meridiem: function meridiem(hours, minutes, isLower) {\n      if (hours < 11) {\n        return 'ekuseni';\n      } else if (hours < 15) {\n        return 'emini';\n      } else if (hours < 19) {\n        return 'entsambama';\n      } else {\n        return 'ebusuku';\n      }\n    },\n    meridiemHour: function meridiemHour(hour, meridiem) {\n      if (hour === 12) {\n        hour = 0;\n      }\n\n      if (meridiem === 'ekuseni') {\n        return hour;\n      } else if (meridiem === 'emini') {\n        return hour >= 11 ? hour : hour + 12;\n      } else if (meridiem === 'entsambama' || meridiem === 'ebusuku') {\n        if (hour === 0) {\n          return 0;\n        }\n\n        return hour + 12;\n      }\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}/,\n    ordinal: '%d',\n    week: {\n      dow: 1,\n      // Monday is the first day of the week.\n      doy: 4 // The week that contains Jan 4th is the first week of the year.\n\n    }\n  });\n  return ss;\n});","function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n//! moment.js locale configuration\n;\n\n(function (global, factory) {\n  (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  var sv = moment.defineLocale('sv', {\n    months: 'januari_februari_mars_april_maj_juni_juli_augusti_september_oktober_november_december'.split('_'),\n    monthsShort: 'jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec'.split('_'),\n    weekdays: 'söndag_måndag_tisdag_onsdag_torsdag_fredag_lördag'.split('_'),\n    weekdaysShort: 'sön_mån_tis_ons_tor_fre_lör'.split('_'),\n    weekdaysMin: 'sö_må_ti_on_to_fr_lö'.split('_'),\n    longDateFormat: {\n      LT: 'HH:mm',\n      LTS: 'HH:mm:ss',\n      L: 'YYYY-MM-DD',\n      LL: 'D MMMM YYYY',\n      LLL: 'D MMMM YYYY [kl.] HH:mm',\n      LLLL: 'dddd D MMMM YYYY [kl.] HH:mm',\n      lll: 'D MMM YYYY HH:mm',\n      llll: 'ddd D MMM YYYY HH:mm'\n    },\n    calendar: {\n      sameDay: '[Idag] LT',\n      nextDay: '[Imorgon] LT',\n      lastDay: '[Igår] LT',\n      nextWeek: '[På] dddd LT',\n      lastWeek: '[I] dddd[s] LT',\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: 'om %s',\n      past: 'för %s sedan',\n      s: 'några sekunder',\n      ss: '%d sekunder',\n      m: 'en minut',\n      mm: '%d minuter',\n      h: 'en timme',\n      hh: '%d timmar',\n      d: 'en dag',\n      dd: '%d dagar',\n      M: 'en månad',\n      MM: '%d månader',\n      y: 'ett år',\n      yy: '%d år'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}(e|a)/,\n    ordinal: function ordinal(number) {\n      var b = number % 10,\n          output = ~~(number % 100 / 10) === 1 ? 'e' : b === 1 ? 'a' : b === 2 ? 'a' : b === 3 ? 'e' : 'e';\n      return number + output;\n    },\n    week: {\n      dow: 1,\n      // Monday is the first day of the week.\n      doy: 4 // The week that contains Jan 4th is the first week of the year.\n\n    }\n  });\n  return sv;\n});","function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n//! moment.js locale configuration\n;\n\n(function (global, factory) {\n  (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  var sw = moment.defineLocale('sw', {\n    months: 'Januari_Februari_Machi_Aprili_Mei_Juni_Julai_Agosti_Septemba_Oktoba_Novemba_Desemba'.split('_'),\n    monthsShort: 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ago_Sep_Okt_Nov_Des'.split('_'),\n    weekdays: 'Jumapili_Jumatatu_Jumanne_Jumatano_Alhamisi_Ijumaa_Jumamosi'.split('_'),\n    weekdaysShort: 'Jpl_Jtat_Jnne_Jtan_Alh_Ijm_Jmos'.split('_'),\n    weekdaysMin: 'J2_J3_J4_J5_Al_Ij_J1'.split('_'),\n    weekdaysParseExact: true,\n    longDateFormat: {\n      LT: 'HH:mm',\n      LTS: 'HH:mm:ss',\n      L: 'DD.MM.YYYY',\n      LL: 'D MMMM YYYY',\n      LLL: 'D MMMM YYYY HH:mm',\n      LLLL: 'dddd, D MMMM YYYY HH:mm'\n    },\n    calendar: {\n      sameDay: '[leo saa] LT',\n      nextDay: '[kesho saa] LT',\n      nextWeek: '[wiki ijayo] dddd [saat] LT',\n      lastDay: '[jana] LT',\n      lastWeek: '[wiki iliyopita] dddd [saat] LT',\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: '%s baadaye',\n      past: 'tokea %s',\n      s: 'hivi punde',\n      ss: 'sekunde %d',\n      m: 'dakika moja',\n      mm: 'dakika %d',\n      h: 'saa limoja',\n      hh: 'masaa %d',\n      d: 'siku moja',\n      dd: 'masiku %d',\n      M: 'mwezi mmoja',\n      MM: 'miezi %d',\n      y: 'mwaka mmoja',\n      yy: 'miaka %d'\n    },\n    week: {\n      dow: 1,\n      // Monday is the first day of the week.\n      doy: 7 // The week that contains Jan 7th is the first week of the year.\n\n    }\n  });\n  return sw;\n});","function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n//! moment.js locale configuration\n;\n\n(function (global, factory) {\n  (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  var symbolMap = {\n    '1': '௧',\n    '2': '௨',\n    '3': '௩',\n    '4': '௪',\n    '5': '௫',\n    '6': '௬',\n    '7': '௭',\n    '8': '௮',\n    '9': '௯',\n    '0': '௦'\n  },\n      numberMap = {\n    '௧': '1',\n    '௨': '2',\n    '௩': '3',\n    '௪': '4',\n    '௫': '5',\n    '௬': '6',\n    '௭': '7',\n    '௮': '8',\n    '௯': '9',\n    '௦': '0'\n  };\n  var ta = moment.defineLocale('ta', {\n    months: 'ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்'.split('_'),\n    monthsShort: 'ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்'.split('_'),\n    weekdays: 'ஞாயிற்றுக்கிழமை_திங்கட்கிழமை_செவ்வாய்கிழமை_புதன்கிழமை_வியாழக்கிழமை_வெள்ளிக்கிழமை_சனிக்கிழமை'.split('_'),\n    weekdaysShort: 'ஞாயிறு_திங்கள்_செவ்வாய்_புதன்_வியாழன்_வெள்ளி_சனி'.split('_'),\n    weekdaysMin: 'ஞா_தி_செ_பு_வி_வெ_ச'.split('_'),\n    longDateFormat: {\n      LT: 'HH:mm',\n      LTS: 'HH:mm:ss',\n      L: 'DD/MM/YYYY',\n      LL: 'D MMMM YYYY',\n      LLL: 'D MMMM YYYY, HH:mm',\n      LLLL: 'dddd, D MMMM YYYY, HH:mm'\n    },\n    calendar: {\n      sameDay: '[இன்று] LT',\n      nextDay: '[நாளை] LT',\n      nextWeek: 'dddd, LT',\n      lastDay: '[நேற்று] LT',\n      lastWeek: '[கடந்த வாரம்] dddd, LT',\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: '%s இல்',\n      past: '%s முன்',\n      s: 'ஒரு சில விநாடிகள்',\n      ss: '%d விநாடிகள்',\n      m: 'ஒரு நிமிடம்',\n      mm: '%d நிமிடங்கள்',\n      h: 'ஒரு மணி நேரம்',\n      hh: '%d மணி நேரம்',\n      d: 'ஒரு நாள்',\n      dd: '%d நாட்கள்',\n      M: 'ஒரு மாதம்',\n      MM: '%d மாதங்கள்',\n      y: 'ஒரு வருடம்',\n      yy: '%d ஆண்டுகள்'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}வது/,\n    ordinal: function ordinal(number) {\n      return number + 'வது';\n    },\n    preparse: function preparse(string) {\n      return string.replace(/[௧௨௩௪௫௬௭௮௯௦]/g, function (match) {\n        return numberMap[match];\n      });\n    },\n    postformat: function postformat(string) {\n      return string.replace(/\\d/g, function (match) {\n        return symbolMap[match];\n      });\n    },\n    // refer http://ta.wikipedia.org/s/1er1\n    meridiemParse: /யாமம்|வைகறை|காலை|நண்பகல்|எற்பாடு|மாலை/,\n    meridiem: function meridiem(hour, minute, isLower) {\n      if (hour < 2) {\n        return ' யாமம்';\n      } else if (hour < 6) {\n        return ' வைகறை'; // வைகறை\n      } else if (hour < 10) {\n        return ' காலை'; // காலை\n      } else if (hour < 14) {\n        return ' நண்பகல்'; // நண்பகல்\n      } else if (hour < 18) {\n        return ' எற்பாடு'; // எற்பாடு\n      } else if (hour < 22) {\n        return ' மாலை'; // மாலை\n      } else {\n        return ' யாமம்';\n      }\n    },\n    meridiemHour: function meridiemHour(hour, meridiem) {\n      if (hour === 12) {\n        hour = 0;\n      }\n\n      if (meridiem === 'யாமம்') {\n        return hour < 2 ? hour : hour + 12;\n      } else if (meridiem === 'வைகறை' || meridiem === 'காலை') {\n        return hour;\n      } else if (meridiem === 'நண்பகல்') {\n        return hour >= 10 ? hour : hour + 12;\n      } else {\n        return hour + 12;\n      }\n    },\n    week: {\n      dow: 0,\n      // Sunday is the first day of the week.\n      doy: 6 // The week that contains Jan 6th is the first week of the year.\n\n    }\n  });\n  return ta;\n});","function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n//! moment.js locale configuration\n;\n\n(function (global, factory) {\n  (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  var te = moment.defineLocale('te', {\n    months: 'జనవరి_ఫిబ్రవరి_మార్చి_ఏప్రిల్_మే_జూన్_జులై_ఆగస్టు_సెప్టెంబర్_అక్టోబర్_నవంబర్_డిసెంబర్'.split('_'),\n    monthsShort: 'జన._ఫిబ్ర._మార్చి_ఏప్రి._మే_జూన్_జులై_ఆగ._సెప్._అక్టో._నవ._డిసె.'.split('_'),\n    monthsParseExact: true,\n    weekdays: 'ఆదివారం_సోమవారం_మంగళవారం_బుధవారం_గురువారం_శుక్రవారం_శనివారం'.split('_'),\n    weekdaysShort: 'ఆది_సోమ_మంగళ_బుధ_గురు_శుక్ర_శని'.split('_'),\n    weekdaysMin: 'ఆ_సో_మం_బు_గు_శు_శ'.split('_'),\n    longDateFormat: {\n      LT: 'A h:mm',\n      LTS: 'A h:mm:ss',\n      L: 'DD/MM/YYYY',\n      LL: 'D MMMM YYYY',\n      LLL: 'D MMMM YYYY, A h:mm',\n      LLLL: 'dddd, D MMMM YYYY, A h:mm'\n    },\n    calendar: {\n      sameDay: '[నేడు] LT',\n      nextDay: '[రేపు] LT',\n      nextWeek: 'dddd, LT',\n      lastDay: '[నిన్న] LT',\n      lastWeek: '[గత] dddd, LT',\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: '%s లో',\n      past: '%s క్రితం',\n      s: 'కొన్ని క్షణాలు',\n      ss: '%d సెకన్లు',\n      m: 'ఒక నిమిషం',\n      mm: '%d నిమిషాలు',\n      h: 'ఒక గంట',\n      hh: '%d గంటలు',\n      d: 'ఒక రోజు',\n      dd: '%d రోజులు',\n      M: 'ఒక నెల',\n      MM: '%d నెలలు',\n      y: 'ఒక సంవత్సరం',\n      yy: '%d సంవత్సరాలు'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}వ/,\n    ordinal: '%dవ',\n    meridiemParse: /రాత్రి|ఉదయం|మధ్యాహ్నం|సాయంత్రం/,\n    meridiemHour: function meridiemHour(hour, meridiem) {\n      if (hour === 12) {\n        hour = 0;\n      }\n\n      if (meridiem === 'రాత్రి') {\n        return hour < 4 ? hour : hour + 12;\n      } else if (meridiem === 'ఉదయం') {\n        return hour;\n      } else if (meridiem === 'మధ్యాహ్నం') {\n        return hour >= 10 ? hour : hour + 12;\n      } else if (meridiem === 'సాయంత్రం') {\n        return hour + 12;\n      }\n    },\n    meridiem: function meridiem(hour, minute, isLower) {\n      if (hour < 4) {\n        return 'రాత్రి';\n      } else if (hour < 10) {\n        return 'ఉదయం';\n      } else if (hour < 17) {\n        return 'మధ్యాహ్నం';\n      } else if (hour < 20) {\n        return 'సాయంత్రం';\n      } else {\n        return 'రాత్రి';\n      }\n    },\n    week: {\n      dow: 0,\n      // Sunday is the first day of the week.\n      doy: 6 // The week that contains Jan 6th is the first week of the year.\n\n    }\n  });\n  return te;\n});","function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n//! moment.js locale configuration\n;\n\n(function (global, factory) {\n  (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  var tet = moment.defineLocale('tet', {\n    months: 'Janeiru_Fevereiru_Marsu_Abril_Maiu_Juñu_Jullu_Agustu_Setembru_Outubru_Novembru_Dezembru'.split('_'),\n    monthsShort: 'Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez'.split('_'),\n    weekdays: 'Domingu_Segunda_Tersa_Kuarta_Kinta_Sesta_Sabadu'.split('_'),\n    weekdaysShort: 'Dom_Seg_Ters_Kua_Kint_Sest_Sab'.split('_'),\n    weekdaysMin: 'Do_Seg_Te_Ku_Ki_Ses_Sa'.split('_'),\n    longDateFormat: {\n      LT: 'HH:mm',\n      LTS: 'HH:mm:ss',\n      L: 'DD/MM/YYYY',\n      LL: 'D MMMM YYYY',\n      LLL: 'D MMMM YYYY HH:mm',\n      LLLL: 'dddd, D MMMM YYYY HH:mm'\n    },\n    calendar: {\n      sameDay: '[Ohin iha] LT',\n      nextDay: '[Aban iha] LT',\n      nextWeek: 'dddd [iha] LT',\n      lastDay: '[Horiseik iha] LT',\n      lastWeek: 'dddd [semana kotuk] [iha] LT',\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: 'iha %s',\n      past: '%s liuba',\n      s: 'minutu balun',\n      ss: 'minutu %d',\n      m: 'minutu ida',\n      mm: 'minutu %d',\n      h: 'oras ida',\n      hh: 'oras %d',\n      d: 'loron ida',\n      dd: 'loron %d',\n      M: 'fulan ida',\n      MM: 'fulan %d',\n      y: 'tinan ida',\n      yy: 'tinan %d'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n    ordinal: function ordinal(number) {\n      var b = number % 10,\n          output = ~~(number % 100 / 10) === 1 ? 'th' : b === 1 ? 'st' : b === 2 ? 'nd' : b === 3 ? 'rd' : 'th';\n      return number + output;\n    },\n    week: {\n      dow: 1,\n      // Monday is the first day of the week.\n      doy: 4 // The week that contains Jan 4th is the first week of the year.\n\n    }\n  });\n  return tet;\n});","function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n//! moment.js locale configuration\n;\n\n(function (global, factory) {\n  (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  var suffixes = {\n    0: '-ум',\n    1: '-ум',\n    2: '-юм',\n    3: '-юм',\n    4: '-ум',\n    5: '-ум',\n    6: '-ум',\n    7: '-ум',\n    8: '-ум',\n    9: '-ум',\n    10: '-ум',\n    12: '-ум',\n    13: '-ум',\n    20: '-ум',\n    30: '-юм',\n    40: '-ум',\n    50: '-ум',\n    60: '-ум',\n    70: '-ум',\n    80: '-ум',\n    90: '-ум',\n    100: '-ум'\n  };\n  var tg = moment.defineLocale('tg', {\n    months: 'январ_феврал_март_апрел_май_июн_июл_август_сентябр_октябр_ноябр_декабр'.split('_'),\n    monthsShort: 'янв_фев_мар_апр_май_июн_июл_авг_сен_окт_ноя_дек'.split('_'),\n    weekdays: 'якшанбе_душанбе_сешанбе_чоршанбе_панҷшанбе_ҷумъа_шанбе'.split('_'),\n    weekdaysShort: 'яшб_дшб_сшб_чшб_пшб_ҷум_шнб'.split('_'),\n    weekdaysMin: 'яш_дш_сш_чш_пш_ҷм_шб'.split('_'),\n    longDateFormat: {\n      LT: 'HH:mm',\n      LTS: 'HH:mm:ss',\n      L: 'DD/MM/YYYY',\n      LL: 'D MMMM YYYY',\n      LLL: 'D MMMM YYYY HH:mm',\n      LLLL: 'dddd, D MMMM YYYY HH:mm'\n    },\n    calendar: {\n      sameDay: '[Имрӯз соати] LT',\n      nextDay: '[Пагоҳ соати] LT',\n      lastDay: '[Дирӯз соати] LT',\n      nextWeek: 'dddd[и] [ҳафтаи оянда соати] LT',\n      lastWeek: 'dddd[и] [ҳафтаи гузашта соати] LT',\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: 'баъди %s',\n      past: '%s пеш',\n      s: 'якчанд сония',\n      m: 'як дақиқа',\n      mm: '%d дақиқа',\n      h: 'як соат',\n      hh: '%d соат',\n      d: 'як рӯз',\n      dd: '%d рӯз',\n      M: 'як моҳ',\n      MM: '%d моҳ',\n      y: 'як сол',\n      yy: '%d сол'\n    },\n    meridiemParse: /шаб|субҳ|рӯз|бегоҳ/,\n    meridiemHour: function meridiemHour(hour, meridiem) {\n      if (hour === 12) {\n        hour = 0;\n      }\n\n      if (meridiem === 'шаб') {\n        return hour < 4 ? hour : hour + 12;\n      } else if (meridiem === 'субҳ') {\n        return hour;\n      } else if (meridiem === 'рӯз') {\n        return hour >= 11 ? hour : hour + 12;\n      } else if (meridiem === 'бегоҳ') {\n        return hour + 12;\n      }\n    },\n    meridiem: function meridiem(hour, minute, isLower) {\n      if (hour < 4) {\n        return 'шаб';\n      } else if (hour < 11) {\n        return 'субҳ';\n      } else if (hour < 16) {\n        return 'рӯз';\n      } else if (hour < 19) {\n        return 'бегоҳ';\n      } else {\n        return 'шаб';\n      }\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}-(ум|юм)/,\n    ordinal: function ordinal(number) {\n      var a = number % 10,\n          b = number >= 100 ? 100 : null;\n      return number + (suffixes[number] || suffixes[a] || suffixes[b]);\n    },\n    week: {\n      dow: 1,\n      // Monday is the first day of the week.\n      doy: 7 // The week that contains Jan 1th is the first week of the year.\n\n    }\n  });\n  return tg;\n});","function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n//! moment.js locale configuration\n;\n\n(function (global, factory) {\n  (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  var th = moment.defineLocale('th', {\n    months: 'มกราคม_กุมภาพันธ์_มีนาคม_เมษายน_พฤษภาคม_มิถุนายน_กรกฎาคม_สิงหาคม_กันยายน_ตุลาคม_พฤศจิกายน_ธันวาคม'.split('_'),\n    monthsShort: 'ม.ค._ก.พ._มี.ค._เม.ย._พ.ค._มิ.ย._ก.ค._ส.ค._ก.ย._ต.ค._พ.ย._ธ.ค.'.split('_'),\n    monthsParseExact: true,\n    weekdays: 'อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัสบดี_ศุกร์_เสาร์'.split('_'),\n    weekdaysShort: 'อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัส_ศุกร์_เสาร์'.split('_'),\n    // yes, three characters difference\n    weekdaysMin: 'อา._จ._อ._พ._พฤ._ศ._ส.'.split('_'),\n    weekdaysParseExact: true,\n    longDateFormat: {\n      LT: 'H:mm',\n      LTS: 'H:mm:ss',\n      L: 'DD/MM/YYYY',\n      LL: 'D MMMM YYYY',\n      LLL: 'D MMMM YYYY เวลา H:mm',\n      LLLL: 'วันddddที่ D MMMM YYYY เวลา H:mm'\n    },\n    meridiemParse: /ก่อนเที่ยง|หลังเที่ยง/,\n    isPM: function isPM(input) {\n      return input === 'หลังเที่ยง';\n    },\n    meridiem: function meridiem(hour, minute, isLower) {\n      if (hour < 12) {\n        return 'ก่อนเที่ยง';\n      } else {\n        return 'หลังเที่ยง';\n      }\n    },\n    calendar: {\n      sameDay: '[วันนี้ เวลา] LT',\n      nextDay: '[พรุ่งนี้ เวลา] LT',\n      nextWeek: 'dddd[หน้า เวลา] LT',\n      lastDay: '[เมื่อวานนี้ เวลา] LT',\n      lastWeek: '[วัน]dddd[ที่แล้ว เวลา] LT',\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: 'อีก %s',\n      past: '%sที่แล้ว',\n      s: 'ไม่กี่วินาที',\n      ss: '%d วินาที',\n      m: '1 นาที',\n      mm: '%d นาที',\n      h: '1 ชั่วโมง',\n      hh: '%d ชั่วโมง',\n      d: '1 วัน',\n      dd: '%d วัน',\n      M: '1 เดือน',\n      MM: '%d เดือน',\n      y: '1 ปี',\n      yy: '%d ปี'\n    }\n  });\n  return th;\n});","function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n//! moment.js locale configuration\n;\n\n(function (global, factory) {\n  (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  var tlPh = moment.defineLocale('tl-ph', {\n    months: 'Enero_Pebrero_Marso_Abril_Mayo_Hunyo_Hulyo_Agosto_Setyembre_Oktubre_Nobyembre_Disyembre'.split('_'),\n    monthsShort: 'Ene_Peb_Mar_Abr_May_Hun_Hul_Ago_Set_Okt_Nob_Dis'.split('_'),\n    weekdays: 'Linggo_Lunes_Martes_Miyerkules_Huwebes_Biyernes_Sabado'.split('_'),\n    weekdaysShort: 'Lin_Lun_Mar_Miy_Huw_Biy_Sab'.split('_'),\n    weekdaysMin: 'Li_Lu_Ma_Mi_Hu_Bi_Sab'.split('_'),\n    longDateFormat: {\n      LT: 'HH:mm',\n      LTS: 'HH:mm:ss',\n      L: 'MM/D/YYYY',\n      LL: 'MMMM D, YYYY',\n      LLL: 'MMMM D, YYYY HH:mm',\n      LLLL: 'dddd, MMMM DD, YYYY HH:mm'\n    },\n    calendar: {\n      sameDay: 'LT [ngayong araw]',\n      nextDay: '[Bukas ng] LT',\n      nextWeek: 'LT [sa susunod na] dddd',\n      lastDay: 'LT [kahapon]',\n      lastWeek: 'LT [noong nakaraang] dddd',\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: 'sa loob ng %s',\n      past: '%s ang nakalipas',\n      s: 'ilang segundo',\n      ss: '%d segundo',\n      m: 'isang minuto',\n      mm: '%d minuto',\n      h: 'isang oras',\n      hh: '%d oras',\n      d: 'isang araw',\n      dd: '%d araw',\n      M: 'isang buwan',\n      MM: '%d buwan',\n      y: 'isang taon',\n      yy: '%d taon'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}/,\n    ordinal: function ordinal(number) {\n      return number;\n    },\n    week: {\n      dow: 1,\n      // Monday is the first day of the week.\n      doy: 4 // The week that contains Jan 4th is the first week of the year.\n\n    }\n  });\n  return tlPh;\n});","function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n//! moment.js locale configuration\n;\n\n(function (global, factory) {\n  (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  var numbersNouns = 'pagh_wa’_cha’_wej_loS_vagh_jav_Soch_chorgh_Hut'.split('_');\n\n  function translateFuture(output) {\n    var time = output;\n    time = output.indexOf('jaj') !== -1 ? time.slice(0, -3) + 'leS' : output.indexOf('jar') !== -1 ? time.slice(0, -3) + 'waQ' : output.indexOf('DIS') !== -1 ? time.slice(0, -3) + 'nem' : time + ' pIq';\n    return time;\n  }\n\n  function translatePast(output) {\n    var time = output;\n    time = output.indexOf('jaj') !== -1 ? time.slice(0, -3) + 'Hu’' : output.indexOf('jar') !== -1 ? time.slice(0, -3) + 'wen' : output.indexOf('DIS') !== -1 ? time.slice(0, -3) + 'ben' : time + ' ret';\n    return time;\n  }\n\n  function translate(number, withoutSuffix, string, isFuture) {\n    var numberNoun = numberAsNoun(number);\n\n    switch (string) {\n      case 'ss':\n        return numberNoun + ' lup';\n\n      case 'mm':\n        return numberNoun + ' tup';\n\n      case 'hh':\n        return numberNoun + ' rep';\n\n      case 'dd':\n        return numberNoun + ' jaj';\n\n      case 'MM':\n        return numberNoun + ' jar';\n\n      case 'yy':\n        return numberNoun + ' DIS';\n    }\n  }\n\n  function numberAsNoun(number) {\n    var hundred = Math.floor(number % 1000 / 100),\n        ten = Math.floor(number % 100 / 10),\n        one = number % 10,\n        word = '';\n\n    if (hundred > 0) {\n      word += numbersNouns[hundred] + 'vatlh';\n    }\n\n    if (ten > 0) {\n      word += (word !== '' ? ' ' : '') + numbersNouns[ten] + 'maH';\n    }\n\n    if (one > 0) {\n      word += (word !== '' ? ' ' : '') + numbersNouns[one];\n    }\n\n    return word === '' ? 'pagh' : word;\n  }\n\n  var tlh = moment.defineLocale('tlh', {\n    months: 'tera’ jar wa’_tera’ jar cha’_tera’ jar wej_tera’ jar loS_tera’ jar vagh_tera’ jar jav_tera’ jar Soch_tera’ jar chorgh_tera’ jar Hut_tera’ jar wa’maH_tera’ jar wa’maH wa’_tera’ jar wa’maH cha’'.split('_'),\n    monthsShort: 'jar wa’_jar cha’_jar wej_jar loS_jar vagh_jar jav_jar Soch_jar chorgh_jar Hut_jar wa’maH_jar wa’maH wa’_jar wa’maH cha’'.split('_'),\n    monthsParseExact: true,\n    weekdays: 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split('_'),\n    weekdaysShort: 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split('_'),\n    weekdaysMin: 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split('_'),\n    longDateFormat: {\n      LT: 'HH:mm',\n      LTS: 'HH:mm:ss',\n      L: 'DD.MM.YYYY',\n      LL: 'D MMMM YYYY',\n      LLL: 'D MMMM YYYY HH:mm',\n      LLLL: 'dddd, D MMMM YYYY HH:mm'\n    },\n    calendar: {\n      sameDay: '[DaHjaj] LT',\n      nextDay: '[wa’leS] LT',\n      nextWeek: 'LLL',\n      lastDay: '[wa’Hu’] LT',\n      lastWeek: 'LLL',\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: translateFuture,\n      past: translatePast,\n      s: 'puS lup',\n      ss: translate,\n      m: 'wa’ tup',\n      mm: translate,\n      h: 'wa’ rep',\n      hh: translate,\n      d: 'wa’ jaj',\n      dd: translate,\n      M: 'wa’ jar',\n      MM: translate,\n      y: 'wa’ DIS',\n      yy: translate\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n    ordinal: '%d.',\n    week: {\n      dow: 1,\n      // Monday is the first day of the week.\n      doy: 4 // The week that contains Jan 4th is the first week of the year.\n\n    }\n  });\n  return tlh;\n});","function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n;\n\n(function (global, factory) {\n  (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  var suffixes = {\n    1: '\\'inci',\n    5: '\\'inci',\n    8: '\\'inci',\n    70: '\\'inci',\n    80: '\\'inci',\n    2: '\\'nci',\n    7: '\\'nci',\n    20: '\\'nci',\n    50: '\\'nci',\n    3: '\\'üncü',\n    4: '\\'üncü',\n    100: '\\'üncü',\n    6: '\\'ncı',\n    9: '\\'uncu',\n    10: '\\'uncu',\n    30: '\\'uncu',\n    60: '\\'ıncı',\n    90: '\\'ıncı'\n  };\n  var tr = moment.defineLocale('tr', {\n    months: 'Ocak_Şubat_Mart_Nisan_Mayıs_Haziran_Temmuz_Ağustos_Eylül_Ekim_Kasım_Aralık'.split('_'),\n    monthsShort: 'Oca_Şub_Mar_Nis_May_Haz_Tem_Ağu_Eyl_Eki_Kas_Ara'.split('_'),\n    weekdays: 'Pazar_Pazartesi_Salı_Çarşamba_Perşembe_Cuma_Cumartesi'.split('_'),\n    weekdaysShort: 'Paz_Pts_Sal_Çar_Per_Cum_Cts'.split('_'),\n    weekdaysMin: 'Pz_Pt_Sa_Ça_Pe_Cu_Ct'.split('_'),\n    longDateFormat: {\n      LT: 'HH:mm',\n      LTS: 'HH:mm:ss',\n      L: 'DD.MM.YYYY',\n      LL: 'D MMMM YYYY',\n      LLL: 'D MMMM YYYY HH:mm',\n      LLLL: 'dddd, D MMMM YYYY HH:mm'\n    },\n    calendar: {\n      sameDay: '[bugün saat] LT',\n      nextDay: '[yarın saat] LT',\n      nextWeek: '[gelecek] dddd [saat] LT',\n      lastDay: '[dün] LT',\n      lastWeek: '[geçen] dddd [saat] LT',\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: '%s sonra',\n      past: '%s önce',\n      s: 'birkaç saniye',\n      ss: '%d saniye',\n      m: 'bir dakika',\n      mm: '%d dakika',\n      h: 'bir saat',\n      hh: '%d saat',\n      d: 'bir gün',\n      dd: '%d gün',\n      M: 'bir ay',\n      MM: '%d ay',\n      y: 'bir yıl',\n      yy: '%d yıl'\n    },\n    ordinal: function ordinal(number, period) {\n      switch (period) {\n        case 'd':\n        case 'D':\n        case 'Do':\n        case 'DD':\n          return number;\n\n        default:\n          if (number === 0) {\n            // special case for zero\n            return number + '\\'ıncı';\n          }\n\n          var a = number % 10,\n              b = number % 100 - a,\n              c = number >= 100 ? 100 : null;\n          return number + (suffixes[a] || suffixes[b] || suffixes[c]);\n      }\n    },\n    week: {\n      dow: 1,\n      // Monday is the first day of the week.\n      doy: 7 // The week that contains Jan 7th is the first week of the year.\n\n    }\n  });\n  return tr;\n});","function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n//! moment.js locale configuration\n;\n\n(function (global, factory) {\n  (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict'; // After the year there should be a slash and the amount of years since December 26, 1979 in Roman numerals.\n  // This is currently too difficult (maybe even impossible) to add.\n\n  var tzl = moment.defineLocale('tzl', {\n    months: 'Januar_Fevraglh_Març_Avrïu_Mai_Gün_Julia_Guscht_Setemvar_Listopäts_Noemvar_Zecemvar'.split('_'),\n    monthsShort: 'Jan_Fev_Mar_Avr_Mai_Gün_Jul_Gus_Set_Lis_Noe_Zec'.split('_'),\n    weekdays: 'Súladi_Lúneçi_Maitzi_Márcuri_Xhúadi_Viénerçi_Sáturi'.split('_'),\n    weekdaysShort: 'Súl_Lún_Mai_Már_Xhú_Vié_Sát'.split('_'),\n    weekdaysMin: 'Sú_Lú_Ma_Má_Xh_Vi_Sá'.split('_'),\n    longDateFormat: {\n      LT: 'HH.mm',\n      LTS: 'HH.mm.ss',\n      L: 'DD.MM.YYYY',\n      LL: 'D. MMMM [dallas] YYYY',\n      LLL: 'D. MMMM [dallas] YYYY HH.mm',\n      LLLL: 'dddd, [li] D. MMMM [dallas] YYYY HH.mm'\n    },\n    meridiemParse: /d\\'o|d\\'a/i,\n    isPM: function isPM(input) {\n      return 'd\\'o' === input.toLowerCase();\n    },\n    meridiem: function meridiem(hours, minutes, isLower) {\n      if (hours > 11) {\n        return isLower ? 'd\\'o' : 'D\\'O';\n      } else {\n        return isLower ? 'd\\'a' : 'D\\'A';\n      }\n    },\n    calendar: {\n      sameDay: '[oxhi à] LT',\n      nextDay: '[demà à] LT',\n      nextWeek: 'dddd [à] LT',\n      lastDay: '[ieiri à] LT',\n      lastWeek: '[sür el] dddd [lasteu à] LT',\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: 'osprei %s',\n      past: 'ja%s',\n      s: processRelativeTime,\n      ss: processRelativeTime,\n      m: processRelativeTime,\n      mm: processRelativeTime,\n      h: processRelativeTime,\n      hh: processRelativeTime,\n      d: processRelativeTime,\n      dd: processRelativeTime,\n      M: processRelativeTime,\n      MM: processRelativeTime,\n      y: processRelativeTime,\n      yy: processRelativeTime\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n    ordinal: '%d.',\n    week: {\n      dow: 1,\n      // Monday is the first day of the week.\n      doy: 4 // The week that contains Jan 4th is the first week of the year.\n\n    }\n  });\n\n  function processRelativeTime(number, withoutSuffix, key, isFuture) {\n    var format = {\n      's': ['viensas secunds', '\\'iensas secunds'],\n      'ss': [number + ' secunds', '' + number + ' secunds'],\n      'm': ['\\'n míut', '\\'iens míut'],\n      'mm': [number + ' míuts', '' + number + ' míuts'],\n      'h': ['\\'n þora', '\\'iensa þora'],\n      'hh': [number + ' þoras', '' + number + ' þoras'],\n      'd': ['\\'n ziua', '\\'iensa ziua'],\n      'dd': [number + ' ziuas', '' + number + ' ziuas'],\n      'M': ['\\'n mes', '\\'iens mes'],\n      'MM': [number + ' mesen', '' + number + ' mesen'],\n      'y': ['\\'n ar', '\\'iens ar'],\n      'yy': [number + ' ars', '' + number + ' ars']\n    };\n    return isFuture ? format[key][0] : withoutSuffix ? format[key][0] : format[key][1];\n  }\n\n  return tzl;\n});","function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n//! moment.js locale configuration\n;\n\n(function (global, factory) {\n  (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  var tzm = moment.defineLocale('tzm', {\n    months: 'ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ'.split('_'),\n    monthsShort: 'ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ'.split('_'),\n    weekdays: 'ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ'.split('_'),\n    weekdaysShort: 'ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ'.split('_'),\n    weekdaysMin: 'ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ'.split('_'),\n    longDateFormat: {\n      LT: 'HH:mm',\n      LTS: 'HH:mm:ss',\n      L: 'DD/MM/YYYY',\n      LL: 'D MMMM YYYY',\n      LLL: 'D MMMM YYYY HH:mm',\n      LLLL: 'dddd D MMMM YYYY HH:mm'\n    },\n    calendar: {\n      sameDay: '[ⴰⵙⴷⵅ ⴴ] LT',\n      nextDay: '[ⴰⵙⴽⴰ ⴴ] LT',\n      nextWeek: 'dddd [ⴴ] LT',\n      lastDay: '[ⴰⵚⴰⵏⵜ ⴴ] LT',\n      lastWeek: 'dddd [ⴴ] LT',\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: 'ⴷⴰⴷⵅ ⵙ ⵢⴰⵏ %s',\n      past: 'ⵢⴰⵏ %s',\n      s: 'ⵉⵎⵉⴽ',\n      ss: '%d ⵉⵎⵉⴽ',\n      m: 'ⵎⵉⵏⵓⴺ',\n      mm: '%d ⵎⵉⵏⵓⴺ',\n      h: 'ⵙⴰⵄⴰ',\n      hh: '%d ⵜⴰⵙⵙⴰⵄⵉⵏ',\n      d: 'ⴰⵙⵙ',\n      dd: '%d oⵙⵙⴰⵏ',\n      M: 'ⴰⵢoⵓⵔ',\n      MM: '%d ⵉⵢⵢⵉⵔⵏ',\n      y: 'ⴰⵙⴳⴰⵙ',\n      yy: '%d ⵉⵙⴳⴰⵙⵏ'\n    },\n    week: {\n      dow: 6,\n      // Saturday is the first day of the week.\n      doy: 12 // The week that contains Jan 12th is the first week of the year.\n\n    }\n  });\n  return tzm;\n});","function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n//! moment.js locale configuration\n;\n\n(function (global, factory) {\n  (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  var tzmLatn = moment.defineLocale('tzm-latn', {\n    months: 'innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir'.split('_'),\n    monthsShort: 'innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir'.split('_'),\n    weekdays: 'asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas'.split('_'),\n    weekdaysShort: 'asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas'.split('_'),\n    weekdaysMin: 'asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas'.split('_'),\n    longDateFormat: {\n      LT: 'HH:mm',\n      LTS: 'HH:mm:ss',\n      L: 'DD/MM/YYYY',\n      LL: 'D MMMM YYYY',\n      LLL: 'D MMMM YYYY HH:mm',\n      LLLL: 'dddd D MMMM YYYY HH:mm'\n    },\n    calendar: {\n      sameDay: '[asdkh g] LT',\n      nextDay: '[aska g] LT',\n      nextWeek: 'dddd [g] LT',\n      lastDay: '[assant g] LT',\n      lastWeek: 'dddd [g] LT',\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: 'dadkh s yan %s',\n      past: 'yan %s',\n      s: 'imik',\n      ss: '%d imik',\n      m: 'minuḍ',\n      mm: '%d minuḍ',\n      h: 'saɛa',\n      hh: '%d tassaɛin',\n      d: 'ass',\n      dd: '%d ossan',\n      M: 'ayowr',\n      MM: '%d iyyirn',\n      y: 'asgas',\n      yy: '%d isgasn'\n    },\n    week: {\n      dow: 6,\n      // Saturday is the first day of the week.\n      doy: 12 // The week that contains Jan 12th is the first week of the year.\n\n    }\n  });\n  return tzmLatn;\n});","function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n//! moment.js language configuration\n;\n\n(function (global, factory) {\n  (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  var ugCn = moment.defineLocale('ug-cn', {\n    months: 'يانۋار_فېۋرال_مارت_ئاپرېل_ماي_ئىيۇن_ئىيۇل_ئاۋغۇست_سېنتەبىر_ئۆكتەبىر_نويابىر_دېكابىر'.split('_'),\n    monthsShort: 'يانۋار_فېۋرال_مارت_ئاپرېل_ماي_ئىيۇن_ئىيۇل_ئاۋغۇست_سېنتەبىر_ئۆكتەبىر_نويابىر_دېكابىر'.split('_'),\n    weekdays: 'يەكشەنبە_دۈشەنبە_سەيشەنبە_چارشەنبە_پەيشەنبە_جۈمە_شەنبە'.split('_'),\n    weekdaysShort: 'يە_دۈ_سە_چا_پە_جۈ_شە'.split('_'),\n    weekdaysMin: 'يە_دۈ_سە_چا_پە_جۈ_شە'.split('_'),\n    longDateFormat: {\n      LT: 'HH:mm',\n      LTS: 'HH:mm:ss',\n      L: 'YYYY-MM-DD',\n      LL: 'YYYY-يىلىM-ئاينىڭD-كۈنى',\n      LLL: 'YYYY-يىلىM-ئاينىڭD-كۈنى، HH:mm',\n      LLLL: 'dddd، YYYY-يىلىM-ئاينىڭD-كۈنى، HH:mm'\n    },\n    meridiemParse: /يېرىم كېچە|سەھەر|چۈشتىن بۇرۇن|چۈش|چۈشتىن كېيىن|كەچ/,\n    meridiemHour: function meridiemHour(hour, meridiem) {\n      if (hour === 12) {\n        hour = 0;\n      }\n\n      if (meridiem === 'يېرىم كېچە' || meridiem === 'سەھەر' || meridiem === 'چۈشتىن بۇرۇن') {\n        return hour;\n      } else if (meridiem === 'چۈشتىن كېيىن' || meridiem === 'كەچ') {\n        return hour + 12;\n      } else {\n        return hour >= 11 ? hour : hour + 12;\n      }\n    },\n    meridiem: function meridiem(hour, minute, isLower) {\n      var hm = hour * 100 + minute;\n\n      if (hm < 600) {\n        return 'يېرىم كېچە';\n      } else if (hm < 900) {\n        return 'سەھەر';\n      } else if (hm < 1130) {\n        return 'چۈشتىن بۇرۇن';\n      } else if (hm < 1230) {\n        return 'چۈش';\n      } else if (hm < 1800) {\n        return 'چۈشتىن كېيىن';\n      } else {\n        return 'كەچ';\n      }\n    },\n    calendar: {\n      sameDay: '[بۈگۈن سائەت] LT',\n      nextDay: '[ئەتە سائەت] LT',\n      nextWeek: '[كېلەركى] dddd [سائەت] LT',\n      lastDay: '[تۆنۈگۈن] LT',\n      lastWeek: '[ئالدىنقى] dddd [سائەت] LT',\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: '%s كېيىن',\n      past: '%s بۇرۇن',\n      s: 'نەچچە سېكونت',\n      ss: '%d سېكونت',\n      m: 'بىر مىنۇت',\n      mm: '%d مىنۇت',\n      h: 'بىر سائەت',\n      hh: '%d سائەت',\n      d: 'بىر كۈن',\n      dd: '%d كۈن',\n      M: 'بىر ئاي',\n      MM: '%d ئاي',\n      y: 'بىر يىل',\n      yy: '%d يىل'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}(-كۈنى|-ئاي|-ھەپتە)/,\n    ordinal: function ordinal(number, period) {\n      switch (period) {\n        case 'd':\n        case 'D':\n        case 'DDD':\n          return number + '-كۈنى';\n\n        case 'w':\n        case 'W':\n          return number + '-ھەپتە';\n\n        default:\n          return number;\n      }\n    },\n    preparse: function preparse(string) {\n      return string.replace(/،/g, ',');\n    },\n    postformat: function postformat(string) {\n      return string.replace(/,/g, '،');\n    },\n    week: {\n      // GB/T 7408-1994《数据元和交换格式·信息交换·日期和时间表示法》与ISO 8601:1988等效\n      dow: 1,\n      // Monday is the first day of the week.\n      doy: 7 // The week that contains Jan 1st is the first week of the year.\n\n    }\n  });\n  return ugCn;\n});","function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n//! moment.js locale configuration\n;\n\n(function (global, factory) {\n  (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  function plural(word, num) {\n    var forms = word.split('_');\n    return num % 10 === 1 && num % 100 !== 11 ? forms[0] : num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20) ? forms[1] : forms[2];\n  }\n\n  function relativeTimeWithPlural(number, withoutSuffix, key) {\n    var format = {\n      'ss': withoutSuffix ? 'секунда_секунди_секунд' : 'секунду_секунди_секунд',\n      'mm': withoutSuffix ? 'хвилина_хвилини_хвилин' : 'хвилину_хвилини_хвилин',\n      'hh': withoutSuffix ? 'година_години_годин' : 'годину_години_годин',\n      'dd': 'день_дні_днів',\n      'MM': 'місяць_місяці_місяців',\n      'yy': 'рік_роки_років'\n    };\n\n    if (key === 'm') {\n      return withoutSuffix ? 'хвилина' : 'хвилину';\n    } else if (key === 'h') {\n      return withoutSuffix ? 'година' : 'годину';\n    } else {\n      return number + ' ' + plural(format[key], +number);\n    }\n  }\n\n  function weekdaysCaseReplace(m, format) {\n    var weekdays = {\n      'nominative': 'неділя_понеділок_вівторок_середа_четвер_п’ятниця_субота'.split('_'),\n      'accusative': 'неділю_понеділок_вівторок_середу_четвер_п’ятницю_суботу'.split('_'),\n      'genitive': 'неділі_понеділка_вівторка_середи_четверга_п’ятниці_суботи'.split('_')\n    };\n\n    if (m === true) {\n      return weekdays['nominative'].slice(1, 7).concat(weekdays['nominative'].slice(0, 1));\n    }\n\n    if (!m) {\n      return weekdays['nominative'];\n    }\n\n    var nounCase = /(\\[[ВвУу]\\]) ?dddd/.test(format) ? 'accusative' : /\\[?(?:минулої|наступної)? ?\\] ?dddd/.test(format) ? 'genitive' : 'nominative';\n    return weekdays[nounCase][m.day()];\n  }\n\n  function processHoursFunction(str) {\n    return function () {\n      return str + 'о' + (this.hours() === 11 ? 'б' : '') + '] LT';\n    };\n  }\n\n  var uk = moment.defineLocale('uk', {\n    months: {\n      'format': 'січня_лютого_березня_квітня_травня_червня_липня_серпня_вересня_жовтня_листопада_грудня'.split('_'),\n      'standalone': 'січень_лютий_березень_квітень_травень_червень_липень_серпень_вересень_жовтень_листопад_грудень'.split('_')\n    },\n    monthsShort: 'січ_лют_бер_квіт_трав_черв_лип_серп_вер_жовт_лист_груд'.split('_'),\n    weekdays: weekdaysCaseReplace,\n    weekdaysShort: 'нд_пн_вт_ср_чт_пт_сб'.split('_'),\n    weekdaysMin: 'нд_пн_вт_ср_чт_пт_сб'.split('_'),\n    longDateFormat: {\n      LT: 'HH:mm',\n      LTS: 'HH:mm:ss',\n      L: 'DD.MM.YYYY',\n      LL: 'D MMMM YYYY р.',\n      LLL: 'D MMMM YYYY р., HH:mm',\n      LLLL: 'dddd, D MMMM YYYY р., HH:mm'\n    },\n    calendar: {\n      sameDay: processHoursFunction('[Сьогодні '),\n      nextDay: processHoursFunction('[Завтра '),\n      lastDay: processHoursFunction('[Вчора '),\n      nextWeek: processHoursFunction('[У] dddd ['),\n      lastWeek: function lastWeek() {\n        switch (this.day()) {\n          case 0:\n          case 3:\n          case 5:\n          case 6:\n            return processHoursFunction('[Минулої] dddd [').call(this);\n\n          case 1:\n          case 2:\n          case 4:\n            return processHoursFunction('[Минулого] dddd [').call(this);\n        }\n      },\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: 'за %s',\n      past: '%s тому',\n      s: 'декілька секунд',\n      ss: relativeTimeWithPlural,\n      m: relativeTimeWithPlural,\n      mm: relativeTimeWithPlural,\n      h: 'годину',\n      hh: relativeTimeWithPlural,\n      d: 'день',\n      dd: relativeTimeWithPlural,\n      M: 'місяць',\n      MM: relativeTimeWithPlural,\n      y: 'рік',\n      yy: relativeTimeWithPlural\n    },\n    // M. E.: those two are virtually unused but a user might want to implement them for his/her website for some reason\n    meridiemParse: /ночі|ранку|дня|вечора/,\n    isPM: function isPM(input) {\n      return /^(дня|вечора)$/.test(input);\n    },\n    meridiem: function meridiem(hour, minute, isLower) {\n      if (hour < 4) {\n        return 'ночі';\n      } else if (hour < 12) {\n        return 'ранку';\n      } else if (hour < 17) {\n        return 'дня';\n      } else {\n        return 'вечора';\n      }\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}-(й|го)/,\n    ordinal: function ordinal(number, period) {\n      switch (period) {\n        case 'M':\n        case 'd':\n        case 'DDD':\n        case 'w':\n        case 'W':\n          return number + '-й';\n\n        case 'D':\n          return number + '-го';\n\n        default:\n          return number;\n      }\n    },\n    week: {\n      dow: 1,\n      // Monday is the first day of the week.\n      doy: 7 // The week that contains Jan 7th is the first week of the year.\n\n    }\n  });\n  return uk;\n});","function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n//! moment.js locale configuration\n;\n\n(function (global, factory) {\n  (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  var months = ['جنوری', 'فروری', 'مارچ', 'اپریل', 'مئی', 'جون', 'جولائی', 'اگست', 'ستمبر', 'اکتوبر', 'نومبر', 'دسمبر'];\n  var days = ['اتوار', 'پیر', 'منگل', 'بدھ', 'جمعرات', 'جمعہ', 'ہفتہ'];\n  var ur = moment.defineLocale('ur', {\n    months: months,\n    monthsShort: months,\n    weekdays: days,\n    weekdaysShort: days,\n    weekdaysMin: days,\n    longDateFormat: {\n      LT: 'HH:mm',\n      LTS: 'HH:mm:ss',\n      L: 'DD/MM/YYYY',\n      LL: 'D MMMM YYYY',\n      LLL: 'D MMMM YYYY HH:mm',\n      LLLL: 'dddd، D MMMM YYYY HH:mm'\n    },\n    meridiemParse: /صبح|شام/,\n    isPM: function isPM(input) {\n      return 'شام' === input;\n    },\n    meridiem: function meridiem(hour, minute, isLower) {\n      if (hour < 12) {\n        return 'صبح';\n      }\n\n      return 'شام';\n    },\n    calendar: {\n      sameDay: '[آج بوقت] LT',\n      nextDay: '[کل بوقت] LT',\n      nextWeek: 'dddd [بوقت] LT',\n      lastDay: '[گذشتہ روز بوقت] LT',\n      lastWeek: '[گذشتہ] dddd [بوقت] LT',\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: '%s بعد',\n      past: '%s قبل',\n      s: 'چند سیکنڈ',\n      ss: '%d سیکنڈ',\n      m: 'ایک منٹ',\n      mm: '%d منٹ',\n      h: 'ایک گھنٹہ',\n      hh: '%d گھنٹے',\n      d: 'ایک دن',\n      dd: '%d دن',\n      M: 'ایک ماہ',\n      MM: '%d ماہ',\n      y: 'ایک سال',\n      yy: '%d سال'\n    },\n    preparse: function preparse(string) {\n      return string.replace(/،/g, ',');\n    },\n    postformat: function postformat(string) {\n      return string.replace(/,/g, '،');\n    },\n    week: {\n      dow: 1,\n      // Monday is the first day of the week.\n      doy: 4 // The week that contains Jan 4th is the first week of the year.\n\n    }\n  });\n  return ur;\n});","function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n//! moment.js locale configuration\n;\n\n(function (global, factory) {\n  (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  var uz = moment.defineLocale('uz', {\n    months: 'январ_феврал_март_апрел_май_июн_июл_август_сентябр_октябр_ноябр_декабр'.split('_'),\n    monthsShort: 'янв_фев_мар_апр_май_июн_июл_авг_сен_окт_ноя_дек'.split('_'),\n    weekdays: 'Якшанба_Душанба_Сешанба_Чоршанба_Пайшанба_Жума_Шанба'.split('_'),\n    weekdaysShort: 'Якш_Душ_Сеш_Чор_Пай_Жум_Шан'.split('_'),\n    weekdaysMin: 'Як_Ду_Се_Чо_Па_Жу_Ша'.split('_'),\n    longDateFormat: {\n      LT: 'HH:mm',\n      LTS: 'HH:mm:ss',\n      L: 'DD/MM/YYYY',\n      LL: 'D MMMM YYYY',\n      LLL: 'D MMMM YYYY HH:mm',\n      LLLL: 'D MMMM YYYY, dddd HH:mm'\n    },\n    calendar: {\n      sameDay: '[Бугун соат] LT [да]',\n      nextDay: '[Эртага] LT [да]',\n      nextWeek: 'dddd [куни соат] LT [да]',\n      lastDay: '[Кеча соат] LT [да]',\n      lastWeek: '[Утган] dddd [куни соат] LT [да]',\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: 'Якин %s ичида',\n      past: 'Бир неча %s олдин',\n      s: 'фурсат',\n      ss: '%d фурсат',\n      m: 'бир дакика',\n      mm: '%d дакика',\n      h: 'бир соат',\n      hh: '%d соат',\n      d: 'бир кун',\n      dd: '%d кун',\n      M: 'бир ой',\n      MM: '%d ой',\n      y: 'бир йил',\n      yy: '%d йил'\n    },\n    week: {\n      dow: 1,\n      // Monday is the first day of the week.\n      doy: 7 // The week that contains Jan 4th is the first week of the year.\n\n    }\n  });\n  return uz;\n});","function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n//! moment.js locale configuration\n;\n\n(function (global, factory) {\n  (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  var uzLatn = moment.defineLocale('uz-latn', {\n    months: 'Yanvar_Fevral_Mart_Aprel_May_Iyun_Iyul_Avgust_Sentabr_Oktabr_Noyabr_Dekabr'.split('_'),\n    monthsShort: 'Yan_Fev_Mar_Apr_May_Iyun_Iyul_Avg_Sen_Okt_Noy_Dek'.split('_'),\n    weekdays: 'Yakshanba_Dushanba_Seshanba_Chorshanba_Payshanba_Juma_Shanba'.split('_'),\n    weekdaysShort: 'Yak_Dush_Sesh_Chor_Pay_Jum_Shan'.split('_'),\n    weekdaysMin: 'Ya_Du_Se_Cho_Pa_Ju_Sha'.split('_'),\n    longDateFormat: {\n      LT: 'HH:mm',\n      LTS: 'HH:mm:ss',\n      L: 'DD/MM/YYYY',\n      LL: 'D MMMM YYYY',\n      LLL: 'D MMMM YYYY HH:mm',\n      LLLL: 'D MMMM YYYY, dddd HH:mm'\n    },\n    calendar: {\n      sameDay: '[Bugun soat] LT [da]',\n      nextDay: '[Ertaga] LT [da]',\n      nextWeek: 'dddd [kuni soat] LT [da]',\n      lastDay: '[Kecha soat] LT [da]',\n      lastWeek: '[O\\'tgan] dddd [kuni soat] LT [da]',\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: 'Yaqin %s ichida',\n      past: 'Bir necha %s oldin',\n      s: 'soniya',\n      ss: '%d soniya',\n      m: 'bir daqiqa',\n      mm: '%d daqiqa',\n      h: 'bir soat',\n      hh: '%d soat',\n      d: 'bir kun',\n      dd: '%d kun',\n      M: 'bir oy',\n      MM: '%d oy',\n      y: 'bir yil',\n      yy: '%d yil'\n    },\n    week: {\n      dow: 1,\n      // Monday is the first day of the week.\n      doy: 7 // The week that contains Jan 7th is the first week of the year.\n\n    }\n  });\n  return uzLatn;\n});","function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n//! moment.js locale configuration\n;\n\n(function (global, factory) {\n  (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  var vi = moment.defineLocale('vi', {\n    months: 'tháng 1_tháng 2_tháng 3_tháng 4_tháng 5_tháng 6_tháng 7_tháng 8_tháng 9_tháng 10_tháng 11_tháng 12'.split('_'),\n    monthsShort: 'Th01_Th02_Th03_Th04_Th05_Th06_Th07_Th08_Th09_Th10_Th11_Th12'.split('_'),\n    monthsParseExact: true,\n    weekdays: 'chủ nhật_thứ hai_thứ ba_thứ tư_thứ năm_thứ sáu_thứ bảy'.split('_'),\n    weekdaysShort: 'CN_T2_T3_T4_T5_T6_T7'.split('_'),\n    weekdaysMin: 'CN_T2_T3_T4_T5_T6_T7'.split('_'),\n    weekdaysParseExact: true,\n    meridiemParse: /sa|ch/i,\n    isPM: function isPM(input) {\n      return /^ch$/i.test(input);\n    },\n    meridiem: function meridiem(hours, minutes, isLower) {\n      if (hours < 12) {\n        return isLower ? 'sa' : 'SA';\n      } else {\n        return isLower ? 'ch' : 'CH';\n      }\n    },\n    longDateFormat: {\n      LT: 'HH:mm',\n      LTS: 'HH:mm:ss',\n      L: 'DD/MM/YYYY',\n      LL: 'D MMMM [năm] YYYY',\n      LLL: 'D MMMM [năm] YYYY HH:mm',\n      LLLL: 'dddd, D MMMM [năm] YYYY HH:mm',\n      l: 'DD/M/YYYY',\n      ll: 'D MMM YYYY',\n      lll: 'D MMM YYYY HH:mm',\n      llll: 'ddd, D MMM YYYY HH:mm'\n    },\n    calendar: {\n      sameDay: '[Hôm nay lúc] LT',\n      nextDay: '[Ngày mai lúc] LT',\n      nextWeek: 'dddd [tuần tới lúc] LT',\n      lastDay: '[Hôm qua lúc] LT',\n      lastWeek: 'dddd [tuần rồi lúc] LT',\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: '%s tới',\n      past: '%s trước',\n      s: 'vài giây',\n      ss: '%d giây',\n      m: 'một phút',\n      mm: '%d phút',\n      h: 'một giờ',\n      hh: '%d giờ',\n      d: 'một ngày',\n      dd: '%d ngày',\n      M: 'một tháng',\n      MM: '%d tháng',\n      y: 'một năm',\n      yy: '%d năm'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}/,\n    ordinal: function ordinal(number) {\n      return number;\n    },\n    week: {\n      dow: 1,\n      // Monday is the first day of the week.\n      doy: 4 // The week that contains Jan 4th is the first week of the year.\n\n    }\n  });\n  return vi;\n});","function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n//! moment.js locale configuration\n;\n\n(function (global, factory) {\n  (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  var xPseudo = moment.defineLocale('x-pseudo', {\n    months: 'J~áñúá~rý_F~ébrú~árý_~Márc~h_Áp~ríl_~Máý_~Júñé~_Júl~ý_Áú~gúst~_Sép~témb~ér_Ó~ctób~ér_Ñ~óvém~bér_~Décé~mbér'.split('_'),\n    monthsShort: 'J~áñ_~Féb_~Már_~Ápr_~Máý_~Júñ_~Júl_~Áúg_~Sép_~Óct_~Ñóv_~Déc'.split('_'),\n    monthsParseExact: true,\n    weekdays: 'S~úñdá~ý_Mó~ñdáý~_Túé~sdáý~_Wéd~ñésd~áý_T~húrs~dáý_~Fríd~áý_S~átúr~dáý'.split('_'),\n    weekdaysShort: 'S~úñ_~Móñ_~Túé_~Wéd_~Thú_~Frí_~Sát'.split('_'),\n    weekdaysMin: 'S~ú_Mó~_Tú_~Wé_T~h_Fr~_Sá'.split('_'),\n    weekdaysParseExact: true,\n    longDateFormat: {\n      LT: 'HH:mm',\n      L: 'DD/MM/YYYY',\n      LL: 'D MMMM YYYY',\n      LLL: 'D MMMM YYYY HH:mm',\n      LLLL: 'dddd, D MMMM YYYY HH:mm'\n    },\n    calendar: {\n      sameDay: '[T~ódá~ý át] LT',\n      nextDay: '[T~ómó~rró~w át] LT',\n      nextWeek: 'dddd [át] LT',\n      lastDay: '[Ý~ést~érdá~ý át] LT',\n      lastWeek: '[L~ást] dddd [át] LT',\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: 'í~ñ %s',\n      past: '%s á~gó',\n      s: 'á ~féw ~sécó~ñds',\n      ss: '%d s~écóñ~ds',\n      m: 'á ~míñ~úté',\n      mm: '%d m~íñú~tés',\n      h: 'á~ñ hó~úr',\n      hh: '%d h~óúrs',\n      d: 'á ~dáý',\n      dd: '%d d~áýs',\n      M: 'á ~móñ~th',\n      MM: '%d m~óñt~hs',\n      y: 'á ~ýéár',\n      yy: '%d ý~éárs'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}(th|st|nd|rd)/,\n    ordinal: function ordinal(number) {\n      var b = number % 10,\n          output = ~~(number % 100 / 10) === 1 ? 'th' : b === 1 ? 'st' : b === 2 ? 'nd' : b === 3 ? 'rd' : 'th';\n      return number + output;\n    },\n    week: {\n      dow: 1,\n      // Monday is the first day of the week.\n      doy: 4 // The week that contains Jan 4th is the first week of the year.\n\n    }\n  });\n  return xPseudo;\n});","function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n//! moment.js locale configuration\n;\n\n(function (global, factory) {\n  (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  var yo = moment.defineLocale('yo', {\n    months: 'Sẹ́rẹ́_Èrèlè_Ẹrẹ̀nà_Ìgbé_Èbibi_Òkùdu_Agẹmo_Ògún_Owewe_Ọ̀wàrà_Bélú_Ọ̀pẹ̀̀'.split('_'),\n    monthsShort: 'Sẹ́r_Èrl_Ẹrn_Ìgb_Èbi_Òkù_Agẹ_Ògú_Owe_Ọ̀wà_Bél_Ọ̀pẹ̀̀'.split('_'),\n    weekdays: 'Àìkú_Ajé_Ìsẹ́gun_Ọjọ́rú_Ọjọ́bọ_Ẹtì_Àbámẹ́ta'.split('_'),\n    weekdaysShort: 'Àìk_Ajé_Ìsẹ́_Ọjr_Ọjb_Ẹtì_Àbá'.split('_'),\n    weekdaysMin: 'Àì_Aj_Ìs_Ọr_Ọb_Ẹt_Àb'.split('_'),\n    longDateFormat: {\n      LT: 'h:mm A',\n      LTS: 'h:mm:ss A',\n      L: 'DD/MM/YYYY',\n      LL: 'D MMMM YYYY',\n      LLL: 'D MMMM YYYY h:mm A',\n      LLLL: 'dddd, D MMMM YYYY h:mm A'\n    },\n    calendar: {\n      sameDay: '[Ònì ni] LT',\n      nextDay: '[Ọ̀la ni] LT',\n      nextWeek: 'dddd [Ọsẹ̀ tón\\'bọ] [ni] LT',\n      lastDay: '[Àna ni] LT',\n      lastWeek: 'dddd [Ọsẹ̀ tólọ́] [ni] LT',\n      sameElse: 'L'\n    },\n    relativeTime: {\n      future: 'ní %s',\n      past: '%s kọjá',\n      s: 'ìsẹjú aayá die',\n      ss: 'aayá %d',\n      m: 'ìsẹjú kan',\n      mm: 'ìsẹjú %d',\n      h: 'wákati kan',\n      hh: 'wákati %d',\n      d: 'ọjọ́ kan',\n      dd: 'ọjọ́ %d',\n      M: 'osù kan',\n      MM: 'osù %d',\n      y: 'ọdún kan',\n      yy: 'ọdún %d'\n    },\n    dayOfMonthOrdinalParse: /ọjọ́\\s\\d{1,2}/,\n    ordinal: 'ọjọ́ %d',\n    week: {\n      dow: 1,\n      // Monday is the first day of the week.\n      doy: 4 // The week that contains Jan 4th is the first week of the year.\n\n    }\n  });\n  return yo;\n});","function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n//! moment.js locale configuration\n;\n\n(function (global, factory) {\n  (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  var zhCn = moment.defineLocale('zh-cn', {\n    months: '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split('_'),\n    monthsShort: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'),\n    weekdays: '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'),\n    weekdaysShort: '周日_周一_周二_周三_周四_周五_周六'.split('_'),\n    weekdaysMin: '日_一_二_三_四_五_六'.split('_'),\n    longDateFormat: {\n      LT: 'HH:mm',\n      LTS: 'HH:mm:ss',\n      L: 'YYYY/MM/DD',\n      LL: 'YYYY年M月D日',\n      LLL: 'YYYY年M月D日Ah点mm分',\n      LLLL: 'YYYY年M月D日ddddAh点mm分',\n      l: 'YYYY/M/D',\n      ll: 'YYYY年M月D日',\n      lll: 'YYYY年M月D日 HH:mm',\n      llll: 'YYYY年M月D日dddd HH:mm'\n    },\n    meridiemParse: /凌晨|早上|上午|中午|下午|晚上/,\n    meridiemHour: function meridiemHour(hour, meridiem) {\n      if (hour === 12) {\n        hour = 0;\n      }\n\n      if (meridiem === '凌晨' || meridiem === '早上' || meridiem === '上午') {\n        return hour;\n      } else if (meridiem === '下午' || meridiem === '晚上') {\n        return hour + 12;\n      } else {\n        // '中午'\n        return hour >= 11 ? hour : hour + 12;\n      }\n    },\n    meridiem: function meridiem(hour, minute, isLower) {\n      var hm = hour * 100 + minute;\n\n      if (hm < 600) {\n        return '凌晨';\n      } else if (hm < 900) {\n        return '早上';\n      } else if (hm < 1130) {\n        return '上午';\n      } else if (hm < 1230) {\n        return '中午';\n      } else if (hm < 1800) {\n        return '下午';\n      } else {\n        return '晚上';\n      }\n    },\n    calendar: {\n      sameDay: '[今天]LT',\n      nextDay: '[明天]LT',\n      nextWeek: '[下]ddddLT',\n      lastDay: '[昨天]LT',\n      lastWeek: '[上]ddddLT',\n      sameElse: 'L'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}(日|月|周)/,\n    ordinal: function ordinal(number, period) {\n      switch (period) {\n        case 'd':\n        case 'D':\n        case 'DDD':\n          return number + '日';\n\n        case 'M':\n          return number + '月';\n\n        case 'w':\n        case 'W':\n          return number + '周';\n\n        default:\n          return number;\n      }\n    },\n    relativeTime: {\n      future: '%s内',\n      past: '%s前',\n      s: '几秒',\n      ss: '%d 秒',\n      m: '1 分钟',\n      mm: '%d 分钟',\n      h: '1 小时',\n      hh: '%d 小时',\n      d: '1 天',\n      dd: '%d 天',\n      M: '1 个月',\n      MM: '%d 个月',\n      y: '1 年',\n      yy: '%d 年'\n    },\n    week: {\n      // GB/T 7408-1994《数据元和交换格式·信息交换·日期和时间表示法》与ISO 8601:1988等效\n      dow: 1,\n      // Monday is the first day of the week.\n      doy: 4 // The week that contains Jan 4th is the first week of the year.\n\n    }\n  });\n  return zhCn;\n});","function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n//! moment.js locale configuration\n;\n\n(function (global, factory) {\n  (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  var zhHk = moment.defineLocale('zh-hk', {\n    months: '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split('_'),\n    monthsShort: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'),\n    weekdays: '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'),\n    weekdaysShort: '週日_週一_週二_週三_週四_週五_週六'.split('_'),\n    weekdaysMin: '日_一_二_三_四_五_六'.split('_'),\n    longDateFormat: {\n      LT: 'HH:mm',\n      LTS: 'HH:mm:ss',\n      L: 'YYYY/MM/DD',\n      LL: 'YYYY年M月D日',\n      LLL: 'YYYY年M月D日 HH:mm',\n      LLLL: 'YYYY年M月D日dddd HH:mm',\n      l: 'YYYY/M/D',\n      ll: 'YYYY年M月D日',\n      lll: 'YYYY年M月D日 HH:mm',\n      llll: 'YYYY年M月D日dddd HH:mm'\n    },\n    meridiemParse: /凌晨|早上|上午|中午|下午|晚上/,\n    meridiemHour: function meridiemHour(hour, meridiem) {\n      if (hour === 12) {\n        hour = 0;\n      }\n\n      if (meridiem === '凌晨' || meridiem === '早上' || meridiem === '上午') {\n        return hour;\n      } else if (meridiem === '中午') {\n        return hour >= 11 ? hour : hour + 12;\n      } else if (meridiem === '下午' || meridiem === '晚上') {\n        return hour + 12;\n      }\n    },\n    meridiem: function meridiem(hour, minute, isLower) {\n      var hm = hour * 100 + minute;\n\n      if (hm < 600) {\n        return '凌晨';\n      } else if (hm < 900) {\n        return '早上';\n      } else if (hm < 1130) {\n        return '上午';\n      } else if (hm < 1230) {\n        return '中午';\n      } else if (hm < 1800) {\n        return '下午';\n      } else {\n        return '晚上';\n      }\n    },\n    calendar: {\n      sameDay: '[今天]LT',\n      nextDay: '[明天]LT',\n      nextWeek: '[下]ddddLT',\n      lastDay: '[昨天]LT',\n      lastWeek: '[上]ddddLT',\n      sameElse: 'L'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}(日|月|週)/,\n    ordinal: function ordinal(number, period) {\n      switch (period) {\n        case 'd':\n        case 'D':\n        case 'DDD':\n          return number + '日';\n\n        case 'M':\n          return number + '月';\n\n        case 'w':\n        case 'W':\n          return number + '週';\n\n        default:\n          return number;\n      }\n    },\n    relativeTime: {\n      future: '%s內',\n      past: '%s前',\n      s: '幾秒',\n      ss: '%d 秒',\n      m: '1 分鐘',\n      mm: '%d 分鐘',\n      h: '1 小時',\n      hh: '%d 小時',\n      d: '1 天',\n      dd: '%d 天',\n      M: '1 個月',\n      MM: '%d 個月',\n      y: '1 年',\n      yy: '%d 年'\n    }\n  });\n  return zhHk;\n});","function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n//! moment.js locale configuration\n;\n\n(function (global, factory) {\n  (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) === 'object' && typeof module !== 'undefined' && typeof require === 'function' ? factory(require('../moment')) : typeof define === 'function' && define.amd ? define(['../moment'], factory) : factory(global.moment);\n})(this, function (moment) {\n  'use strict';\n\n  var zhTw = moment.defineLocale('zh-tw', {\n    months: '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split('_'),\n    monthsShort: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'),\n    weekdays: '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'),\n    weekdaysShort: '週日_週一_週二_週三_週四_週五_週六'.split('_'),\n    weekdaysMin: '日_一_二_三_四_五_六'.split('_'),\n    longDateFormat: {\n      LT: 'HH:mm',\n      LTS: 'HH:mm:ss',\n      L: 'YYYY/MM/DD',\n      LL: 'YYYY年M月D日',\n      LLL: 'YYYY年M月D日 HH:mm',\n      LLLL: 'YYYY年M月D日dddd HH:mm',\n      l: 'YYYY/M/D',\n      ll: 'YYYY年M月D日',\n      lll: 'YYYY年M月D日 HH:mm',\n      llll: 'YYYY年M月D日dddd HH:mm'\n    },\n    meridiemParse: /凌晨|早上|上午|中午|下午|晚上/,\n    meridiemHour: function meridiemHour(hour, meridiem) {\n      if (hour === 12) {\n        hour = 0;\n      }\n\n      if (meridiem === '凌晨' || meridiem === '早上' || meridiem === '上午') {\n        return hour;\n      } else if (meridiem === '中午') {\n        return hour >= 11 ? hour : hour + 12;\n      } else if (meridiem === '下午' || meridiem === '晚上') {\n        return hour + 12;\n      }\n    },\n    meridiem: function meridiem(hour, minute, isLower) {\n      var hm = hour * 100 + minute;\n\n      if (hm < 600) {\n        return '凌晨';\n      } else if (hm < 900) {\n        return '早上';\n      } else if (hm < 1130) {\n        return '上午';\n      } else if (hm < 1230) {\n        return '中午';\n      } else if (hm < 1800) {\n        return '下午';\n      } else {\n        return '晚上';\n      }\n    },\n    calendar: {\n      sameDay: '[今天] LT',\n      nextDay: '[明天] LT',\n      nextWeek: '[下]dddd LT',\n      lastDay: '[昨天] LT',\n      lastWeek: '[上]dddd LT',\n      sameElse: 'L'\n    },\n    dayOfMonthOrdinalParse: /\\d{1,2}(日|月|週)/,\n    ordinal: function ordinal(number, period) {\n      switch (period) {\n        case 'd':\n        case 'D':\n        case 'DDD':\n          return number + '日';\n\n        case 'M':\n          return number + '月';\n\n        case 'w':\n        case 'W':\n          return number + '週';\n\n        default:\n          return number;\n      }\n    },\n    relativeTime: {\n      future: '%s內',\n      past: '%s前',\n      s: '幾秒',\n      ss: '%d 秒',\n      m: '1 分鐘',\n      mm: '%d 分鐘',\n      h: '1 小時',\n      hh: '%d 小時',\n      d: '1 天',\n      dd: '%d 天',\n      M: '1 個月',\n      MM: '%d 個月',\n      y: '1 年',\n      yy: '%d 年'\n    }\n  });\n  return zhTw;\n});","'use strict';\n/**\n * Representation a of zip file in js\n * @constructor\n */\n\nfunction JSZip() {\n  // if this constructor is used without `new`, it adds `new` before itself:\n  if (!(this instanceof JSZip)) {\n    return new JSZip();\n  }\n\n  if (arguments.length) {\n    throw new Error(\"The constructor with parameters has been removed in JSZip 3.0, please check the upgrade guide.\");\n  } // object containing the files :\n  // {\n  //   \"folder/\" : {...},\n  //   \"folder/data.txt\" : {...}\n  // }\n\n\n  this.files = {};\n  this.comment = null; // Where we are in the hierarchy\n\n  this.root = \"\";\n\n  this.clone = function () {\n    var newObj = new JSZip();\n\n    for (var i in this) {\n      if (typeof this[i] !== \"function\") {\n        newObj[i] = this[i];\n      }\n    }\n\n    return newObj;\n  };\n}\n\nJSZip.prototype = require('./object');\nJSZip.prototype.loadAsync = require('./load');\nJSZip.support = require('./support');\nJSZip.defaults = require('./defaults'); // TODO find a better way to handle this version,\n// a require('package.json').version doesn't work with webpack, see #327\n\nJSZip.version = \"3.2.0\";\n\nJSZip.loadAsync = function (content, options) {\n  return new JSZip().loadAsync(content, options);\n};\n\nJSZip.external = require(\"./external\");\nmodule.exports = JSZip;","var toString = {}.toString;\n\nmodule.exports = Array.isArray || function (arr) {\n  return toString.call(arr) == '[object Array]';\n};","/*\n * This file is used by module bundlers (browserify/webpack/etc) when\n * including a stream implementation. We use \"readable-stream\" to get a\n * consistent behavior between nodejs versions but bundlers often have a shim\n * for \"stream\". Using this shim greatly improve the compatibility and greatly\n * reduce the final size of the bundle (only one stream implementation, not\n * two).\n */\nmodule.exports = require(\"stream\");","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n'use strict';\n/*<replacement>*/\n\nvar pna = require('process-nextick-args');\n/*</replacement>*/\n\n\nmodule.exports = Readable;\n/*<replacement>*/\n\nvar isArray = require('isarray');\n/*</replacement>*/\n\n/*<replacement>*/\n\n\nvar Duplex;\n/*</replacement>*/\n\nReadable.ReadableState = ReadableState;\n/*<replacement>*/\n\nvar EE = require('events').EventEmitter;\n\nvar EElistenerCount = function EElistenerCount(emitter, type) {\n  return emitter.listeners(type).length;\n};\n/*</replacement>*/\n\n/*<replacement>*/\n\n\nvar Stream = require('./internal/streams/stream');\n/*</replacement>*/\n\n/*<replacement>*/\n\n\nvar Buffer = require('safe-buffer').Buffer;\n\nvar OurUint8Array = global.Uint8Array || function () {};\n\nfunction _uint8ArrayToBuffer(chunk) {\n  return Buffer.from(chunk);\n}\n\nfunction _isUint8Array(obj) {\n  return Buffer.isBuffer(obj) || obj instanceof OurUint8Array;\n}\n/*</replacement>*/\n\n/*<replacement>*/\n\n\nvar util = require('core-util-is');\n\nutil.inherits = require('inherits');\n/*</replacement>*/\n\n/*<replacement>*/\n\nvar debugUtil = require('util');\n\nvar debug = void 0;\n\nif (debugUtil && debugUtil.debuglog) {\n  debug = debugUtil.debuglog('stream');\n} else {\n  debug = function debug() {};\n}\n/*</replacement>*/\n\n\nvar BufferList = require('./internal/streams/BufferList');\n\nvar destroyImpl = require('./internal/streams/destroy');\n\nvar StringDecoder;\nutil.inherits(Readable, Stream);\nvar kProxyEvents = ['error', 'close', 'destroy', 'pause', 'resume'];\n\nfunction prependListener(emitter, event, fn) {\n  // Sadly this is not cacheable as some libraries bundle their own\n  // event emitter implementation with them.\n  if (typeof emitter.prependListener === 'function') return emitter.prependListener(event, fn); // This is a hack to make sure that our error handler is attached before any\n  // userland ones.  NEVER DO THIS. This is here only because this code needs\n  // to continue to work with older versions of Node.js that do not include\n  // the prependListener() method. The goal is to eventually remove this hack.\n\n  if (!emitter._events || !emitter._events[event]) emitter.on(event, fn);else if (isArray(emitter._events[event])) emitter._events[event].unshift(fn);else emitter._events[event] = [fn, emitter._events[event]];\n}\n\nfunction ReadableState(options, stream) {\n  Duplex = Duplex || require('./_stream_duplex');\n  options = options || {}; // Duplex streams are both readable and writable, but share\n  // the same options object.\n  // However, some cases require setting options to different\n  // values for the readable and the writable sides of the duplex stream.\n  // These options can be provided separately as readableXXX and writableXXX.\n\n  var isDuplex = stream instanceof Duplex; // object stream flag. Used to make read(n) ignore n and to\n  // make all the buffer merging and length checks go away\n\n  this.objectMode = !!options.objectMode;\n  if (isDuplex) this.objectMode = this.objectMode || !!options.readableObjectMode; // the point at which it stops calling _read() to fill the buffer\n  // Note: 0 is a valid value, means \"don't call _read preemptively ever\"\n\n  var hwm = options.highWaterMark;\n  var readableHwm = options.readableHighWaterMark;\n  var defaultHwm = this.objectMode ? 16 : 16 * 1024;\n  if (hwm || hwm === 0) this.highWaterMark = hwm;else if (isDuplex && (readableHwm || readableHwm === 0)) this.highWaterMark = readableHwm;else this.highWaterMark = defaultHwm; // cast to ints.\n\n  this.highWaterMark = Math.floor(this.highWaterMark); // A linked list is used to store data chunks instead of an array because the\n  // linked list can remove elements from the beginning faster than\n  // array.shift()\n\n  this.buffer = new BufferList();\n  this.length = 0;\n  this.pipes = null;\n  this.pipesCount = 0;\n  this.flowing = null;\n  this.ended = false;\n  this.endEmitted = false;\n  this.reading = false; // a flag to be able to tell if the event 'readable'/'data' is emitted\n  // immediately, or on a later tick.  We set this to true at first, because\n  // any actions that shouldn't happen until \"later\" should generally also\n  // not happen before the first read call.\n\n  this.sync = true; // whenever we return null, then we set a flag to say\n  // that we're awaiting a 'readable' event emission.\n\n  this.needReadable = false;\n  this.emittedReadable = false;\n  this.readableListening = false;\n  this.resumeScheduled = false; // has it been destroyed\n\n  this.destroyed = false; // Crypto is kind of old and crusty.  Historically, its default string\n  // encoding is 'binary' so we have to make this configurable.\n  // Everything else in the universe uses 'utf8', though.\n\n  this.defaultEncoding = options.defaultEncoding || 'utf8'; // the number of writers that are awaiting a drain event in .pipe()s\n\n  this.awaitDrain = 0; // if true, a maybeReadMore has been scheduled\n\n  this.readingMore = false;\n  this.decoder = null;\n  this.encoding = null;\n\n  if (options.encoding) {\n    if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;\n    this.decoder = new StringDecoder(options.encoding);\n    this.encoding = options.encoding;\n  }\n}\n\nfunction Readable(options) {\n  Duplex = Duplex || require('./_stream_duplex');\n  if (!(this instanceof Readable)) return new Readable(options);\n  this._readableState = new ReadableState(options, this); // legacy\n\n  this.readable = true;\n\n  if (options) {\n    if (typeof options.read === 'function') this._read = options.read;\n    if (typeof options.destroy === 'function') this._destroy = options.destroy;\n  }\n\n  Stream.call(this);\n}\n\nObject.defineProperty(Readable.prototype, 'destroyed', {\n  get: function get() {\n    if (this._readableState === undefined) {\n      return false;\n    }\n\n    return this._readableState.destroyed;\n  },\n  set: function set(value) {\n    // we ignore the value if the stream\n    // has not been initialized yet\n    if (!this._readableState) {\n      return;\n    } // backward compatibility, the user is explicitly\n    // managing destroyed\n\n\n    this._readableState.destroyed = value;\n  }\n});\nReadable.prototype.destroy = destroyImpl.destroy;\nReadable.prototype._undestroy = destroyImpl.undestroy;\n\nReadable.prototype._destroy = function (err, cb) {\n  this.push(null);\n  cb(err);\n}; // Manually shove something into the read() buffer.\n// This returns true if the highWaterMark has not been hit yet,\n// similar to how Writable.write() returns true if you should\n// write() some more.\n\n\nReadable.prototype.push = function (chunk, encoding) {\n  var state = this._readableState;\n  var skipChunkCheck;\n\n  if (!state.objectMode) {\n    if (typeof chunk === 'string') {\n      encoding = encoding || state.defaultEncoding;\n\n      if (encoding !== state.encoding) {\n        chunk = Buffer.from(chunk, encoding);\n        encoding = '';\n      }\n\n      skipChunkCheck = true;\n    }\n  } else {\n    skipChunkCheck = true;\n  }\n\n  return readableAddChunk(this, chunk, encoding, false, skipChunkCheck);\n}; // Unshift should *always* be something directly out of read()\n\n\nReadable.prototype.unshift = function (chunk) {\n  return readableAddChunk(this, chunk, null, true, false);\n};\n\nfunction readableAddChunk(stream, chunk, encoding, addToFront, skipChunkCheck) {\n  var state = stream._readableState;\n\n  if (chunk === null) {\n    state.reading = false;\n    onEofChunk(stream, state);\n  } else {\n    var er;\n    if (!skipChunkCheck) er = chunkInvalid(state, chunk);\n\n    if (er) {\n      stream.emit('error', er);\n    } else if (state.objectMode || chunk && chunk.length > 0) {\n      if (typeof chunk !== 'string' && !state.objectMode && Object.getPrototypeOf(chunk) !== Buffer.prototype) {\n        chunk = _uint8ArrayToBuffer(chunk);\n      }\n\n      if (addToFront) {\n        if (state.endEmitted) stream.emit('error', new Error('stream.unshift() after end event'));else addChunk(stream, state, chunk, true);\n      } else if (state.ended) {\n        stream.emit('error', new Error('stream.push() after EOF'));\n      } else {\n        state.reading = false;\n\n        if (state.decoder && !encoding) {\n          chunk = state.decoder.write(chunk);\n          if (state.objectMode || chunk.length !== 0) addChunk(stream, state, chunk, false);else maybeReadMore(stream, state);\n        } else {\n          addChunk(stream, state, chunk, false);\n        }\n      }\n    } else if (!addToFront) {\n      state.reading = false;\n    }\n  }\n\n  return needMoreData(state);\n}\n\nfunction addChunk(stream, state, chunk, addToFront) {\n  if (state.flowing && state.length === 0 && !state.sync) {\n    stream.emit('data', chunk);\n    stream.read(0);\n  } else {\n    // update the buffer info.\n    state.length += state.objectMode ? 1 : chunk.length;\n    if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk);\n    if (state.needReadable) emitReadable(stream);\n  }\n\n  maybeReadMore(stream, state);\n}\n\nfunction chunkInvalid(state, chunk) {\n  var er;\n\n  if (!_isUint8Array(chunk) && typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) {\n    er = new TypeError('Invalid non-string/buffer chunk');\n  }\n\n  return er;\n} // if it's past the high water mark, we can push in some more.\n// Also, if we have no data yet, we can stand some\n// more bytes.  This is to work around cases where hwm=0,\n// such as the repl.  Also, if the push() triggered a\n// readable event, and the user called read(largeNumber) such that\n// needReadable was set, then we ought to push more, so that another\n// 'readable' event will be triggered.\n\n\nfunction needMoreData(state) {\n  return !state.ended && (state.needReadable || state.length < state.highWaterMark || state.length === 0);\n}\n\nReadable.prototype.isPaused = function () {\n  return this._readableState.flowing === false;\n}; // backwards compatibility.\n\n\nReadable.prototype.setEncoding = function (enc) {\n  if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder;\n  this._readableState.decoder = new StringDecoder(enc);\n  this._readableState.encoding = enc;\n  return this;\n}; // Don't raise the hwm > 8MB\n\n\nvar MAX_HWM = 0x800000;\n\nfunction computeNewHighWaterMark(n) {\n  if (n >= MAX_HWM) {\n    n = MAX_HWM;\n  } else {\n    // Get the next highest power of 2 to prevent increasing hwm excessively in\n    // tiny amounts\n    n--;\n    n |= n >>> 1;\n    n |= n >>> 2;\n    n |= n >>> 4;\n    n |= n >>> 8;\n    n |= n >>> 16;\n    n++;\n  }\n\n  return n;\n} // This function is designed to be inlinable, so please take care when making\n// changes to the function body.\n\n\nfunction howMuchToRead(n, state) {\n  if (n <= 0 || state.length === 0 && state.ended) return 0;\n  if (state.objectMode) return 1;\n\n  if (n !== n) {\n    // Only flow one buffer at a time\n    if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length;\n  } // If we're asking for more than the current hwm, then raise the hwm.\n\n\n  if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n);\n  if (n <= state.length) return n; // Don't have enough\n\n  if (!state.ended) {\n    state.needReadable = true;\n    return 0;\n  }\n\n  return state.length;\n} // you can override either this method, or the async _read(n) below.\n\n\nReadable.prototype.read = function (n) {\n  debug('read', n);\n  n = parseInt(n, 10);\n  var state = this._readableState;\n  var nOrig = n;\n  if (n !== 0) state.emittedReadable = false; // if we're doing read(0) to trigger a readable event, but we\n  // already have a bunch of data in the buffer, then just trigger\n  // the 'readable' event and move on.\n\n  if (n === 0 && state.needReadable && (state.length >= state.highWaterMark || state.ended)) {\n    debug('read: emitReadable', state.length, state.ended);\n    if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this);\n    return null;\n  }\n\n  n = howMuchToRead(n, state); // if we've ended, and we're now clear, then finish it up.\n\n  if (n === 0 && state.ended) {\n    if (state.length === 0) endReadable(this);\n    return null;\n  } // All the actual chunk generation logic needs to be\n  // *below* the call to _read.  The reason is that in certain\n  // synthetic stream cases, such as passthrough streams, _read\n  // may be a completely synchronous operation which may change\n  // the state of the read buffer, providing enough data when\n  // before there was *not* enough.\n  //\n  // So, the steps are:\n  // 1. Figure out what the state of things will be after we do\n  // a read from the buffer.\n  //\n  // 2. If that resulting state will trigger a _read, then call _read.\n  // Note that this may be asynchronous, or synchronous.  Yes, it is\n  // deeply ugly to write APIs this way, but that still doesn't mean\n  // that the Readable class should behave improperly, as streams are\n  // designed to be sync/async agnostic.\n  // Take note if the _read call is sync or async (ie, if the read call\n  // has returned yet), so that we know whether or not it's safe to emit\n  // 'readable' etc.\n  //\n  // 3. Actually pull the requested chunks out of the buffer and return.\n  // if we need a readable event, then we need to do some reading.\n\n\n  var doRead = state.needReadable;\n  debug('need readable', doRead); // if we currently have less than the highWaterMark, then also read some\n\n  if (state.length === 0 || state.length - n < state.highWaterMark) {\n    doRead = true;\n    debug('length less than watermark', doRead);\n  } // however, if we've ended, then there's no point, and if we're already\n  // reading, then it's unnecessary.\n\n\n  if (state.ended || state.reading) {\n    doRead = false;\n    debug('reading or ended', doRead);\n  } else if (doRead) {\n    debug('do read');\n    state.reading = true;\n    state.sync = true; // if the length is currently zero, then we *need* a readable event.\n\n    if (state.length === 0) state.needReadable = true; // call internal read method\n\n    this._read(state.highWaterMark);\n\n    state.sync = false; // If _read pushed data synchronously, then `reading` will be false,\n    // and we need to re-evaluate how much data we can return to the user.\n\n    if (!state.reading) n = howMuchToRead(nOrig, state);\n  }\n\n  var ret;\n  if (n > 0) ret = fromList(n, state);else ret = null;\n\n  if (ret === null) {\n    state.needReadable = true;\n    n = 0;\n  } else {\n    state.length -= n;\n  }\n\n  if (state.length === 0) {\n    // If we have nothing in the buffer, then we want to know\n    // as soon as we *do* get something into the buffer.\n    if (!state.ended) state.needReadable = true; // If we tried to read() past the EOF, then emit end on the next tick.\n\n    if (nOrig !== n && state.ended) endReadable(this);\n  }\n\n  if (ret !== null) this.emit('data', ret);\n  return ret;\n};\n\nfunction onEofChunk(stream, state) {\n  if (state.ended) return;\n\n  if (state.decoder) {\n    var chunk = state.decoder.end();\n\n    if (chunk && chunk.length) {\n      state.buffer.push(chunk);\n      state.length += state.objectMode ? 1 : chunk.length;\n    }\n  }\n\n  state.ended = true; // emit 'readable' now to make sure it gets picked up.\n\n  emitReadable(stream);\n} // Don't emit readable right away in sync mode, because this can trigger\n// another read() call => stack overflow.  This way, it might trigger\n// a nextTick recursion warning, but that's not so bad.\n\n\nfunction emitReadable(stream) {\n  var state = stream._readableState;\n  state.needReadable = false;\n\n  if (!state.emittedReadable) {\n    debug('emitReadable', state.flowing);\n    state.emittedReadable = true;\n    if (state.sync) pna.nextTick(emitReadable_, stream);else emitReadable_(stream);\n  }\n}\n\nfunction emitReadable_(stream) {\n  debug('emit readable');\n  stream.emit('readable');\n  flow(stream);\n} // at this point, the user has presumably seen the 'readable' event,\n// and called read() to consume some data.  that may have triggered\n// in turn another _read(n) call, in which case reading = true if\n// it's in progress.\n// However, if we're not ended, or reading, and the length < hwm,\n// then go ahead and try to read some more preemptively.\n\n\nfunction maybeReadMore(stream, state) {\n  if (!state.readingMore) {\n    state.readingMore = true;\n    pna.nextTick(maybeReadMore_, stream, state);\n  }\n}\n\nfunction maybeReadMore_(stream, state) {\n  var len = state.length;\n\n  while (!state.reading && !state.flowing && !state.ended && state.length < state.highWaterMark) {\n    debug('maybeReadMore read 0');\n    stream.read(0);\n    if (len === state.length) // didn't get any data, stop spinning.\n      break;else len = state.length;\n  }\n\n  state.readingMore = false;\n} // abstract method.  to be overridden in specific implementation classes.\n// call cb(er, data) where data is <= n in length.\n// for virtual (non-string, non-buffer) streams, \"length\" is somewhat\n// arbitrary, and perhaps not very meaningful.\n\n\nReadable.prototype._read = function (n) {\n  this.emit('error', new Error('_read() is not implemented'));\n};\n\nReadable.prototype.pipe = function (dest, pipeOpts) {\n  var src = this;\n  var state = this._readableState;\n\n  switch (state.pipesCount) {\n    case 0:\n      state.pipes = dest;\n      break;\n\n    case 1:\n      state.pipes = [state.pipes, dest];\n      break;\n\n    default:\n      state.pipes.push(dest);\n      break;\n  }\n\n  state.pipesCount += 1;\n  debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts);\n  var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr;\n  var endFn = doEnd ? onend : unpipe;\n  if (state.endEmitted) pna.nextTick(endFn);else src.once('end', endFn);\n  dest.on('unpipe', onunpipe);\n\n  function onunpipe(readable, unpipeInfo) {\n    debug('onunpipe');\n\n    if (readable === src) {\n      if (unpipeInfo && unpipeInfo.hasUnpiped === false) {\n        unpipeInfo.hasUnpiped = true;\n        cleanup();\n      }\n    }\n  }\n\n  function onend() {\n    debug('onend');\n    dest.end();\n  } // when the dest drains, it reduces the awaitDrain counter\n  // on the source.  This would be more elegant with a .once()\n  // handler in flow(), but adding and removing repeatedly is\n  // too slow.\n\n\n  var ondrain = pipeOnDrain(src);\n  dest.on('drain', ondrain);\n  var cleanedUp = false;\n\n  function cleanup() {\n    debug('cleanup'); // cleanup event handlers once the pipe is broken\n\n    dest.removeListener('close', onclose);\n    dest.removeListener('finish', onfinish);\n    dest.removeListener('drain', ondrain);\n    dest.removeListener('error', onerror);\n    dest.removeListener('unpipe', onunpipe);\n    src.removeListener('end', onend);\n    src.removeListener('end', unpipe);\n    src.removeListener('data', ondata);\n    cleanedUp = true; // if the reader is waiting for a drain event from this\n    // specific writer, then it would cause it to never start\n    // flowing again.\n    // So, if this is awaiting a drain, then we just call it now.\n    // If we don't know, then assume that we are waiting for one.\n\n    if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain();\n  } // If the user pushes more data while we're writing to dest then we'll end up\n  // in ondata again. However, we only want to increase awaitDrain once because\n  // dest will only emit one 'drain' event for the multiple writes.\n  // => Introduce a guard on increasing awaitDrain.\n\n\n  var increasedAwaitDrain = false;\n  src.on('data', ondata);\n\n  function ondata(chunk) {\n    debug('ondata');\n    increasedAwaitDrain = false;\n    var ret = dest.write(chunk);\n\n    if (false === ret && !increasedAwaitDrain) {\n      // If the user unpiped during `dest.write()`, it is possible\n      // to get stuck in a permanently paused state if that write\n      // also returned false.\n      // => Check whether `dest` is still a piping destination.\n      if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) {\n        debug('false write response, pause', src._readableState.awaitDrain);\n        src._readableState.awaitDrain++;\n        increasedAwaitDrain = true;\n      }\n\n      src.pause();\n    }\n  } // if the dest has an error, then stop piping into it.\n  // however, don't suppress the throwing behavior for this.\n\n\n  function onerror(er) {\n    debug('onerror', er);\n    unpipe();\n    dest.removeListener('error', onerror);\n    if (EElistenerCount(dest, 'error') === 0) dest.emit('error', er);\n  } // Make sure our error handler is attached before userland ones.\n\n\n  prependListener(dest, 'error', onerror); // Both close and finish should trigger unpipe, but only once.\n\n  function onclose() {\n    dest.removeListener('finish', onfinish);\n    unpipe();\n  }\n\n  dest.once('close', onclose);\n\n  function onfinish() {\n    debug('onfinish');\n    dest.removeListener('close', onclose);\n    unpipe();\n  }\n\n  dest.once('finish', onfinish);\n\n  function unpipe() {\n    debug('unpipe');\n    src.unpipe(dest);\n  } // tell the dest that it's being piped to\n\n\n  dest.emit('pipe', src); // start the flow if it hasn't been started already.\n\n  if (!state.flowing) {\n    debug('pipe resume');\n    src.resume();\n  }\n\n  return dest;\n};\n\nfunction pipeOnDrain(src) {\n  return function () {\n    var state = src._readableState;\n    debug('pipeOnDrain', state.awaitDrain);\n    if (state.awaitDrain) state.awaitDrain--;\n\n    if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) {\n      state.flowing = true;\n      flow(src);\n    }\n  };\n}\n\nReadable.prototype.unpipe = function (dest) {\n  var state = this._readableState;\n  var unpipeInfo = {\n    hasUnpiped: false\n  }; // if we're not piping anywhere, then do nothing.\n\n  if (state.pipesCount === 0) return this; // just one destination.  most common case.\n\n  if (state.pipesCount === 1) {\n    // passed in one, but it's not the right one.\n    if (dest && dest !== state.pipes) return this;\n    if (!dest) dest = state.pipes; // got a match.\n\n    state.pipes = null;\n    state.pipesCount = 0;\n    state.flowing = false;\n    if (dest) dest.emit('unpipe', this, unpipeInfo);\n    return this;\n  } // slow case. multiple pipe destinations.\n\n\n  if (!dest) {\n    // remove all.\n    var dests = state.pipes;\n    var len = state.pipesCount;\n    state.pipes = null;\n    state.pipesCount = 0;\n    state.flowing = false;\n\n    for (var i = 0; i < len; i++) {\n      dests[i].emit('unpipe', this, unpipeInfo);\n    }\n\n    return this;\n  } // try to find the right one.\n\n\n  var index = indexOf(state.pipes, dest);\n  if (index === -1) return this;\n  state.pipes.splice(index, 1);\n  state.pipesCount -= 1;\n  if (state.pipesCount === 1) state.pipes = state.pipes[0];\n  dest.emit('unpipe', this, unpipeInfo);\n  return this;\n}; // set up data events if they are asked for\n// Ensure readable listeners eventually get something\n\n\nReadable.prototype.on = function (ev, fn) {\n  var res = Stream.prototype.on.call(this, ev, fn);\n\n  if (ev === 'data') {\n    // Start flowing on next tick if stream isn't explicitly paused\n    if (this._readableState.flowing !== false) this.resume();\n  } else if (ev === 'readable') {\n    var state = this._readableState;\n\n    if (!state.endEmitted && !state.readableListening) {\n      state.readableListening = state.needReadable = true;\n      state.emittedReadable = false;\n\n      if (!state.reading) {\n        pna.nextTick(nReadingNextTick, this);\n      } else if (state.length) {\n        emitReadable(this);\n      }\n    }\n  }\n\n  return res;\n};\n\nReadable.prototype.addListener = Readable.prototype.on;\n\nfunction nReadingNextTick(self) {\n  debug('readable nexttick read 0');\n  self.read(0);\n} // pause() and resume() are remnants of the legacy readable stream API\n// If the user uses them, then switch into old mode.\n\n\nReadable.prototype.resume = function () {\n  var state = this._readableState;\n\n  if (!state.flowing) {\n    debug('resume');\n    state.flowing = true;\n    resume(this, state);\n  }\n\n  return this;\n};\n\nfunction resume(stream, state) {\n  if (!state.resumeScheduled) {\n    state.resumeScheduled = true;\n    pna.nextTick(resume_, stream, state);\n  }\n}\n\nfunction resume_(stream, state) {\n  if (!state.reading) {\n    debug('resume read 0');\n    stream.read(0);\n  }\n\n  state.resumeScheduled = false;\n  state.awaitDrain = 0;\n  stream.emit('resume');\n  flow(stream);\n  if (state.flowing && !state.reading) stream.read(0);\n}\n\nReadable.prototype.pause = function () {\n  debug('call pause flowing=%j', this._readableState.flowing);\n\n  if (false !== this._readableState.flowing) {\n    debug('pause');\n    this._readableState.flowing = false;\n    this.emit('pause');\n  }\n\n  return this;\n};\n\nfunction flow(stream) {\n  var state = stream._readableState;\n  debug('flow', state.flowing);\n\n  while (state.flowing && stream.read() !== null) {}\n} // wrap an old-style stream as the async data source.\n// This is *not* part of the readable stream interface.\n// It is an ugly unfortunate mess of history.\n\n\nReadable.prototype.wrap = function (stream) {\n  var _this = this;\n\n  var state = this._readableState;\n  var paused = false;\n  stream.on('end', function () {\n    debug('wrapped end');\n\n    if (state.decoder && !state.ended) {\n      var chunk = state.decoder.end();\n      if (chunk && chunk.length) _this.push(chunk);\n    }\n\n    _this.push(null);\n  });\n  stream.on('data', function (chunk) {\n    debug('wrapped data');\n    if (state.decoder) chunk = state.decoder.write(chunk); // don't skip over falsy values in objectMode\n\n    if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return;\n\n    var ret = _this.push(chunk);\n\n    if (!ret) {\n      paused = true;\n      stream.pause();\n    }\n  }); // proxy all the other methods.\n  // important when wrapping filters and duplexes.\n\n  for (var i in stream) {\n    if (this[i] === undefined && typeof stream[i] === 'function') {\n      this[i] = function (method) {\n        return function () {\n          return stream[method].apply(stream, arguments);\n        };\n      }(i);\n    }\n  } // proxy certain important events.\n\n\n  for (var n = 0; n < kProxyEvents.length; n++) {\n    stream.on(kProxyEvents[n], this.emit.bind(this, kProxyEvents[n]));\n  } // when we try to consume some more bytes, simply unpause the\n  // underlying stream.\n\n\n  this._read = function (n) {\n    debug('wrapped _read', n);\n\n    if (paused) {\n      paused = false;\n      stream.resume();\n    }\n  };\n\n  return this;\n};\n\nObject.defineProperty(Readable.prototype, 'readableHighWaterMark', {\n  // making it explicit this property is not enumerable\n  // because otherwise some prototype manipulation in\n  // userland will fail\n  enumerable: false,\n  get: function get() {\n    return this._readableState.highWaterMark;\n  }\n}); // exposed for testing purposes only.\n\nReadable._fromList = fromList; // Pluck off n bytes from an array of buffers.\n// Length is the combined lengths of all the buffers in the list.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\n\nfunction fromList(n, state) {\n  // nothing buffered\n  if (state.length === 0) return null;\n  var ret;\n  if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) {\n    // read it all, truncate the list\n    if (state.decoder) ret = state.buffer.join('');else if (state.buffer.length === 1) ret = state.buffer.head.data;else ret = state.buffer.concat(state.length);\n    state.buffer.clear();\n  } else {\n    // read part of list\n    ret = fromListPartial(n, state.buffer, state.decoder);\n  }\n  return ret;\n} // Extracts only enough buffered data to satisfy the amount requested.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\n\n\nfunction fromListPartial(n, list, hasStrings) {\n  var ret;\n\n  if (n < list.head.data.length) {\n    // slice is the same for buffers and strings\n    ret = list.head.data.slice(0, n);\n    list.head.data = list.head.data.slice(n);\n  } else if (n === list.head.data.length) {\n    // first chunk is a perfect match\n    ret = list.shift();\n  } else {\n    // result spans more than one buffer\n    ret = hasStrings ? copyFromBufferString(n, list) : copyFromBuffer(n, list);\n  }\n\n  return ret;\n} // Copies a specified amount of characters from the list of buffered data\n// chunks.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\n\n\nfunction copyFromBufferString(n, list) {\n  var p = list.head;\n  var c = 1;\n  var ret = p.data;\n  n -= ret.length;\n\n  while (p = p.next) {\n    var str = p.data;\n    var nb = n > str.length ? str.length : n;\n    if (nb === str.length) ret += str;else ret += str.slice(0, n);\n    n -= nb;\n\n    if (n === 0) {\n      if (nb === str.length) {\n        ++c;\n        if (p.next) list.head = p.next;else list.head = list.tail = null;\n      } else {\n        list.head = p;\n        p.data = str.slice(nb);\n      }\n\n      break;\n    }\n\n    ++c;\n  }\n\n  list.length -= c;\n  return ret;\n} // Copies a specified amount of bytes from the list of buffered data chunks.\n// This function is designed to be inlinable, so please take care when making\n// changes to the function body.\n\n\nfunction copyFromBuffer(n, list) {\n  var ret = Buffer.allocUnsafe(n);\n  var p = list.head;\n  var c = 1;\n  p.data.copy(ret);\n  n -= p.data.length;\n\n  while (p = p.next) {\n    var buf = p.data;\n    var nb = n > buf.length ? buf.length : n;\n    buf.copy(ret, ret.length - n, 0, nb);\n    n -= nb;\n\n    if (n === 0) {\n      if (nb === buf.length) {\n        ++c;\n        if (p.next) list.head = p.next;else list.head = list.tail = null;\n      } else {\n        list.head = p;\n        p.data = buf.slice(nb);\n      }\n\n      break;\n    }\n\n    ++c;\n  }\n\n  list.length -= c;\n  return ret;\n}\n\nfunction endReadable(stream) {\n  var state = stream._readableState; // If we get here before consuming all the bytes, then that is a\n  // bug in node.  Should never happen.\n\n  if (state.length > 0) throw new Error('\"endReadable()\" called on non-empty stream');\n\n  if (!state.endEmitted) {\n    state.ended = true;\n    pna.nextTick(endReadableNT, state, stream);\n  }\n}\n\nfunction endReadableNT(state, stream) {\n  // Check that we didn't get one last unshift.\n  if (!state.endEmitted && state.length === 0) {\n    state.endEmitted = true;\n    stream.readable = false;\n    stream.emit('end');\n  }\n}\n\nfunction indexOf(xs, x) {\n  for (var i = 0, l = xs.length; i < l; i++) {\n    if (xs[i] === x) return i;\n  }\n\n  return -1;\n}","module.exports = require('events').EventEmitter;","'use strict';\n/*<replacement>*/\n\nvar pna = require('process-nextick-args');\n/*</replacement>*/\n// undocumented cb() API, needed for core, not for public API\n\n\nfunction destroy(err, cb) {\n  var _this = this;\n\n  var readableDestroyed = this._readableState && this._readableState.destroyed;\n  var writableDestroyed = this._writableState && this._writableState.destroyed;\n\n  if (readableDestroyed || writableDestroyed) {\n    if (cb) {\n      cb(err);\n    } else if (err && (!this._writableState || !this._writableState.errorEmitted)) {\n      pna.nextTick(emitErrorNT, this, err);\n    }\n\n    return this;\n  } // we set destroyed to true before firing error callbacks in order\n  // to make it re-entrance safe in case destroy() is called within callbacks\n\n\n  if (this._readableState) {\n    this._readableState.destroyed = true;\n  } // if this is a duplex stream mark the writable part as destroyed as well\n\n\n  if (this._writableState) {\n    this._writableState.destroyed = true;\n  }\n\n  this._destroy(err || null, function (err) {\n    if (!cb && err) {\n      pna.nextTick(emitErrorNT, _this, err);\n\n      if (_this._writableState) {\n        _this._writableState.errorEmitted = true;\n      }\n    } else if (cb) {\n      cb(err);\n    }\n  });\n\n  return this;\n}\n\nfunction undestroy() {\n  if (this._readableState) {\n    this._readableState.destroyed = false;\n    this._readableState.reading = false;\n    this._readableState.ended = false;\n    this._readableState.endEmitted = false;\n  }\n\n  if (this._writableState) {\n    this._writableState.destroyed = false;\n    this._writableState.ended = false;\n    this._writableState.ending = false;\n    this._writableState.finished = false;\n    this._writableState.errorEmitted = false;\n  }\n}\n\nfunction emitErrorNT(self, err) {\n  self.emit('error', err);\n}\n\nmodule.exports = {\n  destroy: destroy,\n  undestroy: undestroy\n};","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n// a transform stream is a readable/writable stream where you do\n// something with the data.  Sometimes it's called a \"filter\",\n// but that's not a great name for it, since that implies a thing where\n// some bits pass through, and others are simply ignored.  (That would\n// be a valid example of a transform, of course.)\n//\n// While the output is causally related to the input, it's not a\n// necessarily symmetric or synchronous transformation.  For example,\n// a zlib stream might take multiple plain-text writes(), and then\n// emit a single compressed chunk some time in the future.\n//\n// Here's how this works:\n//\n// The Transform stream has all the aspects of the readable and writable\n// stream classes.  When you write(chunk), that calls _write(chunk,cb)\n// internally, and returns false if there's a lot of pending writes\n// buffered up.  When you call read(), that calls _read(n) until\n// there's enough pending readable data buffered up.\n//\n// In a transform stream, the written data is placed in a buffer.  When\n// _read(n) is called, it transforms the queued up data, calling the\n// buffered _write cb's as it consumes chunks.  If consuming a single\n// written chunk would result in multiple output chunks, then the first\n// outputted bit calls the readcb, and subsequent chunks just go into\n// the read buffer, and will cause it to emit 'readable' if necessary.\n//\n// This way, back-pressure is actually determined by the reading side,\n// since _read has to be called to start processing a new chunk.  However,\n// a pathological inflate type of transform can cause excessive buffering\n// here.  For example, imagine a stream where every byte of input is\n// interpreted as an integer from 0-255, and then results in that many\n// bytes of output.  Writing the 4 bytes {ff,ff,ff,ff} would result in\n// 1kb of data being output.  In this case, you could write a very small\n// amount of input, and end up with a very large amount of output.  In\n// such a pathological inflating mechanism, there'd be no way to tell\n// the system to stop doing the transform.  A single 4MB write could\n// cause the system to run out of memory.\n//\n// However, even in such a pathological case, only a single written chunk\n// would be consumed, and then the rest would wait (un-transformed) until\n// the results of the previous transformed chunk were consumed.\n'use strict';\n\nmodule.exports = Transform;\n\nvar Duplex = require('./_stream_duplex');\n/*<replacement>*/\n\n\nvar util = require('core-util-is');\n\nutil.inherits = require('inherits');\n/*</replacement>*/\n\nutil.inherits(Transform, Duplex);\n\nfunction afterTransform(er, data) {\n  var ts = this._transformState;\n  ts.transforming = false;\n  var cb = ts.writecb;\n\n  if (!cb) {\n    return this.emit('error', new Error('write callback called multiple times'));\n  }\n\n  ts.writechunk = null;\n  ts.writecb = null;\n  if (data != null) // single equals check for both `null` and `undefined`\n    this.push(data);\n  cb(er);\n  var rs = this._readableState;\n  rs.reading = false;\n\n  if (rs.needReadable || rs.length < rs.highWaterMark) {\n    this._read(rs.highWaterMark);\n  }\n}\n\nfunction Transform(options) {\n  if (!(this instanceof Transform)) return new Transform(options);\n  Duplex.call(this, options);\n  this._transformState = {\n    afterTransform: afterTransform.bind(this),\n    needTransform: false,\n    transforming: false,\n    writecb: null,\n    writechunk: null,\n    writeencoding: null\n  }; // start out asking for a readable event once data is transformed.\n\n  this._readableState.needReadable = true; // we have implemented the _read method, and done the other things\n  // that Readable wants before the first _read call, so unset the\n  // sync guard flag.\n\n  this._readableState.sync = false;\n\n  if (options) {\n    if (typeof options.transform === 'function') this._transform = options.transform;\n    if (typeof options.flush === 'function') this._flush = options.flush;\n  } // When the writable side finishes, then flush out anything remaining.\n\n\n  this.on('prefinish', prefinish);\n}\n\nfunction prefinish() {\n  var _this = this;\n\n  if (typeof this._flush === 'function') {\n    this._flush(function (er, data) {\n      done(_this, er, data);\n    });\n  } else {\n    done(this, null, null);\n  }\n}\n\nTransform.prototype.push = function (chunk, encoding) {\n  this._transformState.needTransform = false;\n  return Duplex.prototype.push.call(this, chunk, encoding);\n}; // This is the part where you do stuff!\n// override this function in implementation classes.\n// 'chunk' is an input chunk.\n//\n// Call `push(newChunk)` to pass along transformed output\n// to the readable side.  You may call 'push' zero or more times.\n//\n// Call `cb(err)` when you are done with this chunk.  If you pass\n// an error, then that'll put the hurt on the whole operation.  If you\n// never call cb(), then you'll never get another chunk.\n\n\nTransform.prototype._transform = function (chunk, encoding, cb) {\n  throw new Error('_transform() is not implemented');\n};\n\nTransform.prototype._write = function (chunk, encoding, cb) {\n  var ts = this._transformState;\n  ts.writecb = cb;\n  ts.writechunk = chunk;\n  ts.writeencoding = encoding;\n\n  if (!ts.transforming) {\n    var rs = this._readableState;\n    if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark);\n  }\n}; // Doesn't matter what the args are here.\n// _transform does all the work.\n// That we got here means that the readable side wants more data.\n\n\nTransform.prototype._read = function (n) {\n  var ts = this._transformState;\n\n  if (ts.writechunk !== null && ts.writecb && !ts.transforming) {\n    ts.transforming = true;\n\n    this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform);\n  } else {\n    // mark that we need a transform, so that any data that comes in\n    // will get processed, now that we've asked for it.\n    ts.needTransform = true;\n  }\n};\n\nTransform.prototype._destroy = function (err, cb) {\n  var _this2 = this;\n\n  Duplex.prototype._destroy.call(this, err, function (err2) {\n    cb(err2);\n\n    _this2.emit('close');\n  });\n};\n\nfunction done(stream, er, data) {\n  if (er) return stream.emit('error', er);\n  if (data != null) // single equals check for both `null` and `undefined`\n    stream.push(data); // if there's nothing in the write buffer, then that means\n  // that nothing more will ever be provided\n\n  if (stream._writableState.length) throw new Error('Calling transform done when ws.length != 0');\n  if (stream._transformState.transforming) throw new Error('Calling transform done when still transforming');\n  return stream.push(null);\n}","'use strict';\n\nvar utils = require('./utils');\n\nvar support = require('./support'); // private property\n\n\nvar _keyStr = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\"; // public method for encoding\n\nexports.encode = function (input) {\n  var output = [];\n  var chr1, chr2, chr3, enc1, enc2, enc3, enc4;\n  var i = 0,\n      len = input.length,\n      remainingBytes = len;\n  var isArray = utils.getTypeOf(input) !== \"string\";\n\n  while (i < input.length) {\n    remainingBytes = len - i;\n\n    if (!isArray) {\n      chr1 = input.charCodeAt(i++);\n      chr2 = i < len ? input.charCodeAt(i++) : 0;\n      chr3 = i < len ? input.charCodeAt(i++) : 0;\n    } else {\n      chr1 = input[i++];\n      chr2 = i < len ? input[i++] : 0;\n      chr3 = i < len ? input[i++] : 0;\n    }\n\n    enc1 = chr1 >> 2;\n    enc2 = (chr1 & 3) << 4 | chr2 >> 4;\n    enc3 = remainingBytes > 1 ? (chr2 & 15) << 2 | chr3 >> 6 : 64;\n    enc4 = remainingBytes > 2 ? chr3 & 63 : 64;\n    output.push(_keyStr.charAt(enc1) + _keyStr.charAt(enc2) + _keyStr.charAt(enc3) + _keyStr.charAt(enc4));\n  }\n\n  return output.join(\"\");\n}; // public method for decoding\n\n\nexports.decode = function (input) {\n  var chr1, chr2, chr3;\n  var enc1, enc2, enc3, enc4;\n  var i = 0,\n      resultIndex = 0;\n  var dataUrlPrefix = \"data:\";\n\n  if (input.substr(0, dataUrlPrefix.length) === dataUrlPrefix) {\n    // This is a common error: people give a data url\n    // (data:image/png;base64,iVBOR...) with a {base64: true} and\n    // wonders why things don't work.\n    // We can detect that the string input looks like a data url but we\n    // *can't* be sure it is one: removing everything up to the comma would\n    // be too dangerous.\n    throw new Error(\"Invalid base64 input, it looks like a data url.\");\n  }\n\n  input = input.replace(/[^A-Za-z0-9\\+\\/\\=]/g, \"\");\n  var totalLength = input.length * 3 / 4;\n\n  if (input.charAt(input.length - 1) === _keyStr.charAt(64)) {\n    totalLength--;\n  }\n\n  if (input.charAt(input.length - 2) === _keyStr.charAt(64)) {\n    totalLength--;\n  }\n\n  if (totalLength % 1 !== 0) {\n    // totalLength is not an integer, the length does not match a valid\n    // base64 content. That can happen if:\n    // - the input is not a base64 content\n    // - the input is *almost* a base64 content, with a extra chars at the\n    //   beginning or at the end\n    // - the input uses a base64 variant (base64url for example)\n    throw new Error(\"Invalid base64 input, bad content length.\");\n  }\n\n  var output;\n\n  if (support.uint8array) {\n    output = new Uint8Array(totalLength | 0);\n  } else {\n    output = new Array(totalLength | 0);\n  }\n\n  while (i < input.length) {\n    enc1 = _keyStr.indexOf(input.charAt(i++));\n    enc2 = _keyStr.indexOf(input.charAt(i++));\n    enc3 = _keyStr.indexOf(input.charAt(i++));\n    enc4 = _keyStr.indexOf(input.charAt(i++));\n    chr1 = enc1 << 2 | enc2 >> 4;\n    chr2 = (enc2 & 15) << 4 | enc3 >> 2;\n    chr3 = (enc3 & 3) << 6 | enc4;\n    output[resultIndex++] = chr1;\n\n    if (enc3 !== 64) {\n      output[resultIndex++] = chr2;\n    }\n\n    if (enc4 !== 64) {\n      output[resultIndex++] = chr3;\n    }\n  }\n\n  return output;\n};","'use strict';\n\nvar utils = require('../utils');\n\nvar ConvertWorker = require('./ConvertWorker');\n\nvar GenericWorker = require('./GenericWorker');\n\nvar base64 = require('../base64');\n\nvar support = require(\"../support\");\n\nvar external = require(\"../external\");\n\nvar NodejsStreamOutputAdapter = null;\n\nif (support.nodestream) {\n  try {\n    NodejsStreamOutputAdapter = require('../nodejs/NodejsStreamOutputAdapter');\n  } catch (e) {}\n}\n/**\n * Apply the final transformation of the data. If the user wants a Blob for\n * example, it's easier to work with an U8intArray and finally do the\n * ArrayBuffer/Blob conversion.\n * @param {String} type the name of the final type\n * @param {String|Uint8Array|Buffer} content the content to transform\n * @param {String} mimeType the mime type of the content, if applicable.\n * @return {String|Uint8Array|ArrayBuffer|Buffer|Blob} the content in the right format.\n */\n\n\nfunction transformZipOutput(type, content, mimeType) {\n  switch (type) {\n    case \"blob\":\n      return utils.newBlob(utils.transformTo(\"arraybuffer\", content), mimeType);\n\n    case \"base64\":\n      return base64.encode(content);\n\n    default:\n      return utils.transformTo(type, content);\n  }\n}\n/**\n * Concatenate an array of data of the given type.\n * @param {String} type the type of the data in the given array.\n * @param {Array} dataArray the array containing the data chunks to concatenate\n * @return {String|Uint8Array|Buffer} the concatenated data\n * @throws Error if the asked type is unsupported\n */\n\n\nfunction concat(type, dataArray) {\n  var i,\n      index = 0,\n      res = null,\n      totalLength = 0;\n\n  for (i = 0; i < dataArray.length; i++) {\n    totalLength += dataArray[i].length;\n  }\n\n  switch (type) {\n    case \"string\":\n      return dataArray.join(\"\");\n\n    case \"array\":\n      return Array.prototype.concat.apply([], dataArray);\n\n    case \"uint8array\":\n      res = new Uint8Array(totalLength);\n\n      for (i = 0; i < dataArray.length; i++) {\n        res.set(dataArray[i], index);\n        index += dataArray[i].length;\n      }\n\n      return res;\n\n    case \"nodebuffer\":\n      return Buffer.concat(dataArray);\n\n    default:\n      throw new Error(\"concat : unsupported type '\" + type + \"'\");\n  }\n}\n/**\n * Listen a StreamHelper, accumulate its content and concatenate it into a\n * complete block.\n * @param {StreamHelper} helper the helper to use.\n * @param {Function} updateCallback a callback called on each update. Called\n * with one arg :\n * - the metadata linked to the update received.\n * @return Promise the promise for the accumulation.\n */\n\n\nfunction _accumulate(helper, updateCallback) {\n  return new external.Promise(function (resolve, reject) {\n    var dataArray = [];\n    var chunkType = helper._internalType,\n        resultType = helper._outputType,\n        mimeType = helper._mimeType;\n    helper.on('data', function (data, meta) {\n      dataArray.push(data);\n\n      if (updateCallback) {\n        updateCallback(meta);\n      }\n    }).on('error', function (err) {\n      dataArray = [];\n      reject(err);\n    }).on('end', function () {\n      try {\n        var result = transformZipOutput(resultType, concat(chunkType, dataArray), mimeType);\n        resolve(result);\n      } catch (e) {\n        reject(e);\n      }\n\n      dataArray = [];\n    }).resume();\n  });\n}\n/**\n * An helper to easily use workers outside of JSZip.\n * @constructor\n * @param {Worker} worker the worker to wrap\n * @param {String} outputType the type of data expected by the use\n * @param {String} mimeType the mime type of the content, if applicable.\n */\n\n\nfunction StreamHelper(worker, outputType, mimeType) {\n  var internalType = outputType;\n\n  switch (outputType) {\n    case \"blob\":\n    case \"arraybuffer\":\n      internalType = \"uint8array\";\n      break;\n\n    case \"base64\":\n      internalType = \"string\";\n      break;\n  }\n\n  try {\n    // the type used internally\n    this._internalType = internalType; // the type used to output results\n\n    this._outputType = outputType; // the mime type\n\n    this._mimeType = mimeType;\n    utils.checkSupport(internalType);\n    this._worker = worker.pipe(new ConvertWorker(internalType)); // the last workers can be rewired without issues but we need to\n    // prevent any updates on previous workers.\n\n    worker.lock();\n  } catch (e) {\n    this._worker = new GenericWorker(\"error\");\n\n    this._worker.error(e);\n  }\n}\n\nStreamHelper.prototype = {\n  /**\n   * Listen a StreamHelper, accumulate its content and concatenate it into a\n   * complete block.\n   * @param {Function} updateCb the update callback.\n   * @return Promise the promise for the accumulation.\n   */\n  accumulate: function accumulate(updateCb) {\n    return _accumulate(this, updateCb);\n  },\n\n  /**\n   * Add a listener on an event triggered on a stream.\n   * @param {String} evt the name of the event\n   * @param {Function} fn the listener\n   * @return {StreamHelper} the current helper.\n   */\n  on: function on(evt, fn) {\n    var self = this;\n\n    if (evt === \"data\") {\n      this._worker.on(evt, function (chunk) {\n        fn.call(self, chunk.data, chunk.meta);\n      });\n    } else {\n      this._worker.on(evt, function () {\n        utils.delay(fn, arguments, self);\n      });\n    }\n\n    return this;\n  },\n\n  /**\n   * Resume the flow of chunks.\n   * @return {StreamHelper} the current helper.\n   */\n  resume: function resume() {\n    utils.delay(this._worker.resume, [], this._worker);\n    return this;\n  },\n\n  /**\n   * Pause the flow of chunks.\n   * @return {StreamHelper} the current helper.\n   */\n  pause: function pause() {\n    this._worker.pause();\n\n    return this;\n  },\n\n  /**\n   * Return a nodejs stream for this helper.\n   * @param {Function} updateCb the update callback.\n   * @return {NodejsStreamOutputAdapter} the nodejs stream.\n   */\n  toNodejsStream: function toNodejsStream(updateCb) {\n    utils.checkSupport(\"nodestream\");\n\n    if (this._outputType !== \"nodebuffer\") {\n      // an object stream containing blob/arraybuffer/uint8array/string\n      // is strange and I don't know if it would be useful.\n      // I you find this comment and have a good usecase, please open a\n      // bug report !\n      throw new Error(this._outputType + \" is not supported by this method\");\n    }\n\n    return new NodejsStreamOutputAdapter(this, {\n      objectMode: this._outputType !== \"nodebuffer\"\n    }, updateCb);\n  }\n};\nmodule.exports = StreamHelper;","'use strict';\n\nexports.base64 = false;\nexports.binary = false;\nexports.dir = false;\nexports.createFolders = true;\nexports.date = null;\nexports.compression = null;\nexports.compressionOptions = null;\nexports.comment = null;\nexports.unixPermissions = null;\nexports.dosPermissions = null;","'use strict';\n\nvar utils = require('../utils');\n\nvar GenericWorker = require('./GenericWorker'); // the size of the generated chunks\n// TODO expose this as a public variable\n\n\nvar DEFAULT_BLOCK_SIZE = 16 * 1024;\n/**\n * A worker that reads a content and emits chunks.\n * @constructor\n * @param {Promise} dataP the promise of the data to split\n */\n\nfunction DataWorker(dataP) {\n  GenericWorker.call(this, \"DataWorker\");\n  var self = this;\n  this.dataIsReady = false;\n  this.index = 0;\n  this.max = 0;\n  this.data = null;\n  this.type = \"\";\n  this._tickScheduled = false;\n  dataP.then(function (data) {\n    self.dataIsReady = true;\n    self.data = data;\n    self.max = data && data.length || 0;\n    self.type = utils.getTypeOf(data);\n\n    if (!self.isPaused) {\n      self._tickAndRepeat();\n    }\n  }, function (e) {\n    self.error(e);\n  });\n}\n\nutils.inherits(DataWorker, GenericWorker);\n/**\n * @see GenericWorker.cleanUp\n */\n\nDataWorker.prototype.cleanUp = function () {\n  GenericWorker.prototype.cleanUp.call(this);\n  this.data = null;\n};\n/**\n * @see GenericWorker.resume\n */\n\n\nDataWorker.prototype.resume = function () {\n  if (!GenericWorker.prototype.resume.call(this)) {\n    return false;\n  }\n\n  if (!this._tickScheduled && this.dataIsReady) {\n    this._tickScheduled = true;\n    utils.delay(this._tickAndRepeat, [], this);\n  }\n\n  return true;\n};\n/**\n * Trigger a tick a schedule an other call to this function.\n */\n\n\nDataWorker.prototype._tickAndRepeat = function () {\n  this._tickScheduled = false;\n\n  if (this.isPaused || this.isFinished) {\n    return;\n  }\n\n  this._tick();\n\n  if (!this.isFinished) {\n    utils.delay(this._tickAndRepeat, [], this);\n    this._tickScheduled = true;\n  }\n};\n/**\n * Read and push a chunk.\n */\n\n\nDataWorker.prototype._tick = function () {\n  if (this.isPaused || this.isFinished) {\n    return false;\n  }\n\n  var size = DEFAULT_BLOCK_SIZE;\n  var data = null,\n      nextIndex = Math.min(this.max, this.index + size);\n\n  if (this.index >= this.max) {\n    // EOF\n    return this.end();\n  } else {\n    switch (this.type) {\n      case \"string\":\n        data = this.data.substring(this.index, nextIndex);\n        break;\n\n      case \"uint8array\":\n        data = this.data.subarray(this.index, nextIndex);\n        break;\n\n      case \"array\":\n      case \"nodebuffer\":\n        data = this.data.slice(this.index, nextIndex);\n        break;\n    }\n\n    this.index = nextIndex;\n    return this.push({\n      data: data,\n      meta: {\n        percent: this.max ? this.index / this.max * 100 : 0\n      }\n    });\n  }\n};\n\nmodule.exports = DataWorker;","'use strict';\n\nvar utils = require('../utils');\n\nvar GenericWorker = require('./GenericWorker');\n/**\n * A worker which calculate the total length of the data flowing through.\n * @constructor\n * @param {String} propName the name used to expose the length\n */\n\n\nfunction DataLengthProbe(propName) {\n  GenericWorker.call(this, \"DataLengthProbe for \" + propName);\n  this.propName = propName;\n  this.withStreamInfo(propName, 0);\n}\n\nutils.inherits(DataLengthProbe, GenericWorker);\n/**\n * @see GenericWorker.processChunk\n */\n\nDataLengthProbe.prototype.processChunk = function (chunk) {\n  if (chunk) {\n    var length = this.streamInfo[this.propName] || 0;\n    this.streamInfo[this.propName] = length + chunk.data.length;\n  }\n\n  GenericWorker.prototype.processChunk.call(this, chunk);\n};\n\nmodule.exports = DataLengthProbe;","'use strict';\n\nvar GenericWorker = require('./GenericWorker');\n\nvar crc32 = require('../crc32');\n\nvar utils = require('../utils');\n/**\n * A worker which calculate the crc32 of the data flowing through.\n * @constructor\n */\n\n\nfunction Crc32Probe() {\n  GenericWorker.call(this, \"Crc32Probe\");\n  this.withStreamInfo(\"crc32\", 0);\n}\n\nutils.inherits(Crc32Probe, GenericWorker);\n/**\n * @see GenericWorker.processChunk\n */\n\nCrc32Probe.prototype.processChunk = function (chunk) {\n  this.streamInfo.crc32 = crc32(chunk.data, this.streamInfo.crc32 || 0);\n  this.push(chunk);\n};\n\nmodule.exports = Crc32Probe;","'use strict';\n\nvar GenericWorker = require(\"./stream/GenericWorker\");\n\nexports.STORE = {\n  magic: \"\\x00\\x00\",\n  compressWorker: function compressWorker(compressionOptions) {\n    return new GenericWorker(\"STORE compression\");\n  },\n  uncompressWorker: function uncompressWorker() {\n    return new GenericWorker(\"STORE decompression\");\n  }\n};\nexports.DEFLATE = require('./flate');","'use strict'; // Note: adler32 takes 12% for level 0 and 2% for level 6.\n// It isn't worth it to make additional optimizations as in original.\n// Small size is preferable.\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nfunction adler32(adler, buf, len, pos) {\n  var s1 = adler & 0xffff | 0,\n      s2 = adler >>> 16 & 0xffff | 0,\n      n = 0;\n\n  while (len !== 0) {\n    // Set limit ~ twice less than 5552, to keep\n    // s2 in 31-bits, because we force signed ints.\n    // in other case %= will fail.\n    n = len > 2000 ? 2000 : len;\n    len -= n;\n\n    do {\n      s1 = s1 + buf[pos++] | 0;\n      s2 = s2 + s1 | 0;\n    } while (--n);\n\n    s1 %= 65521;\n    s2 %= 65521;\n  }\n\n  return s1 | s2 << 16 | 0;\n}\n\nmodule.exports = adler32;","'use strict'; // Note: we can't get significant speed boost here.\n// So write code to minimize size - no pregenerated tables\n// and array tools dependencies.\n// (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n// Use ordinary array, since untyped makes no boost here\n\nfunction makeTable() {\n  var c,\n      table = [];\n\n  for (var n = 0; n < 256; n++) {\n    c = n;\n\n    for (var k = 0; k < 8; k++) {\n      c = c & 1 ? 0xEDB88320 ^ c >>> 1 : c >>> 1;\n    }\n\n    table[n] = c;\n  }\n\n  return table;\n} // Create table on load. Just 255 signed longs. Not a problem.\n\n\nvar crcTable = makeTable();\n\nfunction crc32(crc, buf, len, pos) {\n  var t = crcTable,\n      end = pos + len;\n  crc ^= -1;\n\n  for (var i = pos; i < end; i++) {\n    crc = crc >>> 8 ^ t[(crc ^ buf[i]) & 0xFF];\n  }\n\n  return crc ^ -1; // >>> 0;\n}\n\nmodule.exports = crc32;","// String encode/decode helpers\n'use strict';\n\nvar utils = require('./common'); // Quick check if we can use fast array to bin string conversion\n//\n// - apply(Array) can fail on Android 2.2\n// - apply(Uint8Array) can fail on iOS 5.1 Safari\n//\n\n\nvar STR_APPLY_OK = true;\nvar STR_APPLY_UIA_OK = true;\n\ntry {\n  String.fromCharCode.apply(null, [0]);\n} catch (__) {\n  STR_APPLY_OK = false;\n}\n\ntry {\n  String.fromCharCode.apply(null, new Uint8Array(1));\n} catch (__) {\n  STR_APPLY_UIA_OK = false;\n} // Table with utf8 lengths (calculated by first byte of sequence)\n// Note, that 5 & 6-byte values and some 4-byte values can not be represented in JS,\n// because max possible codepoint is 0x10ffff\n\n\nvar _utf8len = new utils.Buf8(256);\n\nfor (var q = 0; q < 256; q++) {\n  _utf8len[q] = q >= 252 ? 6 : q >= 248 ? 5 : q >= 240 ? 4 : q >= 224 ? 3 : q >= 192 ? 2 : 1;\n}\n\n_utf8len[254] = _utf8len[254] = 1; // Invalid sequence start\n// convert string to array (typed, when possible)\n\nexports.string2buf = function (str) {\n  var buf,\n      c,\n      c2,\n      m_pos,\n      i,\n      str_len = str.length,\n      buf_len = 0; // count binary size\n\n  for (m_pos = 0; m_pos < str_len; m_pos++) {\n    c = str.charCodeAt(m_pos);\n\n    if ((c & 0xfc00) === 0xd800 && m_pos + 1 < str_len) {\n      c2 = str.charCodeAt(m_pos + 1);\n\n      if ((c2 & 0xfc00) === 0xdc00) {\n        c = 0x10000 + (c - 0xd800 << 10) + (c2 - 0xdc00);\n        m_pos++;\n      }\n    }\n\n    buf_len += c < 0x80 ? 1 : c < 0x800 ? 2 : c < 0x10000 ? 3 : 4;\n  } // allocate buffer\n\n\n  buf = new utils.Buf8(buf_len); // convert\n\n  for (i = 0, m_pos = 0; i < buf_len; m_pos++) {\n    c = str.charCodeAt(m_pos);\n\n    if ((c & 0xfc00) === 0xd800 && m_pos + 1 < str_len) {\n      c2 = str.charCodeAt(m_pos + 1);\n\n      if ((c2 & 0xfc00) === 0xdc00) {\n        c = 0x10000 + (c - 0xd800 << 10) + (c2 - 0xdc00);\n        m_pos++;\n      }\n    }\n\n    if (c < 0x80) {\n      /* one byte */\n      buf[i++] = c;\n    } else if (c < 0x800) {\n      /* two bytes */\n      buf[i++] = 0xC0 | c >>> 6;\n      buf[i++] = 0x80 | c & 0x3f;\n    } else if (c < 0x10000) {\n      /* three bytes */\n      buf[i++] = 0xE0 | c >>> 12;\n      buf[i++] = 0x80 | c >>> 6 & 0x3f;\n      buf[i++] = 0x80 | c & 0x3f;\n    } else {\n      /* four bytes */\n      buf[i++] = 0xf0 | c >>> 18;\n      buf[i++] = 0x80 | c >>> 12 & 0x3f;\n      buf[i++] = 0x80 | c >>> 6 & 0x3f;\n      buf[i++] = 0x80 | c & 0x3f;\n    }\n  }\n\n  return buf;\n}; // Helper (used in 2 places)\n\n\nfunction buf2binstring(buf, len) {\n  // On Chrome, the arguments in a function call that are allowed is `65534`.\n  // If the length of the buffer is smaller than that, we can use this optimization,\n  // otherwise we will take a slower path.\n  if (len < 65534) {\n    if (buf.subarray && STR_APPLY_UIA_OK || !buf.subarray && STR_APPLY_OK) {\n      return String.fromCharCode.apply(null, utils.shrinkBuf(buf, len));\n    }\n  }\n\n  var result = '';\n\n  for (var i = 0; i < len; i++) {\n    result += String.fromCharCode(buf[i]);\n  }\n\n  return result;\n} // Convert byte array to binary string\n\n\nexports.buf2binstring = function (buf) {\n  return buf2binstring(buf, buf.length);\n}; // Convert binary string (typed, when possible)\n\n\nexports.binstring2buf = function (str) {\n  var buf = new utils.Buf8(str.length);\n\n  for (var i = 0, len = buf.length; i < len; i++) {\n    buf[i] = str.charCodeAt(i);\n  }\n\n  return buf;\n}; // convert array to string\n\n\nexports.buf2string = function (buf, max) {\n  var i, out, c, c_len;\n  var len = max || buf.length; // Reserve max possible length (2 words per char)\n  // NB: by unknown reasons, Array is significantly faster for\n  //     String.fromCharCode.apply than Uint16Array.\n\n  var utf16buf = new Array(len * 2);\n\n  for (out = 0, i = 0; i < len;) {\n    c = buf[i++]; // quick process ascii\n\n    if (c < 0x80) {\n      utf16buf[out++] = c;\n      continue;\n    }\n\n    c_len = _utf8len[c]; // skip 5 & 6 byte codes\n\n    if (c_len > 4) {\n      utf16buf[out++] = 0xfffd;\n      i += c_len - 1;\n      continue;\n    } // apply mask on first byte\n\n\n    c &= c_len === 2 ? 0x1f : c_len === 3 ? 0x0f : 0x07; // join the rest\n\n    while (c_len > 1 && i < len) {\n      c = c << 6 | buf[i++] & 0x3f;\n      c_len--;\n    } // terminated by end of string?\n\n\n    if (c_len > 1) {\n      utf16buf[out++] = 0xfffd;\n      continue;\n    }\n\n    if (c < 0x10000) {\n      utf16buf[out++] = c;\n    } else {\n      c -= 0x10000;\n      utf16buf[out++] = 0xd800 | c >> 10 & 0x3ff;\n      utf16buf[out++] = 0xdc00 | c & 0x3ff;\n    }\n  }\n\n  return buf2binstring(utf16buf, out);\n}; // Calculate max possible position in utf8 buffer,\n// that will not break sequence. If that's not possible\n// - (very small limits) return max size as is.\n//\n// buf[] - utf8 bytes array\n// max   - length limit (mandatory);\n\n\nexports.utf8border = function (buf, max) {\n  var pos;\n  max = max || buf.length;\n\n  if (max > buf.length) {\n    max = buf.length;\n  } // go back from last position, until start of sequence found\n\n\n  pos = max - 1;\n\n  while (pos >= 0 && (buf[pos] & 0xC0) === 0x80) {\n    pos--;\n  } // Very small and broken sequence,\n  // return max, because we should return something anyway.\n\n\n  if (pos < 0) {\n    return max;\n  } // If we came to start of buffer - that means buffer is too small,\n  // return max too.\n\n\n  if (pos === 0) {\n    return max;\n  }\n\n  return pos + _utf8len[buf[pos]] > max ? pos : max;\n};","'use strict'; // (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nfunction ZStream() {\n  /* next input byte */\n  this.input = null; // JS specific, because we have no pointers\n\n  this.next_in = 0;\n  /* number of bytes available at input */\n\n  this.avail_in = 0;\n  /* total number of input bytes read so far */\n\n  this.total_in = 0;\n  /* next output byte should be put there */\n\n  this.output = null; // JS specific, because we have no pointers\n\n  this.next_out = 0;\n  /* remaining free space at output */\n\n  this.avail_out = 0;\n  /* total number of bytes output so far */\n\n  this.total_out = 0;\n  /* last error message, NULL if no error */\n\n  this.msg = ''\n  /*Z_NULL*/\n  ;\n  /* not visible by applications */\n\n  this.state = null;\n  /* best guess about the data type: binary or text */\n\n  this.data_type = 2\n  /*Z_UNKNOWN*/\n  ;\n  /* adler32 value of the uncompressed data */\n\n  this.adler = 0;\n}\n\nmodule.exports = ZStream;","'use strict'; // (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nmodule.exports = {\n  /* Allowed flush values; see deflate() and inflate() below for details */\n  Z_NO_FLUSH: 0,\n  Z_PARTIAL_FLUSH: 1,\n  Z_SYNC_FLUSH: 2,\n  Z_FULL_FLUSH: 3,\n  Z_FINISH: 4,\n  Z_BLOCK: 5,\n  Z_TREES: 6,\n\n  /* Return codes for the compression/decompression functions. Negative values\n  * are errors, positive values are used for special but normal events.\n  */\n  Z_OK: 0,\n  Z_STREAM_END: 1,\n  Z_NEED_DICT: 2,\n  Z_ERRNO: -1,\n  Z_STREAM_ERROR: -2,\n  Z_DATA_ERROR: -3,\n  //Z_MEM_ERROR:     -4,\n  Z_BUF_ERROR: -5,\n  //Z_VERSION_ERROR: -6,\n\n  /* compression levels */\n  Z_NO_COMPRESSION: 0,\n  Z_BEST_SPEED: 1,\n  Z_BEST_COMPRESSION: 9,\n  Z_DEFAULT_COMPRESSION: -1,\n  Z_FILTERED: 1,\n  Z_HUFFMAN_ONLY: 2,\n  Z_RLE: 3,\n  Z_FIXED: 4,\n  Z_DEFAULT_STRATEGY: 0,\n\n  /* Possible values of the data_type field (though see inflate()) */\n  Z_BINARY: 0,\n  Z_TEXT: 1,\n  //Z_ASCII:                1, // = Z_TEXT (deprecated)\n  Z_UNKNOWN: 2,\n\n  /* The deflate compression method */\n  Z_DEFLATED: 8 //Z_NULL:                 null // Use -1 or null inline, depending on var type\n\n};","'use strict';\n\nexports.LOCAL_FILE_HEADER = \"PK\\x03\\x04\";\nexports.CENTRAL_FILE_HEADER = \"PK\\x01\\x02\";\nexports.CENTRAL_DIRECTORY_END = \"PK\\x05\\x06\";\nexports.ZIP64_CENTRAL_DIRECTORY_LOCATOR = \"PK\\x06\\x07\";\nexports.ZIP64_CENTRAL_DIRECTORY_END = \"PK\\x06\\x06\";\nexports.DATA_DESCRIPTOR = \"PK\\x07\\x08\";","'use strict';\n\nvar utils = require('../utils');\n\nvar support = require('../support');\n\nvar ArrayReader = require('./ArrayReader');\n\nvar StringReader = require('./StringReader');\n\nvar NodeBufferReader = require('./NodeBufferReader');\n\nvar Uint8ArrayReader = require('./Uint8ArrayReader');\n/**\n * Create a reader adapted to the data.\n * @param {String|ArrayBuffer|Uint8Array|Buffer} data the data to read.\n * @return {DataReader} the data reader.\n */\n\n\nmodule.exports = function (data) {\n  var type = utils.getTypeOf(data);\n  utils.checkSupport(type);\n\n  if (type === \"string\" && !support.uint8array) {\n    return new StringReader(data);\n  }\n\n  if (type === \"nodebuffer\") {\n    return new NodeBufferReader(data);\n  }\n\n  if (support.uint8array) {\n    return new Uint8ArrayReader(utils.transformTo(\"uint8array\", data));\n  }\n\n  return new ArrayReader(utils.transformTo(\"array\", data));\n};","'use strict';\n\nvar DataReader = require('./DataReader');\n\nvar utils = require('../utils');\n\nfunction ArrayReader(data) {\n  DataReader.call(this, data);\n\n  for (var i = 0; i < this.data.length; i++) {\n    data[i] = data[i] & 0xFF;\n  }\n}\n\nutils.inherits(ArrayReader, DataReader);\n/**\n * @see DataReader.byteAt\n */\n\nArrayReader.prototype.byteAt = function (i) {\n  return this.data[this.zero + i];\n};\n/**\n * @see DataReader.lastIndexOfSignature\n */\n\n\nArrayReader.prototype.lastIndexOfSignature = function (sig) {\n  var sig0 = sig.charCodeAt(0),\n      sig1 = sig.charCodeAt(1),\n      sig2 = sig.charCodeAt(2),\n      sig3 = sig.charCodeAt(3);\n\n  for (var i = this.length - 4; i >= 0; --i) {\n    if (this.data[i] === sig0 && this.data[i + 1] === sig1 && this.data[i + 2] === sig2 && this.data[i + 3] === sig3) {\n      return i - this.zero;\n    }\n  }\n\n  return -1;\n};\n/**\n * @see DataReader.readAndCheckSignature\n */\n\n\nArrayReader.prototype.readAndCheckSignature = function (sig) {\n  var sig0 = sig.charCodeAt(0),\n      sig1 = sig.charCodeAt(1),\n      sig2 = sig.charCodeAt(2),\n      sig3 = sig.charCodeAt(3),\n      data = this.readData(4);\n  return sig0 === data[0] && sig1 === data[1] && sig2 === data[2] && sig3 === data[3];\n};\n/**\n * @see DataReader.readData\n */\n\n\nArrayReader.prototype.readData = function (size) {\n  this.checkOffset(size);\n\n  if (size === 0) {\n    return [];\n  }\n\n  var result = this.data.slice(this.zero + this.index, this.zero + this.index + size);\n  this.index += size;\n  return result;\n};\n\nmodule.exports = ArrayReader;","'use strict';\n\nvar utils = require('../utils');\n\nfunction DataReader(data) {\n  this.data = data; // type : see implementation\n\n  this.length = data.length;\n  this.index = 0;\n  this.zero = 0;\n}\n\nDataReader.prototype = {\n  /**\n   * Check that the offset will not go too far.\n   * @param {string} offset the additional offset to check.\n   * @throws {Error} an Error if the offset is out of bounds.\n   */\n  checkOffset: function checkOffset(offset) {\n    this.checkIndex(this.index + offset);\n  },\n\n  /**\n   * Check that the specified index will not be too far.\n   * @param {string} newIndex the index to check.\n   * @throws {Error} an Error if the index is out of bounds.\n   */\n  checkIndex: function checkIndex(newIndex) {\n    if (this.length < this.zero + newIndex || newIndex < 0) {\n      throw new Error(\"End of data reached (data length = \" + this.length + \", asked index = \" + newIndex + \"). Corrupted zip ?\");\n    }\n  },\n\n  /**\n   * Change the index.\n   * @param {number} newIndex The new index.\n   * @throws {Error} if the new index is out of the data.\n   */\n  setIndex: function setIndex(newIndex) {\n    this.checkIndex(newIndex);\n    this.index = newIndex;\n  },\n\n  /**\n   * Skip the next n bytes.\n   * @param {number} n the number of bytes to skip.\n   * @throws {Error} if the new index is out of the data.\n   */\n  skip: function skip(n) {\n    this.setIndex(this.index + n);\n  },\n\n  /**\n   * Get the byte at the specified index.\n   * @param {number} i the index to use.\n   * @return {number} a byte.\n   */\n  byteAt: function byteAt(i) {// see implementations\n  },\n\n  /**\n   * Get the next number with a given byte size.\n   * @param {number} size the number of bytes to read.\n   * @return {number} the corresponding number.\n   */\n  readInt: function readInt(size) {\n    var result = 0,\n        i;\n    this.checkOffset(size);\n\n    for (i = this.index + size - 1; i >= this.index; i--) {\n      result = (result << 8) + this.byteAt(i);\n    }\n\n    this.index += size;\n    return result;\n  },\n\n  /**\n   * Get the next string with a given byte size.\n   * @param {number} size the number of bytes to read.\n   * @return {string} the corresponding string.\n   */\n  readString: function readString(size) {\n    return utils.transformTo(\"string\", this.readData(size));\n  },\n\n  /**\n   * Get raw data without conversion, <size> bytes.\n   * @param {number} size the number of bytes to read.\n   * @return {Object} the raw data, implementation specific.\n   */\n  readData: function readData(size) {// see implementations\n  },\n\n  /**\n   * Find the last occurence of a zip signature (4 bytes).\n   * @param {string} sig the signature to find.\n   * @return {number} the index of the last occurence, -1 if not found.\n   */\n  lastIndexOfSignature: function lastIndexOfSignature(sig) {// see implementations\n  },\n\n  /**\n   * Read the signature (4 bytes) at the current position and compare it with sig.\n   * @param {string} sig the expected signature\n   * @return {boolean} true if the signature matches, false otherwise.\n   */\n  readAndCheckSignature: function readAndCheckSignature(sig) {// see implementations\n  },\n\n  /**\n   * Get the next date.\n   * @return {Date} the date.\n   */\n  readDate: function readDate() {\n    var dostime = this.readInt(4);\n    return new Date(Date.UTC((dostime >> 25 & 0x7f) + 1980, // year\n    (dostime >> 21 & 0x0f) - 1, // month\n    dostime >> 16 & 0x1f, // day\n    dostime >> 11 & 0x1f, // hour\n    dostime >> 5 & 0x3f, // minute\n    (dostime & 0x1f) << 1)); // second\n  }\n};\nmodule.exports = DataReader;","'use strict';\n\nvar ArrayReader = require('./ArrayReader');\n\nvar utils = require('../utils');\n\nfunction Uint8ArrayReader(data) {\n  ArrayReader.call(this, data);\n}\n\nutils.inherits(Uint8ArrayReader, ArrayReader);\n/**\n * @see DataReader.readData\n */\n\nUint8ArrayReader.prototype.readData = function (size) {\n  this.checkOffset(size);\n\n  if (size === 0) {\n    // in IE10, when using subarray(idx, idx), we get the array [0x00] instead of [].\n    return new Uint8Array(0);\n  }\n\n  var result = this.data.subarray(this.zero + this.index, this.zero + this.index + size);\n  this.index += size;\n  return result;\n};\n\nmodule.exports = Uint8ArrayReader;","/* globals __webpack_amd_options__ */\nmodule.exports = __webpack_amd_options__;\n","\"use strict\";\n\nfunction _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nvar _ = require(\"lodash\");\n\nvar ArgHandler = require(\"./ArgHandler\");\n\nvar addressConverter = require(\"./addressConverter\");\n\nvar dateConverter = require(\"./dateConverter\");\n\nvar regexify = require(\"./regexify\");\n\nvar xmlq = require(\"./xmlq\");\n\nvar FormulaError = require(\"./FormulaError\");\n\nvar Style = require(\"./Style\");\n\nvar RichText = require(\"./RichText\");\n/**\r\n * A cell\r\n */\n\n\nvar Cell =\n/*#__PURE__*/\nfunction () {\n  // /**\n  //  * Creates a new instance of cell.\n  //  * @param {Row} row - The parent row.\n  //  * @param {{}} node - The cell node.\n  //  */\n  function Cell(row, node, styleId) {\n    _classCallCheck(this, Cell);\n\n    this._row = row;\n\n    this._init(node, styleId);\n  }\n  /* PUBLIC */\n\n  /**\r\n   * Gets a value indicating whether the cell is the active cell in the sheet.\r\n   * @returns {boolean} True if active, false otherwise.\r\n   */\n\n  /**\r\n  * Make the cell the active cell in the sheet.\r\n  * @param {boolean} active - Must be set to `true`. Deactivating directly is not supported. To deactivate, you should activate a different cell instead.\r\n  * @returns {Cell} The cell.\r\n  */\n\n\n  _createClass(Cell, [{\n    key: \"active\",\n    value: function active() {\n      var _this = this;\n\n      return new ArgHandler('Cell.active')[\"case\"](function () {\n        return _this.sheet().activeCell() === _this;\n      })[\"case\"]('boolean', function (active) {\n        if (!active) throw new Error(\"Deactivating cell directly not supported. Activate a different cell instead.\");\n\n        _this.sheet().activeCell(_this);\n\n        return _this;\n      }).handle(arguments);\n    }\n    /**\r\n     * Get the address of the column.\r\n     * @param {{}} [opts] - Options\r\n     * @param {boolean} [opts.includeSheetName] - Include the sheet name in the address.\r\n     * @param {boolean} [opts.rowAnchored] - Anchor the row.\r\n     * @param {boolean} [opts.columnAnchored] - Anchor the column.\r\n     * @param {boolean} [opts.anchored] - Anchor both the row and the column.\r\n     * @returns {string} The address\r\n     */\n\n  }, {\n    key: \"address\",\n    value: function address(opts) {\n      return addressConverter.toAddress({\n        type: 'cell',\n        rowNumber: this.rowNumber(),\n        columnNumber: this.columnNumber(),\n        sheetName: opts && opts.includeSheetName && this.sheet().name(),\n        rowAnchored: opts && (opts.rowAnchored || opts.anchored),\n        columnAnchored: opts && (opts.columnAnchored || opts.anchored)\n      });\n    }\n    /**\r\n     * Gets the parent column of the cell.\r\n     * @returns {Column} The parent column.\r\n     */\n\n  }, {\n    key: \"column\",\n    value: function column() {\n      return this.sheet().column(this.columnNumber());\n    }\n    /**\r\n     * Clears the contents from the cell.\r\n     * @returns {Cell} The cell.\r\n     */\n\n  }, {\n    key: \"clear\",\n    value: function clear() {\n      var hostSharedFormulaId = this._formulaRef && this._sharedFormulaId;\n      delete this._value;\n      delete this._formulaType;\n      delete this._formula;\n      delete this._sharedFormulaId;\n      delete this._formulaRef; // TODO in future version: Move shared formula to some other cell. This would require parsing the formula...\n\n      if (!_.isNil(hostSharedFormulaId)) this.sheet().clearCellsUsingSharedFormula(hostSharedFormulaId);\n      return this;\n    }\n    /**\r\n     * Gets the column name of the cell.\r\n     * @returns {string} The column name.\r\n     */\n\n  }, {\n    key: \"columnName\",\n    value: function columnName() {\n      return addressConverter.columnNumberToName(this.columnNumber());\n    }\n    /**\r\n     * Gets the column number of the cell (1-based).\r\n     * @returns {number} The column number.\r\n     */\n\n  }, {\n    key: \"columnNumber\",\n    value: function columnNumber() {\n      return this._columnNumber;\n    }\n    /**\r\n     * Find the given pattern in the cell and optionally replace it.\r\n     * @param {string|RegExp} pattern - The pattern to look for. Providing a string will result in a case-insensitive substring search. Use a RegExp for more sophisticated searches.\r\n     * @param {string|function} [replacement] - The text to replace or a String.replace callback function. If pattern is a string, all occurrences of the pattern in the cell will be replaced.\r\n     * @returns {boolean} A flag indicating if the pattern was found.\r\n     */\n\n  }, {\n    key: \"find\",\n    value: function find(pattern, replacement) {\n      pattern = regexify(pattern);\n      var value = this.value();\n      if (typeof value !== 'string') return false;\n\n      if (_.isNil(replacement)) {\n        return pattern.test(value);\n      } else {\n        var replaced = value.replace(pattern, replacement);\n        if (replaced === value) return false;\n        this.value(replaced);\n        return true;\n      }\n    }\n    /**\r\n     * Gets the formula in the cell. Note that if a formula was set as part of a range, the getter will return 'SHARED'. This is a limitation that may be addressed in a future release.\r\n     * @returns {string} The formula in the cell.\r\n     */\n\n    /**\r\n    * Sets the formula in the cell.\r\n    * @param {string} formula - The formula to set.\r\n    * @returns {Cell} The cell.\r\n    */\n\n  }, {\n    key: \"formula\",\n    value: function formula() {\n      var _this2 = this;\n\n      return new ArgHandler('Cell.formula')[\"case\"](function () {\n        // TODO in future: Return translated formula.\n        if (_this2._formulaType === \"shared\" && !_this2._formulaRef) return \"SHARED\";\n        return _this2._formula;\n      })[\"case\"]('nil', function () {\n        _this2.clear();\n\n        return _this2;\n      })[\"case\"]('string', function (formula) {\n        _this2.clear();\n\n        _this2._formulaType = \"normal\";\n        _this2._formula = formula;\n        return _this2;\n      }).handle(arguments);\n    }\n    /**\r\n     * Gets the hyperlink attached to the cell.\r\n     * @returns {string|undefined} The hyperlink or undefined if not set.\r\n     */\n\n    /**\r\n    * Set or clear the hyperlink on the cell.\r\n    * @param {string|Cell|undefined} hyperlink - The hyperlink to set or undefined to clear.\r\n    * @returns {Cell} The cell.\r\n    */\n\n    /**\r\n    * Set the hyperlink options on the cell.\r\n    * @param {{}|Cell} opts - Options or Cell. If opts is a Cell then an internal hyperlink is added.\r\n    * @param {string|Cell} [opts.hyperlink] - The hyperlink to set, can be a Cell or an internal/external string.\r\n    * @param {string} [opts.tooltip] - Additional text to help the user understand more about the hyperlink.\r\n    * @param {string} [opts.email] - Email address, ignored if opts.hyperlink is set.\r\n    * @param {string} [opts.emailSubject] - Email subject, ignored if opts.hyperlink is set.\r\n    * @returns {Cell} The cell.\r\n    */\n\n  }, {\n    key: \"hyperlink\",\n    value: function hyperlink() {\n      var _this3 = this;\n\n      return new ArgHandler('Cell.hyperlink')[\"case\"](function () {\n        return _this3.sheet().hyperlink(_this3.address());\n      })[\"case\"]('string', function (hyperlink) {\n        _this3.sheet().hyperlink(_this3.address(), hyperlink);\n\n        return _this3;\n      })[\"case\"](['object'], function (opts) {\n        _this3.sheet().hyperlink(_this3.address(), opts);\n\n        return _this3;\n      }).handle(arguments);\n    }\n    /**\r\n     * Gets the data validation object attached to the cell.\r\n     * @returns {object|undefined} The data validation or undefined if not set.\r\n     */\n\n    /**\r\n    * Set or clear the data validation object of the cell.\r\n    * @param {object|undefined} dataValidation - Object or null to clear.\r\n    * @returns {Cell} The cell.\r\n    */\n\n  }, {\n    key: \"dataValidation\",\n    value: function dataValidation() {\n      var _this4 = this;\n\n      return new ArgHandler('Cell.dataValidation')[\"case\"](function () {\n        return _this4.sheet().dataValidation(_this4.address());\n      })[\"case\"]('boolean', function (obj) {\n        return _this4.sheet().dataValidation(_this4.address(), obj);\n      })[\"case\"]('*', function (obj) {\n        _this4.sheet().dataValidation(_this4.address(), obj);\n\n        return _this4;\n      }).handle(arguments);\n    }\n    /**\r\n     * Callback used by tap.\r\n     * @callback Cell~tapCallback\r\n     * @param {Cell} cell - The cell\r\n     * @returns {undefined}\r\n     */\n\n    /**\r\n    * Invoke a callback on the cell and return the cell. Useful for method chaining.\r\n    * @param {Cell~tapCallback} callback - The callback function.\r\n    * @returns {Cell} The cell.\r\n    */\n\n  }, {\n    key: \"tap\",\n    value: function tap(callback) {\n      callback(this);\n      return this;\n    }\n    /**\r\n     * Callback used by thru.\r\n     * @callback Cell~thruCallback\r\n     * @param {Cell} cell - The cell\r\n     * @returns {*} The value to return from thru.\r\n     */\n\n    /**\r\n    * Invoke a callback on the cell and return the value provided by the callback. Useful for method chaining.\r\n    * @param {Cell~thruCallback} callback - The callback function.\r\n    * @returns {*} The return value of the callback.\r\n    */\n\n  }, {\n    key: \"thru\",\n    value: function thru(callback) {\n      return callback(this);\n    }\n    /**\r\n     * Create a range from this cell and another.\r\n     * @param {Cell|string} cell - The other cell or cell address to range to.\r\n     * @returns {Range} The range.\r\n     */\n\n  }, {\n    key: \"rangeTo\",\n    value: function rangeTo(cell) {\n      return this.sheet().range(this, cell);\n    }\n    /**\r\n     * Returns a cell with a relative position given the offsets provided.\r\n     * @param {number} rowOffset - The row offset (0 for the current row).\r\n     * @param {number} columnOffset - The column offset (0 for the current column).\r\n     * @returns {Cell} The relative cell.\r\n     */\n\n  }, {\n    key: \"relativeCell\",\n    value: function relativeCell(rowOffset, columnOffset) {\n      var row = rowOffset + this.rowNumber();\n      var column = columnOffset + this.columnNumber();\n      return this.sheet().cell(row, column);\n    }\n    /**\r\n     * Gets the parent row of the cell.\r\n     * @returns {Row} The parent row.\r\n     */\n\n  }, {\n    key: \"row\",\n    value: function row() {\n      return this._row;\n    }\n    /**\r\n     * Gets the row number of the cell (1-based).\r\n     * @returns {number} The row number.\r\n     */\n\n  }, {\n    key: \"rowNumber\",\n    value: function rowNumber() {\n      return this.row().rowNumber();\n    }\n    /**\r\n     * Gets the parent sheet.\r\n     * @returns {Sheet} The parent sheet.\r\n     */\n\n  }, {\n    key: \"sheet\",\n    value: function sheet() {\n      return this.row().sheet();\n    }\n    /**\r\n     * Gets an individual style.\r\n     * @param {string} name - The name of the style.\r\n     * @returns {*} The style.\r\n     */\n\n    /**\r\n    * Gets multiple styles.\r\n    * @param {Array.<string>} names - The names of the style.\r\n    * @returns {object.<string, *>} Object whose keys are the style names and values are the styles.\r\n    */\n\n    /**\r\n    * Sets an individual style.\r\n    * @param {string} name - The name of the style.\r\n    * @param {*} value - The value to set.\r\n    * @returns {Cell} The cell.\r\n    */\n\n    /**\r\n    * Sets the styles in the range starting with the cell.\r\n    * @param {string} name - The name of the style.\r\n    * @param {Array.<Array.<*>>} - 2D array of values to set.\r\n    * @returns {Range} The range that was set.\r\n    */\n\n    /**\r\n    * Sets multiple styles.\r\n    * @param {object.<string, *>} styles - Object whose keys are the style names and values are the styles to set.\r\n    * @returns {Cell} The cell.\r\n    */\n\n    /**\r\n    * Sets to a specific style\r\n    * @param {Style} style - Style object given from stylesheet.createStyle\r\n    * @returns {Cell} The cell.\r\n    */\n\n  }, {\n    key: \"style\",\n    value: function style() {\n      var _this5 = this;\n\n      if (!this._style && !(arguments[0] instanceof Style)) {\n        this._style = this.workbook().styleSheet().createStyle(this._styleId);\n      }\n\n      return new ArgHandler(\"Cell.style\")[\"case\"]('string', function (name) {\n        // Get single value\n        return _this5._style.style(name);\n      })[\"case\"]('array', function (names) {\n        // Get list of values\n        var values = {};\n        names.forEach(function (name) {\n          values[name] = _this5.style(name);\n        });\n        return values;\n      })[\"case\"]([\"string\", \"array\"], function (name, values) {\n        var numRows = values.length;\n        var numCols = values[0].length;\n\n        var range = _this5.rangeTo(_this5.relativeCell(numRows - 1, numCols - 1));\n\n        return range.style(name, values);\n      })[\"case\"](['string', '*'], function (name, value) {\n        // Set a single value for all cells to a single value\n        _this5._style.style(name, value);\n\n        return _this5;\n      })[\"case\"]('object', function (nameValues) {\n        // Object of key value pairs to set\n        for (var name in nameValues) {\n          if (!nameValues.hasOwnProperty(name)) continue;\n          var value = nameValues[name];\n\n          _this5.style(name, value);\n        }\n\n        return _this5;\n      })[\"case\"]('Style', function (style) {\n        _this5._style = style;\n        _this5._styleId = style.id();\n        return _this5;\n      }).handle(arguments);\n    }\n    /**\r\n     * Gets the value of the cell.\r\n     * @returns {string|boolean|number|Date|RichText|undefined} The value of the cell.\r\n     */\n\n    /**\r\n    * Sets the value of the cell.\r\n    * @param {string|boolean|number|null|undefined|RichText} value - The value to set.\r\n    * @returns {Cell} The cell.\r\n    */\n\n    /**\r\n    * Sets the values in the range starting with the cell.\r\n    * @param {Array.<Array.<string|boolean|number|null|undefined>>} - 2D array of values to set.\r\n    * @returns {Range} The range that was set.\r\n    */\n\n  }, {\n    key: \"value\",\n    value: function value() {\n      var _this6 = this;\n\n      return new ArgHandler('Cell.value')[\"case\"](function () {\n        if (_this6._value instanceof RichText) {\n          return _this6._value.getInstanceWithCellRef(_this6);\n        }\n\n        return _this6._value;\n      })[\"case\"](\"array\", function (values) {\n        var numRows = values.length;\n        var numCols = values[0].length;\n\n        var range = _this6.rangeTo(_this6.relativeCell(numRows - 1, numCols - 1));\n\n        return range.value(values);\n      })[\"case\"]('*', function (value) {\n        _this6.clear();\n\n        if (value instanceof RichText) {\n          _this6._value = value.copy(_this6);\n        } else {\n          _this6._value = value;\n        }\n\n        return _this6;\n      }).handle(arguments);\n    }\n    /**\r\n     * Gets the parent workbook.\r\n     * @returns {Workbook} The parent workbook.\r\n     */\n\n  }, {\n    key: \"workbook\",\n    value: function workbook() {\n      return this.row().workbook();\n    }\n    /**\r\n     * Append horizontal page break after the cell.\r\n     * @returns {Cell} the cell.\r\n     */\n\n  }, {\n    key: \"addHorizontalPageBreak\",\n    value: function addHorizontalPageBreak() {\n      this.row().addPageBreak();\n      return this;\n    }\n    /* INTERNAL */\n\n    /**\r\n     * Gets the formula if a shared formula ref cell.\r\n     * @returns {string|undefined} The formula.\r\n     * @ignore\r\n     */\n\n  }, {\n    key: \"getSharedRefFormula\",\n    value: function getSharedRefFormula() {\n      return this._formulaType === \"shared\" ? this._formulaRef && this._formula : undefined;\n    }\n    /**\r\n     * Check if this cell uses a given shared a formula ID.\r\n     * @param {number} id - The shared formula ID.\r\n     * @returns {boolean} A flag indicating if shared.\r\n     * @ignore\r\n     */\n\n  }, {\n    key: \"sharesFormula\",\n    value: function sharesFormula(id) {\n      return this._formulaType === \"shared\" && this._sharedFormulaId === id;\n    }\n    /**\r\n     * Set a shared formula on the cell.\r\n     * @param {number} id - The shared formula index.\r\n     * @param {string} [formula] - The formula (if the reference cell).\r\n     * @param {string} [sharedRef] - The address of the shared range (if the reference cell).\r\n     * @returns {undefined}\r\n     * @ignore\r\n     */\n\n  }, {\n    key: \"setSharedFormula\",\n    value: function setSharedFormula(id, formula, sharedRef) {\n      this.clear();\n      this._formulaType = \"shared\";\n      this._sharedFormulaId = id;\n      this._formula = formula;\n      this._formulaRef = sharedRef;\n    }\n    /**\r\n     * Convert the cell to an XML object.\r\n     * @returns {{}} The XML form.\r\n     * @ignore\r\n     */\n\n  }, {\n    key: \"toXml\",\n    value: function toXml() {\n      // Create a node.\n      var node = {\n        name: 'c',\n        attributes: this._remainingAttributes || {},\n        // Start with any remaining attributes we don't current handle.\n        children: []\n      }; // Set the address.\n\n      node.attributes.r = this.address();\n\n      if (!_.isNil(this._formulaType)) {\n        // Add the formula.\n        var fNode = {\n          name: 'f',\n          attributes: this._remainingFormulaAttributes || {}\n        };\n        if (this._formulaType !== \"normal\") fNode.attributes.t = this._formulaType;\n        if (!_.isNil(this._formulaRef)) fNode.attributes.ref = this._formulaRef;\n        if (!_.isNil(this._sharedFormulaId)) fNode.attributes.si = this._sharedFormulaId;\n        if (!_.isNil(this._formula)) fNode.children = [this._formula];\n        node.children.push(fNode);\n      } else if (!_.isNil(this._value)) {\n        // Add the value. Don't emit value if a formula is set as Excel will show this stale value.\n        var type, text;\n\n        if (typeof this._value === \"string\") {\n          type = \"s\";\n          text = this.workbook().sharedStrings().getIndexForString(this._value);\n        } else if (typeof this._value === \"boolean\") {\n          type = \"b\";\n          text = this._value ? 1 : 0;\n        } else if (typeof this._value === \"number\") {\n          text = this._value;\n        } else if (this._value instanceof Date) {\n          text = dateConverter.dateToNumber(this._value);\n        } else if (this._value instanceof RichText || _typeof(this._value) === \"object\" && this._value.constructor.name === \"RichText\") {\n          // Hack to make Jasmine test work\n          type = \"s\";\n          text = this.workbook().sharedStrings().getIndexForString(this._value.toXml());\n        }\n\n        if (type) node.attributes.t = type;\n        var vNode = {\n          name: 'v',\n          children: [text]\n        };\n        node.children.push(vNode);\n      } // If the style is set, set the style ID.\n\n\n      if (!_.isNil(this._style)) {\n        node.attributes.s = this._style.id();\n      } else if (!_.isNil(this._styleId)) {\n        node.attributes.s = this._styleId;\n      } // Add any remaining children that we don't currently handle.\n\n\n      if (this._remainingChildren) {\n        node.children = node.children.concat(this._remainingChildren);\n      }\n\n      return node;\n    }\n    /* PRIVATE */\n\n    /**\r\n     * Initialize the cell node.\r\n     * @param {{}|number} nodeOrColumnNumber - The existing node or the column number of a new cell.\r\n     * @param {number} [styleId] - The style ID for the new cell.\r\n     * @returns {undefined}\r\n     * @private\r\n     */\n\n  }, {\n    key: \"_init\",\n    value: function _init(nodeOrColumnNumber, styleId) {\n      if (_.isObject(nodeOrColumnNumber)) {\n        // Parse the existing node.\n        this._parseNode(nodeOrColumnNumber);\n      } else {\n        // This is a new cell.\n        this._columnNumber = nodeOrColumnNumber;\n        if (!_.isNil(styleId)) this._styleId = styleId;\n      }\n    }\n    /**\r\n     * Parse the existing node.\r\n     * @param {{}} node - The existing node.\r\n     * @returns {undefined}\r\n     * @private\r\n     */\n\n  }, {\n    key: \"_parseNode\",\n    value: function _parseNode(node) {\n      // Parse the column numbr out of the address.\n      var ref = addressConverter.fromAddress(node.attributes.r);\n      this._columnNumber = ref.columnNumber; // Store the style ID if present.\n\n      if (!_.isNil(node.attributes.s)) this._styleId = node.attributes.s; // Parse the formula if present..\n\n      var fNode = xmlq.findChild(node, 'f');\n\n      if (fNode) {\n        this._formulaType = fNode.attributes.t || \"normal\";\n        this._formulaRef = fNode.attributes.ref;\n        this._formula = fNode.children[0];\n        this._sharedFormulaId = fNode.attributes.si;\n\n        if (!_.isNil(this._sharedFormulaId)) {\n          // Update the sheet's max shared formula ID so we can set future IDs an index beyond this.\n          this.sheet().updateMaxSharedFormulaId(this._sharedFormulaId);\n        } // Delete the known attributes.\n\n\n        delete fNode.attributes.t;\n        delete fNode.attributes.ref;\n        delete fNode.attributes.si; // If any unknown attributes are still present, store them for later output.\n\n        if (!_.isEmpty(fNode.attributes)) this._remainingFormulaAttributes = fNode.attributes;\n      } // Parse the value.\n\n\n      var type = node.attributes.t;\n\n      if (type === \"s\") {\n        // String value.\n        var vNode = xmlq.findChild(node, 'v');\n\n        if (vNode) {\n          var sharedIndex = vNode.children[0];\n          this._value = this.workbook().sharedStrings().getStringByIndex(sharedIndex); // rich text\n\n          if (_.isArray(this._value)) {\n            this._value = new RichText(this._value);\n          }\n        } else {\n          this._value = '';\n        }\n      } else if (type === \"str\") {\n        // Simple string value.\n        var _vNode = xmlq.findChild(node, 'v');\n\n        this._value = _vNode && _vNode.children[0];\n      } else if (type === \"inlineStr\") {\n        // Inline string value: can be simple text or rich text.\n        var isNode = xmlq.findChild(node, 'is');\n\n        if (isNode.children[0].name === \"t\") {\n          var tNode = isNode.children[0];\n          this._value = tNode.children[0];\n        } else {\n          this._value = isNode.children;\n        }\n      } else if (type === \"b\") {\n        // Boolean value.\n        this._value = xmlq.findChild(node, 'v').children[0] === 1;\n      } else if (type === \"e\") {\n        // Error value.\n        var error = xmlq.findChild(node, 'v').children[0];\n        this._value = FormulaError.getError(error);\n      } else {\n        // Number value.\n        var _vNode2 = xmlq.findChild(node, 'v');\n\n        this._value = _vNode2 && Number(_vNode2.children[0]);\n      } // Delete known attributes.\n\n\n      delete node.attributes.r;\n      delete node.attributes.s;\n      delete node.attributes.t; // If any unknown attributes are still present, store them for later output.\n\n      if (!_.isEmpty(node.attributes)) this._remainingAttributes = node.attributes; // Delete known children.\n\n      xmlq.removeChild(node, 'f');\n      xmlq.removeChild(node, 'v');\n      xmlq.removeChild(node, 'is'); // If any unknown children are still present, store them for later output.\n\n      if (!_.isEmpty(node.children)) this._remainingChildren = node.children;\n    }\n  }]);\n\n  return Cell;\n}();\n\nmodule.exports = Cell;\n/*\r\n<c r=\"A6\" s=\"1\" t=\"s\">\r\n    <v>2</v>\r\n</c>\r\n*/","\"use strict\"; // The base date = 0.\n\nvar dateBase = new Date(1900, 0, 0); // The date conversion has a bug that assumes 1900 was a leap year. So we need to add one for dates after this.\n\nvar incorrectLeapDate = new Date(1900, 1, 28); // Number of milliseconds in a day.\n\nvar millisecondsInDay = 1000 * 60 * 60 * 24;\n/**\r\n * Date converter.\r\n * @private\r\n */\n\nmodule.exports = {\n  /**\r\n   * Convert a date to a number for Excel.\r\n   * @param {Date} date - The date.\r\n   * @returns {number} The number.\r\n   */\n  dateToNumber: function dateToNumber(date) {\n    // Clone the date and strip the time off.\n    var dateOnly = new Date(date.getTime());\n    dateOnly.setHours(0, 0, 0, 0); // Set the number to be the number of days between the date and the base date.\n    // We need to round as daylight savings will cause fractional days, which we don't want.\n\n    var number = Math.round((dateOnly - dateBase) / millisecondsInDay); // Add the true fractional days from just the milliseconds left in the current day.\n\n    number += (date - dateOnly) / millisecondsInDay; // Adjust for the \"bug\" in Excel that treats 1900 as a leap year.\n\n    if (date > incorrectLeapDate) number += 1;\n    return number;\n  },\n\n  /**\r\n   * Convert a number to a date.\r\n   * @param {number} number - The number.\r\n   * @returns {Date} The date.\r\n   */\n  numberToDate: function numberToDate(number) {\n    // If the number is greater than the incorrect leap date, we should subtract one.\n    if (number > this.dateToNumber(incorrectLeapDate)) number--; // Break the number of full days and the remaining milliseconds in the current day.\n\n    var fullDays = Math.floor(number);\n    var partialMilliseconds = Math.round((number - fullDays) * millisecondsInDay); // Create a new date from the base date plus the time in the current day.\n\n    var date = new Date(dateBase.getTime() + partialMilliseconds); // Now add the number of full days. JS will properly handle the month/year changes.\n\n    date.setDate(date.getDate() + fullDays);\n    return date;\n  }\n};","\"use strict\";\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nvar _ = require(\"lodash\");\n/**\r\n * A formula error (e.g. #DIV/0!).\r\n */\n\n\nvar FormulaError =\n/*#__PURE__*/\nfunction () {\n  // /**\n  //  * Creates a new instance of Formula Error.\n  //  * @param {string} error - The error code.\n  //  */\n  function FormulaError(error) {\n    _classCallCheck(this, FormulaError);\n\n    this._error = error;\n  }\n  /**\r\n   * Get the error code.\r\n   * @returns {string} The error code.\r\n   */\n\n\n  _createClass(FormulaError, [{\n    key: \"error\",\n    value: function error() {\n      return this._error;\n    }\n  }]);\n\n  return FormulaError;\n}();\n/**\r\n * \\#DIV/0! error.\r\n * @type {FormulaError}\r\n */\n\n\nFormulaError.DIV0 = new FormulaError(\"#DIV/0!\");\n/**\r\n * \\#N/A error.\r\n * @type {FormulaError}\r\n */\n\nFormulaError.NA = new FormulaError(\"#N/A\");\n/**\r\n * \\#NAME? error.\r\n * @type {FormulaError}\r\n */\n\nFormulaError.NAME = new FormulaError(\"#NAME?\");\n/**\r\n * \\#NULL! error.\r\n * @type {FormulaError}\r\n */\n\nFormulaError.NULL = new FormulaError(\"#NULL!\");\n/**\r\n * \\#NUM! error.\r\n * @type {FormulaError}\r\n */\n\nFormulaError.NUM = new FormulaError(\"#NUM!\");\n/**\r\n * \\#REF! error.\r\n * @type {FormulaError}\r\n */\n\nFormulaError.REF = new FormulaError(\"#REF!\");\n/**\r\n * \\#VALUE! error.\r\n * @type {FormulaError}\r\n */\n\nFormulaError.VALUE = new FormulaError(\"#VALUE!\");\n/**\r\n * Get the matching FormulaError object.\r\n * @param {string} error - The error code.\r\n * @returns {FormulaError} The matching FormulaError or a new object if no match.\r\n * @ignore\r\n */\n\nFormulaError.getError = function (error) {\n  return _.find(FormulaError, function (value) {\n    return value instanceof FormulaError && value.error() === error;\n  }) || new FormulaError(error);\n};\n\nmodule.exports = FormulaError;","\"use strict\";\n/* eslint camelcase:off */\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nvar ArgHandler = require(\"./ArgHandler\");\n\nvar _ = require(\"lodash\");\n\nvar xmlq = require(\"./xmlq\");\n\nvar colorIndexes = require(\"./colorIndexes\");\n/**\r\n * A style.\r\n * @ignore\r\n */\n\n\nvar Style =\n/*#__PURE__*/\nfunction () {\n  /**\r\n   * Creates a new instance of _Style.\r\n   * @constructor\r\n   * @param {StyleSheet} styleSheet - The styleSheet.\r\n   * @param {number} id - The style ID.\r\n   * @param {{}} xfNode - The xf node.\r\n   * @param {{}} fontNode - The font node.\r\n   * @param {{}} fillNode - The fill node.\r\n   * @param {{}} borderNode - The border node.\r\n   */\n  function Style(styleSheet, id, xfNode, fontNode, fillNode, borderNode) {\n    _classCallCheck(this, Style);\n\n    this._styleSheet = styleSheet;\n    this._id = id;\n    this._xfNode = xfNode;\n    this._fontNode = fontNode;\n    this._fillNode = fillNode;\n    this._borderNode = borderNode;\n  }\n  /**\r\n   * Gets the style ID.\r\n   * @returns {number} The ID.\r\n   */\n\n\n  _createClass(Style, [{\n    key: \"id\",\n    value: function id() {\n      return this._id;\n    }\n    /**\r\n     * Gets or sets a style.\r\n     * @param {string} name - The style name.\r\n     * @param {*} [value] - The value to set.\r\n     * @returns {*|Style} The value if getting or the style if setting.\r\n     */\n\n  }, {\n    key: \"style\",\n    value: function style() {\n      var _this = this;\n\n      return new ArgHandler(\"_Style.style\")[\"case\"]('string', function (name) {\n        var getterName = \"_get_\".concat(name);\n        if (!_this[getterName]) throw new Error(\"_Style.style: '\".concat(name, \"' is not a valid style\"));\n        return _this[getterName]();\n      })[\"case\"](['string', '*'], function (name, value) {\n        var setterName = \"_set_\".concat(name);\n        if (!_this[setterName]) throw new Error(\"_Style.style: '\".concat(name, \"' is not a valid style\"));\n\n        _this[setterName](value);\n\n        return _this;\n      }).handle(arguments);\n    }\n  }, {\n    key: \"_getColor\",\n    value: function _getColor(node, name) {\n      var child = xmlq.findChild(node, name);\n      if (!child || !child.attributes) return;\n      var color = {};\n      if (child.attributes.hasOwnProperty('rgb')) color.rgb = child.attributes.rgb;else if (child.attributes.hasOwnProperty('theme')) color.theme = child.attributes.theme;else if (child.attributes.hasOwnProperty('indexed')) color.rgb = colorIndexes[child.attributes.indexed];\n      if (child.attributes.hasOwnProperty('tint')) color.tint = child.attributes.tint;\n      if (_.isEmpty(color)) return;\n      return color;\n    }\n  }, {\n    key: \"_setColor\",\n    value: function _setColor(node, name, color) {\n      if (typeof color === \"string\") color = {\n        rgb: color\n      };else if (typeof color === \"number\") color = {\n        theme: color\n      };\n      xmlq.setChildAttributes(node, name, {\n        rgb: color && color.rgb && color.rgb.toUpperCase(),\n        indexed: null,\n        theme: color && color.theme,\n        tint: color && color.tint\n      });\n      xmlq.removeChildIfEmpty(node, 'color');\n    }\n  }, {\n    key: \"_get_bold\",\n    value: function _get_bold() {\n      return xmlq.hasChild(this._fontNode, 'b');\n    }\n  }, {\n    key: \"_set_bold\",\n    value: function _set_bold(bold) {\n      if (bold) xmlq.appendChildIfNotFound(this._fontNode, \"b\");else xmlq.removeChild(this._fontNode, 'b');\n    }\n  }, {\n    key: \"_get_italic\",\n    value: function _get_italic() {\n      return xmlq.hasChild(this._fontNode, 'i');\n    }\n  }, {\n    key: \"_set_italic\",\n    value: function _set_italic(italic) {\n      if (italic) xmlq.appendChildIfNotFound(this._fontNode, \"i\");else xmlq.removeChild(this._fontNode, 'i');\n    }\n  }, {\n    key: \"_get_underline\",\n    value: function _get_underline() {\n      var uNode = xmlq.findChild(this._fontNode, 'u');\n      return uNode ? uNode.attributes.val || true : false;\n    }\n  }, {\n    key: \"_set_underline\",\n    value: function _set_underline(underline) {\n      if (underline) {\n        var uNode = xmlq.appendChildIfNotFound(this._fontNode, \"u\");\n        var val = typeof underline === 'string' ? underline : null;\n        xmlq.setAttributes(uNode, {\n          val: val\n        });\n      } else {\n        xmlq.removeChild(this._fontNode, 'u');\n      }\n    }\n  }, {\n    key: \"_get_strikethrough\",\n    value: function _get_strikethrough() {\n      return xmlq.hasChild(this._fontNode, 'strike');\n    }\n  }, {\n    key: \"_set_strikethrough\",\n    value: function _set_strikethrough(strikethrough) {\n      if (strikethrough) xmlq.appendChildIfNotFound(this._fontNode, \"strike\");else xmlq.removeChild(this._fontNode, 'strike');\n    }\n  }, {\n    key: \"_getFontVerticalAlignment\",\n    value: function _getFontVerticalAlignment() {\n      return xmlq.getChildAttribute(this._fontNode, 'vertAlign', \"val\");\n    }\n  }, {\n    key: \"_setFontVerticalAlignment\",\n    value: function _setFontVerticalAlignment(alignment) {\n      xmlq.setChildAttributes(this._fontNode, 'vertAlign', {\n        val: alignment\n      });\n      xmlq.removeChildIfEmpty(this._fontNode, 'vertAlign');\n    }\n  }, {\n    key: \"_get_subscript\",\n    value: function _get_subscript() {\n      return this._getFontVerticalAlignment() === \"subscript\";\n    }\n  }, {\n    key: \"_set_subscript\",\n    value: function _set_subscript(subscript) {\n      this._setFontVerticalAlignment(subscript ? \"subscript\" : null);\n    }\n  }, {\n    key: \"_get_superscript\",\n    value: function _get_superscript() {\n      return this._getFontVerticalAlignment() === \"superscript\";\n    }\n  }, {\n    key: \"_set_superscript\",\n    value: function _set_superscript(superscript) {\n      this._setFontVerticalAlignment(superscript ? \"superscript\" : null);\n    }\n  }, {\n    key: \"_get_fontSize\",\n    value: function _get_fontSize() {\n      return xmlq.getChildAttribute(this._fontNode, 'sz', \"val\");\n    }\n  }, {\n    key: \"_set_fontSize\",\n    value: function _set_fontSize(size) {\n      xmlq.setChildAttributes(this._fontNode, 'sz', {\n        val: size\n      });\n      xmlq.removeChildIfEmpty(this._fontNode, 'sz');\n    }\n  }, {\n    key: \"_get_fontFamily\",\n    value: function _get_fontFamily() {\n      return xmlq.getChildAttribute(this._fontNode, 'name', \"val\");\n    }\n  }, {\n    key: \"_set_fontFamily\",\n    value: function _set_fontFamily(family) {\n      xmlq.setChildAttributes(this._fontNode, 'name', {\n        val: family\n      });\n      xmlq.removeChildIfEmpty(this._fontNode, 'name');\n    }\n  }, {\n    key: \"_get_fontGenericFamily\",\n    value: function _get_fontGenericFamily() {\n      return xmlq.getChildAttribute(this._fontNode, 'family', \"val\");\n    }\n  }, {\n    key: \"_set_fontGenericFamily\",\n    value: function _set_fontGenericFamily(genericFamily) {\n      xmlq.setChildAttributes(this._fontNode, 'family', {\n        val: genericFamily\n      });\n      xmlq.removeChildIfEmpty(this._fontNode, 'family');\n    }\n  }, {\n    key: \"_get_fontColor\",\n    value: function _get_fontColor() {\n      return this._getColor(this._fontNode, \"color\");\n    }\n  }, {\n    key: \"_set_fontColor\",\n    value: function _set_fontColor(color) {\n      this._setColor(this._fontNode, \"color\", color);\n    }\n  }, {\n    key: \"_get_fontScheme\",\n    value: function _get_fontScheme() {\n      // can be 'minor', 'major', 'none'\n      return xmlq.getChildAttribute(this._fontNode, 'scheme', \"val\");\n    }\n  }, {\n    key: \"_set_fontScheme\",\n    value: function _set_fontScheme(scheme) {\n      xmlq.setChildAttributes(this._fontNode, 'scheme', {\n        val: scheme\n      });\n      xmlq.removeChildIfEmpty(this._fontNode, 'scheme');\n    }\n  }, {\n    key: \"_get_horizontalAlignment\",\n    value: function _get_horizontalAlignment() {\n      return xmlq.getChildAttribute(this._xfNode, 'alignment', \"horizontal\");\n    }\n  }, {\n    key: \"_set_horizontalAlignment\",\n    value: function _set_horizontalAlignment(alignment) {\n      xmlq.setChildAttributes(this._xfNode, 'alignment', {\n        horizontal: alignment\n      });\n      xmlq.removeChildIfEmpty(this._xfNode, 'alignment');\n    }\n  }, {\n    key: \"_get_justifyLastLine\",\n    value: function _get_justifyLastLine() {\n      return xmlq.getChildAttribute(this._xfNode, 'alignment', \"justifyLastLine\") === 1;\n    }\n  }, {\n    key: \"_set_justifyLastLine\",\n    value: function _set_justifyLastLine(justifyLastLine) {\n      xmlq.setChildAttributes(this._xfNode, 'alignment', {\n        justifyLastLine: justifyLastLine ? 1 : null\n      });\n      xmlq.removeChildIfEmpty(this._xfNode, 'alignment');\n    }\n  }, {\n    key: \"_get_indent\",\n    value: function _get_indent() {\n      return xmlq.getChildAttribute(this._xfNode, 'alignment', \"indent\");\n    }\n  }, {\n    key: \"_set_indent\",\n    value: function _set_indent(indent) {\n      xmlq.setChildAttributes(this._xfNode, 'alignment', {\n        indent: indent\n      });\n      xmlq.removeChildIfEmpty(this._xfNode, 'alignment');\n    }\n  }, {\n    key: \"_get_verticalAlignment\",\n    value: function _get_verticalAlignment() {\n      return xmlq.getChildAttribute(this._xfNode, 'alignment', \"vertical\");\n    }\n  }, {\n    key: \"_set_verticalAlignment\",\n    value: function _set_verticalAlignment(alignment) {\n      xmlq.setChildAttributes(this._xfNode, 'alignment', {\n        vertical: alignment\n      });\n      xmlq.removeChildIfEmpty(this._xfNode, 'alignment');\n    }\n  }, {\n    key: \"_get_wrapText\",\n    value: function _get_wrapText() {\n      return xmlq.getChildAttribute(this._xfNode, 'alignment', \"wrapText\") === 1;\n    }\n  }, {\n    key: \"_set_wrapText\",\n    value: function _set_wrapText(wrapText) {\n      xmlq.setChildAttributes(this._xfNode, 'alignment', {\n        wrapText: wrapText ? 1 : null\n      });\n      xmlq.removeChildIfEmpty(this._xfNode, 'alignment');\n    }\n  }, {\n    key: \"_get_shrinkToFit\",\n    value: function _get_shrinkToFit() {\n      return xmlq.getChildAttribute(this._xfNode, 'alignment', \"shrinkToFit\") === 1;\n    }\n  }, {\n    key: \"_set_shrinkToFit\",\n    value: function _set_shrinkToFit(shrinkToFit) {\n      xmlq.setChildAttributes(this._xfNode, 'alignment', {\n        shrinkToFit: shrinkToFit ? 1 : null\n      });\n      xmlq.removeChildIfEmpty(this._xfNode, 'alignment');\n    }\n  }, {\n    key: \"_get_textDirection\",\n    value: function _get_textDirection() {\n      var readingOrder = xmlq.getChildAttribute(this._xfNode, 'alignment', \"readingOrder\");\n      if (readingOrder === 1) return \"left-to-right\";\n      if (readingOrder === 2) return \"right-to-left\";\n      return readingOrder;\n    }\n  }, {\n    key: \"_set_textDirection\",\n    value: function _set_textDirection(textDirection) {\n      var readingOrder;\n      if (textDirection === \"left-to-right\") readingOrder = 1;else if (textDirection === \"right-to-left\") readingOrder = 2;\n      xmlq.setChildAttributes(this._xfNode, 'alignment', {\n        readingOrder: readingOrder\n      });\n      xmlq.removeChildIfEmpty(this._xfNode, 'alignment');\n    }\n  }, {\n    key: \"_getTextRotation\",\n    value: function _getTextRotation() {\n      return xmlq.getChildAttribute(this._xfNode, 'alignment', \"textRotation\");\n    }\n  }, {\n    key: \"_setTextRotation\",\n    value: function _setTextRotation(textRotation) {\n      xmlq.setChildAttributes(this._xfNode, 'alignment', {\n        textRotation: textRotation\n      });\n      xmlq.removeChildIfEmpty(this._xfNode, 'alignment');\n    }\n  }, {\n    key: \"_get_textRotation\",\n    value: function _get_textRotation() {\n      var textRotation = this._getTextRotation(); // Negative angles in Excel correspond to values > 90 in OOXML.\n\n\n      if (textRotation > 90) textRotation = 90 - textRotation;\n      return textRotation;\n    }\n  }, {\n    key: \"_set_textRotation\",\n    value: function _set_textRotation(textRotation) {\n      // Negative angles in Excel correspond to values > 90 in OOXML.\n      if (textRotation < 0) textRotation = 90 - textRotation;\n\n      this._setTextRotation(textRotation);\n    }\n  }, {\n    key: \"_get_angleTextCounterclockwise\",\n    value: function _get_angleTextCounterclockwise() {\n      return this._getTextRotation() === 45;\n    }\n  }, {\n    key: \"_set_angleTextCounterclockwise\",\n    value: function _set_angleTextCounterclockwise(value) {\n      this._setTextRotation(value ? 45 : null);\n    }\n  }, {\n    key: \"_get_angleTextClockwise\",\n    value: function _get_angleTextClockwise() {\n      return this._getTextRotation() === 135;\n    }\n  }, {\n    key: \"_set_angleTextClockwise\",\n    value: function _set_angleTextClockwise(value) {\n      this._setTextRotation(value ? 135 : null);\n    }\n  }, {\n    key: \"_get_rotateTextUp\",\n    value: function _get_rotateTextUp() {\n      return this._getTextRotation() === 90;\n    }\n  }, {\n    key: \"_set_rotateTextUp\",\n    value: function _set_rotateTextUp(value) {\n      this._setTextRotation(value ? 90 : null);\n    }\n  }, {\n    key: \"_get_rotateTextDown\",\n    value: function _get_rotateTextDown() {\n      return this._getTextRotation() === 180;\n    }\n  }, {\n    key: \"_set_rotateTextDown\",\n    value: function _set_rotateTextDown(value) {\n      this._setTextRotation(value ? 180 : null);\n    }\n  }, {\n    key: \"_get_verticalText\",\n    value: function _get_verticalText() {\n      return this._getTextRotation() === 255;\n    }\n  }, {\n    key: \"_set_verticalText\",\n    value: function _set_verticalText(value) {\n      this._setTextRotation(value ? 255 : null);\n    }\n  }, {\n    key: \"_get_fill\",\n    value: function _get_fill() {\n      var _this2 = this;\n\n      var patternFillNode = xmlq.findChild(this._fillNode, 'patternFill'); // jq.get(this._fillNode, \"patternFill[0]\");\n\n      var gradientFillNode = xmlq.findChild(this._fillNode, 'gradientFill'); // jq.get(this._fillNode, \"gradientFill[0]\");\n\n      var patternType = patternFillNode && patternFillNode.attributes.patternType; // jq.get(patternFillNode, \"$.patternType\");\n\n      if (patternType === \"solid\") {\n        return {\n          type: \"solid\",\n          color: this._getColor(patternFillNode, \"fgColor\")\n        };\n      }\n\n      if (patternType) {\n        return {\n          type: \"pattern\",\n          pattern: patternType,\n          foreground: this._getColor(patternFillNode, \"fgColor\"),\n          background: this._getColor(patternFillNode, \"bgColor\")\n        };\n      }\n\n      if (gradientFillNode) {\n        var gradientType = gradientFillNode.attributes.type || \"linear\";\n        var fill = {\n          type: \"gradient\",\n          gradientType: gradientType,\n          stops: _.map(gradientFillNode.children, function (stop) {\n            return {\n              position: stop.attributes.position,\n              color: _this2._getColor(stop, \"color\")\n            };\n          })\n        };\n\n        if (gradientType === \"linear\") {\n          fill.angle = gradientFillNode.attributes.degree;\n        } else {\n          fill.left = gradientFillNode.attributes.left;\n          fill.right = gradientFillNode.attributes.right;\n          fill.top = gradientFillNode.attributes.top;\n          fill.bottom = gradientFillNode.attributes.bottom;\n        }\n\n        return fill;\n      }\n    }\n  }, {\n    key: \"_set_fill\",\n    value: function _set_fill(fill) {\n      var _this3 = this;\n\n      this._fillNode.children = []; // No fill\n\n      if (_.isNil(fill)) return; // Pattern fill\n\n      if (fill.type === \"pattern\") {\n        var _patternFill = {\n          name: 'patternFill',\n          attributes: {\n            patternType: fill.pattern\n          },\n          children: []\n        };\n\n        this._fillNode.children.push(_patternFill);\n\n        this._setColor(_patternFill, \"fgColor\", fill.foreground);\n\n        this._setColor(_patternFill, \"bgColor\", fill.background);\n\n        return;\n      } // Gradient fill\n\n\n      if (fill.type === \"gradient\") {\n        var gradientFill = {\n          name: 'gradientFill',\n          attributes: {},\n          children: []\n        };\n\n        this._fillNode.children.push(gradientFill);\n\n        xmlq.setAttributes(gradientFill, {\n          type: fill.gradientType === \"path\" ? \"path\" : undefined,\n          left: fill.left,\n          right: fill.right,\n          top: fill.top,\n          bottom: fill.bottom,\n          degree: fill.angle\n        });\n\n        _.forEach(fill.stops, function (fillStop, i) {\n          var stop = {\n            name: 'stop',\n            attributes: {\n              position: fillStop.position\n            },\n            children: []\n          };\n          gradientFill.children.push(stop);\n\n          _this3._setColor(stop, 'color', fillStop.color);\n        });\n\n        return;\n      } // Solid fill (really a pattern fill with a solid pattern type).\n\n\n      if (!_.isObject(fill)) fill = {\n        type: \"solid\",\n        color: fill\n      };else if (fill.hasOwnProperty('rgb') || fill.hasOwnProperty(\"theme\")) fill = {\n        color: fill\n      };\n      var patternFill = {\n        name: 'patternFill',\n        attributes: {\n          patternType: 'solid'\n        }\n      };\n\n      this._fillNode.children.push(patternFill);\n\n      this._setColor(patternFill, \"fgColor\", fill.color);\n    }\n  }, {\n    key: \"_getBorder\",\n    value: function _getBorder() {\n      var _this4 = this;\n\n      var result = {};\n      [\"left\", \"right\", \"top\", \"bottom\", \"diagonal\"].forEach(function (side) {\n        var sideNode = xmlq.findChild(_this4._borderNode, side);\n        var sideResult = {};\n        var style = xmlq.getChildAttribute(_this4._borderNode, side, 'style');\n        if (style) sideResult.style = style;\n\n        var color = _this4._getColor(sideNode, 'color');\n\n        if (color) sideResult.color = color;\n\n        if (side === \"diagonal\") {\n          var up = _this4._borderNode.attributes.diagonalUp;\n          var down = _this4._borderNode.attributes.diagonalDown;\n          var direction;\n          if (up && down) direction = \"both\";else if (up) direction = \"up\";else if (down) direction = \"down\";\n          if (direction) sideResult.direction = direction;\n        }\n\n        if (!_.isEmpty(sideResult)) result[side] = sideResult;\n      });\n      return result;\n    }\n  }, {\n    key: \"_setBorder\",\n    value: function _setBorder(settings) {\n      var _this5 = this;\n\n      _.forOwn(settings, function (setting, side) {\n        if (typeof setting === \"boolean\") {\n          setting = {\n            style: setting ? \"thin\" : null\n          };\n        } else if (typeof setting === \"string\") {\n          setting = {\n            style: setting\n          };\n        } else if (setting === null || setting === undefined) {\n          setting = {\n            style: null,\n            color: null,\n            direction: null\n          };\n        }\n\n        if (setting.hasOwnProperty(\"style\")) {\n          xmlq.setChildAttributes(_this5._borderNode, side, {\n            style: setting.style\n          });\n        }\n\n        if (setting.hasOwnProperty(\"color\")) {\n          var sideNode = xmlq.findChild(_this5._borderNode, side);\n\n          _this5._setColor(sideNode, \"color\", setting.color);\n        }\n\n        if (side === \"diagonal\") {\n          xmlq.setAttributes(_this5._borderNode, {\n            diagonalUp: setting.direction === \"up\" || setting.direction === \"both\" ? 1 : null,\n            diagonalDown: setting.direction === \"down\" || setting.direction === \"both\" ? 1 : null\n          });\n        }\n      });\n    }\n  }, {\n    key: \"_get_border\",\n    value: function _get_border() {\n      return this._getBorder();\n    }\n  }, {\n    key: \"_set_border\",\n    value: function _set_border(settings) {\n      if (_.isObject(settings) && !settings.hasOwnProperty(\"style\") && !settings.hasOwnProperty(\"color\")) {\n        settings = _.defaults(settings, {\n          left: null,\n          right: null,\n          top: null,\n          bottom: null,\n          diagonal: null\n        });\n\n        this._setBorder(settings);\n      } else {\n        this._setBorder({\n          left: settings,\n          right: settings,\n          top: settings,\n          bottom: settings\n        });\n      }\n    }\n  }, {\n    key: \"_get_borderColor\",\n    value: function _get_borderColor() {\n      return _.mapValues(this._getBorder(), function (value) {\n        return value.color;\n      });\n    }\n  }, {\n    key: \"_set_borderColor\",\n    value: function _set_borderColor(color) {\n      if (_.isObject(color)) {\n        this._setBorder(_.mapValues(color, function (color) {\n          return {\n            color: color\n          };\n        }));\n      } else {\n        this._setBorder({\n          left: {\n            color: color\n          },\n          right: {\n            color: color\n          },\n          top: {\n            color: color\n          },\n          bottom: {\n            color: color\n          },\n          diagonal: {\n            color: color\n          }\n        });\n      }\n    }\n  }, {\n    key: \"_get_borderStyle\",\n    value: function _get_borderStyle() {\n      return _.mapValues(this._getBorder(), function (value) {\n        return value.style;\n      });\n    }\n  }, {\n    key: \"_set_borderStyle\",\n    value: function _set_borderStyle(style) {\n      if (_.isObject(style)) {\n        this._setBorder(_.mapValues(style, function (style) {\n          return {\n            style: style\n          };\n        }));\n      } else {\n        this._setBorder({\n          left: {\n            style: style\n          },\n          right: {\n            style: style\n          },\n          top: {\n            style: style\n          },\n          bottom: {\n            style: style\n          }\n        });\n      }\n    }\n  }, {\n    key: \"_get_diagonalBorderDirection\",\n    value: function _get_diagonalBorderDirection() {\n      var border = this._getBorder().diagonal;\n\n      return border && border.direction;\n    }\n  }, {\n    key: \"_set_diagonalBorderDirection\",\n    value: function _set_diagonalBorderDirection(direction) {\n      this._setBorder({\n        diagonal: {\n          direction: direction\n        }\n      });\n    }\n  }, {\n    key: \"_get_numberFormat\",\n    value: function _get_numberFormat() {\n      var numFmtId = this._xfNode.attributes.numFmtId || 0;\n      return this._styleSheet.getNumberFormatCode(numFmtId);\n    }\n  }, {\n    key: \"_set_numberFormat\",\n    value: function _set_numberFormat(formatCode) {\n      this._xfNode.attributes.numFmtId = this._styleSheet.getNumberFormatId(formatCode);\n    }\n  }]);\n\n  return Style;\n}();\n\n[\"left\", \"right\", \"top\", \"bottom\", \"diagonal\"].forEach(function (side) {\n  Style.prototype[\"_get_\".concat(side, \"Border\")] = function () {\n    return this._getBorder()[side];\n  };\n\n  Style.prototype[\"_set_\".concat(side, \"Border\")] = function (settings) {\n    this._setBorder(_defineProperty({}, side, settings));\n  };\n\n  Style.prototype[\"_get_\".concat(side, \"BorderColor\")] = function () {\n    var border = this._getBorder()[side];\n\n    return border && border.color;\n  };\n\n  Style.prototype[\"_set_\".concat(side, \"BorderColor\")] = function (color) {\n    this._setBorder(_defineProperty({}, side, {\n      color: color\n    }));\n  };\n\n  Style.prototype[\"_get_\".concat(side, \"BorderStyle\")] = function () {\n    var border = this._getBorder()[side];\n\n    return border && border.style;\n  };\n\n  Style.prototype[\"_set_\".concat(side, \"BorderStyle\")] = function (style) {\n    this._setBorder(_defineProperty({}, side, {\n      style: style\n    }));\n  };\n}); // IE doesn't support function names so explicitly set it.\n\nif (!Style.name) Style.name = \"Style\";\nmodule.exports = Style;","\"use strict\";\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nvar _ = require(\"lodash\");\n\nvar RichTextFragment = require(\"./RichTextFragment\");\n/**\r\n * A RichText class that contains many {@link RichTextFragment}.\r\n */\n\n\nvar RichText =\n/*#__PURE__*/\nfunction () {\n  /**\r\n   * Creates a new instance of RichText. If you get the instance by calling `Cell.value()`,\r\n   * adding a text contains line separator will trigger {@link Cell.style}('wrapText', true), which\r\n   * will make MS Excel show the new line. i.e. In MS Excel, Tap \"alt+Enter\" in a cell, the cell\r\n   * will set wrap text to true automatically.\r\n   *\r\n   * @param {undefined|null|Object} [node] - The node stored in the shared string\r\n   */\n  function RichText(node) {\n    _classCallCheck(this, RichText);\n\n    this._node = [];\n    this._cell = null;\n    this._remainingNodes = [];\n\n    if (node) {\n      for (var i = 0; i < node.length; i++) {\n        var fragment = node[i];\n\n        if (fragment.name === 'r') {\n          this._node.push(new RichTextFragment(fragment, null, this));\n        } else {\n          // special node, e.g. rPh, phoneticPr in Japanese language.\n          this._remainingNodes.push(fragment);\n        }\n      }\n    }\n  }\n  /**\r\n   * Gets which cell this {@link RichText} instance belongs to.\r\n   * @return {Cell|undefined} The cell this instance belongs to.\r\n   */\n\n\n  _createClass(RichText, [{\n    key: \"text\",\n\n    /**\r\n     * Gets concatenated text without styles.\r\n     * @return {string} concatenated text\r\n     */\n    value: function text() {\n      var text = '';\n\n      for (var i = 0; i < this._node.length; i++) {\n        text += this.get(i).value();\n      }\n\n      return text;\n    }\n    /**\r\n     * Gets the instance with cell reference defined.\r\n     * @param {Cell} cell - Cell reference.\r\n     * @return {RichText} The instance with cell reference defined.\r\n     */\n\n  }, {\n    key: \"getInstanceWithCellRef\",\n    value: function getInstanceWithCellRef(cell) {\n      this._cell = cell;\n      return this;\n    }\n    /**\r\n     * Returns a deep copy of this instance.\r\n     * If cell reference is provided, it checks line separators and calls\r\n     * `cell.style('wrapText', true)` when needed.\r\n     * @param {Cell|undefined} [cell] - The cell reference.\r\n     * @return {RichText} A deep copied instance\r\n     */\n\n  }, {\n    key: \"copy\",\n    value: function copy(cell) {\n      var newRichText = new RichText(_.cloneDeep(this.toXml()));\n\n      if (cell && _.includes(this.text(), '\\n')) {\n        cell.style('wrapText', true);\n      }\n\n      return newRichText;\n    }\n    /**\r\n     * Gets the ith fragment of this {@link RichText} instance.\r\n     * @param {number} index - The index\r\n     * @return {RichTextFragment} A rich text fragment\r\n     */\n\n  }, {\n    key: \"get\",\n    value: function get(index) {\n      return this._node[index];\n    }\n    /**\r\n     * Removes a rich text fragment. This instance will be mutated.\r\n     * @param {number} index - the index of the fragment to remove\r\n     * @return {RichText} the rich text instance\r\n     */\n\n  }, {\n    key: \"remove\",\n    value: function remove(index) {\n      this._node.splice(index, 1);\n\n      this.removeUnsupportedNodes();\n      return this;\n    }\n    /**\r\n     * Adds a rich text fragment to the last or after the given index. This instance will be mutated.\r\n     * @param {string} text - the text\r\n     * @param {{}} [styles] - the styles js object, i.e. {fontSize: 12}\r\n     * @param {number|undefined|null} [index] - the index of the fragment to add\r\n     * @return {RichText} the rich text instance\r\n     */\n\n  }, {\n    key: \"add\",\n    value: function add(text, styles, index) {\n      if (index === undefined || index === null) {\n        this._node.push(new RichTextFragment(text, styles, this));\n      } else {\n        this._node.splice(index, 0, new RichTextFragment(text, styles, this));\n      }\n\n      this.removeUnsupportedNodes();\n      return this;\n    }\n    /**\r\n     * Clears this rich text\r\n     * @return {RichText} the rich text instance\r\n     */\n\n  }, {\n    key: \"clear\",\n    value: function clear() {\n      this._node = [];\n      this._remainingNodes = [];\n      this._cell = undefined;\n      return this;\n    }\n    /**\r\n     * Remove all unsupported nodes (phoneticPr, rPh for Japanese language).\r\n     * @return {undefined}\r\n     */\n\n  }, {\n    key: \"removeUnsupportedNodes\",\n    value: function removeUnsupportedNodes() {\n      this._remainingNodes = [];\n    }\n    /**\r\n     * Convert the rich text to an XML object.\r\n     * @returns {Array.<{}>} The XML form.\r\n     * @ignore\r\n     */\n\n  }, {\n    key: \"toXml\",\n    value: function toXml() {\n      var node = [];\n\n      for (var i = 0; i < this._node.length; i++) {\n        node.push(this._node[i].toXml());\n      }\n\n      return node.concat(this._remainingNodes);\n    }\n  }, {\n    key: \"cell\",\n    get: function get() {\n      return this._cell;\n    }\n    /**\r\n     * Gets the how many rich text fragment this {@link RichText} instance contains\r\n     * @return {number} The number of fragments this {@link RichText} instance has.\r\n     */\n\n  }, {\n    key: \"length\",\n    get: function get() {\n      return this._node.length;\n    }\n  }]);\n\n  return RichText;\n}(); // IE doesn't support function names so explicitly set it.\n\n\nif (!RichText.name) RichText.name = \"RichText\";\nmodule.exports = RichText;","\"use strict\";\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nvar _ = require(\"lodash\");\n\nvar RELATIONSHIP_SCHEMA_PREFIX = \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/\";\n/**\r\n * A relationship collection.\r\n * @ignore\r\n */\n\nvar Relationships =\n/*#__PURE__*/\nfunction () {\n  /**\r\n   * Creates a new instance of _Relationships.\r\n   * @param {{}} node - The node.\r\n   */\n  function Relationships(node) {\n    _classCallCheck(this, Relationships);\n\n    this._init(node);\n\n    this._getStartingId();\n  }\n  /**\r\n   * Add a new relationship.\r\n   * @param {string} type - The type of relationship.\r\n   * @param {string} target - The target of the relationship.\r\n   * @param {string} [targetMode] - The target mode of the relationship.\r\n   * @returns {{}} The new relationship.\r\n   */\n\n\n  _createClass(Relationships, [{\n    key: \"add\",\n    value: function add(type, target, targetMode) {\n      var node = {\n        name: \"Relationship\",\n        attributes: {\n          Id: \"rId\".concat(this._nextId++),\n          Type: \"\".concat(RELATIONSHIP_SCHEMA_PREFIX).concat(type),\n          Target: target\n        }\n      };\n\n      if (targetMode) {\n        node.attributes.TargetMode = targetMode;\n      }\n\n      this._node.children.push(node);\n\n      return node;\n    }\n    /**\r\n     * Find a relationship by ID.\r\n     * @param {string} id - The relationship ID.\r\n     * @returns {{}|undefined} The matching relationship or undefined if not found.\r\n     */\n\n  }, {\n    key: \"findById\",\n    value: function findById(id) {\n      return _.find(this._node.children, function (node) {\n        return node.attributes.Id === id;\n      });\n    }\n    /**\r\n     * Find a relationship by type.\r\n     * @param {string} type - The type to search for.\r\n     * @returns {{}|undefined} The matching relationship or undefined if not found.\r\n     */\n\n  }, {\n    key: \"findByType\",\n    value: function findByType(type) {\n      return _.find(this._node.children, function (node) {\n        return node.attributes.Type === \"\".concat(RELATIONSHIP_SCHEMA_PREFIX).concat(type);\n      });\n    }\n    /**\r\n     * Convert the collection to an XML object.\r\n     * @returns {{}|undefined} The XML or undefined if empty.\r\n     */\n\n  }, {\n    key: \"toXml\",\n    value: function toXml() {\n      if (!this._node.children.length) return;\n      return this._node;\n    }\n    /**\r\n     * Get the starting relationship ID to use for new relationships.\r\n     * @private\r\n     * @returns {undefined}\r\n     */\n\n  }, {\n    key: \"_getStartingId\",\n    value: function _getStartingId() {\n      var _this = this;\n\n      this._nextId = 1;\n\n      this._node.children.forEach(function (node) {\n        var id = parseInt(node.attributes.Id.substr(3));\n        if (id >= _this._nextId) _this._nextId = id + 1;\n      });\n    }\n    /**\r\n     * Initialize the node.\r\n     * @param {{}} [node] - The relationships node.\r\n     * @private\r\n     * @returns {undefined}\r\n     */\n\n  }, {\n    key: \"_init\",\n    value: function _init(node) {\n      if (!node) node = {\n        name: \"Relationships\",\n        attributes: {\n          xmlns: \"http://schemas.openxmlformats.org/package/2006/relationships\"\n        },\n        children: []\n      };\n      this._node = node;\n    }\n  }]);\n\n  return Relationships;\n}();\n\nmodule.exports = Relationships;\n/*\r\nxl/_rels/workbook.xml.rels\r\n\r\n<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\r\n<Relationships xmlns=\"http://schemas.openxmlformats.org/package/2006/relationships\">\r\n    <Relationship Id=\"rId3\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles\" Target=\"styles.xml\"/>\r\n    <Relationship Id=\"rId2\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme\" Target=\"theme/theme1.xml\"/>\r\n    <Relationship Id=\"rId1\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet\" Target=\"worksheets/sheet1.xml\"/>\r\n    <Relationship Id=\"rId5\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/calcChain\" Target=\"calcChain.xml\"/>\r\n    <Relationship Id=\"rId4\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/sharedStrings\" Target=\"sharedStrings.xml\"/>\r\n</Relationships>\r\n*/","'use strict';\n\nvar Buffer = require('safe-buffer').Buffer;\n\nvar Transform = require('stream').Transform;\n\nvar inherits = require('inherits');\n\nfunction throwIfNotStringOrBuffer(val, prefix) {\n  if (!Buffer.isBuffer(val) && typeof val !== 'string') {\n    throw new TypeError(prefix + ' must be a string or a buffer');\n  }\n}\n\nfunction HashBase(blockSize) {\n  Transform.call(this);\n  this._block = Buffer.allocUnsafe(blockSize);\n  this._blockSize = blockSize;\n  this._blockOffset = 0;\n  this._length = [0, 0, 0, 0];\n  this._finalized = false;\n}\n\ninherits(HashBase, Transform);\n\nHashBase.prototype._transform = function (chunk, encoding, callback) {\n  var error = null;\n\n  try {\n    this.update(chunk, encoding);\n  } catch (err) {\n    error = err;\n  }\n\n  callback(error);\n};\n\nHashBase.prototype._flush = function (callback) {\n  var error = null;\n\n  try {\n    this.push(this.digest());\n  } catch (err) {\n    error = err;\n  }\n\n  callback(error);\n};\n\nHashBase.prototype.update = function (data, encoding) {\n  throwIfNotStringOrBuffer(data, 'Data');\n  if (this._finalized) throw new Error('Digest already called');\n  if (!Buffer.isBuffer(data)) data = Buffer.from(data, encoding); // consume data\n\n  var block = this._block;\n  var offset = 0;\n\n  while (this._blockOffset + data.length - offset >= this._blockSize) {\n    for (var i = this._blockOffset; i < this._blockSize;) {\n      block[i++] = data[offset++];\n    }\n\n    this._update();\n\n    this._blockOffset = 0;\n  }\n\n  while (offset < data.length) {\n    block[this._blockOffset++] = data[offset++];\n  } // update length\n\n\n  for (var j = 0, carry = data.length * 8; carry > 0; ++j) {\n    this._length[j] += carry;\n    carry = this._length[j] / 0x0100000000 | 0;\n    if (carry > 0) this._length[j] -= 0x0100000000 * carry;\n  }\n\n  return this;\n};\n\nHashBase.prototype._update = function () {\n  throw new Error('_update is not implemented');\n};\n\nHashBase.prototype.digest = function (encoding) {\n  if (this._finalized) throw new Error('Digest already called');\n  this._finalized = true;\n\n  var digest = this._digest();\n\n  if (encoding !== undefined) digest = digest.toString(encoding); // reset state\n\n  this._block.fill(0);\n\n  this._blockOffset = 0;\n\n  for (var i = 0; i < 4; ++i) {\n    this._length[i] = 0;\n  }\n\n  return digest;\n};\n\nHashBase.prototype._digest = function () {\n  throw new Error('_digest is not implemented');\n};\n\nmodule.exports = HashBase;","/**\n * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined\n * in FIPS 180-2\n * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.\n * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet\n *\n */\nvar inherits = require('inherits');\n\nvar Hash = require('./hash');\n\nvar Buffer = require('safe-buffer').Buffer;\n\nvar K = [0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5, 0x3956C25B, 0x59F111F1, 0x923F82A4, 0xAB1C5ED5, 0xD807AA98, 0x12835B01, 0x243185BE, 0x550C7DC3, 0x72BE5D74, 0x80DEB1FE, 0x9BDC06A7, 0xC19BF174, 0xE49B69C1, 0xEFBE4786, 0x0FC19DC6, 0x240CA1CC, 0x2DE92C6F, 0x4A7484AA, 0x5CB0A9DC, 0x76F988DA, 0x983E5152, 0xA831C66D, 0xB00327C8, 0xBF597FC7, 0xC6E00BF3, 0xD5A79147, 0x06CA6351, 0x14292967, 0x27B70A85, 0x2E1B2138, 0x4D2C6DFC, 0x53380D13, 0x650A7354, 0x766A0ABB, 0x81C2C92E, 0x92722C85, 0xA2BFE8A1, 0xA81A664B, 0xC24B8B70, 0xC76C51A3, 0xD192E819, 0xD6990624, 0xF40E3585, 0x106AA070, 0x19A4C116, 0x1E376C08, 0x2748774C, 0x34B0BCB5, 0x391C0CB3, 0x4ED8AA4A, 0x5B9CCA4F, 0x682E6FF3, 0x748F82EE, 0x78A5636F, 0x84C87814, 0x8CC70208, 0x90BEFFFA, 0xA4506CEB, 0xBEF9A3F7, 0xC67178F2];\nvar W = new Array(64);\n\nfunction Sha256() {\n  this.init();\n  this._w = W; // new Array(64)\n\n  Hash.call(this, 64, 56);\n}\n\ninherits(Sha256, Hash);\n\nSha256.prototype.init = function () {\n  this._a = 0x6a09e667;\n  this._b = 0xbb67ae85;\n  this._c = 0x3c6ef372;\n  this._d = 0xa54ff53a;\n  this._e = 0x510e527f;\n  this._f = 0x9b05688c;\n  this._g = 0x1f83d9ab;\n  this._h = 0x5be0cd19;\n  return this;\n};\n\nfunction ch(x, y, z) {\n  return z ^ x & (y ^ z);\n}\n\nfunction maj(x, y, z) {\n  return x & y | z & (x | y);\n}\n\nfunction sigma0(x) {\n  return (x >>> 2 | x << 30) ^ (x >>> 13 | x << 19) ^ (x >>> 22 | x << 10);\n}\n\nfunction sigma1(x) {\n  return (x >>> 6 | x << 26) ^ (x >>> 11 | x << 21) ^ (x >>> 25 | x << 7);\n}\n\nfunction gamma0(x) {\n  return (x >>> 7 | x << 25) ^ (x >>> 18 | x << 14) ^ x >>> 3;\n}\n\nfunction gamma1(x) {\n  return (x >>> 17 | x << 15) ^ (x >>> 19 | x << 13) ^ x >>> 10;\n}\n\nSha256.prototype._update = function (M) {\n  var W = this._w;\n  var a = this._a | 0;\n  var b = this._b | 0;\n  var c = this._c | 0;\n  var d = this._d | 0;\n  var e = this._e | 0;\n  var f = this._f | 0;\n  var g = this._g | 0;\n  var h = this._h | 0;\n\n  for (var i = 0; i < 16; ++i) {\n    W[i] = M.readInt32BE(i * 4);\n  }\n\n  for (; i < 64; ++i) {\n    W[i] = gamma1(W[i - 2]) + W[i - 7] + gamma0(W[i - 15]) + W[i - 16] | 0;\n  }\n\n  for (var j = 0; j < 64; ++j) {\n    var T1 = h + sigma1(e) + ch(e, f, g) + K[j] + W[j] | 0;\n    var T2 = sigma0(a) + maj(a, b, c) | 0;\n    h = g;\n    g = f;\n    f = e;\n    e = d + T1 | 0;\n    d = c;\n    c = b;\n    b = a;\n    a = T1 + T2 | 0;\n  }\n\n  this._a = a + this._a | 0;\n  this._b = b + this._b | 0;\n  this._c = c + this._c | 0;\n  this._d = d + this._d | 0;\n  this._e = e + this._e | 0;\n  this._f = f + this._f | 0;\n  this._g = g + this._g | 0;\n  this._h = h + this._h | 0;\n};\n\nSha256.prototype._hash = function () {\n  var H = Buffer.allocUnsafe(32);\n  H.writeInt32BE(this._a, 0);\n  H.writeInt32BE(this._b, 4);\n  H.writeInt32BE(this._c, 8);\n  H.writeInt32BE(this._d, 12);\n  H.writeInt32BE(this._e, 16);\n  H.writeInt32BE(this._f, 20);\n  H.writeInt32BE(this._g, 24);\n  H.writeInt32BE(this._h, 28);\n  return H;\n};\n\nmodule.exports = Sha256;","var inherits = require('inherits');\n\nvar Hash = require('./hash');\n\nvar Buffer = require('safe-buffer').Buffer;\n\nvar K = [0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd, 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc, 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019, 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118, 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe, 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2, 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1, 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694, 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3, 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65, 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483, 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5, 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210, 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4, 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725, 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70, 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926, 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df, 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8, 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b, 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001, 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30, 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910, 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8, 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53, 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8, 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb, 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3, 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60, 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec, 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9, 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b, 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207, 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178, 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6, 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b, 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493, 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c, 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a, 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817];\nvar W = new Array(160);\n\nfunction Sha512() {\n  this.init();\n  this._w = W;\n  Hash.call(this, 128, 112);\n}\n\ninherits(Sha512, Hash);\n\nSha512.prototype.init = function () {\n  this._ah = 0x6a09e667;\n  this._bh = 0xbb67ae85;\n  this._ch = 0x3c6ef372;\n  this._dh = 0xa54ff53a;\n  this._eh = 0x510e527f;\n  this._fh = 0x9b05688c;\n  this._gh = 0x1f83d9ab;\n  this._hh = 0x5be0cd19;\n  this._al = 0xf3bcc908;\n  this._bl = 0x84caa73b;\n  this._cl = 0xfe94f82b;\n  this._dl = 0x5f1d36f1;\n  this._el = 0xade682d1;\n  this._fl = 0x2b3e6c1f;\n  this._gl = 0xfb41bd6b;\n  this._hl = 0x137e2179;\n  return this;\n};\n\nfunction Ch(x, y, z) {\n  return z ^ x & (y ^ z);\n}\n\nfunction maj(x, y, z) {\n  return x & y | z & (x | y);\n}\n\nfunction sigma0(x, xl) {\n  return (x >>> 28 | xl << 4) ^ (xl >>> 2 | x << 30) ^ (xl >>> 7 | x << 25);\n}\n\nfunction sigma1(x, xl) {\n  return (x >>> 14 | xl << 18) ^ (x >>> 18 | xl << 14) ^ (xl >>> 9 | x << 23);\n}\n\nfunction Gamma0(x, xl) {\n  return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ x >>> 7;\n}\n\nfunction Gamma0l(x, xl) {\n  return (x >>> 1 | xl << 31) ^ (x >>> 8 | xl << 24) ^ (x >>> 7 | xl << 25);\n}\n\nfunction Gamma1(x, xl) {\n  return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ x >>> 6;\n}\n\nfunction Gamma1l(x, xl) {\n  return (x >>> 19 | xl << 13) ^ (xl >>> 29 | x << 3) ^ (x >>> 6 | xl << 26);\n}\n\nfunction getCarry(a, b) {\n  return a >>> 0 < b >>> 0 ? 1 : 0;\n}\n\nSha512.prototype._update = function (M) {\n  var W = this._w;\n  var ah = this._ah | 0;\n  var bh = this._bh | 0;\n  var ch = this._ch | 0;\n  var dh = this._dh | 0;\n  var eh = this._eh | 0;\n  var fh = this._fh | 0;\n  var gh = this._gh | 0;\n  var hh = this._hh | 0;\n  var al = this._al | 0;\n  var bl = this._bl | 0;\n  var cl = this._cl | 0;\n  var dl = this._dl | 0;\n  var el = this._el | 0;\n  var fl = this._fl | 0;\n  var gl = this._gl | 0;\n  var hl = this._hl | 0;\n\n  for (var i = 0; i < 32; i += 2) {\n    W[i] = M.readInt32BE(i * 4);\n    W[i + 1] = M.readInt32BE(i * 4 + 4);\n  }\n\n  for (; i < 160; i += 2) {\n    var xh = W[i - 15 * 2];\n    var xl = W[i - 15 * 2 + 1];\n    var gamma0 = Gamma0(xh, xl);\n    var gamma0l = Gamma0l(xl, xh);\n    xh = W[i - 2 * 2];\n    xl = W[i - 2 * 2 + 1];\n    var gamma1 = Gamma1(xh, xl);\n    var gamma1l = Gamma1l(xl, xh); // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]\n\n    var Wi7h = W[i - 7 * 2];\n    var Wi7l = W[i - 7 * 2 + 1];\n    var Wi16h = W[i - 16 * 2];\n    var Wi16l = W[i - 16 * 2 + 1];\n    var Wil = gamma0l + Wi7l | 0;\n    var Wih = gamma0 + Wi7h + getCarry(Wil, gamma0l) | 0;\n    Wil = Wil + gamma1l | 0;\n    Wih = Wih + gamma1 + getCarry(Wil, gamma1l) | 0;\n    Wil = Wil + Wi16l | 0;\n    Wih = Wih + Wi16h + getCarry(Wil, Wi16l) | 0;\n    W[i] = Wih;\n    W[i + 1] = Wil;\n  }\n\n  for (var j = 0; j < 160; j += 2) {\n    Wih = W[j];\n    Wil = W[j + 1];\n    var majh = maj(ah, bh, ch);\n    var majl = maj(al, bl, cl);\n    var sigma0h = sigma0(ah, al);\n    var sigma0l = sigma0(al, ah);\n    var sigma1h = sigma1(eh, el);\n    var sigma1l = sigma1(el, eh); // t1 = h + sigma1 + ch + K[j] + W[j]\n\n    var Kih = K[j];\n    var Kil = K[j + 1];\n    var chh = Ch(eh, fh, gh);\n    var chl = Ch(el, fl, gl);\n    var t1l = hl + sigma1l | 0;\n    var t1h = hh + sigma1h + getCarry(t1l, hl) | 0;\n    t1l = t1l + chl | 0;\n    t1h = t1h + chh + getCarry(t1l, chl) | 0;\n    t1l = t1l + Kil | 0;\n    t1h = t1h + Kih + getCarry(t1l, Kil) | 0;\n    t1l = t1l + Wil | 0;\n    t1h = t1h + Wih + getCarry(t1l, Wil) | 0; // t2 = sigma0 + maj\n\n    var t2l = sigma0l + majl | 0;\n    var t2h = sigma0h + majh + getCarry(t2l, sigma0l) | 0;\n    hh = gh;\n    hl = gl;\n    gh = fh;\n    gl = fl;\n    fh = eh;\n    fl = el;\n    el = dl + t1l | 0;\n    eh = dh + t1h + getCarry(el, dl) | 0;\n    dh = ch;\n    dl = cl;\n    ch = bh;\n    cl = bl;\n    bh = ah;\n    bl = al;\n    al = t1l + t2l | 0;\n    ah = t1h + t2h + getCarry(al, t1l) | 0;\n  }\n\n  this._al = this._al + al | 0;\n  this._bl = this._bl + bl | 0;\n  this._cl = this._cl + cl | 0;\n  this._dl = this._dl + dl | 0;\n  this._el = this._el + el | 0;\n  this._fl = this._fl + fl | 0;\n  this._gl = this._gl + gl | 0;\n  this._hl = this._hl + hl | 0;\n  this._ah = this._ah + ah + getCarry(this._al, al) | 0;\n  this._bh = this._bh + bh + getCarry(this._bl, bl) | 0;\n  this._ch = this._ch + ch + getCarry(this._cl, cl) | 0;\n  this._dh = this._dh + dh + getCarry(this._dl, dl) | 0;\n  this._eh = this._eh + eh + getCarry(this._el, el) | 0;\n  this._fh = this._fh + fh + getCarry(this._fl, fl) | 0;\n  this._gh = this._gh + gh + getCarry(this._gl, gl) | 0;\n  this._hh = this._hh + hh + getCarry(this._hl, hl) | 0;\n};\n\nSha512.prototype._hash = function () {\n  var H = Buffer.allocUnsafe(64);\n\n  function writeInt64BE(h, l, offset) {\n    H.writeInt32BE(h, offset);\n    H.writeInt32BE(l, offset + 4);\n  }\n\n  writeInt64BE(this._ah, this._al, 0);\n  writeInt64BE(this._bh, this._bl, 8);\n  writeInt64BE(this._ch, this._cl, 16);\n  writeInt64BE(this._dh, this._dl, 24);\n  writeInt64BE(this._eh, this._el, 32);\n  writeInt64BE(this._fh, this._fl, 40);\n  writeInt64BE(this._gh, this._gl, 48);\n  writeInt64BE(this._hh, this._hl, 56);\n  return H;\n};\n\nmodule.exports = Sha512;","'use strict';\n\nvar inherits = require('inherits');\n\nvar Legacy = require('./legacy');\n\nvar Base = require('cipher-base');\n\nvar Buffer = require('safe-buffer').Buffer;\n\nvar md5 = require('create-hash/md5');\n\nvar RIPEMD160 = require('ripemd160');\n\nvar sha = require('sha.js');\n\nvar ZEROS = Buffer.alloc(128);\n\nfunction Hmac(alg, key) {\n  Base.call(this, 'digest');\n\n  if (typeof key === 'string') {\n    key = Buffer.from(key);\n  }\n\n  var blocksize = alg === 'sha512' || alg === 'sha384' ? 128 : 64;\n  this._alg = alg;\n  this._key = key;\n\n  if (key.length > blocksize) {\n    var hash = alg === 'rmd160' ? new RIPEMD160() : sha(alg);\n    key = hash.update(key).digest();\n  } else if (key.length < blocksize) {\n    key = Buffer.concat([key, ZEROS], blocksize);\n  }\n\n  var ipad = this._ipad = Buffer.allocUnsafe(blocksize);\n  var opad = this._opad = Buffer.allocUnsafe(blocksize);\n\n  for (var i = 0; i < blocksize; i++) {\n    ipad[i] = key[i] ^ 0x36;\n    opad[i] = key[i] ^ 0x5C;\n  }\n\n  this._hash = alg === 'rmd160' ? new RIPEMD160() : sha(alg);\n\n  this._hash.update(ipad);\n}\n\ninherits(Hmac, Base);\n\nHmac.prototype._update = function (data) {\n  this._hash.update(data);\n};\n\nHmac.prototype._final = function () {\n  var h = this._hash.digest();\n\n  var hash = this._alg === 'rmd160' ? new RIPEMD160() : sha(this._alg);\n  return hash.update(this._opad).update(h).digest();\n};\n\nmodule.exports = function createHmac(alg, key) {\n  alg = alg.toLowerCase();\n\n  if (alg === 'rmd160' || alg === 'ripemd160') {\n    return new Hmac('rmd160', key);\n  }\n\n  if (alg === 'md5') {\n    return new Legacy(md5, key);\n  }\n\n  return new Hmac(alg, key);\n};","var MD5 = require('md5.js');\n\nmodule.exports = function (buffer) {\n  return new MD5().update(buffer).digest();\n};","exports.pbkdf2 = require('./lib/async');\nexports.pbkdf2Sync = require('./lib/sync');","var MAX_ALLOC = Math.pow(2, 30) - 1; // default in iojs\n\nfunction checkBuffer(buf, name) {\n  if (typeof buf !== 'string' && !Buffer.isBuffer(buf)) {\n    throw new TypeError(name + ' must be a buffer or string');\n  }\n}\n\nmodule.exports = function (password, salt, iterations, keylen) {\n  checkBuffer(password, 'Password');\n  checkBuffer(salt, 'Salt');\n\n  if (typeof iterations !== 'number') {\n    throw new TypeError('Iterations not a number');\n  }\n\n  if (iterations < 0) {\n    throw new TypeError('Bad iterations');\n  }\n\n  if (typeof keylen !== 'number') {\n    throw new TypeError('Key length not a number');\n  }\n\n  if (keylen < 0 || keylen > MAX_ALLOC || keylen !== keylen) {\n    /* eslint no-self-compare: 0 */\n    throw new TypeError('Bad key length');\n  }\n};","var defaultEncoding;\n/* istanbul ignore next */\n\nif (process.browser) {\n  defaultEncoding = 'utf-8';\n} else {\n  var pVersionMajor = parseInt(process.version.split('.')[0].slice(1), 10);\n  defaultEncoding = pVersionMajor >= 6 ? 'utf-8' : 'binary';\n}\n\nmodule.exports = defaultEncoding;","var md5 = require('create-hash/md5');\n\nvar RIPEMD160 = require('ripemd160');\n\nvar sha = require('sha.js');\n\nvar checkParameters = require('./precondition');\n\nvar defaultEncoding = require('./default-encoding');\n\nvar Buffer = require('safe-buffer').Buffer;\n\nvar ZEROS = Buffer.alloc(128);\nvar sizes = {\n  md5: 16,\n  sha1: 20,\n  sha224: 28,\n  sha256: 32,\n  sha384: 48,\n  sha512: 64,\n  rmd160: 20,\n  ripemd160: 20\n};\n\nfunction Hmac(alg, key, saltLen) {\n  var hash = getDigest(alg);\n  var blocksize = alg === 'sha512' || alg === 'sha384' ? 128 : 64;\n\n  if (key.length > blocksize) {\n    key = hash(key);\n  } else if (key.length < blocksize) {\n    key = Buffer.concat([key, ZEROS], blocksize);\n  }\n\n  var ipad = Buffer.allocUnsafe(blocksize + sizes[alg]);\n  var opad = Buffer.allocUnsafe(blocksize + sizes[alg]);\n\n  for (var i = 0; i < blocksize; i++) {\n    ipad[i] = key[i] ^ 0x36;\n    opad[i] = key[i] ^ 0x5C;\n  }\n\n  var ipad1 = Buffer.allocUnsafe(blocksize + saltLen + 4);\n  ipad.copy(ipad1, 0, 0, blocksize);\n  this.ipad1 = ipad1;\n  this.ipad2 = ipad;\n  this.opad = opad;\n  this.alg = alg;\n  this.blocksize = blocksize;\n  this.hash = hash;\n  this.size = sizes[alg];\n}\n\nHmac.prototype.run = function (data, ipad) {\n  data.copy(ipad, this.blocksize);\n  var h = this.hash(ipad);\n  h.copy(this.opad, this.blocksize);\n  return this.hash(this.opad);\n};\n\nfunction getDigest(alg) {\n  function shaFunc(data) {\n    return sha(alg).update(data).digest();\n  }\n\n  function rmd160Func(data) {\n    return new RIPEMD160().update(data).digest();\n  }\n\n  if (alg === 'rmd160' || alg === 'ripemd160') return rmd160Func;\n  if (alg === 'md5') return md5;\n  return shaFunc;\n}\n\nfunction pbkdf2(password, salt, iterations, keylen, digest) {\n  checkParameters(password, salt, iterations, keylen);\n  if (!Buffer.isBuffer(password)) password = Buffer.from(password, defaultEncoding);\n  if (!Buffer.isBuffer(salt)) salt = Buffer.from(salt, defaultEncoding);\n  digest = digest || 'sha1';\n  var hmac = new Hmac(digest, password, salt.length);\n  var DK = Buffer.allocUnsafe(keylen);\n  var block1 = Buffer.allocUnsafe(salt.length + 4);\n  salt.copy(block1, 0, 0, salt.length);\n  var destPos = 0;\n  var hLen = sizes[digest];\n  var l = Math.ceil(keylen / hLen);\n\n  for (var i = 1; i <= l; i++) {\n    block1.writeUInt32BE(i, salt.length);\n    var T = hmac.run(block1, hmac.ipad1);\n    var U = T;\n\n    for (var j = 1; j < iterations; j++) {\n      U = hmac.run(U, hmac.ipad2);\n\n      for (var k = 0; k < hLen; k++) {\n        T[k] ^= U[k];\n      }\n    }\n\n    T.copy(DK, destPos);\n    destPos += hLen;\n  }\n\n  return DK;\n}\n\nmodule.exports = pbkdf2;","var xor = require('buffer-xor');\n\nvar Buffer = require('safe-buffer').Buffer;\n\nvar incr32 = require('../incr32');\n\nfunction getBlock(self) {\n  var out = self._cipher.encryptBlockRaw(self._prev);\n\n  incr32(self._prev);\n  return out;\n}\n\nvar blockSize = 16;\n\nexports.encrypt = function (self, chunk) {\n  var chunkNum = Math.ceil(chunk.length / blockSize);\n  var start = self._cache.length;\n  self._cache = Buffer.concat([self._cache, Buffer.allocUnsafe(chunkNum * blockSize)]);\n\n  for (var i = 0; i < chunkNum; i++) {\n    var out = getBlock(self);\n    var offset = start + i * blockSize;\n\n    self._cache.writeUInt32BE(out[0], offset + 0);\n\n    self._cache.writeUInt32BE(out[1], offset + 4);\n\n    self._cache.writeUInt32BE(out[2], offset + 8);\n\n    self._cache.writeUInt32BE(out[3], offset + 12);\n  }\n\n  var pad = self._cache.slice(0, chunk.length);\n\n  self._cache = self._cache.slice(chunk.length);\n  return xor(chunk, pad);\n};","function incr32(iv) {\n  var len = iv.length;\n  var item;\n\n  while (len--) {\n    item = iv.readUInt8(len);\n\n    if (item === 255) {\n      iv.writeUInt8(0, len);\n    } else {\n      item++;\n      iv.writeUInt8(item, len);\n      break;\n    }\n  }\n}\n\nmodule.exports = incr32;","var aes = require('./aes');\n\nvar Buffer = require('safe-buffer').Buffer;\n\nvar Transform = require('cipher-base');\n\nvar inherits = require('inherits');\n\nvar GHASH = require('./ghash');\n\nvar xor = require('buffer-xor');\n\nvar incr32 = require('./incr32');\n\nfunction xorTest(a, b) {\n  var out = 0;\n  if (a.length !== b.length) out++;\n  var len = Math.min(a.length, b.length);\n\n  for (var i = 0; i < len; ++i) {\n    out += a[i] ^ b[i];\n  }\n\n  return out;\n}\n\nfunction calcIv(self, iv, ck) {\n  if (iv.length === 12) {\n    self._finID = Buffer.concat([iv, Buffer.from([0, 0, 0, 1])]);\n    return Buffer.concat([iv, Buffer.from([0, 0, 0, 2])]);\n  }\n\n  var ghash = new GHASH(ck);\n  var len = iv.length;\n  var toPad = len % 16;\n  ghash.update(iv);\n\n  if (toPad) {\n    toPad = 16 - toPad;\n    ghash.update(Buffer.alloc(toPad, 0));\n  }\n\n  ghash.update(Buffer.alloc(8, 0));\n  var ivBits = len * 8;\n  var tail = Buffer.alloc(8);\n  tail.writeUIntBE(ivBits, 0, 8);\n  ghash.update(tail);\n  self._finID = ghash.state;\n  var out = Buffer.from(self._finID);\n  incr32(out);\n  return out;\n}\n\nfunction StreamCipher(mode, key, iv, decrypt) {\n  Transform.call(this);\n  var h = Buffer.alloc(4, 0);\n  this._cipher = new aes.AES(key);\n\n  var ck = this._cipher.encryptBlock(h);\n\n  this._ghash = new GHASH(ck);\n  iv = calcIv(this, iv, ck);\n  this._prev = Buffer.from(iv);\n  this._cache = Buffer.allocUnsafe(0);\n  this._secCache = Buffer.allocUnsafe(0);\n  this._decrypt = decrypt;\n  this._alen = 0;\n  this._len = 0;\n  this._mode = mode;\n  this._authTag = null;\n  this._called = false;\n}\n\ninherits(StreamCipher, Transform);\n\nStreamCipher.prototype._update = function (chunk) {\n  if (!this._called && this._alen) {\n    var rump = 16 - this._alen % 16;\n\n    if (rump < 16) {\n      rump = Buffer.alloc(rump, 0);\n\n      this._ghash.update(rump);\n    }\n  }\n\n  this._called = true;\n\n  var out = this._mode.encrypt(this, chunk);\n\n  if (this._decrypt) {\n    this._ghash.update(chunk);\n  } else {\n    this._ghash.update(out);\n  }\n\n  this._len += chunk.length;\n  return out;\n};\n\nStreamCipher.prototype._final = function () {\n  if (this._decrypt && !this._authTag) throw new Error('Unsupported state or unable to authenticate data');\n  var tag = xor(this._ghash[\"final\"](this._alen * 8, this._len * 8), this._cipher.encryptBlock(this._finID));\n  if (this._decrypt && xorTest(tag, this._authTag)) throw new Error('Unsupported state or unable to authenticate data');\n  this._authTag = tag;\n\n  this._cipher.scrub();\n};\n\nStreamCipher.prototype.getAuthTag = function getAuthTag() {\n  if (this._decrypt || !Buffer.isBuffer(this._authTag)) throw new Error('Attempting to get auth tag in unsupported state');\n  return this._authTag;\n};\n\nStreamCipher.prototype.setAuthTag = function setAuthTag(tag) {\n  if (!this._decrypt) throw new Error('Attempting to set auth tag in unsupported state');\n  this._authTag = tag;\n};\n\nStreamCipher.prototype.setAAD = function setAAD(buf) {\n  if (this._called) throw new Error('Attempting to set AAD in unsupported state');\n\n  this._ghash.update(buf);\n\n  this._alen += buf.length;\n};\n\nmodule.exports = StreamCipher;","var aes = require('./aes');\n\nvar Buffer = require('safe-buffer').Buffer;\n\nvar Transform = require('cipher-base');\n\nvar inherits = require('inherits');\n\nfunction StreamCipher(mode, key, iv, decrypt) {\n  Transform.call(this);\n  this._cipher = new aes.AES(key);\n  this._prev = Buffer.from(iv);\n  this._cache = Buffer.allocUnsafe(0);\n  this._secCache = Buffer.allocUnsafe(0);\n  this._decrypt = decrypt;\n  this._mode = mode;\n}\n\ninherits(StreamCipher, Transform);\n\nStreamCipher.prototype._update = function (chunk) {\n  return this._mode.encrypt(this, chunk, this._decrypt);\n};\n\nStreamCipher.prototype._final = function () {\n  this._cipher.scrub();\n};\n\nmodule.exports = StreamCipher;","var randomBytes = require('randombytes');\n\nmodule.exports = findPrime;\nfindPrime.simpleSieve = simpleSieve;\nfindPrime.fermatTest = fermatTest;\n\nvar BN = require('bn.js');\n\nvar TWENTYFOUR = new BN(24);\n\nvar MillerRabin = require('miller-rabin');\n\nvar millerRabin = new MillerRabin();\nvar ONE = new BN(1);\nvar TWO = new BN(2);\nvar FIVE = new BN(5);\nvar SIXTEEN = new BN(16);\nvar EIGHT = new BN(8);\nvar TEN = new BN(10);\nvar THREE = new BN(3);\nvar SEVEN = new BN(7);\nvar ELEVEN = new BN(11);\nvar FOUR = new BN(4);\nvar TWELVE = new BN(12);\nvar primes = null;\n\nfunction _getPrimes() {\n  if (primes !== null) return primes;\n  var limit = 0x100000;\n  var res = [];\n  res[0] = 2;\n\n  for (var i = 1, k = 3; k < limit; k += 2) {\n    var sqrt = Math.ceil(Math.sqrt(k));\n\n    for (var j = 0; j < i && res[j] <= sqrt; j++) {\n      if (k % res[j] === 0) break;\n    }\n\n    if (i !== j && res[j] <= sqrt) continue;\n    res[i++] = k;\n  }\n\n  primes = res;\n  return res;\n}\n\nfunction simpleSieve(p) {\n  var primes = _getPrimes();\n\n  for (var i = 0; i < primes.length; i++) {\n    if (p.modn(primes[i]) === 0) {\n      if (p.cmpn(primes[i]) === 0) {\n        return true;\n      } else {\n        return false;\n      }\n    }\n  }\n\n  return true;\n}\n\nfunction fermatTest(p) {\n  var red = BN.mont(p);\n  return TWO.toRed(red).redPow(p.subn(1)).fromRed().cmpn(1) === 0;\n}\n\nfunction findPrime(bits, gen) {\n  if (bits < 16) {\n    // this is what openssl does\n    if (gen === 2 || gen === 5) {\n      return new BN([0x8c, 0x7b]);\n    } else {\n      return new BN([0x8c, 0x27]);\n    }\n  }\n\n  gen = new BN(gen);\n  var num, n2;\n\n  while (true) {\n    num = new BN(randomBytes(Math.ceil(bits / 8)));\n\n    while (num.bitLength() > bits) {\n      num.ishrn(1);\n    }\n\n    if (num.isEven()) {\n      num.iadd(ONE);\n    }\n\n    if (!num.testn(1)) {\n      num.iadd(TWO);\n    }\n\n    if (!gen.cmp(TWO)) {\n      while (num.mod(TWENTYFOUR).cmp(ELEVEN)) {\n        num.iadd(FOUR);\n      }\n    } else if (!gen.cmp(FIVE)) {\n      while (num.mod(TEN).cmp(THREE)) {\n        num.iadd(FOUR);\n      }\n    }\n\n    n2 = num.shrn(1);\n\n    if (simpleSieve(n2) && simpleSieve(num) && fermatTest(n2) && fermatTest(num) && millerRabin.test(n2) && millerRabin.test(num)) {\n      return num;\n    }\n  }\n}","var bn = require('bn.js');\n\nvar brorand = require('brorand');\n\nfunction MillerRabin(rand) {\n  this.rand = rand || new brorand.Rand();\n}\n\nmodule.exports = MillerRabin;\n\nMillerRabin.create = function create(rand) {\n  return new MillerRabin(rand);\n};\n\nMillerRabin.prototype._randbelow = function _randbelow(n) {\n  var len = n.bitLength();\n  var min_bytes = Math.ceil(len / 8); // Generage random bytes until a number less than n is found.\n  // This ensures that 0..n-1 have an equal probability of being selected.\n\n  do {\n    var a = new bn(this.rand.generate(min_bytes));\n  } while (a.cmp(n) >= 0);\n\n  return a;\n};\n\nMillerRabin.prototype._randrange = function _randrange(start, stop) {\n  // Generate a random number greater than or equal to start and less than stop.\n  var size = stop.sub(start);\n  return start.add(this._randbelow(size));\n};\n\nMillerRabin.prototype.test = function test(n, k, cb) {\n  var len = n.bitLength();\n  var red = bn.mont(n);\n  var rone = new bn(1).toRed(red);\n  if (!k) k = Math.max(1, len / 48 | 0); // Find d and s, (n - 1) = (2 ^ s) * d;\n\n  var n1 = n.subn(1);\n\n  for (var s = 0; !n1.testn(s); s++) {}\n\n  var d = n.shrn(s);\n  var rn1 = n1.toRed(red);\n  var prime = true;\n\n  for (; k > 0; k--) {\n    var a = this._randrange(new bn(2), n1);\n\n    if (cb) cb(a);\n    var x = a.toRed(red).redPow(d);\n    if (x.cmp(rone) === 0 || x.cmp(rn1) === 0) continue;\n\n    for (var i = 1; i < s; i++) {\n      x = x.redSqr();\n      if (x.cmp(rone) === 0) return false;\n      if (x.cmp(rn1) === 0) break;\n    }\n\n    if (i === s) return false;\n  }\n\n  return prime;\n};\n\nMillerRabin.prototype.getDivisor = function getDivisor(n, k) {\n  var len = n.bitLength();\n  var red = bn.mont(n);\n  var rone = new bn(1).toRed(red);\n  if (!k) k = Math.max(1, len / 48 | 0); // Find d and s, (n - 1) = (2 ^ s) * d;\n\n  var n1 = n.subn(1);\n\n  for (var s = 0; !n1.testn(s); s++) {}\n\n  var d = n.shrn(s);\n  var rn1 = n1.toRed(red);\n\n  for (; k > 0; k--) {\n    var a = this._randrange(new bn(2), n1);\n\n    var g = n.gcd(a);\n    if (g.cmpn(1) !== 0) return g;\n    var x = a.toRed(red).redPow(d);\n    if (x.cmp(rone) === 0 || x.cmp(rn1) === 0) continue;\n\n    for (var i = 1; i < s; i++) {\n      x = x.redSqr();\n      if (x.cmp(rone) === 0) return x.fromRed().subn(1).gcd(n);\n      if (x.cmp(rn1) === 0) break;\n    }\n\n    if (i === s) {\n      x = x.redSqr();\n      return x.fromRed().subn(1).gcd(n);\n    }\n  }\n\n  return false;\n};","'use strict';\n\nvar utils = exports;\n\nfunction toArray(msg, enc) {\n  if (Array.isArray(msg)) return msg.slice();\n  if (!msg) return [];\n  var res = [];\n\n  if (typeof msg !== 'string') {\n    for (var i = 0; i < msg.length; i++) {\n      res[i] = msg[i] | 0;\n    }\n\n    return res;\n  }\n\n  if (enc === 'hex') {\n    msg = msg.replace(/[^a-z0-9]+/ig, '');\n    if (msg.length % 2 !== 0) msg = '0' + msg;\n\n    for (var i = 0; i < msg.length; i += 2) {\n      res.push(parseInt(msg[i] + msg[i + 1], 16));\n    }\n  } else {\n    for (var i = 0; i < msg.length; i++) {\n      var c = msg.charCodeAt(i);\n      var hi = c >> 8;\n      var lo = c & 0xff;\n      if (hi) res.push(hi, lo);else res.push(lo);\n    }\n  }\n\n  return res;\n}\n\nutils.toArray = toArray;\n\nfunction zero2(word) {\n  if (word.length === 1) return '0' + word;else return word;\n}\n\nutils.zero2 = zero2;\n\nfunction toHex(msg) {\n  var res = '';\n\n  for (var i = 0; i < msg.length; i++) {\n    res += zero2(msg[i].toString(16));\n  }\n\n  return res;\n}\n\nutils.toHex = toHex;\n\nutils.encode = function encode(arr, enc) {\n  if (enc === 'hex') return toHex(arr);else return arr;\n};","'use strict';\n\nvar curve = exports;\ncurve.base = require('./base');\ncurve[\"short\"] = require('./short');\ncurve.mont = require('./mont');\ncurve.edwards = require('./edwards');","'use strict';\n\nvar utils = require('../utils');\n\nvar rotr32 = utils.rotr32;\n\nfunction ft_1(s, x, y, z) {\n  if (s === 0) return ch32(x, y, z);\n  if (s === 1 || s === 3) return p32(x, y, z);\n  if (s === 2) return maj32(x, y, z);\n}\n\nexports.ft_1 = ft_1;\n\nfunction ch32(x, y, z) {\n  return x & y ^ ~x & z;\n}\n\nexports.ch32 = ch32;\n\nfunction maj32(x, y, z) {\n  return x & y ^ x & z ^ y & z;\n}\n\nexports.maj32 = maj32;\n\nfunction p32(x, y, z) {\n  return x ^ y ^ z;\n}\n\nexports.p32 = p32;\n\nfunction s0_256(x) {\n  return rotr32(x, 2) ^ rotr32(x, 13) ^ rotr32(x, 22);\n}\n\nexports.s0_256 = s0_256;\n\nfunction s1_256(x) {\n  return rotr32(x, 6) ^ rotr32(x, 11) ^ rotr32(x, 25);\n}\n\nexports.s1_256 = s1_256;\n\nfunction g0_256(x) {\n  return rotr32(x, 7) ^ rotr32(x, 18) ^ x >>> 3;\n}\n\nexports.g0_256 = g0_256;\n\nfunction g1_256(x) {\n  return rotr32(x, 17) ^ rotr32(x, 19) ^ x >>> 10;\n}\n\nexports.g1_256 = g1_256;","'use strict';\n\nvar utils = require('../utils');\n\nvar common = require('../common');\n\nvar shaCommon = require('./common');\n\nvar assert = require('minimalistic-assert');\n\nvar sum32 = utils.sum32;\nvar sum32_4 = utils.sum32_4;\nvar sum32_5 = utils.sum32_5;\nvar ch32 = shaCommon.ch32;\nvar maj32 = shaCommon.maj32;\nvar s0_256 = shaCommon.s0_256;\nvar s1_256 = shaCommon.s1_256;\nvar g0_256 = shaCommon.g0_256;\nvar g1_256 = shaCommon.g1_256;\nvar BlockHash = common.BlockHash;\nvar sha256_K = [0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5, 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174, 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967, 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85, 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070, 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3, 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2];\n\nfunction SHA256() {\n  if (!(this instanceof SHA256)) return new SHA256();\n  BlockHash.call(this);\n  this.h = [0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19];\n  this.k = sha256_K;\n  this.W = new Array(64);\n}\n\nutils.inherits(SHA256, BlockHash);\nmodule.exports = SHA256;\nSHA256.blockSize = 512;\nSHA256.outSize = 256;\nSHA256.hmacStrength = 192;\nSHA256.padLength = 64;\n\nSHA256.prototype._update = function _update(msg, start) {\n  var W = this.W;\n\n  for (var i = 0; i < 16; i++) {\n    W[i] = msg[start + i];\n  }\n\n  for (; i < W.length; i++) {\n    W[i] = sum32_4(g1_256(W[i - 2]), W[i - 7], g0_256(W[i - 15]), W[i - 16]);\n  }\n\n  var a = this.h[0];\n  var b = this.h[1];\n  var c = this.h[2];\n  var d = this.h[3];\n  var e = this.h[4];\n  var f = this.h[5];\n  var g = this.h[6];\n  var h = this.h[7];\n  assert(this.k.length === W.length);\n\n  for (i = 0; i < W.length; i++) {\n    var T1 = sum32_5(h, s1_256(e), ch32(e, f, g), this.k[i], W[i]);\n    var T2 = sum32(s0_256(a), maj32(a, b, c));\n    h = g;\n    g = f;\n    f = e;\n    e = sum32(d, T1);\n    d = c;\n    c = b;\n    b = a;\n    a = sum32(T1, T2);\n  }\n\n  this.h[0] = sum32(this.h[0], a);\n  this.h[1] = sum32(this.h[1], b);\n  this.h[2] = sum32(this.h[2], c);\n  this.h[3] = sum32(this.h[3], d);\n  this.h[4] = sum32(this.h[4], e);\n  this.h[5] = sum32(this.h[5], f);\n  this.h[6] = sum32(this.h[6], g);\n  this.h[7] = sum32(this.h[7], h);\n};\n\nSHA256.prototype._digest = function digest(enc) {\n  if (enc === 'hex') return utils.toHex32(this.h, 'big');else return utils.split32(this.h, 'big');\n};","'use strict';\n\nvar utils = require('../utils');\n\nvar common = require('../common');\n\nvar assert = require('minimalistic-assert');\n\nvar rotr64_hi = utils.rotr64_hi;\nvar rotr64_lo = utils.rotr64_lo;\nvar shr64_hi = utils.shr64_hi;\nvar shr64_lo = utils.shr64_lo;\nvar sum64 = utils.sum64;\nvar sum64_hi = utils.sum64_hi;\nvar sum64_lo = utils.sum64_lo;\nvar sum64_4_hi = utils.sum64_4_hi;\nvar sum64_4_lo = utils.sum64_4_lo;\nvar sum64_5_hi = utils.sum64_5_hi;\nvar sum64_5_lo = utils.sum64_5_lo;\nvar BlockHash = common.BlockHash;\nvar sha512_K = [0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd, 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc, 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019, 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118, 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe, 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2, 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1, 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694, 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3, 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65, 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483, 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5, 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210, 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4, 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725, 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70, 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926, 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df, 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8, 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b, 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001, 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30, 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910, 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8, 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53, 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8, 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb, 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3, 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60, 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec, 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9, 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b, 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207, 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178, 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6, 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b, 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493, 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c, 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a, 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817];\n\nfunction SHA512() {\n  if (!(this instanceof SHA512)) return new SHA512();\n  BlockHash.call(this);\n  this.h = [0x6a09e667, 0xf3bcc908, 0xbb67ae85, 0x84caa73b, 0x3c6ef372, 0xfe94f82b, 0xa54ff53a, 0x5f1d36f1, 0x510e527f, 0xade682d1, 0x9b05688c, 0x2b3e6c1f, 0x1f83d9ab, 0xfb41bd6b, 0x5be0cd19, 0x137e2179];\n  this.k = sha512_K;\n  this.W = new Array(160);\n}\n\nutils.inherits(SHA512, BlockHash);\nmodule.exports = SHA512;\nSHA512.blockSize = 1024;\nSHA512.outSize = 512;\nSHA512.hmacStrength = 192;\nSHA512.padLength = 128;\n\nSHA512.prototype._prepareBlock = function _prepareBlock(msg, start) {\n  var W = this.W; // 32 x 32bit words\n\n  for (var i = 0; i < 32; i++) {\n    W[i] = msg[start + i];\n  }\n\n  for (; i < W.length; i += 2) {\n    var c0_hi = g1_512_hi(W[i - 4], W[i - 3]); // i - 2\n\n    var c0_lo = g1_512_lo(W[i - 4], W[i - 3]);\n    var c1_hi = W[i - 14]; // i - 7\n\n    var c1_lo = W[i - 13];\n    var c2_hi = g0_512_hi(W[i - 30], W[i - 29]); // i - 15\n\n    var c2_lo = g0_512_lo(W[i - 30], W[i - 29]);\n    var c3_hi = W[i - 32]; // i - 16\n\n    var c3_lo = W[i - 31];\n    W[i] = sum64_4_hi(c0_hi, c0_lo, c1_hi, c1_lo, c2_hi, c2_lo, c3_hi, c3_lo);\n    W[i + 1] = sum64_4_lo(c0_hi, c0_lo, c1_hi, c1_lo, c2_hi, c2_lo, c3_hi, c3_lo);\n  }\n};\n\nSHA512.prototype._update = function _update(msg, start) {\n  this._prepareBlock(msg, start);\n\n  var W = this.W;\n  var ah = this.h[0];\n  var al = this.h[1];\n  var bh = this.h[2];\n  var bl = this.h[3];\n  var ch = this.h[4];\n  var cl = this.h[5];\n  var dh = this.h[6];\n  var dl = this.h[7];\n  var eh = this.h[8];\n  var el = this.h[9];\n  var fh = this.h[10];\n  var fl = this.h[11];\n  var gh = this.h[12];\n  var gl = this.h[13];\n  var hh = this.h[14];\n  var hl = this.h[15];\n  assert(this.k.length === W.length);\n\n  for (var i = 0; i < W.length; i += 2) {\n    var c0_hi = hh;\n    var c0_lo = hl;\n    var c1_hi = s1_512_hi(eh, el);\n    var c1_lo = s1_512_lo(eh, el);\n    var c2_hi = ch64_hi(eh, el, fh, fl, gh, gl);\n    var c2_lo = ch64_lo(eh, el, fh, fl, gh, gl);\n    var c3_hi = this.k[i];\n    var c3_lo = this.k[i + 1];\n    var c4_hi = W[i];\n    var c4_lo = W[i + 1];\n    var T1_hi = sum64_5_hi(c0_hi, c0_lo, c1_hi, c1_lo, c2_hi, c2_lo, c3_hi, c3_lo, c4_hi, c4_lo);\n    var T1_lo = sum64_5_lo(c0_hi, c0_lo, c1_hi, c1_lo, c2_hi, c2_lo, c3_hi, c3_lo, c4_hi, c4_lo);\n    c0_hi = s0_512_hi(ah, al);\n    c0_lo = s0_512_lo(ah, al);\n    c1_hi = maj64_hi(ah, al, bh, bl, ch, cl);\n    c1_lo = maj64_lo(ah, al, bh, bl, ch, cl);\n    var T2_hi = sum64_hi(c0_hi, c0_lo, c1_hi, c1_lo);\n    var T2_lo = sum64_lo(c0_hi, c0_lo, c1_hi, c1_lo);\n    hh = gh;\n    hl = gl;\n    gh = fh;\n    gl = fl;\n    fh = eh;\n    fl = el;\n    eh = sum64_hi(dh, dl, T1_hi, T1_lo);\n    el = sum64_lo(dl, dl, T1_hi, T1_lo);\n    dh = ch;\n    dl = cl;\n    ch = bh;\n    cl = bl;\n    bh = ah;\n    bl = al;\n    ah = sum64_hi(T1_hi, T1_lo, T2_hi, T2_lo);\n    al = sum64_lo(T1_hi, T1_lo, T2_hi, T2_lo);\n  }\n\n  sum64(this.h, 0, ah, al);\n  sum64(this.h, 2, bh, bl);\n  sum64(this.h, 4, ch, cl);\n  sum64(this.h, 6, dh, dl);\n  sum64(this.h, 8, eh, el);\n  sum64(this.h, 10, fh, fl);\n  sum64(this.h, 12, gh, gl);\n  sum64(this.h, 14, hh, hl);\n};\n\nSHA512.prototype._digest = function digest(enc) {\n  if (enc === 'hex') return utils.toHex32(this.h, 'big');else return utils.split32(this.h, 'big');\n};\n\nfunction ch64_hi(xh, xl, yh, yl, zh) {\n  var r = xh & yh ^ ~xh & zh;\n  if (r < 0) r += 0x100000000;\n  return r;\n}\n\nfunction ch64_lo(xh, xl, yh, yl, zh, zl) {\n  var r = xl & yl ^ ~xl & zl;\n  if (r < 0) r += 0x100000000;\n  return r;\n}\n\nfunction maj64_hi(xh, xl, yh, yl, zh) {\n  var r = xh & yh ^ xh & zh ^ yh & zh;\n  if (r < 0) r += 0x100000000;\n  return r;\n}\n\nfunction maj64_lo(xh, xl, yh, yl, zh, zl) {\n  var r = xl & yl ^ xl & zl ^ yl & zl;\n  if (r < 0) r += 0x100000000;\n  return r;\n}\n\nfunction s0_512_hi(xh, xl) {\n  var c0_hi = rotr64_hi(xh, xl, 28);\n  var c1_hi = rotr64_hi(xl, xh, 2); // 34\n\n  var c2_hi = rotr64_hi(xl, xh, 7); // 39\n\n  var r = c0_hi ^ c1_hi ^ c2_hi;\n  if (r < 0) r += 0x100000000;\n  return r;\n}\n\nfunction s0_512_lo(xh, xl) {\n  var c0_lo = rotr64_lo(xh, xl, 28);\n  var c1_lo = rotr64_lo(xl, xh, 2); // 34\n\n  var c2_lo = rotr64_lo(xl, xh, 7); // 39\n\n  var r = c0_lo ^ c1_lo ^ c2_lo;\n  if (r < 0) r += 0x100000000;\n  return r;\n}\n\nfunction s1_512_hi(xh, xl) {\n  var c0_hi = rotr64_hi(xh, xl, 14);\n  var c1_hi = rotr64_hi(xh, xl, 18);\n  var c2_hi = rotr64_hi(xl, xh, 9); // 41\n\n  var r = c0_hi ^ c1_hi ^ c2_hi;\n  if (r < 0) r += 0x100000000;\n  return r;\n}\n\nfunction s1_512_lo(xh, xl) {\n  var c0_lo = rotr64_lo(xh, xl, 14);\n  var c1_lo = rotr64_lo(xh, xl, 18);\n  var c2_lo = rotr64_lo(xl, xh, 9); // 41\n\n  var r = c0_lo ^ c1_lo ^ c2_lo;\n  if (r < 0) r += 0x100000000;\n  return r;\n}\n\nfunction g0_512_hi(xh, xl) {\n  var c0_hi = rotr64_hi(xh, xl, 1);\n  var c1_hi = rotr64_hi(xh, xl, 8);\n  var c2_hi = shr64_hi(xh, xl, 7);\n  var r = c0_hi ^ c1_hi ^ c2_hi;\n  if (r < 0) r += 0x100000000;\n  return r;\n}\n\nfunction g0_512_lo(xh, xl) {\n  var c0_lo = rotr64_lo(xh, xl, 1);\n  var c1_lo = rotr64_lo(xh, xl, 8);\n  var c2_lo = shr64_lo(xh, xl, 7);\n  var r = c0_lo ^ c1_lo ^ c2_lo;\n  if (r < 0) r += 0x100000000;\n  return r;\n}\n\nfunction g1_512_hi(xh, xl) {\n  var c0_hi = rotr64_hi(xh, xl, 19);\n  var c1_hi = rotr64_hi(xl, xh, 29); // 61\n\n  var c2_hi = shr64_hi(xh, xl, 6);\n  var r = c0_hi ^ c1_hi ^ c2_hi;\n  if (r < 0) r += 0x100000000;\n  return r;\n}\n\nfunction g1_512_lo(xh, xl) {\n  var c0_lo = rotr64_lo(xh, xl, 19);\n  var c1_lo = rotr64_lo(xl, xh, 29); // 61\n\n  var c2_lo = shr64_lo(xh, xl, 6);\n  var r = c0_lo ^ c1_lo ^ c2_lo;\n  if (r < 0) r += 0x100000000;\n  return r;\n}","function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nvar inherits = require('inherits');\n\nvar Reporter = require('../base').Reporter;\n\nvar Buffer = require('buffer').Buffer;\n\nfunction DecoderBuffer(base, options) {\n  Reporter.call(this, options);\n\n  if (!Buffer.isBuffer(base)) {\n    this.error('Input not Buffer');\n    return;\n  }\n\n  this.base = base;\n  this.offset = 0;\n  this.length = base.length;\n}\n\ninherits(DecoderBuffer, Reporter);\nexports.DecoderBuffer = DecoderBuffer;\n\nDecoderBuffer.prototype.save = function save() {\n  return {\n    offset: this.offset,\n    reporter: Reporter.prototype.save.call(this)\n  };\n};\n\nDecoderBuffer.prototype.restore = function restore(save) {\n  // Return skipped data\n  var res = new DecoderBuffer(this.base);\n  res.offset = save.offset;\n  res.length = this.offset;\n  this.offset = save.offset;\n  Reporter.prototype.restore.call(this, save.reporter);\n  return res;\n};\n\nDecoderBuffer.prototype.isEmpty = function isEmpty() {\n  return this.offset === this.length;\n};\n\nDecoderBuffer.prototype.readUInt8 = function readUInt8(fail) {\n  if (this.offset + 1 <= this.length) return this.base.readUInt8(this.offset++, true);else return this.error(fail || 'DecoderBuffer overrun');\n};\n\nDecoderBuffer.prototype.skip = function skip(bytes, fail) {\n  if (!(this.offset + bytes <= this.length)) return this.error(fail || 'DecoderBuffer overrun');\n  var res = new DecoderBuffer(this.base); // Share reporter state\n\n  res._reporterState = this._reporterState;\n  res.offset = this.offset;\n  res.length = this.offset + bytes;\n  this.offset += bytes;\n  return res;\n};\n\nDecoderBuffer.prototype.raw = function raw(save) {\n  return this.base.slice(save ? save.offset : this.offset, this.length);\n};\n\nfunction EncoderBuffer(value, reporter) {\n  if (Array.isArray(value)) {\n    this.length = 0;\n    this.value = value.map(function (item) {\n      if (!(item instanceof EncoderBuffer)) item = new EncoderBuffer(item, reporter);\n      this.length += item.length;\n      return item;\n    }, this);\n  } else if (typeof value === 'number') {\n    if (!(0 <= value && value <= 0xff)) return reporter.error('non-byte EncoderBuffer value');\n    this.value = value;\n    this.length = 1;\n  } else if (typeof value === 'string') {\n    this.value = value;\n    this.length = Buffer.byteLength(value);\n  } else if (Buffer.isBuffer(value)) {\n    this.value = value;\n    this.length = value.length;\n  } else {\n    return reporter.error('Unsupported type: ' + _typeof(value));\n  }\n}\n\nexports.EncoderBuffer = EncoderBuffer;\n\nEncoderBuffer.prototype.join = function join(out, offset) {\n  if (!out) out = new Buffer(this.length);\n  if (!offset) offset = 0;\n  if (this.length === 0) return out;\n\n  if (Array.isArray(this.value)) {\n    this.value.forEach(function (item) {\n      item.join(out, offset);\n      offset += item.length;\n    });\n  } else {\n    if (typeof this.value === 'number') out[offset] = this.value;else if (typeof this.value === 'string') out.write(this.value, offset);else if (Buffer.isBuffer(this.value)) this.value.copy(out, offset);\n    offset += this.length;\n  }\n\n  return out;\n};","var constants = exports; // Helper\n\nconstants._reverse = function reverse(map) {\n  var res = {};\n  Object.keys(map).forEach(function (key) {\n    // Convert key to integer if it is stringified\n    if ((key | 0) == key) key = key | 0;\n    var value = map[key];\n    res[value] = key;\n  });\n  return res;\n};\n\nconstants.der = require('./der');","var inherits = require('inherits');\n\nvar asn1 = require('../../asn1');\n\nvar base = asn1.base;\nvar bignum = asn1.bignum; // Import DER constants\n\nvar der = asn1.constants.der;\n\nfunction DERDecoder(entity) {\n  this.enc = 'der';\n  this.name = entity.name;\n  this.entity = entity; // Construct base tree\n\n  this.tree = new DERNode();\n\n  this.tree._init(entity.body);\n}\n\n;\nmodule.exports = DERDecoder;\n\nDERDecoder.prototype.decode = function decode(data, options) {\n  if (!(data instanceof base.DecoderBuffer)) data = new base.DecoderBuffer(data, options);\n  return this.tree._decode(data, options);\n}; // Tree methods\n\n\nfunction DERNode(parent) {\n  base.Node.call(this, 'der', parent);\n}\n\ninherits(DERNode, base.Node);\n\nDERNode.prototype._peekTag = function peekTag(buffer, tag, any) {\n  if (buffer.isEmpty()) return false;\n  var state = buffer.save();\n  var decodedTag = derDecodeTag(buffer, 'Failed to peek tag: \"' + tag + '\"');\n  if (buffer.isError(decodedTag)) return decodedTag;\n  buffer.restore(state);\n  return decodedTag.tag === tag || decodedTag.tagStr === tag || decodedTag.tagStr + 'of' === tag || any;\n};\n\nDERNode.prototype._decodeTag = function decodeTag(buffer, tag, any) {\n  var decodedTag = derDecodeTag(buffer, 'Failed to decode tag of \"' + tag + '\"');\n  if (buffer.isError(decodedTag)) return decodedTag;\n  var len = derDecodeLen(buffer, decodedTag.primitive, 'Failed to get length of \"' + tag + '\"'); // Failure\n\n  if (buffer.isError(len)) return len;\n\n  if (!any && decodedTag.tag !== tag && decodedTag.tagStr !== tag && decodedTag.tagStr + 'of' !== tag) {\n    return buffer.error('Failed to match tag: \"' + tag + '\"');\n  }\n\n  if (decodedTag.primitive || len !== null) return buffer.skip(len, 'Failed to match body of: \"' + tag + '\"'); // Indefinite length... find END tag\n\n  var state = buffer.save();\n\n  var res = this._skipUntilEnd(buffer, 'Failed to skip indefinite length body: \"' + this.tag + '\"');\n\n  if (buffer.isError(res)) return res;\n  len = buffer.offset - state.offset;\n  buffer.restore(state);\n  return buffer.skip(len, 'Failed to match body of: \"' + tag + '\"');\n};\n\nDERNode.prototype._skipUntilEnd = function skipUntilEnd(buffer, fail) {\n  while (true) {\n    var tag = derDecodeTag(buffer, fail);\n    if (buffer.isError(tag)) return tag;\n    var len = derDecodeLen(buffer, tag.primitive, fail);\n    if (buffer.isError(len)) return len;\n    var res;\n    if (tag.primitive || len !== null) res = buffer.skip(len);else res = this._skipUntilEnd(buffer, fail); // Failure\n\n    if (buffer.isError(res)) return res;\n    if (tag.tagStr === 'end') break;\n  }\n};\n\nDERNode.prototype._decodeList = function decodeList(buffer, tag, decoder, options) {\n  var result = [];\n\n  while (!buffer.isEmpty()) {\n    var possibleEnd = this._peekTag(buffer, 'end');\n\n    if (buffer.isError(possibleEnd)) return possibleEnd;\n    var res = decoder.decode(buffer, 'der', options);\n    if (buffer.isError(res) && possibleEnd) break;\n    result.push(res);\n  }\n\n  return result;\n};\n\nDERNode.prototype._decodeStr = function decodeStr(buffer, tag) {\n  if (tag === 'bitstr') {\n    var unused = buffer.readUInt8();\n    if (buffer.isError(unused)) return unused;\n    return {\n      unused: unused,\n      data: buffer.raw()\n    };\n  } else if (tag === 'bmpstr') {\n    var raw = buffer.raw();\n    if (raw.length % 2 === 1) return buffer.error('Decoding of string type: bmpstr length mismatch');\n    var str = '';\n\n    for (var i = 0; i < raw.length / 2; i++) {\n      str += String.fromCharCode(raw.readUInt16BE(i * 2));\n    }\n\n    return str;\n  } else if (tag === 'numstr') {\n    var numstr = buffer.raw().toString('ascii');\n\n    if (!this._isNumstr(numstr)) {\n      return buffer.error('Decoding of string type: ' + 'numstr unsupported characters');\n    }\n\n    return numstr;\n  } else if (tag === 'octstr') {\n    return buffer.raw();\n  } else if (tag === 'objDesc') {\n    return buffer.raw();\n  } else if (tag === 'printstr') {\n    var printstr = buffer.raw().toString('ascii');\n\n    if (!this._isPrintstr(printstr)) {\n      return buffer.error('Decoding of string type: ' + 'printstr unsupported characters');\n    }\n\n    return printstr;\n  } else if (/str$/.test(tag)) {\n    return buffer.raw().toString();\n  } else {\n    return buffer.error('Decoding of string type: ' + tag + ' unsupported');\n  }\n};\n\nDERNode.prototype._decodeObjid = function decodeObjid(buffer, values, relative) {\n  var result;\n  var identifiers = [];\n  var ident = 0;\n\n  while (!buffer.isEmpty()) {\n    var subident = buffer.readUInt8();\n    ident <<= 7;\n    ident |= subident & 0x7f;\n\n    if ((subident & 0x80) === 0) {\n      identifiers.push(ident);\n      ident = 0;\n    }\n  }\n\n  if (subident & 0x80) identifiers.push(ident);\n  var first = identifiers[0] / 40 | 0;\n  var second = identifiers[0] % 40;\n  if (relative) result = identifiers;else result = [first, second].concat(identifiers.slice(1));\n\n  if (values) {\n    var tmp = values[result.join(' ')];\n    if (tmp === undefined) tmp = values[result.join('.')];\n    if (tmp !== undefined) result = tmp;\n  }\n\n  return result;\n};\n\nDERNode.prototype._decodeTime = function decodeTime(buffer, tag) {\n  var str = buffer.raw().toString();\n\n  if (tag === 'gentime') {\n    var year = str.slice(0, 4) | 0;\n    var mon = str.slice(4, 6) | 0;\n    var day = str.slice(6, 8) | 0;\n    var hour = str.slice(8, 10) | 0;\n    var min = str.slice(10, 12) | 0;\n    var sec = str.slice(12, 14) | 0;\n  } else if (tag === 'utctime') {\n    var year = str.slice(0, 2) | 0;\n    var mon = str.slice(2, 4) | 0;\n    var day = str.slice(4, 6) | 0;\n    var hour = str.slice(6, 8) | 0;\n    var min = str.slice(8, 10) | 0;\n    var sec = str.slice(10, 12) | 0;\n    if (year < 70) year = 2000 + year;else year = 1900 + year;\n  } else {\n    return buffer.error('Decoding ' + tag + ' time is not supported yet');\n  }\n\n  return Date.UTC(year, mon - 1, day, hour, min, sec, 0);\n};\n\nDERNode.prototype._decodeNull = function decodeNull(buffer) {\n  return null;\n};\n\nDERNode.prototype._decodeBool = function decodeBool(buffer) {\n  var res = buffer.readUInt8();\n  if (buffer.isError(res)) return res;else return res !== 0;\n};\n\nDERNode.prototype._decodeInt = function decodeInt(buffer, values) {\n  // Bigint, return as it is (assume big endian)\n  var raw = buffer.raw();\n  var res = new bignum(raw);\n  if (values) res = values[res.toString(10)] || res;\n  return res;\n};\n\nDERNode.prototype._use = function use(entity, obj) {\n  if (typeof entity === 'function') entity = entity(obj);\n  return entity._getDecoder('der').tree;\n}; // Utility methods\n\n\nfunction derDecodeTag(buf, fail) {\n  var tag = buf.readUInt8(fail);\n  if (buf.isError(tag)) return tag;\n  var cls = der.tagClass[tag >> 6];\n  var primitive = (tag & 0x20) === 0; // Multi-octet tag - load\n\n  if ((tag & 0x1f) === 0x1f) {\n    var oct = tag;\n    tag = 0;\n\n    while ((oct & 0x80) === 0x80) {\n      oct = buf.readUInt8(fail);\n      if (buf.isError(oct)) return oct;\n      tag <<= 7;\n      tag |= oct & 0x7f;\n    }\n  } else {\n    tag &= 0x1f;\n  }\n\n  var tagStr = der.tag[tag];\n  return {\n    cls: cls,\n    primitive: primitive,\n    tag: tag,\n    tagStr: tagStr\n  };\n}\n\nfunction derDecodeLen(buf, primitive, fail) {\n  var len = buf.readUInt8(fail);\n  if (buf.isError(len)) return len; // Indefinite form\n\n  if (!primitive && len === 0x80) return null; // Definite form\n\n  if ((len & 0x80) === 0) {\n    // Short form\n    return len;\n  } // Long form\n\n\n  var num = len & 0x7f;\n  if (num > 4) return buf.error('length octect is too long');\n  len = 0;\n\n  for (var i = 0; i < num; i++) {\n    len <<= 8;\n    var j = buf.readUInt8(fail);\n    if (buf.isError(j)) return j;\n    len |= j;\n  }\n\n  return len;\n}","var inherits = require('inherits');\n\nvar Buffer = require('buffer').Buffer;\n\nvar asn1 = require('../../asn1');\n\nvar base = asn1.base; // Import DER constants\n\nvar der = asn1.constants.der;\n\nfunction DEREncoder(entity) {\n  this.enc = 'der';\n  this.name = entity.name;\n  this.entity = entity; // Construct base tree\n\n  this.tree = new DERNode();\n\n  this.tree._init(entity.body);\n}\n\n;\nmodule.exports = DEREncoder;\n\nDEREncoder.prototype.encode = function encode(data, reporter) {\n  return this.tree._encode(data, reporter).join();\n}; // Tree methods\n\n\nfunction DERNode(parent) {\n  base.Node.call(this, 'der', parent);\n}\n\ninherits(DERNode, base.Node);\n\nDERNode.prototype._encodeComposite = function encodeComposite(tag, primitive, cls, content) {\n  var encodedTag = encodeTag(tag, primitive, cls, this.reporter); // Short form\n\n  if (content.length < 0x80) {\n    var header = new Buffer(2);\n    header[0] = encodedTag;\n    header[1] = content.length;\n    return this._createEncoderBuffer([header, content]);\n  } // Long form\n  // Count octets required to store length\n\n\n  var lenOctets = 1;\n\n  for (var i = content.length; i >= 0x100; i >>= 8) {\n    lenOctets++;\n  }\n\n  var header = new Buffer(1 + 1 + lenOctets);\n  header[0] = encodedTag;\n  header[1] = 0x80 | lenOctets;\n\n  for (var i = 1 + lenOctets, j = content.length; j > 0; i--, j >>= 8) {\n    header[i] = j & 0xff;\n  }\n\n  return this._createEncoderBuffer([header, content]);\n};\n\nDERNode.prototype._encodeStr = function encodeStr(str, tag) {\n  if (tag === 'bitstr') {\n    return this._createEncoderBuffer([str.unused | 0, str.data]);\n  } else if (tag === 'bmpstr') {\n    var buf = new Buffer(str.length * 2);\n\n    for (var i = 0; i < str.length; i++) {\n      buf.writeUInt16BE(str.charCodeAt(i), i * 2);\n    }\n\n    return this._createEncoderBuffer(buf);\n  } else if (tag === 'numstr') {\n    if (!this._isNumstr(str)) {\n      return this.reporter.error('Encoding of string type: numstr supports ' + 'only digits and space');\n    }\n\n    return this._createEncoderBuffer(str);\n  } else if (tag === 'printstr') {\n    if (!this._isPrintstr(str)) {\n      return this.reporter.error('Encoding of string type: printstr supports ' + 'only latin upper and lower case letters, ' + 'digits, space, apostrophe, left and rigth ' + 'parenthesis, plus sign, comma, hyphen, ' + 'dot, slash, colon, equal sign, ' + 'question mark');\n    }\n\n    return this._createEncoderBuffer(str);\n  } else if (/str$/.test(tag)) {\n    return this._createEncoderBuffer(str);\n  } else if (tag === 'objDesc') {\n    return this._createEncoderBuffer(str);\n  } else {\n    return this.reporter.error('Encoding of string type: ' + tag + ' unsupported');\n  }\n};\n\nDERNode.prototype._encodeObjid = function encodeObjid(id, values, relative) {\n  if (typeof id === 'string') {\n    if (!values) return this.reporter.error('string objid given, but no values map found');\n    if (!values.hasOwnProperty(id)) return this.reporter.error('objid not found in values map');\n    id = values[id].split(/[\\s\\.]+/g);\n\n    for (var i = 0; i < id.length; i++) {\n      id[i] |= 0;\n    }\n  } else if (Array.isArray(id)) {\n    id = id.slice();\n\n    for (var i = 0; i < id.length; i++) {\n      id[i] |= 0;\n    }\n  }\n\n  if (!Array.isArray(id)) {\n    return this.reporter.error('objid() should be either array or string, ' + 'got: ' + JSON.stringify(id));\n  }\n\n  if (!relative) {\n    if (id[1] >= 40) return this.reporter.error('Second objid identifier OOB');\n    id.splice(0, 2, id[0] * 40 + id[1]);\n  } // Count number of octets\n\n\n  var size = 0;\n\n  for (var i = 0; i < id.length; i++) {\n    var ident = id[i];\n\n    for (size++; ident >= 0x80; ident >>= 7) {\n      size++;\n    }\n  }\n\n  var objid = new Buffer(size);\n  var offset = objid.length - 1;\n\n  for (var i = id.length - 1; i >= 0; i--) {\n    var ident = id[i];\n    objid[offset--] = ident & 0x7f;\n\n    while ((ident >>= 7) > 0) {\n      objid[offset--] = 0x80 | ident & 0x7f;\n    }\n  }\n\n  return this._createEncoderBuffer(objid);\n};\n\nfunction two(num) {\n  if (num < 10) return '0' + num;else return num;\n}\n\nDERNode.prototype._encodeTime = function encodeTime(time, tag) {\n  var str;\n  var date = new Date(time);\n\n  if (tag === 'gentime') {\n    str = [two(date.getFullYear()), two(date.getUTCMonth() + 1), two(date.getUTCDate()), two(date.getUTCHours()), two(date.getUTCMinutes()), two(date.getUTCSeconds()), 'Z'].join('');\n  } else if (tag === 'utctime') {\n    str = [two(date.getFullYear() % 100), two(date.getUTCMonth() + 1), two(date.getUTCDate()), two(date.getUTCHours()), two(date.getUTCMinutes()), two(date.getUTCSeconds()), 'Z'].join('');\n  } else {\n    this.reporter.error('Encoding ' + tag + ' time is not supported yet');\n  }\n\n  return this._encodeStr(str, 'octstr');\n};\n\nDERNode.prototype._encodeNull = function encodeNull() {\n  return this._createEncoderBuffer('');\n};\n\nDERNode.prototype._encodeInt = function encodeInt(num, values) {\n  if (typeof num === 'string') {\n    if (!values) return this.reporter.error('String int or enum given, but no values map');\n\n    if (!values.hasOwnProperty(num)) {\n      return this.reporter.error('Values map doesn\\'t contain: ' + JSON.stringify(num));\n    }\n\n    num = values[num];\n  } // Bignum, assume big endian\n\n\n  if (typeof num !== 'number' && !Buffer.isBuffer(num)) {\n    var numArray = num.toArray();\n\n    if (!num.sign && numArray[0] & 0x80) {\n      numArray.unshift(0);\n    }\n\n    num = new Buffer(numArray);\n  }\n\n  if (Buffer.isBuffer(num)) {\n    var size = num.length;\n    if (num.length === 0) size++;\n    var out = new Buffer(size);\n    num.copy(out);\n    if (num.length === 0) out[0] = 0;\n    return this._createEncoderBuffer(out);\n  }\n\n  if (num < 0x80) return this._createEncoderBuffer(num);\n  if (num < 0x100) return this._createEncoderBuffer([0, num]);\n  var size = 1;\n\n  for (var i = num; i >= 0x100; i >>= 8) {\n    size++;\n  }\n\n  var out = new Array(size);\n\n  for (var i = out.length - 1; i >= 0; i--) {\n    out[i] = num & 0xff;\n    num >>= 8;\n  }\n\n  if (out[0] & 0x80) {\n    out.unshift(0);\n  }\n\n  return this._createEncoderBuffer(new Buffer(out));\n};\n\nDERNode.prototype._encodeBool = function encodeBool(value) {\n  return this._createEncoderBuffer(value ? 0xff : 0);\n};\n\nDERNode.prototype._use = function use(entity, obj) {\n  if (typeof entity === 'function') entity = entity(obj);\n  return entity._getEncoder('der').tree;\n};\n\nDERNode.prototype._skipDefault = function skipDefault(dataBuffer, reporter, parent) {\n  var state = this._baseState;\n  var i;\n  if (state['default'] === null) return false;\n  var data = dataBuffer.join();\n  if (state.defaultBuffer === undefined) state.defaultBuffer = this._encodeValue(state['default'], reporter, parent).join();\n  if (data.length !== state.defaultBuffer.length) return false;\n\n  for (i = 0; i < data.length; i++) {\n    if (data[i] !== state.defaultBuffer[i]) return false;\n  }\n\n  return true;\n}; // Utility methods\n\n\nfunction encodeTag(tag, primitive, cls, reporter) {\n  var res;\n  if (tag === 'seqof') tag = 'seq';else if (tag === 'setof') tag = 'set';\n  if (der.tagByName.hasOwnProperty(tag)) res = der.tagByName[tag];else if (typeof tag === 'number' && (tag | 0) === tag) res = tag;else return reporter.error('Unknown tag: ' + tag);\n  if (res >= 0x1f) return reporter.error('Multi-octet tag encoding unsupported');\n  if (!primitive) res |= 0x20;\n  res |= der.tagClassByName[cls || 'universal'] << 6;\n  return res;\n}","var createHash = require('create-hash');\n\nvar Buffer = require('safe-buffer').Buffer;\n\nmodule.exports = function (seed, len) {\n  var t = Buffer.alloc(0);\n  var i = 0;\n  var c;\n\n  while (t.length < len) {\n    c = i2ops(i++);\n    t = Buffer.concat([t, createHash('sha1').update(seed).update(c).digest()]);\n  }\n\n  return t.slice(0, len);\n};\n\nfunction i2ops(c) {\n  var out = Buffer.allocUnsafe(4);\n  out.writeUInt32BE(c, 0);\n  return out;\n}","module.exports = function xor(a, b) {\n  var len = a.length;\n  var i = -1;\n\n  while (++i < len) {\n    a[i] ^= b[i];\n  }\n\n  return a;\n};","var BN = require('bn.js');\n\nvar Buffer = require('safe-buffer').Buffer;\n\nfunction withPublic(paddedMsg, key) {\n  return Buffer.from(paddedMsg.toRed(BN.mont(key.modulus)).redPow(new BN(key.publicExponent)).fromRed().toArray());\n}\n\nmodule.exports = withPublic;","\"use strict\";\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nvar sax = require(\"sax\");\n\nvar externals = require(\"./externals\"); // Regex to check if string is all whitespace.\n\n\nvar allWhitespaceRegex = /^\\s+$/;\n/**\r\n * XML parser.\r\n * @private\r\n */\n\nvar XmlParser =\n/*#__PURE__*/\nfunction () {\n  function XmlParser() {\n    _classCallCheck(this, XmlParser);\n  }\n\n  _createClass(XmlParser, [{\n    key: \"parseAsync\",\n\n    /**\r\n     * Parse the XML text into a JSON object.\r\n     * @param {string} xmlText - The XML text.\r\n     * @returns {{}} The JSON object.\r\n     */\n    value: function parseAsync(xmlText) {\n      var _this = this;\n\n      return new externals.Promise(function (resolve, reject) {\n        // Create the SAX parser.\n        var parser = sax.parser(true); // Parsed is the full parsed object. Current is the current node being parsed. Stack is the current stack of\n        // nodes leading to the current one.\n\n        var parsed, current;\n        var stack = []; // On error: Reject the promise.\n\n        parser.onerror = reject; // On text nodes: If it is all whitespace, do nothing. Otherwise, try to convert to a number and add as a child.\n\n        parser.ontext = function (text) {\n          if (allWhitespaceRegex.test(text)) {\n            if (current && current.attributes['xml:space'] === 'preserve') {\n              current.children.push(text);\n            }\n          } else {\n            current.children.push(_this._covertToNumberIfNumber(text));\n          }\n        }; // On open tag start: Create a child element. If this is the root element, set it as parsed. Otherwise, add\n        // it as a child to the current node.\n\n\n        parser.onopentagstart = function (node) {\n          var child = {\n            name: node.name,\n            attributes: {},\n            children: []\n          };\n\n          if (current) {\n            current.children.push(child);\n          } else {\n            parsed = child;\n          }\n\n          stack.push(child);\n          current = child;\n        }; // On close tag: Pop the stack.\n\n\n        parser.onclosetag = function (node) {\n          stack.pop();\n          current = stack[stack.length - 1];\n        }; // On attribute: Try to convert the value to a number and add to the current node.\n\n\n        parser.onattribute = function (attribute) {\n          current.attributes[attribute.name] = _this._covertToNumberIfNumber(attribute.value);\n        }; // On end: Resolve the promise.\n\n\n        parser.onend = function () {\n          return resolve(parsed);\n        }; // Start parsing the text.\n\n\n        parser.write(xmlText).close();\n      });\n    }\n    /**\r\n     * Convert the string to a number if it looks like one.\r\n     * @param {string} str - The string to convert.\r\n     * @returns {string|number} The number if converted or the string if not.\r\n     * @private\r\n     */\n\n  }, {\n    key: \"_covertToNumberIfNumber\",\n    value: function _covertToNumberIfNumber(str) {\n      var num = Number(str);\n      return num.toString() === str ? num : str;\n    }\n  }]);\n\n  return XmlParser;\n}();\n\nmodule.exports = XmlParser;","\"use strict\";\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nvar _ = require(\"lodash\");\n\nvar XML_DECLARATION = \"<?xml version=\\\"1.0\\\" encoding=\\\"UTF-8\\\" standalone=\\\"yes\\\"?>\";\n/**\r\n * XML document builder.\r\n * @private\r\n */\n\nvar XmlBuilder =\n/*#__PURE__*/\nfunction () {\n  function XmlBuilder() {\n    _classCallCheck(this, XmlBuilder);\n  }\n\n  _createClass(XmlBuilder, [{\n    key: \"build\",\n\n    /**\r\n     * Build an XML string from the JSON object.\r\n     * @param {{}} node - The node.\r\n     * @returns {string} The XML text.\r\n     */\n    value: function build(node) {\n      this._i = 0;\n\n      var xml = this._build(node, '');\n\n      if (xml === '') return;\n      return XML_DECLARATION + xml;\n    }\n    /**\r\n     * Build the XML string. (This is the internal recursive method.)\r\n     * @param {{}} node - The node.\r\n     * @param {string} xml - The initial XML doc string.\r\n     * @returns {string} The generated XML element.\r\n     * @private\r\n     */\n\n  }, {\n    key: \"_build\",\n    value: function _build(node, xml) {\n      var _this = this;\n\n      // For CPU performance, JS engines don't truly concatenate strings; they create a tree of pointers to\n      // the various concatenated strings. The downside of this is that it consumes a lot of memory, which\n      // will cause problems with large workbooks. So periodically, we grab a character from the xml, which\n      // causes the JS engine to flatten the tree into a single string. Do this too often and CPU takes a hit.\n      // Too frequently and memory takes a hit. Every 100k nodes seems to be a good balance.\n      if (this._i++ % 1000000 === 0) {\n        this._c = xml[0];\n      } // If the node has a toXml method, call it.\n\n\n      if (node && _.isFunction(node.toXml)) node = node.toXml();\n\n      if (_.isObject(node)) {\n        // If the node is an object, then it maps to an element. Check if it has a name.\n        if (!node.name) throw new Error(\"XML node does not have name: \".concat(JSON.stringify(node))); // Add the opening tag.\n\n        xml += \"<\".concat(node.name); // Add any node attributes\n\n        _.forOwn(node.attributes, function (value, name) {\n          xml += \" \".concat(name, \"=\\\"\").concat(_this._escapeString(value, true), \"\\\"\");\n        });\n\n        if (_.isEmpty(node.children)) {\n          // Self-close the tag if no children.\n          xml += \"/>\";\n        } else {\n          xml += \">\"; // Recursively add any children.\n\n          _.forEach(node.children, function (child) {\n            // Add the children to the XML.\n            xml = _this._build(child, xml);\n          }); // Close the tag.\n\n\n          xml += \"</\".concat(node.name, \">\");\n        }\n      } else if (!_.isNil(node)) {\n        // It not an object, this should be a text node. Just add it.\n        xml += this._escapeString(node);\n      } // Return the updated XML element.\n\n\n      return xml;\n    }\n    /**\r\n     * Escape a string for use in XML by replacing &, \", ', <, and >.\r\n     * @param {*} value - The value to escape.\r\n     * @param {boolean} [isAttribute] - A flag indicating if this is an attribute.\r\n     * @returns {string} The escaped string.\r\n     * @private\r\n     */\n\n  }, {\n    key: \"_escapeString\",\n    value: function _escapeString(value, isAttribute) {\n      if (_.isNil(value)) return value;\n      value = value.toString().replace(/&/g, \"&amp;\") // Escape '&' first as the other escapes add them.\n      .replace(/</g, \"&lt;\").replace(/>/g, \"&gt;\");\n\n      if (isAttribute) {\n        value = value.replace(/\"/g, \"&quot;\");\n      }\n\n      return value;\n    }\n  }]);\n\n  return XmlBuilder;\n}();\n\nmodule.exports = XmlBuilder;","/**\n * Encoding conversion table for UTF-8 to JIS\n */\nmodule.exports = {\n  0xEFBDA1: 0x21,\n  0xEFBDA2: 0x22,\n  0xEFBDA3: 0x23,\n  0xEFBDA4: 0x24,\n  0xEFBDA5: 0x25,\n  0xEFBDA6: 0x26,\n  0xEFBDA7: 0x27,\n  0xEFBDA8: 0x28,\n  0xEFBDA9: 0x29,\n  0xEFBDAA: 0x2A,\n  0xEFBDAB: 0x2B,\n  0xEFBDAC: 0x2C,\n  0xEFBDAD: 0x2D,\n  0xEFBDAE: 0x2E,\n  0xEFBDAF: 0x2F,\n  0xEFBDB0: 0x30,\n  0xEFBDB1: 0x31,\n  0xEFBDB2: 0x32,\n  0xEFBDB3: 0x33,\n  0xEFBDB4: 0x34,\n  0xEFBDB5: 0x35,\n  0xEFBDB6: 0x36,\n  0xEFBDB7: 0x37,\n  0xEFBDB8: 0x38,\n  0xEFBDB9: 0x39,\n  0xEFBDBA: 0x3A,\n  0xEFBDBB: 0x3B,\n  0xEFBDBC: 0x3C,\n  0xEFBDBD: 0x3D,\n  0xEFBDBE: 0x3E,\n  0xEFBDBF: 0x3F,\n  0xEFBE80: 0x40,\n  0xEFBE81: 0x41,\n  0xEFBE82: 0x42,\n  0xEFBE83: 0x43,\n  0xEFBE84: 0x44,\n  0xEFBE85: 0x45,\n  0xEFBE86: 0x46,\n  0xEFBE87: 0x47,\n  0xEFBE88: 0x48,\n  0xEFBE89: 0x49,\n  0xEFBE8A: 0x4A,\n  0xEFBE8B: 0x4B,\n  0xEFBE8C: 0x4C,\n  0xEFBE8D: 0x4D,\n  0xEFBE8E: 0x4E,\n  0xEFBE8F: 0x4F,\n  0xEFBE90: 0x50,\n  0xEFBE91: 0x51,\n  0xEFBE92: 0x52,\n  0xEFBE93: 0x53,\n  0xEFBE94: 0x54,\n  0xEFBE95: 0x55,\n  0xEFBE96: 0x56,\n  0xEFBE97: 0x57,\n  0xEFBE98: 0x58,\n  0xEFBE99: 0x59,\n  0xEFBE9A: 0x5A,\n  0xEFBE9B: 0x5B,\n  0xEFBE9C: 0x5C,\n  0xEFBE9D: 0x5D,\n  0xEFBE9E: 0x5E,\n  0xEFBE9F: 0x5F,\n  0xE291A0: 0x2D21,\n  0xE291A1: 0x2D22,\n  0xE291A2: 0x2D23,\n  0xE291A3: 0x2D24,\n  0xE291A4: 0x2D25,\n  0xE291A5: 0x2D26,\n  0xE291A6: 0x2D27,\n  0xE291A7: 0x2D28,\n  0xE291A8: 0x2D29,\n  0xE291A9: 0x2D2A,\n  0xE291AA: 0x2D2B,\n  0xE291AB: 0x2D2C,\n  0xE291AC: 0x2D2D,\n  0xE291AD: 0x2D2E,\n  0xE291AE: 0x2D2F,\n  0xE291AF: 0x2D30,\n  0xE291B0: 0x2D31,\n  0xE291B1: 0x2D32,\n  0xE291B2: 0x2D33,\n  0xE291B3: 0x2D34,\n  0xE285A0: 0x2D35,\n  0xE285A1: 0x2D36,\n  0xE285A2: 0x2D37,\n  0xE285A3: 0x2D38,\n  0xE285A4: 0x2D39,\n  0xE285A5: 0x2D3A,\n  0xE285A6: 0x2D3B,\n  0xE285A7: 0x2D3C,\n  0xE285A8: 0x2D3D,\n  0xE285A9: 0x2D3E,\n  0xE38D89: 0x2D40,\n  0xE38C94: 0x2D41,\n  0xE38CA2: 0x2D42,\n  0xE38D8D: 0x2D43,\n  0xE38C98: 0x2D44,\n  0xE38CA7: 0x2D45,\n  0xE38C83: 0x2D46,\n  0xE38CB6: 0x2D47,\n  0xE38D91: 0x2D48,\n  0xE38D97: 0x2D49,\n  0xE38C8D: 0x2D4A,\n  0xE38CA6: 0x2D4B,\n  0xE38CA3: 0x2D4C,\n  0xE38CAB: 0x2D4D,\n  0xE38D8A: 0x2D4E,\n  0xE38CBB: 0x2D4F,\n  0xE38E9C: 0x2D50,\n  0xE38E9D: 0x2D51,\n  0xE38E9E: 0x2D52,\n  0xE38E8E: 0x2D53,\n  0xE38E8F: 0x2D54,\n  0xE38F84: 0x2D55,\n  0xE38EA1: 0x2D56,\n  0xE38DBB: 0x2D5F,\n  0xE3809D: 0x2D60,\n  0xE3809F: 0x2D61,\n  0xE28496: 0x2D62,\n  0xE38F8D: 0x2D63,\n  0xE284A1: 0x2D64,\n  0xE38AA4: 0x2D65,\n  0xE38AA5: 0x2D66,\n  0xE38AA6: 0x2D67,\n  0xE38AA7: 0x2D68,\n  0xE38AA8: 0x2D69,\n  0xE388B1: 0x2D6A,\n  0xE388B2: 0x2D6B,\n  0xE388B9: 0x2D6C,\n  0xE38DBE: 0x2D6D,\n  0xE38DBD: 0x2D6E,\n  0xE38DBC: 0x2D6F,\n  0xE288AE: 0x2D73,\n  0xE28891: 0x2D74,\n  0xE2889F: 0x2D78,\n  0xE28ABF: 0x2D79,\n  0xE38080: 0x2121,\n  0xE38081: 0x2122,\n  0xE38082: 0x2123,\n  0xEFBC8C: 0x2124,\n  0xEFBC8E: 0x2125,\n  0xE383BB: 0x2126,\n  0xEFBC9A: 0x2127,\n  0xEFBC9B: 0x2128,\n  0xEFBC9F: 0x2129,\n  0xEFBC81: 0x212A,\n  0xE3829B: 0x212B,\n  0xE3829C: 0x212C,\n  0xC2B4: 0x212D,\n  0xEFBD80: 0x212E,\n  0xC2A8: 0x212F,\n  0xEFBCBE: 0x2130,\n  0xEFBFA3: 0x2131,\n  0xEFBCBF: 0x2132,\n  0xE383BD: 0x2133,\n  0xE383BE: 0x2134,\n  0xE3829D: 0x2135,\n  0xE3829E: 0x2136,\n  0xE38083: 0x2137,\n  0xE4BB9D: 0x2138,\n  0xE38085: 0x2139,\n  0xE38086: 0x213A,\n  0xE38087: 0x213B,\n  0xE383BC: 0x213C,\n  0xE28095: 0x213D,\n  0xE28090: 0x213E,\n  0xEFBC8F: 0x213F,\n  0xEFBCBC: 0x2140,\n  0xEFBD9E: 0x2141,\n  0xE28096: 0x2142,\n  0xEFBD9C: 0x2143,\n  0xE280A6: 0x2144,\n  0xE280A5: 0x2145,\n  0xE28098: 0x2146,\n  0xE28099: 0x2147,\n  0xE2809C: 0x2148,\n  0xE2809D: 0x2149,\n  0xEFBC88: 0x214A,\n  0xEFBC89: 0x214B,\n  0xE38094: 0x214C,\n  0xE38095: 0x214D,\n  0xEFBCBB: 0x214E,\n  0xEFBCBD: 0x214F,\n  0xEFBD9B: 0x2150,\n  0xEFBD9D: 0x2151,\n  0xE38088: 0x2152,\n  0xE38089: 0x2153,\n  0xE3808A: 0x2154,\n  0xE3808B: 0x2155,\n  0xE3808C: 0x2156,\n  0xE3808D: 0x2157,\n  0xE3808E: 0x2158,\n  0xE3808F: 0x2159,\n  0xE38090: 0x215A,\n  0xE38091: 0x215B,\n  0xEFBC8B: 0x215C,\n  0xEFBC8D: 0x215D,\n  0xC2B1: 0x215E,\n  0xC397: 0x215F,\n  0xC3B7: 0x2160,\n  0xEFBC9D: 0x2161,\n  0xE289A0: 0x2162,\n  0xEFBC9C: 0x2163,\n  0xEFBC9E: 0x2164,\n  0xE289A6: 0x2165,\n  0xE289A7: 0x2166,\n  0xE2889E: 0x2167,\n  0xE288B4: 0x2168,\n  0xE29982: 0x2169,\n  0xE29980: 0x216A,\n  0xC2B0: 0x216B,\n  0xE280B2: 0x216C,\n  0xE280B3: 0x216D,\n  0xE28483: 0x216E,\n  0xEFBFA5: 0x216F,\n  0xEFBC84: 0x2170,\n  0xEFBFA0: 0x2171,\n  0xEFBFA1: 0x2172,\n  0xEFBC85: 0x2173,\n  0xEFBC83: 0x2174,\n  0xEFBC86: 0x2175,\n  0xEFBC8A: 0x2176,\n  0xEFBCA0: 0x2177,\n  0xC2A7: 0x2178,\n  0xE29886: 0x2179,\n  0xE29885: 0x217A,\n  0xE2978B: 0x217B,\n  0xE2978F: 0x217C,\n  0xE2978E: 0x217D,\n  0xE29787: 0x217E,\n  0xE29786: 0x2221,\n  0xE296A1: 0x2222,\n  0xE296A0: 0x2223,\n  0xE296B3: 0x2224,\n  0xE296B2: 0x2225,\n  0xE296BD: 0x2226,\n  0xE296BC: 0x2227,\n  0xE280BB: 0x2228,\n  0xE38092: 0x2229,\n  0xE28692: 0x222A,\n  0xE28690: 0x222B,\n  0xE28691: 0x222C,\n  0xE28693: 0x222D,\n  0xE38093: 0x222E,\n  0xE28888: 0x223A,\n  0xE2888B: 0x223B,\n  0xE28A86: 0x223C,\n  0xE28A87: 0x223D,\n  0xE28A82: 0x223E,\n  0xE28A83: 0x223F,\n  0xE288AA: 0x2240,\n  0xE288A9: 0x2241,\n  0xE288A7: 0x224A,\n  0xE288A8: 0x224B,\n  0xC2AC: 0x224C,\n  0xE28792: 0x224D,\n  0xE28794: 0x224E,\n  0xE28880: 0x224F,\n  0xE28883: 0x2250,\n  0xE288A0: 0x225C,\n  0xE28AA5: 0x225D,\n  0xE28C92: 0x225E,\n  0xE28882: 0x225F,\n  0xE28887: 0x2260,\n  0xE289A1: 0x2261,\n  0xE28992: 0x2262,\n  0xE289AA: 0x2263,\n  0xE289AB: 0x2264,\n  0xE2889A: 0x2265,\n  0xE288BD: 0x2266,\n  0xE2889D: 0x2267,\n  0xE288B5: 0x2268,\n  0xE288AB: 0x2269,\n  0xE288AC: 0x226A,\n  0xE284AB: 0x2272,\n  0xE280B0: 0x2273,\n  0xE299AF: 0x2274,\n  0xE299AD: 0x2275,\n  0xE299AA: 0x2276,\n  0xE280A0: 0x2277,\n  0xE280A1: 0x2278,\n  0xC2B6: 0x2279,\n  0xE297AF: 0x227E,\n  0xEFBC90: 0x2330,\n  0xEFBC91: 0x2331,\n  0xEFBC92: 0x2332,\n  0xEFBC93: 0x2333,\n  0xEFBC94: 0x2334,\n  0xEFBC95: 0x2335,\n  0xEFBC96: 0x2336,\n  0xEFBC97: 0x2337,\n  0xEFBC98: 0x2338,\n  0xEFBC99: 0x2339,\n  0xEFBCA1: 0x2341,\n  0xEFBCA2: 0x2342,\n  0xEFBCA3: 0x2343,\n  0xEFBCA4: 0x2344,\n  0xEFBCA5: 0x2345,\n  0xEFBCA6: 0x2346,\n  0xEFBCA7: 0x2347,\n  0xEFBCA8: 0x2348,\n  0xEFBCA9: 0x2349,\n  0xEFBCAA: 0x234A,\n  0xEFBCAB: 0x234B,\n  0xEFBCAC: 0x234C,\n  0xEFBCAD: 0x234D,\n  0xEFBCAE: 0x234E,\n  0xEFBCAF: 0x234F,\n  0xEFBCB0: 0x2350,\n  0xEFBCB1: 0x2351,\n  0xEFBCB2: 0x2352,\n  0xEFBCB3: 0x2353,\n  0xEFBCB4: 0x2354,\n  0xEFBCB5: 0x2355,\n  0xEFBCB6: 0x2356,\n  0xEFBCB7: 0x2357,\n  0xEFBCB8: 0x2358,\n  0xEFBCB9: 0x2359,\n  0xEFBCBA: 0x235A,\n  0xEFBD81: 0x2361,\n  0xEFBD82: 0x2362,\n  0xEFBD83: 0x2363,\n  0xEFBD84: 0x2364,\n  0xEFBD85: 0x2365,\n  0xEFBD86: 0x2366,\n  0xEFBD87: 0x2367,\n  0xEFBD88: 0x2368,\n  0xEFBD89: 0x2369,\n  0xEFBD8A: 0x236A,\n  0xEFBD8B: 0x236B,\n  0xEFBD8C: 0x236C,\n  0xEFBD8D: 0x236D,\n  0xEFBD8E: 0x236E,\n  0xEFBD8F: 0x236F,\n  0xEFBD90: 0x2370,\n  0xEFBD91: 0x2371,\n  0xEFBD92: 0x2372,\n  0xEFBD93: 0x2373,\n  0xEFBD94: 0x2374,\n  0xEFBD95: 0x2375,\n  0xEFBD96: 0x2376,\n  0xEFBD97: 0x2377,\n  0xEFBD98: 0x2378,\n  0xEFBD99: 0x2379,\n  0xEFBD9A: 0x237A,\n  0xE38181: 0x2421,\n  0xE38182: 0x2422,\n  0xE38183: 0x2423,\n  0xE38184: 0x2424,\n  0xE38185: 0x2425,\n  0xE38186: 0x2426,\n  0xE38187: 0x2427,\n  0xE38188: 0x2428,\n  0xE38189: 0x2429,\n  0xE3818A: 0x242A,\n  0xE3818B: 0x242B,\n  0xE3818C: 0x242C,\n  0xE3818D: 0x242D,\n  0xE3818E: 0x242E,\n  0xE3818F: 0x242F,\n  0xE38190: 0x2430,\n  0xE38191: 0x2431,\n  0xE38192: 0x2432,\n  0xE38193: 0x2433,\n  0xE38194: 0x2434,\n  0xE38195: 0x2435,\n  0xE38196: 0x2436,\n  0xE38197: 0x2437,\n  0xE38198: 0x2438,\n  0xE38199: 0x2439,\n  0xE3819A: 0x243A,\n  0xE3819B: 0x243B,\n  0xE3819C: 0x243C,\n  0xE3819D: 0x243D,\n  0xE3819E: 0x243E,\n  0xE3819F: 0x243F,\n  0xE381A0: 0x2440,\n  0xE381A1: 0x2441,\n  0xE381A2: 0x2442,\n  0xE381A3: 0x2443,\n  0xE381A4: 0x2444,\n  0xE381A5: 0x2445,\n  0xE381A6: 0x2446,\n  0xE381A7: 0x2447,\n  0xE381A8: 0x2448,\n  0xE381A9: 0x2449,\n  0xE381AA: 0x244A,\n  0xE381AB: 0x244B,\n  0xE381AC: 0x244C,\n  0xE381AD: 0x244D,\n  0xE381AE: 0x244E,\n  0xE381AF: 0x244F,\n  0xE381B0: 0x2450,\n  0xE381B1: 0x2451,\n  0xE381B2: 0x2452,\n  0xE381B3: 0x2453,\n  0xE381B4: 0x2454,\n  0xE381B5: 0x2455,\n  0xE381B6: 0x2456,\n  0xE381B7: 0x2457,\n  0xE381B8: 0x2458,\n  0xE381B9: 0x2459,\n  0xE381BA: 0x245A,\n  0xE381BB: 0x245B,\n  0xE381BC: 0x245C,\n  0xE381BD: 0x245D,\n  0xE381BE: 0x245E,\n  0xE381BF: 0x245F,\n  0xE38280: 0x2460,\n  0xE38281: 0x2461,\n  0xE38282: 0x2462,\n  0xE38283: 0x2463,\n  0xE38284: 0x2464,\n  0xE38285: 0x2465,\n  0xE38286: 0x2466,\n  0xE38287: 0x2467,\n  0xE38288: 0x2468,\n  0xE38289: 0x2469,\n  0xE3828A: 0x246A,\n  0xE3828B: 0x246B,\n  0xE3828C: 0x246C,\n  0xE3828D: 0x246D,\n  0xE3828E: 0x246E,\n  0xE3828F: 0x246F,\n  0xE38290: 0x2470,\n  0xE38291: 0x2471,\n  0xE38292: 0x2472,\n  0xE38293: 0x2473,\n  0xE382A1: 0x2521,\n  0xE382A2: 0x2522,\n  0xE382A3: 0x2523,\n  0xE382A4: 0x2524,\n  0xE382A5: 0x2525,\n  0xE382A6: 0x2526,\n  0xE382A7: 0x2527,\n  0xE382A8: 0x2528,\n  0xE382A9: 0x2529,\n  0xE382AA: 0x252A,\n  0xE382AB: 0x252B,\n  0xE382AC: 0x252C,\n  0xE382AD: 0x252D,\n  0xE382AE: 0x252E,\n  0xE382AF: 0x252F,\n  0xE382B0: 0x2530,\n  0xE382B1: 0x2531,\n  0xE382B2: 0x2532,\n  0xE382B3: 0x2533,\n  0xE382B4: 0x2534,\n  0xE382B5: 0x2535,\n  0xE382B6: 0x2536,\n  0xE382B7: 0x2537,\n  0xE382B8: 0x2538,\n  0xE382B9: 0x2539,\n  0xE382BA: 0x253A,\n  0xE382BB: 0x253B,\n  0xE382BC: 0x253C,\n  0xE382BD: 0x253D,\n  0xE382BE: 0x253E,\n  0xE382BF: 0x253F,\n  0xE38380: 0x2540,\n  0xE38381: 0x2541,\n  0xE38382: 0x2542,\n  0xE38383: 0x2543,\n  0xE38384: 0x2544,\n  0xE38385: 0x2545,\n  0xE38386: 0x2546,\n  0xE38387: 0x2547,\n  0xE38388: 0x2548,\n  0xE38389: 0x2549,\n  0xE3838A: 0x254A,\n  0xE3838B: 0x254B,\n  0xE3838C: 0x254C,\n  0xE3838D: 0x254D,\n  0xE3838E: 0x254E,\n  0xE3838F: 0x254F,\n  0xE38390: 0x2550,\n  0xE38391: 0x2551,\n  0xE38392: 0x2552,\n  0xE38393: 0x2553,\n  0xE38394: 0x2554,\n  0xE38395: 0x2555,\n  0xE38396: 0x2556,\n  0xE38397: 0x2557,\n  0xE38398: 0x2558,\n  0xE38399: 0x2559,\n  0xE3839A: 0x255A,\n  0xE3839B: 0x255B,\n  0xE3839C: 0x255C,\n  0xE3839D: 0x255D,\n  0xE3839E: 0x255E,\n  0xE3839F: 0x255F,\n  0xE383A0: 0x2560,\n  0xE383A1: 0x2561,\n  0xE383A2: 0x2562,\n  0xE383A3: 0x2563,\n  0xE383A4: 0x2564,\n  0xE383A5: 0x2565,\n  0xE383A6: 0x2566,\n  0xE383A7: 0x2567,\n  0xE383A8: 0x2568,\n  0xE383A9: 0x2569,\n  0xE383AA: 0x256A,\n  0xE383AB: 0x256B,\n  0xE383AC: 0x256C,\n  0xE383AD: 0x256D,\n  0xE383AE: 0x256E,\n  0xE383AF: 0x256F,\n  0xE383B0: 0x2570,\n  0xE383B1: 0x2571,\n  0xE383B2: 0x2572,\n  0xE383B3: 0x2573,\n  0xE383B4: 0x2574,\n  0xE383B5: 0x2575,\n  0xE383B6: 0x2576,\n  0xCE91: 0x2621,\n  0xCE92: 0x2622,\n  0xCE93: 0x2623,\n  0xCE94: 0x2624,\n  0xCE95: 0x2625,\n  0xCE96: 0x2626,\n  0xCE97: 0x2627,\n  0xCE98: 0x2628,\n  0xCE99: 0x2629,\n  0xCE9A: 0x262A,\n  0xCE9B: 0x262B,\n  0xCE9C: 0x262C,\n  0xCE9D: 0x262D,\n  0xCE9E: 0x262E,\n  0xCE9F: 0x262F,\n  0xCEA0: 0x2630,\n  0xCEA1: 0x2631,\n  0xCEA3: 0x2632,\n  0xCEA4: 0x2633,\n  0xCEA5: 0x2634,\n  0xCEA6: 0x2635,\n  0xCEA7: 0x2636,\n  0xCEA8: 0x2637,\n  0xCEA9: 0x2638,\n  0xCEB1: 0x2641,\n  0xCEB2: 0x2642,\n  0xCEB3: 0x2643,\n  0xCEB4: 0x2644,\n  0xCEB5: 0x2645,\n  0xCEB6: 0x2646,\n  0xCEB7: 0x2647,\n  0xCEB8: 0x2648,\n  0xCEB9: 0x2649,\n  0xCEBA: 0x264A,\n  0xCEBB: 0x264B,\n  0xCEBC: 0x264C,\n  0xCEBD: 0x264D,\n  0xCEBE: 0x264E,\n  0xCEBF: 0x264F,\n  0xCF80: 0x2650,\n  0xCF81: 0x2651,\n  0xCF83: 0x2652,\n  0xCF84: 0x2653,\n  0xCF85: 0x2654,\n  0xCF86: 0x2655,\n  0xCF87: 0x2656,\n  0xCF88: 0x2657,\n  0xCF89: 0x2658,\n  0xD090: 0x2721,\n  0xD091: 0x2722,\n  0xD092: 0x2723,\n  0xD093: 0x2724,\n  0xD094: 0x2725,\n  0xD095: 0x2726,\n  0xD081: 0x2727,\n  0xD096: 0x2728,\n  0xD097: 0x2729,\n  0xD098: 0x272A,\n  0xD099: 0x272B,\n  0xD09A: 0x272C,\n  0xD09B: 0x272D,\n  0xD09C: 0x272E,\n  0xD09D: 0x272F,\n  0xD09E: 0x2730,\n  0xD09F: 0x2731,\n  0xD0A0: 0x2732,\n  0xD0A1: 0x2733,\n  0xD0A2: 0x2734,\n  0xD0A3: 0x2735,\n  0xD0A4: 0x2736,\n  0xD0A5: 0x2737,\n  0xD0A6: 0x2738,\n  0xD0A7: 0x2739,\n  0xD0A8: 0x273A,\n  0xD0A9: 0x273B,\n  0xD0AA: 0x273C,\n  0xD0AB: 0x273D,\n  0xD0AC: 0x273E,\n  0xD0AD: 0x273F,\n  0xD0AE: 0x2740,\n  0xD0AF: 0x2741,\n  0xD0B0: 0x2751,\n  0xD0B1: 0x2752,\n  0xD0B2: 0x2753,\n  0xD0B3: 0x2754,\n  0xD0B4: 0x2755,\n  0xD0B5: 0x2756,\n  0xD191: 0x2757,\n  0xD0B6: 0x2758,\n  0xD0B7: 0x2759,\n  0xD0B8: 0x275A,\n  0xD0B9: 0x275B,\n  0xD0BA: 0x275C,\n  0xD0BB: 0x275D,\n  0xD0BC: 0x275E,\n  0xD0BD: 0x275F,\n  0xD0BE: 0x2760,\n  0xD0BF: 0x2761,\n  0xD180: 0x2762,\n  0xD181: 0x2763,\n  0xD182: 0x2764,\n  0xD183: 0x2765,\n  0xD184: 0x2766,\n  0xD185: 0x2767,\n  0xD186: 0x2768,\n  0xD187: 0x2769,\n  0xD188: 0x276A,\n  0xD189: 0x276B,\n  0xD18A: 0x276C,\n  0xD18B: 0x276D,\n  0xD18C: 0x276E,\n  0xD18D: 0x276F,\n  0xD18E: 0x2770,\n  0xD18F: 0x2771,\n  0xE29480: 0x2821,\n  0xE29482: 0x2822,\n  0xE2948C: 0x2823,\n  0xE29490: 0x2824,\n  0xE29498: 0x2825,\n  0xE29494: 0x2826,\n  0xE2949C: 0x2827,\n  0xE294AC: 0x2828,\n  0xE294A4: 0x2829,\n  0xE294B4: 0x282A,\n  0xE294BC: 0x282B,\n  0xE29481: 0x282C,\n  0xE29483: 0x282D,\n  0xE2948F: 0x282E,\n  0xE29493: 0x282F,\n  0xE2949B: 0x2830,\n  0xE29497: 0x2831,\n  0xE294A3: 0x2832,\n  0xE294B3: 0x2833,\n  0xE294AB: 0x2834,\n  0xE294BB: 0x2835,\n  0xE2958B: 0x2836,\n  0xE294A0: 0x2837,\n  0xE294AF: 0x2838,\n  0xE294A8: 0x2839,\n  0xE294B7: 0x283A,\n  0xE294BF: 0x283B,\n  0xE2949D: 0x283C,\n  0xE294B0: 0x283D,\n  0xE294A5: 0x283E,\n  0xE294B8: 0x283F,\n  0xE29582: 0x2840,\n  0xE4BA9C: 0x3021,\n  0xE59496: 0x3022,\n  0xE5A883: 0x3023,\n  0xE998BF: 0x3024,\n  0xE59380: 0x3025,\n  0xE6849B: 0x3026,\n  0xE68CA8: 0x3027,\n  0xE5A7B6: 0x3028,\n  0xE980A2: 0x3029,\n  0xE891B5: 0x302A,\n  0xE88C9C: 0x302B,\n  0xE7A990: 0x302C,\n  0xE682AA: 0x302D,\n  0xE68FA1: 0x302E,\n  0xE6B8A5: 0x302F,\n  0xE697AD: 0x3030,\n  0xE891A6: 0x3031,\n  0xE88AA6: 0x3032,\n  0xE9AFB5: 0x3033,\n  0xE6A293: 0x3034,\n  0xE59CA7: 0x3035,\n  0xE696A1: 0x3036,\n  0xE689B1: 0x3037,\n  0xE5AE9B: 0x3038,\n  0xE5A790: 0x3039,\n  0xE899BB: 0x303A,\n  0xE9A3B4: 0x303B,\n  0xE7B5A2: 0x303C,\n  0xE7B6BE: 0x303D,\n  0xE9AE8E: 0x303E,\n  0xE68896: 0x303F,\n  0xE7B29F: 0x3040,\n  0xE8A2B7: 0x3041,\n  0xE5AE89: 0x3042,\n  0xE5BAB5: 0x3043,\n  0xE68C89: 0x3044,\n  0xE69A97: 0x3045,\n  0xE6A188: 0x3046,\n  0xE99787: 0x3047,\n  0xE99E8D: 0x3048,\n  0xE69D8F: 0x3049,\n  0xE4BBA5: 0x304A,\n  0xE4BC8A: 0x304B,\n  0xE4BD8D: 0x304C,\n  0xE4BE9D: 0x304D,\n  0xE58189: 0x304E,\n  0xE59BB2: 0x304F,\n  0xE5A4B7: 0x3050,\n  0xE5A794: 0x3051,\n  0xE5A881: 0x3052,\n  0xE5B089: 0x3053,\n  0xE6839F: 0x3054,\n  0xE6848F: 0x3055,\n  0xE685B0: 0x3056,\n  0xE69893: 0x3057,\n  0xE6A485: 0x3058,\n  0xE782BA: 0x3059,\n  0xE7958F: 0x305A,\n  0xE795B0: 0x305B,\n  0xE7A7BB: 0x305C,\n  0xE7B6AD: 0x305D,\n  0xE7B7AF: 0x305E,\n  0xE88383: 0x305F,\n  0xE8908E: 0x3060,\n  0xE8A1A3: 0x3061,\n  0xE8AC82: 0x3062,\n  0xE98195: 0x3063,\n  0xE981BA: 0x3064,\n  0xE58CBB: 0x3065,\n  0xE4BA95: 0x3066,\n  0xE4BAA5: 0x3067,\n  0xE59F9F: 0x3068,\n  0xE882B2: 0x3069,\n  0xE98381: 0x306A,\n  0xE7A3AF: 0x306B,\n  0xE4B880: 0x306C,\n  0xE5A3B1: 0x306D,\n  0xE6BAA2: 0x306E,\n  0xE980B8: 0x306F,\n  0xE7A8B2: 0x3070,\n  0xE88CA8: 0x3071,\n  0xE88A8B: 0x3072,\n  0xE9B0AF: 0x3073,\n  0xE58581: 0x3074,\n  0xE58DB0: 0x3075,\n  0xE592BD: 0x3076,\n  0xE593A1: 0x3077,\n  0xE59BA0: 0x3078,\n  0xE5A7BB: 0x3079,\n  0xE5BC95: 0x307A,\n  0xE9A3B2: 0x307B,\n  0xE6B7AB: 0x307C,\n  0xE883A4: 0x307D,\n  0xE894AD: 0x307E,\n  0xE999A2: 0x3121,\n  0xE999B0: 0x3122,\n  0xE99AA0: 0x3123,\n  0xE99FBB: 0x3124,\n  0xE5908B: 0x3125,\n  0xE58FB3: 0x3126,\n  0xE5AE87: 0x3127,\n  0xE7838F: 0x3128,\n  0xE7BEBD: 0x3129,\n  0xE8BF82: 0x312A,\n  0xE99BA8: 0x312B,\n  0xE58DAF: 0x312C,\n  0xE9B59C: 0x312D,\n  0xE7AABA: 0x312E,\n  0xE4B891: 0x312F,\n  0xE7A293: 0x3130,\n  0xE887BC: 0x3131,\n  0xE6B8A6: 0x3132,\n  0xE59898: 0x3133,\n  0xE59484: 0x3134,\n  0xE6AC9D: 0x3135,\n  0xE8949A: 0x3136,\n  0xE9B0BB: 0x3137,\n  0xE5A7A5: 0x3138,\n  0xE58EA9: 0x3139,\n  0xE6B5A6: 0x313A,\n  0xE7939C: 0x313B,\n  0xE9968F: 0x313C,\n  0xE59982: 0x313D,\n  0xE4BA91: 0x313E,\n  0xE9818B: 0x313F,\n  0xE99BB2: 0x3140,\n  0xE88D8F: 0x3141,\n  0xE9A48C: 0x3142,\n  0xE58FA1: 0x3143,\n  0xE596B6: 0x3144,\n  0xE5ACB0: 0x3145,\n  0xE5BDB1: 0x3146,\n  0xE698A0: 0x3147,\n  0xE69BB3: 0x3148,\n  0xE6A084: 0x3149,\n  0xE6B0B8: 0x314A,\n  0xE6B3B3: 0x314B,\n  0xE6B4A9: 0x314C,\n  0xE7919B: 0x314D,\n  0xE79B88: 0x314E,\n  0xE7A98E: 0x314F,\n  0xE9A0B4: 0x3150,\n  0xE88BB1: 0x3151,\n  0xE8A19B: 0x3152,\n  0xE8A9A0: 0x3153,\n  0xE98BAD: 0x3154,\n  0xE6B6B2: 0x3155,\n  0xE796AB: 0x3156,\n  0xE79B8A: 0x3157,\n  0xE9A785: 0x3158,\n  0xE682A6: 0x3159,\n  0xE8AC81: 0x315A,\n  0xE8B68A: 0x315B,\n  0xE996B2: 0x315C,\n  0xE6A68E: 0x315D,\n  0xE58EAD: 0x315E,\n  0xE58686: 0x315F,\n  0xE59C92: 0x3160,\n  0xE5A0B0: 0x3161,\n  0xE5A584: 0x3162,\n  0xE5AEB4: 0x3163,\n  0xE5BBB6: 0x3164,\n  0xE680A8: 0x3165,\n  0xE68EA9: 0x3166,\n  0xE68FB4: 0x3167,\n  0xE6B2BF: 0x3168,\n  0xE6BC94: 0x3169,\n  0xE7828E: 0x316A,\n  0xE78494: 0x316B,\n  0xE78599: 0x316C,\n  0xE78795: 0x316D,\n  0xE78CBF: 0x316E,\n  0xE7B881: 0x316F,\n  0xE889B6: 0x3170,\n  0xE88B91: 0x3171,\n  0xE89697: 0x3172,\n  0xE981A0: 0x3173,\n  0xE9899B: 0x3174,\n  0xE9B49B: 0x3175,\n  0xE5A1A9: 0x3176,\n  0xE696BC: 0x3177,\n  0xE6B19A: 0x3178,\n  0xE794A5: 0x3179,\n  0xE587B9: 0x317A,\n  0xE5A4AE: 0x317B,\n  0xE5A5A5: 0x317C,\n  0xE5BE80: 0x317D,\n  0xE5BF9C: 0x317E,\n  0xE68ABC: 0x3221,\n  0xE697BA: 0x3222,\n  0xE6A8AA: 0x3223,\n  0xE6ACA7: 0x3224,\n  0xE6AEB4: 0x3225,\n  0xE78E8B: 0x3226,\n  0xE7BF81: 0x3227,\n  0xE8A596: 0x3228,\n  0xE9B4AC: 0x3229,\n  0xE9B48E: 0x322A,\n  0xE9BB84: 0x322B,\n  0xE5B2A1: 0x322C,\n  0xE6B296: 0x322D,\n  0xE88DBB: 0x322E,\n  0xE58484: 0x322F,\n  0xE5B18B: 0x3230,\n  0xE686B6: 0x3231,\n  0xE88786: 0x3232,\n  0xE6A1B6: 0x3233,\n  0xE789A1: 0x3234,\n  0xE4B999: 0x3235,\n  0xE4BFBA: 0x3236,\n  0xE58DB8: 0x3237,\n  0xE681A9: 0x3238,\n  0xE6B8A9: 0x3239,\n  0xE7A98F: 0x323A,\n  0xE99FB3: 0x323B,\n  0xE4B88B: 0x323C,\n  0xE58C96: 0x323D,\n  0xE4BBAE: 0x323E,\n  0xE4BD95: 0x323F,\n  0xE4BCBD: 0x3240,\n  0xE4BEA1: 0x3241,\n  0xE4BDB3: 0x3242,\n  0xE58AA0: 0x3243,\n  0xE58FAF: 0x3244,\n  0xE59889: 0x3245,\n  0xE5A48F: 0x3246,\n  0xE5AB81: 0x3247,\n  0xE5AEB6: 0x3248,\n  0xE5AFA1: 0x3249,\n  0xE7A791: 0x324A,\n  0xE69A87: 0x324B,\n  0xE69E9C: 0x324C,\n  0xE69EB6: 0x324D,\n  0xE6AD8C: 0x324E,\n  0xE6B2B3: 0x324F,\n  0xE781AB: 0x3250,\n  0xE78F82: 0x3251,\n  0xE7A68D: 0x3252,\n  0xE7A6BE: 0x3253,\n  0xE7A8BC: 0x3254,\n  0xE7AE87: 0x3255,\n  0xE88AB1: 0x3256,\n  0xE88B9B: 0x3257,\n  0xE88C84: 0x3258,\n  0xE88DB7: 0x3259,\n  0xE88FAF: 0x325A,\n  0xE88F93: 0x325B,\n  0xE89DA6: 0x325C,\n  0xE8AAB2: 0x325D,\n  0xE598A9: 0x325E,\n  0xE8B2A8: 0x325F,\n  0xE8BFA6: 0x3260,\n  0xE9818E: 0x3261,\n  0xE99C9E: 0x3262,\n  0xE89A8A: 0x3263,\n  0xE4BF84: 0x3264,\n  0xE5B3A8: 0x3265,\n  0xE68891: 0x3266,\n  0xE78999: 0x3267,\n  0xE794BB: 0x3268,\n  0xE887A5: 0x3269,\n  0xE88ABD: 0x326A,\n  0xE89BBE: 0x326B,\n  0xE8B380: 0x326C,\n  0xE99B85: 0x326D,\n  0xE9A493: 0x326E,\n  0xE9A795: 0x326F,\n  0xE4BB8B: 0x3270,\n  0xE4BC9A: 0x3271,\n  0xE8A7A3: 0x3272,\n  0xE59B9E: 0x3273,\n  0xE5A18A: 0x3274,\n  0xE5A38A: 0x3275,\n  0xE5BBBB: 0x3276,\n  0xE5BFAB: 0x3277,\n  0xE680AA: 0x3278,\n  0xE68294: 0x3279,\n  0xE681A2: 0x327A,\n  0xE68790: 0x327B,\n  0xE68892: 0x327C,\n  0xE68B90: 0x327D,\n  0xE694B9: 0x327E,\n  0xE9AD81: 0x3321,\n  0xE699A6: 0x3322,\n  0xE6A2B0: 0x3323,\n  0xE6B5B7: 0x3324,\n  0xE781B0: 0x3325,\n  0xE7958C: 0x3326,\n  0xE79A86: 0x3327,\n  0xE7B5B5: 0x3328,\n  0xE88AA5: 0x3329,\n  0xE89FB9: 0x332A,\n  0xE9968B: 0x332B,\n  0xE99A8E: 0x332C,\n  0xE8B29D: 0x332D,\n  0xE587B1: 0x332E,\n  0xE58ABE: 0x332F,\n  0xE5A496: 0x3330,\n  0xE592B3: 0x3331,\n  0xE5AEB3: 0x3332,\n  0xE5B496: 0x3333,\n  0xE685A8: 0x3334,\n  0xE6A682: 0x3335,\n  0xE6B6AF: 0x3336,\n  0xE7A28D: 0x3337,\n  0xE8938B: 0x3338,\n  0xE8A197: 0x3339,\n  0xE8A9B2: 0x333A,\n  0xE98EA7: 0x333B,\n  0xE9AAB8: 0x333C,\n  0xE6B5AC: 0x333D,\n  0xE9A6A8: 0x333E,\n  0xE89B99: 0x333F,\n  0xE59EA3: 0x3340,\n  0xE69FBF: 0x3341,\n  0xE89B8E: 0x3342,\n  0xE9888E: 0x3343,\n  0xE58A83: 0x3344,\n  0xE59A87: 0x3345,\n  0xE59084: 0x3346,\n  0xE5BB93: 0x3347,\n  0xE68BA1: 0x3348,\n  0xE692B9: 0x3349,\n  0xE6A0BC: 0x334A,\n  0xE6A0B8: 0x334B,\n  0xE6AEBB: 0x334C,\n  0xE78DB2: 0x334D,\n  0xE7A2BA: 0x334E,\n  0xE7A9AB: 0x334F,\n  0xE8A69A: 0x3350,\n  0xE8A792: 0x3351,\n  0xE8B5AB: 0x3352,\n  0xE8BC83: 0x3353,\n  0xE983AD: 0x3354,\n  0xE996A3: 0x3355,\n  0xE99A94: 0x3356,\n  0xE99DA9: 0x3357,\n  0xE5ADA6: 0x3358,\n  0xE5B2B3: 0x3359,\n  0xE6A5BD: 0x335A,\n  0xE9A18D: 0x335B,\n  0xE9A18E: 0x335C,\n  0xE68E9B: 0x335D,\n  0xE7ACA0: 0x335E,\n  0xE6A8AB: 0x335F,\n  0xE6A9BF: 0x3360,\n  0xE6A2B6: 0x3361,\n  0xE9B08D: 0x3362,\n  0xE6BD9F: 0x3363,\n  0xE589B2: 0x3364,\n  0xE5969D: 0x3365,\n  0xE681B0: 0x3366,\n  0xE68BAC: 0x3367,\n  0xE6B4BB: 0x3368,\n  0xE6B887: 0x3369,\n  0xE6BB91: 0x336A,\n  0xE8919B: 0x336B,\n  0xE8A490: 0x336C,\n  0xE8BD84: 0x336D,\n  0xE4B894: 0x336E,\n  0xE9B0B9: 0x336F,\n  0xE58FB6: 0x3370,\n  0xE6A49B: 0x3371,\n  0xE6A8BA: 0x3372,\n  0xE99E84: 0x3373,\n  0xE6A0AA: 0x3374,\n  0xE5859C: 0x3375,\n  0xE7AB83: 0x3376,\n  0xE892B2: 0x3377,\n  0xE9879C: 0x3378,\n  0xE98E8C: 0x3379,\n  0xE5999B: 0x337A,\n  0xE9B4A8: 0x337B,\n  0xE6A0A2: 0x337C,\n  0xE88C85: 0x337D,\n  0xE890B1: 0x337E,\n  0xE7B2A5: 0x3421,\n  0xE58888: 0x3422,\n  0xE88B85: 0x3423,\n  0xE793A6: 0x3424,\n  0xE4B9BE: 0x3425,\n  0xE4BE83: 0x3426,\n  0xE586A0: 0x3427,\n  0xE5AF92: 0x3428,\n  0xE5888A: 0x3429,\n  0xE58B98: 0x342A,\n  0xE58BA7: 0x342B,\n  0xE5B7BB: 0x342C,\n  0xE5969A: 0x342D,\n  0xE5A0AA: 0x342E,\n  0xE5A7A6: 0x342F,\n  0xE5AE8C: 0x3430,\n  0xE5AE98: 0x3431,\n  0xE5AF9B: 0x3432,\n  0xE5B9B2: 0x3433,\n  0xE5B9B9: 0x3434,\n  0xE682A3: 0x3435,\n  0xE6849F: 0x3436,\n  0xE685A3: 0x3437,\n  0xE686BE: 0x3438,\n  0xE68F9B: 0x3439,\n  0xE695A2: 0x343A,\n  0xE69F91: 0x343B,\n  0xE6A193: 0x343C,\n  0xE6A3BA: 0x343D,\n  0xE6ACBE: 0x343E,\n  0xE6AD93: 0x343F,\n  0xE6B197: 0x3440,\n  0xE6BCA2: 0x3441,\n  0xE6BE97: 0x3442,\n  0xE6BD85: 0x3443,\n  0xE792B0: 0x3444,\n  0xE79498: 0x3445,\n  0xE79BA3: 0x3446,\n  0xE79C8B: 0x3447,\n  0xE7ABBF: 0x3448,\n  0xE7AEA1: 0x3449,\n  0xE7B0A1: 0x344A,\n  0xE7B7A9: 0x344B,\n  0xE7BCB6: 0x344C,\n  0xE7BFB0: 0x344D,\n  0xE8829D: 0x344E,\n  0xE889A6: 0x344F,\n  0xE88E9E: 0x3450,\n  0xE8A6B3: 0x3451,\n  0xE8AB8C: 0x3452,\n  0xE8B2AB: 0x3453,\n  0xE98284: 0x3454,\n  0xE99191: 0x3455,\n  0xE99693: 0x3456,\n  0xE99691: 0x3457,\n  0xE996A2: 0x3458,\n  0xE999A5: 0x3459,\n  0xE99F93: 0x345A,\n  0xE9A4A8: 0x345B,\n  0xE88898: 0x345C,\n  0xE4B8B8: 0x345D,\n  0xE590AB: 0x345E,\n  0xE5B2B8: 0x345F,\n  0xE5B78C: 0x3460,\n  0xE78EA9: 0x3461,\n  0xE7998C: 0x3462,\n  0xE79CBC: 0x3463,\n  0xE5B2A9: 0x3464,\n  0xE7BFAB: 0x3465,\n  0xE8B48B: 0x3466,\n  0xE99B81: 0x3467,\n  0xE9A091: 0x3468,\n  0xE9A194: 0x3469,\n  0xE9A198: 0x346A,\n  0xE4BC81: 0x346B,\n  0xE4BC8E: 0x346C,\n  0xE58DB1: 0x346D,\n  0xE5969C: 0x346E,\n  0xE599A8: 0x346F,\n  0xE59FBA: 0x3470,\n  0xE5A587: 0x3471,\n  0xE5AC89: 0x3472,\n  0xE5AF84: 0x3473,\n  0xE5B290: 0x3474,\n  0xE5B88C: 0x3475,\n  0xE5B9BE: 0x3476,\n  0xE5BF8C: 0x3477,\n  0xE68FAE: 0x3478,\n  0xE69CBA: 0x3479,\n  0xE69797: 0x347A,\n  0xE697A2: 0x347B,\n  0xE69C9F: 0x347C,\n  0xE6A38B: 0x347D,\n  0xE6A384: 0x347E,\n  0xE6A99F: 0x3521,\n  0xE5B8B0: 0x3522,\n  0xE6AF85: 0x3523,\n  0xE6B097: 0x3524,\n  0xE6B1BD: 0x3525,\n  0xE795BF: 0x3526,\n  0xE7A588: 0x3527,\n  0xE5ADA3: 0x3528,\n  0xE7A880: 0x3529,\n  0xE7B480: 0x352A,\n  0xE5BEBD: 0x352B,\n  0xE8A68F: 0x352C,\n  0xE8A898: 0x352D,\n  0xE8B2B4: 0x352E,\n  0xE8B5B7: 0x352F,\n  0xE8BB8C: 0x3530,\n  0xE8BC9D: 0x3531,\n  0xE9A3A2: 0x3532,\n  0xE9A88E: 0x3533,\n  0xE9ACBC: 0x3534,\n  0xE4BA80: 0x3535,\n  0xE581BD: 0x3536,\n  0xE58480: 0x3537,\n  0xE5A693: 0x3538,\n  0xE5AE9C: 0x3539,\n  0xE688AF: 0x353A,\n  0xE68A80: 0x353B,\n  0xE693AC: 0x353C,\n  0xE6ACBA: 0x353D,\n  0xE78AA0: 0x353E,\n  0xE79691: 0x353F,\n  0xE7A587: 0x3540,\n  0xE7BEA9: 0x3541,\n  0xE89FBB: 0x3542,\n  0xE8AABC: 0x3543,\n  0xE8ADB0: 0x3544,\n  0xE68EAC: 0x3545,\n  0xE88F8A: 0x3546,\n  0xE99EA0: 0x3547,\n  0xE59089: 0x3548,\n  0xE59083: 0x3549,\n  0xE596AB: 0x354A,\n  0xE6A194: 0x354B,\n  0xE6A998: 0x354C,\n  0xE8A9B0: 0x354D,\n  0xE7A0A7: 0x354E,\n  0xE69DB5: 0x354F,\n  0xE9BB8D: 0x3550,\n  0xE58DB4: 0x3551,\n  0xE5AEA2: 0x3552,\n  0xE8849A: 0x3553,\n  0xE89990: 0x3554,\n  0xE98086: 0x3555,\n  0xE4B898: 0x3556,\n  0xE4B985: 0x3557,\n  0xE4BB87: 0x3558,\n  0xE4BC91: 0x3559,\n  0xE58F8A: 0x355A,\n  0xE590B8: 0x355B,\n  0xE5AEAE: 0x355C,\n  0xE5BC93: 0x355D,\n  0xE680A5: 0x355E,\n  0xE69591: 0x355F,\n  0xE69CBD: 0x3560,\n  0xE6B182: 0x3561,\n  0xE6B1B2: 0x3562,\n  0xE6B3A3: 0x3563,\n  0xE781B8: 0x3564,\n  0xE79083: 0x3565,\n  0xE7A9B6: 0x3566,\n  0xE7AAAE: 0x3567,\n  0xE7AC88: 0x3568,\n  0xE7B49A: 0x3569,\n  0xE7B3BE: 0x356A,\n  0xE7B5A6: 0x356B,\n  0xE697A7: 0x356C,\n  0xE7899B: 0x356D,\n  0xE58EBB: 0x356E,\n  0xE5B185: 0x356F,\n  0xE5B7A8: 0x3570,\n  0xE68B92: 0x3571,\n  0xE68BA0: 0x3572,\n  0xE68C99: 0x3573,\n  0xE6B8A0: 0x3574,\n  0xE8999A: 0x3575,\n  0xE8A8B1: 0x3576,\n  0xE8B79D: 0x3577,\n  0xE98BB8: 0x3578,\n  0xE6BC81: 0x3579,\n  0xE7A6A6: 0x357A,\n  0xE9AD9A: 0x357B,\n  0xE4BAA8: 0x357C,\n  0xE4BAAB: 0x357D,\n  0xE4BAAC: 0x357E,\n  0xE4BE9B: 0x3621,\n  0xE4BEA0: 0x3622,\n  0xE58391: 0x3623,\n  0xE58587: 0x3624,\n  0xE7ABB6: 0x3625,\n  0xE585B1: 0x3626,\n  0xE587B6: 0x3627,\n  0xE58D94: 0x3628,\n  0xE58CA1: 0x3629,\n  0xE58DBF: 0x362A,\n  0xE58FAB: 0x362B,\n  0xE596AC: 0x362C,\n  0xE5A283: 0x362D,\n  0xE5B3A1: 0x362E,\n  0xE5BCB7: 0x362F,\n  0xE5BD8A: 0x3630,\n  0xE680AF: 0x3631,\n  0xE68190: 0x3632,\n  0xE681AD: 0x3633,\n  0xE68C9F: 0x3634,\n  0xE69599: 0x3635,\n  0xE6A98B: 0x3636,\n  0xE6B381: 0x3637,\n  0xE78B82: 0x3638,\n  0xE78BAD: 0x3639,\n  0xE79FAF: 0x363A,\n  0xE883B8: 0x363B,\n  0xE88485: 0x363C,\n  0xE88888: 0x363D,\n  0xE8958E: 0x363E,\n  0xE983B7: 0x363F,\n  0xE98FA1: 0x3640,\n  0xE99FBF: 0x3641,\n  0xE9A597: 0x3642,\n  0xE9A99A: 0x3643,\n  0xE4BBB0: 0x3644,\n  0xE5879D: 0x3645,\n  0xE5B0AD: 0x3646,\n  0xE69A81: 0x3647,\n  0xE6A5AD: 0x3648,\n  0xE5B180: 0x3649,\n  0xE69BB2: 0x364A,\n  0xE6A5B5: 0x364B,\n  0xE78E89: 0x364C,\n  0xE6A190: 0x364D,\n  0xE7B281: 0x364E,\n  0xE58385: 0x364F,\n  0xE58BA4: 0x3650,\n  0xE59D87: 0x3651,\n  0xE5B7BE: 0x3652,\n  0xE98CA6: 0x3653,\n  0xE696A4: 0x3654,\n  0xE6ACA3: 0x3655,\n  0xE6ACBD: 0x3656,\n  0xE790B4: 0x3657,\n  0xE7A681: 0x3658,\n  0xE7A6BD: 0x3659,\n  0xE7AD8B: 0x365A,\n  0xE7B78A: 0x365B,\n  0xE88AB9: 0x365C,\n  0xE88F8C: 0x365D,\n  0xE8A1BF: 0x365E,\n  0xE8A59F: 0x365F,\n  0xE8ACB9: 0x3660,\n  0xE8BF91: 0x3661,\n  0xE98791: 0x3662,\n  0xE5909F: 0x3663,\n  0xE98A80: 0x3664,\n  0xE4B99D: 0x3665,\n  0xE580B6: 0x3666,\n  0xE58FA5: 0x3667,\n  0xE58CBA: 0x3668,\n  0xE78B97: 0x3669,\n  0xE78E96: 0x366A,\n  0xE79FA9: 0x366B,\n  0xE88BA6: 0x366C,\n  0xE8BAAF: 0x366D,\n  0xE9A786: 0x366E,\n  0xE9A788: 0x366F,\n  0xE9A792: 0x3670,\n  0xE585B7: 0x3671,\n  0xE6849A: 0x3672,\n  0xE8999E: 0x3673,\n  0xE596B0: 0x3674,\n  0xE7A9BA: 0x3675,\n  0xE581B6: 0x3676,\n  0xE5AF93: 0x3677,\n  0xE98187: 0x3678,\n  0xE99A85: 0x3679,\n  0xE4B8B2: 0x367A,\n  0xE6AB9B: 0x367B,\n  0xE987A7: 0x367C,\n  0xE5B191: 0x367D,\n  0xE5B188: 0x367E,\n  0xE68E98: 0x3721,\n  0xE7AA9F: 0x3722,\n  0xE6B293: 0x3723,\n  0xE99DB4: 0x3724,\n  0xE8BDA1: 0x3725,\n  0xE7AAAA: 0x3726,\n  0xE7868A: 0x3727,\n  0xE99A88: 0x3728,\n  0xE7B282: 0x3729,\n  0xE6A097: 0x372A,\n  0xE7B9B0: 0x372B,\n  0xE6A191: 0x372C,\n  0xE98DAC: 0x372D,\n  0xE58BB2: 0x372E,\n  0xE5909B: 0x372F,\n  0xE896AB: 0x3730,\n  0xE8A893: 0x3731,\n  0xE7BEA4: 0x3732,\n  0xE8BB8D: 0x3733,\n  0xE983A1: 0x3734,\n  0xE58DA6: 0x3735,\n  0xE8A288: 0x3736,\n  0xE7A581: 0x3737,\n  0xE4BF82: 0x3738,\n  0xE582BE: 0x3739,\n  0xE58891: 0x373A,\n  0xE58584: 0x373B,\n  0xE59593: 0x373C,\n  0xE59CAD: 0x373D,\n  0xE78FAA: 0x373E,\n  0xE59E8B: 0x373F,\n  0xE5A591: 0x3740,\n  0xE5BDA2: 0x3741,\n  0xE5BE84: 0x3742,\n  0xE681B5: 0x3743,\n  0xE685B6: 0x3744,\n  0xE685A7: 0x3745,\n  0xE686A9: 0x3746,\n  0xE68EB2: 0x3747,\n  0xE690BA: 0x3748,\n  0xE695AC: 0x3749,\n  0xE699AF: 0x374A,\n  0xE6A182: 0x374B,\n  0xE6B893: 0x374C,\n  0xE795A6: 0x374D,\n  0xE7A8BD: 0x374E,\n  0xE7B3BB: 0x374F,\n  0xE7B58C: 0x3750,\n  0xE7B699: 0x3751,\n  0xE7B98B: 0x3752,\n  0xE7BDAB: 0x3753,\n  0xE88C8E: 0x3754,\n  0xE88D8A: 0x3755,\n  0xE89B8D: 0x3756,\n  0xE8A888: 0x3757,\n  0xE8A9A3: 0x3758,\n  0xE8ADA6: 0x3759,\n  0xE8BBBD: 0x375A,\n  0xE9A09A: 0x375B,\n  0xE9B68F: 0x375C,\n  0xE88AB8: 0x375D,\n  0xE8BF8E: 0x375E,\n  0xE9AFA8: 0x375F,\n  0xE58A87: 0x3760,\n  0xE6889F: 0x3761,\n  0xE69283: 0x3762,\n  0xE6BF80: 0x3763,\n  0xE99A99: 0x3764,\n  0xE6A181: 0x3765,\n  0xE58291: 0x3766,\n  0xE6ACA0: 0x3767,\n  0xE6B1BA: 0x3768,\n  0xE6BD94: 0x3769,\n  0xE7A9B4: 0x376A,\n  0xE7B590: 0x376B,\n  0xE8A180: 0x376C,\n  0xE8A8A3: 0x376D,\n  0xE69C88: 0x376E,\n  0xE4BBB6: 0x376F,\n  0xE580B9: 0x3770,\n  0xE580A6: 0x3771,\n  0xE581A5: 0x3772,\n  0xE585BC: 0x3773,\n  0xE588B8: 0x3774,\n  0xE589A3: 0x3775,\n  0xE596A7: 0x3776,\n  0xE59C8F: 0x3777,\n  0xE5A085: 0x3778,\n  0xE5AB8C: 0x3779,\n  0xE5BBBA: 0x377A,\n  0xE686B2: 0x377B,\n  0xE687B8: 0x377C,\n  0xE68BB3: 0x377D,\n  0xE68DB2: 0x377E,\n  0xE6A49C: 0x3821,\n  0xE6A8A9: 0x3822,\n  0xE789BD: 0x3823,\n  0xE78AAC: 0x3824,\n  0xE78CAE: 0x3825,\n  0xE7A094: 0x3826,\n  0xE7A1AF: 0x3827,\n  0xE7B5B9: 0x3828,\n  0xE79C8C: 0x3829,\n  0xE882A9: 0x382A,\n  0xE8A68B: 0x382B,\n  0xE8AC99: 0x382C,\n  0xE8B3A2: 0x382D,\n  0xE8BB92: 0x382E,\n  0xE981A3: 0x382F,\n  0xE98DB5: 0x3830,\n  0xE999BA: 0x3831,\n  0xE9A195: 0x3832,\n  0xE9A893: 0x3833,\n  0xE9B9B8: 0x3834,\n  0xE58583: 0x3835,\n  0xE58E9F: 0x3836,\n  0xE58EB3: 0x3837,\n  0xE5B9BB: 0x3838,\n  0xE5BCA6: 0x3839,\n  0xE6B89B: 0x383A,\n  0xE6BA90: 0x383B,\n  0xE78E84: 0x383C,\n  0xE78FBE: 0x383D,\n  0xE7B583: 0x383E,\n  0xE888B7: 0x383F,\n  0xE8A880: 0x3840,\n  0xE8ABBA: 0x3841,\n  0xE99990: 0x3842,\n  0xE4B98E: 0x3843,\n  0xE5808B: 0x3844,\n  0xE58FA4: 0x3845,\n  0xE591BC: 0x3846,\n  0xE59BBA: 0x3847,\n  0xE5A791: 0x3848,\n  0xE5ADA4: 0x3849,\n  0xE5B7B1: 0x384A,\n  0xE5BAAB: 0x384B,\n  0xE5BCA7: 0x384C,\n  0xE688B8: 0x384D,\n  0xE69585: 0x384E,\n  0xE69EAF: 0x384F,\n  0xE6B996: 0x3850,\n  0xE78B90: 0x3851,\n  0xE7B38A: 0x3852,\n  0xE8A2B4: 0x3853,\n  0xE882A1: 0x3854,\n  0xE883A1: 0x3855,\n  0xE88FB0: 0x3856,\n  0xE8998E: 0x3857,\n  0xE8AA87: 0x3858,\n  0xE8B7A8: 0x3859,\n  0xE988B7: 0x385A,\n  0xE99B87: 0x385B,\n  0xE9A1A7: 0x385C,\n  0xE9BC93: 0x385D,\n  0xE4BA94: 0x385E,\n  0xE4BA92: 0x385F,\n  0xE4BC8D: 0x3860,\n  0xE58D88: 0x3861,\n  0xE59189: 0x3862,\n  0xE590BE: 0x3863,\n  0xE5A8AF: 0x3864,\n  0xE5BE8C: 0x3865,\n  0xE5BEA1: 0x3866,\n  0xE6829F: 0x3867,\n  0xE6A2A7: 0x3868,\n  0xE6AA8E: 0x3869,\n  0xE7919A: 0x386A,\n  0xE7A281: 0x386B,\n  0xE8AA9E: 0x386C,\n  0xE8AAA4: 0x386D,\n  0xE8ADB7: 0x386E,\n  0xE98690: 0x386F,\n  0xE4B99E: 0x3870,\n  0xE9AF89: 0x3871,\n  0xE4BAA4: 0x3872,\n  0xE4BDBC: 0x3873,\n  0xE4BEAF: 0x3874,\n  0xE58099: 0x3875,\n  0xE58096: 0x3876,\n  0xE58589: 0x3877,\n  0xE585AC: 0x3878,\n  0xE58A9F: 0x3879,\n  0xE58AB9: 0x387A,\n  0xE58BBE: 0x387B,\n  0xE58E9A: 0x387C,\n  0xE58FA3: 0x387D,\n  0xE59091: 0x387E,\n  0xE5908E: 0x3921,\n  0xE59689: 0x3922,\n  0xE59D91: 0x3923,\n  0xE59EA2: 0x3924,\n  0xE5A5BD: 0x3925,\n  0xE5AD94: 0x3926,\n  0xE5AD9D: 0x3927,\n  0xE5AE8F: 0x3928,\n  0xE5B7A5: 0x3929,\n  0xE5B7A7: 0x392A,\n  0xE5B7B7: 0x392B,\n  0xE5B9B8: 0x392C,\n  0xE5BA83: 0x392D,\n  0xE5BA9A: 0x392E,\n  0xE5BAB7: 0x392F,\n  0xE5BC98: 0x3930,\n  0xE68192: 0x3931,\n  0xE6858C: 0x3932,\n  0xE68A97: 0x3933,\n  0xE68B98: 0x3934,\n  0xE68EA7: 0x3935,\n  0xE694BB: 0x3936,\n  0xE69882: 0x3937,\n  0xE69983: 0x3938,\n  0xE69BB4: 0x3939,\n  0xE69DAD: 0x393A,\n  0xE6A0A1: 0x393B,\n  0xE6A297: 0x393C,\n  0xE6A78B: 0x393D,\n  0xE6B19F: 0x393E,\n  0xE6B4AA: 0x393F,\n  0xE6B5A9: 0x3940,\n  0xE6B8AF: 0x3941,\n  0xE6BA9D: 0x3942,\n  0xE794B2: 0x3943,\n  0xE79A87: 0x3944,\n  0xE7A1AC: 0x3945,\n  0xE7A8BF: 0x3946,\n  0xE7B3A0: 0x3947,\n  0xE7B485: 0x3948,\n  0xE7B498: 0x3949,\n  0xE7B59E: 0x394A,\n  0xE7B6B1: 0x394B,\n  0xE88095: 0x394C,\n  0xE88083: 0x394D,\n  0xE882AF: 0x394E,\n  0xE882B1: 0x394F,\n  0xE88594: 0x3950,\n  0xE8868F: 0x3951,\n  0xE888AA: 0x3952,\n  0xE88D92: 0x3953,\n  0xE8A18C: 0x3954,\n  0xE8A1A1: 0x3955,\n  0xE8AC9B: 0x3956,\n  0xE8B2A2: 0x3957,\n  0xE8B3BC: 0x3958,\n  0xE9838A: 0x3959,\n  0xE985B5: 0x395A,\n  0xE989B1: 0x395B,\n  0xE7A0BF: 0x395C,\n  0xE98BBC: 0x395D,\n  0xE996A4: 0x395E,\n  0xE9998D: 0x395F,\n  0xE9A085: 0x3960,\n  0xE9A699: 0x3961,\n  0xE9AB98: 0x3962,\n  0xE9B4BB: 0x3963,\n  0xE5899B: 0x3964,\n  0xE58AAB: 0x3965,\n  0xE58FB7: 0x3966,\n  0xE59088: 0x3967,\n  0xE5A395: 0x3968,\n  0xE68BB7: 0x3969,\n  0xE6BFA0: 0x396A,\n  0xE8B1AA: 0x396B,\n  0xE8BD9F: 0x396C,\n  0xE9BAB9: 0x396D,\n  0xE5858B: 0x396E,\n  0xE588BB: 0x396F,\n  0xE5918A: 0x3970,\n  0xE59BBD: 0x3971,\n  0xE7A980: 0x3972,\n  0xE985B7: 0x3973,\n  0xE9B5A0: 0x3974,\n  0xE9BB92: 0x3975,\n  0xE78D84: 0x3976,\n  0xE6BC89: 0x3977,\n  0xE885B0: 0x3978,\n  0xE79491: 0x3979,\n  0xE5BFBD: 0x397A,\n  0xE6839A: 0x397B,\n  0xE9AAA8: 0x397C,\n  0xE78B9B: 0x397D,\n  0xE8BEBC: 0x397E,\n  0xE6ADA4: 0x3A21,\n  0xE9A083: 0x3A22,\n  0xE4BB8A: 0x3A23,\n  0xE59BB0: 0x3A24,\n  0xE59DA4: 0x3A25,\n  0xE5A2BE: 0x3A26,\n  0xE5A99A: 0x3A27,\n  0xE681A8: 0x3A28,\n  0xE68787: 0x3A29,\n  0xE6988F: 0x3A2A,\n  0xE69886: 0x3A2B,\n  0xE6A0B9: 0x3A2C,\n  0xE6A2B1: 0x3A2D,\n  0xE6B7B7: 0x3A2E,\n  0xE79795: 0x3A2F,\n  0xE7B4BA: 0x3A30,\n  0xE889AE: 0x3A31,\n  0xE9AD82: 0x3A32,\n  0xE4BA9B: 0x3A33,\n  0xE4BD90: 0x3A34,\n  0xE58F89: 0x3A35,\n  0xE59486: 0x3A36,\n  0xE5B5AF: 0x3A37,\n  0xE5B7A6: 0x3A38,\n  0xE5B7AE: 0x3A39,\n  0xE69FBB: 0x3A3A,\n  0xE6B299: 0x3A3B,\n  0xE791B3: 0x3A3C,\n  0xE7A082: 0x3A3D,\n  0xE8A990: 0x3A3E,\n  0xE98E96: 0x3A3F,\n  0xE8A39F: 0x3A40,\n  0xE59D90: 0x3A41,\n  0xE5BAA7: 0x3A42,\n  0xE68CAB: 0x3A43,\n  0xE582B5: 0x3A44,\n  0xE582AC: 0x3A45,\n  0xE5868D: 0x3A46,\n  0xE69C80: 0x3A47,\n  0xE59389: 0x3A48,\n  0xE5A19E: 0x3A49,\n  0xE5A6BB: 0x3A4A,\n  0xE5AEB0: 0x3A4B,\n  0xE5BDA9: 0x3A4C,\n  0xE6898D: 0x3A4D,\n  0xE68EA1: 0x3A4E,\n  0xE6A0BD: 0x3A4F,\n  0xE6ADB3: 0x3A50,\n  0xE6B888: 0x3A51,\n  0xE781BD: 0x3A52,\n  0xE98787: 0x3A53,\n  0xE78A80: 0x3A54,\n  0xE7A095: 0x3A55,\n  0xE7A0A6: 0x3A56,\n  0xE7A5AD: 0x3A57,\n  0xE6968E: 0x3A58,\n  0xE7B4B0: 0x3A59,\n  0xE88F9C: 0x3A5A,\n  0xE8A381: 0x3A5B,\n  0xE8BC89: 0x3A5C,\n  0xE99A9B: 0x3A5D,\n  0xE589A4: 0x3A5E,\n  0xE59CA8: 0x3A5F,\n  0xE69D90: 0x3A60,\n  0xE7BDAA: 0x3A61,\n  0xE8B2A1: 0x3A62,\n  0xE586B4: 0x3A63,\n  0xE59D82: 0x3A64,\n  0xE998AA: 0x3A65,\n  0xE5A0BA: 0x3A66,\n  0xE6A68A: 0x3A67,\n  0xE882B4: 0x3A68,\n  0xE592B2: 0x3A69,\n  0xE5B48E: 0x3A6A,\n  0xE59FBC: 0x3A6B,\n  0xE7A295: 0x3A6C,\n  0xE9B7BA: 0x3A6D,\n  0xE4BD9C: 0x3A6E,\n  0xE5898A: 0x3A6F,\n  0xE5928B: 0x3A70,\n  0xE690BE: 0x3A71,\n  0xE698A8: 0x3A72,\n  0xE69C94: 0x3A73,\n  0xE69FB5: 0x3A74,\n  0xE7AA84: 0x3A75,\n  0xE7AD96: 0x3A76,\n  0xE7B4A2: 0x3A77,\n  0xE98CAF: 0x3A78,\n  0xE6A19C: 0x3A79,\n  0xE9AEAD: 0x3A7A,\n  0xE7ACB9: 0x3A7B,\n  0xE58C99: 0x3A7C,\n  0xE5868A: 0x3A7D,\n  0xE588B7: 0x3A7E,\n  0xE5AF9F: 0x3B21,\n  0xE68BB6: 0x3B22,\n  0xE692AE: 0x3B23,\n  0xE693A6: 0x3B24,\n  0xE69CAD: 0x3B25,\n  0xE6AEBA: 0x3B26,\n  0xE896A9: 0x3B27,\n  0xE99B91: 0x3B28,\n  0xE79A90: 0x3B29,\n  0xE9AF96: 0x3B2A,\n  0xE68D8C: 0x3B2B,\n  0xE98C86: 0x3B2C,\n  0xE9AEAB: 0x3B2D,\n  0xE79ABF: 0x3B2E,\n  0xE69992: 0x3B2F,\n  0xE4B889: 0x3B30,\n  0xE58298: 0x3B31,\n  0xE58F82: 0x3B32,\n  0xE5B1B1: 0x3B33,\n  0xE683A8: 0x3B34,\n  0xE69292: 0x3B35,\n  0xE695A3: 0x3B36,\n  0xE6A19F: 0x3B37,\n  0xE787A6: 0x3B38,\n  0xE78F8A: 0x3B39,\n  0xE794A3: 0x3B3A,\n  0xE7AE97: 0x3B3B,\n  0xE7BA82: 0x3B3C,\n  0xE89A95: 0x3B3D,\n  0xE8AE83: 0x3B3E,\n  0xE8B39B: 0x3B3F,\n  0xE985B8: 0x3B40,\n  0xE9A490: 0x3B41,\n  0xE696AC: 0x3B42,\n  0xE69AAB: 0x3B43,\n  0xE6AE8B: 0x3B44,\n  0xE4BB95: 0x3B45,\n  0xE4BB94: 0x3B46,\n  0xE4BCBA: 0x3B47,\n  0xE4BDBF: 0x3B48,\n  0xE588BA: 0x3B49,\n  0xE58FB8: 0x3B4A,\n  0xE58FB2: 0x3B4B,\n  0xE597A3: 0x3B4C,\n  0xE59B9B: 0x3B4D,\n  0xE5A3AB: 0x3B4E,\n  0xE5A78B: 0x3B4F,\n  0xE5A789: 0x3B50,\n  0xE5A7BF: 0x3B51,\n  0xE5AD90: 0x3B52,\n  0xE5B18D: 0x3B53,\n  0xE5B882: 0x3B54,\n  0xE5B8AB: 0x3B55,\n  0xE5BF97: 0x3B56,\n  0xE6809D: 0x3B57,\n  0xE68C87: 0x3B58,\n  0xE694AF: 0x3B59,\n  0xE5AD9C: 0x3B5A,\n  0xE696AF: 0x3B5B,\n  0xE696BD: 0x3B5C,\n  0xE697A8: 0x3B5D,\n  0xE69E9D: 0x3B5E,\n  0xE6ADA2: 0x3B5F,\n  0xE6ADBB: 0x3B60,\n  0xE6B08F: 0x3B61,\n  0xE78D85: 0x3B62,\n  0xE7A589: 0x3B63,\n  0xE7A781: 0x3B64,\n  0xE7B3B8: 0x3B65,\n  0xE7B499: 0x3B66,\n  0xE7B4AB: 0x3B67,\n  0xE882A2: 0x3B68,\n  0xE88482: 0x3B69,\n  0xE887B3: 0x3B6A,\n  0xE8A696: 0x3B6B,\n  0xE8A99E: 0x3B6C,\n  0xE8A9A9: 0x3B6D,\n  0xE8A9A6: 0x3B6E,\n  0xE8AA8C: 0x3B6F,\n  0xE8ABAE: 0x3B70,\n  0xE8B387: 0x3B71,\n  0xE8B39C: 0x3B72,\n  0xE99B8C: 0x3B73,\n  0xE9A3BC: 0x3B74,\n  0xE6ADAF: 0x3B75,\n  0xE4BA8B: 0x3B76,\n  0xE4BCBC: 0x3B77,\n  0xE4BE8D: 0x3B78,\n  0xE58590: 0x3B79,\n  0xE5AD97: 0x3B7A,\n  0xE5AFBA: 0x3B7B,\n  0xE68588: 0x3B7C,\n  0xE68C81: 0x3B7D,\n  0xE69982: 0x3B7E,\n  0xE6ACA1: 0x3C21,\n  0xE6BB8B: 0x3C22,\n  0xE6B2BB: 0x3C23,\n  0xE788BE: 0x3C24,\n  0xE792BD: 0x3C25,\n  0xE79794: 0x3C26,\n  0xE7A381: 0x3C27,\n  0xE7A4BA: 0x3C28,\n  0xE8808C: 0x3C29,\n  0xE880B3: 0x3C2A,\n  0xE887AA: 0x3C2B,\n  0xE89294: 0x3C2C,\n  0xE8BE9E: 0x3C2D,\n  0xE6B190: 0x3C2E,\n  0xE9B9BF: 0x3C2F,\n  0xE5BC8F: 0x3C30,\n  0xE8AD98: 0x3C31,\n  0xE9B4AB: 0x3C32,\n  0xE7ABBA: 0x3C33,\n  0xE8BBB8: 0x3C34,\n  0xE5AE8D: 0x3C35,\n  0xE99BAB: 0x3C36,\n  0xE4B883: 0x3C37,\n  0xE58FB1: 0x3C38,\n  0xE59FB7: 0x3C39,\n  0xE5A4B1: 0x3C3A,\n  0xE5AB89: 0x3C3B,\n  0xE5AEA4: 0x3C3C,\n  0xE68289: 0x3C3D,\n  0xE6B9BF: 0x3C3E,\n  0xE6BC86: 0x3C3F,\n  0xE796BE: 0x3C40,\n  0xE8B3AA: 0x3C41,\n  0xE5AE9F: 0x3C42,\n  0xE89480: 0x3C43,\n  0xE7AFA0: 0x3C44,\n  0xE581B2: 0x3C45,\n  0xE69FB4: 0x3C46,\n  0xE88A9D: 0x3C47,\n  0xE5B1A1: 0x3C48,\n  0xE8958A: 0x3C49,\n  0xE7B89E: 0x3C4A,\n  0xE8888E: 0x3C4B,\n  0xE58699: 0x3C4C,\n  0xE5B084: 0x3C4D,\n  0xE68DA8: 0x3C4E,\n  0xE8B5A6: 0x3C4F,\n  0xE6969C: 0x3C50,\n  0xE785AE: 0x3C51,\n  0xE7A4BE: 0x3C52,\n  0xE7B497: 0x3C53,\n  0xE88085: 0x3C54,\n  0xE8AC9D: 0x3C55,\n  0xE8BB8A: 0x3C56,\n  0xE981AE: 0x3C57,\n  0xE89B87: 0x3C58,\n  0xE982AA: 0x3C59,\n  0xE5809F: 0x3C5A,\n  0xE58BBA: 0x3C5B,\n  0xE5B0BA: 0x3C5C,\n  0xE69D93: 0x3C5D,\n  0xE781BC: 0x3C5E,\n  0xE788B5: 0x3C5F,\n  0xE9858C: 0x3C60,\n  0xE98788: 0x3C61,\n  0xE98CAB: 0x3C62,\n  0xE88BA5: 0x3C63,\n  0xE5AF82: 0x3C64,\n  0xE5BCB1: 0x3C65,\n  0xE683B9: 0x3C66,\n  0xE4B8BB: 0x3C67,\n  0xE58F96: 0x3C68,\n  0xE5AE88: 0x3C69,\n  0xE6898B: 0x3C6A,\n  0xE69CB1: 0x3C6B,\n  0xE6AE8A: 0x3C6C,\n  0xE78BA9: 0x3C6D,\n  0xE78FA0: 0x3C6E,\n  0xE7A8AE: 0x3C6F,\n  0xE885AB: 0x3C70,\n  0xE8B6A3: 0x3C71,\n  0xE98592: 0x3C72,\n  0xE9A696: 0x3C73,\n  0xE58492: 0x3C74,\n  0xE58F97: 0x3C75,\n  0xE591AA: 0x3C76,\n  0xE5AFBF: 0x3C77,\n  0xE68E88: 0x3C78,\n  0xE6A8B9: 0x3C79,\n  0xE7B6AC: 0x3C7A,\n  0xE99C80: 0x3C7B,\n  0xE59B9A: 0x3C7C,\n  0xE58F8E: 0x3C7D,\n  0xE591A8: 0x3C7E,\n  0xE5AE97: 0x3D21,\n  0xE5B0B1: 0x3D22,\n  0xE5B79E: 0x3D23,\n  0xE4BFAE: 0x3D24,\n  0xE68481: 0x3D25,\n  0xE68BBE: 0x3D26,\n  0xE6B4B2: 0x3D27,\n  0xE7A780: 0x3D28,\n  0xE7A78B: 0x3D29,\n  0xE7B582: 0x3D2A,\n  0xE7B98D: 0x3D2B,\n  0xE7BF92: 0x3D2C,\n  0xE887AD: 0x3D2D,\n  0xE8889F: 0x3D2E,\n  0xE89290: 0x3D2F,\n  0xE8A186: 0x3D30,\n  0xE8A5B2: 0x3D31,\n  0xE8AE90: 0x3D32,\n  0xE8B9B4: 0x3D33,\n  0xE8BCAF: 0x3D34,\n  0xE980B1: 0x3D35,\n  0xE9858B: 0x3D36,\n  0xE985AC: 0x3D37,\n  0xE99B86: 0x3D38,\n  0xE9869C: 0x3D39,\n  0xE4BB80: 0x3D3A,\n  0xE4BD8F: 0x3D3B,\n  0xE58585: 0x3D3C,\n  0xE58D81: 0x3D3D,\n  0xE5BE93: 0x3D3E,\n  0xE6888E: 0x3D3F,\n  0xE69F94: 0x3D40,\n  0xE6B181: 0x3D41,\n  0xE6B88B: 0x3D42,\n  0xE78DA3: 0x3D43,\n  0xE7B8A6: 0x3D44,\n  0xE9878D: 0x3D45,\n  0xE98A83: 0x3D46,\n  0xE58F94: 0x3D47,\n  0xE5A499: 0x3D48,\n  0xE5AEBF: 0x3D49,\n  0xE6B791: 0x3D4A,\n  0xE7A59D: 0x3D4B,\n  0xE7B8AE: 0x3D4C,\n  0xE7B29B: 0x3D4D,\n  0xE5A1BE: 0x3D4E,\n  0xE7869F: 0x3D4F,\n  0xE587BA: 0x3D50,\n  0xE8A193: 0x3D51,\n  0xE8BFB0: 0x3D52,\n  0xE4BF8A: 0x3D53,\n  0xE5B3BB: 0x3D54,\n  0xE698A5: 0x3D55,\n  0xE79EAC: 0x3D56,\n  0xE7ABA3: 0x3D57,\n  0xE8889C: 0x3D58,\n  0xE9A7BF: 0x3D59,\n  0xE58786: 0x3D5A,\n  0xE5BEAA: 0x3D5B,\n  0xE697AC: 0x3D5C,\n  0xE6A5AF: 0x3D5D,\n  0xE6AE89: 0x3D5E,\n  0xE6B7B3: 0x3D5F,\n  0xE6BA96: 0x3D60,\n  0xE6BDA4: 0x3D61,\n  0xE79BBE: 0x3D62,\n  0xE7B494: 0x3D63,\n  0xE5B7A1: 0x3D64,\n  0xE981B5: 0x3D65,\n  0xE98687: 0x3D66,\n  0xE9A086: 0x3D67,\n  0xE587A6: 0x3D68,\n  0xE5889D: 0x3D69,\n  0xE68980: 0x3D6A,\n  0xE69A91: 0x3D6B,\n  0xE69B99: 0x3D6C,\n  0xE6B89A: 0x3D6D,\n  0xE5BAB6: 0x3D6E,\n  0xE7B792: 0x3D6F,\n  0xE7BDB2: 0x3D70,\n  0xE69BB8: 0x3D71,\n  0xE896AF: 0x3D72,\n  0xE897B7: 0x3D73,\n  0xE8ABB8: 0x3D74,\n  0xE58AA9: 0x3D75,\n  0xE58F99: 0x3D76,\n  0xE5A5B3: 0x3D77,\n  0xE5BA8F: 0x3D78,\n  0xE5BE90: 0x3D79,\n  0xE68195: 0x3D7A,\n  0xE98BA4: 0x3D7B,\n  0xE999A4: 0x3D7C,\n  0xE582B7: 0x3D7D,\n  0xE5849F: 0x3D7E,\n  0xE58B9D: 0x3E21,\n  0xE58CA0: 0x3E22,\n  0xE58D87: 0x3E23,\n  0xE58FAC: 0x3E24,\n  0xE593A8: 0x3E25,\n  0xE59586: 0x3E26,\n  0xE594B1: 0x3E27,\n  0xE59897: 0x3E28,\n  0xE5A5A8: 0x3E29,\n  0xE5A6BE: 0x3E2A,\n  0xE5A8BC: 0x3E2B,\n  0xE5AEB5: 0x3E2C,\n  0xE5B086: 0x3E2D,\n  0xE5B08F: 0x3E2E,\n  0xE5B091: 0x3E2F,\n  0xE5B09A: 0x3E30,\n  0xE5BA84: 0x3E31,\n  0xE5BA8A: 0x3E32,\n  0xE5BBA0: 0x3E33,\n  0xE5BDB0: 0x3E34,\n  0xE689BF: 0x3E35,\n  0xE68A84: 0x3E36,\n  0xE68B9B: 0x3E37,\n  0xE68E8C: 0x3E38,\n  0xE68DB7: 0x3E39,\n  0xE69887: 0x3E3A,\n  0xE6988C: 0x3E3B,\n  0xE698AD: 0x3E3C,\n  0xE699B6: 0x3E3D,\n  0xE69DBE: 0x3E3E,\n  0xE6A2A2: 0x3E3F,\n  0xE6A89F: 0x3E40,\n  0xE6A8B5: 0x3E41,\n  0xE6B2BC: 0x3E42,\n  0xE6B688: 0x3E43,\n  0xE6B889: 0x3E44,\n  0xE6B998: 0x3E45,\n  0xE784BC: 0x3E46,\n  0xE784A6: 0x3E47,\n  0xE785A7: 0x3E48,\n  0xE79787: 0x3E49,\n  0xE79C81: 0x3E4A,\n  0xE7A19D: 0x3E4B,\n  0xE7A481: 0x3E4C,\n  0xE7A5A5: 0x3E4D,\n  0xE7A7B0: 0x3E4E,\n  0xE7ABA0: 0x3E4F,\n  0xE7AC91: 0x3E50,\n  0xE7B2A7: 0x3E51,\n  0xE7B4B9: 0x3E52,\n  0xE88296: 0x3E53,\n  0xE88F96: 0x3E54,\n  0xE8928B: 0x3E55,\n  0xE89589: 0x3E56,\n  0xE8A19D: 0x3E57,\n  0xE8A3B3: 0x3E58,\n  0xE8A89F: 0x3E59,\n  0xE8A8BC: 0x3E5A,\n  0xE8A994: 0x3E5B,\n  0xE8A9B3: 0x3E5C,\n  0xE8B1A1: 0x3E5D,\n  0xE8B39E: 0x3E5E,\n  0xE986A4: 0x3E5F,\n  0xE989A6: 0x3E60,\n  0xE98DBE: 0x3E61,\n  0xE99098: 0x3E62,\n  0xE99A9C: 0x3E63,\n  0xE99E98: 0x3E64,\n  0xE4B88A: 0x3E65,\n  0xE4B888: 0x3E66,\n  0xE4B89E: 0x3E67,\n  0xE4B997: 0x3E68,\n  0xE58697: 0x3E69,\n  0xE589B0: 0x3E6A,\n  0xE59F8E: 0x3E6B,\n  0xE5A0B4: 0x3E6C,\n  0xE5A38C: 0x3E6D,\n  0xE5ACA2: 0x3E6E,\n  0xE5B8B8: 0x3E6F,\n  0xE68385: 0x3E70,\n  0xE693BE: 0x3E71,\n  0xE69DA1: 0x3E72,\n  0xE69D96: 0x3E73,\n  0xE6B584: 0x3E74,\n  0xE78AB6: 0x3E75,\n  0xE795B3: 0x3E76,\n  0xE7A9A3: 0x3E77,\n  0xE892B8: 0x3E78,\n  0xE8ADB2: 0x3E79,\n  0xE986B8: 0x3E7A,\n  0xE98CA0: 0x3E7B,\n  0xE598B1: 0x3E7C,\n  0xE59FB4: 0x3E7D,\n  0xE9A3BE: 0x3E7E,\n  0xE68BAD: 0x3F21,\n  0xE6A48D: 0x3F22,\n  0xE6AE96: 0x3F23,\n  0xE787AD: 0x3F24,\n  0xE7B994: 0x3F25,\n  0xE881B7: 0x3F26,\n  0xE889B2: 0x3F27,\n  0xE8A7A6: 0x3F28,\n  0xE9A39F: 0x3F29,\n  0xE89D95: 0x3F2A,\n  0xE8BEB1: 0x3F2B,\n  0xE5B0BB: 0x3F2C,\n  0xE4BCB8: 0x3F2D,\n  0xE4BFA1: 0x3F2E,\n  0xE4BEB5: 0x3F2F,\n  0xE59487: 0x3F30,\n  0xE5A8A0: 0x3F31,\n  0xE5AF9D: 0x3F32,\n  0xE5AFA9: 0x3F33,\n  0xE5BF83: 0x3F34,\n  0xE6858E: 0x3F35,\n  0xE68CAF: 0x3F36,\n  0xE696B0: 0x3F37,\n  0xE6998B: 0x3F38,\n  0xE6A3AE: 0x3F39,\n  0xE6A69B: 0x3F3A,\n  0xE6B5B8: 0x3F3B,\n  0xE6B7B1: 0x3F3C,\n  0xE794B3: 0x3F3D,\n  0xE796B9: 0x3F3E,\n  0xE79C9F: 0x3F3F,\n  0xE7A59E: 0x3F40,\n  0xE7A7A6: 0x3F41,\n  0xE7B4B3: 0x3F42,\n  0xE887A3: 0x3F43,\n  0xE88AAF: 0x3F44,\n  0xE896AA: 0x3F45,\n  0xE8A6AA: 0x3F46,\n  0xE8A8BA: 0x3F47,\n  0xE8BAAB: 0x3F48,\n  0xE8BE9B: 0x3F49,\n  0xE980B2: 0x3F4A,\n  0xE9879D: 0x3F4B,\n  0xE99C87: 0x3F4C,\n  0xE4BABA: 0x3F4D,\n  0xE4BB81: 0x3F4E,\n  0xE58883: 0x3F4F,\n  0xE5A1B5: 0x3F50,\n  0xE5A3AC: 0x3F51,\n  0xE5B08B: 0x3F52,\n  0xE7949A: 0x3F53,\n  0xE5B0BD: 0x3F54,\n  0xE8858E: 0x3F55,\n  0xE8A88A: 0x3F56,\n  0xE8BF85: 0x3F57,\n  0xE999A3: 0x3F58,\n  0xE99DAD: 0x3F59,\n  0xE7ACA5: 0x3F5A,\n  0xE8AB8F: 0x3F5B,\n  0xE9A088: 0x3F5C,\n  0xE985A2: 0x3F5D,\n  0xE59BB3: 0x3F5E,\n  0xE58EA8: 0x3F5F,\n  0xE98097: 0x3F60,\n  0xE590B9: 0x3F61,\n  0xE59E82: 0x3F62,\n  0xE5B8A5: 0x3F63,\n  0xE68EA8: 0x3F64,\n  0xE6B0B4: 0x3F65,\n  0xE7828A: 0x3F66,\n  0xE79DA1: 0x3F67,\n  0xE7B28B: 0x3F68,\n  0xE7BFA0: 0x3F69,\n  0xE8A1B0: 0x3F6A,\n  0xE98182: 0x3F6B,\n  0xE98594: 0x3F6C,\n  0xE98C90: 0x3F6D,\n  0xE98C98: 0x3F6E,\n  0xE99A8F: 0x3F6F,\n  0xE7919E: 0x3F70,\n  0xE9AB84: 0x3F71,\n  0xE5B487: 0x3F72,\n  0xE5B5A9: 0x3F73,\n  0xE695B0: 0x3F74,\n  0xE69EA2: 0x3F75,\n  0xE8B6A8: 0x3F76,\n  0xE99B9B: 0x3F77,\n  0xE68DAE: 0x3F78,\n  0xE69D89: 0x3F79,\n  0xE6A499: 0x3F7A,\n  0xE88F85: 0x3F7B,\n  0xE9A097: 0x3F7C,\n  0xE99B80: 0x3F7D,\n  0xE8A3BE: 0x3F7E,\n  0xE6BE84: 0x4021,\n  0xE691BA: 0x4022,\n  0xE5AFB8: 0x4023,\n  0xE4B896: 0x4024,\n  0xE780AC: 0x4025,\n  0xE7959D: 0x4026,\n  0xE698AF: 0x4027,\n  0xE58784: 0x4028,\n  0xE588B6: 0x4029,\n  0xE58BA2: 0x402A,\n  0xE5A793: 0x402B,\n  0xE5BE81: 0x402C,\n  0xE680A7: 0x402D,\n  0xE68890: 0x402E,\n  0xE694BF: 0x402F,\n  0xE695B4: 0x4030,\n  0xE6989F: 0x4031,\n  0xE699B4: 0x4032,\n  0xE6A3B2: 0x4033,\n  0xE6A096: 0x4034,\n  0xE6ADA3: 0x4035,\n  0xE6B885: 0x4036,\n  0xE789B2: 0x4037,\n  0xE7949F: 0x4038,\n  0xE79B9B: 0x4039,\n  0xE7B2BE: 0x403A,\n  0xE88196: 0x403B,\n  0xE5A3B0: 0x403C,\n  0xE8A3BD: 0x403D,\n  0xE8A5BF: 0x403E,\n  0xE8AAA0: 0x403F,\n  0xE8AA93: 0x4040,\n  0xE8AB8B: 0x4041,\n  0xE9809D: 0x4042,\n  0xE98692: 0x4043,\n  0xE99D92: 0x4044,\n  0xE99D99: 0x4045,\n  0xE69689: 0x4046,\n  0xE7A88E: 0x4047,\n  0xE88486: 0x4048,\n  0xE99ABB: 0x4049,\n  0xE5B8AD: 0x404A,\n  0xE6839C: 0x404B,\n  0xE6889A: 0x404C,\n  0xE696A5: 0x404D,\n  0xE69894: 0x404E,\n  0xE69E90: 0x404F,\n  0xE79FB3: 0x4050,\n  0xE7A98D: 0x4051,\n  0xE7B18D: 0x4052,\n  0xE7B8BE: 0x4053,\n  0xE8848A: 0x4054,\n  0xE8B2AC: 0x4055,\n  0xE8B5A4: 0x4056,\n  0xE8B7A1: 0x4057,\n  0xE8B99F: 0x4058,\n  0xE7A2A9: 0x4059,\n  0xE58887: 0x405A,\n  0xE68B99: 0x405B,\n  0xE68EA5: 0x405C,\n  0xE69182: 0x405D,\n  0xE68A98: 0x405E,\n  0xE8A8AD: 0x405F,\n  0xE7AA83: 0x4060,\n  0xE7AF80: 0x4061,\n  0xE8AAAC: 0x4062,\n  0xE99BAA: 0x4063,\n  0xE7B5B6: 0x4064,\n  0xE8888C: 0x4065,\n  0xE89D89: 0x4066,\n  0xE4BB99: 0x4067,\n  0xE58588: 0x4068,\n  0xE58D83: 0x4069,\n  0xE58DA0: 0x406A,\n  0xE5AEA3: 0x406B,\n  0xE5B082: 0x406C,\n  0xE5B096: 0x406D,\n  0xE5B79D: 0x406E,\n  0xE688A6: 0x406F,\n  0xE68987: 0x4070,\n  0xE692B0: 0x4071,\n  0xE6A093: 0x4072,\n  0xE6A0B4: 0x4073,\n  0xE6B389: 0x4074,\n  0xE6B585: 0x4075,\n  0xE6B497: 0x4076,\n  0xE69F93: 0x4077,\n  0xE6BD9C: 0x4078,\n  0xE7858E: 0x4079,\n  0xE785BD: 0x407A,\n  0xE6978B: 0x407B,\n  0xE7A9BF: 0x407C,\n  0xE7AEAD: 0x407D,\n  0xE7B79A: 0x407E,\n  0xE7B98A: 0x4121,\n  0xE7BEA8: 0x4122,\n  0xE885BA: 0x4123,\n  0xE8889B: 0x4124,\n  0xE888B9: 0x4125,\n  0xE896A6: 0x4126,\n  0xE8A9AE: 0x4127,\n  0xE8B38E: 0x4128,\n  0xE8B7B5: 0x4129,\n  0xE981B8: 0x412A,\n  0xE981B7: 0x412B,\n  0xE98AAD: 0x412C,\n  0xE98A91: 0x412D,\n  0xE99683: 0x412E,\n  0xE9AEAE: 0x412F,\n  0xE5898D: 0x4130,\n  0xE59684: 0x4131,\n  0xE6BCB8: 0x4132,\n  0xE784B6: 0x4133,\n  0xE585A8: 0x4134,\n  0xE7A685: 0x4135,\n  0xE7B995: 0x4136,\n  0xE886B3: 0x4137,\n  0xE7B38E: 0x4138,\n  0xE5998C: 0x4139,\n  0xE5A191: 0x413A,\n  0xE5B2A8: 0x413B,\n  0xE68EAA: 0x413C,\n  0xE69BBE: 0x413D,\n  0xE69BBD: 0x413E,\n  0xE6A59A: 0x413F,\n  0xE78B99: 0x4140,\n  0xE7968F: 0x4141,\n  0xE7968E: 0x4142,\n  0xE7A48E: 0x4143,\n  0xE7A596: 0x4144,\n  0xE7A79F: 0x4145,\n  0xE7B297: 0x4146,\n  0xE7B4A0: 0x4147,\n  0xE7B584: 0x4148,\n  0xE89887: 0x4149,\n  0xE8A8B4: 0x414A,\n  0xE998BB: 0x414B,\n  0xE981A1: 0x414C,\n  0xE9BCA0: 0x414D,\n  0xE583A7: 0x414E,\n  0xE589B5: 0x414F,\n  0xE58F8C: 0x4150,\n  0xE58FA2: 0x4151,\n  0xE58089: 0x4152,\n  0xE596AA: 0x4153,\n  0xE5A3AE: 0x4154,\n  0xE5A58F: 0x4155,\n  0xE788BD: 0x4156,\n  0xE5AE8B: 0x4157,\n  0xE5B1A4: 0x4158,\n  0xE58C9D: 0x4159,\n  0xE683A3: 0x415A,\n  0xE683B3: 0x415B,\n  0xE68D9C: 0x415C,\n  0xE68E83: 0x415D,\n  0xE68CBF: 0x415E,\n  0xE68EBB: 0x415F,\n  0xE6938D: 0x4160,\n  0xE697A9: 0x4161,\n  0xE69BB9: 0x4162,\n  0xE5B7A3: 0x4163,\n  0xE6A78D: 0x4164,\n  0xE6A7BD: 0x4165,\n  0xE6BC95: 0x4166,\n  0xE787A5: 0x4167,\n  0xE4BA89: 0x4168,\n  0xE797A9: 0x4169,\n  0xE79BB8: 0x416A,\n  0xE7AA93: 0x416B,\n  0xE7B39F: 0x416C,\n  0xE7B78F: 0x416D,\n  0xE7B69C: 0x416E,\n  0xE881A1: 0x416F,\n  0xE88D89: 0x4170,\n  0xE88D98: 0x4171,\n  0xE891AC: 0x4172,\n  0xE892BC: 0x4173,\n  0xE897BB: 0x4174,\n  0xE8A385: 0x4175,\n  0xE8B5B0: 0x4176,\n  0xE98081: 0x4177,\n  0xE981AD: 0x4178,\n  0xE98E97: 0x4179,\n  0xE99C9C: 0x417A,\n  0xE9A892: 0x417B,\n  0xE5838F: 0x417C,\n  0xE5A297: 0x417D,\n  0xE6868E: 0x417E,\n  0xE88793: 0x4221,\n  0xE894B5: 0x4222,\n  0xE8B488: 0x4223,\n  0xE980A0: 0x4224,\n  0xE4BF83: 0x4225,\n  0xE581B4: 0x4226,\n  0xE58987: 0x4227,\n  0xE58DB3: 0x4228,\n  0xE681AF: 0x4229,\n  0xE68D89: 0x422A,\n  0xE69D9F: 0x422B,\n  0xE6B8AC: 0x422C,\n  0xE8B6B3: 0x422D,\n  0xE9809F: 0x422E,\n  0xE4BF97: 0x422F,\n  0xE5B19E: 0x4230,\n  0xE8B38A: 0x4231,\n  0xE6978F: 0x4232,\n  0xE7B69A: 0x4233,\n  0xE58D92: 0x4234,\n  0xE8A296: 0x4235,\n  0xE585B6: 0x4236,\n  0xE68F83: 0x4237,\n  0xE5AD98: 0x4238,\n  0xE5ADAB: 0x4239,\n  0xE5B08A: 0x423A,\n  0xE6908D: 0x423B,\n  0xE69D91: 0x423C,\n  0xE9819C: 0x423D,\n  0xE4BB96: 0x423E,\n  0xE5A49A: 0x423F,\n  0xE5A4AA: 0x4240,\n  0xE6B1B0: 0x4241,\n  0xE8A991: 0x4242,\n  0xE594BE: 0x4243,\n  0xE5A095: 0x4244,\n  0xE5A6A5: 0x4245,\n  0xE683B0: 0x4246,\n  0xE68993: 0x4247,\n  0xE69F81: 0x4248,\n  0xE888B5: 0x4249,\n  0xE6A595: 0x424A,\n  0xE99980: 0x424B,\n  0xE9A784: 0x424C,\n  0xE9A8A8: 0x424D,\n  0xE4BD93: 0x424E,\n  0xE5A086: 0x424F,\n  0xE5AFBE: 0x4250,\n  0xE88090: 0x4251,\n  0xE5B2B1: 0x4252,\n  0xE5B8AF: 0x4253,\n  0xE5BE85: 0x4254,\n  0xE680A0: 0x4255,\n  0xE6858B: 0x4256,\n  0xE688B4: 0x4257,\n  0xE69BBF: 0x4258,\n  0xE6B3B0: 0x4259,\n  0xE6BB9E: 0x425A,\n  0xE8838E: 0x425B,\n  0xE885BF: 0x425C,\n  0xE88B94: 0x425D,\n  0xE8A28B: 0x425E,\n  0xE8B2B8: 0x425F,\n  0xE98080: 0x4260,\n  0xE980AE: 0x4261,\n  0xE99A8A: 0x4262,\n  0xE9BB9B: 0x4263,\n  0xE9AF9B: 0x4264,\n  0xE4BBA3: 0x4265,\n  0xE58FB0: 0x4266,\n  0xE5A4A7: 0x4267,\n  0xE7ACAC: 0x4268,\n  0xE9868D: 0x4269,\n  0xE9A18C: 0x426A,\n  0xE9B7B9: 0x426B,\n  0xE6BB9D: 0x426C,\n  0xE780A7: 0x426D,\n  0xE58D93: 0x426E,\n  0xE59584: 0x426F,\n  0xE5AE85: 0x4270,\n  0xE68998: 0x4271,\n  0xE68A9E: 0x4272,\n  0xE68B93: 0x4273,\n  0xE6B2A2: 0x4274,\n  0xE6BFAF: 0x4275,\n  0xE790A2: 0x4276,\n  0xE8A897: 0x4277,\n  0xE990B8: 0x4278,\n  0xE6BF81: 0x4279,\n  0xE8ABBE: 0x427A,\n  0xE88CB8: 0x427B,\n  0xE587A7: 0x427C,\n  0xE89BB8: 0x427D,\n  0xE58FAA: 0x427E,\n  0xE58FA9: 0x4321,\n  0xE4BD86: 0x4322,\n  0xE98194: 0x4323,\n  0xE8BEB0: 0x4324,\n  0xE5A5AA: 0x4325,\n  0xE884B1: 0x4326,\n  0xE5B7BD: 0x4327,\n  0xE7ABAA: 0x4328,\n  0xE8BEBF: 0x4329,\n  0xE6A39A: 0x432A,\n  0xE8B0B7: 0x432B,\n  0xE78BB8: 0x432C,\n  0xE9B188: 0x432D,\n  0xE6A8BD: 0x432E,\n  0xE8AAB0: 0x432F,\n  0xE4B8B9: 0x4330,\n  0xE58D98: 0x4331,\n  0xE59886: 0x4332,\n  0xE59DA6: 0x4333,\n  0xE68B85: 0x4334,\n  0xE68EA2: 0x4335,\n  0xE697A6: 0x4336,\n  0xE6AD8E: 0x4337,\n  0xE6B7A1: 0x4338,\n  0xE6B99B: 0x4339,\n  0xE782AD: 0x433A,\n  0xE79FAD: 0x433B,\n  0xE7ABAF: 0x433C,\n  0xE7AEAA: 0x433D,\n  0xE7B6BB: 0x433E,\n  0xE880BD: 0x433F,\n  0xE88386: 0x4340,\n  0xE89B8B: 0x4341,\n  0xE8AA95: 0x4342,\n  0xE98D9B: 0x4343,\n  0xE59BA3: 0x4344,\n  0xE5A387: 0x4345,\n  0xE5BCBE: 0x4346,\n  0xE696AD: 0x4347,\n  0xE69A96: 0x4348,\n  0xE6AA80: 0x4349,\n  0xE6AEB5: 0x434A,\n  0xE794B7: 0x434B,\n  0xE8AB87: 0x434C,\n  0xE580A4: 0x434D,\n  0xE79FA5: 0x434E,\n  0xE59CB0: 0x434F,\n  0xE5BC9B: 0x4350,\n  0xE681A5: 0x4351,\n  0xE699BA: 0x4352,\n  0xE6B1A0: 0x4353,\n  0xE797B4: 0x4354,\n  0xE7A89A: 0x4355,\n  0xE7BDAE: 0x4356,\n  0xE887B4: 0x4357,\n  0xE89C98: 0x4358,\n  0xE98185: 0x4359,\n  0xE9A6B3: 0x435A,\n  0xE7AF89: 0x435B,\n  0xE7959C: 0x435C,\n  0xE7ABB9: 0x435D,\n  0xE7AD91: 0x435E,\n  0xE89384: 0x435F,\n  0xE98090: 0x4360,\n  0xE7A7A9: 0x4361,\n  0xE7AA92: 0x4362,\n  0xE88CB6: 0x4363,\n  0xE5ABA1: 0x4364,\n  0xE79D80: 0x4365,\n  0xE4B8AD: 0x4366,\n  0xE4BBB2: 0x4367,\n  0xE5AE99: 0x4368,\n  0xE5BFA0: 0x4369,\n  0xE68ABD: 0x436A,\n  0xE698BC: 0x436B,\n  0xE69FB1: 0x436C,\n  0xE6B3A8: 0x436D,\n  0xE899AB: 0x436E,\n  0xE8A1B7: 0x436F,\n  0xE8A8BB: 0x4370,\n  0xE9858E: 0x4371,\n  0xE98BB3: 0x4372,\n  0xE9A790: 0x4373,\n  0xE6A897: 0x4374,\n  0xE780A6: 0x4375,\n  0xE78CAA: 0x4376,\n  0xE88BA7: 0x4377,\n  0xE89197: 0x4378,\n  0xE8B2AF: 0x4379,\n  0xE4B881: 0x437A,\n  0xE58586: 0x437B,\n  0xE5878B: 0x437C,\n  0xE5968B: 0x437D,\n  0xE5AFB5: 0x437E,\n  0xE5B896: 0x4421,\n  0xE5B8B3: 0x4422,\n  0xE5BA81: 0x4423,\n  0xE5BC94: 0x4424,\n  0xE5BCB5: 0x4425,\n  0xE5BDAB: 0x4426,\n  0xE5BEB4: 0x4427,\n  0xE687B2: 0x4428,\n  0xE68C91: 0x4429,\n  0xE69AA2: 0x442A,\n  0xE69C9D: 0x442B,\n  0xE6BDAE: 0x442C,\n  0xE78992: 0x442D,\n  0xE794BA: 0x442E,\n  0xE79CBA: 0x442F,\n  0xE881B4: 0x4430,\n  0xE884B9: 0x4431,\n  0xE885B8: 0x4432,\n  0xE89DB6: 0x4433,\n  0xE8AABF: 0x4434,\n  0xE8AB9C: 0x4435,\n  0xE8B685: 0x4436,\n  0xE8B7B3: 0x4437,\n  0xE98A9A: 0x4438,\n  0xE995B7: 0x4439,\n  0xE9A082: 0x443A,\n  0xE9B3A5: 0x443B,\n  0xE58B85: 0x443C,\n  0xE68D97: 0x443D,\n  0xE79BB4: 0x443E,\n  0xE69C95: 0x443F,\n  0xE6B288: 0x4440,\n  0xE78F8D: 0x4441,\n  0xE8B383: 0x4442,\n  0xE98EAE: 0x4443,\n  0xE999B3: 0x4444,\n  0xE6B4A5: 0x4445,\n  0xE5A29C: 0x4446,\n  0xE6A48E: 0x4447,\n  0xE6A78C: 0x4448,\n  0xE8BFBD: 0x4449,\n  0xE98E9A: 0x444A,\n  0xE7979B: 0x444B,\n  0xE9809A: 0x444C,\n  0xE5A19A: 0x444D,\n  0xE6A082: 0x444E,\n  0xE68EB4: 0x444F,\n  0xE6A7BB: 0x4450,\n  0xE4BD83: 0x4451,\n  0xE6BCAC: 0x4452,\n  0xE69F98: 0x4453,\n  0xE8BEBB: 0x4454,\n  0xE894A6: 0x4455,\n  0xE7B6B4: 0x4456,\n  0xE98D94: 0x4457,\n  0xE6A4BF: 0x4458,\n  0xE6BDB0: 0x4459,\n  0xE59DAA: 0x445A,\n  0xE5A3B7: 0x445B,\n  0xE5ACAC: 0x445C,\n  0xE7B4AC: 0x445D,\n  0xE788AA: 0x445E,\n  0xE5908A: 0x445F,\n  0xE987A3: 0x4460,\n  0xE9B6B4: 0x4461,\n  0xE4BAAD: 0x4462,\n  0xE4BD8E: 0x4463,\n  0xE5819C: 0x4464,\n  0xE581B5: 0x4465,\n  0xE58983: 0x4466,\n  0xE8B29E: 0x4467,\n  0xE59188: 0x4468,\n  0xE5A0A4: 0x4469,\n  0xE5AE9A: 0x446A,\n  0xE5B89D: 0x446B,\n  0xE5BA95: 0x446C,\n  0xE5BAAD: 0x446D,\n  0xE5BBB7: 0x446E,\n  0xE5BC9F: 0x446F,\n  0xE6828C: 0x4470,\n  0xE68AB5: 0x4471,\n  0xE68CBA: 0x4472,\n  0xE68F90: 0x4473,\n  0xE6A2AF: 0x4474,\n  0xE6B180: 0x4475,\n  0xE7A287: 0x4476,\n  0xE7A68E: 0x4477,\n  0xE7A88B: 0x4478,\n  0xE7B7A0: 0x4479,\n  0xE88987: 0x447A,\n  0xE8A882: 0x447B,\n  0xE8ABA6: 0x447C,\n  0xE8B984: 0x447D,\n  0xE98093: 0x447E,\n  0xE982B8: 0x4521,\n  0xE984AD: 0x4522,\n  0xE98798: 0x4523,\n  0xE9BC8E: 0x4524,\n  0xE6B3A5: 0x4525,\n  0xE69198: 0x4526,\n  0xE693A2: 0x4527,\n  0xE695B5: 0x4528,\n  0xE6BBB4: 0x4529,\n  0xE79A84: 0x452A,\n  0xE7AC9B: 0x452B,\n  0xE981A9: 0x452C,\n  0xE98F91: 0x452D,\n  0xE6BABA: 0x452E,\n  0xE593B2: 0x452F,\n  0xE5BEB9: 0x4530,\n  0xE692A4: 0x4531,\n  0xE8BD8D: 0x4532,\n  0xE8BFAD: 0x4533,\n  0xE98984: 0x4534,\n  0xE585B8: 0x4535,\n  0xE5A1AB: 0x4536,\n  0xE5A4A9: 0x4537,\n  0xE5B195: 0x4538,\n  0xE5BA97: 0x4539,\n  0xE6B7BB: 0x453A,\n  0xE7BA8F: 0x453B,\n  0xE7949C: 0x453C,\n  0xE8B2BC: 0x453D,\n  0xE8BBA2: 0x453E,\n  0xE9A19B: 0x453F,\n  0xE782B9: 0x4540,\n  0xE4BC9D: 0x4541,\n  0xE6AEBF: 0x4542,\n  0xE6BEB1: 0x4543,\n  0xE794B0: 0x4544,\n  0xE99BBB: 0x4545,\n  0xE5858E: 0x4546,\n  0xE59090: 0x4547,\n  0xE5A0B5: 0x4548,\n  0xE5A197: 0x4549,\n  0xE5A6AC: 0x454A,\n  0xE5B1A0: 0x454B,\n  0xE5BE92: 0x454C,\n  0xE69697: 0x454D,\n  0xE69D9C: 0x454E,\n  0xE6B8A1: 0x454F,\n  0xE799BB: 0x4550,\n  0xE88F9F: 0x4551,\n  0xE8B3AD: 0x4552,\n  0xE98094: 0x4553,\n  0xE983BD: 0x4554,\n  0xE98D8D: 0x4555,\n  0xE7A0A5: 0x4556,\n  0xE7A0BA: 0x4557,\n  0xE58AAA: 0x4558,\n  0xE5BAA6: 0x4559,\n  0xE59C9F: 0x455A,\n  0xE5A5B4: 0x455B,\n  0xE68092: 0x455C,\n  0xE58092: 0x455D,\n  0xE5859A: 0x455E,\n  0xE586AC: 0x455F,\n  0xE5878D: 0x4560,\n  0xE58880: 0x4561,\n  0xE59490: 0x4562,\n  0xE5A194: 0x4563,\n  0xE5A198: 0x4564,\n  0xE5A597: 0x4565,\n  0xE5AE95: 0x4566,\n  0xE5B3B6: 0x4567,\n  0xE5B68B: 0x4568,\n  0xE682BC: 0x4569,\n  0xE68A95: 0x456A,\n  0xE690AD: 0x456B,\n  0xE69DB1: 0x456C,\n  0xE6A183: 0x456D,\n  0xE6A2BC: 0x456E,\n  0xE6A39F: 0x456F,\n  0xE79B97: 0x4570,\n  0xE6B798: 0x4571,\n  0xE6B9AF: 0x4572,\n  0xE6B69B: 0x4573,\n  0xE781AF: 0x4574,\n  0xE78788: 0x4575,\n  0xE5BD93: 0x4576,\n  0xE79798: 0x4577,\n  0xE7A5B7: 0x4578,\n  0xE7AD89: 0x4579,\n  0xE7AD94: 0x457A,\n  0xE7AD92: 0x457B,\n  0xE7B396: 0x457C,\n  0xE7B5B1: 0x457D,\n  0xE588B0: 0x457E,\n  0xE891A3: 0x4621,\n  0xE895A9: 0x4622,\n  0xE897A4: 0x4623,\n  0xE8A88E: 0x4624,\n  0xE8AC84: 0x4625,\n  0xE8B186: 0x4626,\n  0xE8B88F: 0x4627,\n  0xE98083: 0x4628,\n  0xE9808F: 0x4629,\n  0xE99099: 0x462A,\n  0xE999B6: 0x462B,\n  0xE9A0AD: 0x462C,\n  0xE9A8B0: 0x462D,\n  0xE99798: 0x462E,\n  0xE5838D: 0x462F,\n  0xE58B95: 0x4630,\n  0xE5908C: 0x4631,\n  0xE5A082: 0x4632,\n  0xE5B08E: 0x4633,\n  0xE686A7: 0x4634,\n  0xE6929E: 0x4635,\n  0xE6B49E: 0x4636,\n  0xE79EB3: 0x4637,\n  0xE7ABA5: 0x4638,\n  0xE883B4: 0x4639,\n  0xE89084: 0x463A,\n  0xE98193: 0x463B,\n  0xE98A85: 0x463C,\n  0xE5B3A0: 0x463D,\n  0xE9B487: 0x463E,\n  0xE58CBF: 0x463F,\n  0xE5BE97: 0x4640,\n  0xE5BEB3: 0x4641,\n  0xE6B69C: 0x4642,\n  0xE789B9: 0x4643,\n  0xE79DA3: 0x4644,\n  0xE7A6BF: 0x4645,\n  0xE7AFA4: 0x4646,\n  0xE6AF92: 0x4647,\n  0xE78BAC: 0x4648,\n  0xE8AAAD: 0x4649,\n  0xE6A083: 0x464A,\n  0xE6A9A1: 0x464B,\n  0xE587B8: 0x464C,\n  0xE7AA81: 0x464D,\n  0xE6A4B4: 0x464E,\n  0xE5B18A: 0x464F,\n  0xE9B3B6: 0x4650,\n  0xE88BAB: 0x4651,\n  0xE5AF85: 0x4652,\n  0xE98589: 0x4653,\n  0xE7809E: 0x4654,\n  0xE599B8: 0x4655,\n  0xE5B1AF: 0x4656,\n  0xE68387: 0x4657,\n  0xE695A6: 0x4658,\n  0xE6B28C: 0x4659,\n  0xE8B19A: 0x465A,\n  0xE98181: 0x465B,\n  0xE9A093: 0x465C,\n  0xE59191: 0x465D,\n  0xE69B87: 0x465E,\n  0xE9888D: 0x465F,\n  0xE5A588: 0x4660,\n  0xE982A3: 0x4661,\n  0xE58685: 0x4662,\n  0xE4B98D: 0x4663,\n  0xE587AA: 0x4664,\n  0xE89699: 0x4665,\n  0xE8AC8E: 0x4666,\n  0xE78198: 0x4667,\n  0xE68DBA: 0x4668,\n  0xE98D8B: 0x4669,\n  0xE6A5A2: 0x466A,\n  0xE9A6B4: 0x466B,\n  0xE7B884: 0x466C,\n  0xE795B7: 0x466D,\n  0xE58D97: 0x466E,\n  0xE6A5A0: 0x466F,\n  0xE8BB9F: 0x4670,\n  0xE99BA3: 0x4671,\n  0xE6B19D: 0x4672,\n  0xE4BA8C: 0x4673,\n  0xE5B0BC: 0x4674,\n  0xE5BC90: 0x4675,\n  0xE8BFA9: 0x4676,\n  0xE58C82: 0x4677,\n  0xE8B391: 0x4678,\n  0xE88289: 0x4679,\n  0xE899B9: 0x467A,\n  0xE5BBBF: 0x467B,\n  0xE697A5: 0x467C,\n  0xE4B9B3: 0x467D,\n  0xE585A5: 0x467E,\n  0xE5A682: 0x4721,\n  0xE5B0BF: 0x4722,\n  0xE99FAE: 0x4723,\n  0xE4BBBB: 0x4724,\n  0xE5A68A: 0x4725,\n  0xE5BF8D: 0x4726,\n  0xE8AA8D: 0x4727,\n  0xE6BFA1: 0x4728,\n  0xE7A6B0: 0x4729,\n  0xE7A5A2: 0x472A,\n  0xE5AFA7: 0x472B,\n  0xE891B1: 0x472C,\n  0xE78CAB: 0x472D,\n  0xE786B1: 0x472E,\n  0xE5B9B4: 0x472F,\n  0xE5BFB5: 0x4730,\n  0xE68DBB: 0x4731,\n  0xE6929A: 0x4732,\n  0xE78783: 0x4733,\n  0xE7B298: 0x4734,\n  0xE4B983: 0x4735,\n  0xE5BBBC: 0x4736,\n  0xE4B98B: 0x4737,\n  0xE59F9C: 0x4738,\n  0xE59AA2: 0x4739,\n  0xE682A9: 0x473A,\n  0xE6BF83: 0x473B,\n  0xE7B48D: 0x473C,\n  0xE883BD: 0x473D,\n  0xE884B3: 0x473E,\n  0xE886BF: 0x473F,\n  0xE8BEB2: 0x4740,\n  0xE8A697: 0x4741,\n  0xE89AA4: 0x4742,\n  0xE5B7B4: 0x4743,\n  0xE68A8A: 0x4744,\n  0xE692AD: 0x4745,\n  0xE8A687: 0x4746,\n  0xE69DB7: 0x4747,\n  0xE6B3A2: 0x4748,\n  0xE6B4BE: 0x4749,\n  0xE790B6: 0x474A,\n  0xE7A0B4: 0x474B,\n  0xE5A986: 0x474C,\n  0xE7BDB5: 0x474D,\n  0xE88AAD: 0x474E,\n  0xE9A6AC: 0x474F,\n  0xE4BFB3: 0x4750,\n  0xE5BB83: 0x4751,\n  0xE68B9D: 0x4752,\n  0xE68E92: 0x4753,\n  0xE69597: 0x4754,\n  0xE69DAF: 0x4755,\n  0xE79B83: 0x4756,\n  0xE7898C: 0x4757,\n  0xE8838C: 0x4758,\n  0xE882BA: 0x4759,\n  0xE8BCA9: 0x475A,\n  0xE9858D: 0x475B,\n  0xE5808D: 0x475C,\n  0xE59FB9: 0x475D,\n  0xE5AA92: 0x475E,\n  0xE6A285: 0x475F,\n  0xE6A5B3: 0x4760,\n  0xE785A4: 0x4761,\n  0xE78BBD: 0x4762,\n  0xE8B2B7: 0x4763,\n  0xE5A3B2: 0x4764,\n  0xE8B3A0: 0x4765,\n  0xE999AA: 0x4766,\n  0xE98099: 0x4767,\n  0xE89DBF: 0x4768,\n  0xE7A7A4: 0x4769,\n  0xE79FA7: 0x476A,\n  0xE890A9: 0x476B,\n  0xE4BCAF: 0x476C,\n  0xE589A5: 0x476D,\n  0xE58D9A: 0x476E,\n  0xE68B8D: 0x476F,\n  0xE69F8F: 0x4770,\n  0xE6B38A: 0x4771,\n  0xE799BD: 0x4772,\n  0xE7AE94: 0x4773,\n  0xE7B295: 0x4774,\n  0xE888B6: 0x4775,\n  0xE89684: 0x4776,\n  0xE8BFAB: 0x4777,\n  0xE69B9D: 0x4778,\n  0xE6BCA0: 0x4779,\n  0xE78886: 0x477A,\n  0xE7B89B: 0x477B,\n  0xE88EAB: 0x477C,\n  0xE9A781: 0x477D,\n  0xE9BAA6: 0x477E,\n  0xE587BD: 0x4821,\n  0xE7AEB1: 0x4822,\n  0xE7A1B2: 0x4823,\n  0xE7AEB8: 0x4824,\n  0xE88287: 0x4825,\n  0xE7AD88: 0x4826,\n  0xE6ABA8: 0x4827,\n  0xE5B9A1: 0x4828,\n  0xE8828C: 0x4829,\n  0xE79591: 0x482A,\n  0xE795A0: 0x482B,\n  0xE585AB: 0x482C,\n  0xE989A2: 0x482D,\n  0xE6BA8C: 0x482E,\n  0xE799BA: 0x482F,\n  0xE98697: 0x4830,\n  0xE9ABAA: 0x4831,\n  0xE4BC90: 0x4832,\n  0xE7BDB0: 0x4833,\n  0xE68A9C: 0x4834,\n  0xE7AD8F: 0x4835,\n  0xE996A5: 0x4836,\n  0xE9B3A9: 0x4837,\n  0xE599BA: 0x4838,\n  0xE5A199: 0x4839,\n  0xE89BA4: 0x483A,\n  0xE99ABC: 0x483B,\n  0xE4BCB4: 0x483C,\n  0xE588A4: 0x483D,\n  0xE58D8A: 0x483E,\n  0xE58F8D: 0x483F,\n  0xE58F9B: 0x4840,\n  0xE5B886: 0x4841,\n  0xE690AC: 0x4842,\n  0xE69691: 0x4843,\n  0xE69DBF: 0x4844,\n  0xE6B0BE: 0x4845,\n  0xE6B18E: 0x4846,\n  0xE78988: 0x4847,\n  0xE78AAF: 0x4848,\n  0xE78FAD: 0x4849,\n  0xE79594: 0x484A,\n  0xE7B981: 0x484B,\n  0xE888AC: 0x484C,\n  0xE897A9: 0x484D,\n  0xE8B2A9: 0x484E,\n  0xE7AF84: 0x484F,\n  0xE98786: 0x4850,\n  0xE785A9: 0x4851,\n  0xE9A092: 0x4852,\n  0xE9A3AF: 0x4853,\n  0xE68CBD: 0x4854,\n  0xE699A9: 0x4855,\n  0xE795AA: 0x4856,\n  0xE79BA4: 0x4857,\n  0xE7A390: 0x4858,\n  0xE89583: 0x4859,\n  0xE89BAE: 0x485A,\n  0xE58CAA: 0x485B,\n  0xE58D91: 0x485C,\n  0xE590A6: 0x485D,\n  0xE5A683: 0x485E,\n  0xE5BA87: 0x485F,\n  0xE5BDBC: 0x4860,\n  0xE682B2: 0x4861,\n  0xE68989: 0x4862,\n  0xE689B9: 0x4863,\n  0xE68AAB: 0x4864,\n  0xE69690: 0x4865,\n  0xE6AF94: 0x4866,\n  0xE6B38C: 0x4867,\n  0xE796B2: 0x4868,\n  0xE79AAE: 0x4869,\n  0xE7A291: 0x486A,\n  0xE7A798: 0x486B,\n  0xE7B78B: 0x486C,\n  0xE7BDB7: 0x486D,\n  0xE882A5: 0x486E,\n  0xE8A2AB: 0x486F,\n  0xE8AAB9: 0x4870,\n  0xE8B2BB: 0x4871,\n  0xE981BF: 0x4872,\n  0xE99D9E: 0x4873,\n  0xE9A39B: 0x4874,\n  0xE6A88B: 0x4875,\n  0xE7B0B8: 0x4876,\n  0xE58299: 0x4877,\n  0xE5B0BE: 0x4878,\n  0xE5BEAE: 0x4879,\n  0xE69E87: 0x487A,\n  0xE6AF98: 0x487B,\n  0xE790B5: 0x487C,\n  0xE79C89: 0x487D,\n  0xE7BE8E: 0x487E,\n  0xE9BCBB: 0x4921,\n  0xE69F8A: 0x4922,\n  0xE7A897: 0x4923,\n  0xE58CB9: 0x4924,\n  0xE7968B: 0x4925,\n  0xE9ABAD: 0x4926,\n  0xE5BDA6: 0x4927,\n  0xE8869D: 0x4928,\n  0xE88FB1: 0x4929,\n  0xE88298: 0x492A,\n  0xE5BCBC: 0x492B,\n  0xE5BF85: 0x492C,\n  0xE795A2: 0x492D,\n  0xE7AD86: 0x492E,\n  0xE980BC: 0x492F,\n  0xE6A1A7: 0x4930,\n  0xE5A7AB: 0x4931,\n  0xE5AA9B: 0x4932,\n  0xE7B490: 0x4933,\n  0xE799BE: 0x4934,\n  0xE8ACAC: 0x4935,\n  0xE4BFB5: 0x4936,\n  0xE5BDAA: 0x4937,\n  0xE6A899: 0x4938,\n  0xE6B0B7: 0x4939,\n  0xE6BC82: 0x493A,\n  0xE793A2: 0x493B,\n  0xE7A5A8: 0x493C,\n  0xE8A1A8: 0x493D,\n  0xE8A995: 0x493E,\n  0xE8B1B9: 0x493F,\n  0xE5BB9F: 0x4940,\n  0xE68F8F: 0x4941,\n  0xE79785: 0x4942,\n  0xE7A792: 0x4943,\n  0xE88B97: 0x4944,\n  0xE98CA8: 0x4945,\n  0xE98BB2: 0x4946,\n  0xE8929C: 0x4947,\n  0xE89BAD: 0x4948,\n  0xE9B0AD: 0x4949,\n  0xE59381: 0x494A,\n  0xE5BDAC: 0x494B,\n  0xE6968C: 0x494C,\n  0xE6B59C: 0x494D,\n  0xE78095: 0x494E,\n  0xE8B2A7: 0x494F,\n  0xE8B393: 0x4950,\n  0xE9A0BB: 0x4951,\n  0xE6958F: 0x4952,\n  0xE793B6: 0x4953,\n  0xE4B88D: 0x4954,\n  0xE4BB98: 0x4955,\n  0xE59FA0: 0x4956,\n  0xE5A4AB: 0x4957,\n  0xE5A9A6: 0x4958,\n  0xE5AF8C: 0x4959,\n  0xE586A8: 0x495A,\n  0xE5B883: 0x495B,\n  0xE5BA9C: 0x495C,\n  0xE68096: 0x495D,\n  0xE689B6: 0x495E,\n  0xE695B7: 0x495F,\n  0xE696A7: 0x4960,\n  0xE699AE: 0x4961,\n  0xE6B5AE: 0x4962,\n  0xE788B6: 0x4963,\n  0xE7ACA6: 0x4964,\n  0xE88590: 0x4965,\n  0xE8869A: 0x4966,\n  0xE88A99: 0x4967,\n  0xE8AD9C: 0x4968,\n  0xE8B2A0: 0x4969,\n  0xE8B3A6: 0x496A,\n  0xE8B5B4: 0x496B,\n  0xE9989C: 0x496C,\n  0xE99984: 0x496D,\n  0xE4BEAE: 0x496E,\n  0xE692AB: 0x496F,\n  0xE6ADA6: 0x4970,\n  0xE8889E: 0x4971,\n  0xE891A1: 0x4972,\n  0xE895AA: 0x4973,\n  0xE983A8: 0x4974,\n  0xE5B081: 0x4975,\n  0xE6A593: 0x4976,\n  0xE9A2A8: 0x4977,\n  0xE891BA: 0x4978,\n  0xE89597: 0x4979,\n  0xE4BC8F: 0x497A,\n  0xE589AF: 0x497B,\n  0xE5BEA9: 0x497C,\n  0xE5B985: 0x497D,\n  0xE69C8D: 0x497E,\n  0xE7A68F: 0x4A21,\n  0xE885B9: 0x4A22,\n  0xE8A487: 0x4A23,\n  0xE8A686: 0x4A24,\n  0xE6B7B5: 0x4A25,\n  0xE5BC97: 0x4A26,\n  0xE68995: 0x4A27,\n  0xE6B2B8: 0x4A28,\n  0xE4BB8F: 0x4A29,\n  0xE789A9: 0x4A2A,\n  0xE9AE92: 0x4A2B,\n  0xE58886: 0x4A2C,\n  0xE590BB: 0x4A2D,\n  0xE599B4: 0x4A2E,\n  0xE5A2B3: 0x4A2F,\n  0xE686A4: 0x4A30,\n  0xE689AE: 0x4A31,\n  0xE7849A: 0x4A32,\n  0xE5A5AE: 0x4A33,\n  0xE7B289: 0x4A34,\n  0xE7B39E: 0x4A35,\n  0xE7B49B: 0x4A36,\n  0xE99BB0: 0x4A37,\n  0xE69687: 0x4A38,\n  0xE8819E: 0x4A39,\n  0xE4B899: 0x4A3A,\n  0xE4BDB5: 0x4A3B,\n  0xE585B5: 0x4A3C,\n  0xE5A180: 0x4A3D,\n  0xE5B9A3: 0x4A3E,\n  0xE5B9B3: 0x4A3F,\n  0xE5BC8A: 0x4A40,\n  0xE69F84: 0x4A41,\n  0xE4B8A6: 0x4A42,\n  0xE894BD: 0x4A43,\n  0xE99689: 0x4A44,\n  0xE9999B: 0x4A45,\n  0xE7B1B3: 0x4A46,\n  0xE9A081: 0x4A47,\n  0xE583BB: 0x4A48,\n  0xE5A381: 0x4A49,\n  0xE79996: 0x4A4A,\n  0xE7A2A7: 0x4A4B,\n  0xE588A5: 0x4A4C,\n  0xE79EA5: 0x4A4D,\n  0xE89491: 0x4A4E,\n  0xE7AE86: 0x4A4F,\n  0xE5818F: 0x4A50,\n  0xE5A489: 0x4A51,\n  0xE78987: 0x4A52,\n  0xE7AF87: 0x4A53,\n  0xE7B7A8: 0x4A54,\n  0xE8BEBA: 0x4A55,\n  0xE8BF94: 0x4A56,\n  0xE9818D: 0x4A57,\n  0xE4BEBF: 0x4A58,\n  0xE58B89: 0x4A59,\n  0xE5A8A9: 0x4A5A,\n  0xE5BC81: 0x4A5B,\n  0xE99EAD: 0x4A5C,\n  0xE4BF9D: 0x4A5D,\n  0xE88897: 0x4A5E,\n  0xE98BAA: 0x4A5F,\n  0xE59C83: 0x4A60,\n  0xE68D95: 0x4A61,\n  0xE6ADA9: 0x4A62,\n  0xE794AB: 0x4A63,\n  0xE8A39C: 0x4A64,\n  0xE8BC94: 0x4A65,\n  0xE7A982: 0x4A66,\n  0xE58B9F: 0x4A67,\n  0xE5A293: 0x4A68,\n  0xE68595: 0x4A69,\n  0xE6888A: 0x4A6A,\n  0xE69AAE: 0x4A6B,\n  0xE6AF8D: 0x4A6C,\n  0xE7B0BF: 0x4A6D,\n  0xE88FA9: 0x4A6E,\n  0xE580A3: 0x4A6F,\n  0xE4BFB8: 0x4A70,\n  0xE58C85: 0x4A71,\n  0xE59186: 0x4A72,\n  0xE5A0B1: 0x4A73,\n  0xE5A589: 0x4A74,\n  0xE5AE9D: 0x4A75,\n  0xE5B3B0: 0x4A76,\n  0xE5B3AF: 0x4A77,\n  0xE5B4A9: 0x4A78,\n  0xE5BA96: 0x4A79,\n  0xE68AB1: 0x4A7A,\n  0xE68DA7: 0x4A7B,\n  0xE694BE: 0x4A7C,\n  0xE696B9: 0x4A7D,\n  0xE69C8B: 0x4A7E,\n  0xE6B395: 0x4B21,\n  0xE6B3A1: 0x4B22,\n  0xE783B9: 0x4B23,\n  0xE7A0B2: 0x4B24,\n  0xE7B8AB: 0x4B25,\n  0xE8839E: 0x4B26,\n  0xE88AB3: 0x4B27,\n  0xE8908C: 0x4B28,\n  0xE893AC: 0x4B29,\n  0xE89C82: 0x4B2A,\n  0xE8A492: 0x4B2B,\n  0xE8A8AA: 0x4B2C,\n  0xE8B18A: 0x4B2D,\n  0xE982A6: 0x4B2E,\n  0xE98B92: 0x4B2F,\n  0xE9A3BD: 0x4B30,\n  0xE9B3B3: 0x4B31,\n  0xE9B5AC: 0x4B32,\n  0xE4B98F: 0x4B33,\n  0xE4BAA1: 0x4B34,\n  0xE5828D: 0x4B35,\n  0xE58996: 0x4B36,\n  0xE59D8A: 0x4B37,\n  0xE5A6A8: 0x4B38,\n  0xE5B8BD: 0x4B39,\n  0xE5BF98: 0x4B3A,\n  0xE5BF99: 0x4B3B,\n  0xE688BF: 0x4B3C,\n  0xE69AB4: 0x4B3D,\n  0xE69C9B: 0x4B3E,\n  0xE69F90: 0x4B3F,\n  0xE6A392: 0x4B40,\n  0xE58692: 0x4B41,\n  0xE7B4A1: 0x4B42,\n  0xE882AA: 0x4B43,\n  0xE886A8: 0x4B44,\n  0xE8AC80: 0x4B45,\n  0xE8B28C: 0x4B46,\n  0xE8B2BF: 0x4B47,\n  0xE989BE: 0x4B48,\n  0xE998B2: 0x4B49,\n  0xE590A0: 0x4B4A,\n  0xE9A0AC: 0x4B4B,\n  0xE58C97: 0x4B4C,\n  0xE58395: 0x4B4D,\n  0xE58D9C: 0x4B4E,\n  0xE5A2A8: 0x4B4F,\n  0xE692B2: 0x4B50,\n  0xE69CB4: 0x4B51,\n  0xE789A7: 0x4B52,\n  0xE79DA6: 0x4B53,\n  0xE7A986: 0x4B54,\n  0xE987A6: 0x4B55,\n  0xE58B83: 0x4B56,\n  0xE6B2A1: 0x4B57,\n  0xE6AE86: 0x4B58,\n  0xE5A080: 0x4B59,\n  0xE5B98C: 0x4B5A,\n  0xE5A594: 0x4B5B,\n  0xE69CAC: 0x4B5C,\n  0xE7BFBB: 0x4B5D,\n  0xE587A1: 0x4B5E,\n  0xE79B86: 0x4B5F,\n  0xE691A9: 0x4B60,\n  0xE7A3A8: 0x4B61,\n  0xE9AD94: 0x4B62,\n  0xE9BABB: 0x4B63,\n  0xE59F8B: 0x4B64,\n  0xE5A6B9: 0x4B65,\n  0xE698A7: 0x4B66,\n  0xE69E9A: 0x4B67,\n  0xE6AF8E: 0x4B68,\n  0xE593A9: 0x4B69,\n  0xE6A799: 0x4B6A,\n  0xE5B995: 0x4B6B,\n  0xE8869C: 0x4B6C,\n  0xE69E95: 0x4B6D,\n  0xE9AEAA: 0x4B6E,\n  0xE69FBE: 0x4B6F,\n  0xE9B192: 0x4B70,\n  0xE6A19D: 0x4B71,\n  0xE4BAA6: 0x4B72,\n  0xE4BFA3: 0x4B73,\n  0xE58F88: 0x4B74,\n  0xE68AB9: 0x4B75,\n  0xE69CAB: 0x4B76,\n  0xE6B2AB: 0x4B77,\n  0xE8BF84: 0x4B78,\n  0xE4BEAD: 0x4B79,\n  0xE7B9AD: 0x4B7A,\n  0xE9BABF: 0x4B7B,\n  0xE4B887: 0x4B7C,\n  0xE685A2: 0x4B7D,\n  0xE6BA80: 0x4B7E,\n  0xE6BCAB: 0x4C21,\n  0xE89493: 0x4C22,\n  0xE591B3: 0x4C23,\n  0xE69CAA: 0x4C24,\n  0xE9AD85: 0x4C25,\n  0xE5B7B3: 0x4C26,\n  0xE7AE95: 0x4C27,\n  0xE5B2AC: 0x4C28,\n  0xE5AF86: 0x4C29,\n  0xE89C9C: 0x4C2A,\n  0xE6B98A: 0x4C2B,\n  0xE89391: 0x4C2C,\n  0xE7A894: 0x4C2D,\n  0xE88488: 0x4C2E,\n  0xE5A699: 0x4C2F,\n  0xE7B28D: 0x4C30,\n  0xE6B091: 0x4C31,\n  0xE79CA0: 0x4C32,\n  0xE58B99: 0x4C33,\n  0xE5A4A2: 0x4C34,\n  0xE784A1: 0x4C35,\n  0xE7899F: 0x4C36,\n  0xE79F9B: 0x4C37,\n  0xE99CA7: 0x4C38,\n  0xE9B5A1: 0x4C39,\n  0xE6A48B: 0x4C3A,\n  0xE5A9BF: 0x4C3B,\n  0xE5A898: 0x4C3C,\n  0xE586A5: 0x4C3D,\n  0xE5908D: 0x4C3E,\n  0xE591BD: 0x4C3F,\n  0xE6988E: 0x4C40,\n  0xE79B9F: 0x4C41,\n  0xE8BFB7: 0x4C42,\n  0xE98A98: 0x4C43,\n  0xE9B3B4: 0x4C44,\n  0xE5A7AA: 0x4C45,\n  0xE7899D: 0x4C46,\n  0xE6BB85: 0x4C47,\n  0xE5858D: 0x4C48,\n  0xE6A389: 0x4C49,\n  0xE7B6BF: 0x4C4A,\n  0xE7B7AC: 0x4C4B,\n  0xE99DA2: 0x4C4C,\n  0xE9BABA: 0x4C4D,\n  0xE691B8: 0x4C4E,\n  0xE6A8A1: 0x4C4F,\n  0xE88C82: 0x4C50,\n  0xE5A684: 0x4C51,\n  0xE5AD9F: 0x4C52,\n  0xE6AF9B: 0x4C53,\n  0xE78C9B: 0x4C54,\n  0xE79BB2: 0x4C55,\n  0xE7B6B2: 0x4C56,\n  0xE88097: 0x4C57,\n  0xE89299: 0x4C58,\n  0xE584B2: 0x4C59,\n  0xE69CA8: 0x4C5A,\n  0xE9BB99: 0x4C5B,\n  0xE79BAE: 0x4C5C,\n  0xE69DA2: 0x4C5D,\n  0xE58BBF: 0x4C5E,\n  0xE9A485: 0x4C5F,\n  0xE5B0A4: 0x4C60,\n  0xE688BB: 0x4C61,\n  0xE7B1BE: 0x4C62,\n  0xE8B2B0: 0x4C63,\n  0xE5958F: 0x4C64,\n  0xE682B6: 0x4C65,\n  0xE7B48B: 0x4C66,\n  0xE99680: 0x4C67,\n  0xE58C81: 0x4C68,\n  0xE4B99F: 0x4C69,\n  0xE586B6: 0x4C6A,\n  0xE5A49C: 0x4C6B,\n  0xE788BA: 0x4C6C,\n  0xE880B6: 0x4C6D,\n  0xE9878E: 0x4C6E,\n  0xE5BCA5: 0x4C6F,\n  0xE79FA2: 0x4C70,\n  0xE58E84: 0x4C71,\n  0xE5BDB9: 0x4C72,\n  0xE7B484: 0x4C73,\n  0xE896AC: 0x4C74,\n  0xE8A8B3: 0x4C75,\n  0xE8BA8D: 0x4C76,\n  0xE99D96: 0x4C77,\n  0xE69FB3: 0x4C78,\n  0xE896AE: 0x4C79,\n  0xE99193: 0x4C7A,\n  0xE68489: 0x4C7B,\n  0xE68488: 0x4C7C,\n  0xE6B2B9: 0x4C7D,\n  0xE79992: 0x4C7E,\n  0xE8ABAD: 0x4D21,\n  0xE8BCB8: 0x4D22,\n  0xE594AF: 0x4D23,\n  0xE4BD91: 0x4D24,\n  0xE584AA: 0x4D25,\n  0xE58B87: 0x4D26,\n  0xE58F8B: 0x4D27,\n  0xE5AEA5: 0x4D28,\n  0xE5B9BD: 0x4D29,\n  0xE682A0: 0x4D2A,\n  0xE68682: 0x4D2B,\n  0xE68F96: 0x4D2C,\n  0xE69C89: 0x4D2D,\n  0xE69F9A: 0x4D2E,\n  0xE6B9A7: 0x4D2F,\n  0xE6B68C: 0x4D30,\n  0xE78CB6: 0x4D31,\n  0xE78CB7: 0x4D32,\n  0xE794B1: 0x4D33,\n  0xE7A590: 0x4D34,\n  0xE8A395: 0x4D35,\n  0xE8AA98: 0x4D36,\n  0xE9818A: 0x4D37,\n  0xE98291: 0x4D38,\n  0xE983B5: 0x4D39,\n  0xE99B84: 0x4D3A,\n  0xE89E8D: 0x4D3B,\n  0xE5A495: 0x4D3C,\n  0xE4BA88: 0x4D3D,\n  0xE4BD99: 0x4D3E,\n  0xE4B88E: 0x4D3F,\n  0xE8AA89: 0x4D40,\n  0xE8BCBF: 0x4D41,\n  0xE9A090: 0x4D42,\n  0xE582AD: 0x4D43,\n  0xE5B9BC: 0x4D44,\n  0xE5A696: 0x4D45,\n  0xE5AEB9: 0x4D46,\n  0xE5BAB8: 0x4D47,\n  0xE68F9A: 0x4D48,\n  0xE68FBA: 0x4D49,\n  0xE69381: 0x4D4A,\n  0xE69B9C: 0x4D4B,\n  0xE6A58A: 0x4D4C,\n  0xE6A798: 0x4D4D,\n  0xE6B48B: 0x4D4E,\n  0xE6BAB6: 0x4D4F,\n  0xE78694: 0x4D50,\n  0xE794A8: 0x4D51,\n  0xE7AAAF: 0x4D52,\n  0xE7BE8A: 0x4D53,\n  0xE88080: 0x4D54,\n  0xE89189: 0x4D55,\n  0xE89389: 0x4D56,\n  0xE8A681: 0x4D57,\n  0xE8ACA1: 0x4D58,\n  0xE8B88A: 0x4D59,\n  0xE981A5: 0x4D5A,\n  0xE999BD: 0x4D5B,\n  0xE9A48A: 0x4D5C,\n  0xE685BE: 0x4D5D,\n  0xE68A91: 0x4D5E,\n  0xE6ACB2: 0x4D5F,\n  0xE6B283: 0x4D60,\n  0xE6B5B4: 0x4D61,\n  0xE7BF8C: 0x4D62,\n  0xE7BFBC: 0x4D63,\n  0xE6B780: 0x4D64,\n  0xE7BE85: 0x4D65,\n  0xE89EBA: 0x4D66,\n  0xE8A3B8: 0x4D67,\n  0xE69DA5: 0x4D68,\n  0xE88EB1: 0x4D69,\n  0xE9A0BC: 0x4D6A,\n  0xE99BB7: 0x4D6B,\n  0xE6B49B: 0x4D6C,\n  0xE7B5A1: 0x4D6D,\n  0xE890BD: 0x4D6E,\n  0xE985AA: 0x4D6F,\n  0xE4B9B1: 0x4D70,\n  0xE58DB5: 0x4D71,\n  0xE5B590: 0x4D72,\n  0xE6AC84: 0x4D73,\n  0xE6BFAB: 0x4D74,\n  0xE8978D: 0x4D75,\n  0xE898AD: 0x4D76,\n  0xE8A6A7: 0x4D77,\n  0xE588A9: 0x4D78,\n  0xE5908F: 0x4D79,\n  0xE5B1A5: 0x4D7A,\n  0xE69D8E: 0x4D7B,\n  0xE6A2A8: 0x4D7C,\n  0xE79086: 0x4D7D,\n  0xE79283: 0x4D7E,\n  0xE797A2: 0x4E21,\n  0xE8A38F: 0x4E22,\n  0xE8A3A1: 0x4E23,\n  0xE9878C: 0x4E24,\n  0xE99BA2: 0x4E25,\n  0xE999B8: 0x4E26,\n  0xE5BE8B: 0x4E27,\n  0xE78E87: 0x4E28,\n  0xE7AB8B: 0x4E29,\n  0xE8918E: 0x4E2A,\n  0xE68EA0: 0x4E2B,\n  0xE795A5: 0x4E2C,\n  0xE58A89: 0x4E2D,\n  0xE6B581: 0x4E2E,\n  0xE6BA9C: 0x4E2F,\n  0xE79089: 0x4E30,\n  0xE79599: 0x4E31,\n  0xE7A1AB: 0x4E32,\n  0xE7B292: 0x4E33,\n  0xE99A86: 0x4E34,\n  0xE7AB9C: 0x4E35,\n  0xE9BE8D: 0x4E36,\n  0xE4BEB6: 0x4E37,\n  0xE685AE: 0x4E38,\n  0xE69785: 0x4E39,\n  0xE8999C: 0x4E3A,\n  0xE4BA86: 0x4E3B,\n  0xE4BAAE: 0x4E3C,\n  0xE5839A: 0x4E3D,\n  0xE4B8A1: 0x4E3E,\n  0xE5878C: 0x4E3F,\n  0xE5AFAE: 0x4E40,\n  0xE69699: 0x4E41,\n  0xE6A281: 0x4E42,\n  0xE6B6BC: 0x4E43,\n  0xE78C9F: 0x4E44,\n  0xE79982: 0x4E45,\n  0xE79EAD: 0x4E46,\n  0xE7A89C: 0x4E47,\n  0xE7B3A7: 0x4E48,\n  0xE889AF: 0x4E49,\n  0xE8AB92: 0x4E4A,\n  0xE981BC: 0x4E4B,\n  0xE9878F: 0x4E4C,\n  0xE999B5: 0x4E4D,\n  0xE9A098: 0x4E4E,\n  0xE58A9B: 0x4E4F,\n  0xE7B791: 0x4E50,\n  0xE580AB: 0x4E51,\n  0xE58E98: 0x4E52,\n  0xE69E97: 0x4E53,\n  0xE6B78B: 0x4E54,\n  0xE78790: 0x4E55,\n  0xE790B3: 0x4E56,\n  0xE887A8: 0x4E57,\n  0xE8BCAA: 0x4E58,\n  0xE99AA3: 0x4E59,\n  0xE9B197: 0x4E5A,\n  0xE9BA9F: 0x4E5B,\n  0xE791A0: 0x4E5C,\n  0xE5A181: 0x4E5D,\n  0xE6B699: 0x4E5E,\n  0xE7B4AF: 0x4E5F,\n  0xE9A19E: 0x4E60,\n  0xE4BBA4: 0x4E61,\n  0xE4BCB6: 0x4E62,\n  0xE4BE8B: 0x4E63,\n  0xE586B7: 0x4E64,\n  0xE58AB1: 0x4E65,\n  0xE5B6BA: 0x4E66,\n  0xE6809C: 0x4E67,\n  0xE78EB2: 0x4E68,\n  0xE7A4BC: 0x4E69,\n  0xE88B93: 0x4E6A,\n  0xE988B4: 0x4E6B,\n  0xE99AB7: 0x4E6C,\n  0xE99BB6: 0x4E6D,\n  0xE99C8A: 0x4E6E,\n  0xE9BA97: 0x4E6F,\n  0xE9BDA2: 0x4E70,\n  0xE69AA6: 0x4E71,\n  0xE6ADB4: 0x4E72,\n  0xE58897: 0x4E73,\n  0xE58AA3: 0x4E74,\n  0xE78388: 0x4E75,\n  0xE8A382: 0x4E76,\n  0xE5BB89: 0x4E77,\n  0xE6818B: 0x4E78,\n  0xE68690: 0x4E79,\n  0xE6BCA3: 0x4E7A,\n  0xE78589: 0x4E7B,\n  0xE7B0BE: 0x4E7C,\n  0xE7B7B4: 0x4E7D,\n  0xE881AF: 0x4E7E,\n  0xE893AE: 0x4F21,\n  0xE980A3: 0x4F22,\n  0xE98CAC: 0x4F23,\n  0xE59182: 0x4F24,\n  0xE9ADAF: 0x4F25,\n  0xE6AB93: 0x4F26,\n  0xE78289: 0x4F27,\n  0xE8B382: 0x4F28,\n  0xE8B7AF: 0x4F29,\n  0xE99CB2: 0x4F2A,\n  0xE58AB4: 0x4F2B,\n  0xE5A981: 0x4F2C,\n  0xE5BB8A: 0x4F2D,\n  0xE5BC84: 0x4F2E,\n  0xE69C97: 0x4F2F,\n  0xE6A5BC: 0x4F30,\n  0xE6A694: 0x4F31,\n  0xE6B5AA: 0x4F32,\n  0xE6BC8F: 0x4F33,\n  0xE789A2: 0x4F34,\n  0xE78BBC: 0x4F35,\n  0xE7AFAD: 0x4F36,\n  0xE88081: 0x4F37,\n  0xE881BE: 0x4F38,\n  0xE89D8B: 0x4F39,\n  0xE9838E: 0x4F3A,\n  0xE585AD: 0x4F3B,\n  0xE9BA93: 0x4F3C,\n  0xE7A684: 0x4F3D,\n  0xE8828B: 0x4F3E,\n  0xE98CB2: 0x4F3F,\n  0xE8AB96: 0x4F40,\n  0xE580AD: 0x4F41,\n  0xE5928C: 0x4F42,\n  0xE8A9B1: 0x4F43,\n  0xE6ADAA: 0x4F44,\n  0xE8B384: 0x4F45,\n  0xE88487: 0x4F46,\n  0xE68391: 0x4F47,\n  0xE69EA0: 0x4F48,\n  0xE9B7B2: 0x4F49,\n  0xE4BA99: 0x4F4A,\n  0xE4BA98: 0x4F4B,\n  0xE9B090: 0x4F4C,\n  0xE8A9AB: 0x4F4D,\n  0xE89781: 0x4F4E,\n  0xE895A8: 0x4F4F,\n  0xE6A480: 0x4F50,\n  0xE6B9BE: 0x4F51,\n  0xE7A297: 0x4F52,\n  0xE88595: 0x4F53,\n  0xE5BC8C: 0x5021,\n  0xE4B890: 0x5022,\n  0xE4B895: 0x5023,\n  0xE4B8AA: 0x5024,\n  0xE4B8B1: 0x5025,\n  0xE4B8B6: 0x5026,\n  0xE4B8BC: 0x5027,\n  0xE4B8BF: 0x5028,\n  0xE4B982: 0x5029,\n  0xE4B996: 0x502A,\n  0xE4B998: 0x502B,\n  0xE4BA82: 0x502C,\n  0xE4BA85: 0x502D,\n  0xE8B1AB: 0x502E,\n  0xE4BA8A: 0x502F,\n  0xE88892: 0x5030,\n  0xE5BC8D: 0x5031,\n  0xE4BA8E: 0x5032,\n  0xE4BA9E: 0x5033,\n  0xE4BA9F: 0x5034,\n  0xE4BAA0: 0x5035,\n  0xE4BAA2: 0x5036,\n  0xE4BAB0: 0x5037,\n  0xE4BAB3: 0x5038,\n  0xE4BAB6: 0x5039,\n  0xE4BB8E: 0x503A,\n  0xE4BB8D: 0x503B,\n  0xE4BB84: 0x503C,\n  0xE4BB86: 0x503D,\n  0xE4BB82: 0x503E,\n  0xE4BB97: 0x503F,\n  0xE4BB9E: 0x5040,\n  0xE4BBAD: 0x5041,\n  0xE4BB9F: 0x5042,\n  0xE4BBB7: 0x5043,\n  0xE4BC89: 0x5044,\n  0xE4BD9A: 0x5045,\n  0xE4BCB0: 0x5046,\n  0xE4BD9B: 0x5047,\n  0xE4BD9D: 0x5048,\n  0xE4BD97: 0x5049,\n  0xE4BD87: 0x504A,\n  0xE4BDB6: 0x504B,\n  0xE4BE88: 0x504C,\n  0xE4BE8F: 0x504D,\n  0xE4BE98: 0x504E,\n  0xE4BDBB: 0x504F,\n  0xE4BDA9: 0x5050,\n  0xE4BDB0: 0x5051,\n  0xE4BE91: 0x5052,\n  0xE4BDAF: 0x5053,\n  0xE4BE86: 0x5054,\n  0xE4BE96: 0x5055,\n  0xE58498: 0x5056,\n  0xE4BF94: 0x5057,\n  0xE4BF9F: 0x5058,\n  0xE4BF8E: 0x5059,\n  0xE4BF98: 0x505A,\n  0xE4BF9B: 0x505B,\n  0xE4BF91: 0x505C,\n  0xE4BF9A: 0x505D,\n  0xE4BF90: 0x505E,\n  0xE4BFA4: 0x505F,\n  0xE4BFA5: 0x5060,\n  0xE5809A: 0x5061,\n  0xE580A8: 0x5062,\n  0xE58094: 0x5063,\n  0xE580AA: 0x5064,\n  0xE580A5: 0x5065,\n  0xE58085: 0x5066,\n  0xE4BC9C: 0x5067,\n  0xE4BFB6: 0x5068,\n  0xE580A1: 0x5069,\n  0xE580A9: 0x506A,\n  0xE580AC: 0x506B,\n  0xE4BFBE: 0x506C,\n  0xE4BFAF: 0x506D,\n  0xE58091: 0x506E,\n  0xE58086: 0x506F,\n  0xE58183: 0x5070,\n  0xE58187: 0x5071,\n  0xE69C83: 0x5072,\n  0xE58195: 0x5073,\n  0xE58190: 0x5074,\n  0xE58188: 0x5075,\n  0xE5819A: 0x5076,\n  0xE58196: 0x5077,\n  0xE581AC: 0x5078,\n  0xE581B8: 0x5079,\n  0xE58280: 0x507A,\n  0xE5829A: 0x507B,\n  0xE58285: 0x507C,\n  0xE582B4: 0x507D,\n  0xE582B2: 0x507E,\n  0xE58389: 0x5121,\n  0xE5838A: 0x5122,\n  0xE582B3: 0x5123,\n  0xE58382: 0x5124,\n  0xE58396: 0x5125,\n  0xE5839E: 0x5126,\n  0xE583A5: 0x5127,\n  0xE583AD: 0x5128,\n  0xE583A3: 0x5129,\n  0xE583AE: 0x512A,\n  0xE583B9: 0x512B,\n  0xE583B5: 0x512C,\n  0xE58489: 0x512D,\n  0xE58481: 0x512E,\n  0xE58482: 0x512F,\n  0xE58496: 0x5130,\n  0xE58495: 0x5131,\n  0xE58494: 0x5132,\n  0xE5849A: 0x5133,\n  0xE584A1: 0x5134,\n  0xE584BA: 0x5135,\n  0xE584B7: 0x5136,\n  0xE584BC: 0x5137,\n  0xE584BB: 0x5138,\n  0xE584BF: 0x5139,\n  0xE58580: 0x513A,\n  0xE58592: 0x513B,\n  0xE5858C: 0x513C,\n  0xE58594: 0x513D,\n  0xE585A2: 0x513E,\n  0xE7ABB8: 0x513F,\n  0xE585A9: 0x5140,\n  0xE585AA: 0x5141,\n  0xE585AE: 0x5142,\n  0xE58680: 0x5143,\n  0xE58682: 0x5144,\n  0xE59B98: 0x5145,\n  0xE5868C: 0x5146,\n  0xE58689: 0x5147,\n  0xE5868F: 0x5148,\n  0xE58691: 0x5149,\n  0xE58693: 0x514A,\n  0xE58695: 0x514B,\n  0xE58696: 0x514C,\n  0xE586A4: 0x514D,\n  0xE586A6: 0x514E,\n  0xE586A2: 0x514F,\n  0xE586A9: 0x5150,\n  0xE586AA: 0x5151,\n  0xE586AB: 0x5152,\n  0xE586B3: 0x5153,\n  0xE586B1: 0x5154,\n  0xE586B2: 0x5155,\n  0xE586B0: 0x5156,\n  0xE586B5: 0x5157,\n  0xE586BD: 0x5158,\n  0xE58785: 0x5159,\n  0xE58789: 0x515A,\n  0xE5879B: 0x515B,\n  0xE587A0: 0x515C,\n  0xE89995: 0x515D,\n  0xE587A9: 0x515E,\n  0xE587AD: 0x515F,\n  0xE587B0: 0x5160,\n  0xE587B5: 0x5161,\n  0xE587BE: 0x5162,\n  0xE58884: 0x5163,\n  0xE5888B: 0x5164,\n  0xE58894: 0x5165,\n  0xE5888E: 0x5166,\n  0xE588A7: 0x5167,\n  0xE588AA: 0x5168,\n  0xE588AE: 0x5169,\n  0xE588B3: 0x516A,\n  0xE588B9: 0x516B,\n  0xE5898F: 0x516C,\n  0xE58984: 0x516D,\n  0xE5898B: 0x516E,\n  0xE5898C: 0x516F,\n  0xE5899E: 0x5170,\n  0xE58994: 0x5171,\n  0xE589AA: 0x5172,\n  0xE589B4: 0x5173,\n  0xE589A9: 0x5174,\n  0xE589B3: 0x5175,\n  0xE589BF: 0x5176,\n  0xE589BD: 0x5177,\n  0xE58A8D: 0x5178,\n  0xE58A94: 0x5179,\n  0xE58A92: 0x517A,\n  0xE589B1: 0x517B,\n  0xE58A88: 0x517C,\n  0xE58A91: 0x517D,\n  0xE8BEA8: 0x517E,\n  0xE8BEA7: 0x5221,\n  0xE58AAC: 0x5222,\n  0xE58AAD: 0x5223,\n  0xE58ABC: 0x5224,\n  0xE58AB5: 0x5225,\n  0xE58B81: 0x5226,\n  0xE58B8D: 0x5227,\n  0xE58B97: 0x5228,\n  0xE58B9E: 0x5229,\n  0xE58BA3: 0x522A,\n  0xE58BA6: 0x522B,\n  0xE9A3AD: 0x522C,\n  0xE58BA0: 0x522D,\n  0xE58BB3: 0x522E,\n  0xE58BB5: 0x522F,\n  0xE58BB8: 0x5230,\n  0xE58BB9: 0x5231,\n  0xE58C86: 0x5232,\n  0xE58C88: 0x5233,\n  0xE794B8: 0x5234,\n  0xE58C8D: 0x5235,\n  0xE58C90: 0x5236,\n  0xE58C8F: 0x5237,\n  0xE58C95: 0x5238,\n  0xE58C9A: 0x5239,\n  0xE58CA3: 0x523A,\n  0xE58CAF: 0x523B,\n  0xE58CB1: 0x523C,\n  0xE58CB3: 0x523D,\n  0xE58CB8: 0x523E,\n  0xE58D80: 0x523F,\n  0xE58D86: 0x5240,\n  0xE58D85: 0x5241,\n  0xE4B897: 0x5242,\n  0xE58D89: 0x5243,\n  0xE58D8D: 0x5244,\n  0xE58796: 0x5245,\n  0xE58D9E: 0x5246,\n  0xE58DA9: 0x5247,\n  0xE58DAE: 0x5248,\n  0xE5A498: 0x5249,\n  0xE58DBB: 0x524A,\n  0xE58DB7: 0x524B,\n  0xE58E82: 0x524C,\n  0xE58E96: 0x524D,\n  0xE58EA0: 0x524E,\n  0xE58EA6: 0x524F,\n  0xE58EA5: 0x5250,\n  0xE58EAE: 0x5251,\n  0xE58EB0: 0x5252,\n  0xE58EB6: 0x5253,\n  0xE58F83: 0x5254,\n  0xE7B092: 0x5255,\n  0xE99B99: 0x5256,\n  0xE58F9F: 0x5257,\n  0xE69BBC: 0x5258,\n  0xE787AE: 0x5259,\n  0xE58FAE: 0x525A,\n  0xE58FA8: 0x525B,\n  0xE58FAD: 0x525C,\n  0xE58FBA: 0x525D,\n  0xE59081: 0x525E,\n  0xE590BD: 0x525F,\n  0xE59180: 0x5260,\n  0xE590AC: 0x5261,\n  0xE590AD: 0x5262,\n  0xE590BC: 0x5263,\n  0xE590AE: 0x5264,\n  0xE590B6: 0x5265,\n  0xE590A9: 0x5266,\n  0xE5909D: 0x5267,\n  0xE5918E: 0x5268,\n  0xE5928F: 0x5269,\n  0xE591B5: 0x526A,\n  0xE5928E: 0x526B,\n  0xE5919F: 0x526C,\n  0xE591B1: 0x526D,\n  0xE591B7: 0x526E,\n  0xE591B0: 0x526F,\n  0xE59292: 0x5270,\n  0xE591BB: 0x5271,\n  0xE59280: 0x5272,\n  0xE591B6: 0x5273,\n  0xE59284: 0x5274,\n  0xE59290: 0x5275,\n  0xE59286: 0x5276,\n  0xE59387: 0x5277,\n  0xE592A2: 0x5278,\n  0xE592B8: 0x5279,\n  0xE592A5: 0x527A,\n  0xE592AC: 0x527B,\n  0xE59384: 0x527C,\n  0xE59388: 0x527D,\n  0xE592A8: 0x527E,\n  0xE592AB: 0x5321,\n  0xE59382: 0x5322,\n  0xE592A4: 0x5323,\n  0xE592BE: 0x5324,\n  0xE592BC: 0x5325,\n  0xE59398: 0x5326,\n  0xE593A5: 0x5327,\n  0xE593A6: 0x5328,\n  0xE5948F: 0x5329,\n  0xE59494: 0x532A,\n  0xE593BD: 0x532B,\n  0xE593AE: 0x532C,\n  0xE593AD: 0x532D,\n  0xE593BA: 0x532E,\n  0xE593A2: 0x532F,\n  0xE594B9: 0x5330,\n  0xE59580: 0x5331,\n  0xE595A3: 0x5332,\n  0xE5958C: 0x5333,\n  0xE594AE: 0x5334,\n  0xE5959C: 0x5335,\n  0xE59585: 0x5336,\n  0xE59596: 0x5337,\n  0xE59597: 0x5338,\n  0xE594B8: 0x5339,\n  0xE594B3: 0x533A,\n  0xE5959D: 0x533B,\n  0xE59699: 0x533C,\n  0xE59680: 0x533D,\n  0xE592AF: 0x533E,\n  0xE5968A: 0x533F,\n  0xE5969F: 0x5340,\n  0xE595BB: 0x5341,\n  0xE595BE: 0x5342,\n  0xE59698: 0x5343,\n  0xE5969E: 0x5344,\n  0xE596AE: 0x5345,\n  0xE595BC: 0x5346,\n  0xE59683: 0x5347,\n  0xE596A9: 0x5348,\n  0xE59687: 0x5349,\n  0xE596A8: 0x534A,\n  0xE5979A: 0x534B,\n  0xE59785: 0x534C,\n  0xE5979F: 0x534D,\n  0xE59784: 0x534E,\n  0xE5979C: 0x534F,\n  0xE597A4: 0x5350,\n  0xE59794: 0x5351,\n  0xE59894: 0x5352,\n  0xE597B7: 0x5353,\n  0xE59896: 0x5354,\n  0xE597BE: 0x5355,\n  0xE597BD: 0x5356,\n  0xE5989B: 0x5357,\n  0xE597B9: 0x5358,\n  0xE5998E: 0x5359,\n  0xE59990: 0x535A,\n  0xE7879F: 0x535B,\n  0xE598B4: 0x535C,\n  0xE598B6: 0x535D,\n  0xE598B2: 0x535E,\n  0xE598B8: 0x535F,\n  0xE599AB: 0x5360,\n  0xE599A4: 0x5361,\n  0xE598AF: 0x5362,\n  0xE599AC: 0x5363,\n  0xE599AA: 0x5364,\n  0xE59A86: 0x5365,\n  0xE59A80: 0x5366,\n  0xE59A8A: 0x5367,\n  0xE59AA0: 0x5368,\n  0xE59A94: 0x5369,\n  0xE59A8F: 0x536A,\n  0xE59AA5: 0x536B,\n  0xE59AAE: 0x536C,\n  0xE59AB6: 0x536D,\n  0xE59AB4: 0x536E,\n  0xE59B82: 0x536F,\n  0xE59ABC: 0x5370,\n  0xE59B81: 0x5371,\n  0xE59B83: 0x5372,\n  0xE59B80: 0x5373,\n  0xE59B88: 0x5374,\n  0xE59B8E: 0x5375,\n  0xE59B91: 0x5376,\n  0xE59B93: 0x5377,\n  0xE59B97: 0x5378,\n  0xE59BAE: 0x5379,\n  0xE59BB9: 0x537A,\n  0xE59C80: 0x537B,\n  0xE59BBF: 0x537C,\n  0xE59C84: 0x537D,\n  0xE59C89: 0x537E,\n  0xE59C88: 0x5421,\n  0xE59C8B: 0x5422,\n  0xE59C8D: 0x5423,\n  0xE59C93: 0x5424,\n  0xE59C98: 0x5425,\n  0xE59C96: 0x5426,\n  0xE59787: 0x5427,\n  0xE59C9C: 0x5428,\n  0xE59CA6: 0x5429,\n  0xE59CB7: 0x542A,\n  0xE59CB8: 0x542B,\n  0xE59D8E: 0x542C,\n  0xE59CBB: 0x542D,\n  0xE59D80: 0x542E,\n  0xE59D8F: 0x542F,\n  0xE59DA9: 0x5430,\n  0xE59F80: 0x5431,\n  0xE59E88: 0x5432,\n  0xE59DA1: 0x5433,\n  0xE59DBF: 0x5434,\n  0xE59E89: 0x5435,\n  0xE59E93: 0x5436,\n  0xE59EA0: 0x5437,\n  0xE59EB3: 0x5438,\n  0xE59EA4: 0x5439,\n  0xE59EAA: 0x543A,\n  0xE59EB0: 0x543B,\n  0xE59F83: 0x543C,\n  0xE59F86: 0x543D,\n  0xE59F94: 0x543E,\n  0xE59F92: 0x543F,\n  0xE59F93: 0x5440,\n  0xE5A08A: 0x5441,\n  0xE59F96: 0x5442,\n  0xE59FA3: 0x5443,\n  0xE5A08B: 0x5444,\n  0xE5A099: 0x5445,\n  0xE5A09D: 0x5446,\n  0xE5A1B2: 0x5447,\n  0xE5A0A1: 0x5448,\n  0xE5A1A2: 0x5449,\n  0xE5A18B: 0x544A,\n  0xE5A1B0: 0x544B,\n  0xE6AF80: 0x544C,\n  0xE5A192: 0x544D,\n  0xE5A0BD: 0x544E,\n  0xE5A1B9: 0x544F,\n  0xE5A285: 0x5450,\n  0xE5A2B9: 0x5451,\n  0xE5A29F: 0x5452,\n  0xE5A2AB: 0x5453,\n  0xE5A2BA: 0x5454,\n  0xE5A39E: 0x5455,\n  0xE5A2BB: 0x5456,\n  0xE5A2B8: 0x5457,\n  0xE5A2AE: 0x5458,\n  0xE5A385: 0x5459,\n  0xE5A393: 0x545A,\n  0xE5A391: 0x545B,\n  0xE5A397: 0x545C,\n  0xE5A399: 0x545D,\n  0xE5A398: 0x545E,\n  0xE5A3A5: 0x545F,\n  0xE5A39C: 0x5460,\n  0xE5A3A4: 0x5461,\n  0xE5A39F: 0x5462,\n  0xE5A3AF: 0x5463,\n  0xE5A3BA: 0x5464,\n  0xE5A3B9: 0x5465,\n  0xE5A3BB: 0x5466,\n  0xE5A3BC: 0x5467,\n  0xE5A3BD: 0x5468,\n  0xE5A482: 0x5469,\n  0xE5A48A: 0x546A,\n  0xE5A490: 0x546B,\n  0xE5A49B: 0x546C,\n  0xE6A2A6: 0x546D,\n  0xE5A4A5: 0x546E,\n  0xE5A4AC: 0x546F,\n  0xE5A4AD: 0x5470,\n  0xE5A4B2: 0x5471,\n  0xE5A4B8: 0x5472,\n  0xE5A4BE: 0x5473,\n  0xE7AB92: 0x5474,\n  0xE5A595: 0x5475,\n  0xE5A590: 0x5476,\n  0xE5A58E: 0x5477,\n  0xE5A59A: 0x5478,\n  0xE5A598: 0x5479,\n  0xE5A5A2: 0x547A,\n  0xE5A5A0: 0x547B,\n  0xE5A5A7: 0x547C,\n  0xE5A5AC: 0x547D,\n  0xE5A5A9: 0x547E,\n  0xE5A5B8: 0x5521,\n  0xE5A681: 0x5522,\n  0xE5A69D: 0x5523,\n  0xE4BD9E: 0x5524,\n  0xE4BEAB: 0x5525,\n  0xE5A6A3: 0x5526,\n  0xE5A6B2: 0x5527,\n  0xE5A786: 0x5528,\n  0xE5A7A8: 0x5529,\n  0xE5A79C: 0x552A,\n  0xE5A68D: 0x552B,\n  0xE5A799: 0x552C,\n  0xE5A79A: 0x552D,\n  0xE5A8A5: 0x552E,\n  0xE5A89F: 0x552F,\n  0xE5A891: 0x5530,\n  0xE5A89C: 0x5531,\n  0xE5A889: 0x5532,\n  0xE5A89A: 0x5533,\n  0xE5A980: 0x5534,\n  0xE5A9AC: 0x5535,\n  0xE5A989: 0x5536,\n  0xE5A8B5: 0x5537,\n  0xE5A8B6: 0x5538,\n  0xE5A9A2: 0x5539,\n  0xE5A9AA: 0x553A,\n  0xE5AA9A: 0x553B,\n  0xE5AABC: 0x553C,\n  0xE5AABE: 0x553D,\n  0xE5AB8B: 0x553E,\n  0xE5AB82: 0x553F,\n  0xE5AABD: 0x5540,\n  0xE5ABA3: 0x5541,\n  0xE5AB97: 0x5542,\n  0xE5ABA6: 0x5543,\n  0xE5ABA9: 0x5544,\n  0xE5AB96: 0x5545,\n  0xE5ABBA: 0x5546,\n  0xE5ABBB: 0x5547,\n  0xE5AC8C: 0x5548,\n  0xE5AC8B: 0x5549,\n  0xE5AC96: 0x554A,\n  0xE5ACB2: 0x554B,\n  0xE5AB90: 0x554C,\n  0xE5ACAA: 0x554D,\n  0xE5ACB6: 0x554E,\n  0xE5ACBE: 0x554F,\n  0xE5AD83: 0x5550,\n  0xE5AD85: 0x5551,\n  0xE5AD80: 0x5552,\n  0xE5AD91: 0x5553,\n  0xE5AD95: 0x5554,\n  0xE5AD9A: 0x5555,\n  0xE5AD9B: 0x5556,\n  0xE5ADA5: 0x5557,\n  0xE5ADA9: 0x5558,\n  0xE5ADB0: 0x5559,\n  0xE5ADB3: 0x555A,\n  0xE5ADB5: 0x555B,\n  0xE5ADB8: 0x555C,\n  0xE69688: 0x555D,\n  0xE5ADBA: 0x555E,\n  0xE5AE80: 0x555F,\n  0xE5AE83: 0x5560,\n  0xE5AEA6: 0x5561,\n  0xE5AEB8: 0x5562,\n  0xE5AF83: 0x5563,\n  0xE5AF87: 0x5564,\n  0xE5AF89: 0x5565,\n  0xE5AF94: 0x5566,\n  0xE5AF90: 0x5567,\n  0xE5AFA4: 0x5568,\n  0xE5AFA6: 0x5569,\n  0xE5AFA2: 0x556A,\n  0xE5AF9E: 0x556B,\n  0xE5AFA5: 0x556C,\n  0xE5AFAB: 0x556D,\n  0xE5AFB0: 0x556E,\n  0xE5AFB6: 0x556F,\n  0xE5AFB3: 0x5570,\n  0xE5B085: 0x5571,\n  0xE5B087: 0x5572,\n  0xE5B088: 0x5573,\n  0xE5B08D: 0x5574,\n  0xE5B093: 0x5575,\n  0xE5B0A0: 0x5576,\n  0xE5B0A2: 0x5577,\n  0xE5B0A8: 0x5578,\n  0xE5B0B8: 0x5579,\n  0xE5B0B9: 0x557A,\n  0xE5B181: 0x557B,\n  0xE5B186: 0x557C,\n  0xE5B18E: 0x557D,\n  0xE5B193: 0x557E,\n  0xE5B190: 0x5621,\n  0xE5B18F: 0x5622,\n  0xE5ADB1: 0x5623,\n  0xE5B1AC: 0x5624,\n  0xE5B1AE: 0x5625,\n  0xE4B9A2: 0x5626,\n  0xE5B1B6: 0x5627,\n  0xE5B1B9: 0x5628,\n  0xE5B28C: 0x5629,\n  0xE5B291: 0x562A,\n  0xE5B294: 0x562B,\n  0xE5A69B: 0x562C,\n  0xE5B2AB: 0x562D,\n  0xE5B2BB: 0x562E,\n  0xE5B2B6: 0x562F,\n  0xE5B2BC: 0x5630,\n  0xE5B2B7: 0x5631,\n  0xE5B385: 0x5632,\n  0xE5B2BE: 0x5633,\n  0xE5B387: 0x5634,\n  0xE5B399: 0x5635,\n  0xE5B3A9: 0x5636,\n  0xE5B3BD: 0x5637,\n  0xE5B3BA: 0x5638,\n  0xE5B3AD: 0x5639,\n  0xE5B68C: 0x563A,\n  0xE5B3AA: 0x563B,\n  0xE5B48B: 0x563C,\n  0xE5B495: 0x563D,\n  0xE5B497: 0x563E,\n  0xE5B59C: 0x563F,\n  0xE5B49F: 0x5640,\n  0xE5B49B: 0x5641,\n  0xE5B491: 0x5642,\n  0xE5B494: 0x5643,\n  0xE5B4A2: 0x5644,\n  0xE5B49A: 0x5645,\n  0xE5B499: 0x5646,\n  0xE5B498: 0x5647,\n  0xE5B58C: 0x5648,\n  0xE5B592: 0x5649,\n  0xE5B58E: 0x564A,\n  0xE5B58B: 0x564B,\n  0xE5B5AC: 0x564C,\n  0xE5B5B3: 0x564D,\n  0xE5B5B6: 0x564E,\n  0xE5B687: 0x564F,\n  0xE5B684: 0x5650,\n  0xE5B682: 0x5651,\n  0xE5B6A2: 0x5652,\n  0xE5B69D: 0x5653,\n  0xE5B6AC: 0x5654,\n  0xE5B6AE: 0x5655,\n  0xE5B6BD: 0x5656,\n  0xE5B690: 0x5657,\n  0xE5B6B7: 0x5658,\n  0xE5B6BC: 0x5659,\n  0xE5B789: 0x565A,\n  0xE5B78D: 0x565B,\n  0xE5B793: 0x565C,\n  0xE5B792: 0x565D,\n  0xE5B796: 0x565E,\n  0xE5B79B: 0x565F,\n  0xE5B7AB: 0x5660,\n  0xE5B7B2: 0x5661,\n  0xE5B7B5: 0x5662,\n  0xE5B88B: 0x5663,\n  0xE5B89A: 0x5664,\n  0xE5B899: 0x5665,\n  0xE5B891: 0x5666,\n  0xE5B89B: 0x5667,\n  0xE5B8B6: 0x5668,\n  0xE5B8B7: 0x5669,\n  0xE5B984: 0x566A,\n  0xE5B983: 0x566B,\n  0xE5B980: 0x566C,\n  0xE5B98E: 0x566D,\n  0xE5B997: 0x566E,\n  0xE5B994: 0x566F,\n  0xE5B99F: 0x5670,\n  0xE5B9A2: 0x5671,\n  0xE5B9A4: 0x5672,\n  0xE5B987: 0x5673,\n  0xE5B9B5: 0x5674,\n  0xE5B9B6: 0x5675,\n  0xE5B9BA: 0x5676,\n  0xE9BABC: 0x5677,\n  0xE5B9BF: 0x5678,\n  0xE5BAA0: 0x5679,\n  0xE5BB81: 0x567A,\n  0xE5BB82: 0x567B,\n  0xE5BB88: 0x567C,\n  0xE5BB90: 0x567D,\n  0xE5BB8F: 0x567E,\n  0xE5BB96: 0x5721,\n  0xE5BBA3: 0x5722,\n  0xE5BB9D: 0x5723,\n  0xE5BB9A: 0x5724,\n  0xE5BB9B: 0x5725,\n  0xE5BBA2: 0x5726,\n  0xE5BBA1: 0x5727,\n  0xE5BBA8: 0x5728,\n  0xE5BBA9: 0x5729,\n  0xE5BBAC: 0x572A,\n  0xE5BBB1: 0x572B,\n  0xE5BBB3: 0x572C,\n  0xE5BBB0: 0x572D,\n  0xE5BBB4: 0x572E,\n  0xE5BBB8: 0x572F,\n  0xE5BBBE: 0x5730,\n  0xE5BC83: 0x5731,\n  0xE5BC89: 0x5732,\n  0xE5BD9D: 0x5733,\n  0xE5BD9C: 0x5734,\n  0xE5BC8B: 0x5735,\n  0xE5BC91: 0x5736,\n  0xE5BC96: 0x5737,\n  0xE5BCA9: 0x5738,\n  0xE5BCAD: 0x5739,\n  0xE5BCB8: 0x573A,\n  0xE5BD81: 0x573B,\n  0xE5BD88: 0x573C,\n  0xE5BD8C: 0x573D,\n  0xE5BD8E: 0x573E,\n  0xE5BCAF: 0x573F,\n  0xE5BD91: 0x5740,\n  0xE5BD96: 0x5741,\n  0xE5BD97: 0x5742,\n  0xE5BD99: 0x5743,\n  0xE5BDA1: 0x5744,\n  0xE5BDAD: 0x5745,\n  0xE5BDB3: 0x5746,\n  0xE5BDB7: 0x5747,\n  0xE5BE83: 0x5748,\n  0xE5BE82: 0x5749,\n  0xE5BDBF: 0x574A,\n  0xE5BE8A: 0x574B,\n  0xE5BE88: 0x574C,\n  0xE5BE91: 0x574D,\n  0xE5BE87: 0x574E,\n  0xE5BE9E: 0x574F,\n  0xE5BE99: 0x5750,\n  0xE5BE98: 0x5751,\n  0xE5BEA0: 0x5752,\n  0xE5BEA8: 0x5753,\n  0xE5BEAD: 0x5754,\n  0xE5BEBC: 0x5755,\n  0xE5BF96: 0x5756,\n  0xE5BFBB: 0x5757,\n  0xE5BFA4: 0x5758,\n  0xE5BFB8: 0x5759,\n  0xE5BFB1: 0x575A,\n  0xE5BF9D: 0x575B,\n  0xE682B3: 0x575C,\n  0xE5BFBF: 0x575D,\n  0xE680A1: 0x575E,\n  0xE681A0: 0x575F,\n  0xE68099: 0x5760,\n  0xE68090: 0x5761,\n  0xE680A9: 0x5762,\n  0xE6808E: 0x5763,\n  0xE680B1: 0x5764,\n  0xE6809B: 0x5765,\n  0xE68095: 0x5766,\n  0xE680AB: 0x5767,\n  0xE680A6: 0x5768,\n  0xE6808F: 0x5769,\n  0xE680BA: 0x576A,\n  0xE6819A: 0x576B,\n  0xE68181: 0x576C,\n  0xE681AA: 0x576D,\n  0xE681B7: 0x576E,\n  0xE6819F: 0x576F,\n  0xE6818A: 0x5770,\n  0xE68186: 0x5771,\n  0xE6818D: 0x5772,\n  0xE681A3: 0x5773,\n  0xE68183: 0x5774,\n  0xE681A4: 0x5775,\n  0xE68182: 0x5776,\n  0xE681AC: 0x5777,\n  0xE681AB: 0x5778,\n  0xE68199: 0x5779,\n  0xE68281: 0x577A,\n  0xE6828D: 0x577B,\n  0xE683A7: 0x577C,\n  0xE68283: 0x577D,\n  0xE6829A: 0x577E,\n  0xE68284: 0x5821,\n  0xE6829B: 0x5822,\n  0xE68296: 0x5823,\n  0xE68297: 0x5824,\n  0xE68292: 0x5825,\n  0xE682A7: 0x5826,\n  0xE6828B: 0x5827,\n  0xE683A1: 0x5828,\n  0xE682B8: 0x5829,\n  0xE683A0: 0x582A,\n  0xE68393: 0x582B,\n  0xE682B4: 0x582C,\n  0xE5BFB0: 0x582D,\n  0xE682BD: 0x582E,\n  0xE68386: 0x582F,\n  0xE682B5: 0x5830,\n  0xE68398: 0x5831,\n  0xE6858D: 0x5832,\n  0xE68495: 0x5833,\n  0xE68486: 0x5834,\n  0xE683B6: 0x5835,\n  0xE683B7: 0x5836,\n  0xE68480: 0x5837,\n  0xE683B4: 0x5838,\n  0xE683BA: 0x5839,\n  0xE68483: 0x583A,\n  0xE684A1: 0x583B,\n  0xE683BB: 0x583C,\n  0xE683B1: 0x583D,\n  0xE6848D: 0x583E,\n  0xE6848E: 0x583F,\n  0xE68587: 0x5840,\n  0xE684BE: 0x5841,\n  0xE684A8: 0x5842,\n  0xE684A7: 0x5843,\n  0xE6858A: 0x5844,\n  0xE684BF: 0x5845,\n  0xE684BC: 0x5846,\n  0xE684AC: 0x5847,\n  0xE684B4: 0x5848,\n  0xE684BD: 0x5849,\n  0xE68582: 0x584A,\n  0xE68584: 0x584B,\n  0xE685B3: 0x584C,\n  0xE685B7: 0x584D,\n  0xE68598: 0x584E,\n  0xE68599: 0x584F,\n  0xE6859A: 0x5850,\n  0xE685AB: 0x5851,\n  0xE685B4: 0x5852,\n  0xE685AF: 0x5853,\n  0xE685A5: 0x5854,\n  0xE685B1: 0x5855,\n  0xE6859F: 0x5856,\n  0xE6859D: 0x5857,\n  0xE68593: 0x5858,\n  0xE685B5: 0x5859,\n  0xE68699: 0x585A,\n  0xE68696: 0x585B,\n  0xE68687: 0x585C,\n  0xE686AC: 0x585D,\n  0xE68694: 0x585E,\n  0xE6869A: 0x585F,\n  0xE6868A: 0x5860,\n  0xE68691: 0x5861,\n  0xE686AB: 0x5862,\n  0xE686AE: 0x5863,\n  0xE6878C: 0x5864,\n  0xE6878A: 0x5865,\n  0xE68789: 0x5866,\n  0xE687B7: 0x5867,\n  0xE68788: 0x5868,\n  0xE68783: 0x5869,\n  0xE68786: 0x586A,\n  0xE686BA: 0x586B,\n  0xE6878B: 0x586C,\n  0xE7BDB9: 0x586D,\n  0xE6878D: 0x586E,\n  0xE687A6: 0x586F,\n  0xE687A3: 0x5870,\n  0xE687B6: 0x5871,\n  0xE687BA: 0x5872,\n  0xE687B4: 0x5873,\n  0xE687BF: 0x5874,\n  0xE687BD: 0x5875,\n  0xE687BC: 0x5876,\n  0xE687BE: 0x5877,\n  0xE68880: 0x5878,\n  0xE68888: 0x5879,\n  0xE68889: 0x587A,\n  0xE6888D: 0x587B,\n  0xE6888C: 0x587C,\n  0xE68894: 0x587D,\n  0xE6889B: 0x587E,\n  0xE6889E: 0x5921,\n  0xE688A1: 0x5922,\n  0xE688AA: 0x5923,\n  0xE688AE: 0x5924,\n  0xE688B0: 0x5925,\n  0xE688B2: 0x5926,\n  0xE688B3: 0x5927,\n  0xE68981: 0x5928,\n  0xE6898E: 0x5929,\n  0xE6899E: 0x592A,\n  0xE689A3: 0x592B,\n  0xE6899B: 0x592C,\n  0xE689A0: 0x592D,\n  0xE689A8: 0x592E,\n  0xE689BC: 0x592F,\n  0xE68A82: 0x5930,\n  0xE68A89: 0x5931,\n  0xE689BE: 0x5932,\n  0xE68A92: 0x5933,\n  0xE68A93: 0x5934,\n  0xE68A96: 0x5935,\n  0xE68B94: 0x5936,\n  0xE68A83: 0x5937,\n  0xE68A94: 0x5938,\n  0xE68B97: 0x5939,\n  0xE68B91: 0x593A,\n  0xE68ABB: 0x593B,\n  0xE68B8F: 0x593C,\n  0xE68BBF: 0x593D,\n  0xE68B86: 0x593E,\n  0xE69394: 0x593F,\n  0xE68B88: 0x5940,\n  0xE68B9C: 0x5941,\n  0xE68B8C: 0x5942,\n  0xE68B8A: 0x5943,\n  0xE68B82: 0x5944,\n  0xE68B87: 0x5945,\n  0xE68A9B: 0x5946,\n  0xE68B89: 0x5947,\n  0xE68C8C: 0x5948,\n  0xE68BAE: 0x5949,\n  0xE68BB1: 0x594A,\n  0xE68CA7: 0x594B,\n  0xE68C82: 0x594C,\n  0xE68C88: 0x594D,\n  0xE68BAF: 0x594E,\n  0xE68BB5: 0x594F,\n  0xE68D90: 0x5950,\n  0xE68CBE: 0x5951,\n  0xE68D8D: 0x5952,\n  0xE6909C: 0x5953,\n  0xE68D8F: 0x5954,\n  0xE68E96: 0x5955,\n  0xE68E8E: 0x5956,\n  0xE68E80: 0x5957,\n  0xE68EAB: 0x5958,\n  0xE68DB6: 0x5959,\n  0xE68EA3: 0x595A,\n  0xE68E8F: 0x595B,\n  0xE68E89: 0x595C,\n  0xE68E9F: 0x595D,\n  0xE68EB5: 0x595E,\n  0xE68DAB: 0x595F,\n  0xE68DA9: 0x5960,\n  0xE68EBE: 0x5961,\n  0xE68FA9: 0x5962,\n  0xE68F80: 0x5963,\n  0xE68F86: 0x5964,\n  0xE68FA3: 0x5965,\n  0xE68F89: 0x5966,\n  0xE68F92: 0x5967,\n  0xE68FB6: 0x5968,\n  0xE68F84: 0x5969,\n  0xE69096: 0x596A,\n  0xE690B4: 0x596B,\n  0xE69086: 0x596C,\n  0xE69093: 0x596D,\n  0xE690A6: 0x596E,\n  0xE690B6: 0x596F,\n  0xE6949D: 0x5970,\n  0xE69097: 0x5971,\n  0xE690A8: 0x5972,\n  0xE6908F: 0x5973,\n  0xE691A7: 0x5974,\n  0xE691AF: 0x5975,\n  0xE691B6: 0x5976,\n  0xE6918E: 0x5977,\n  0xE694AA: 0x5978,\n  0xE69295: 0x5979,\n  0xE69293: 0x597A,\n  0xE692A5: 0x597B,\n  0xE692A9: 0x597C,\n  0xE69288: 0x597D,\n  0xE692BC: 0x597E,\n  0xE6939A: 0x5A21,\n  0xE69392: 0x5A22,\n  0xE69385: 0x5A23,\n  0xE69387: 0x5A24,\n  0xE692BB: 0x5A25,\n  0xE69398: 0x5A26,\n  0xE69382: 0x5A27,\n  0xE693B1: 0x5A28,\n  0xE693A7: 0x5A29,\n  0xE88889: 0x5A2A,\n  0xE693A0: 0x5A2B,\n  0xE693A1: 0x5A2C,\n  0xE68AAC: 0x5A2D,\n  0xE693A3: 0x5A2E,\n  0xE693AF: 0x5A2F,\n  0xE694AC: 0x5A30,\n  0xE693B6: 0x5A31,\n  0xE693B4: 0x5A32,\n  0xE693B2: 0x5A33,\n  0xE693BA: 0x5A34,\n  0xE69480: 0x5A35,\n  0xE693BD: 0x5A36,\n  0xE69498: 0x5A37,\n  0xE6949C: 0x5A38,\n  0xE69485: 0x5A39,\n  0xE694A4: 0x5A3A,\n  0xE694A3: 0x5A3B,\n  0xE694AB: 0x5A3C,\n  0xE694B4: 0x5A3D,\n  0xE694B5: 0x5A3E,\n  0xE694B7: 0x5A3F,\n  0xE694B6: 0x5A40,\n  0xE694B8: 0x5A41,\n  0xE7958B: 0x5A42,\n  0xE69588: 0x5A43,\n  0xE69596: 0x5A44,\n  0xE69595: 0x5A45,\n  0xE6958D: 0x5A46,\n  0xE69598: 0x5A47,\n  0xE6959E: 0x5A48,\n  0xE6959D: 0x5A49,\n  0xE695B2: 0x5A4A,\n  0xE695B8: 0x5A4B,\n  0xE69682: 0x5A4C,\n  0xE69683: 0x5A4D,\n  0xE8AE8A: 0x5A4E,\n  0xE6969B: 0x5A4F,\n  0xE6969F: 0x5A50,\n  0xE696AB: 0x5A51,\n  0xE696B7: 0x5A52,\n  0xE69783: 0x5A53,\n  0xE69786: 0x5A54,\n  0xE69781: 0x5A55,\n  0xE69784: 0x5A56,\n  0xE6978C: 0x5A57,\n  0xE69792: 0x5A58,\n  0xE6979B: 0x5A59,\n  0xE69799: 0x5A5A,\n  0xE697A0: 0x5A5B,\n  0xE697A1: 0x5A5C,\n  0xE697B1: 0x5A5D,\n  0xE69DB2: 0x5A5E,\n  0xE6988A: 0x5A5F,\n  0xE69883: 0x5A60,\n  0xE697BB: 0x5A61,\n  0xE69DB3: 0x5A62,\n  0xE698B5: 0x5A63,\n  0xE698B6: 0x5A64,\n  0xE698B4: 0x5A65,\n  0xE6989C: 0x5A66,\n  0xE6998F: 0x5A67,\n  0xE69984: 0x5A68,\n  0xE69989: 0x5A69,\n  0xE69981: 0x5A6A,\n  0xE6999E: 0x5A6B,\n  0xE6999D: 0x5A6C,\n  0xE699A4: 0x5A6D,\n  0xE699A7: 0x5A6E,\n  0xE699A8: 0x5A6F,\n  0xE6999F: 0x5A70,\n  0xE699A2: 0x5A71,\n  0xE699B0: 0x5A72,\n  0xE69A83: 0x5A73,\n  0xE69A88: 0x5A74,\n  0xE69A8E: 0x5A75,\n  0xE69A89: 0x5A76,\n  0xE69A84: 0x5A77,\n  0xE69A98: 0x5A78,\n  0xE69A9D: 0x5A79,\n  0xE69B81: 0x5A7A,\n  0xE69AB9: 0x5A7B,\n  0xE69B89: 0x5A7C,\n  0xE69ABE: 0x5A7D,\n  0xE69ABC: 0x5A7E,\n  0xE69B84: 0x5B21,\n  0xE69AB8: 0x5B22,\n  0xE69B96: 0x5B23,\n  0xE69B9A: 0x5B24,\n  0xE69BA0: 0x5B25,\n  0xE698BF: 0x5B26,\n  0xE69BA6: 0x5B27,\n  0xE69BA9: 0x5B28,\n  0xE69BB0: 0x5B29,\n  0xE69BB5: 0x5B2A,\n  0xE69BB7: 0x5B2B,\n  0xE69C8F: 0x5B2C,\n  0xE69C96: 0x5B2D,\n  0xE69C9E: 0x5B2E,\n  0xE69CA6: 0x5B2F,\n  0xE69CA7: 0x5B30,\n  0xE99CB8: 0x5B31,\n  0xE69CAE: 0x5B32,\n  0xE69CBF: 0x5B33,\n  0xE69CB6: 0x5B34,\n  0xE69D81: 0x5B35,\n  0xE69CB8: 0x5B36,\n  0xE69CB7: 0x5B37,\n  0xE69D86: 0x5B38,\n  0xE69D9E: 0x5B39,\n  0xE69DA0: 0x5B3A,\n  0xE69D99: 0x5B3B,\n  0xE69DA3: 0x5B3C,\n  0xE69DA4: 0x5B3D,\n  0xE69E89: 0x5B3E,\n  0xE69DB0: 0x5B3F,\n  0xE69EA9: 0x5B40,\n  0xE69DBC: 0x5B41,\n  0xE69DAA: 0x5B42,\n  0xE69E8C: 0x5B43,\n  0xE69E8B: 0x5B44,\n  0xE69EA6: 0x5B45,\n  0xE69EA1: 0x5B46,\n  0xE69E85: 0x5B47,\n  0xE69EB7: 0x5B48,\n  0xE69FAF: 0x5B49,\n  0xE69EB4: 0x5B4A,\n  0xE69FAC: 0x5B4B,\n  0xE69EB3: 0x5B4C,\n  0xE69FA9: 0x5B4D,\n  0xE69EB8: 0x5B4E,\n  0xE69FA4: 0x5B4F,\n  0xE69F9E: 0x5B50,\n  0xE69F9D: 0x5B51,\n  0xE69FA2: 0x5B52,\n  0xE69FAE: 0x5B53,\n  0xE69EB9: 0x5B54,\n  0xE69F8E: 0x5B55,\n  0xE69F86: 0x5B56,\n  0xE69FA7: 0x5B57,\n  0xE6AA9C: 0x5B58,\n  0xE6A09E: 0x5B59,\n  0xE6A186: 0x5B5A,\n  0xE6A0A9: 0x5B5B,\n  0xE6A180: 0x5B5C,\n  0xE6A18D: 0x5B5D,\n  0xE6A0B2: 0x5B5E,\n  0xE6A18E: 0x5B5F,\n  0xE6A2B3: 0x5B60,\n  0xE6A0AB: 0x5B61,\n  0xE6A199: 0x5B62,\n  0xE6A1A3: 0x5B63,\n  0xE6A1B7: 0x5B64,\n  0xE6A1BF: 0x5B65,\n  0xE6A29F: 0x5B66,\n  0xE6A28F: 0x5B67,\n  0xE6A2AD: 0x5B68,\n  0xE6A294: 0x5B69,\n  0xE6A29D: 0x5B6A,\n  0xE6A29B: 0x5B6B,\n  0xE6A283: 0x5B6C,\n  0xE6AAAE: 0x5B6D,\n  0xE6A2B9: 0x5B6E,\n  0xE6A1B4: 0x5B6F,\n  0xE6A2B5: 0x5B70,\n  0xE6A2A0: 0x5B71,\n  0xE6A2BA: 0x5B72,\n  0xE6A48F: 0x5B73,\n  0xE6A28D: 0x5B74,\n  0xE6A1BE: 0x5B75,\n  0xE6A481: 0x5B76,\n  0xE6A38A: 0x5B77,\n  0xE6A488: 0x5B78,\n  0xE6A398: 0x5B79,\n  0xE6A4A2: 0x5B7A,\n  0xE6A4A6: 0x5B7B,\n  0xE6A3A1: 0x5B7C,\n  0xE6A48C: 0x5B7D,\n  0xE6A38D: 0x5B7E,\n  0xE6A394: 0x5C21,\n  0xE6A3A7: 0x5C22,\n  0xE6A395: 0x5C23,\n  0xE6A4B6: 0x5C24,\n  0xE6A492: 0x5C25,\n  0xE6A484: 0x5C26,\n  0xE6A397: 0x5C27,\n  0xE6A3A3: 0x5C28,\n  0xE6A4A5: 0x5C29,\n  0xE6A3B9: 0x5C2A,\n  0xE6A3A0: 0x5C2B,\n  0xE6A3AF: 0x5C2C,\n  0xE6A4A8: 0x5C2D,\n  0xE6A4AA: 0x5C2E,\n  0xE6A49A: 0x5C2F,\n  0xE6A4A3: 0x5C30,\n  0xE6A4A1: 0x5C31,\n  0xE6A386: 0x5C32,\n  0xE6A5B9: 0x5C33,\n  0xE6A5B7: 0x5C34,\n  0xE6A59C: 0x5C35,\n  0xE6A5B8: 0x5C36,\n  0xE6A5AB: 0x5C37,\n  0xE6A594: 0x5C38,\n  0xE6A5BE: 0x5C39,\n  0xE6A5AE: 0x5C3A,\n  0xE6A4B9: 0x5C3B,\n  0xE6A5B4: 0x5C3C,\n  0xE6A4BD: 0x5C3D,\n  0xE6A599: 0x5C3E,\n  0xE6A4B0: 0x5C3F,\n  0xE6A5A1: 0x5C40,\n  0xE6A59E: 0x5C41,\n  0xE6A59D: 0x5C42,\n  0xE6A681: 0x5C43,\n  0xE6A5AA: 0x5C44,\n  0xE6A6B2: 0x5C45,\n  0xE6A6AE: 0x5C46,\n  0xE6A790: 0x5C47,\n  0xE6A6BF: 0x5C48,\n  0xE6A781: 0x5C49,\n  0xE6A793: 0x5C4A,\n  0xE6A6BE: 0x5C4B,\n  0xE6A78E: 0x5C4C,\n  0xE5AFA8: 0x5C4D,\n  0xE6A78A: 0x5C4E,\n  0xE6A79D: 0x5C4F,\n  0xE6A6BB: 0x5C50,\n  0xE6A783: 0x5C51,\n  0xE6A6A7: 0x5C52,\n  0xE6A8AE: 0x5C53,\n  0xE6A691: 0x5C54,\n  0xE6A6A0: 0x5C55,\n  0xE6A69C: 0x5C56,\n  0xE6A695: 0x5C57,\n  0xE6A6B4: 0x5C58,\n  0xE6A79E: 0x5C59,\n  0xE6A7A8: 0x5C5A,\n  0xE6A882: 0x5C5B,\n  0xE6A89B: 0x5C5C,\n  0xE6A7BF: 0x5C5D,\n  0xE6AC8A: 0x5C5E,\n  0xE6A7B9: 0x5C5F,\n  0xE6A7B2: 0x5C60,\n  0xE6A7A7: 0x5C61,\n  0xE6A885: 0x5C62,\n  0xE6A6B1: 0x5C63,\n  0xE6A89E: 0x5C64,\n  0xE6A7AD: 0x5C65,\n  0xE6A894: 0x5C66,\n  0xE6A7AB: 0x5C67,\n  0xE6A88A: 0x5C68,\n  0xE6A892: 0x5C69,\n  0xE6AB81: 0x5C6A,\n  0xE6A8A3: 0x5C6B,\n  0xE6A893: 0x5C6C,\n  0xE6A984: 0x5C6D,\n  0xE6A88C: 0x5C6E,\n  0xE6A9B2: 0x5C6F,\n  0xE6A8B6: 0x5C70,\n  0xE6A9B8: 0x5C71,\n  0xE6A987: 0x5C72,\n  0xE6A9A2: 0x5C73,\n  0xE6A999: 0x5C74,\n  0xE6A9A6: 0x5C75,\n  0xE6A988: 0x5C76,\n  0xE6A8B8: 0x5C77,\n  0xE6A8A2: 0x5C78,\n  0xE6AA90: 0x5C79,\n  0xE6AA8D: 0x5C7A,\n  0xE6AAA0: 0x5C7B,\n  0xE6AA84: 0x5C7C,\n  0xE6AAA2: 0x5C7D,\n  0xE6AAA3: 0x5C7E,\n  0xE6AA97: 0x5D21,\n  0xE89897: 0x5D22,\n  0xE6AABB: 0x5D23,\n  0xE6AB83: 0x5D24,\n  0xE6AB82: 0x5D25,\n  0xE6AAB8: 0x5D26,\n  0xE6AAB3: 0x5D27,\n  0xE6AAAC: 0x5D28,\n  0xE6AB9E: 0x5D29,\n  0xE6AB91: 0x5D2A,\n  0xE6AB9F: 0x5D2B,\n  0xE6AAAA: 0x5D2C,\n  0xE6AB9A: 0x5D2D,\n  0xE6ABAA: 0x5D2E,\n  0xE6ABBB: 0x5D2F,\n  0xE6AC85: 0x5D30,\n  0xE89896: 0x5D31,\n  0xE6ABBA: 0x5D32,\n  0xE6AC92: 0x5D33,\n  0xE6AC96: 0x5D34,\n  0xE9ACB1: 0x5D35,\n  0xE6AC9F: 0x5D36,\n  0xE6ACB8: 0x5D37,\n  0xE6ACB7: 0x5D38,\n  0xE79B9C: 0x5D39,\n  0xE6ACB9: 0x5D3A,\n  0xE9A3AE: 0x5D3B,\n  0xE6AD87: 0x5D3C,\n  0xE6AD83: 0x5D3D,\n  0xE6AD89: 0x5D3E,\n  0xE6AD90: 0x5D3F,\n  0xE6AD99: 0x5D40,\n  0xE6AD94: 0x5D41,\n  0xE6AD9B: 0x5D42,\n  0xE6AD9F: 0x5D43,\n  0xE6ADA1: 0x5D44,\n  0xE6ADB8: 0x5D45,\n  0xE6ADB9: 0x5D46,\n  0xE6ADBF: 0x5D47,\n  0xE6AE80: 0x5D48,\n  0xE6AE84: 0x5D49,\n  0xE6AE83: 0x5D4A,\n  0xE6AE8D: 0x5D4B,\n  0xE6AE98: 0x5D4C,\n  0xE6AE95: 0x5D4D,\n  0xE6AE9E: 0x5D4E,\n  0xE6AEA4: 0x5D4F,\n  0xE6AEAA: 0x5D50,\n  0xE6AEAB: 0x5D51,\n  0xE6AEAF: 0x5D52,\n  0xE6AEB2: 0x5D53,\n  0xE6AEB1: 0x5D54,\n  0xE6AEB3: 0x5D55,\n  0xE6AEB7: 0x5D56,\n  0xE6AEBC: 0x5D57,\n  0xE6AF86: 0x5D58,\n  0xE6AF8B: 0x5D59,\n  0xE6AF93: 0x5D5A,\n  0xE6AF9F: 0x5D5B,\n  0xE6AFAC: 0x5D5C,\n  0xE6AFAB: 0x5D5D,\n  0xE6AFB3: 0x5D5E,\n  0xE6AFAF: 0x5D5F,\n  0xE9BABE: 0x5D60,\n  0xE6B088: 0x5D61,\n  0xE6B093: 0x5D62,\n  0xE6B094: 0x5D63,\n  0xE6B09B: 0x5D64,\n  0xE6B0A4: 0x5D65,\n  0xE6B0A3: 0x5D66,\n  0xE6B19E: 0x5D67,\n  0xE6B195: 0x5D68,\n  0xE6B1A2: 0x5D69,\n  0xE6B1AA: 0x5D6A,\n  0xE6B282: 0x5D6B,\n  0xE6B28D: 0x5D6C,\n  0xE6B29A: 0x5D6D,\n  0xE6B281: 0x5D6E,\n  0xE6B29B: 0x5D6F,\n  0xE6B1BE: 0x5D70,\n  0xE6B1A8: 0x5D71,\n  0xE6B1B3: 0x5D72,\n  0xE6B292: 0x5D73,\n  0xE6B290: 0x5D74,\n  0xE6B384: 0x5D75,\n  0xE6B3B1: 0x5D76,\n  0xE6B393: 0x5D77,\n  0xE6B2BD: 0x5D78,\n  0xE6B397: 0x5D79,\n  0xE6B385: 0x5D7A,\n  0xE6B39D: 0x5D7B,\n  0xE6B2AE: 0x5D7C,\n  0xE6B2B1: 0x5D7D,\n  0xE6B2BE: 0x5D7E,\n  0xE6B2BA: 0x5E21,\n  0xE6B39B: 0x5E22,\n  0xE6B3AF: 0x5E23,\n  0xE6B399: 0x5E24,\n  0xE6B3AA: 0x5E25,\n  0xE6B49F: 0x5E26,\n  0xE8A18D: 0x5E27,\n  0xE6B4B6: 0x5E28,\n  0xE6B4AB: 0x5E29,\n  0xE6B4BD: 0x5E2A,\n  0xE6B4B8: 0x5E2B,\n  0xE6B499: 0x5E2C,\n  0xE6B4B5: 0x5E2D,\n  0xE6B4B3: 0x5E2E,\n  0xE6B492: 0x5E2F,\n  0xE6B48C: 0x5E30,\n  0xE6B5A3: 0x5E31,\n  0xE6B693: 0x5E32,\n  0xE6B5A4: 0x5E33,\n  0xE6B59A: 0x5E34,\n  0xE6B5B9: 0x5E35,\n  0xE6B599: 0x5E36,\n  0xE6B68E: 0x5E37,\n  0xE6B695: 0x5E38,\n  0xE6BFA4: 0x5E39,\n  0xE6B685: 0x5E3A,\n  0xE6B7B9: 0x5E3B,\n  0xE6B895: 0x5E3C,\n  0xE6B88A: 0x5E3D,\n  0xE6B6B5: 0x5E3E,\n  0xE6B787: 0x5E3F,\n  0xE6B7A6: 0x5E40,\n  0xE6B6B8: 0x5E41,\n  0xE6B786: 0x5E42,\n  0xE6B7AC: 0x5E43,\n  0xE6B79E: 0x5E44,\n  0xE6B78C: 0x5E45,\n  0xE6B7A8: 0x5E46,\n  0xE6B792: 0x5E47,\n  0xE6B785: 0x5E48,\n  0xE6B7BA: 0x5E49,\n  0xE6B799: 0x5E4A,\n  0xE6B7A4: 0x5E4B,\n  0xE6B795: 0x5E4C,\n  0xE6B7AA: 0x5E4D,\n  0xE6B7AE: 0x5E4E,\n  0xE6B8AD: 0x5E4F,\n  0xE6B9AE: 0x5E50,\n  0xE6B8AE: 0x5E51,\n  0xE6B899: 0x5E52,\n  0xE6B9B2: 0x5E53,\n  0xE6B99F: 0x5E54,\n  0xE6B8BE: 0x5E55,\n  0xE6B8A3: 0x5E56,\n  0xE6B9AB: 0x5E57,\n  0xE6B8AB: 0x5E58,\n  0xE6B9B6: 0x5E59,\n  0xE6B98D: 0x5E5A,\n  0xE6B89F: 0x5E5B,\n  0xE6B983: 0x5E5C,\n  0xE6B8BA: 0x5E5D,\n  0xE6B98E: 0x5E5E,\n  0xE6B8A4: 0x5E5F,\n  0xE6BBBF: 0x5E60,\n  0xE6B89D: 0x5E61,\n  0xE6B8B8: 0x5E62,\n  0xE6BA82: 0x5E63,\n  0xE6BAAA: 0x5E64,\n  0xE6BA98: 0x5E65,\n  0xE6BB89: 0x5E66,\n  0xE6BAB7: 0x5E67,\n  0xE6BB93: 0x5E68,\n  0xE6BABD: 0x5E69,\n  0xE6BAAF: 0x5E6A,\n  0xE6BB84: 0x5E6B,\n  0xE6BAB2: 0x5E6C,\n  0xE6BB94: 0x5E6D,\n  0xE6BB95: 0x5E6E,\n  0xE6BA8F: 0x5E6F,\n  0xE6BAA5: 0x5E70,\n  0xE6BB82: 0x5E71,\n  0xE6BA9F: 0x5E72,\n  0xE6BD81: 0x5E73,\n  0xE6BC91: 0x5E74,\n  0xE7818C: 0x5E75,\n  0xE6BBAC: 0x5E76,\n  0xE6BBB8: 0x5E77,\n  0xE6BBBE: 0x5E78,\n  0xE6BCBF: 0x5E79,\n  0xE6BBB2: 0x5E7A,\n  0xE6BCB1: 0x5E7B,\n  0xE6BBAF: 0x5E7C,\n  0xE6BCB2: 0x5E7D,\n  0xE6BB8C: 0x5E7E,\n  0xE6BCBE: 0x5F21,\n  0xE6BC93: 0x5F22,\n  0xE6BBB7: 0x5F23,\n  0xE6BE86: 0x5F24,\n  0xE6BDBA: 0x5F25,\n  0xE6BDB8: 0x5F26,\n  0xE6BE81: 0x5F27,\n  0xE6BE80: 0x5F28,\n  0xE6BDAF: 0x5F29,\n  0xE6BD9B: 0x5F2A,\n  0xE6BFB3: 0x5F2B,\n  0xE6BDAD: 0x5F2C,\n  0xE6BE82: 0x5F2D,\n  0xE6BDBC: 0x5F2E,\n  0xE6BD98: 0x5F2F,\n  0xE6BE8E: 0x5F30,\n  0xE6BE91: 0x5F31,\n  0xE6BF82: 0x5F32,\n  0xE6BDA6: 0x5F33,\n  0xE6BEB3: 0x5F34,\n  0xE6BEA3: 0x5F35,\n  0xE6BEA1: 0x5F36,\n  0xE6BEA4: 0x5F37,\n  0xE6BEB9: 0x5F38,\n  0xE6BF86: 0x5F39,\n  0xE6BEAA: 0x5F3A,\n  0xE6BF9F: 0x5F3B,\n  0xE6BF95: 0x5F3C,\n  0xE6BFAC: 0x5F3D,\n  0xE6BF94: 0x5F3E,\n  0xE6BF98: 0x5F3F,\n  0xE6BFB1: 0x5F40,\n  0xE6BFAE: 0x5F41,\n  0xE6BF9B: 0x5F42,\n  0xE78089: 0x5F43,\n  0xE7808B: 0x5F44,\n  0xE6BFBA: 0x5F45,\n  0xE78091: 0x5F46,\n  0xE78081: 0x5F47,\n  0xE7808F: 0x5F48,\n  0xE6BFBE: 0x5F49,\n  0xE7809B: 0x5F4A,\n  0xE7809A: 0x5F4B,\n  0xE6BDB4: 0x5F4C,\n  0xE7809D: 0x5F4D,\n  0xE78098: 0x5F4E,\n  0xE7809F: 0x5F4F,\n  0xE780B0: 0x5F50,\n  0xE780BE: 0x5F51,\n  0xE780B2: 0x5F52,\n  0xE78191: 0x5F53,\n  0xE781A3: 0x5F54,\n  0xE78299: 0x5F55,\n  0xE78292: 0x5F56,\n  0xE782AF: 0x5F57,\n  0xE783B1: 0x5F58,\n  0xE782AC: 0x5F59,\n  0xE782B8: 0x5F5A,\n  0xE782B3: 0x5F5B,\n  0xE782AE: 0x5F5C,\n  0xE7839F: 0x5F5D,\n  0xE7838B: 0x5F5E,\n  0xE7839D: 0x5F5F,\n  0xE78399: 0x5F60,\n  0xE78489: 0x5F61,\n  0xE783BD: 0x5F62,\n  0xE7849C: 0x5F63,\n  0xE78499: 0x5F64,\n  0xE785A5: 0x5F65,\n  0xE78595: 0x5F66,\n  0xE78688: 0x5F67,\n  0xE785A6: 0x5F68,\n  0xE785A2: 0x5F69,\n  0xE7858C: 0x5F6A,\n  0xE78596: 0x5F6B,\n  0xE785AC: 0x5F6C,\n  0xE7868F: 0x5F6D,\n  0xE787BB: 0x5F6E,\n  0xE78684: 0x5F6F,\n  0xE78695: 0x5F70,\n  0xE786A8: 0x5F71,\n  0xE786AC: 0x5F72,\n  0xE78797: 0x5F73,\n  0xE786B9: 0x5F74,\n  0xE786BE: 0x5F75,\n  0xE78792: 0x5F76,\n  0xE78789: 0x5F77,\n  0xE78794: 0x5F78,\n  0xE7878E: 0x5F79,\n  0xE787A0: 0x5F7A,\n  0xE787AC: 0x5F7B,\n  0xE787A7: 0x5F7C,\n  0xE787B5: 0x5F7D,\n  0xE787BC: 0x5F7E,\n  0xE787B9: 0x6021,\n  0xE787BF: 0x6022,\n  0xE7888D: 0x6023,\n  0xE78890: 0x6024,\n  0xE7889B: 0x6025,\n  0xE788A8: 0x6026,\n  0xE788AD: 0x6027,\n  0xE788AC: 0x6028,\n  0xE788B0: 0x6029,\n  0xE788B2: 0x602A,\n  0xE788BB: 0x602B,\n  0xE788BC: 0x602C,\n  0xE788BF: 0x602D,\n  0xE78980: 0x602E,\n  0xE78986: 0x602F,\n  0xE7898B: 0x6030,\n  0xE78998: 0x6031,\n  0xE789B4: 0x6032,\n  0xE789BE: 0x6033,\n  0xE78A82: 0x6034,\n  0xE78A81: 0x6035,\n  0xE78A87: 0x6036,\n  0xE78A92: 0x6037,\n  0xE78A96: 0x6038,\n  0xE78AA2: 0x6039,\n  0xE78AA7: 0x603A,\n  0xE78AB9: 0x603B,\n  0xE78AB2: 0x603C,\n  0xE78B83: 0x603D,\n  0xE78B86: 0x603E,\n  0xE78B84: 0x603F,\n  0xE78B8E: 0x6040,\n  0xE78B92: 0x6041,\n  0xE78BA2: 0x6042,\n  0xE78BA0: 0x6043,\n  0xE78BA1: 0x6044,\n  0xE78BB9: 0x6045,\n  0xE78BB7: 0x6046,\n  0xE5808F: 0x6047,\n  0xE78C97: 0x6048,\n  0xE78C8A: 0x6049,\n  0xE78C9C: 0x604A,\n  0xE78C96: 0x604B,\n  0xE78C9D: 0x604C,\n  0xE78CB4: 0x604D,\n  0xE78CAF: 0x604E,\n  0xE78CA9: 0x604F,\n  0xE78CA5: 0x6050,\n  0xE78CBE: 0x6051,\n  0xE78D8E: 0x6052,\n  0xE78D8F: 0x6053,\n  0xE9BB98: 0x6054,\n  0xE78D97: 0x6055,\n  0xE78DAA: 0x6056,\n  0xE78DA8: 0x6057,\n  0xE78DB0: 0x6058,\n  0xE78DB8: 0x6059,\n  0xE78DB5: 0x605A,\n  0xE78DBB: 0x605B,\n  0xE78DBA: 0x605C,\n  0xE78F88: 0x605D,\n  0xE78EB3: 0x605E,\n  0xE78F8E: 0x605F,\n  0xE78EBB: 0x6060,\n  0xE78F80: 0x6061,\n  0xE78FA5: 0x6062,\n  0xE78FAE: 0x6063,\n  0xE78F9E: 0x6064,\n  0xE792A2: 0x6065,\n  0xE79085: 0x6066,\n  0xE791AF: 0x6067,\n  0xE790A5: 0x6068,\n  0xE78FB8: 0x6069,\n  0xE790B2: 0x606A,\n  0xE790BA: 0x606B,\n  0xE79195: 0x606C,\n  0xE790BF: 0x606D,\n  0xE7919F: 0x606E,\n  0xE79199: 0x606F,\n  0xE79181: 0x6070,\n  0xE7919C: 0x6071,\n  0xE791A9: 0x6072,\n  0xE791B0: 0x6073,\n  0xE791A3: 0x6074,\n  0xE791AA: 0x6075,\n  0xE791B6: 0x6076,\n  0xE791BE: 0x6077,\n  0xE7928B: 0x6078,\n  0xE7929E: 0x6079,\n  0xE792A7: 0x607A,\n  0xE7938A: 0x607B,\n  0xE7938F: 0x607C,\n  0xE79394: 0x607D,\n  0xE78FB1: 0x607E,\n  0xE793A0: 0x6121,\n  0xE793A3: 0x6122,\n  0xE793A7: 0x6123,\n  0xE793A9: 0x6124,\n  0xE793AE: 0x6125,\n  0xE793B2: 0x6126,\n  0xE793B0: 0x6127,\n  0xE793B1: 0x6128,\n  0xE793B8: 0x6129,\n  0xE793B7: 0x612A,\n  0xE79484: 0x612B,\n  0xE79483: 0x612C,\n  0xE79485: 0x612D,\n  0xE7948C: 0x612E,\n  0xE7948E: 0x612F,\n  0xE7948D: 0x6130,\n  0xE79495: 0x6131,\n  0xE79493: 0x6132,\n  0xE7949E: 0x6133,\n  0xE794A6: 0x6134,\n  0xE794AC: 0x6135,\n  0xE794BC: 0x6136,\n  0xE79584: 0x6137,\n  0xE7958D: 0x6138,\n  0xE7958A: 0x6139,\n  0xE79589: 0x613A,\n  0xE7959B: 0x613B,\n  0xE79586: 0x613C,\n  0xE7959A: 0x613D,\n  0xE795A9: 0x613E,\n  0xE795A4: 0x613F,\n  0xE795A7: 0x6140,\n  0xE795AB: 0x6141,\n  0xE795AD: 0x6142,\n  0xE795B8: 0x6143,\n  0xE795B6: 0x6144,\n  0xE79686: 0x6145,\n  0xE79687: 0x6146,\n  0xE795B4: 0x6147,\n  0xE7968A: 0x6148,\n  0xE79689: 0x6149,\n  0xE79682: 0x614A,\n  0xE79694: 0x614B,\n  0xE7969A: 0x614C,\n  0xE7969D: 0x614D,\n  0xE796A5: 0x614E,\n  0xE796A3: 0x614F,\n  0xE79782: 0x6150,\n  0xE796B3: 0x6151,\n  0xE79783: 0x6152,\n  0xE796B5: 0x6153,\n  0xE796BD: 0x6154,\n  0xE796B8: 0x6155,\n  0xE796BC: 0x6156,\n  0xE796B1: 0x6157,\n  0xE7978D: 0x6158,\n  0xE7978A: 0x6159,\n  0xE79792: 0x615A,\n  0xE79799: 0x615B,\n  0xE797A3: 0x615C,\n  0xE7979E: 0x615D,\n  0xE797BE: 0x615E,\n  0xE797BF: 0x615F,\n  0xE797BC: 0x6160,\n  0xE79881: 0x6161,\n  0xE797B0: 0x6162,\n  0xE797BA: 0x6163,\n  0xE797B2: 0x6164,\n  0xE797B3: 0x6165,\n  0xE7988B: 0x6166,\n  0xE7988D: 0x6167,\n  0xE79889: 0x6168,\n  0xE7989F: 0x6169,\n  0xE798A7: 0x616A,\n  0xE798A0: 0x616B,\n  0xE798A1: 0x616C,\n  0xE798A2: 0x616D,\n  0xE798A4: 0x616E,\n  0xE798B4: 0x616F,\n  0xE798B0: 0x6170,\n  0xE798BB: 0x6171,\n  0xE79987: 0x6172,\n  0xE79988: 0x6173,\n  0xE79986: 0x6174,\n  0xE7999C: 0x6175,\n  0xE79998: 0x6176,\n  0xE799A1: 0x6177,\n  0xE799A2: 0x6178,\n  0xE799A8: 0x6179,\n  0xE799A9: 0x617A,\n  0xE799AA: 0x617B,\n  0xE799A7: 0x617C,\n  0xE799AC: 0x617D,\n  0xE799B0: 0x617E,\n  0xE799B2: 0x6221,\n  0xE799B6: 0x6222,\n  0xE799B8: 0x6223,\n  0xE799BC: 0x6224,\n  0xE79A80: 0x6225,\n  0xE79A83: 0x6226,\n  0xE79A88: 0x6227,\n  0xE79A8B: 0x6228,\n  0xE79A8E: 0x6229,\n  0xE79A96: 0x622A,\n  0xE79A93: 0x622B,\n  0xE79A99: 0x622C,\n  0xE79A9A: 0x622D,\n  0xE79AB0: 0x622E,\n  0xE79AB4: 0x622F,\n  0xE79AB8: 0x6230,\n  0xE79AB9: 0x6231,\n  0xE79ABA: 0x6232,\n  0xE79B82: 0x6233,\n  0xE79B8D: 0x6234,\n  0xE79B96: 0x6235,\n  0xE79B92: 0x6236,\n  0xE79B9E: 0x6237,\n  0xE79BA1: 0x6238,\n  0xE79BA5: 0x6239,\n  0xE79BA7: 0x623A,\n  0xE79BAA: 0x623B,\n  0xE898AF: 0x623C,\n  0xE79BBB: 0x623D,\n  0xE79C88: 0x623E,\n  0xE79C87: 0x623F,\n  0xE79C84: 0x6240,\n  0xE79CA9: 0x6241,\n  0xE79CA4: 0x6242,\n  0xE79C9E: 0x6243,\n  0xE79CA5: 0x6244,\n  0xE79CA6: 0x6245,\n  0xE79C9B: 0x6246,\n  0xE79CB7: 0x6247,\n  0xE79CB8: 0x6248,\n  0xE79D87: 0x6249,\n  0xE79D9A: 0x624A,\n  0xE79DA8: 0x624B,\n  0xE79DAB: 0x624C,\n  0xE79D9B: 0x624D,\n  0xE79DA5: 0x624E,\n  0xE79DBF: 0x624F,\n  0xE79DBE: 0x6250,\n  0xE79DB9: 0x6251,\n  0xE79E8E: 0x6252,\n  0xE79E8B: 0x6253,\n  0xE79E91: 0x6254,\n  0xE79EA0: 0x6255,\n  0xE79E9E: 0x6256,\n  0xE79EB0: 0x6257,\n  0xE79EB6: 0x6258,\n  0xE79EB9: 0x6259,\n  0xE79EBF: 0x625A,\n  0xE79EBC: 0x625B,\n  0xE79EBD: 0x625C,\n  0xE79EBB: 0x625D,\n  0xE79F87: 0x625E,\n  0xE79F8D: 0x625F,\n  0xE79F97: 0x6260,\n  0xE79F9A: 0x6261,\n  0xE79F9C: 0x6262,\n  0xE79FA3: 0x6263,\n  0xE79FAE: 0x6264,\n  0xE79FBC: 0x6265,\n  0xE7A08C: 0x6266,\n  0xE7A092: 0x6267,\n  0xE7A4A6: 0x6268,\n  0xE7A0A0: 0x6269,\n  0xE7A4AA: 0x626A,\n  0xE7A185: 0x626B,\n  0xE7A28E: 0x626C,\n  0xE7A1B4: 0x626D,\n  0xE7A286: 0x626E,\n  0xE7A1BC: 0x626F,\n  0xE7A29A: 0x6270,\n  0xE7A28C: 0x6271,\n  0xE7A2A3: 0x6272,\n  0xE7A2B5: 0x6273,\n  0xE7A2AA: 0x6274,\n  0xE7A2AF: 0x6275,\n  0xE7A391: 0x6276,\n  0xE7A386: 0x6277,\n  0xE7A38B: 0x6278,\n  0xE7A394: 0x6279,\n  0xE7A2BE: 0x627A,\n  0xE7A2BC: 0x627B,\n  0xE7A385: 0x627C,\n  0xE7A38A: 0x627D,\n  0xE7A3AC: 0x627E,\n  0xE7A3A7: 0x6321,\n  0xE7A39A: 0x6322,\n  0xE7A3BD: 0x6323,\n  0xE7A3B4: 0x6324,\n  0xE7A487: 0x6325,\n  0xE7A492: 0x6326,\n  0xE7A491: 0x6327,\n  0xE7A499: 0x6328,\n  0xE7A4AC: 0x6329,\n  0xE7A4AB: 0x632A,\n  0xE7A580: 0x632B,\n  0xE7A5A0: 0x632C,\n  0xE7A597: 0x632D,\n  0xE7A59F: 0x632E,\n  0xE7A59A: 0x632F,\n  0xE7A595: 0x6330,\n  0xE7A593: 0x6331,\n  0xE7A5BA: 0x6332,\n  0xE7A5BF: 0x6333,\n  0xE7A68A: 0x6334,\n  0xE7A69D: 0x6335,\n  0xE7A6A7: 0x6336,\n  0xE9BD8B: 0x6337,\n  0xE7A6AA: 0x6338,\n  0xE7A6AE: 0x6339,\n  0xE7A6B3: 0x633A,\n  0xE7A6B9: 0x633B,\n  0xE7A6BA: 0x633C,\n  0xE7A789: 0x633D,\n  0xE7A795: 0x633E,\n  0xE7A7A7: 0x633F,\n  0xE7A7AC: 0x6340,\n  0xE7A7A1: 0x6341,\n  0xE7A7A3: 0x6342,\n  0xE7A888: 0x6343,\n  0xE7A88D: 0x6344,\n  0xE7A898: 0x6345,\n  0xE7A899: 0x6346,\n  0xE7A8A0: 0x6347,\n  0xE7A89F: 0x6348,\n  0xE7A680: 0x6349,\n  0xE7A8B1: 0x634A,\n  0xE7A8BB: 0x634B,\n  0xE7A8BE: 0x634C,\n  0xE7A8B7: 0x634D,\n  0xE7A983: 0x634E,\n  0xE7A997: 0x634F,\n  0xE7A989: 0x6350,\n  0xE7A9A1: 0x6351,\n  0xE7A9A2: 0x6352,\n  0xE7A9A9: 0x6353,\n  0xE9BE9D: 0x6354,\n  0xE7A9B0: 0x6355,\n  0xE7A9B9: 0x6356,\n  0xE7A9BD: 0x6357,\n  0xE7AA88: 0x6358,\n  0xE7AA97: 0x6359,\n  0xE7AA95: 0x635A,\n  0xE7AA98: 0x635B,\n  0xE7AA96: 0x635C,\n  0xE7AAA9: 0x635D,\n  0xE7AB88: 0x635E,\n  0xE7AAB0: 0x635F,\n  0xE7AAB6: 0x6360,\n  0xE7AB85: 0x6361,\n  0xE7AB84: 0x6362,\n  0xE7AABF: 0x6363,\n  0xE98283: 0x6364,\n  0xE7AB87: 0x6365,\n  0xE7AB8A: 0x6366,\n  0xE7AB8D: 0x6367,\n  0xE7AB8F: 0x6368,\n  0xE7AB95: 0x6369,\n  0xE7AB93: 0x636A,\n  0xE7AB99: 0x636B,\n  0xE7AB9A: 0x636C,\n  0xE7AB9D: 0x636D,\n  0xE7ABA1: 0x636E,\n  0xE7ABA2: 0x636F,\n  0xE7ABA6: 0x6370,\n  0xE7ABAD: 0x6371,\n  0xE7ABB0: 0x6372,\n  0xE7AC82: 0x6373,\n  0xE7AC8F: 0x6374,\n  0xE7AC8A: 0x6375,\n  0xE7AC86: 0x6376,\n  0xE7ACB3: 0x6377,\n  0xE7AC98: 0x6378,\n  0xE7AC99: 0x6379,\n  0xE7AC9E: 0x637A,\n  0xE7ACB5: 0x637B,\n  0xE7ACA8: 0x637C,\n  0xE7ACB6: 0x637D,\n  0xE7AD90: 0x637E,\n  0xE7ADBA: 0x6421,\n  0xE7AC84: 0x6422,\n  0xE7AD8D: 0x6423,\n  0xE7AC8B: 0x6424,\n  0xE7AD8C: 0x6425,\n  0xE7AD85: 0x6426,\n  0xE7ADB5: 0x6427,\n  0xE7ADA5: 0x6428,\n  0xE7ADB4: 0x6429,\n  0xE7ADA7: 0x642A,\n  0xE7ADB0: 0x642B,\n  0xE7ADB1: 0x642C,\n  0xE7ADAC: 0x642D,\n  0xE7ADAE: 0x642E,\n  0xE7AE9D: 0x642F,\n  0xE7AE98: 0x6430,\n  0xE7AE9F: 0x6431,\n  0xE7AE8D: 0x6432,\n  0xE7AE9C: 0x6433,\n  0xE7AE9A: 0x6434,\n  0xE7AE8B: 0x6435,\n  0xE7AE92: 0x6436,\n  0xE7AE8F: 0x6437,\n  0xE7AD9D: 0x6438,\n  0xE7AE99: 0x6439,\n  0xE7AF8B: 0x643A,\n  0xE7AF81: 0x643B,\n  0xE7AF8C: 0x643C,\n  0xE7AF8F: 0x643D,\n  0xE7AEB4: 0x643E,\n  0xE7AF86: 0x643F,\n  0xE7AF9D: 0x6440,\n  0xE7AFA9: 0x6441,\n  0xE7B091: 0x6442,\n  0xE7B094: 0x6443,\n  0xE7AFA6: 0x6444,\n  0xE7AFA5: 0x6445,\n  0xE7B1A0: 0x6446,\n  0xE7B080: 0x6447,\n  0xE7B087: 0x6448,\n  0xE7B093: 0x6449,\n  0xE7AFB3: 0x644A,\n  0xE7AFB7: 0x644B,\n  0xE7B097: 0x644C,\n  0xE7B08D: 0x644D,\n  0xE7AFB6: 0x644E,\n  0xE7B0A3: 0x644F,\n  0xE7B0A7: 0x6450,\n  0xE7B0AA: 0x6451,\n  0xE7B09F: 0x6452,\n  0xE7B0B7: 0x6453,\n  0xE7B0AB: 0x6454,\n  0xE7B0BD: 0x6455,\n  0xE7B18C: 0x6456,\n  0xE7B183: 0x6457,\n  0xE7B194: 0x6458,\n  0xE7B18F: 0x6459,\n  0xE7B180: 0x645A,\n  0xE7B190: 0x645B,\n  0xE7B198: 0x645C,\n  0xE7B19F: 0x645D,\n  0xE7B1A4: 0x645E,\n  0xE7B196: 0x645F,\n  0xE7B1A5: 0x6460,\n  0xE7B1AC: 0x6461,\n  0xE7B1B5: 0x6462,\n  0xE7B283: 0x6463,\n  0xE7B290: 0x6464,\n  0xE7B2A4: 0x6465,\n  0xE7B2AD: 0x6466,\n  0xE7B2A2: 0x6467,\n  0xE7B2AB: 0x6468,\n  0xE7B2A1: 0x6469,\n  0xE7B2A8: 0x646A,\n  0xE7B2B3: 0x646B,\n  0xE7B2B2: 0x646C,\n  0xE7B2B1: 0x646D,\n  0xE7B2AE: 0x646E,\n  0xE7B2B9: 0x646F,\n  0xE7B2BD: 0x6470,\n  0xE7B380: 0x6471,\n  0xE7B385: 0x6472,\n  0xE7B382: 0x6473,\n  0xE7B398: 0x6474,\n  0xE7B392: 0x6475,\n  0xE7B39C: 0x6476,\n  0xE7B3A2: 0x6477,\n  0xE9ACBB: 0x6478,\n  0xE7B3AF: 0x6479,\n  0xE7B3B2: 0x647A,\n  0xE7B3B4: 0x647B,\n  0xE7B3B6: 0x647C,\n  0xE7B3BA: 0x647D,\n  0xE7B486: 0x647E,\n  0xE7B482: 0x6521,\n  0xE7B49C: 0x6522,\n  0xE7B495: 0x6523,\n  0xE7B48A: 0x6524,\n  0xE7B585: 0x6525,\n  0xE7B58B: 0x6526,\n  0xE7B4AE: 0x6527,\n  0xE7B4B2: 0x6528,\n  0xE7B4BF: 0x6529,\n  0xE7B4B5: 0x652A,\n  0xE7B586: 0x652B,\n  0xE7B5B3: 0x652C,\n  0xE7B596: 0x652D,\n  0xE7B58E: 0x652E,\n  0xE7B5B2: 0x652F,\n  0xE7B5A8: 0x6530,\n  0xE7B5AE: 0x6531,\n  0xE7B58F: 0x6532,\n  0xE7B5A3: 0x6533,\n  0xE7B693: 0x6534,\n  0xE7B689: 0x6535,\n  0xE7B59B: 0x6536,\n  0xE7B68F: 0x6537,\n  0xE7B5BD: 0x6538,\n  0xE7B69B: 0x6539,\n  0xE7B6BA: 0x653A,\n  0xE7B6AE: 0x653B,\n  0xE7B6A3: 0x653C,\n  0xE7B6B5: 0x653D,\n  0xE7B787: 0x653E,\n  0xE7B6BD: 0x653F,\n  0xE7B6AB: 0x6540,\n  0xE7B8BD: 0x6541,\n  0xE7B6A2: 0x6542,\n  0xE7B6AF: 0x6543,\n  0xE7B79C: 0x6544,\n  0xE7B6B8: 0x6545,\n  0xE7B69F: 0x6546,\n  0xE7B6B0: 0x6547,\n  0xE7B798: 0x6548,\n  0xE7B79D: 0x6549,\n  0xE7B7A4: 0x654A,\n  0xE7B79E: 0x654B,\n  0xE7B7BB: 0x654C,\n  0xE7B7B2: 0x654D,\n  0xE7B7A1: 0x654E,\n  0xE7B885: 0x654F,\n  0xE7B88A: 0x6550,\n  0xE7B8A3: 0x6551,\n  0xE7B8A1: 0x6552,\n  0xE7B892: 0x6553,\n  0xE7B8B1: 0x6554,\n  0xE7B89F: 0x6555,\n  0xE7B889: 0x6556,\n  0xE7B88B: 0x6557,\n  0xE7B8A2: 0x6558,\n  0xE7B986: 0x6559,\n  0xE7B9A6: 0x655A,\n  0xE7B8BB: 0x655B,\n  0xE7B8B5: 0x655C,\n  0xE7B8B9: 0x655D,\n  0xE7B983: 0x655E,\n  0xE7B8B7: 0x655F,\n  0xE7B8B2: 0x6560,\n  0xE7B8BA: 0x6561,\n  0xE7B9A7: 0x6562,\n  0xE7B99D: 0x6563,\n  0xE7B996: 0x6564,\n  0xE7B99E: 0x6565,\n  0xE7B999: 0x6566,\n  0xE7B99A: 0x6567,\n  0xE7B9B9: 0x6568,\n  0xE7B9AA: 0x6569,\n  0xE7B9A9: 0x656A,\n  0xE7B9BC: 0x656B,\n  0xE7B9BB: 0x656C,\n  0xE7BA83: 0x656D,\n  0xE7B795: 0x656E,\n  0xE7B9BD: 0x656F,\n  0xE8BEAE: 0x6570,\n  0xE7B9BF: 0x6571,\n  0xE7BA88: 0x6572,\n  0xE7BA89: 0x6573,\n  0xE7BA8C: 0x6574,\n  0xE7BA92: 0x6575,\n  0xE7BA90: 0x6576,\n  0xE7BA93: 0x6577,\n  0xE7BA94: 0x6578,\n  0xE7BA96: 0x6579,\n  0xE7BA8E: 0x657A,\n  0xE7BA9B: 0x657B,\n  0xE7BA9C: 0x657C,\n  0xE7BCB8: 0x657D,\n  0xE7BCBA: 0x657E,\n  0xE7BD85: 0x6621,\n  0xE7BD8C: 0x6622,\n  0xE7BD8D: 0x6623,\n  0xE7BD8E: 0x6624,\n  0xE7BD90: 0x6625,\n  0xE7BD91: 0x6626,\n  0xE7BD95: 0x6627,\n  0xE7BD94: 0x6628,\n  0xE7BD98: 0x6629,\n  0xE7BD9F: 0x662A,\n  0xE7BDA0: 0x662B,\n  0xE7BDA8: 0x662C,\n  0xE7BDA9: 0x662D,\n  0xE7BDA7: 0x662E,\n  0xE7BDB8: 0x662F,\n  0xE7BE82: 0x6630,\n  0xE7BE86: 0x6631,\n  0xE7BE83: 0x6632,\n  0xE7BE88: 0x6633,\n  0xE7BE87: 0x6634,\n  0xE7BE8C: 0x6635,\n  0xE7BE94: 0x6636,\n  0xE7BE9E: 0x6637,\n  0xE7BE9D: 0x6638,\n  0xE7BE9A: 0x6639,\n  0xE7BEA3: 0x663A,\n  0xE7BEAF: 0x663B,\n  0xE7BEB2: 0x663C,\n  0xE7BEB9: 0x663D,\n  0xE7BEAE: 0x663E,\n  0xE7BEB6: 0x663F,\n  0xE7BEB8: 0x6640,\n  0xE8ADB1: 0x6641,\n  0xE7BF85: 0x6642,\n  0xE7BF86: 0x6643,\n  0xE7BF8A: 0x6644,\n  0xE7BF95: 0x6645,\n  0xE7BF94: 0x6646,\n  0xE7BFA1: 0x6647,\n  0xE7BFA6: 0x6648,\n  0xE7BFA9: 0x6649,\n  0xE7BFB3: 0x664A,\n  0xE7BFB9: 0x664B,\n  0xE9A39C: 0x664C,\n  0xE88086: 0x664D,\n  0xE88084: 0x664E,\n  0xE8808B: 0x664F,\n  0xE88092: 0x6650,\n  0xE88098: 0x6651,\n  0xE88099: 0x6652,\n  0xE8809C: 0x6653,\n  0xE880A1: 0x6654,\n  0xE880A8: 0x6655,\n  0xE880BF: 0x6656,\n  0xE880BB: 0x6657,\n  0xE8818A: 0x6658,\n  0xE88186: 0x6659,\n  0xE88192: 0x665A,\n  0xE88198: 0x665B,\n  0xE8819A: 0x665C,\n  0xE8819F: 0x665D,\n  0xE881A2: 0x665E,\n  0xE881A8: 0x665F,\n  0xE881B3: 0x6660,\n  0xE881B2: 0x6661,\n  0xE881B0: 0x6662,\n  0xE881B6: 0x6663,\n  0xE881B9: 0x6664,\n  0xE881BD: 0x6665,\n  0xE881BF: 0x6666,\n  0xE88284: 0x6667,\n  0xE88286: 0x6668,\n  0xE88285: 0x6669,\n  0xE8829B: 0x666A,\n  0xE88293: 0x666B,\n  0xE8829A: 0x666C,\n  0xE882AD: 0x666D,\n  0xE58690: 0x666E,\n  0xE882AC: 0x666F,\n  0xE8839B: 0x6670,\n  0xE883A5: 0x6671,\n  0xE88399: 0x6672,\n  0xE8839D: 0x6673,\n  0xE88384: 0x6674,\n  0xE8839A: 0x6675,\n  0xE88396: 0x6676,\n  0xE88489: 0x6677,\n  0xE883AF: 0x6678,\n  0xE883B1: 0x6679,\n  0xE8849B: 0x667A,\n  0xE884A9: 0x667B,\n  0xE884A3: 0x667C,\n  0xE884AF: 0x667D,\n  0xE8858B: 0x667E,\n  0xE99A8B: 0x6721,\n  0xE88586: 0x6722,\n  0xE884BE: 0x6723,\n  0xE88593: 0x6724,\n  0xE88591: 0x6725,\n  0xE883BC: 0x6726,\n  0xE885B1: 0x6727,\n  0xE885AE: 0x6728,\n  0xE885A5: 0x6729,\n  0xE885A6: 0x672A,\n  0xE885B4: 0x672B,\n  0xE88683: 0x672C,\n  0xE88688: 0x672D,\n  0xE8868A: 0x672E,\n  0xE88680: 0x672F,\n  0xE88682: 0x6730,\n  0xE886A0: 0x6731,\n  0xE88695: 0x6732,\n  0xE886A4: 0x6733,\n  0xE886A3: 0x6734,\n  0xE8859F: 0x6735,\n  0xE88693: 0x6736,\n  0xE886A9: 0x6737,\n  0xE886B0: 0x6738,\n  0xE886B5: 0x6739,\n  0xE886BE: 0x673A,\n  0xE886B8: 0x673B,\n  0xE886BD: 0x673C,\n  0xE88780: 0x673D,\n  0xE88782: 0x673E,\n  0xE886BA: 0x673F,\n  0xE88789: 0x6740,\n  0xE8878D: 0x6741,\n  0xE88791: 0x6742,\n  0xE88799: 0x6743,\n  0xE88798: 0x6744,\n  0xE88788: 0x6745,\n  0xE8879A: 0x6746,\n  0xE8879F: 0x6747,\n  0xE887A0: 0x6748,\n  0xE887A7: 0x6749,\n  0xE887BA: 0x674A,\n  0xE887BB: 0x674B,\n  0xE887BE: 0x674C,\n  0xE88881: 0x674D,\n  0xE88882: 0x674E,\n  0xE88885: 0x674F,\n  0xE88887: 0x6750,\n  0xE8888A: 0x6751,\n  0xE8888D: 0x6752,\n  0xE88890: 0x6753,\n  0xE88896: 0x6754,\n  0xE888A9: 0x6755,\n  0xE888AB: 0x6756,\n  0xE888B8: 0x6757,\n  0xE888B3: 0x6758,\n  0xE88980: 0x6759,\n  0xE88999: 0x675A,\n  0xE88998: 0x675B,\n  0xE8899D: 0x675C,\n  0xE8899A: 0x675D,\n  0xE8899F: 0x675E,\n  0xE889A4: 0x675F,\n  0xE889A2: 0x6760,\n  0xE889A8: 0x6761,\n  0xE889AA: 0x6762,\n  0xE889AB: 0x6763,\n  0xE888AE: 0x6764,\n  0xE889B1: 0x6765,\n  0xE889B7: 0x6766,\n  0xE889B8: 0x6767,\n  0xE889BE: 0x6768,\n  0xE88A8D: 0x6769,\n  0xE88A92: 0x676A,\n  0xE88AAB: 0x676B,\n  0xE88A9F: 0x676C,\n  0xE88ABB: 0x676D,\n  0xE88AAC: 0x676E,\n  0xE88BA1: 0x676F,\n  0xE88BA3: 0x6770,\n  0xE88B9F: 0x6771,\n  0xE88B92: 0x6772,\n  0xE88BB4: 0x6773,\n  0xE88BB3: 0x6774,\n  0xE88BBA: 0x6775,\n  0xE88E93: 0x6776,\n  0xE88C83: 0x6777,\n  0xE88BBB: 0x6778,\n  0xE88BB9: 0x6779,\n  0xE88B9E: 0x677A,\n  0xE88C86: 0x677B,\n  0xE88B9C: 0x677C,\n  0xE88C89: 0x677D,\n  0xE88B99: 0x677E,\n  0xE88CB5: 0x6821,\n  0xE88CB4: 0x6822,\n  0xE88C96: 0x6823,\n  0xE88CB2: 0x6824,\n  0xE88CB1: 0x6825,\n  0xE88D80: 0x6826,\n  0xE88CB9: 0x6827,\n  0xE88D90: 0x6828,\n  0xE88D85: 0x6829,\n  0xE88CAF: 0x682A,\n  0xE88CAB: 0x682B,\n  0xE88C97: 0x682C,\n  0xE88C98: 0x682D,\n  0xE88E85: 0x682E,\n  0xE88E9A: 0x682F,\n  0xE88EAA: 0x6830,\n  0xE88E9F: 0x6831,\n  0xE88EA2: 0x6832,\n  0xE88E96: 0x6833,\n  0xE88CA3: 0x6834,\n  0xE88E8E: 0x6835,\n  0xE88E87: 0x6836,\n  0xE88E8A: 0x6837,\n  0xE88DBC: 0x6838,\n  0xE88EB5: 0x6839,\n  0xE88DB3: 0x683A,\n  0xE88DB5: 0x683B,\n  0xE88EA0: 0x683C,\n  0xE88E89: 0x683D,\n  0xE88EA8: 0x683E,\n  0xE88FB4: 0x683F,\n  0xE89093: 0x6840,\n  0xE88FAB: 0x6841,\n  0xE88F8E: 0x6842,\n  0xE88FBD: 0x6843,\n  0xE89083: 0x6844,\n  0xE88F98: 0x6845,\n  0xE8908B: 0x6846,\n  0xE88F81: 0x6847,\n  0xE88FB7: 0x6848,\n  0xE89087: 0x6849,\n  0xE88FA0: 0x684A,\n  0xE88FB2: 0x684B,\n  0xE8908D: 0x684C,\n  0xE890A2: 0x684D,\n  0xE890A0: 0x684E,\n  0xE88EBD: 0x684F,\n  0xE890B8: 0x6850,\n  0xE89486: 0x6851,\n  0xE88FBB: 0x6852,\n  0xE891AD: 0x6853,\n  0xE890AA: 0x6854,\n  0xE890BC: 0x6855,\n  0xE8959A: 0x6856,\n  0xE89284: 0x6857,\n  0xE891B7: 0x6858,\n  0xE891AB: 0x6859,\n  0xE892AD: 0x685A,\n  0xE891AE: 0x685B,\n  0xE89282: 0x685C,\n  0xE891A9: 0x685D,\n  0xE89186: 0x685E,\n  0xE890AC: 0x685F,\n  0xE891AF: 0x6860,\n  0xE891B9: 0x6861,\n  0xE890B5: 0x6862,\n  0xE8938A: 0x6863,\n  0xE891A2: 0x6864,\n  0xE892B9: 0x6865,\n  0xE892BF: 0x6866,\n  0xE8929F: 0x6867,\n  0xE89399: 0x6868,\n  0xE8938D: 0x6869,\n  0xE892BB: 0x686A,\n  0xE8939A: 0x686B,\n  0xE89390: 0x686C,\n  0xE89381: 0x686D,\n  0xE89386: 0x686E,\n  0xE89396: 0x686F,\n  0xE892A1: 0x6870,\n  0xE894A1: 0x6871,\n  0xE893BF: 0x6872,\n  0xE893B4: 0x6873,\n  0xE89497: 0x6874,\n  0xE89498: 0x6875,\n  0xE894AC: 0x6876,\n  0xE8949F: 0x6877,\n  0xE89495: 0x6878,\n  0xE89494: 0x6879,\n  0xE893BC: 0x687A,\n  0xE89580: 0x687B,\n  0xE895A3: 0x687C,\n  0xE89598: 0x687D,\n  0xE89588: 0x687E,\n  0xE89581: 0x6921,\n  0xE89882: 0x6922,\n  0xE8958B: 0x6923,\n  0xE89595: 0x6924,\n  0xE89680: 0x6925,\n  0xE896A4: 0x6926,\n  0xE89688: 0x6927,\n  0xE89691: 0x6928,\n  0xE8968A: 0x6929,\n  0xE896A8: 0x692A,\n  0xE895AD: 0x692B,\n  0xE89694: 0x692C,\n  0xE8969B: 0x692D,\n  0xE897AA: 0x692E,\n  0xE89687: 0x692F,\n  0xE8969C: 0x6930,\n  0xE895B7: 0x6931,\n  0xE895BE: 0x6932,\n  0xE89690: 0x6933,\n  0xE89789: 0x6934,\n  0xE896BA: 0x6935,\n  0xE8978F: 0x6936,\n  0xE896B9: 0x6937,\n  0xE89790: 0x6938,\n  0xE89795: 0x6939,\n  0xE8979D: 0x693A,\n  0xE897A5: 0x693B,\n  0xE8979C: 0x693C,\n  0xE897B9: 0x693D,\n  0xE8988A: 0x693E,\n  0xE89893: 0x693F,\n  0xE8988B: 0x6940,\n  0xE897BE: 0x6941,\n  0xE897BA: 0x6942,\n  0xE89886: 0x6943,\n  0xE898A2: 0x6944,\n  0xE8989A: 0x6945,\n  0xE898B0: 0x6946,\n  0xE898BF: 0x6947,\n  0xE8998D: 0x6948,\n  0xE4B995: 0x6949,\n  0xE89994: 0x694A,\n  0xE8999F: 0x694B,\n  0xE899A7: 0x694C,\n  0xE899B1: 0x694D,\n  0xE89A93: 0x694E,\n  0xE89AA3: 0x694F,\n  0xE89AA9: 0x6950,\n  0xE89AAA: 0x6951,\n  0xE89A8B: 0x6952,\n  0xE89A8C: 0x6953,\n  0xE89AB6: 0x6954,\n  0xE89AAF: 0x6955,\n  0xE89B84: 0x6956,\n  0xE89B86: 0x6957,\n  0xE89AB0: 0x6958,\n  0xE89B89: 0x6959,\n  0xE8A0A3: 0x695A,\n  0xE89AAB: 0x695B,\n  0xE89B94: 0x695C,\n  0xE89B9E: 0x695D,\n  0xE89BA9: 0x695E,\n  0xE89BAC: 0x695F,\n  0xE89B9F: 0x6960,\n  0xE89B9B: 0x6961,\n  0xE89BAF: 0x6962,\n  0xE89C92: 0x6963,\n  0xE89C86: 0x6964,\n  0xE89C88: 0x6965,\n  0xE89C80: 0x6966,\n  0xE89C83: 0x6967,\n  0xE89BBB: 0x6968,\n  0xE89C91: 0x6969,\n  0xE89C89: 0x696A,\n  0xE89C8D: 0x696B,\n  0xE89BB9: 0x696C,\n  0xE89C8A: 0x696D,\n  0xE89CB4: 0x696E,\n  0xE89CBF: 0x696F,\n  0xE89CB7: 0x6970,\n  0xE89CBB: 0x6971,\n  0xE89CA5: 0x6972,\n  0xE89CA9: 0x6973,\n  0xE89C9A: 0x6974,\n  0xE89DA0: 0x6975,\n  0xE89D9F: 0x6976,\n  0xE89DB8: 0x6977,\n  0xE89D8C: 0x6978,\n  0xE89D8E: 0x6979,\n  0xE89DB4: 0x697A,\n  0xE89D97: 0x697B,\n  0xE89DA8: 0x697C,\n  0xE89DAE: 0x697D,\n  0xE89D99: 0x697E,\n  0xE89D93: 0x6A21,\n  0xE89DA3: 0x6A22,\n  0xE89DAA: 0x6A23,\n  0xE8A085: 0x6A24,\n  0xE89EA2: 0x6A25,\n  0xE89E9F: 0x6A26,\n  0xE89E82: 0x6A27,\n  0xE89EAF: 0x6A28,\n  0xE89F8B: 0x6A29,\n  0xE89EBD: 0x6A2A,\n  0xE89F80: 0x6A2B,\n  0xE89F90: 0x6A2C,\n  0xE99B96: 0x6A2D,\n  0xE89EAB: 0x6A2E,\n  0xE89F84: 0x6A2F,\n  0xE89EB3: 0x6A30,\n  0xE89F87: 0x6A31,\n  0xE89F86: 0x6A32,\n  0xE89EBB: 0x6A33,\n  0xE89FAF: 0x6A34,\n  0xE89FB2: 0x6A35,\n  0xE89FA0: 0x6A36,\n  0xE8A08F: 0x6A37,\n  0xE8A08D: 0x6A38,\n  0xE89FBE: 0x6A39,\n  0xE89FB6: 0x6A3A,\n  0xE89FB7: 0x6A3B,\n  0xE8A08E: 0x6A3C,\n  0xE89F92: 0x6A3D,\n  0xE8A091: 0x6A3E,\n  0xE8A096: 0x6A3F,\n  0xE8A095: 0x6A40,\n  0xE8A0A2: 0x6A41,\n  0xE8A0A1: 0x6A42,\n  0xE8A0B1: 0x6A43,\n  0xE8A0B6: 0x6A44,\n  0xE8A0B9: 0x6A45,\n  0xE8A0A7: 0x6A46,\n  0xE8A0BB: 0x6A47,\n  0xE8A184: 0x6A48,\n  0xE8A182: 0x6A49,\n  0xE8A192: 0x6A4A,\n  0xE8A199: 0x6A4B,\n  0xE8A19E: 0x6A4C,\n  0xE8A1A2: 0x6A4D,\n  0xE8A1AB: 0x6A4E,\n  0xE8A281: 0x6A4F,\n  0xE8A1BE: 0x6A50,\n  0xE8A29E: 0x6A51,\n  0xE8A1B5: 0x6A52,\n  0xE8A1BD: 0x6A53,\n  0xE8A2B5: 0x6A54,\n  0xE8A1B2: 0x6A55,\n  0xE8A282: 0x6A56,\n  0xE8A297: 0x6A57,\n  0xE8A292: 0x6A58,\n  0xE8A2AE: 0x6A59,\n  0xE8A299: 0x6A5A,\n  0xE8A2A2: 0x6A5B,\n  0xE8A28D: 0x6A5C,\n  0xE8A2A4: 0x6A5D,\n  0xE8A2B0: 0x6A5E,\n  0xE8A2BF: 0x6A5F,\n  0xE8A2B1: 0x6A60,\n  0xE8A383: 0x6A61,\n  0xE8A384: 0x6A62,\n  0xE8A394: 0x6A63,\n  0xE8A398: 0x6A64,\n  0xE8A399: 0x6A65,\n  0xE8A39D: 0x6A66,\n  0xE8A3B9: 0x6A67,\n  0xE8A482: 0x6A68,\n  0xE8A3BC: 0x6A69,\n  0xE8A3B4: 0x6A6A,\n  0xE8A3A8: 0x6A6B,\n  0xE8A3B2: 0x6A6C,\n  0xE8A484: 0x6A6D,\n  0xE8A48C: 0x6A6E,\n  0xE8A48A: 0x6A6F,\n  0xE8A493: 0x6A70,\n  0xE8A583: 0x6A71,\n  0xE8A49E: 0x6A72,\n  0xE8A4A5: 0x6A73,\n  0xE8A4AA: 0x6A74,\n  0xE8A4AB: 0x6A75,\n  0xE8A581: 0x6A76,\n  0xE8A584: 0x6A77,\n  0xE8A4BB: 0x6A78,\n  0xE8A4B6: 0x6A79,\n  0xE8A4B8: 0x6A7A,\n  0xE8A58C: 0x6A7B,\n  0xE8A49D: 0x6A7C,\n  0xE8A5A0: 0x6A7D,\n  0xE8A59E: 0x6A7E,\n  0xE8A5A6: 0x6B21,\n  0xE8A5A4: 0x6B22,\n  0xE8A5AD: 0x6B23,\n  0xE8A5AA: 0x6B24,\n  0xE8A5AF: 0x6B25,\n  0xE8A5B4: 0x6B26,\n  0xE8A5B7: 0x6B27,\n  0xE8A5BE: 0x6B28,\n  0xE8A683: 0x6B29,\n  0xE8A688: 0x6B2A,\n  0xE8A68A: 0x6B2B,\n  0xE8A693: 0x6B2C,\n  0xE8A698: 0x6B2D,\n  0xE8A6A1: 0x6B2E,\n  0xE8A6A9: 0x6B2F,\n  0xE8A6A6: 0x6B30,\n  0xE8A6AC: 0x6B31,\n  0xE8A6AF: 0x6B32,\n  0xE8A6B2: 0x6B33,\n  0xE8A6BA: 0x6B34,\n  0xE8A6BD: 0x6B35,\n  0xE8A6BF: 0x6B36,\n  0xE8A780: 0x6B37,\n  0xE8A79A: 0x6B38,\n  0xE8A79C: 0x6B39,\n  0xE8A79D: 0x6B3A,\n  0xE8A7A7: 0x6B3B,\n  0xE8A7B4: 0x6B3C,\n  0xE8A7B8: 0x6B3D,\n  0xE8A883: 0x6B3E,\n  0xE8A896: 0x6B3F,\n  0xE8A890: 0x6B40,\n  0xE8A88C: 0x6B41,\n  0xE8A89B: 0x6B42,\n  0xE8A89D: 0x6B43,\n  0xE8A8A5: 0x6B44,\n  0xE8A8B6: 0x6B45,\n  0xE8A981: 0x6B46,\n  0xE8A99B: 0x6B47,\n  0xE8A992: 0x6B48,\n  0xE8A986: 0x6B49,\n  0xE8A988: 0x6B4A,\n  0xE8A9BC: 0x6B4B,\n  0xE8A9AD: 0x6B4C,\n  0xE8A9AC: 0x6B4D,\n  0xE8A9A2: 0x6B4E,\n  0xE8AA85: 0x6B4F,\n  0xE8AA82: 0x6B50,\n  0xE8AA84: 0x6B51,\n  0xE8AAA8: 0x6B52,\n  0xE8AAA1: 0x6B53,\n  0xE8AA91: 0x6B54,\n  0xE8AAA5: 0x6B55,\n  0xE8AAA6: 0x6B56,\n  0xE8AA9A: 0x6B57,\n  0xE8AAA3: 0x6B58,\n  0xE8AB84: 0x6B59,\n  0xE8AB8D: 0x6B5A,\n  0xE8AB82: 0x6B5B,\n  0xE8AB9A: 0x6B5C,\n  0xE8ABAB: 0x6B5D,\n  0xE8ABB3: 0x6B5E,\n  0xE8ABA7: 0x6B5F,\n  0xE8ABA4: 0x6B60,\n  0xE8ABB1: 0x6B61,\n  0xE8AC94: 0x6B62,\n  0xE8ABA0: 0x6B63,\n  0xE8ABA2: 0x6B64,\n  0xE8ABB7: 0x6B65,\n  0xE8AB9E: 0x6B66,\n  0xE8AB9B: 0x6B67,\n  0xE8AC8C: 0x6B68,\n  0xE8AC87: 0x6B69,\n  0xE8AC9A: 0x6B6A,\n  0xE8ABA1: 0x6B6B,\n  0xE8AC96: 0x6B6C,\n  0xE8AC90: 0x6B6D,\n  0xE8AC97: 0x6B6E,\n  0xE8ACA0: 0x6B6F,\n  0xE8ACB3: 0x6B70,\n  0xE99EAB: 0x6B71,\n  0xE8ACA6: 0x6B72,\n  0xE8ACAB: 0x6B73,\n  0xE8ACBE: 0x6B74,\n  0xE8ACA8: 0x6B75,\n  0xE8AD81: 0x6B76,\n  0xE8AD8C: 0x6B77,\n  0xE8AD8F: 0x6B78,\n  0xE8AD8E: 0x6B79,\n  0xE8AD89: 0x6B7A,\n  0xE8AD96: 0x6B7B,\n  0xE8AD9B: 0x6B7C,\n  0xE8AD9A: 0x6B7D,\n  0xE8ADAB: 0x6B7E,\n  0xE8AD9F: 0x6C21,\n  0xE8ADAC: 0x6C22,\n  0xE8ADAF: 0x6C23,\n  0xE8ADB4: 0x6C24,\n  0xE8ADBD: 0x6C25,\n  0xE8AE80: 0x6C26,\n  0xE8AE8C: 0x6C27,\n  0xE8AE8E: 0x6C28,\n  0xE8AE92: 0x6C29,\n  0xE8AE93: 0x6C2A,\n  0xE8AE96: 0x6C2B,\n  0xE8AE99: 0x6C2C,\n  0xE8AE9A: 0x6C2D,\n  0xE8B0BA: 0x6C2E,\n  0xE8B181: 0x6C2F,\n  0xE8B0BF: 0x6C30,\n  0xE8B188: 0x6C31,\n  0xE8B18C: 0x6C32,\n  0xE8B18E: 0x6C33,\n  0xE8B190: 0x6C34,\n  0xE8B195: 0x6C35,\n  0xE8B1A2: 0x6C36,\n  0xE8B1AC: 0x6C37,\n  0xE8B1B8: 0x6C38,\n  0xE8B1BA: 0x6C39,\n  0xE8B282: 0x6C3A,\n  0xE8B289: 0x6C3B,\n  0xE8B285: 0x6C3C,\n  0xE8B28A: 0x6C3D,\n  0xE8B28D: 0x6C3E,\n  0xE8B28E: 0x6C3F,\n  0xE8B294: 0x6C40,\n  0xE8B1BC: 0x6C41,\n  0xE8B298: 0x6C42,\n  0xE6889D: 0x6C43,\n  0xE8B2AD: 0x6C44,\n  0xE8B2AA: 0x6C45,\n  0xE8B2BD: 0x6C46,\n  0xE8B2B2: 0x6C47,\n  0xE8B2B3: 0x6C48,\n  0xE8B2AE: 0x6C49,\n  0xE8B2B6: 0x6C4A,\n  0xE8B388: 0x6C4B,\n  0xE8B381: 0x6C4C,\n  0xE8B3A4: 0x6C4D,\n  0xE8B3A3: 0x6C4E,\n  0xE8B39A: 0x6C4F,\n  0xE8B3BD: 0x6C50,\n  0xE8B3BA: 0x6C51,\n  0xE8B3BB: 0x6C52,\n  0xE8B484: 0x6C53,\n  0xE8B485: 0x6C54,\n  0xE8B48A: 0x6C55,\n  0xE8B487: 0x6C56,\n  0xE8B48F: 0x6C57,\n  0xE8B48D: 0x6C58,\n  0xE8B490: 0x6C59,\n  0xE9BD8E: 0x6C5A,\n  0xE8B493: 0x6C5B,\n  0xE8B38D: 0x6C5C,\n  0xE8B494: 0x6C5D,\n  0xE8B496: 0x6C5E,\n  0xE8B5A7: 0x6C5F,\n  0xE8B5AD: 0x6C60,\n  0xE8B5B1: 0x6C61,\n  0xE8B5B3: 0x6C62,\n  0xE8B681: 0x6C63,\n  0xE8B699: 0x6C64,\n  0xE8B782: 0x6C65,\n  0xE8B6BE: 0x6C66,\n  0xE8B6BA: 0x6C67,\n  0xE8B78F: 0x6C68,\n  0xE8B79A: 0x6C69,\n  0xE8B796: 0x6C6A,\n  0xE8B78C: 0x6C6B,\n  0xE8B79B: 0x6C6C,\n  0xE8B78B: 0x6C6D,\n  0xE8B7AA: 0x6C6E,\n  0xE8B7AB: 0x6C6F,\n  0xE8B79F: 0x6C70,\n  0xE8B7A3: 0x6C71,\n  0xE8B7BC: 0x6C72,\n  0xE8B888: 0x6C73,\n  0xE8B889: 0x6C74,\n  0xE8B7BF: 0x6C75,\n  0xE8B89D: 0x6C76,\n  0xE8B89E: 0x6C77,\n  0xE8B890: 0x6C78,\n  0xE8B89F: 0x6C79,\n  0xE8B982: 0x6C7A,\n  0xE8B8B5: 0x6C7B,\n  0xE8B8B0: 0x6C7C,\n  0xE8B8B4: 0x6C7D,\n  0xE8B98A: 0x6C7E,\n  0xE8B987: 0x6D21,\n  0xE8B989: 0x6D22,\n  0xE8B98C: 0x6D23,\n  0xE8B990: 0x6D24,\n  0xE8B988: 0x6D25,\n  0xE8B999: 0x6D26,\n  0xE8B9A4: 0x6D27,\n  0xE8B9A0: 0x6D28,\n  0xE8B8AA: 0x6D29,\n  0xE8B9A3: 0x6D2A,\n  0xE8B995: 0x6D2B,\n  0xE8B9B6: 0x6D2C,\n  0xE8B9B2: 0x6D2D,\n  0xE8B9BC: 0x6D2E,\n  0xE8BA81: 0x6D2F,\n  0xE8BA87: 0x6D30,\n  0xE8BA85: 0x6D31,\n  0xE8BA84: 0x6D32,\n  0xE8BA8B: 0x6D33,\n  0xE8BA8A: 0x6D34,\n  0xE8BA93: 0x6D35,\n  0xE8BA91: 0x6D36,\n  0xE8BA94: 0x6D37,\n  0xE8BA99: 0x6D38,\n  0xE8BAAA: 0x6D39,\n  0xE8BAA1: 0x6D3A,\n  0xE8BAAC: 0x6D3B,\n  0xE8BAB0: 0x6D3C,\n  0xE8BB86: 0x6D3D,\n  0xE8BAB1: 0x6D3E,\n  0xE8BABE: 0x6D3F,\n  0xE8BB85: 0x6D40,\n  0xE8BB88: 0x6D41,\n  0xE8BB8B: 0x6D42,\n  0xE8BB9B: 0x6D43,\n  0xE8BBA3: 0x6D44,\n  0xE8BBBC: 0x6D45,\n  0xE8BBBB: 0x6D46,\n  0xE8BBAB: 0x6D47,\n  0xE8BBBE: 0x6D48,\n  0xE8BC8A: 0x6D49,\n  0xE8BC85: 0x6D4A,\n  0xE8BC95: 0x6D4B,\n  0xE8BC92: 0x6D4C,\n  0xE8BC99: 0x6D4D,\n  0xE8BC93: 0x6D4E,\n  0xE8BC9C: 0x6D4F,\n  0xE8BC9F: 0x6D50,\n  0xE8BC9B: 0x6D51,\n  0xE8BC8C: 0x6D52,\n  0xE8BCA6: 0x6D53,\n  0xE8BCB3: 0x6D54,\n  0xE8BCBB: 0x6D55,\n  0xE8BCB9: 0x6D56,\n  0xE8BD85: 0x6D57,\n  0xE8BD82: 0x6D58,\n  0xE8BCBE: 0x6D59,\n  0xE8BD8C: 0x6D5A,\n  0xE8BD89: 0x6D5B,\n  0xE8BD86: 0x6D5C,\n  0xE8BD8E: 0x6D5D,\n  0xE8BD97: 0x6D5E,\n  0xE8BD9C: 0x6D5F,\n  0xE8BDA2: 0x6D60,\n  0xE8BDA3: 0x6D61,\n  0xE8BDA4: 0x6D62,\n  0xE8BE9C: 0x6D63,\n  0xE8BE9F: 0x6D64,\n  0xE8BEA3: 0x6D65,\n  0xE8BEAD: 0x6D66,\n  0xE8BEAF: 0x6D67,\n  0xE8BEB7: 0x6D68,\n  0xE8BF9A: 0x6D69,\n  0xE8BFA5: 0x6D6A,\n  0xE8BFA2: 0x6D6B,\n  0xE8BFAA: 0x6D6C,\n  0xE8BFAF: 0x6D6D,\n  0xE98287: 0x6D6E,\n  0xE8BFB4: 0x6D6F,\n  0xE98085: 0x6D70,\n  0xE8BFB9: 0x6D71,\n  0xE8BFBA: 0x6D72,\n  0xE98091: 0x6D73,\n  0xE98095: 0x6D74,\n  0xE980A1: 0x6D75,\n  0xE9808D: 0x6D76,\n  0xE9809E: 0x6D77,\n  0xE98096: 0x6D78,\n  0xE9808B: 0x6D79,\n  0xE980A7: 0x6D7A,\n  0xE980B6: 0x6D7B,\n  0xE980B5: 0x6D7C,\n  0xE980B9: 0x6D7D,\n  0xE8BFB8: 0x6D7E,\n  0xE9818F: 0x6E21,\n  0xE98190: 0x6E22,\n  0xE98191: 0x6E23,\n  0xE98192: 0x6E24,\n  0xE9808E: 0x6E25,\n  0xE98189: 0x6E26,\n  0xE980BE: 0x6E27,\n  0xE98196: 0x6E28,\n  0xE98198: 0x6E29,\n  0xE9819E: 0x6E2A,\n  0xE981A8: 0x6E2B,\n  0xE981AF: 0x6E2C,\n  0xE981B6: 0x6E2D,\n  0xE99AA8: 0x6E2E,\n  0xE981B2: 0x6E2F,\n  0xE98282: 0x6E30,\n  0xE981BD: 0x6E31,\n  0xE98281: 0x6E32,\n  0xE98280: 0x6E33,\n  0xE9828A: 0x6E34,\n  0xE98289: 0x6E35,\n  0xE9828F: 0x6E36,\n  0xE982A8: 0x6E37,\n  0xE982AF: 0x6E38,\n  0xE982B1: 0x6E39,\n  0xE982B5: 0x6E3A,\n  0xE983A2: 0x6E3B,\n  0xE983A4: 0x6E3C,\n  0xE68988: 0x6E3D,\n  0xE9839B: 0x6E3E,\n  0xE98482: 0x6E3F,\n  0xE98492: 0x6E40,\n  0xE98499: 0x6E41,\n  0xE984B2: 0x6E42,\n  0xE984B0: 0x6E43,\n  0xE9858A: 0x6E44,\n  0xE98596: 0x6E45,\n  0xE98598: 0x6E46,\n  0xE985A3: 0x6E47,\n  0xE985A5: 0x6E48,\n  0xE985A9: 0x6E49,\n  0xE985B3: 0x6E4A,\n  0xE985B2: 0x6E4B,\n  0xE9868B: 0x6E4C,\n  0xE98689: 0x6E4D,\n  0xE98682: 0x6E4E,\n  0xE986A2: 0x6E4F,\n  0xE986AB: 0x6E50,\n  0xE986AF: 0x6E51,\n  0xE986AA: 0x6E52,\n  0xE986B5: 0x6E53,\n  0xE986B4: 0x6E54,\n  0xE986BA: 0x6E55,\n  0xE98780: 0x6E56,\n  0xE98781: 0x6E57,\n  0xE98789: 0x6E58,\n  0xE9878B: 0x6E59,\n  0xE98790: 0x6E5A,\n  0xE98796: 0x6E5B,\n  0xE9879F: 0x6E5C,\n  0xE987A1: 0x6E5D,\n  0xE9879B: 0x6E5E,\n  0xE987BC: 0x6E5F,\n  0xE987B5: 0x6E60,\n  0xE987B6: 0x6E61,\n  0xE9889E: 0x6E62,\n  0xE987BF: 0x6E63,\n  0xE98894: 0x6E64,\n  0xE988AC: 0x6E65,\n  0xE98895: 0x6E66,\n  0xE98891: 0x6E67,\n  0xE9899E: 0x6E68,\n  0xE98997: 0x6E69,\n  0xE98985: 0x6E6A,\n  0xE98989: 0x6E6B,\n  0xE989A4: 0x6E6C,\n  0xE98988: 0x6E6D,\n  0xE98A95: 0x6E6E,\n  0xE988BF: 0x6E6F,\n  0xE9898B: 0x6E70,\n  0xE98990: 0x6E71,\n  0xE98A9C: 0x6E72,\n  0xE98A96: 0x6E73,\n  0xE98A93: 0x6E74,\n  0xE98A9B: 0x6E75,\n  0xE9899A: 0x6E76,\n  0xE98B8F: 0x6E77,\n  0xE98AB9: 0x6E78,\n  0xE98AB7: 0x6E79,\n  0xE98BA9: 0x6E7A,\n  0xE98C8F: 0x6E7B,\n  0xE98BBA: 0x6E7C,\n  0xE98D84: 0x6E7D,\n  0xE98CAE: 0x6E7E,\n  0xE98C99: 0x6F21,\n  0xE98CA2: 0x6F22,\n  0xE98C9A: 0x6F23,\n  0xE98CA3: 0x6F24,\n  0xE98CBA: 0x6F25,\n  0xE98CB5: 0x6F26,\n  0xE98CBB: 0x6F27,\n  0xE98D9C: 0x6F28,\n  0xE98DA0: 0x6F29,\n  0xE98DBC: 0x6F2A,\n  0xE98DAE: 0x6F2B,\n  0xE98D96: 0x6F2C,\n  0xE98EB0: 0x6F2D,\n  0xE98EAC: 0x6F2E,\n  0xE98EAD: 0x6F2F,\n  0xE98E94: 0x6F30,\n  0xE98EB9: 0x6F31,\n  0xE98F96: 0x6F32,\n  0xE98F97: 0x6F33,\n  0xE98FA8: 0x6F34,\n  0xE98FA5: 0x6F35,\n  0xE98F98: 0x6F36,\n  0xE98F83: 0x6F37,\n  0xE98F9D: 0x6F38,\n  0xE98F90: 0x6F39,\n  0xE98F88: 0x6F3A,\n  0xE98FA4: 0x6F3B,\n  0xE9909A: 0x6F3C,\n  0xE99094: 0x6F3D,\n  0xE99093: 0x6F3E,\n  0xE99083: 0x6F3F,\n  0xE99087: 0x6F40,\n  0xE99090: 0x6F41,\n  0xE990B6: 0x6F42,\n  0xE990AB: 0x6F43,\n  0xE990B5: 0x6F44,\n  0xE990A1: 0x6F45,\n  0xE990BA: 0x6F46,\n  0xE99181: 0x6F47,\n  0xE99192: 0x6F48,\n  0xE99184: 0x6F49,\n  0xE9919B: 0x6F4A,\n  0xE991A0: 0x6F4B,\n  0xE991A2: 0x6F4C,\n  0xE9919E: 0x6F4D,\n  0xE991AA: 0x6F4E,\n  0xE988A9: 0x6F4F,\n  0xE991B0: 0x6F50,\n  0xE991B5: 0x6F51,\n  0xE991B7: 0x6F52,\n  0xE991BD: 0x6F53,\n  0xE9919A: 0x6F54,\n  0xE991BC: 0x6F55,\n  0xE991BE: 0x6F56,\n  0xE99281: 0x6F57,\n  0xE991BF: 0x6F58,\n  0xE99682: 0x6F59,\n  0xE99687: 0x6F5A,\n  0xE9968A: 0x6F5B,\n  0xE99694: 0x6F5C,\n  0xE99696: 0x6F5D,\n  0xE99698: 0x6F5E,\n  0xE99699: 0x6F5F,\n  0xE996A0: 0x6F60,\n  0xE996A8: 0x6F61,\n  0xE996A7: 0x6F62,\n  0xE996AD: 0x6F63,\n  0xE996BC: 0x6F64,\n  0xE996BB: 0x6F65,\n  0xE996B9: 0x6F66,\n  0xE996BE: 0x6F67,\n  0xE9978A: 0x6F68,\n  0xE6BFB6: 0x6F69,\n  0xE99783: 0x6F6A,\n  0xE9978D: 0x6F6B,\n  0xE9978C: 0x6F6C,\n  0xE99795: 0x6F6D,\n  0xE99794: 0x6F6E,\n  0xE99796: 0x6F6F,\n  0xE9979C: 0x6F70,\n  0xE997A1: 0x6F71,\n  0xE997A5: 0x6F72,\n  0xE997A2: 0x6F73,\n  0xE998A1: 0x6F74,\n  0xE998A8: 0x6F75,\n  0xE998AE: 0x6F76,\n  0xE998AF: 0x6F77,\n  0xE99982: 0x6F78,\n  0xE9998C: 0x6F79,\n  0xE9998F: 0x6F7A,\n  0xE9998B: 0x6F7B,\n  0xE999B7: 0x6F7C,\n  0xE9999C: 0x6F7D,\n  0xE9999E: 0x6F7E,\n  0xE9999D: 0x7021,\n  0xE9999F: 0x7022,\n  0xE999A6: 0x7023,\n  0xE999B2: 0x7024,\n  0xE999AC: 0x7025,\n  0xE99A8D: 0x7026,\n  0xE99A98: 0x7027,\n  0xE99A95: 0x7028,\n  0xE99A97: 0x7029,\n  0xE99AAA: 0x702A,\n  0xE99AA7: 0x702B,\n  0xE99AB1: 0x702C,\n  0xE99AB2: 0x702D,\n  0xE99AB0: 0x702E,\n  0xE99AB4: 0x702F,\n  0xE99AB6: 0x7030,\n  0xE99AB8: 0x7031,\n  0xE99AB9: 0x7032,\n  0xE99B8E: 0x7033,\n  0xE99B8B: 0x7034,\n  0xE99B89: 0x7035,\n  0xE99B8D: 0x7036,\n  0xE8A58D: 0x7037,\n  0xE99B9C: 0x7038,\n  0xE99C8D: 0x7039,\n  0xE99B95: 0x703A,\n  0xE99BB9: 0x703B,\n  0xE99C84: 0x703C,\n  0xE99C86: 0x703D,\n  0xE99C88: 0x703E,\n  0xE99C93: 0x703F,\n  0xE99C8E: 0x7040,\n  0xE99C91: 0x7041,\n  0xE99C8F: 0x7042,\n  0xE99C96: 0x7043,\n  0xE99C99: 0x7044,\n  0xE99CA4: 0x7045,\n  0xE99CAA: 0x7046,\n  0xE99CB0: 0x7047,\n  0xE99CB9: 0x7048,\n  0xE99CBD: 0x7049,\n  0xE99CBE: 0x704A,\n  0xE99D84: 0x704B,\n  0xE99D86: 0x704C,\n  0xE99D88: 0x704D,\n  0xE99D82: 0x704E,\n  0xE99D89: 0x704F,\n  0xE99D9C: 0x7050,\n  0xE99DA0: 0x7051,\n  0xE99DA4: 0x7052,\n  0xE99DA6: 0x7053,\n  0xE99DA8: 0x7054,\n  0xE58B92: 0x7055,\n  0xE99DAB: 0x7056,\n  0xE99DB1: 0x7057,\n  0xE99DB9: 0x7058,\n  0xE99E85: 0x7059,\n  0xE99DBC: 0x705A,\n  0xE99E81: 0x705B,\n  0xE99DBA: 0x705C,\n  0xE99E86: 0x705D,\n  0xE99E8B: 0x705E,\n  0xE99E8F: 0x705F,\n  0xE99E90: 0x7060,\n  0xE99E9C: 0x7061,\n  0xE99EA8: 0x7062,\n  0xE99EA6: 0x7063,\n  0xE99EA3: 0x7064,\n  0xE99EB3: 0x7065,\n  0xE99EB4: 0x7066,\n  0xE99F83: 0x7067,\n  0xE99F86: 0x7068,\n  0xE99F88: 0x7069,\n  0xE99F8B: 0x706A,\n  0xE99F9C: 0x706B,\n  0xE99FAD: 0x706C,\n  0xE9BD8F: 0x706D,\n  0xE99FB2: 0x706E,\n  0xE7AB9F: 0x706F,\n  0xE99FB6: 0x7070,\n  0xE99FB5: 0x7071,\n  0xE9A08F: 0x7072,\n  0xE9A08C: 0x7073,\n  0xE9A0B8: 0x7074,\n  0xE9A0A4: 0x7075,\n  0xE9A0A1: 0x7076,\n  0xE9A0B7: 0x7077,\n  0xE9A0BD: 0x7078,\n  0xE9A186: 0x7079,\n  0xE9A18F: 0x707A,\n  0xE9A18B: 0x707B,\n  0xE9A1AB: 0x707C,\n  0xE9A1AF: 0x707D,\n  0xE9A1B0: 0x707E,\n  0xE9A1B1: 0x7121,\n  0xE9A1B4: 0x7122,\n  0xE9A1B3: 0x7123,\n  0xE9A2AA: 0x7124,\n  0xE9A2AF: 0x7125,\n  0xE9A2B1: 0x7126,\n  0xE9A2B6: 0x7127,\n  0xE9A384: 0x7128,\n  0xE9A383: 0x7129,\n  0xE9A386: 0x712A,\n  0xE9A3A9: 0x712B,\n  0xE9A3AB: 0x712C,\n  0xE9A483: 0x712D,\n  0xE9A489: 0x712E,\n  0xE9A492: 0x712F,\n  0xE9A494: 0x7130,\n  0xE9A498: 0x7131,\n  0xE9A4A1: 0x7132,\n  0xE9A49D: 0x7133,\n  0xE9A49E: 0x7134,\n  0xE9A4A4: 0x7135,\n  0xE9A4A0: 0x7136,\n  0xE9A4AC: 0x7137,\n  0xE9A4AE: 0x7138,\n  0xE9A4BD: 0x7139,\n  0xE9A4BE: 0x713A,\n  0xE9A582: 0x713B,\n  0xE9A589: 0x713C,\n  0xE9A585: 0x713D,\n  0xE9A590: 0x713E,\n  0xE9A58B: 0x713F,\n  0xE9A591: 0x7140,\n  0xE9A592: 0x7141,\n  0xE9A58C: 0x7142,\n  0xE9A595: 0x7143,\n  0xE9A697: 0x7144,\n  0xE9A698: 0x7145,\n  0xE9A6A5: 0x7146,\n  0xE9A6AD: 0x7147,\n  0xE9A6AE: 0x7148,\n  0xE9A6BC: 0x7149,\n  0xE9A79F: 0x714A,\n  0xE9A79B: 0x714B,\n  0xE9A79D: 0x714C,\n  0xE9A798: 0x714D,\n  0xE9A791: 0x714E,\n  0xE9A7AD: 0x714F,\n  0xE9A7AE: 0x7150,\n  0xE9A7B1: 0x7151,\n  0xE9A7B2: 0x7152,\n  0xE9A7BB: 0x7153,\n  0xE9A7B8: 0x7154,\n  0xE9A881: 0x7155,\n  0xE9A88F: 0x7156,\n  0xE9A885: 0x7157,\n  0xE9A7A2: 0x7158,\n  0xE9A899: 0x7159,\n  0xE9A8AB: 0x715A,\n  0xE9A8B7: 0x715B,\n  0xE9A985: 0x715C,\n  0xE9A982: 0x715D,\n  0xE9A980: 0x715E,\n  0xE9A983: 0x715F,\n  0xE9A8BE: 0x7160,\n  0xE9A995: 0x7161,\n  0xE9A98D: 0x7162,\n  0xE9A99B: 0x7163,\n  0xE9A997: 0x7164,\n  0xE9A99F: 0x7165,\n  0xE9A9A2: 0x7166,\n  0xE9A9A5: 0x7167,\n  0xE9A9A4: 0x7168,\n  0xE9A9A9: 0x7169,\n  0xE9A9AB: 0x716A,\n  0xE9A9AA: 0x716B,\n  0xE9AAAD: 0x716C,\n  0xE9AAB0: 0x716D,\n  0xE9AABC: 0x716E,\n  0xE9AB80: 0x716F,\n  0xE9AB8F: 0x7170,\n  0xE9AB91: 0x7171,\n  0xE9AB93: 0x7172,\n  0xE9AB94: 0x7173,\n  0xE9AB9E: 0x7174,\n  0xE9AB9F: 0x7175,\n  0xE9ABA2: 0x7176,\n  0xE9ABA3: 0x7177,\n  0xE9ABA6: 0x7178,\n  0xE9ABAF: 0x7179,\n  0xE9ABAB: 0x717A,\n  0xE9ABAE: 0x717B,\n  0xE9ABB4: 0x717C,\n  0xE9ABB1: 0x717D,\n  0xE9ABB7: 0x717E,\n  0xE9ABBB: 0x7221,\n  0xE9AC86: 0x7222,\n  0xE9AC98: 0x7223,\n  0xE9AC9A: 0x7224,\n  0xE9AC9F: 0x7225,\n  0xE9ACA2: 0x7226,\n  0xE9ACA3: 0x7227,\n  0xE9ACA5: 0x7228,\n  0xE9ACA7: 0x7229,\n  0xE9ACA8: 0x722A,\n  0xE9ACA9: 0x722B,\n  0xE9ACAA: 0x722C,\n  0xE9ACAE: 0x722D,\n  0xE9ACAF: 0x722E,\n  0xE9ACB2: 0x722F,\n  0xE9AD84: 0x7230,\n  0xE9AD83: 0x7231,\n  0xE9AD8F: 0x7232,\n  0xE9AD8D: 0x7233,\n  0xE9AD8E: 0x7234,\n  0xE9AD91: 0x7235,\n  0xE9AD98: 0x7236,\n  0xE9ADB4: 0x7237,\n  0xE9AE93: 0x7238,\n  0xE9AE83: 0x7239,\n  0xE9AE91: 0x723A,\n  0xE9AE96: 0x723B,\n  0xE9AE97: 0x723C,\n  0xE9AE9F: 0x723D,\n  0xE9AEA0: 0x723E,\n  0xE9AEA8: 0x723F,\n  0xE9AEB4: 0x7240,\n  0xE9AF80: 0x7241,\n  0xE9AF8A: 0x7242,\n  0xE9AEB9: 0x7243,\n  0xE9AF86: 0x7244,\n  0xE9AF8F: 0x7245,\n  0xE9AF91: 0x7246,\n  0xE9AF92: 0x7247,\n  0xE9AFA3: 0x7248,\n  0xE9AFA2: 0x7249,\n  0xE9AFA4: 0x724A,\n  0xE9AF94: 0x724B,\n  0xE9AFA1: 0x724C,\n  0xE9B0BA: 0x724D,\n  0xE9AFB2: 0x724E,\n  0xE9AFB1: 0x724F,\n  0xE9AFB0: 0x7250,\n  0xE9B095: 0x7251,\n  0xE9B094: 0x7252,\n  0xE9B089: 0x7253,\n  0xE9B093: 0x7254,\n  0xE9B08C: 0x7255,\n  0xE9B086: 0x7256,\n  0xE9B088: 0x7257,\n  0xE9B092: 0x7258,\n  0xE9B08A: 0x7259,\n  0xE9B084: 0x725A,\n  0xE9B0AE: 0x725B,\n  0xE9B09B: 0x725C,\n  0xE9B0A5: 0x725D,\n  0xE9B0A4: 0x725E,\n  0xE9B0A1: 0x725F,\n  0xE9B0B0: 0x7260,\n  0xE9B187: 0x7261,\n  0xE9B0B2: 0x7262,\n  0xE9B186: 0x7263,\n  0xE9B0BE: 0x7264,\n  0xE9B19A: 0x7265,\n  0xE9B1A0: 0x7266,\n  0xE9B1A7: 0x7267,\n  0xE9B1B6: 0x7268,\n  0xE9B1B8: 0x7269,\n  0xE9B3A7: 0x726A,\n  0xE9B3AC: 0x726B,\n  0xE9B3B0: 0x726C,\n  0xE9B489: 0x726D,\n  0xE9B488: 0x726E,\n  0xE9B3AB: 0x726F,\n  0xE9B483: 0x7270,\n  0xE9B486: 0x7271,\n  0xE9B4AA: 0x7272,\n  0xE9B4A6: 0x7273,\n  0xE9B6AF: 0x7274,\n  0xE9B4A3: 0x7275,\n  0xE9B49F: 0x7276,\n  0xE9B584: 0x7277,\n  0xE9B495: 0x7278,\n  0xE9B492: 0x7279,\n  0xE9B581: 0x727A,\n  0xE9B4BF: 0x727B,\n  0xE9B4BE: 0x727C,\n  0xE9B586: 0x727D,\n  0xE9B588: 0x727E,\n  0xE9B59D: 0x7321,\n  0xE9B59E: 0x7322,\n  0xE9B5A4: 0x7323,\n  0xE9B591: 0x7324,\n  0xE9B590: 0x7325,\n  0xE9B599: 0x7326,\n  0xE9B5B2: 0x7327,\n  0xE9B689: 0x7328,\n  0xE9B687: 0x7329,\n  0xE9B6AB: 0x732A,\n  0xE9B5AF: 0x732B,\n  0xE9B5BA: 0x732C,\n  0xE9B69A: 0x732D,\n  0xE9B6A4: 0x732E,\n  0xE9B6A9: 0x732F,\n  0xE9B6B2: 0x7330,\n  0xE9B784: 0x7331,\n  0xE9B781: 0x7332,\n  0xE9B6BB: 0x7333,\n  0xE9B6B8: 0x7334,\n  0xE9B6BA: 0x7335,\n  0xE9B786: 0x7336,\n  0xE9B78F: 0x7337,\n  0xE9B782: 0x7338,\n  0xE9B799: 0x7339,\n  0xE9B793: 0x733A,\n  0xE9B7B8: 0x733B,\n  0xE9B7A6: 0x733C,\n  0xE9B7AD: 0x733D,\n  0xE9B7AF: 0x733E,\n  0xE9B7BD: 0x733F,\n  0xE9B89A: 0x7340,\n  0xE9B89B: 0x7341,\n  0xE9B89E: 0x7342,\n  0xE9B9B5: 0x7343,\n  0xE9B9B9: 0x7344,\n  0xE9B9BD: 0x7345,\n  0xE9BA81: 0x7346,\n  0xE9BA88: 0x7347,\n  0xE9BA8B: 0x7348,\n  0xE9BA8C: 0x7349,\n  0xE9BA92: 0x734A,\n  0xE9BA95: 0x734B,\n  0xE9BA91: 0x734C,\n  0xE9BA9D: 0x734D,\n  0xE9BAA5: 0x734E,\n  0xE9BAA9: 0x734F,\n  0xE9BAB8: 0x7350,\n  0xE9BAAA: 0x7351,\n  0xE9BAAD: 0x7352,\n  0xE99DA1: 0x7353,\n  0xE9BB8C: 0x7354,\n  0xE9BB8E: 0x7355,\n  0xE9BB8F: 0x7356,\n  0xE9BB90: 0x7357,\n  0xE9BB94: 0x7358,\n  0xE9BB9C: 0x7359,\n  0xE9BB9E: 0x735A,\n  0xE9BB9D: 0x735B,\n  0xE9BBA0: 0x735C,\n  0xE9BBA5: 0x735D,\n  0xE9BBA8: 0x735E,\n  0xE9BBAF: 0x735F,\n  0xE9BBB4: 0x7360,\n  0xE9BBB6: 0x7361,\n  0xE9BBB7: 0x7362,\n  0xE9BBB9: 0x7363,\n  0xE9BBBB: 0x7364,\n  0xE9BBBC: 0x7365,\n  0xE9BBBD: 0x7366,\n  0xE9BC87: 0x7367,\n  0xE9BC88: 0x7368,\n  0xE79AB7: 0x7369,\n  0xE9BC95: 0x736A,\n  0xE9BCA1: 0x736B,\n  0xE9BCAC: 0x736C,\n  0xE9BCBE: 0x736D,\n  0xE9BD8A: 0x736E,\n  0xE9BD92: 0x736F,\n  0xE9BD94: 0x7370,\n  0xE9BDA3: 0x7371,\n  0xE9BD9F: 0x7372,\n  0xE9BDA0: 0x7373,\n  0xE9BDA1: 0x7374,\n  0xE9BDA6: 0x7375,\n  0xE9BDA7: 0x7376,\n  0xE9BDAC: 0x7377,\n  0xE9BDAA: 0x7378,\n  0xE9BDB7: 0x7379,\n  0xE9BDB2: 0x737A,\n  0xE9BDB6: 0x737B,\n  0xE9BE95: 0x737C,\n  0xE9BE9C: 0x737D,\n  0xE9BEA0: 0x737E,\n  0xE5A0AF: 0x7421,\n  0xE6A787: 0x7422,\n  0xE98199: 0x7423,\n  0xE791A4: 0x7424,\n  0xE5879C: 0x7425,\n  0xE78699: 0x7426,\n  0xE7BA8A: 0x7921,\n  0xE8A49C: 0x7922,\n  0xE98D88: 0x7923,\n  0xE98A88: 0x7924,\n  0xE8939C: 0x7925,\n  0xE4BF89: 0x7926,\n  0xE782BB: 0x7927,\n  0xE698B1: 0x7928,\n  0xE6A388: 0x7929,\n  0xE98BB9: 0x792A,\n  0xE69BBB: 0x792B,\n  0xE5BD85: 0x792C,\n  0xE4B8A8: 0x792D,\n  0xE4BBA1: 0x792E,\n  0xE4BBBC: 0x792F,\n  0xE4BC80: 0x7930,\n  0xE4BC83: 0x7931,\n  0xE4BCB9: 0x7932,\n  0xE4BD96: 0x7933,\n  0xE4BE92: 0x7934,\n  0xE4BE8A: 0x7935,\n  0xE4BE9A: 0x7936,\n  0xE4BE94: 0x7937,\n  0xE4BF8D: 0x7938,\n  0xE58180: 0x7939,\n  0xE580A2: 0x793A,\n  0xE4BFBF: 0x793B,\n  0xE5809E: 0x793C,\n  0xE58186: 0x793D,\n  0xE581B0: 0x793E,\n  0xE58182: 0x793F,\n  0xE58294: 0x7940,\n  0xE583B4: 0x7941,\n  0xE58398: 0x7942,\n  0xE5858A: 0x7943,\n  0xE585A4: 0x7944,\n  0xE5869D: 0x7945,\n  0xE586BE: 0x7946,\n  0xE587AC: 0x7947,\n  0xE58895: 0x7948,\n  0xE58A9C: 0x7949,\n  0xE58AA6: 0x794A,\n  0xE58B80: 0x794B,\n  0xE58B9B: 0x794C,\n  0xE58C80: 0x794D,\n  0xE58C87: 0x794E,\n  0xE58CA4: 0x794F,\n  0xE58DB2: 0x7950,\n  0xE58E93: 0x7951,\n  0xE58EB2: 0x7952,\n  0xE58F9D: 0x7953,\n  0xEFA88E: 0x7954,\n  0xE5929C: 0x7955,\n  0xE5928A: 0x7956,\n  0xE592A9: 0x7957,\n  0xE593BF: 0x7958,\n  0xE59686: 0x7959,\n  0xE59D99: 0x795A,\n  0xE59DA5: 0x795B,\n  0xE59EAC: 0x795C,\n  0xE59F88: 0x795D,\n  0xE59F87: 0x795E,\n  0xEFA88F: 0x795F,\n  0xEFA890: 0x7960,\n  0xE5A29E: 0x7961,\n  0xE5A2B2: 0x7962,\n  0xE5A48B: 0x7963,\n  0xE5A593: 0x7964,\n  0xE5A59B: 0x7965,\n  0xE5A59D: 0x7966,\n  0xE5A5A3: 0x7967,\n  0xE5A6A4: 0x7968,\n  0xE5A6BA: 0x7969,\n  0xE5AD96: 0x796A,\n  0xE5AF80: 0x796B,\n  0xE794AF: 0x796C,\n  0xE5AF98: 0x796D,\n  0xE5AFAC: 0x796E,\n  0xE5B09E: 0x796F,\n  0xE5B2A6: 0x7970,\n  0xE5B2BA: 0x7971,\n  0xE5B3B5: 0x7972,\n  0xE5B4A7: 0x7973,\n  0xE5B593: 0x7974,\n  0xEFA891: 0x7975,\n  0xE5B582: 0x7976,\n  0xE5B5AD: 0x7977,\n  0xE5B6B8: 0x7978,\n  0xE5B6B9: 0x7979,\n  0xE5B790: 0x797A,\n  0xE5BCA1: 0x797B,\n  0xE5BCB4: 0x797C,\n  0xE5BDA7: 0x797D,\n  0xE5BEB7: 0x797E,\n  0xE5BF9E: 0x7A21,\n  0xE6819D: 0x7A22,\n  0xE68285: 0x7A23,\n  0xE6828A: 0x7A24,\n  0xE6839E: 0x7A25,\n  0xE68395: 0x7A26,\n  0xE684A0: 0x7A27,\n  0xE683B2: 0x7A28,\n  0xE68491: 0x7A29,\n  0xE684B7: 0x7A2A,\n  0xE684B0: 0x7A2B,\n  0xE68698: 0x7A2C,\n  0xE68893: 0x7A2D,\n  0xE68AA6: 0x7A2E,\n  0xE68FB5: 0x7A2F,\n  0xE691A0: 0x7A30,\n  0xE6929D: 0x7A31,\n  0xE6938E: 0x7A32,\n  0xE6958E: 0x7A33,\n  0xE69880: 0x7A34,\n  0xE69895: 0x7A35,\n  0xE698BB: 0x7A36,\n  0xE69889: 0x7A37,\n  0xE698AE: 0x7A38,\n  0xE6989E: 0x7A39,\n  0xE698A4: 0x7A3A,\n  0xE699A5: 0x7A3B,\n  0xE69997: 0x7A3C,\n  0xE69999: 0x7A3D,\n  0xEFA892: 0x7A3E,\n  0xE699B3: 0x7A3F,\n  0xE69A99: 0x7A40,\n  0xE69AA0: 0x7A41,\n  0xE69AB2: 0x7A42,\n  0xE69ABF: 0x7A43,\n  0xE69BBA: 0x7A44,\n  0xE69C8E: 0x7A45,\n  0xEFA4A9: 0x7A46,\n  0xE69DA6: 0x7A47,\n  0xE69EBB: 0x7A48,\n  0xE6A192: 0x7A49,\n  0xE69F80: 0x7A4A,\n  0xE6A081: 0x7A4B,\n  0xE6A184: 0x7A4C,\n  0xE6A38F: 0x7A4D,\n  0xEFA893: 0x7A4E,\n  0xE6A5A8: 0x7A4F,\n  0xEFA894: 0x7A50,\n  0xE6A698: 0x7A51,\n  0xE6A7A2: 0x7A52,\n  0xE6A8B0: 0x7A53,\n  0xE6A9AB: 0x7A54,\n  0xE6A986: 0x7A55,\n  0xE6A9B3: 0x7A56,\n  0xE6A9BE: 0x7A57,\n  0xE6ABA2: 0x7A58,\n  0xE6ABA4: 0x7A59,\n  0xE6AF96: 0x7A5A,\n  0xE6B0BF: 0x7A5B,\n  0xE6B19C: 0x7A5C,\n  0xE6B286: 0x7A5D,\n  0xE6B1AF: 0x7A5E,\n  0xE6B39A: 0x7A5F,\n  0xE6B484: 0x7A60,\n  0xE6B687: 0x7A61,\n  0xE6B5AF: 0x7A62,\n  0xE6B696: 0x7A63,\n  0xE6B6AC: 0x7A64,\n  0xE6B78F: 0x7A65,\n  0xE6B7B8: 0x7A66,\n  0xE6B7B2: 0x7A67,\n  0xE6B7BC: 0x7A68,\n  0xE6B8B9: 0x7A69,\n  0xE6B99C: 0x7A6A,\n  0xE6B8A7: 0x7A6B,\n  0xE6B8BC: 0x7A6C,\n  0xE6BABF: 0x7A6D,\n  0xE6BE88: 0x7A6E,\n  0xE6BEB5: 0x7A6F,\n  0xE6BFB5: 0x7A70,\n  0xE78085: 0x7A71,\n  0xE78087: 0x7A72,\n  0xE780A8: 0x7A73,\n  0xE78285: 0x7A74,\n  0xE782AB: 0x7A75,\n  0xE7848F: 0x7A76,\n  0xE78484: 0x7A77,\n  0xE7859C: 0x7A78,\n  0xE78586: 0x7A79,\n  0xE78587: 0x7A7A,\n  0xEFA895: 0x7A7B,\n  0xE78781: 0x7A7C,\n  0xE787BE: 0x7A7D,\n  0xE78AB1: 0x7A7E,\n  0xE78ABE: 0x7B21,\n  0xE78CA4: 0x7B22,\n  0xEFA896: 0x7B23,\n  0xE78DB7: 0x7B24,\n  0xE78EBD: 0x7B25,\n  0xE78F89: 0x7B26,\n  0xE78F96: 0x7B27,\n  0xE78FA3: 0x7B28,\n  0xE78F92: 0x7B29,\n  0xE79087: 0x7B2A,\n  0xE78FB5: 0x7B2B,\n  0xE790A6: 0x7B2C,\n  0xE790AA: 0x7B2D,\n  0xE790A9: 0x7B2E,\n  0xE790AE: 0x7B2F,\n  0xE791A2: 0x7B30,\n  0xE79289: 0x7B31,\n  0xE7929F: 0x7B32,\n  0xE79481: 0x7B33,\n  0xE795AF: 0x7B34,\n  0xE79A82: 0x7B35,\n  0xE79A9C: 0x7B36,\n  0xE79A9E: 0x7B37,\n  0xE79A9B: 0x7B38,\n  0xE79AA6: 0x7B39,\n  0xEFA897: 0x7B3A,\n  0xE79D86: 0x7B3B,\n  0xE58AAF: 0x7B3C,\n  0xE7A0A1: 0x7B3D,\n  0xE7A18E: 0x7B3E,\n  0xE7A1A4: 0x7B3F,\n  0xE7A1BA: 0x7B40,\n  0xE7A4B0: 0x7B41,\n  0xEFA898: 0x7B42,\n  0xEFA899: 0x7B43,\n  0xEFA89A: 0x7B44,\n  0xE7A694: 0x7B45,\n  0xEFA89B: 0x7B46,\n  0xE7A69B: 0x7B47,\n  0xE7AB91: 0x7B48,\n  0xE7ABA7: 0x7B49,\n  0xEFA89C: 0x7B4A,\n  0xE7ABAB: 0x7B4B,\n  0xE7AE9E: 0x7B4C,\n  0xEFA89D: 0x7B4D,\n  0xE7B588: 0x7B4E,\n  0xE7B59C: 0x7B4F,\n  0xE7B6B7: 0x7B50,\n  0xE7B6A0: 0x7B51,\n  0xE7B796: 0x7B52,\n  0xE7B992: 0x7B53,\n  0xE7BD87: 0x7B54,\n  0xE7BEA1: 0x7B55,\n  0xEFA89E: 0x7B56,\n  0xE88C81: 0x7B57,\n  0xE88DA2: 0x7B58,\n  0xE88DBF: 0x7B59,\n  0xE88F87: 0x7B5A,\n  0xE88FB6: 0x7B5B,\n  0xE89188: 0x7B5C,\n  0xE892B4: 0x7B5D,\n  0xE89593: 0x7B5E,\n  0xE89599: 0x7B5F,\n  0xE895AB: 0x7B60,\n  0xEFA89F: 0x7B61,\n  0xE896B0: 0x7B62,\n  0xEFA8A0: 0x7B63,\n  0xEFA8A1: 0x7B64,\n  0xE8A087: 0x7B65,\n  0xE8A3B5: 0x7B66,\n  0xE8A892: 0x7B67,\n  0xE8A8B7: 0x7B68,\n  0xE8A9B9: 0x7B69,\n  0xE8AAA7: 0x7B6A,\n  0xE8AABE: 0x7B6B,\n  0xE8AB9F: 0x7B6C,\n  0xEFA8A2: 0x7B6D,\n  0xE8ABB6: 0x7B6E,\n  0xE8AD93: 0x7B6F,\n  0xE8ADBF: 0x7B70,\n  0xE8B3B0: 0x7B71,\n  0xE8B3B4: 0x7B72,\n  0xE8B492: 0x7B73,\n  0xE8B5B6: 0x7B74,\n  0xEFA8A3: 0x7B75,\n  0xE8BB8F: 0x7B76,\n  0xEFA8A4: 0x7B77,\n  0xEFA8A5: 0x7B78,\n  0xE981A7: 0x7B79,\n  0xE9839E: 0x7B7A,\n  0xEFA8A6: 0x7B7B,\n  0xE98495: 0x7B7C,\n  0xE984A7: 0x7B7D,\n  0xE9879A: 0x7B7E,\n  0xE98797: 0x7C21,\n  0xE9879E: 0x7C22,\n  0xE987AD: 0x7C23,\n  0xE987AE: 0x7C24,\n  0xE987A4: 0x7C25,\n  0xE987A5: 0x7C26,\n  0xE98886: 0x7C27,\n  0xE98890: 0x7C28,\n  0xE9888A: 0x7C29,\n  0xE988BA: 0x7C2A,\n  0xE98980: 0x7C2B,\n  0xE988BC: 0x7C2C,\n  0xE9898E: 0x7C2D,\n  0xE98999: 0x7C2E,\n  0xE98991: 0x7C2F,\n  0xE988B9: 0x7C30,\n  0xE989A7: 0x7C31,\n  0xE98AA7: 0x7C32,\n  0xE989B7: 0x7C33,\n  0xE989B8: 0x7C34,\n  0xE98BA7: 0x7C35,\n  0xE98B97: 0x7C36,\n  0xE98B99: 0x7C37,\n  0xE98B90: 0x7C38,\n  0xEFA8A7: 0x7C39,\n  0xE98B95: 0x7C3A,\n  0xE98BA0: 0x7C3B,\n  0xE98B93: 0x7C3C,\n  0xE98CA5: 0x7C3D,\n  0xE98CA1: 0x7C3E,\n  0xE98BBB: 0x7C3F,\n  0xEFA8A8: 0x7C40,\n  0xE98C9E: 0x7C41,\n  0xE98BBF: 0x7C42,\n  0xE98C9D: 0x7C43,\n  0xE98C82: 0x7C44,\n  0xE98DB0: 0x7C45,\n  0xE98D97: 0x7C46,\n  0xE98EA4: 0x7C47,\n  0xE98F86: 0x7C48,\n  0xE98F9E: 0x7C49,\n  0xE98FB8: 0x7C4A,\n  0xE990B1: 0x7C4B,\n  0xE99185: 0x7C4C,\n  0xE99188: 0x7C4D,\n  0xE99692: 0x7C4E,\n  0xEFA79C: 0x7C4F,\n  0xEFA8A9: 0x7C50,\n  0xE99A9D: 0x7C51,\n  0xE99AAF: 0x7C52,\n  0xE99CB3: 0x7C53,\n  0xE99CBB: 0x7C54,\n  0xE99D83: 0x7C55,\n  0xE99D8D: 0x7C56,\n  0xE99D8F: 0x7C57,\n  0xE99D91: 0x7C58,\n  0xE99D95: 0x7C59,\n  0xE9A197: 0x7C5A,\n  0xE9A1A5: 0x7C5B,\n  0xEFA8AA: 0x7C5C,\n  0xEFA8AB: 0x7C5D,\n  0xE9A4A7: 0x7C5E,\n  0xEFA8AC: 0x7C5F,\n  0xE9A69E: 0x7C60,\n  0xE9A98E: 0x7C61,\n  0xE9AB99: 0x7C62,\n  0xE9AB9C: 0x7C63,\n  0xE9ADB5: 0x7C64,\n  0xE9ADB2: 0x7C65,\n  0xE9AE8F: 0x7C66,\n  0xE9AEB1: 0x7C67,\n  0xE9AEBB: 0x7C68,\n  0xE9B080: 0x7C69,\n  0xE9B5B0: 0x7C6A,\n  0xE9B5AB: 0x7C6B,\n  0xEFA8AD: 0x7C6C,\n  0xE9B899: 0x7C6D,\n  0xE9BB91: 0x7C6E,\n  0xE285B0: 0x7C71,\n  0xE285B1: 0x7C72,\n  0xE285B2: 0x7C73,\n  0xE285B3: 0x7C74,\n  0xE285B4: 0x7C75,\n  0xE285B5: 0x7C76,\n  0xE285B6: 0x7C77,\n  0xE285B7: 0x7C78,\n  0xE285B8: 0x7C79,\n  0xE285B9: 0x7C7A,\n  0xEFBFA4: 0x7C7C,\n  0xEFBC87: 0x7C7D,\n  0xEFBC82: 0x7C7E,\n  //FIXME: mojibake\n  0xE288A5: 0x2142,\n  0xEFBFA2: 0x224C,\n  0xE28892: 0x1215D\n};","/**\n * Encoding conversion table for UTF-8 to JIS X 0212:1990 (Hojo-Kanji)\n */\nmodule.exports = {\n  0xCB98: 0x222F,\n  0xCB87: 0x2230,\n  0xC2B8: 0x2231,\n  0xCB99: 0x2232,\n  0xCB9D: 0x2233,\n  0xC2AF: 0x2234,\n  0xCB9B: 0x2235,\n  0xCB9A: 0x2236,\n  0x7E: 0x2237,\n  0xCE84: 0x2238,\n  0xCE85: 0x2239,\n  0xC2A1: 0x2242,\n  0xC2A6: 0x2243,\n  0xC2BF: 0x2244,\n  0xC2BA: 0x226B,\n  0xC2AA: 0x226C,\n  0xC2A9: 0x226D,\n  0xC2AE: 0x226E,\n  0xE284A2: 0x226F,\n  0xC2A4: 0x2270,\n  0xE28496: 0x2271,\n  0xCE86: 0x2661,\n  0xCE88: 0x2662,\n  0xCE89: 0x2663,\n  0xCE8A: 0x2664,\n  0xCEAA: 0x2665,\n  0xCE8C: 0x2667,\n  0xCE8E: 0x2669,\n  0xCEAB: 0x266A,\n  0xCE8F: 0x266C,\n  0xCEAC: 0x2671,\n  0xCEAD: 0x2672,\n  0xCEAE: 0x2673,\n  0xCEAF: 0x2674,\n  0xCF8A: 0x2675,\n  0xCE90: 0x2676,\n  0xCF8C: 0x2677,\n  0xCF82: 0x2678,\n  0xCF8D: 0x2679,\n  0xCF8B: 0x267A,\n  0xCEB0: 0x267B,\n  0xCF8E: 0x267C,\n  0xD082: 0x2742,\n  0xD083: 0x2743,\n  0xD084: 0x2744,\n  0xD085: 0x2745,\n  0xD086: 0x2746,\n  0xD087: 0x2747,\n  0xD088: 0x2748,\n  0xD089: 0x2749,\n  0xD08A: 0x274A,\n  0xD08B: 0x274B,\n  0xD08C: 0x274C,\n  0xD08E: 0x274D,\n  0xD08F: 0x274E,\n  0xD192: 0x2772,\n  0xD193: 0x2773,\n  0xD194: 0x2774,\n  0xD195: 0x2775,\n  0xD196: 0x2776,\n  0xD197: 0x2777,\n  0xD198: 0x2778,\n  0xD199: 0x2779,\n  0xD19A: 0x277A,\n  0xD19B: 0x277B,\n  0xD19C: 0x277C,\n  0xD19E: 0x277D,\n  0xD19F: 0x277E,\n  0xC386: 0x2921,\n  0xC490: 0x2922,\n  0xC4A6: 0x2924,\n  0xC4B2: 0x2926,\n  0xC581: 0x2928,\n  0xC4BF: 0x2929,\n  0xC58A: 0x292B,\n  0xC398: 0x292C,\n  0xC592: 0x292D,\n  0xC5A6: 0x292F,\n  0xC39E: 0x2930,\n  0xC3A6: 0x2941,\n  0xC491: 0x2942,\n  0xC3B0: 0x2943,\n  0xC4A7: 0x2944,\n  0xC4B1: 0x2945,\n  0xC4B3: 0x2946,\n  0xC4B8: 0x2947,\n  0xC582: 0x2948,\n  0xC580: 0x2949,\n  0xC589: 0x294A,\n  0xC58B: 0x294B,\n  0xC3B8: 0x294C,\n  0xC593: 0x294D,\n  0xC39F: 0x294E,\n  0xC5A7: 0x294F,\n  0xC3BE: 0x2950,\n  0xC381: 0x2A21,\n  0xC380: 0x2A22,\n  0xC384: 0x2A23,\n  0xC382: 0x2A24,\n  0xC482: 0x2A25,\n  0xC78D: 0x2A26,\n  0xC480: 0x2A27,\n  0xC484: 0x2A28,\n  0xC385: 0x2A29,\n  0xC383: 0x2A2A,\n  0xC486: 0x2A2B,\n  0xC488: 0x2A2C,\n  0xC48C: 0x2A2D,\n  0xC387: 0x2A2E,\n  0xC48A: 0x2A2F,\n  0xC48E: 0x2A30,\n  0xC389: 0x2A31,\n  0xC388: 0x2A32,\n  0xC38B: 0x2A33,\n  0xC38A: 0x2A34,\n  0xC49A: 0x2A35,\n  0xC496: 0x2A36,\n  0xC492: 0x2A37,\n  0xC498: 0x2A38,\n  0xC49C: 0x2A3A,\n  0xC49E: 0x2A3B,\n  0xC4A2: 0x2A3C,\n  0xC4A0: 0x2A3D,\n  0xC4A4: 0x2A3E,\n  0xC38D: 0x2A3F,\n  0xC38C: 0x2A40,\n  0xC38F: 0x2A41,\n  0xC38E: 0x2A42,\n  0xC78F: 0x2A43,\n  0xC4B0: 0x2A44,\n  0xC4AA: 0x2A45,\n  0xC4AE: 0x2A46,\n  0xC4A8: 0x2A47,\n  0xC4B4: 0x2A48,\n  0xC4B6: 0x2A49,\n  0xC4B9: 0x2A4A,\n  0xC4BD: 0x2A4B,\n  0xC4BB: 0x2A4C,\n  0xC583: 0x2A4D,\n  0xC587: 0x2A4E,\n  0xC585: 0x2A4F,\n  0xC391: 0x2A50,\n  0xC393: 0x2A51,\n  0xC392: 0x2A52,\n  0xC396: 0x2A53,\n  0xC394: 0x2A54,\n  0xC791: 0x2A55,\n  0xC590: 0x2A56,\n  0xC58C: 0x2A57,\n  0xC395: 0x2A58,\n  0xC594: 0x2A59,\n  0xC598: 0x2A5A,\n  0xC596: 0x2A5B,\n  0xC59A: 0x2A5C,\n  0xC59C: 0x2A5D,\n  0xC5A0: 0x2A5E,\n  0xC59E: 0x2A5F,\n  0xC5A4: 0x2A60,\n  0xC5A2: 0x2A61,\n  0xC39A: 0x2A62,\n  0xC399: 0x2A63,\n  0xC39C: 0x2A64,\n  0xC39B: 0x2A65,\n  0xC5AC: 0x2A66,\n  0xC793: 0x2A67,\n  0xC5B0: 0x2A68,\n  0xC5AA: 0x2A69,\n  0xC5B2: 0x2A6A,\n  0xC5AE: 0x2A6B,\n  0xC5A8: 0x2A6C,\n  0xC797: 0x2A6D,\n  0xC79B: 0x2A6E,\n  0xC799: 0x2A6F,\n  0xC795: 0x2A70,\n  0xC5B4: 0x2A71,\n  0xC39D: 0x2A72,\n  0xC5B8: 0x2A73,\n  0xC5B6: 0x2A74,\n  0xC5B9: 0x2A75,\n  0xC5BD: 0x2A76,\n  0xC5BB: 0x2A77,\n  0xC3A1: 0x2B21,\n  0xC3A0: 0x2B22,\n  0xC3A4: 0x2B23,\n  0xC3A2: 0x2B24,\n  0xC483: 0x2B25,\n  0xC78E: 0x2B26,\n  0xC481: 0x2B27,\n  0xC485: 0x2B28,\n  0xC3A5: 0x2B29,\n  0xC3A3: 0x2B2A,\n  0xC487: 0x2B2B,\n  0xC489: 0x2B2C,\n  0xC48D: 0x2B2D,\n  0xC3A7: 0x2B2E,\n  0xC48B: 0x2B2F,\n  0xC48F: 0x2B30,\n  0xC3A9: 0x2B31,\n  0xC3A8: 0x2B32,\n  0xC3AB: 0x2B33,\n  0xC3AA: 0x2B34,\n  0xC49B: 0x2B35,\n  0xC497: 0x2B36,\n  0xC493: 0x2B37,\n  0xC499: 0x2B38,\n  0xC7B5: 0x2B39,\n  0xC49D: 0x2B3A,\n  0xC49F: 0x2B3B,\n  0xC4A1: 0x2B3D,\n  0xC4A5: 0x2B3E,\n  0xC3AD: 0x2B3F,\n  0xC3AC: 0x2B40,\n  0xC3AF: 0x2B41,\n  0xC3AE: 0x2B42,\n  0xC790: 0x2B43,\n  0xC4AB: 0x2B45,\n  0xC4AF: 0x2B46,\n  0xC4A9: 0x2B47,\n  0xC4B5: 0x2B48,\n  0xC4B7: 0x2B49,\n  0xC4BA: 0x2B4A,\n  0xC4BE: 0x2B4B,\n  0xC4BC: 0x2B4C,\n  0xC584: 0x2B4D,\n  0xC588: 0x2B4E,\n  0xC586: 0x2B4F,\n  0xC3B1: 0x2B50,\n  0xC3B3: 0x2B51,\n  0xC3B2: 0x2B52,\n  0xC3B6: 0x2B53,\n  0xC3B4: 0x2B54,\n  0xC792: 0x2B55,\n  0xC591: 0x2B56,\n  0xC58D: 0x2B57,\n  0xC3B5: 0x2B58,\n  0xC595: 0x2B59,\n  0xC599: 0x2B5A,\n  0xC597: 0x2B5B,\n  0xC59B: 0x2B5C,\n  0xC59D: 0x2B5D,\n  0xC5A1: 0x2B5E,\n  0xC59F: 0x2B5F,\n  0xC5A5: 0x2B60,\n  0xC5A3: 0x2B61,\n  0xC3BA: 0x2B62,\n  0xC3B9: 0x2B63,\n  0xC3BC: 0x2B64,\n  0xC3BB: 0x2B65,\n  0xC5AD: 0x2B66,\n  0xC794: 0x2B67,\n  0xC5B1: 0x2B68,\n  0xC5AB: 0x2B69,\n  0xC5B3: 0x2B6A,\n  0xC5AF: 0x2B6B,\n  0xC5A9: 0x2B6C,\n  0xC798: 0x2B6D,\n  0xC79C: 0x2B6E,\n  0xC79A: 0x2B6F,\n  0xC796: 0x2B70,\n  0xC5B5: 0x2B71,\n  0xC3BD: 0x2B72,\n  0xC3BF: 0x2B73,\n  0xC5B7: 0x2B74,\n  0xC5BA: 0x2B75,\n  0xC5BE: 0x2B76,\n  0xC5BC: 0x2B77,\n  0xE4B882: 0x3021,\n  0xE4B884: 0x3022,\n  0xE4B885: 0x3023,\n  0xE4B88C: 0x3024,\n  0xE4B892: 0x3025,\n  0xE4B89F: 0x3026,\n  0xE4B8A3: 0x3027,\n  0xE4B8A4: 0x3028,\n  0xE4B8A8: 0x3029,\n  0xE4B8AB: 0x302A,\n  0xE4B8AE: 0x302B,\n  0xE4B8AF: 0x302C,\n  0xE4B8B0: 0x302D,\n  0xE4B8B5: 0x302E,\n  0xE4B980: 0x302F,\n  0xE4B981: 0x3030,\n  0xE4B984: 0x3031,\n  0xE4B987: 0x3032,\n  0xE4B991: 0x3033,\n  0xE4B99A: 0x3034,\n  0xE4B99C: 0x3035,\n  0xE4B9A3: 0x3036,\n  0xE4B9A8: 0x3037,\n  0xE4B9A9: 0x3038,\n  0xE4B9B4: 0x3039,\n  0xE4B9B5: 0x303A,\n  0xE4B9B9: 0x303B,\n  0xE4B9BF: 0x303C,\n  0xE4BA8D: 0x303D,\n  0xE4BA96: 0x303E,\n  0xE4BA97: 0x303F,\n  0xE4BA9D: 0x3040,\n  0xE4BAAF: 0x3041,\n  0xE4BAB9: 0x3042,\n  0xE4BB83: 0x3043,\n  0xE4BB90: 0x3044,\n  0xE4BB9A: 0x3045,\n  0xE4BB9B: 0x3046,\n  0xE4BBA0: 0x3047,\n  0xE4BBA1: 0x3048,\n  0xE4BBA2: 0x3049,\n  0xE4BBA8: 0x304A,\n  0xE4BBAF: 0x304B,\n  0xE4BBB1: 0x304C,\n  0xE4BBB3: 0x304D,\n  0xE4BBB5: 0x304E,\n  0xE4BBBD: 0x304F,\n  0xE4BBBE: 0x3050,\n  0xE4BBBF: 0x3051,\n  0xE4BC80: 0x3052,\n  0xE4BC82: 0x3053,\n  0xE4BC83: 0x3054,\n  0xE4BC88: 0x3055,\n  0xE4BC8B: 0x3056,\n  0xE4BC8C: 0x3057,\n  0xE4BC92: 0x3058,\n  0xE4BC95: 0x3059,\n  0xE4BC96: 0x305A,\n  0xE4BC97: 0x305B,\n  0xE4BC99: 0x305C,\n  0xE4BCAE: 0x305D,\n  0xE4BCB1: 0x305E,\n  0xE4BDA0: 0x305F,\n  0xE4BCB3: 0x3060,\n  0xE4BCB5: 0x3061,\n  0xE4BCB7: 0x3062,\n  0xE4BCB9: 0x3063,\n  0xE4BCBB: 0x3064,\n  0xE4BCBE: 0x3065,\n  0xE4BD80: 0x3066,\n  0xE4BD82: 0x3067,\n  0xE4BD88: 0x3068,\n  0xE4BD89: 0x3069,\n  0xE4BD8B: 0x306A,\n  0xE4BD8C: 0x306B,\n  0xE4BD92: 0x306C,\n  0xE4BD94: 0x306D,\n  0xE4BD96: 0x306E,\n  0xE4BD98: 0x306F,\n  0xE4BD9F: 0x3070,\n  0xE4BDA3: 0x3071,\n  0xE4BDAA: 0x3072,\n  0xE4BDAC: 0x3073,\n  0xE4BDAE: 0x3074,\n  0xE4BDB1: 0x3075,\n  0xE4BDB7: 0x3076,\n  0xE4BDB8: 0x3077,\n  0xE4BDB9: 0x3078,\n  0xE4BDBA: 0x3079,\n  0xE4BDBD: 0x307A,\n  0xE4BDBE: 0x307B,\n  0xE4BE81: 0x307C,\n  0xE4BE82: 0x307D,\n  0xE4BE84: 0x307E,\n  0xE4BE85: 0x3121,\n  0xE4BE89: 0x3122,\n  0xE4BE8A: 0x3123,\n  0xE4BE8C: 0x3124,\n  0xE4BE8E: 0x3125,\n  0xE4BE90: 0x3126,\n  0xE4BE92: 0x3127,\n  0xE4BE93: 0x3128,\n  0xE4BE94: 0x3129,\n  0xE4BE97: 0x312A,\n  0xE4BE99: 0x312B,\n  0xE4BE9A: 0x312C,\n  0xE4BE9E: 0x312D,\n  0xE4BE9F: 0x312E,\n  0xE4BEB2: 0x312F,\n  0xE4BEB7: 0x3130,\n  0xE4BEB9: 0x3131,\n  0xE4BEBB: 0x3132,\n  0xE4BEBC: 0x3133,\n  0xE4BEBD: 0x3134,\n  0xE4BEBE: 0x3135,\n  0xE4BF80: 0x3136,\n  0xE4BF81: 0x3137,\n  0xE4BF85: 0x3138,\n  0xE4BF86: 0x3139,\n  0xE4BF88: 0x313A,\n  0xE4BF89: 0x313B,\n  0xE4BF8B: 0x313C,\n  0xE4BF8C: 0x313D,\n  0xE4BF8D: 0x313E,\n  0xE4BF8F: 0x313F,\n  0xE4BF92: 0x3140,\n  0xE4BF9C: 0x3141,\n  0xE4BFA0: 0x3142,\n  0xE4BFA2: 0x3143,\n  0xE4BFB0: 0x3144,\n  0xE4BFB2: 0x3145,\n  0xE4BFBC: 0x3146,\n  0xE4BFBD: 0x3147,\n  0xE4BFBF: 0x3148,\n  0xE58080: 0x3149,\n  0xE58081: 0x314A,\n  0xE58084: 0x314B,\n  0xE58087: 0x314C,\n  0xE5808A: 0x314D,\n  0xE5808C: 0x314E,\n  0xE5808E: 0x314F,\n  0xE58090: 0x3150,\n  0xE58093: 0x3151,\n  0xE58097: 0x3152,\n  0xE58098: 0x3153,\n  0xE5809B: 0x3154,\n  0xE5809C: 0x3155,\n  0xE5809D: 0x3156,\n  0xE5809E: 0x3157,\n  0xE580A2: 0x3158,\n  0xE580A7: 0x3159,\n  0xE580AE: 0x315A,\n  0xE580B0: 0x315B,\n  0xE580B2: 0x315C,\n  0xE580B3: 0x315D,\n  0xE580B5: 0x315E,\n  0xE58180: 0x315F,\n  0xE58181: 0x3160,\n  0xE58182: 0x3161,\n  0xE58185: 0x3162,\n  0xE58186: 0x3163,\n  0xE5818A: 0x3164,\n  0xE5818C: 0x3165,\n  0xE5818E: 0x3166,\n  0xE58191: 0x3167,\n  0xE58192: 0x3168,\n  0xE58193: 0x3169,\n  0xE58197: 0x316A,\n  0xE58199: 0x316B,\n  0xE5819F: 0x316C,\n  0xE581A0: 0x316D,\n  0xE581A2: 0x316E,\n  0xE581A3: 0x316F,\n  0xE581A6: 0x3170,\n  0xE581A7: 0x3171,\n  0xE581AA: 0x3172,\n  0xE581AD: 0x3173,\n  0xE581B0: 0x3174,\n  0xE581B1: 0x3175,\n  0xE580BB: 0x3176,\n  0xE58281: 0x3177,\n  0xE58283: 0x3178,\n  0xE58284: 0x3179,\n  0xE58286: 0x317A,\n  0xE5828A: 0x317B,\n  0xE5828E: 0x317C,\n  0xE5828F: 0x317D,\n  0xE58290: 0x317E,\n  0xE58292: 0x3221,\n  0xE58293: 0x3222,\n  0xE58294: 0x3223,\n  0xE58296: 0x3224,\n  0xE5829B: 0x3225,\n  0xE5829C: 0x3226,\n  0xE5829E: 0x3227,\n  0xE5829F: 0x3228,\n  0xE582A0: 0x3229,\n  0xE582A1: 0x322A,\n  0xE582A2: 0x322B,\n  0xE582AA: 0x322C,\n  0xE582AF: 0x322D,\n  0xE582B0: 0x322E,\n  0xE582B9: 0x322F,\n  0xE582BA: 0x3230,\n  0xE582BD: 0x3231,\n  0xE58380: 0x3232,\n  0xE58383: 0x3233,\n  0xE58384: 0x3234,\n  0xE58387: 0x3235,\n  0xE5838C: 0x3236,\n  0xE5838E: 0x3237,\n  0xE58390: 0x3238,\n  0xE58393: 0x3239,\n  0xE58394: 0x323A,\n  0xE58398: 0x323B,\n  0xE5839C: 0x323C,\n  0xE5839D: 0x323D,\n  0xE5839F: 0x323E,\n  0xE583A2: 0x323F,\n  0xE583A4: 0x3240,\n  0xE583A6: 0x3241,\n  0xE583A8: 0x3242,\n  0xE583A9: 0x3243,\n  0xE583AF: 0x3244,\n  0xE583B1: 0x3245,\n  0xE583B6: 0x3246,\n  0xE583BA: 0x3247,\n  0xE583BE: 0x3248,\n  0xE58483: 0x3249,\n  0xE58486: 0x324A,\n  0xE58487: 0x324B,\n  0xE58488: 0x324C,\n  0xE5848B: 0x324D,\n  0xE5848C: 0x324E,\n  0xE5848D: 0x324F,\n  0xE5848E: 0x3250,\n  0xE583B2: 0x3251,\n  0xE58490: 0x3252,\n  0xE58497: 0x3253,\n  0xE58499: 0x3254,\n  0xE5849B: 0x3255,\n  0xE5849C: 0x3256,\n  0xE5849D: 0x3257,\n  0xE5849E: 0x3258,\n  0xE584A3: 0x3259,\n  0xE584A7: 0x325A,\n  0xE584A8: 0x325B,\n  0xE584AC: 0x325C,\n  0xE584AD: 0x325D,\n  0xE584AF: 0x325E,\n  0xE584B1: 0x325F,\n  0xE584B3: 0x3260,\n  0xE584B4: 0x3261,\n  0xE584B5: 0x3262,\n  0xE584B8: 0x3263,\n  0xE584B9: 0x3264,\n  0xE58582: 0x3265,\n  0xE5858A: 0x3266,\n  0xE5858F: 0x3267,\n  0xE58593: 0x3268,\n  0xE58595: 0x3269,\n  0xE58597: 0x326A,\n  0xE58598: 0x326B,\n  0xE5859F: 0x326C,\n  0xE585A4: 0x326D,\n  0xE585A6: 0x326E,\n  0xE585BE: 0x326F,\n  0xE58683: 0x3270,\n  0xE58684: 0x3271,\n  0xE5868B: 0x3272,\n  0xE5868E: 0x3273,\n  0xE58698: 0x3274,\n  0xE5869D: 0x3275,\n  0xE586A1: 0x3276,\n  0xE586A3: 0x3277,\n  0xE586AD: 0x3278,\n  0xE586B8: 0x3279,\n  0xE586BA: 0x327A,\n  0xE586BC: 0x327B,\n  0xE586BE: 0x327C,\n  0xE586BF: 0x327D,\n  0xE58782: 0x327E,\n  0xE58788: 0x3321,\n  0xE5878F: 0x3322,\n  0xE58791: 0x3323,\n  0xE58792: 0x3324,\n  0xE58793: 0x3325,\n  0xE58795: 0x3326,\n  0xE58798: 0x3327,\n  0xE5879E: 0x3328,\n  0xE587A2: 0x3329,\n  0xE587A5: 0x332A,\n  0xE587AE: 0x332B,\n  0xE587B2: 0x332C,\n  0xE587B3: 0x332D,\n  0xE587B4: 0x332E,\n  0xE587B7: 0x332F,\n  0xE58881: 0x3330,\n  0xE58882: 0x3331,\n  0xE58885: 0x3332,\n  0xE58892: 0x3333,\n  0xE58893: 0x3334,\n  0xE58895: 0x3335,\n  0xE58896: 0x3336,\n  0xE58898: 0x3337,\n  0xE588A2: 0x3338,\n  0xE588A8: 0x3339,\n  0xE588B1: 0x333A,\n  0xE588B2: 0x333B,\n  0xE588B5: 0x333C,\n  0xE588BC: 0x333D,\n  0xE58985: 0x333E,\n  0xE58989: 0x333F,\n  0xE58995: 0x3340,\n  0xE58997: 0x3341,\n  0xE58998: 0x3342,\n  0xE5899A: 0x3343,\n  0xE5899C: 0x3344,\n  0xE5899F: 0x3345,\n  0xE589A0: 0x3346,\n  0xE589A1: 0x3347,\n  0xE589A6: 0x3348,\n  0xE589AE: 0x3349,\n  0xE589B7: 0x334A,\n  0xE589B8: 0x334B,\n  0xE589B9: 0x334C,\n  0xE58A80: 0x334D,\n  0xE58A82: 0x334E,\n  0xE58A85: 0x334F,\n  0xE58A8A: 0x3350,\n  0xE58A8C: 0x3351,\n  0xE58A93: 0x3352,\n  0xE58A95: 0x3353,\n  0xE58A96: 0x3354,\n  0xE58A97: 0x3355,\n  0xE58A98: 0x3356,\n  0xE58A9A: 0x3357,\n  0xE58A9C: 0x3358,\n  0xE58AA4: 0x3359,\n  0xE58AA5: 0x335A,\n  0xE58AA6: 0x335B,\n  0xE58AA7: 0x335C,\n  0xE58AAF: 0x335D,\n  0xE58AB0: 0x335E,\n  0xE58AB6: 0x335F,\n  0xE58AB7: 0x3360,\n  0xE58AB8: 0x3361,\n  0xE58ABA: 0x3362,\n  0xE58ABB: 0x3363,\n  0xE58ABD: 0x3364,\n  0xE58B80: 0x3365,\n  0xE58B84: 0x3366,\n  0xE58B86: 0x3367,\n  0xE58B88: 0x3368,\n  0xE58B8C: 0x3369,\n  0xE58B8F: 0x336A,\n  0xE58B91: 0x336B,\n  0xE58B94: 0x336C,\n  0xE58B96: 0x336D,\n  0xE58B9B: 0x336E,\n  0xE58B9C: 0x336F,\n  0xE58BA1: 0x3370,\n  0xE58BA5: 0x3371,\n  0xE58BA8: 0x3372,\n  0xE58BA9: 0x3373,\n  0xE58BAA: 0x3374,\n  0xE58BAC: 0x3375,\n  0xE58BB0: 0x3376,\n  0xE58BB1: 0x3377,\n  0xE58BB4: 0x3378,\n  0xE58BB6: 0x3379,\n  0xE58BB7: 0x337A,\n  0xE58C80: 0x337B,\n  0xE58C83: 0x337C,\n  0xE58C8A: 0x337D,\n  0xE58C8B: 0x337E,\n  0xE58C8C: 0x3421,\n  0xE58C91: 0x3422,\n  0xE58C93: 0x3423,\n  0xE58C98: 0x3424,\n  0xE58C9B: 0x3425,\n  0xE58C9C: 0x3426,\n  0xE58C9E: 0x3427,\n  0xE58C9F: 0x3428,\n  0xE58CA5: 0x3429,\n  0xE58CA7: 0x342A,\n  0xE58CA8: 0x342B,\n  0xE58CA9: 0x342C,\n  0xE58CAB: 0x342D,\n  0xE58CAC: 0x342E,\n  0xE58CAD: 0x342F,\n  0xE58CB0: 0x3430,\n  0xE58CB2: 0x3431,\n  0xE58CB5: 0x3432,\n  0xE58CBC: 0x3433,\n  0xE58CBD: 0x3434,\n  0xE58CBE: 0x3435,\n  0xE58D82: 0x3436,\n  0xE58D8C: 0x3437,\n  0xE58D8B: 0x3438,\n  0xE58D99: 0x3439,\n  0xE58D9B: 0x343A,\n  0xE58DA1: 0x343B,\n  0xE58DA3: 0x343C,\n  0xE58DA5: 0x343D,\n  0xE58DAC: 0x343E,\n  0xE58DAD: 0x343F,\n  0xE58DB2: 0x3440,\n  0xE58DB9: 0x3441,\n  0xE58DBE: 0x3442,\n  0xE58E83: 0x3443,\n  0xE58E87: 0x3444,\n  0xE58E88: 0x3445,\n  0xE58E8E: 0x3446,\n  0xE58E93: 0x3447,\n  0xE58E94: 0x3448,\n  0xE58E99: 0x3449,\n  0xE58E9D: 0x344A,\n  0xE58EA1: 0x344B,\n  0xE58EA4: 0x344C,\n  0xE58EAA: 0x344D,\n  0xE58EAB: 0x344E,\n  0xE58EAF: 0x344F,\n  0xE58EB2: 0x3450,\n  0xE58EB4: 0x3451,\n  0xE58EB5: 0x3452,\n  0xE58EB7: 0x3453,\n  0xE58EB8: 0x3454,\n  0xE58EBA: 0x3455,\n  0xE58EBD: 0x3456,\n  0xE58F80: 0x3457,\n  0xE58F85: 0x3458,\n  0xE58F8F: 0x3459,\n  0xE58F92: 0x345A,\n  0xE58F93: 0x345B,\n  0xE58F95: 0x345C,\n  0xE58F9A: 0x345D,\n  0xE58F9D: 0x345E,\n  0xE58F9E: 0x345F,\n  0xE58FA0: 0x3460,\n  0xE58FA6: 0x3461,\n  0xE58FA7: 0x3462,\n  0xE58FB5: 0x3463,\n  0xE59082: 0x3464,\n  0xE59093: 0x3465,\n  0xE5909A: 0x3466,\n  0xE590A1: 0x3467,\n  0xE590A7: 0x3468,\n  0xE590A8: 0x3469,\n  0xE590AA: 0x346A,\n  0xE590AF: 0x346B,\n  0xE590B1: 0x346C,\n  0xE590B4: 0x346D,\n  0xE590B5: 0x346E,\n  0xE59183: 0x346F,\n  0xE59184: 0x3470,\n  0xE59187: 0x3471,\n  0xE5918D: 0x3472,\n  0xE5918F: 0x3473,\n  0xE5919E: 0x3474,\n  0xE591A2: 0x3475,\n  0xE591A4: 0x3476,\n  0xE591A6: 0x3477,\n  0xE591A7: 0x3478,\n  0xE591A9: 0x3479,\n  0xE591AB: 0x347A,\n  0xE591AD: 0x347B,\n  0xE591AE: 0x347C,\n  0xE591B4: 0x347D,\n  0xE591BF: 0x347E,\n  0xE59281: 0x3521,\n  0xE59283: 0x3522,\n  0xE59285: 0x3523,\n  0xE59288: 0x3524,\n  0xE59289: 0x3525,\n  0xE5928D: 0x3526,\n  0xE59291: 0x3527,\n  0xE59295: 0x3528,\n  0xE59296: 0x3529,\n  0xE5929C: 0x352A,\n  0xE5929F: 0x352B,\n  0xE592A1: 0x352C,\n  0xE592A6: 0x352D,\n  0xE592A7: 0x352E,\n  0xE592A9: 0x352F,\n  0xE592AA: 0x3530,\n  0xE592AD: 0x3531,\n  0xE592AE: 0x3532,\n  0xE592B1: 0x3533,\n  0xE592B7: 0x3534,\n  0xE592B9: 0x3535,\n  0xE592BA: 0x3536,\n  0xE592BB: 0x3537,\n  0xE592BF: 0x3538,\n  0xE59386: 0x3539,\n  0xE5938A: 0x353A,\n  0xE5938D: 0x353B,\n  0xE5938E: 0x353C,\n  0xE593A0: 0x353D,\n  0xE593AA: 0x353E,\n  0xE593AC: 0x353F,\n  0xE593AF: 0x3540,\n  0xE593B6: 0x3541,\n  0xE593BC: 0x3542,\n  0xE593BE: 0x3543,\n  0xE593BF: 0x3544,\n  0xE59480: 0x3545,\n  0xE59481: 0x3546,\n  0xE59485: 0x3547,\n  0xE59488: 0x3548,\n  0xE59489: 0x3549,\n  0xE5948C: 0x354A,\n  0xE5948D: 0x354B,\n  0xE5948E: 0x354C,\n  0xE59495: 0x354D,\n  0xE594AA: 0x354E,\n  0xE594AB: 0x354F,\n  0xE594B2: 0x3550,\n  0xE594B5: 0x3551,\n  0xE594B6: 0x3552,\n  0xE594BB: 0x3553,\n  0xE594BC: 0x3554,\n  0xE594BD: 0x3555,\n  0xE59581: 0x3556,\n  0xE59587: 0x3557,\n  0xE59589: 0x3558,\n  0xE5958A: 0x3559,\n  0xE5958D: 0x355A,\n  0xE59590: 0x355B,\n  0xE59591: 0x355C,\n  0xE59598: 0x355D,\n  0xE5959A: 0x355E,\n  0xE5959B: 0x355F,\n  0xE5959E: 0x3560,\n  0xE595A0: 0x3561,\n  0xE595A1: 0x3562,\n  0xE595A4: 0x3563,\n  0xE595A6: 0x3564,\n  0xE595BF: 0x3565,\n  0xE59681: 0x3566,\n  0xE59682: 0x3567,\n  0xE59686: 0x3568,\n  0xE59688: 0x3569,\n  0xE5968E: 0x356A,\n  0xE5968F: 0x356B,\n  0xE59691: 0x356C,\n  0xE59692: 0x356D,\n  0xE59693: 0x356E,\n  0xE59694: 0x356F,\n  0xE59697: 0x3570,\n  0xE596A3: 0x3571,\n  0xE596A4: 0x3572,\n  0xE596AD: 0x3573,\n  0xE596B2: 0x3574,\n  0xE596BF: 0x3575,\n  0xE59781: 0x3576,\n  0xE59783: 0x3577,\n  0xE59786: 0x3578,\n  0xE59789: 0x3579,\n  0xE5978B: 0x357A,\n  0xE5978C: 0x357B,\n  0xE5978E: 0x357C,\n  0xE59791: 0x357D,\n  0xE59792: 0x357E,\n  0xE59793: 0x3621,\n  0xE59797: 0x3622,\n  0xE59798: 0x3623,\n  0xE5979B: 0x3624,\n  0xE5979E: 0x3625,\n  0xE597A2: 0x3626,\n  0xE597A9: 0x3627,\n  0xE597B6: 0x3628,\n  0xE597BF: 0x3629,\n  0xE59885: 0x362A,\n  0xE59888: 0x362B,\n  0xE5988A: 0x362C,\n  0xE5988D: 0x362D,\n  0xE5988E: 0x362E,\n  0xE5988F: 0x362F,\n  0xE59890: 0x3630,\n  0xE59891: 0x3631,\n  0xE59892: 0x3632,\n  0xE59899: 0x3633,\n  0xE598AC: 0x3634,\n  0xE598B0: 0x3635,\n  0xE598B3: 0x3636,\n  0xE598B5: 0x3637,\n  0xE598B7: 0x3638,\n  0xE598B9: 0x3639,\n  0xE598BB: 0x363A,\n  0xE598BC: 0x363B,\n  0xE598BD: 0x363C,\n  0xE598BF: 0x363D,\n  0xE59980: 0x363E,\n  0xE59981: 0x363F,\n  0xE59983: 0x3640,\n  0xE59984: 0x3641,\n  0xE59986: 0x3642,\n  0xE59989: 0x3643,\n  0xE5998B: 0x3644,\n  0xE5998D: 0x3645,\n  0xE5998F: 0x3646,\n  0xE59994: 0x3647,\n  0xE5999E: 0x3648,\n  0xE599A0: 0x3649,\n  0xE599A1: 0x364A,\n  0xE599A2: 0x364B,\n  0xE599A3: 0x364C,\n  0xE599A6: 0x364D,\n  0xE599A9: 0x364E,\n  0xE599AD: 0x364F,\n  0xE599AF: 0x3650,\n  0xE599B1: 0x3651,\n  0xE599B2: 0x3652,\n  0xE599B5: 0x3653,\n  0xE59A84: 0x3654,\n  0xE59A85: 0x3655,\n  0xE59A88: 0x3656,\n  0xE59A8B: 0x3657,\n  0xE59A8C: 0x3658,\n  0xE59A95: 0x3659,\n  0xE59A99: 0x365A,\n  0xE59A9A: 0x365B,\n  0xE59A9D: 0x365C,\n  0xE59A9E: 0x365D,\n  0xE59A9F: 0x365E,\n  0xE59AA6: 0x365F,\n  0xE59AA7: 0x3660,\n  0xE59AA8: 0x3661,\n  0xE59AA9: 0x3662,\n  0xE59AAB: 0x3663,\n  0xE59AAC: 0x3664,\n  0xE59AAD: 0x3665,\n  0xE59AB1: 0x3666,\n  0xE59AB3: 0x3667,\n  0xE59AB7: 0x3668,\n  0xE59ABE: 0x3669,\n  0xE59B85: 0x366A,\n  0xE59B89: 0x366B,\n  0xE59B8A: 0x366C,\n  0xE59B8B: 0x366D,\n  0xE59B8F: 0x366E,\n  0xE59B90: 0x366F,\n  0xE59B8C: 0x3670,\n  0xE59B8D: 0x3671,\n  0xE59B99: 0x3672,\n  0xE59B9C: 0x3673,\n  0xE59B9D: 0x3674,\n  0xE59B9F: 0x3675,\n  0xE59BA1: 0x3676,\n  0xE59BA4: 0x3677,\n  0xE59BA5: 0x3678,\n  0xE59BA6: 0x3679,\n  0xE59BA7: 0x367A,\n  0xE59BA8: 0x367B,\n  0xE59BB1: 0x367C,\n  0xE59BAB: 0x367D,\n  0xE59BAD: 0x367E,\n  0xE59BB6: 0x3721,\n  0xE59BB7: 0x3722,\n  0xE59C81: 0x3723,\n  0xE59C82: 0x3724,\n  0xE59C87: 0x3725,\n  0xE59C8A: 0x3726,\n  0xE59C8C: 0x3727,\n  0xE59C91: 0x3728,\n  0xE59C95: 0x3729,\n  0xE59C9A: 0x372A,\n  0xE59C9B: 0x372B,\n  0xE59C9D: 0x372C,\n  0xE59CA0: 0x372D,\n  0xE59CA2: 0x372E,\n  0xE59CA3: 0x372F,\n  0xE59CA4: 0x3730,\n  0xE59CA5: 0x3731,\n  0xE59CA9: 0x3732,\n  0xE59CAA: 0x3733,\n  0xE59CAC: 0x3734,\n  0xE59CAE: 0x3735,\n  0xE59CAF: 0x3736,\n  0xE59CB3: 0x3737,\n  0xE59CB4: 0x3738,\n  0xE59CBD: 0x3739,\n  0xE59CBE: 0x373A,\n  0xE59CBF: 0x373B,\n  0xE59D85: 0x373C,\n  0xE59D86: 0x373D,\n  0xE59D8C: 0x373E,\n  0xE59D8D: 0x373F,\n  0xE59D92: 0x3740,\n  0xE59DA2: 0x3741,\n  0xE59DA5: 0x3742,\n  0xE59DA7: 0x3743,\n  0xE59DA8: 0x3744,\n  0xE59DAB: 0x3745,\n  0xE59DAD: 0x3746,\n  0xE59DAE: 0x3747,\n  0xE59DAF: 0x3748,\n  0xE59DB0: 0x3749,\n  0xE59DB1: 0x374A,\n  0xE59DB3: 0x374B,\n  0xE59DB4: 0x374C,\n  0xE59DB5: 0x374D,\n  0xE59DB7: 0x374E,\n  0xE59DB9: 0x374F,\n  0xE59DBA: 0x3750,\n  0xE59DBB: 0x3751,\n  0xE59DBC: 0x3752,\n  0xE59DBE: 0x3753,\n  0xE59E81: 0x3754,\n  0xE59E83: 0x3755,\n  0xE59E8C: 0x3756,\n  0xE59E94: 0x3757,\n  0xE59E97: 0x3758,\n  0xE59E99: 0x3759,\n  0xE59E9A: 0x375A,\n  0xE59E9C: 0x375B,\n  0xE59E9D: 0x375C,\n  0xE59E9E: 0x375D,\n  0xE59E9F: 0x375E,\n  0xE59EA1: 0x375F,\n  0xE59E95: 0x3760,\n  0xE59EA7: 0x3761,\n  0xE59EA8: 0x3762,\n  0xE59EA9: 0x3763,\n  0xE59EAC: 0x3764,\n  0xE59EB8: 0x3765,\n  0xE59EBD: 0x3766,\n  0xE59F87: 0x3767,\n  0xE59F88: 0x3768,\n  0xE59F8C: 0x3769,\n  0xE59F8F: 0x376A,\n  0xE59F95: 0x376B,\n  0xE59F9D: 0x376C,\n  0xE59F9E: 0x376D,\n  0xE59FA4: 0x376E,\n  0xE59FA6: 0x376F,\n  0xE59FA7: 0x3770,\n  0xE59FA9: 0x3771,\n  0xE59FAD: 0x3772,\n  0xE59FB0: 0x3773,\n  0xE59FB5: 0x3774,\n  0xE59FB6: 0x3775,\n  0xE59FB8: 0x3776,\n  0xE59FBD: 0x3777,\n  0xE59FBE: 0x3778,\n  0xE59FBF: 0x3779,\n  0xE5A083: 0x377A,\n  0xE5A084: 0x377B,\n  0xE5A088: 0x377C,\n  0xE5A089: 0x377D,\n  0xE59FA1: 0x377E,\n  0xE5A08C: 0x3821,\n  0xE5A08D: 0x3822,\n  0xE5A09B: 0x3823,\n  0xE5A09E: 0x3824,\n  0xE5A09F: 0x3825,\n  0xE5A0A0: 0x3826,\n  0xE5A0A6: 0x3827,\n  0xE5A0A7: 0x3828,\n  0xE5A0AD: 0x3829,\n  0xE5A0B2: 0x382A,\n  0xE5A0B9: 0x382B,\n  0xE5A0BF: 0x382C,\n  0xE5A189: 0x382D,\n  0xE5A18C: 0x382E,\n  0xE5A18D: 0x382F,\n  0xE5A18F: 0x3830,\n  0xE5A190: 0x3831,\n  0xE5A195: 0x3832,\n  0xE5A19F: 0x3833,\n  0xE5A1A1: 0x3834,\n  0xE5A1A4: 0x3835,\n  0xE5A1A7: 0x3836,\n  0xE5A1A8: 0x3837,\n  0xE5A1B8: 0x3838,\n  0xE5A1BC: 0x3839,\n  0xE5A1BF: 0x383A,\n  0xE5A280: 0x383B,\n  0xE5A281: 0x383C,\n  0xE5A287: 0x383D,\n  0xE5A288: 0x383E,\n  0xE5A289: 0x383F,\n  0xE5A28A: 0x3840,\n  0xE5A28C: 0x3841,\n  0xE5A28D: 0x3842,\n  0xE5A28F: 0x3843,\n  0xE5A290: 0x3844,\n  0xE5A294: 0x3845,\n  0xE5A296: 0x3846,\n  0xE5A29D: 0x3847,\n  0xE5A2A0: 0x3848,\n  0xE5A2A1: 0x3849,\n  0xE5A2A2: 0x384A,\n  0xE5A2A6: 0x384B,\n  0xE5A2A9: 0x384C,\n  0xE5A2B1: 0x384D,\n  0xE5A2B2: 0x384E,\n  0xE5A384: 0x384F,\n  0xE5A2BC: 0x3850,\n  0xE5A382: 0x3851,\n  0xE5A388: 0x3852,\n  0xE5A38D: 0x3853,\n  0xE5A38E: 0x3854,\n  0xE5A390: 0x3855,\n  0xE5A392: 0x3856,\n  0xE5A394: 0x3857,\n  0xE5A396: 0x3858,\n  0xE5A39A: 0x3859,\n  0xE5A39D: 0x385A,\n  0xE5A3A1: 0x385B,\n  0xE5A3A2: 0x385C,\n  0xE5A3A9: 0x385D,\n  0xE5A3B3: 0x385E,\n  0xE5A485: 0x385F,\n  0xE5A486: 0x3860,\n  0xE5A48B: 0x3861,\n  0xE5A48C: 0x3862,\n  0xE5A492: 0x3863,\n  0xE5A493: 0x3864,\n  0xE5A494: 0x3865,\n  0xE89981: 0x3866,\n  0xE5A49D: 0x3867,\n  0xE5A4A1: 0x3868,\n  0xE5A4A3: 0x3869,\n  0xE5A4A4: 0x386A,\n  0xE5A4A8: 0x386B,\n  0xE5A4AF: 0x386C,\n  0xE5A4B0: 0x386D,\n  0xE5A4B3: 0x386E,\n  0xE5A4B5: 0x386F,\n  0xE5A4B6: 0x3870,\n  0xE5A4BF: 0x3871,\n  0xE5A583: 0x3872,\n  0xE5A586: 0x3873,\n  0xE5A592: 0x3874,\n  0xE5A593: 0x3875,\n  0xE5A599: 0x3876,\n  0xE5A59B: 0x3877,\n  0xE5A59D: 0x3878,\n  0xE5A59E: 0x3879,\n  0xE5A59F: 0x387A,\n  0xE5A5A1: 0x387B,\n  0xE5A5A3: 0x387C,\n  0xE5A5AB: 0x387D,\n  0xE5A5AD: 0x387E,\n  0xE5A5AF: 0x3921,\n  0xE5A5B2: 0x3922,\n  0xE5A5B5: 0x3923,\n  0xE5A5B6: 0x3924,\n  0xE5A5B9: 0x3925,\n  0xE5A5BB: 0x3926,\n  0xE5A5BC: 0x3927,\n  0xE5A68B: 0x3928,\n  0xE5A68C: 0x3929,\n  0xE5A68E: 0x392A,\n  0xE5A692: 0x392B,\n  0xE5A695: 0x392C,\n  0xE5A697: 0x392D,\n  0xE5A69F: 0x392E,\n  0xE5A6A4: 0x392F,\n  0xE5A6A7: 0x3930,\n  0xE5A6AD: 0x3931,\n  0xE5A6AE: 0x3932,\n  0xE5A6AF: 0x3933,\n  0xE5A6B0: 0x3934,\n  0xE5A6B3: 0x3935,\n  0xE5A6B7: 0x3936,\n  0xE5A6BA: 0x3937,\n  0xE5A6BC: 0x3938,\n  0xE5A781: 0x3939,\n  0xE5A783: 0x393A,\n  0xE5A784: 0x393B,\n  0xE5A788: 0x393C,\n  0xE5A78A: 0x393D,\n  0xE5A78D: 0x393E,\n  0xE5A792: 0x393F,\n  0xE5A79D: 0x3940,\n  0xE5A79E: 0x3941,\n  0xE5A79F: 0x3942,\n  0xE5A7A3: 0x3943,\n  0xE5A7A4: 0x3944,\n  0xE5A7A7: 0x3945,\n  0xE5A7AE: 0x3946,\n  0xE5A7AF: 0x3947,\n  0xE5A7B1: 0x3948,\n  0xE5A7B2: 0x3949,\n  0xE5A7B4: 0x394A,\n  0xE5A7B7: 0x394B,\n  0xE5A880: 0x394C,\n  0xE5A884: 0x394D,\n  0xE5A88C: 0x394E,\n  0xE5A88D: 0x394F,\n  0xE5A88E: 0x3950,\n  0xE5A892: 0x3951,\n  0xE5A893: 0x3952,\n  0xE5A89E: 0x3953,\n  0xE5A8A3: 0x3954,\n  0xE5A8A4: 0x3955,\n  0xE5A8A7: 0x3956,\n  0xE5A8A8: 0x3957,\n  0xE5A8AA: 0x3958,\n  0xE5A8AD: 0x3959,\n  0xE5A8B0: 0x395A,\n  0xE5A984: 0x395B,\n  0xE5A985: 0x395C,\n  0xE5A987: 0x395D,\n  0xE5A988: 0x395E,\n  0xE5A98C: 0x395F,\n  0xE5A990: 0x3960,\n  0xE5A995: 0x3961,\n  0xE5A99E: 0x3962,\n  0xE5A9A3: 0x3963,\n  0xE5A9A5: 0x3964,\n  0xE5A9A7: 0x3965,\n  0xE5A9AD: 0x3966,\n  0xE5A9B7: 0x3967,\n  0xE5A9BA: 0x3968,\n  0xE5A9BB: 0x3969,\n  0xE5A9BE: 0x396A,\n  0xE5AA8B: 0x396B,\n  0xE5AA90: 0x396C,\n  0xE5AA93: 0x396D,\n  0xE5AA96: 0x396E,\n  0xE5AA99: 0x396F,\n  0xE5AA9C: 0x3970,\n  0xE5AA9E: 0x3971,\n  0xE5AA9F: 0x3972,\n  0xE5AAA0: 0x3973,\n  0xE5AAA2: 0x3974,\n  0xE5AAA7: 0x3975,\n  0xE5AAAC: 0x3976,\n  0xE5AAB1: 0x3977,\n  0xE5AAB2: 0x3978,\n  0xE5AAB3: 0x3979,\n  0xE5AAB5: 0x397A,\n  0xE5AAB8: 0x397B,\n  0xE5AABA: 0x397C,\n  0xE5AABB: 0x397D,\n  0xE5AABF: 0x397E,\n  0xE5AB84: 0x3A21,\n  0xE5AB86: 0x3A22,\n  0xE5AB88: 0x3A23,\n  0xE5AB8F: 0x3A24,\n  0xE5AB9A: 0x3A25,\n  0xE5AB9C: 0x3A26,\n  0xE5ABA0: 0x3A27,\n  0xE5ABA5: 0x3A28,\n  0xE5ABAA: 0x3A29,\n  0xE5ABAE: 0x3A2A,\n  0xE5ABB5: 0x3A2B,\n  0xE5ABB6: 0x3A2C,\n  0xE5ABBD: 0x3A2D,\n  0xE5AC80: 0x3A2E,\n  0xE5AC81: 0x3A2F,\n  0xE5AC88: 0x3A30,\n  0xE5AC97: 0x3A31,\n  0xE5ACB4: 0x3A32,\n  0xE5AC99: 0x3A33,\n  0xE5AC9B: 0x3A34,\n  0xE5AC9D: 0x3A35,\n  0xE5ACA1: 0x3A36,\n  0xE5ACA5: 0x3A37,\n  0xE5ACAD: 0x3A38,\n  0xE5ACB8: 0x3A39,\n  0xE5AD81: 0x3A3A,\n  0xE5AD8B: 0x3A3B,\n  0xE5AD8C: 0x3A3C,\n  0xE5AD92: 0x3A3D,\n  0xE5AD96: 0x3A3E,\n  0xE5AD9E: 0x3A3F,\n  0xE5ADA8: 0x3A40,\n  0xE5ADAE: 0x3A41,\n  0xE5ADAF: 0x3A42,\n  0xE5ADBC: 0x3A43,\n  0xE5ADBD: 0x3A44,\n  0xE5ADBE: 0x3A45,\n  0xE5ADBF: 0x3A46,\n  0xE5AE81: 0x3A47,\n  0xE5AE84: 0x3A48,\n  0xE5AE86: 0x3A49,\n  0xE5AE8A: 0x3A4A,\n  0xE5AE8E: 0x3A4B,\n  0xE5AE90: 0x3A4C,\n  0xE5AE91: 0x3A4D,\n  0xE5AE93: 0x3A4E,\n  0xE5AE94: 0x3A4F,\n  0xE5AE96: 0x3A50,\n  0xE5AEA8: 0x3A51,\n  0xE5AEA9: 0x3A52,\n  0xE5AEAC: 0x3A53,\n  0xE5AEAD: 0x3A54,\n  0xE5AEAF: 0x3A55,\n  0xE5AEB1: 0x3A56,\n  0xE5AEB2: 0x3A57,\n  0xE5AEB7: 0x3A58,\n  0xE5AEBA: 0x3A59,\n  0xE5AEBC: 0x3A5A,\n  0xE5AF80: 0x3A5B,\n  0xE5AF81: 0x3A5C,\n  0xE5AF8D: 0x3A5D,\n  0xE5AF8F: 0x3A5E,\n  0xE5AF96: 0x3A5F,\n  0xE5AF97: 0x3A60,\n  0xE5AF98: 0x3A61,\n  0xE5AF99: 0x3A62,\n  0xE5AF9A: 0x3A63,\n  0xE5AFA0: 0x3A64,\n  0xE5AFAF: 0x3A65,\n  0xE5AFB1: 0x3A66,\n  0xE5AFB4: 0x3A67,\n  0xE5AFBD: 0x3A68,\n  0xE5B08C: 0x3A69,\n  0xE5B097: 0x3A6A,\n  0xE5B09E: 0x3A6B,\n  0xE5B09F: 0x3A6C,\n  0xE5B0A3: 0x3A6D,\n  0xE5B0A6: 0x3A6E,\n  0xE5B0A9: 0x3A6F,\n  0xE5B0AB: 0x3A70,\n  0xE5B0AC: 0x3A71,\n  0xE5B0AE: 0x3A72,\n  0xE5B0B0: 0x3A73,\n  0xE5B0B2: 0x3A74,\n  0xE5B0B5: 0x3A75,\n  0xE5B0B6: 0x3A76,\n  0xE5B199: 0x3A77,\n  0xE5B19A: 0x3A78,\n  0xE5B19C: 0x3A79,\n  0xE5B1A2: 0x3A7A,\n  0xE5B1A3: 0x3A7B,\n  0xE5B1A7: 0x3A7C,\n  0xE5B1A8: 0x3A7D,\n  0xE5B1A9: 0x3A7E,\n  0xE5B1AD: 0x3B21,\n  0xE5B1B0: 0x3B22,\n  0xE5B1B4: 0x3B23,\n  0xE5B1B5: 0x3B24,\n  0xE5B1BA: 0x3B25,\n  0xE5B1BB: 0x3B26,\n  0xE5B1BC: 0x3B27,\n  0xE5B1BD: 0x3B28,\n  0xE5B287: 0x3B29,\n  0xE5B288: 0x3B2A,\n  0xE5B28A: 0x3B2B,\n  0xE5B28F: 0x3B2C,\n  0xE5B292: 0x3B2D,\n  0xE5B29D: 0x3B2E,\n  0xE5B29F: 0x3B2F,\n  0xE5B2A0: 0x3B30,\n  0xE5B2A2: 0x3B31,\n  0xE5B2A3: 0x3B32,\n  0xE5B2A6: 0x3B33,\n  0xE5B2AA: 0x3B34,\n  0xE5B2B2: 0x3B35,\n  0xE5B2B4: 0x3B36,\n  0xE5B2B5: 0x3B37,\n  0xE5B2BA: 0x3B38,\n  0xE5B389: 0x3B39,\n  0xE5B38B: 0x3B3A,\n  0xE5B392: 0x3B3B,\n  0xE5B39D: 0x3B3C,\n  0xE5B397: 0x3B3D,\n  0xE5B3AE: 0x3B3E,\n  0xE5B3B1: 0x3B3F,\n  0xE5B3B2: 0x3B40,\n  0xE5B3B4: 0x3B41,\n  0xE5B481: 0x3B42,\n  0xE5B486: 0x3B43,\n  0xE5B48D: 0x3B44,\n  0xE5B492: 0x3B45,\n  0xE5B4AB: 0x3B46,\n  0xE5B4A3: 0x3B47,\n  0xE5B4A4: 0x3B48,\n  0xE5B4A6: 0x3B49,\n  0xE5B4A7: 0x3B4A,\n  0xE5B4B1: 0x3B4B,\n  0xE5B4B4: 0x3B4C,\n  0xE5B4B9: 0x3B4D,\n  0xE5B4BD: 0x3B4E,\n  0xE5B4BF: 0x3B4F,\n  0xE5B582: 0x3B50,\n  0xE5B583: 0x3B51,\n  0xE5B586: 0x3B52,\n  0xE5B588: 0x3B53,\n  0xE5B595: 0x3B54,\n  0xE5B591: 0x3B55,\n  0xE5B599: 0x3B56,\n  0xE5B58A: 0x3B57,\n  0xE5B59F: 0x3B58,\n  0xE5B5A0: 0x3B59,\n  0xE5B5A1: 0x3B5A,\n  0xE5B5A2: 0x3B5B,\n  0xE5B5A4: 0x3B5C,\n  0xE5B5AA: 0x3B5D,\n  0xE5B5AD: 0x3B5E,\n  0xE5B5B0: 0x3B5F,\n  0xE5B5B9: 0x3B60,\n  0xE5B5BA: 0x3B61,\n  0xE5B5BE: 0x3B62,\n  0xE5B5BF: 0x3B63,\n  0xE5B681: 0x3B64,\n  0xE5B683: 0x3B65,\n  0xE5B688: 0x3B66,\n  0xE5B68A: 0x3B67,\n  0xE5B692: 0x3B68,\n  0xE5B693: 0x3B69,\n  0xE5B694: 0x3B6A,\n  0xE5B695: 0x3B6B,\n  0xE5B699: 0x3B6C,\n  0xE5B69B: 0x3B6D,\n  0xE5B69F: 0x3B6E,\n  0xE5B6A0: 0x3B6F,\n  0xE5B6A7: 0x3B70,\n  0xE5B6AB: 0x3B71,\n  0xE5B6B0: 0x3B72,\n  0xE5B6B4: 0x3B73,\n  0xE5B6B8: 0x3B74,\n  0xE5B6B9: 0x3B75,\n  0xE5B783: 0x3B76,\n  0xE5B787: 0x3B77,\n  0xE5B78B: 0x3B78,\n  0xE5B790: 0x3B79,\n  0xE5B78E: 0x3B7A,\n  0xE5B798: 0x3B7B,\n  0xE5B799: 0x3B7C,\n  0xE5B7A0: 0x3B7D,\n  0xE5B7A4: 0x3B7E,\n  0xE5B7A9: 0x3C21,\n  0xE5B7B8: 0x3C22,\n  0xE5B7B9: 0x3C23,\n  0xE5B880: 0x3C24,\n  0xE5B887: 0x3C25,\n  0xE5B88D: 0x3C26,\n  0xE5B892: 0x3C27,\n  0xE5B894: 0x3C28,\n  0xE5B895: 0x3C29,\n  0xE5B898: 0x3C2A,\n  0xE5B89F: 0x3C2B,\n  0xE5B8A0: 0x3C2C,\n  0xE5B8AE: 0x3C2D,\n  0xE5B8A8: 0x3C2E,\n  0xE5B8B2: 0x3C2F,\n  0xE5B8B5: 0x3C30,\n  0xE5B8BE: 0x3C31,\n  0xE5B98B: 0x3C32,\n  0xE5B990: 0x3C33,\n  0xE5B989: 0x3C34,\n  0xE5B991: 0x3C35,\n  0xE5B996: 0x3C36,\n  0xE5B998: 0x3C37,\n  0xE5B99B: 0x3C38,\n  0xE5B99C: 0x3C39,\n  0xE5B99E: 0x3C3A,\n  0xE5B9A8: 0x3C3B,\n  0xE5B9AA: 0x3C3C,\n  0xE5B9AB: 0x3C3D,\n  0xE5B9AC: 0x3C3E,\n  0xE5B9AD: 0x3C3F,\n  0xE5B9AE: 0x3C40,\n  0xE5B9B0: 0x3C41,\n  0xE5BA80: 0x3C42,\n  0xE5BA8B: 0x3C43,\n  0xE5BA8E: 0x3C44,\n  0xE5BAA2: 0x3C45,\n  0xE5BAA4: 0x3C46,\n  0xE5BAA5: 0x3C47,\n  0xE5BAA8: 0x3C48,\n  0xE5BAAA: 0x3C49,\n  0xE5BAAC: 0x3C4A,\n  0xE5BAB1: 0x3C4B,\n  0xE5BAB3: 0x3C4C,\n  0xE5BABD: 0x3C4D,\n  0xE5BABE: 0x3C4E,\n  0xE5BABF: 0x3C4F,\n  0xE5BB86: 0x3C50,\n  0xE5BB8C: 0x3C51,\n  0xE5BB8B: 0x3C52,\n  0xE5BB8E: 0x3C53,\n  0xE5BB91: 0x3C54,\n  0xE5BB92: 0x3C55,\n  0xE5BB94: 0x3C56,\n  0xE5BB95: 0x3C57,\n  0xE5BB9C: 0x3C58,\n  0xE5BB9E: 0x3C59,\n  0xE5BBA5: 0x3C5A,\n  0xE5BBAB: 0x3C5B,\n  0xE5BC82: 0x3C5C,\n  0xE5BC86: 0x3C5D,\n  0xE5BC87: 0x3C5E,\n  0xE5BC88: 0x3C5F,\n  0xE5BC8E: 0x3C60,\n  0xE5BC99: 0x3C61,\n  0xE5BC9C: 0x3C62,\n  0xE5BC9D: 0x3C63,\n  0xE5BCA1: 0x3C64,\n  0xE5BCA2: 0x3C65,\n  0xE5BCA3: 0x3C66,\n  0xE5BCA4: 0x3C67,\n  0xE5BCA8: 0x3C68,\n  0xE5BCAB: 0x3C69,\n  0xE5BCAC: 0x3C6A,\n  0xE5BCAE: 0x3C6B,\n  0xE5BCB0: 0x3C6C,\n  0xE5BCB4: 0x3C6D,\n  0xE5BCB6: 0x3C6E,\n  0xE5BCBB: 0x3C6F,\n  0xE5BCBD: 0x3C70,\n  0xE5BCBF: 0x3C71,\n  0xE5BD80: 0x3C72,\n  0xE5BD84: 0x3C73,\n  0xE5BD85: 0x3C74,\n  0xE5BD87: 0x3C75,\n  0xE5BD8D: 0x3C76,\n  0xE5BD90: 0x3C77,\n  0xE5BD94: 0x3C78,\n  0xE5BD98: 0x3C79,\n  0xE5BD9B: 0x3C7A,\n  0xE5BDA0: 0x3C7B,\n  0xE5BDA3: 0x3C7C,\n  0xE5BDA4: 0x3C7D,\n  0xE5BDA7: 0x3C7E,\n  0xE5BDAF: 0x3D21,\n  0xE5BDB2: 0x3D22,\n  0xE5BDB4: 0x3D23,\n  0xE5BDB5: 0x3D24,\n  0xE5BDB8: 0x3D25,\n  0xE5BDBA: 0x3D26,\n  0xE5BDBD: 0x3D27,\n  0xE5BDBE: 0x3D28,\n  0xE5BE89: 0x3D29,\n  0xE5BE8D: 0x3D2A,\n  0xE5BE8F: 0x3D2B,\n  0xE5BE96: 0x3D2C,\n  0xE5BE9C: 0x3D2D,\n  0xE5BE9D: 0x3D2E,\n  0xE5BEA2: 0x3D2F,\n  0xE5BEA7: 0x3D30,\n  0xE5BEAB: 0x3D31,\n  0xE5BEA4: 0x3D32,\n  0xE5BEAC: 0x3D33,\n  0xE5BEAF: 0x3D34,\n  0xE5BEB0: 0x3D35,\n  0xE5BEB1: 0x3D36,\n  0xE5BEB8: 0x3D37,\n  0xE5BF84: 0x3D38,\n  0xE5BF87: 0x3D39,\n  0xE5BF88: 0x3D3A,\n  0xE5BF89: 0x3D3B,\n  0xE5BF8B: 0x3D3C,\n  0xE5BF90: 0x3D3D,\n  0xE5BF91: 0x3D3E,\n  0xE5BF92: 0x3D3F,\n  0xE5BF93: 0x3D40,\n  0xE5BF94: 0x3D41,\n  0xE5BF9E: 0x3D42,\n  0xE5BFA1: 0x3D43,\n  0xE5BFA2: 0x3D44,\n  0xE5BFA8: 0x3D45,\n  0xE5BFA9: 0x3D46,\n  0xE5BFAA: 0x3D47,\n  0xE5BFAC: 0x3D48,\n  0xE5BFAD: 0x3D49,\n  0xE5BFAE: 0x3D4A,\n  0xE5BFAF: 0x3D4B,\n  0xE5BFB2: 0x3D4C,\n  0xE5BFB3: 0x3D4D,\n  0xE5BFB6: 0x3D4E,\n  0xE5BFBA: 0x3D4F,\n  0xE5BFBC: 0x3D50,\n  0xE68087: 0x3D51,\n  0xE6808A: 0x3D52,\n  0xE6808D: 0x3D53,\n  0xE68093: 0x3D54,\n  0xE68094: 0x3D55,\n  0xE68097: 0x3D56,\n  0xE68098: 0x3D57,\n  0xE6809A: 0x3D58,\n  0xE6809F: 0x3D59,\n  0xE680A4: 0x3D5A,\n  0xE680AD: 0x3D5B,\n  0xE680B3: 0x3D5C,\n  0xE680B5: 0x3D5D,\n  0xE68180: 0x3D5E,\n  0xE68187: 0x3D5F,\n  0xE68188: 0x3D60,\n  0xE68189: 0x3D61,\n  0xE6818C: 0x3D62,\n  0xE68191: 0x3D63,\n  0xE68194: 0x3D64,\n  0xE68196: 0x3D65,\n  0xE68197: 0x3D66,\n  0xE6819D: 0x3D67,\n  0xE681A1: 0x3D68,\n  0xE681A7: 0x3D69,\n  0xE681B1: 0x3D6A,\n  0xE681BE: 0x3D6B,\n  0xE681BF: 0x3D6C,\n  0xE68282: 0x3D6D,\n  0xE68286: 0x3D6E,\n  0xE68288: 0x3D6F,\n  0xE6828A: 0x3D70,\n  0xE6828E: 0x3D71,\n  0xE68291: 0x3D72,\n  0xE68293: 0x3D73,\n  0xE68295: 0x3D74,\n  0xE68298: 0x3D75,\n  0xE6829D: 0x3D76,\n  0xE6829E: 0x3D77,\n  0xE682A2: 0x3D78,\n  0xE682A4: 0x3D79,\n  0xE682A5: 0x3D7A,\n  0xE682A8: 0x3D7B,\n  0xE682B0: 0x3D7C,\n  0xE682B1: 0x3D7D,\n  0xE682B7: 0x3D7E,\n  0xE682BB: 0x3E21,\n  0xE682BE: 0x3E22,\n  0xE68382: 0x3E23,\n  0xE68384: 0x3E24,\n  0xE68388: 0x3E25,\n  0xE68389: 0x3E26,\n  0xE6838A: 0x3E27,\n  0xE6838B: 0x3E28,\n  0xE6838E: 0x3E29,\n  0xE6838F: 0x3E2A,\n  0xE68394: 0x3E2B,\n  0xE68395: 0x3E2C,\n  0xE68399: 0x3E2D,\n  0xE6839B: 0x3E2E,\n  0xE6839D: 0x3E2F,\n  0xE6839E: 0x3E30,\n  0xE683A2: 0x3E31,\n  0xE683A5: 0x3E32,\n  0xE683B2: 0x3E33,\n  0xE683B5: 0x3E34,\n  0xE683B8: 0x3E35,\n  0xE683BC: 0x3E36,\n  0xE683BD: 0x3E37,\n  0xE68482: 0x3E38,\n  0xE68487: 0x3E39,\n  0xE6848A: 0x3E3A,\n  0xE6848C: 0x3E3B,\n  0xE68490: 0x3E3C,\n  0xE68491: 0x3E3D,\n  0xE68492: 0x3E3E,\n  0xE68493: 0x3E3F,\n  0xE68494: 0x3E40,\n  0xE68496: 0x3E41,\n  0xE68497: 0x3E42,\n  0xE68499: 0x3E43,\n  0xE6849C: 0x3E44,\n  0xE6849E: 0x3E45,\n  0xE684A2: 0x3E46,\n  0xE684AA: 0x3E47,\n  0xE684AB: 0x3E48,\n  0xE684B0: 0x3E49,\n  0xE684B1: 0x3E4A,\n  0xE684B5: 0x3E4B,\n  0xE684B6: 0x3E4C,\n  0xE684B7: 0x3E4D,\n  0xE684B9: 0x3E4E,\n  0xE68581: 0x3E4F,\n  0xE68585: 0x3E50,\n  0xE68586: 0x3E51,\n  0xE68589: 0x3E52,\n  0xE6859E: 0x3E53,\n  0xE685A0: 0x3E54,\n  0xE685AC: 0x3E55,\n  0xE685B2: 0x3E56,\n  0xE685B8: 0x3E57,\n  0xE685BB: 0x3E58,\n  0xE685BC: 0x3E59,\n  0xE685BF: 0x3E5A,\n  0xE68680: 0x3E5B,\n  0xE68681: 0x3E5C,\n  0xE68683: 0x3E5D,\n  0xE68684: 0x3E5E,\n  0xE6868B: 0x3E5F,\n  0xE6868D: 0x3E60,\n  0xE68692: 0x3E61,\n  0xE68693: 0x3E62,\n  0xE68697: 0x3E63,\n  0xE68698: 0x3E64,\n  0xE6869C: 0x3E65,\n  0xE6869D: 0x3E66,\n  0xE6869F: 0x3E67,\n  0xE686A0: 0x3E68,\n  0xE686A5: 0x3E69,\n  0xE686A8: 0x3E6A,\n  0xE686AA: 0x3E6B,\n  0xE686AD: 0x3E6C,\n  0xE686B8: 0x3E6D,\n  0xE686B9: 0x3E6E,\n  0xE686BC: 0x3E6F,\n  0xE68780: 0x3E70,\n  0xE68781: 0x3E71,\n  0xE68782: 0x3E72,\n  0xE6878E: 0x3E73,\n  0xE6878F: 0x3E74,\n  0xE68795: 0x3E75,\n  0xE6879C: 0x3E76,\n  0xE6879D: 0x3E77,\n  0xE6879E: 0x3E78,\n  0xE6879F: 0x3E79,\n  0xE687A1: 0x3E7A,\n  0xE687A2: 0x3E7B,\n  0xE687A7: 0x3E7C,\n  0xE687A9: 0x3E7D,\n  0xE687A5: 0x3E7E,\n  0xE687AC: 0x3F21,\n  0xE687AD: 0x3F22,\n  0xE687AF: 0x3F23,\n  0xE68881: 0x3F24,\n  0xE68883: 0x3F25,\n  0xE68884: 0x3F26,\n  0xE68887: 0x3F27,\n  0xE68893: 0x3F28,\n  0xE68895: 0x3F29,\n  0xE6889C: 0x3F2A,\n  0xE688A0: 0x3F2B,\n  0xE688A2: 0x3F2C,\n  0xE688A3: 0x3F2D,\n  0xE688A7: 0x3F2E,\n  0xE688A9: 0x3F2F,\n  0xE688AB: 0x3F30,\n  0xE688B9: 0x3F31,\n  0xE688BD: 0x3F32,\n  0xE68982: 0x3F33,\n  0xE68983: 0x3F34,\n  0xE68984: 0x3F35,\n  0xE68986: 0x3F36,\n  0xE6898C: 0x3F37,\n  0xE68990: 0x3F38,\n  0xE68991: 0x3F39,\n  0xE68992: 0x3F3A,\n  0xE68994: 0x3F3B,\n  0xE68996: 0x3F3C,\n  0xE6899A: 0x3F3D,\n  0xE6899C: 0x3F3E,\n  0xE689A4: 0x3F3F,\n  0xE689AD: 0x3F40,\n  0xE689AF: 0x3F41,\n  0xE689B3: 0x3F42,\n  0xE689BA: 0x3F43,\n  0xE689BD: 0x3F44,\n  0xE68A8D: 0x3F45,\n  0xE68A8E: 0x3F46,\n  0xE68A8F: 0x3F47,\n  0xE68A90: 0x3F48,\n  0xE68AA6: 0x3F49,\n  0xE68AA8: 0x3F4A,\n  0xE68AB3: 0x3F4B,\n  0xE68AB6: 0x3F4C,\n  0xE68AB7: 0x3F4D,\n  0xE68ABA: 0x3F4E,\n  0xE68ABE: 0x3F4F,\n  0xE68ABF: 0x3F50,\n  0xE68B84: 0x3F51,\n  0xE68B8E: 0x3F52,\n  0xE68B95: 0x3F53,\n  0xE68B96: 0x3F54,\n  0xE68B9A: 0x3F55,\n  0xE68BAA: 0x3F56,\n  0xE68BB2: 0x3F57,\n  0xE68BB4: 0x3F58,\n  0xE68BBC: 0x3F59,\n  0xE68BBD: 0x3F5A,\n  0xE68C83: 0x3F5B,\n  0xE68C84: 0x3F5C,\n  0xE68C8A: 0x3F5D,\n  0xE68C8B: 0x3F5E,\n  0xE68C8D: 0x3F5F,\n  0xE68C90: 0x3F60,\n  0xE68C93: 0x3F61,\n  0xE68C96: 0x3F62,\n  0xE68C98: 0x3F63,\n  0xE68CA9: 0x3F64,\n  0xE68CAA: 0x3F65,\n  0xE68CAD: 0x3F66,\n  0xE68CB5: 0x3F67,\n  0xE68CB6: 0x3F68,\n  0xE68CB9: 0x3F69,\n  0xE68CBC: 0x3F6A,\n  0xE68D81: 0x3F6B,\n  0xE68D82: 0x3F6C,\n  0xE68D83: 0x3F6D,\n  0xE68D84: 0x3F6E,\n  0xE68D86: 0x3F6F,\n  0xE68D8A: 0x3F70,\n  0xE68D8B: 0x3F71,\n  0xE68D8E: 0x3F72,\n  0xE68D92: 0x3F73,\n  0xE68D93: 0x3F74,\n  0xE68D94: 0x3F75,\n  0xE68D98: 0x3F76,\n  0xE68D9B: 0x3F77,\n  0xE68DA5: 0x3F78,\n  0xE68DA6: 0x3F79,\n  0xE68DAC: 0x3F7A,\n  0xE68DAD: 0x3F7B,\n  0xE68DB1: 0x3F7C,\n  0xE68DB4: 0x3F7D,\n  0xE68DB5: 0x3F7E,\n  0xE68DB8: 0x4021,\n  0xE68DBC: 0x4022,\n  0xE68DBD: 0x4023,\n  0xE68DBF: 0x4024,\n  0xE68E82: 0x4025,\n  0xE68E84: 0x4026,\n  0xE68E87: 0x4027,\n  0xE68E8A: 0x4028,\n  0xE68E90: 0x4029,\n  0xE68E94: 0x402A,\n  0xE68E95: 0x402B,\n  0xE68E99: 0x402C,\n  0xE68E9A: 0x402D,\n  0xE68E9E: 0x402E,\n  0xE68EA4: 0x402F,\n  0xE68EA6: 0x4030,\n  0xE68EAD: 0x4031,\n  0xE68EAE: 0x4032,\n  0xE68EAF: 0x4033,\n  0xE68EBD: 0x4034,\n  0xE68F81: 0x4035,\n  0xE68F85: 0x4036,\n  0xE68F88: 0x4037,\n  0xE68F8E: 0x4038,\n  0xE68F91: 0x4039,\n  0xE68F93: 0x403A,\n  0xE68F94: 0x403B,\n  0xE68F95: 0x403C,\n  0xE68F9C: 0x403D,\n  0xE68FA0: 0x403E,\n  0xE68FA5: 0x403F,\n  0xE68FAA: 0x4040,\n  0xE68FAC: 0x4041,\n  0xE68FB2: 0x4042,\n  0xE68FB3: 0x4043,\n  0xE68FB5: 0x4044,\n  0xE68FB8: 0x4045,\n  0xE68FB9: 0x4046,\n  0xE69089: 0x4047,\n  0xE6908A: 0x4048,\n  0xE69090: 0x4049,\n  0xE69092: 0x404A,\n  0xE69094: 0x404B,\n  0xE69098: 0x404C,\n  0xE6909E: 0x404D,\n  0xE690A0: 0x404E,\n  0xE690A2: 0x404F,\n  0xE690A4: 0x4050,\n  0xE690A5: 0x4051,\n  0xE690A9: 0x4052,\n  0xE690AA: 0x4053,\n  0xE690AF: 0x4054,\n  0xE690B0: 0x4055,\n  0xE690B5: 0x4056,\n  0xE690BD: 0x4057,\n  0xE690BF: 0x4058,\n  0xE6918B: 0x4059,\n  0xE6918F: 0x405A,\n  0xE69191: 0x405B,\n  0xE69192: 0x405C,\n  0xE69193: 0x405D,\n  0xE69194: 0x405E,\n  0xE6919A: 0x405F,\n  0xE6919B: 0x4060,\n  0xE6919C: 0x4061,\n  0xE6919D: 0x4062,\n  0xE6919F: 0x4063,\n  0xE691A0: 0x4064,\n  0xE691A1: 0x4065,\n  0xE691A3: 0x4066,\n  0xE691AD: 0x4067,\n  0xE691B3: 0x4068,\n  0xE691B4: 0x4069,\n  0xE691BB: 0x406A,\n  0xE691BD: 0x406B,\n  0xE69285: 0x406C,\n  0xE69287: 0x406D,\n  0xE6928F: 0x406E,\n  0xE69290: 0x406F,\n  0xE69291: 0x4070,\n  0xE69298: 0x4071,\n  0xE69299: 0x4072,\n  0xE6929B: 0x4073,\n  0xE6929D: 0x4074,\n  0xE6929F: 0x4075,\n  0xE692A1: 0x4076,\n  0xE692A3: 0x4077,\n  0xE692A6: 0x4078,\n  0xE692A8: 0x4079,\n  0xE692AC: 0x407A,\n  0xE692B3: 0x407B,\n  0xE692BD: 0x407C,\n  0xE692BE: 0x407D,\n  0xE692BF: 0x407E,\n  0xE69384: 0x4121,\n  0xE69389: 0x4122,\n  0xE6938A: 0x4123,\n  0xE6938B: 0x4124,\n  0xE6938C: 0x4125,\n  0xE6938E: 0x4126,\n  0xE69390: 0x4127,\n  0xE69391: 0x4128,\n  0xE69395: 0x4129,\n  0xE69397: 0x412A,\n  0xE693A4: 0x412B,\n  0xE693A5: 0x412C,\n  0xE693A9: 0x412D,\n  0xE693AA: 0x412E,\n  0xE693AD: 0x412F,\n  0xE693B0: 0x4130,\n  0xE693B5: 0x4131,\n  0xE693B7: 0x4132,\n  0xE693BB: 0x4133,\n  0xE693BF: 0x4134,\n  0xE69481: 0x4135,\n  0xE69484: 0x4136,\n  0xE69488: 0x4137,\n  0xE69489: 0x4138,\n  0xE6948A: 0x4139,\n  0xE6948F: 0x413A,\n  0xE69493: 0x413B,\n  0xE69494: 0x413C,\n  0xE69496: 0x413D,\n  0xE69499: 0x413E,\n  0xE6949B: 0x413F,\n  0xE6949E: 0x4140,\n  0xE6949F: 0x4141,\n  0xE694A2: 0x4142,\n  0xE694A6: 0x4143,\n  0xE694A9: 0x4144,\n  0xE694AE: 0x4145,\n  0xE694B1: 0x4146,\n  0xE694BA: 0x4147,\n  0xE694BC: 0x4148,\n  0xE694BD: 0x4149,\n  0xE69583: 0x414A,\n  0xE69587: 0x414B,\n  0xE69589: 0x414C,\n  0xE69590: 0x414D,\n  0xE69592: 0x414E,\n  0xE69594: 0x414F,\n  0xE6959F: 0x4150,\n  0xE695A0: 0x4151,\n  0xE695A7: 0x4152,\n  0xE695AB: 0x4153,\n  0xE695BA: 0x4154,\n  0xE695BD: 0x4155,\n  0xE69681: 0x4156,\n  0xE69685: 0x4157,\n  0xE6968A: 0x4158,\n  0xE69692: 0x4159,\n  0xE69695: 0x415A,\n  0xE69698: 0x415B,\n  0xE6969D: 0x415C,\n  0xE696A0: 0x415D,\n  0xE696A3: 0x415E,\n  0xE696A6: 0x415F,\n  0xE696AE: 0x4160,\n  0xE696B2: 0x4161,\n  0xE696B3: 0x4162,\n  0xE696B4: 0x4163,\n  0xE696BF: 0x4164,\n  0xE69782: 0x4165,\n  0xE69788: 0x4166,\n  0xE69789: 0x4167,\n  0xE6978E: 0x4168,\n  0xE69790: 0x4169,\n  0xE69794: 0x416A,\n  0xE69796: 0x416B,\n  0xE69798: 0x416C,\n  0xE6979F: 0x416D,\n  0xE697B0: 0x416E,\n  0xE697B2: 0x416F,\n  0xE697B4: 0x4170,\n  0xE697B5: 0x4171,\n  0xE697B9: 0x4172,\n  0xE697BE: 0x4173,\n  0xE697BF: 0x4174,\n  0xE69880: 0x4175,\n  0xE69884: 0x4176,\n  0xE69888: 0x4177,\n  0xE69889: 0x4178,\n  0xE6988D: 0x4179,\n  0xE69891: 0x417A,\n  0xE69892: 0x417B,\n  0xE69895: 0x417C,\n  0xE69896: 0x417D,\n  0xE6989D: 0x417E,\n  0xE6989E: 0x4221,\n  0xE698A1: 0x4222,\n  0xE698A2: 0x4223,\n  0xE698A3: 0x4224,\n  0xE698A4: 0x4225,\n  0xE698A6: 0x4226,\n  0xE698A9: 0x4227,\n  0xE698AA: 0x4228,\n  0xE698AB: 0x4229,\n  0xE698AC: 0x422A,\n  0xE698AE: 0x422B,\n  0xE698B0: 0x422C,\n  0xE698B1: 0x422D,\n  0xE698B3: 0x422E,\n  0xE698B9: 0x422F,\n  0xE698B7: 0x4230,\n  0xE69980: 0x4231,\n  0xE69985: 0x4232,\n  0xE69986: 0x4233,\n  0xE6998A: 0x4234,\n  0xE6998C: 0x4235,\n  0xE69991: 0x4236,\n  0xE6998E: 0x4237,\n  0xE69997: 0x4238,\n  0xE69998: 0x4239,\n  0xE69999: 0x423A,\n  0xE6999B: 0x423B,\n  0xE6999C: 0x423C,\n  0xE699A0: 0x423D,\n  0xE699A1: 0x423E,\n  0xE69BBB: 0x423F,\n  0xE699AA: 0x4240,\n  0xE699AB: 0x4241,\n  0xE699AC: 0x4242,\n  0xE699BE: 0x4243,\n  0xE699B3: 0x4244,\n  0xE699B5: 0x4245,\n  0xE699BF: 0x4246,\n  0xE699B7: 0x4247,\n  0xE699B8: 0x4248,\n  0xE699B9: 0x4249,\n  0xE699BB: 0x424A,\n  0xE69A80: 0x424B,\n  0xE699BC: 0x424C,\n  0xE69A8B: 0x424D,\n  0xE69A8C: 0x424E,\n  0xE69A8D: 0x424F,\n  0xE69A90: 0x4250,\n  0xE69A92: 0x4251,\n  0xE69A99: 0x4252,\n  0xE69A9A: 0x4253,\n  0xE69A9B: 0x4254,\n  0xE69A9C: 0x4255,\n  0xE69A9F: 0x4256,\n  0xE69AA0: 0x4257,\n  0xE69AA4: 0x4258,\n  0xE69AAD: 0x4259,\n  0xE69AB1: 0x425A,\n  0xE69AB2: 0x425B,\n  0xE69AB5: 0x425C,\n  0xE69ABB: 0x425D,\n  0xE69ABF: 0x425E,\n  0xE69B80: 0x425F,\n  0xE69B82: 0x4260,\n  0xE69B83: 0x4261,\n  0xE69B88: 0x4262,\n  0xE69B8C: 0x4263,\n  0xE69B8E: 0x4264,\n  0xE69B8F: 0x4265,\n  0xE69B94: 0x4266,\n  0xE69B9B: 0x4267,\n  0xE69B9F: 0x4268,\n  0xE69BA8: 0x4269,\n  0xE69BAB: 0x426A,\n  0xE69BAC: 0x426B,\n  0xE69BAE: 0x426C,\n  0xE69BBA: 0x426D,\n  0xE69C85: 0x426E,\n  0xE69C87: 0x426F,\n  0xE69C8E: 0x4270,\n  0xE69C93: 0x4271,\n  0xE69C99: 0x4272,\n  0xE69C9C: 0x4273,\n  0xE69CA0: 0x4274,\n  0xE69CA2: 0x4275,\n  0xE69CB3: 0x4276,\n  0xE69CBE: 0x4277,\n  0xE69D85: 0x4278,\n  0xE69D87: 0x4279,\n  0xE69D88: 0x427A,\n  0xE69D8C: 0x427B,\n  0xE69D94: 0x427C,\n  0xE69D95: 0x427D,\n  0xE69D9D: 0x427E,\n  0xE69DA6: 0x4321,\n  0xE69DAC: 0x4322,\n  0xE69DAE: 0x4323,\n  0xE69DB4: 0x4324,\n  0xE69DB6: 0x4325,\n  0xE69DBB: 0x4326,\n  0xE69E81: 0x4327,\n  0xE69E84: 0x4328,\n  0xE69E8E: 0x4329,\n  0xE69E8F: 0x432A,\n  0xE69E91: 0x432B,\n  0xE69E93: 0x432C,\n  0xE69E96: 0x432D,\n  0xE69E98: 0x432E,\n  0xE69E99: 0x432F,\n  0xE69E9B: 0x4330,\n  0xE69EB0: 0x4331,\n  0xE69EB1: 0x4332,\n  0xE69EB2: 0x4333,\n  0xE69EB5: 0x4334,\n  0xE69EBB: 0x4335,\n  0xE69EBC: 0x4336,\n  0xE69EBD: 0x4337,\n  0xE69FB9: 0x4338,\n  0xE69F80: 0x4339,\n  0xE69F82: 0x433A,\n  0xE69F83: 0x433B,\n  0xE69F85: 0x433C,\n  0xE69F88: 0x433D,\n  0xE69F89: 0x433E,\n  0xE69F92: 0x433F,\n  0xE69F97: 0x4340,\n  0xE69F99: 0x4341,\n  0xE69F9C: 0x4342,\n  0xE69FA1: 0x4343,\n  0xE69FA6: 0x4344,\n  0xE69FB0: 0x4345,\n  0xE69FB2: 0x4346,\n  0xE69FB6: 0x4347,\n  0xE69FB7: 0x4348,\n  0xE6A192: 0x4349,\n  0xE6A094: 0x434A,\n  0xE6A099: 0x434B,\n  0xE6A09D: 0x434C,\n  0xE6A09F: 0x434D,\n  0xE6A0A8: 0x434E,\n  0xE6A0A7: 0x434F,\n  0xE6A0AC: 0x4350,\n  0xE6A0AD: 0x4351,\n  0xE6A0AF: 0x4352,\n  0xE6A0B0: 0x4353,\n  0xE6A0B1: 0x4354,\n  0xE6A0B3: 0x4355,\n  0xE6A0BB: 0x4356,\n  0xE6A0BF: 0x4357,\n  0xE6A184: 0x4358,\n  0xE6A185: 0x4359,\n  0xE6A18A: 0x435A,\n  0xE6A18C: 0x435B,\n  0xE6A195: 0x435C,\n  0xE6A197: 0x435D,\n  0xE6A198: 0x435E,\n  0xE6A19B: 0x435F,\n  0xE6A1AB: 0x4360,\n  0xE6A1AE: 0x4361,\n  0xE6A1AF: 0x4362,\n  0xE6A1B0: 0x4363,\n  0xE6A1B1: 0x4364,\n  0xE6A1B2: 0x4365,\n  0xE6A1B5: 0x4366,\n  0xE6A1B9: 0x4367,\n  0xE6A1BA: 0x4368,\n  0xE6A1BB: 0x4369,\n  0xE6A1BC: 0x436A,\n  0xE6A282: 0x436B,\n  0xE6A284: 0x436C,\n  0xE6A286: 0x436D,\n  0xE6A288: 0x436E,\n  0xE6A296: 0x436F,\n  0xE6A298: 0x4370,\n  0xE6A29A: 0x4371,\n  0xE6A29C: 0x4372,\n  0xE6A2A1: 0x4373,\n  0xE6A2A3: 0x4374,\n  0xE6A2A5: 0x4375,\n  0xE6A2A9: 0x4376,\n  0xE6A2AA: 0x4377,\n  0xE6A2AE: 0x4378,\n  0xE6A2B2: 0x4379,\n  0xE6A2BB: 0x437A,\n  0xE6A385: 0x437B,\n  0xE6A388: 0x437C,\n  0xE6A38C: 0x437D,\n  0xE6A38F: 0x437E,\n  0xE6A390: 0x4421,\n  0xE6A391: 0x4422,\n  0xE6A393: 0x4423,\n  0xE6A396: 0x4424,\n  0xE6A399: 0x4425,\n  0xE6A39C: 0x4426,\n  0xE6A39D: 0x4427,\n  0xE6A3A5: 0x4428,\n  0xE6A3A8: 0x4429,\n  0xE6A3AA: 0x442A,\n  0xE6A3AB: 0x442B,\n  0xE6A3AC: 0x442C,\n  0xE6A3AD: 0x442D,\n  0xE6A3B0: 0x442E,\n  0xE6A3B1: 0x442F,\n  0xE6A3B5: 0x4430,\n  0xE6A3B6: 0x4431,\n  0xE6A3BB: 0x4432,\n  0xE6A3BC: 0x4433,\n  0xE6A3BD: 0x4434,\n  0xE6A486: 0x4435,\n  0xE6A489: 0x4436,\n  0xE6A48A: 0x4437,\n  0xE6A490: 0x4438,\n  0xE6A491: 0x4439,\n  0xE6A493: 0x443A,\n  0xE6A496: 0x443B,\n  0xE6A497: 0x443C,\n  0xE6A4B1: 0x443D,\n  0xE6A4B3: 0x443E,\n  0xE6A4B5: 0x443F,\n  0xE6A4B8: 0x4440,\n  0xE6A4BB: 0x4441,\n  0xE6A582: 0x4442,\n  0xE6A585: 0x4443,\n  0xE6A589: 0x4444,\n  0xE6A58E: 0x4445,\n  0xE6A597: 0x4446,\n  0xE6A59B: 0x4447,\n  0xE6A5A3: 0x4448,\n  0xE6A5A4: 0x4449,\n  0xE6A5A5: 0x444A,\n  0xE6A5A6: 0x444B,\n  0xE6A5A8: 0x444C,\n  0xE6A5A9: 0x444D,\n  0xE6A5AC: 0x444E,\n  0xE6A5B0: 0x444F,\n  0xE6A5B1: 0x4450,\n  0xE6A5B2: 0x4451,\n  0xE6A5BA: 0x4452,\n  0xE6A5BB: 0x4453,\n  0xE6A5BF: 0x4454,\n  0xE6A680: 0x4455,\n  0xE6A68D: 0x4456,\n  0xE6A692: 0x4457,\n  0xE6A696: 0x4458,\n  0xE6A698: 0x4459,\n  0xE6A6A1: 0x445A,\n  0xE6A6A5: 0x445B,\n  0xE6A6A6: 0x445C,\n  0xE6A6A8: 0x445D,\n  0xE6A6AB: 0x445E,\n  0xE6A6AD: 0x445F,\n  0xE6A6AF: 0x4460,\n  0xE6A6B7: 0x4461,\n  0xE6A6B8: 0x4462,\n  0xE6A6BA: 0x4463,\n  0xE6A6BC: 0x4464,\n  0xE6A785: 0x4465,\n  0xE6A788: 0x4466,\n  0xE6A791: 0x4467,\n  0xE6A796: 0x4468,\n  0xE6A797: 0x4469,\n  0xE6A7A2: 0x446A,\n  0xE6A7A5: 0x446B,\n  0xE6A7AE: 0x446C,\n  0xE6A7AF: 0x446D,\n  0xE6A7B1: 0x446E,\n  0xE6A7B3: 0x446F,\n  0xE6A7B5: 0x4470,\n  0xE6A7BE: 0x4471,\n  0xE6A880: 0x4472,\n  0xE6A881: 0x4473,\n  0xE6A883: 0x4474,\n  0xE6A88F: 0x4475,\n  0xE6A891: 0x4476,\n  0xE6A895: 0x4477,\n  0xE6A89A: 0x4478,\n  0xE6A89D: 0x4479,\n  0xE6A8A0: 0x447A,\n  0xE6A8A4: 0x447B,\n  0xE6A8A8: 0x447C,\n  0xE6A8B0: 0x447D,\n  0xE6A8B2: 0x447E,\n  0xE6A8B4: 0x4521,\n  0xE6A8B7: 0x4522,\n  0xE6A8BB: 0x4523,\n  0xE6A8BE: 0x4524,\n  0xE6A8BF: 0x4525,\n  0xE6A985: 0x4526,\n  0xE6A986: 0x4527,\n  0xE6A989: 0x4528,\n  0xE6A98A: 0x4529,\n  0xE6A98E: 0x452A,\n  0xE6A990: 0x452B,\n  0xE6A991: 0x452C,\n  0xE6A992: 0x452D,\n  0xE6A995: 0x452E,\n  0xE6A996: 0x452F,\n  0xE6A99B: 0x4530,\n  0xE6A9A4: 0x4531,\n  0xE6A9A7: 0x4532,\n  0xE6A9AA: 0x4533,\n  0xE6A9B1: 0x4534,\n  0xE6A9B3: 0x4535,\n  0xE6A9BE: 0x4536,\n  0xE6AA81: 0x4537,\n  0xE6AA83: 0x4538,\n  0xE6AA86: 0x4539,\n  0xE6AA87: 0x453A,\n  0xE6AA89: 0x453B,\n  0xE6AA8B: 0x453C,\n  0xE6AA91: 0x453D,\n  0xE6AA9B: 0x453E,\n  0xE6AA9D: 0x453F,\n  0xE6AA9E: 0x4540,\n  0xE6AA9F: 0x4541,\n  0xE6AAA5: 0x4542,\n  0xE6AAAB: 0x4543,\n  0xE6AAAF: 0x4544,\n  0xE6AAB0: 0x4545,\n  0xE6AAB1: 0x4546,\n  0xE6AAB4: 0x4547,\n  0xE6AABD: 0x4548,\n  0xE6AABE: 0x4549,\n  0xE6AABF: 0x454A,\n  0xE6AB86: 0x454B,\n  0xE6AB89: 0x454C,\n  0xE6AB88: 0x454D,\n  0xE6AB8C: 0x454E,\n  0xE6AB90: 0x454F,\n  0xE6AB94: 0x4550,\n  0xE6AB95: 0x4551,\n  0xE6AB96: 0x4552,\n  0xE6AB9C: 0x4553,\n  0xE6AB9D: 0x4554,\n  0xE6ABA4: 0x4555,\n  0xE6ABA7: 0x4556,\n  0xE6ABAC: 0x4557,\n  0xE6ABB0: 0x4558,\n  0xE6ABB1: 0x4559,\n  0xE6ABB2: 0x455A,\n  0xE6ABBC: 0x455B,\n  0xE6ABBD: 0x455C,\n  0xE6AC82: 0x455D,\n  0xE6AC83: 0x455E,\n  0xE6AC86: 0x455F,\n  0xE6AC87: 0x4560,\n  0xE6AC89: 0x4561,\n  0xE6AC8F: 0x4562,\n  0xE6AC90: 0x4563,\n  0xE6AC91: 0x4564,\n  0xE6AC97: 0x4565,\n  0xE6AC9B: 0x4566,\n  0xE6AC9E: 0x4567,\n  0xE6ACA4: 0x4568,\n  0xE6ACA8: 0x4569,\n  0xE6ACAB: 0x456A,\n  0xE6ACAC: 0x456B,\n  0xE6ACAF: 0x456C,\n  0xE6ACB5: 0x456D,\n  0xE6ACB6: 0x456E,\n  0xE6ACBB: 0x456F,\n  0xE6ACBF: 0x4570,\n  0xE6AD86: 0x4571,\n  0xE6AD8A: 0x4572,\n  0xE6AD8D: 0x4573,\n  0xE6AD92: 0x4574,\n  0xE6AD96: 0x4575,\n  0xE6AD98: 0x4576,\n  0xE6AD9D: 0x4577,\n  0xE6ADA0: 0x4578,\n  0xE6ADA7: 0x4579,\n  0xE6ADAB: 0x457A,\n  0xE6ADAE: 0x457B,\n  0xE6ADB0: 0x457C,\n  0xE6ADB5: 0x457D,\n  0xE6ADBD: 0x457E,\n  0xE6ADBE: 0x4621,\n  0xE6AE82: 0x4622,\n  0xE6AE85: 0x4623,\n  0xE6AE97: 0x4624,\n  0xE6AE9B: 0x4625,\n  0xE6AE9F: 0x4626,\n  0xE6AEA0: 0x4627,\n  0xE6AEA2: 0x4628,\n  0xE6AEA3: 0x4629,\n  0xE6AEA8: 0x462A,\n  0xE6AEA9: 0x462B,\n  0xE6AEAC: 0x462C,\n  0xE6AEAD: 0x462D,\n  0xE6AEAE: 0x462E,\n  0xE6AEB0: 0x462F,\n  0xE6AEB8: 0x4630,\n  0xE6AEB9: 0x4631,\n  0xE6AEBD: 0x4632,\n  0xE6AEBE: 0x4633,\n  0xE6AF83: 0x4634,\n  0xE6AF84: 0x4635,\n  0xE6AF89: 0x4636,\n  0xE6AF8C: 0x4637,\n  0xE6AF96: 0x4638,\n  0xE6AF9A: 0x4639,\n  0xE6AFA1: 0x463A,\n  0xE6AFA3: 0x463B,\n  0xE6AFA6: 0x463C,\n  0xE6AFA7: 0x463D,\n  0xE6AFAE: 0x463E,\n  0xE6AFB1: 0x463F,\n  0xE6AFB7: 0x4640,\n  0xE6AFB9: 0x4641,\n  0xE6AFBF: 0x4642,\n  0xE6B082: 0x4643,\n  0xE6B084: 0x4644,\n  0xE6B085: 0x4645,\n  0xE6B089: 0x4646,\n  0xE6B08D: 0x4647,\n  0xE6B08E: 0x4648,\n  0xE6B090: 0x4649,\n  0xE6B092: 0x464A,\n  0xE6B099: 0x464B,\n  0xE6B09F: 0x464C,\n  0xE6B0A6: 0x464D,\n  0xE6B0A7: 0x464E,\n  0xE6B0A8: 0x464F,\n  0xE6B0AC: 0x4650,\n  0xE6B0AE: 0x4651,\n  0xE6B0B3: 0x4652,\n  0xE6B0B5: 0x4653,\n  0xE6B0B6: 0x4654,\n  0xE6B0BA: 0x4655,\n  0xE6B0BB: 0x4656,\n  0xE6B0BF: 0x4657,\n  0xE6B18A: 0x4658,\n  0xE6B18B: 0x4659,\n  0xE6B18D: 0x465A,\n  0xE6B18F: 0x465B,\n  0xE6B192: 0x465C,\n  0xE6B194: 0x465D,\n  0xE6B199: 0x465E,\n  0xE6B19B: 0x465F,\n  0xE6B19C: 0x4660,\n  0xE6B1AB: 0x4661,\n  0xE6B1AD: 0x4662,\n  0xE6B1AF: 0x4663,\n  0xE6B1B4: 0x4664,\n  0xE6B1B6: 0x4665,\n  0xE6B1B8: 0x4666,\n  0xE6B1B9: 0x4667,\n  0xE6B1BB: 0x4668,\n  0xE6B285: 0x4669,\n  0xE6B286: 0x466A,\n  0xE6B287: 0x466B,\n  0xE6B289: 0x466C,\n  0xE6B294: 0x466D,\n  0xE6B295: 0x466E,\n  0xE6B297: 0x466F,\n  0xE6B298: 0x4670,\n  0xE6B29C: 0x4671,\n  0xE6B29F: 0x4672,\n  0xE6B2B0: 0x4673,\n  0xE6B2B2: 0x4674,\n  0xE6B2B4: 0x4675,\n  0xE6B382: 0x4676,\n  0xE6B386: 0x4677,\n  0xE6B38D: 0x4678,\n  0xE6B38F: 0x4679,\n  0xE6B390: 0x467A,\n  0xE6B391: 0x467B,\n  0xE6B392: 0x467C,\n  0xE6B394: 0x467D,\n  0xE6B396: 0x467E,\n  0xE6B39A: 0x4721,\n  0xE6B39C: 0x4722,\n  0xE6B3A0: 0x4723,\n  0xE6B3A7: 0x4724,\n  0xE6B3A9: 0x4725,\n  0xE6B3AB: 0x4726,\n  0xE6B3AC: 0x4727,\n  0xE6B3AE: 0x4728,\n  0xE6B3B2: 0x4729,\n  0xE6B3B4: 0x472A,\n  0xE6B484: 0x472B,\n  0xE6B487: 0x472C,\n  0xE6B48A: 0x472D,\n  0xE6B48E: 0x472E,\n  0xE6B48F: 0x472F,\n  0xE6B491: 0x4730,\n  0xE6B493: 0x4731,\n  0xE6B49A: 0x4732,\n  0xE6B4A6: 0x4733,\n  0xE6B4A7: 0x4734,\n  0xE6B4A8: 0x4735,\n  0xE6B1A7: 0x4736,\n  0xE6B4AE: 0x4737,\n  0xE6B4AF: 0x4738,\n  0xE6B4B1: 0x4739,\n  0xE6B4B9: 0x473A,\n  0xE6B4BC: 0x473B,\n  0xE6B4BF: 0x473C,\n  0xE6B597: 0x473D,\n  0xE6B59E: 0x473E,\n  0xE6B59F: 0x473F,\n  0xE6B5A1: 0x4740,\n  0xE6B5A5: 0x4741,\n  0xE6B5A7: 0x4742,\n  0xE6B5AF: 0x4743,\n  0xE6B5B0: 0x4744,\n  0xE6B5BC: 0x4745,\n  0xE6B682: 0x4746,\n  0xE6B687: 0x4747,\n  0xE6B691: 0x4748,\n  0xE6B692: 0x4749,\n  0xE6B694: 0x474A,\n  0xE6B696: 0x474B,\n  0xE6B697: 0x474C,\n  0xE6B698: 0x474D,\n  0xE6B6AA: 0x474E,\n  0xE6B6AC: 0x474F,\n  0xE6B6B4: 0x4750,\n  0xE6B6B7: 0x4751,\n  0xE6B6B9: 0x4752,\n  0xE6B6BD: 0x4753,\n  0xE6B6BF: 0x4754,\n  0xE6B784: 0x4755,\n  0xE6B788: 0x4756,\n  0xE6B78A: 0x4757,\n  0xE6B78E: 0x4758,\n  0xE6B78F: 0x4759,\n  0xE6B796: 0x475A,\n  0xE6B79B: 0x475B,\n  0xE6B79D: 0x475C,\n  0xE6B79F: 0x475D,\n  0xE6B7A0: 0x475E,\n  0xE6B7A2: 0x475F,\n  0xE6B7A5: 0x4760,\n  0xE6B7A9: 0x4761,\n  0xE6B7AF: 0x4762,\n  0xE6B7B0: 0x4763,\n  0xE6B7B4: 0x4764,\n  0xE6B7B6: 0x4765,\n  0xE6B7BC: 0x4766,\n  0xE6B880: 0x4767,\n  0xE6B884: 0x4768,\n  0xE6B89E: 0x4769,\n  0xE6B8A2: 0x476A,\n  0xE6B8A7: 0x476B,\n  0xE6B8B2: 0x476C,\n  0xE6B8B6: 0x476D,\n  0xE6B8B9: 0x476E,\n  0xE6B8BB: 0x476F,\n  0xE6B8BC: 0x4770,\n  0xE6B984: 0x4771,\n  0xE6B985: 0x4772,\n  0xE6B988: 0x4773,\n  0xE6B989: 0x4774,\n  0xE6B98B: 0x4775,\n  0xE6B98F: 0x4776,\n  0xE6B991: 0x4777,\n  0xE6B992: 0x4778,\n  0xE6B993: 0x4779,\n  0xE6B994: 0x477A,\n  0xE6B997: 0x477B,\n  0xE6B99C: 0x477C,\n  0xE6B99D: 0x477D,\n  0xE6B99E: 0x477E,\n  0xE6B9A2: 0x4821,\n  0xE6B9A3: 0x4822,\n  0xE6B9A8: 0x4823,\n  0xE6B9B3: 0x4824,\n  0xE6B9BB: 0x4825,\n  0xE6B9BD: 0x4826,\n  0xE6BA8D: 0x4827,\n  0xE6BA93: 0x4828,\n  0xE6BA99: 0x4829,\n  0xE6BAA0: 0x482A,\n  0xE6BAA7: 0x482B,\n  0xE6BAAD: 0x482C,\n  0xE6BAAE: 0x482D,\n  0xE6BAB1: 0x482E,\n  0xE6BAB3: 0x482F,\n  0xE6BABB: 0x4830,\n  0xE6BABF: 0x4831,\n  0xE6BB80: 0x4832,\n  0xE6BB81: 0x4833,\n  0xE6BB83: 0x4834,\n  0xE6BB87: 0x4835,\n  0xE6BB88: 0x4836,\n  0xE6BB8A: 0x4837,\n  0xE6BB8D: 0x4838,\n  0xE6BB8E: 0x4839,\n  0xE6BB8F: 0x483A,\n  0xE6BBAB: 0x483B,\n  0xE6BBAD: 0x483C,\n  0xE6BBAE: 0x483D,\n  0xE6BBB9: 0x483E,\n  0xE6BBBB: 0x483F,\n  0xE6BBBD: 0x4840,\n  0xE6BC84: 0x4841,\n  0xE6BC88: 0x4842,\n  0xE6BC8A: 0x4843,\n  0xE6BC8C: 0x4844,\n  0xE6BC8D: 0x4845,\n  0xE6BC96: 0x4846,\n  0xE6BC98: 0x4847,\n  0xE6BC9A: 0x4848,\n  0xE6BC9B: 0x4849,\n  0xE6BCA6: 0x484A,\n  0xE6BCA9: 0x484B,\n  0xE6BCAA: 0x484C,\n  0xE6BCAF: 0x484D,\n  0xE6BCB0: 0x484E,\n  0xE6BCB3: 0x484F,\n  0xE6BCB6: 0x4850,\n  0xE6BCBB: 0x4851,\n  0xE6BCBC: 0x4852,\n  0xE6BCAD: 0x4853,\n  0xE6BD8F: 0x4854,\n  0xE6BD91: 0x4855,\n  0xE6BD92: 0x4856,\n  0xE6BD93: 0x4857,\n  0xE6BD97: 0x4858,\n  0xE6BD99: 0x4859,\n  0xE6BD9A: 0x485A,\n  0xE6BD9D: 0x485B,\n  0xE6BD9E: 0x485C,\n  0xE6BDA1: 0x485D,\n  0xE6BDA2: 0x485E,\n  0xE6BDA8: 0x485F,\n  0xE6BDAC: 0x4860,\n  0xE6BDBD: 0x4861,\n  0xE6BDBE: 0x4862,\n  0xE6BE83: 0x4863,\n  0xE6BE87: 0x4864,\n  0xE6BE88: 0x4865,\n  0xE6BE8B: 0x4866,\n  0xE6BE8C: 0x4867,\n  0xE6BE8D: 0x4868,\n  0xE6BE90: 0x4869,\n  0xE6BE92: 0x486A,\n  0xE6BE93: 0x486B,\n  0xE6BE94: 0x486C,\n  0xE6BE96: 0x486D,\n  0xE6BE9A: 0x486E,\n  0xE6BE9F: 0x486F,\n  0xE6BEA0: 0x4870,\n  0xE6BEA5: 0x4871,\n  0xE6BEA6: 0x4872,\n  0xE6BEA7: 0x4873,\n  0xE6BEA8: 0x4874,\n  0xE6BEAE: 0x4875,\n  0xE6BEAF: 0x4876,\n  0xE6BEB0: 0x4877,\n  0xE6BEB5: 0x4878,\n  0xE6BEB6: 0x4879,\n  0xE6BEBC: 0x487A,\n  0xE6BF85: 0x487B,\n  0xE6BF87: 0x487C,\n  0xE6BF88: 0x487D,\n  0xE6BF8A: 0x487E,\n  0xE6BF9A: 0x4921,\n  0xE6BF9E: 0x4922,\n  0xE6BFA8: 0x4923,\n  0xE6BFA9: 0x4924,\n  0xE6BFB0: 0x4925,\n  0xE6BFB5: 0x4926,\n  0xE6BFB9: 0x4927,\n  0xE6BFBC: 0x4928,\n  0xE6BFBD: 0x4929,\n  0xE78080: 0x492A,\n  0xE78085: 0x492B,\n  0xE78086: 0x492C,\n  0xE78087: 0x492D,\n  0xE7808D: 0x492E,\n  0xE78097: 0x492F,\n  0xE780A0: 0x4930,\n  0xE780A3: 0x4931,\n  0xE780AF: 0x4932,\n  0xE780B4: 0x4933,\n  0xE780B7: 0x4934,\n  0xE780B9: 0x4935,\n  0xE780BC: 0x4936,\n  0xE78183: 0x4937,\n  0xE78184: 0x4938,\n  0xE78188: 0x4939,\n  0xE78189: 0x493A,\n  0xE7818A: 0x493B,\n  0xE7818B: 0x493C,\n  0xE78194: 0x493D,\n  0xE78195: 0x493E,\n  0xE7819D: 0x493F,\n  0xE7819E: 0x4940,\n  0xE7818E: 0x4941,\n  0xE781A4: 0x4942,\n  0xE781A5: 0x4943,\n  0xE781AC: 0x4944,\n  0xE781AE: 0x4945,\n  0xE781B5: 0x4946,\n  0xE781B6: 0x4947,\n  0xE781BE: 0x4948,\n  0xE78281: 0x4949,\n  0xE78285: 0x494A,\n  0xE78286: 0x494B,\n  0xE78294: 0x494C,\n  0xE78295: 0x494D,\n  0xE78296: 0x494E,\n  0xE78297: 0x494F,\n  0xE78298: 0x4950,\n  0xE7829B: 0x4951,\n  0xE782A4: 0x4952,\n  0xE782AB: 0x4953,\n  0xE782B0: 0x4954,\n  0xE782B1: 0x4955,\n  0xE782B4: 0x4956,\n  0xE782B7: 0x4957,\n  0xE7838A: 0x4958,\n  0xE78391: 0x4959,\n  0xE78393: 0x495A,\n  0xE78394: 0x495B,\n  0xE78395: 0x495C,\n  0xE78396: 0x495D,\n  0xE78398: 0x495E,\n  0xE7839C: 0x495F,\n  0xE783A4: 0x4960,\n  0xE783BA: 0x4961,\n  0xE78483: 0x4962,\n  0xE78484: 0x4963,\n  0xE78485: 0x4964,\n  0xE78486: 0x4965,\n  0xE78487: 0x4966,\n  0xE7848B: 0x4967,\n  0xE7848C: 0x4968,\n  0xE7848F: 0x4969,\n  0xE7849E: 0x496A,\n  0xE784A0: 0x496B,\n  0xE784AB: 0x496C,\n  0xE784AD: 0x496D,\n  0xE784AF: 0x496E,\n  0xE784B0: 0x496F,\n  0xE784B1: 0x4970,\n  0xE784B8: 0x4971,\n  0xE78581: 0x4972,\n  0xE78585: 0x4973,\n  0xE78586: 0x4974,\n  0xE78587: 0x4975,\n  0xE7858A: 0x4976,\n  0xE7858B: 0x4977,\n  0xE78590: 0x4978,\n  0xE78592: 0x4979,\n  0xE78597: 0x497A,\n  0xE7859A: 0x497B,\n  0xE7859C: 0x497C,\n  0xE7859E: 0x497D,\n  0xE785A0: 0x497E,\n  0xE785A8: 0x4A21,\n  0xE785B9: 0x4A22,\n  0xE78680: 0x4A23,\n  0xE78685: 0x4A24,\n  0xE78687: 0x4A25,\n  0xE7868C: 0x4A26,\n  0xE78692: 0x4A27,\n  0xE7869A: 0x4A28,\n  0xE7869B: 0x4A29,\n  0xE786A0: 0x4A2A,\n  0xE786A2: 0x4A2B,\n  0xE786AF: 0x4A2C,\n  0xE786B0: 0x4A2D,\n  0xE786B2: 0x4A2E,\n  0xE786B3: 0x4A2F,\n  0xE786BA: 0x4A30,\n  0xE786BF: 0x4A31,\n  0xE78780: 0x4A32,\n  0xE78781: 0x4A33,\n  0xE78784: 0x4A34,\n  0xE7878B: 0x4A35,\n  0xE7878C: 0x4A36,\n  0xE78793: 0x4A37,\n  0xE78796: 0x4A38,\n  0xE78799: 0x4A39,\n  0xE7879A: 0x4A3A,\n  0xE7879C: 0x4A3B,\n  0xE787B8: 0x4A3C,\n  0xE787BE: 0x4A3D,\n  0xE78880: 0x4A3E,\n  0xE78887: 0x4A3F,\n  0xE78888: 0x4A40,\n  0xE78889: 0x4A41,\n  0xE78893: 0x4A42,\n  0xE78897: 0x4A43,\n  0xE7889A: 0x4A44,\n  0xE7889D: 0x4A45,\n  0xE7889F: 0x4A46,\n  0xE788A4: 0x4A47,\n  0xE788AB: 0x4A48,\n  0xE788AF: 0x4A49,\n  0xE788B4: 0x4A4A,\n  0xE788B8: 0x4A4B,\n  0xE788B9: 0x4A4C,\n  0xE78981: 0x4A4D,\n  0xE78982: 0x4A4E,\n  0xE78983: 0x4A4F,\n  0xE78985: 0x4A50,\n  0xE7898E: 0x4A51,\n  0xE7898F: 0x4A52,\n  0xE78990: 0x4A53,\n  0xE78993: 0x4A54,\n  0xE78995: 0x4A55,\n  0xE78996: 0x4A56,\n  0xE7899A: 0x4A57,\n  0xE7899C: 0x4A58,\n  0xE7899E: 0x4A59,\n  0xE789A0: 0x4A5A,\n  0xE789A3: 0x4A5B,\n  0xE789A8: 0x4A5C,\n  0xE789AB: 0x4A5D,\n  0xE789AE: 0x4A5E,\n  0xE789AF: 0x4A5F,\n  0xE789B1: 0x4A60,\n  0xE789B7: 0x4A61,\n  0xE789B8: 0x4A62,\n  0xE789BB: 0x4A63,\n  0xE789BC: 0x4A64,\n  0xE789BF: 0x4A65,\n  0xE78A84: 0x4A66,\n  0xE78A89: 0x4A67,\n  0xE78A8D: 0x4A68,\n  0xE78A8E: 0x4A69,\n  0xE78A93: 0x4A6A,\n  0xE78A9B: 0x4A6B,\n  0xE78AA8: 0x4A6C,\n  0xE78AAD: 0x4A6D,\n  0xE78AAE: 0x4A6E,\n  0xE78AB1: 0x4A6F,\n  0xE78AB4: 0x4A70,\n  0xE78ABE: 0x4A71,\n  0xE78B81: 0x4A72,\n  0xE78B87: 0x4A73,\n  0xE78B89: 0x4A74,\n  0xE78B8C: 0x4A75,\n  0xE78B95: 0x4A76,\n  0xE78B96: 0x4A77,\n  0xE78B98: 0x4A78,\n  0xE78B9F: 0x4A79,\n  0xE78BA5: 0x4A7A,\n  0xE78BB3: 0x4A7B,\n  0xE78BB4: 0x4A7C,\n  0xE78BBA: 0x4A7D,\n  0xE78BBB: 0x4A7E,\n  0xE78BBE: 0x4B21,\n  0xE78C82: 0x4B22,\n  0xE78C84: 0x4B23,\n  0xE78C85: 0x4B24,\n  0xE78C87: 0x4B25,\n  0xE78C8B: 0x4B26,\n  0xE78C8D: 0x4B27,\n  0xE78C92: 0x4B28,\n  0xE78C93: 0x4B29,\n  0xE78C98: 0x4B2A,\n  0xE78C99: 0x4B2B,\n  0xE78C9E: 0x4B2C,\n  0xE78CA2: 0x4B2D,\n  0xE78CA4: 0x4B2E,\n  0xE78CA7: 0x4B2F,\n  0xE78CA8: 0x4B30,\n  0xE78CAC: 0x4B31,\n  0xE78CB1: 0x4B32,\n  0xE78CB2: 0x4B33,\n  0xE78CB5: 0x4B34,\n  0xE78CBA: 0x4B35,\n  0xE78CBB: 0x4B36,\n  0xE78CBD: 0x4B37,\n  0xE78D83: 0x4B38,\n  0xE78D8D: 0x4B39,\n  0xE78D90: 0x4B3A,\n  0xE78D92: 0x4B3B,\n  0xE78D96: 0x4B3C,\n  0xE78D98: 0x4B3D,\n  0xE78D9D: 0x4B3E,\n  0xE78D9E: 0x4B3F,\n  0xE78D9F: 0x4B40,\n  0xE78DA0: 0x4B41,\n  0xE78DA6: 0x4B42,\n  0xE78DA7: 0x4B43,\n  0xE78DA9: 0x4B44,\n  0xE78DAB: 0x4B45,\n  0xE78DAC: 0x4B46,\n  0xE78DAE: 0x4B47,\n  0xE78DAF: 0x4B48,\n  0xE78DB1: 0x4B49,\n  0xE78DB7: 0x4B4A,\n  0xE78DB9: 0x4B4B,\n  0xE78DBC: 0x4B4C,\n  0xE78E80: 0x4B4D,\n  0xE78E81: 0x4B4E,\n  0xE78E83: 0x4B4F,\n  0xE78E85: 0x4B50,\n  0xE78E86: 0x4B51,\n  0xE78E8E: 0x4B52,\n  0xE78E90: 0x4B53,\n  0xE78E93: 0x4B54,\n  0xE78E95: 0x4B55,\n  0xE78E97: 0x4B56,\n  0xE78E98: 0x4B57,\n  0xE78E9C: 0x4B58,\n  0xE78E9E: 0x4B59,\n  0xE78E9F: 0x4B5A,\n  0xE78EA0: 0x4B5B,\n  0xE78EA2: 0x4B5C,\n  0xE78EA5: 0x4B5D,\n  0xE78EA6: 0x4B5E,\n  0xE78EAA: 0x4B5F,\n  0xE78EAB: 0x4B60,\n  0xE78EAD: 0x4B61,\n  0xE78EB5: 0x4B62,\n  0xE78EB7: 0x4B63,\n  0xE78EB9: 0x4B64,\n  0xE78EBC: 0x4B65,\n  0xE78EBD: 0x4B66,\n  0xE78EBF: 0x4B67,\n  0xE78F85: 0x4B68,\n  0xE78F86: 0x4B69,\n  0xE78F89: 0x4B6A,\n  0xE78F8B: 0x4B6B,\n  0xE78F8C: 0x4B6C,\n  0xE78F8F: 0x4B6D,\n  0xE78F92: 0x4B6E,\n  0xE78F93: 0x4B6F,\n  0xE78F96: 0x4B70,\n  0xE78F99: 0x4B71,\n  0xE78F9D: 0x4B72,\n  0xE78FA1: 0x4B73,\n  0xE78FA3: 0x4B74,\n  0xE78FA6: 0x4B75,\n  0xE78FA7: 0x4B76,\n  0xE78FA9: 0x4B77,\n  0xE78FB4: 0x4B78,\n  0xE78FB5: 0x4B79,\n  0xE78FB7: 0x4B7A,\n  0xE78FB9: 0x4B7B,\n  0xE78FBA: 0x4B7C,\n  0xE78FBB: 0x4B7D,\n  0xE78FBD: 0x4B7E,\n  0xE78FBF: 0x4C21,\n  0xE79080: 0x4C22,\n  0xE79081: 0x4C23,\n  0xE79084: 0x4C24,\n  0xE79087: 0x4C25,\n  0xE7908A: 0x4C26,\n  0xE79091: 0x4C27,\n  0xE7909A: 0x4C28,\n  0xE7909B: 0x4C29,\n  0xE790A4: 0x4C2A,\n  0xE790A6: 0x4C2B,\n  0xE790A8: 0x4C2C,\n  0xE790A9: 0x4C2D,\n  0xE790AA: 0x4C2E,\n  0xE790AB: 0x4C2F,\n  0xE790AC: 0x4C30,\n  0xE790AD: 0x4C31,\n  0xE790AE: 0x4C32,\n  0xE790AF: 0x4C33,\n  0xE790B0: 0x4C34,\n  0xE790B1: 0x4C35,\n  0xE790B9: 0x4C36,\n  0xE79180: 0x4C37,\n  0xE79183: 0x4C38,\n  0xE79184: 0x4C39,\n  0xE79186: 0x4C3A,\n  0xE79187: 0x4C3B,\n  0xE7918B: 0x4C3C,\n  0xE7918D: 0x4C3D,\n  0xE79191: 0x4C3E,\n  0xE79192: 0x4C3F,\n  0xE79197: 0x4C40,\n  0xE7919D: 0x4C41,\n  0xE791A2: 0x4C42,\n  0xE791A6: 0x4C43,\n  0xE791A7: 0x4C44,\n  0xE791A8: 0x4C45,\n  0xE791AB: 0x4C46,\n  0xE791AD: 0x4C47,\n  0xE791AE: 0x4C48,\n  0xE791B1: 0x4C49,\n  0xE791B2: 0x4C4A,\n  0xE79280: 0x4C4B,\n  0xE79281: 0x4C4C,\n  0xE79285: 0x4C4D,\n  0xE79286: 0x4C4E,\n  0xE79287: 0x4C4F,\n  0xE79289: 0x4C50,\n  0xE7928F: 0x4C51,\n  0xE79290: 0x4C52,\n  0xE79291: 0x4C53,\n  0xE79292: 0x4C54,\n  0xE79298: 0x4C55,\n  0xE79299: 0x4C56,\n  0xE7929A: 0x4C57,\n  0xE7929C: 0x4C58,\n  0xE7929F: 0x4C59,\n  0xE792A0: 0x4C5A,\n  0xE792A1: 0x4C5B,\n  0xE792A3: 0x4C5C,\n  0xE792A6: 0x4C5D,\n  0xE792A8: 0x4C5E,\n  0xE792A9: 0x4C5F,\n  0xE792AA: 0x4C60,\n  0xE792AB: 0x4C61,\n  0xE792AE: 0x4C62,\n  0xE792AF: 0x4C63,\n  0xE792B1: 0x4C64,\n  0xE792B2: 0x4C65,\n  0xE792B5: 0x4C66,\n  0xE792B9: 0x4C67,\n  0xE792BB: 0x4C68,\n  0xE792BF: 0x4C69,\n  0xE79388: 0x4C6A,\n  0xE79389: 0x4C6B,\n  0xE7938C: 0x4C6C,\n  0xE79390: 0x4C6D,\n  0xE79393: 0x4C6E,\n  0xE79398: 0x4C6F,\n  0xE7939A: 0x4C70,\n  0xE7939B: 0x4C71,\n  0xE7939E: 0x4C72,\n  0xE7939F: 0x4C73,\n  0xE793A4: 0x4C74,\n  0xE793A8: 0x4C75,\n  0xE793AA: 0x4C76,\n  0xE793AB: 0x4C77,\n  0xE793AF: 0x4C78,\n  0xE793B4: 0x4C79,\n  0xE793BA: 0x4C7A,\n  0xE793BB: 0x4C7B,\n  0xE793BC: 0x4C7C,\n  0xE793BF: 0x4C7D,\n  0xE79486: 0x4C7E,\n  0xE79492: 0x4D21,\n  0xE79496: 0x4D22,\n  0xE79497: 0x4D23,\n  0xE794A0: 0x4D24,\n  0xE794A1: 0x4D25,\n  0xE794A4: 0x4D26,\n  0xE794A7: 0x4D27,\n  0xE794A9: 0x4D28,\n  0xE794AA: 0x4D29,\n  0xE794AF: 0x4D2A,\n  0xE794B6: 0x4D2B,\n  0xE794B9: 0x4D2C,\n  0xE794BD: 0x4D2D,\n  0xE794BE: 0x4D2E,\n  0xE794BF: 0x4D2F,\n  0xE79580: 0x4D30,\n  0xE79583: 0x4D31,\n  0xE79587: 0x4D32,\n  0xE79588: 0x4D33,\n  0xE7958E: 0x4D34,\n  0xE79590: 0x4D35,\n  0xE79592: 0x4D36,\n  0xE79597: 0x4D37,\n  0xE7959E: 0x4D38,\n  0xE7959F: 0x4D39,\n  0xE795A1: 0x4D3A,\n  0xE795AF: 0x4D3B,\n  0xE795B1: 0x4D3C,\n  0xE795B9: 0x4D3D,\n  0xE795BA: 0x4D3E,\n  0xE795BB: 0x4D3F,\n  0xE795BC: 0x4D40,\n  0xE795BD: 0x4D41,\n  0xE795BE: 0x4D42,\n  0xE79681: 0x4D43,\n  0xE79685: 0x4D44,\n  0xE79690: 0x4D45,\n  0xE79692: 0x4D46,\n  0xE79693: 0x4D47,\n  0xE79695: 0x4D48,\n  0xE79699: 0x4D49,\n  0xE7969C: 0x4D4A,\n  0xE796A2: 0x4D4B,\n  0xE796A4: 0x4D4C,\n  0xE796B4: 0x4D4D,\n  0xE796BA: 0x4D4E,\n  0xE796BF: 0x4D4F,\n  0xE79780: 0x4D50,\n  0xE79781: 0x4D51,\n  0xE79784: 0x4D52,\n  0xE79786: 0x4D53,\n  0xE7978C: 0x4D54,\n  0xE7978E: 0x4D55,\n  0xE7978F: 0x4D56,\n  0xE79797: 0x4D57,\n  0xE7979C: 0x4D58,\n  0xE7979F: 0x4D59,\n  0xE797A0: 0x4D5A,\n  0xE797A1: 0x4D5B,\n  0xE797A4: 0x4D5C,\n  0xE797A7: 0x4D5D,\n  0xE797AC: 0x4D5E,\n  0xE797AE: 0x4D5F,\n  0xE797AF: 0x4D60,\n  0xE797B1: 0x4D61,\n  0xE797B9: 0x4D62,\n  0xE79880: 0x4D63,\n  0xE79882: 0x4D64,\n  0xE79883: 0x4D65,\n  0xE79884: 0x4D66,\n  0xE79887: 0x4D67,\n  0xE79888: 0x4D68,\n  0xE7988A: 0x4D69,\n  0xE7988C: 0x4D6A,\n  0xE7988F: 0x4D6B,\n  0xE79892: 0x4D6C,\n  0xE79893: 0x4D6D,\n  0xE79895: 0x4D6E,\n  0xE79896: 0x4D6F,\n  0xE79899: 0x4D70,\n  0xE7989B: 0x4D71,\n  0xE7989C: 0x4D72,\n  0xE7989D: 0x4D73,\n  0xE7989E: 0x4D74,\n  0xE798A3: 0x4D75,\n  0xE798A5: 0x4D76,\n  0xE798A6: 0x4D77,\n  0xE798A9: 0x4D78,\n  0xE798AD: 0x4D79,\n  0xE798B2: 0x4D7A,\n  0xE798B3: 0x4D7B,\n  0xE798B5: 0x4D7C,\n  0xE798B8: 0x4D7D,\n  0xE798B9: 0x4D7E,\n  0xE798BA: 0x4E21,\n  0xE798BC: 0x4E22,\n  0xE7998A: 0x4E23,\n  0xE79980: 0x4E24,\n  0xE79981: 0x4E25,\n  0xE79983: 0x4E26,\n  0xE79984: 0x4E27,\n  0xE79985: 0x4E28,\n  0xE79989: 0x4E29,\n  0xE7998B: 0x4E2A,\n  0xE79995: 0x4E2B,\n  0xE79999: 0x4E2C,\n  0xE7999F: 0x4E2D,\n  0xE799A4: 0x4E2E,\n  0xE799A5: 0x4E2F,\n  0xE799AD: 0x4E30,\n  0xE799AE: 0x4E31,\n  0xE799AF: 0x4E32,\n  0xE799B1: 0x4E33,\n  0xE799B4: 0x4E34,\n  0xE79A81: 0x4E35,\n  0xE79A85: 0x4E36,\n  0xE79A8C: 0x4E37,\n  0xE79A8D: 0x4E38,\n  0xE79A95: 0x4E39,\n  0xE79A9B: 0x4E3A,\n  0xE79A9C: 0x4E3B,\n  0xE79A9D: 0x4E3C,\n  0xE79A9F: 0x4E3D,\n  0xE79AA0: 0x4E3E,\n  0xE79AA2: 0x4E3F,\n  0xE79AA3: 0x4E40,\n  0xE79AA4: 0x4E41,\n  0xE79AA5: 0x4E42,\n  0xE79AA6: 0x4E43,\n  0xE79AA7: 0x4E44,\n  0xE79AA8: 0x4E45,\n  0xE79AAA: 0x4E46,\n  0xE79AAD: 0x4E47,\n  0xE79ABD: 0x4E48,\n  0xE79B81: 0x4E49,\n  0xE79B85: 0x4E4A,\n  0xE79B89: 0x4E4B,\n  0xE79B8B: 0x4E4C,\n  0xE79B8C: 0x4E4D,\n  0xE79B8E: 0x4E4E,\n  0xE79B94: 0x4E4F,\n  0xE79B99: 0x4E50,\n  0xE79BA0: 0x4E51,\n  0xE79BA6: 0x4E52,\n  0xE79BA8: 0x4E53,\n  0xE79BAC: 0x4E54,\n  0xE79BB0: 0x4E55,\n  0xE79BB1: 0x4E56,\n  0xE79BB6: 0x4E57,\n  0xE79BB9: 0x4E58,\n  0xE79BBC: 0x4E59,\n  0xE79C80: 0x4E5A,\n  0xE79C86: 0x4E5B,\n  0xE79C8A: 0x4E5C,\n  0xE79C8E: 0x4E5D,\n  0xE79C92: 0x4E5E,\n  0xE79C94: 0x4E5F,\n  0xE79C95: 0x4E60,\n  0xE79C97: 0x4E61,\n  0xE79C99: 0x4E62,\n  0xE79C9A: 0x4E63,\n  0xE79C9C: 0x4E64,\n  0xE79CA2: 0x4E65,\n  0xE79CA8: 0x4E66,\n  0xE79CAD: 0x4E67,\n  0xE79CAE: 0x4E68,\n  0xE79CAF: 0x4E69,\n  0xE79CB4: 0x4E6A,\n  0xE79CB5: 0x4E6B,\n  0xE79CB6: 0x4E6C,\n  0xE79CB9: 0x4E6D,\n  0xE79CBD: 0x4E6E,\n  0xE79CBE: 0x4E6F,\n  0xE79D82: 0x4E70,\n  0xE79D85: 0x4E71,\n  0xE79D86: 0x4E72,\n  0xE79D8A: 0x4E73,\n  0xE79D8D: 0x4E74,\n  0xE79D8E: 0x4E75,\n  0xE79D8F: 0x4E76,\n  0xE79D92: 0x4E77,\n  0xE79D96: 0x4E78,\n  0xE79D97: 0x4E79,\n  0xE79D9C: 0x4E7A,\n  0xE79D9E: 0x4E7B,\n  0xE79D9F: 0x4E7C,\n  0xE79DA0: 0x4E7D,\n  0xE79DA2: 0x4E7E,\n  0xE79DA4: 0x4F21,\n  0xE79DA7: 0x4F22,\n  0xE79DAA: 0x4F23,\n  0xE79DAC: 0x4F24,\n  0xE79DB0: 0x4F25,\n  0xE79DB2: 0x4F26,\n  0xE79DB3: 0x4F27,\n  0xE79DB4: 0x4F28,\n  0xE79DBA: 0x4F29,\n  0xE79DBD: 0x4F2A,\n  0xE79E80: 0x4F2B,\n  0xE79E84: 0x4F2C,\n  0xE79E8C: 0x4F2D,\n  0xE79E8D: 0x4F2E,\n  0xE79E94: 0x4F2F,\n  0xE79E95: 0x4F30,\n  0xE79E96: 0x4F31,\n  0xE79E9A: 0x4F32,\n  0xE79E9F: 0x4F33,\n  0xE79EA2: 0x4F34,\n  0xE79EA7: 0x4F35,\n  0xE79EAA: 0x4F36,\n  0xE79EAE: 0x4F37,\n  0xE79EAF: 0x4F38,\n  0xE79EB1: 0x4F39,\n  0xE79EB5: 0x4F3A,\n  0xE79EBE: 0x4F3B,\n  0xE79F83: 0x4F3C,\n  0xE79F89: 0x4F3D,\n  0xE79F91: 0x4F3E,\n  0xE79F92: 0x4F3F,\n  0xE79F95: 0x4F40,\n  0xE79F99: 0x4F41,\n  0xE79F9E: 0x4F42,\n  0xE79F9F: 0x4F43,\n  0xE79FA0: 0x4F44,\n  0xE79FA4: 0x4F45,\n  0xE79FA6: 0x4F46,\n  0xE79FAA: 0x4F47,\n  0xE79FAC: 0x4F48,\n  0xE79FB0: 0x4F49,\n  0xE79FB1: 0x4F4A,\n  0xE79FB4: 0x4F4B,\n  0xE79FB8: 0x4F4C,\n  0xE79FBB: 0x4F4D,\n  0xE7A085: 0x4F4E,\n  0xE7A086: 0x4F4F,\n  0xE7A089: 0x4F50,\n  0xE7A08D: 0x4F51,\n  0xE7A08E: 0x4F52,\n  0xE7A091: 0x4F53,\n  0xE7A09D: 0x4F54,\n  0xE7A0A1: 0x4F55,\n  0xE7A0A2: 0x4F56,\n  0xE7A0A3: 0x4F57,\n  0xE7A0AD: 0x4F58,\n  0xE7A0AE: 0x4F59,\n  0xE7A0B0: 0x4F5A,\n  0xE7A0B5: 0x4F5B,\n  0xE7A0B7: 0x4F5C,\n  0xE7A183: 0x4F5D,\n  0xE7A184: 0x4F5E,\n  0xE7A187: 0x4F5F,\n  0xE7A188: 0x4F60,\n  0xE7A18C: 0x4F61,\n  0xE7A18E: 0x4F62,\n  0xE7A192: 0x4F63,\n  0xE7A19C: 0x4F64,\n  0xE7A19E: 0x4F65,\n  0xE7A1A0: 0x4F66,\n  0xE7A1A1: 0x4F67,\n  0xE7A1A3: 0x4F68,\n  0xE7A1A4: 0x4F69,\n  0xE7A1A8: 0x4F6A,\n  0xE7A1AA: 0x4F6B,\n  0xE7A1AE: 0x4F6C,\n  0xE7A1BA: 0x4F6D,\n  0xE7A1BE: 0x4F6E,\n  0xE7A28A: 0x4F6F,\n  0xE7A28F: 0x4F70,\n  0xE7A294: 0x4F71,\n  0xE7A298: 0x4F72,\n  0xE7A2A1: 0x4F73,\n  0xE7A29D: 0x4F74,\n  0xE7A29E: 0x4F75,\n  0xE7A29F: 0x4F76,\n  0xE7A2A4: 0x4F77,\n  0xE7A2A8: 0x4F78,\n  0xE7A2AC: 0x4F79,\n  0xE7A2AD: 0x4F7A,\n  0xE7A2B0: 0x4F7B,\n  0xE7A2B1: 0x4F7C,\n  0xE7A2B2: 0x4F7D,\n  0xE7A2B3: 0x4F7E,\n  0xE7A2BB: 0x5021,\n  0xE7A2BD: 0x5022,\n  0xE7A2BF: 0x5023,\n  0xE7A387: 0x5024,\n  0xE7A388: 0x5025,\n  0xE7A389: 0x5026,\n  0xE7A38C: 0x5027,\n  0xE7A38E: 0x5028,\n  0xE7A392: 0x5029,\n  0xE7A393: 0x502A,\n  0xE7A395: 0x502B,\n  0xE7A396: 0x502C,\n  0xE7A3A4: 0x502D,\n  0xE7A39B: 0x502E,\n  0xE7A39F: 0x502F,\n  0xE7A3A0: 0x5030,\n  0xE7A3A1: 0x5031,\n  0xE7A3A6: 0x5032,\n  0xE7A3AA: 0x5033,\n  0xE7A3B2: 0x5034,\n  0xE7A3B3: 0x5035,\n  0xE7A480: 0x5036,\n  0xE7A3B6: 0x5037,\n  0xE7A3B7: 0x5038,\n  0xE7A3BA: 0x5039,\n  0xE7A3BB: 0x503A,\n  0xE7A3BF: 0x503B,\n  0xE7A486: 0x503C,\n  0xE7A48C: 0x503D,\n  0xE7A490: 0x503E,\n  0xE7A49A: 0x503F,\n  0xE7A49C: 0x5040,\n  0xE7A49E: 0x5041,\n  0xE7A49F: 0x5042,\n  0xE7A4A0: 0x5043,\n  0xE7A4A5: 0x5044,\n  0xE7A4A7: 0x5045,\n  0xE7A4A9: 0x5046,\n  0xE7A4AD: 0x5047,\n  0xE7A4B1: 0x5048,\n  0xE7A4B4: 0x5049,\n  0xE7A4B5: 0x504A,\n  0xE7A4BB: 0x504B,\n  0xE7A4BD: 0x504C,\n  0xE7A4BF: 0x504D,\n  0xE7A584: 0x504E,\n  0xE7A585: 0x504F,\n  0xE7A586: 0x5050,\n  0xE7A58A: 0x5051,\n  0xE7A58B: 0x5052,\n  0xE7A58F: 0x5053,\n  0xE7A591: 0x5054,\n  0xE7A594: 0x5055,\n  0xE7A598: 0x5056,\n  0xE7A59B: 0x5057,\n  0xE7A59C: 0x5058,\n  0xE7A5A7: 0x5059,\n  0xE7A5A9: 0x505A,\n  0xE7A5AB: 0x505B,\n  0xE7A5B2: 0x505C,\n  0xE7A5B9: 0x505D,\n  0xE7A5BB: 0x505E,\n  0xE7A5BC: 0x505F,\n  0xE7A5BE: 0x5060,\n  0xE7A68B: 0x5061,\n  0xE7A68C: 0x5062,\n  0xE7A691: 0x5063,\n  0xE7A693: 0x5064,\n  0xE7A694: 0x5065,\n  0xE7A695: 0x5066,\n  0xE7A696: 0x5067,\n  0xE7A698: 0x5068,\n  0xE7A69B: 0x5069,\n  0xE7A69C: 0x506A,\n  0xE7A6A1: 0x506B,\n  0xE7A6A8: 0x506C,\n  0xE7A6A9: 0x506D,\n  0xE7A6AB: 0x506E,\n  0xE7A6AF: 0x506F,\n  0xE7A6B1: 0x5070,\n  0xE7A6B4: 0x5071,\n  0xE7A6B8: 0x5072,\n  0xE7A6BB: 0x5073,\n  0xE7A782: 0x5074,\n  0xE7A784: 0x5075,\n  0xE7A787: 0x5076,\n  0xE7A788: 0x5077,\n  0xE7A78A: 0x5078,\n  0xE7A78F: 0x5079,\n  0xE7A794: 0x507A,\n  0xE7A796: 0x507B,\n  0xE7A79A: 0x507C,\n  0xE7A79D: 0x507D,\n  0xE7A79E: 0x507E,\n  0xE7A7A0: 0x5121,\n  0xE7A7A2: 0x5122,\n  0xE7A7A5: 0x5123,\n  0xE7A7AA: 0x5124,\n  0xE7A7AB: 0x5125,\n  0xE7A7AD: 0x5126,\n  0xE7A7B1: 0x5127,\n  0xE7A7B8: 0x5128,\n  0xE7A7BC: 0x5129,\n  0xE7A882: 0x512A,\n  0xE7A883: 0x512B,\n  0xE7A887: 0x512C,\n  0xE7A889: 0x512D,\n  0xE7A88A: 0x512E,\n  0xE7A88C: 0x512F,\n  0xE7A891: 0x5130,\n  0xE7A895: 0x5131,\n  0xE7A89B: 0x5132,\n  0xE7A89E: 0x5133,\n  0xE7A8A1: 0x5134,\n  0xE7A8A7: 0x5135,\n  0xE7A8AB: 0x5136,\n  0xE7A8AD: 0x5137,\n  0xE7A8AF: 0x5138,\n  0xE7A8B0: 0x5139,\n  0xE7A8B4: 0x513A,\n  0xE7A8B5: 0x513B,\n  0xE7A8B8: 0x513C,\n  0xE7A8B9: 0x513D,\n  0xE7A8BA: 0x513E,\n  0xE7A984: 0x513F,\n  0xE7A985: 0x5140,\n  0xE7A987: 0x5141,\n  0xE7A988: 0x5142,\n  0xE7A98C: 0x5143,\n  0xE7A995: 0x5144,\n  0xE7A996: 0x5145,\n  0xE7A999: 0x5146,\n  0xE7A99C: 0x5147,\n  0xE7A99D: 0x5148,\n  0xE7A99F: 0x5149,\n  0xE7A9A0: 0x514A,\n  0xE7A9A5: 0x514B,\n  0xE7A9A7: 0x514C,\n  0xE7A9AA: 0x514D,\n  0xE7A9AD: 0x514E,\n  0xE7A9B5: 0x514F,\n  0xE7A9B8: 0x5150,\n  0xE7A9BE: 0x5151,\n  0xE7AA80: 0x5152,\n  0xE7AA82: 0x5153,\n  0xE7AA85: 0x5154,\n  0xE7AA86: 0x5155,\n  0xE7AA8A: 0x5156,\n  0xE7AA8B: 0x5157,\n  0xE7AA90: 0x5158,\n  0xE7AA91: 0x5159,\n  0xE7AA94: 0x515A,\n  0xE7AA9E: 0x515B,\n  0xE7AAA0: 0x515C,\n  0xE7AAA3: 0x515D,\n  0xE7AAAC: 0x515E,\n  0xE7AAB3: 0x515F,\n  0xE7AAB5: 0x5160,\n  0xE7AAB9: 0x5161,\n  0xE7AABB: 0x5162,\n  0xE7AABC: 0x5163,\n  0xE7AB86: 0x5164,\n  0xE7AB89: 0x5165,\n  0xE7AB8C: 0x5166,\n  0xE7AB8E: 0x5167,\n  0xE7AB91: 0x5168,\n  0xE7AB9B: 0x5169,\n  0xE7ABA8: 0x516A,\n  0xE7ABA9: 0x516B,\n  0xE7ABAB: 0x516C,\n  0xE7ABAC: 0x516D,\n  0xE7ABB1: 0x516E,\n  0xE7ABB4: 0x516F,\n  0xE7ABBB: 0x5170,\n  0xE7ABBD: 0x5171,\n  0xE7ABBE: 0x5172,\n  0xE7AC87: 0x5173,\n  0xE7AC94: 0x5174,\n  0xE7AC9F: 0x5175,\n  0xE7ACA3: 0x5176,\n  0xE7ACA7: 0x5177,\n  0xE7ACA9: 0x5178,\n  0xE7ACAA: 0x5179,\n  0xE7ACAB: 0x517A,\n  0xE7ACAD: 0x517B,\n  0xE7ACAE: 0x517C,\n  0xE7ACAF: 0x517D,\n  0xE7ACB0: 0x517E,\n  0xE7ACB1: 0x5221,\n  0xE7ACB4: 0x5222,\n  0xE7ACBD: 0x5223,\n  0xE7ACBF: 0x5224,\n  0xE7AD80: 0x5225,\n  0xE7AD81: 0x5226,\n  0xE7AD87: 0x5227,\n  0xE7AD8E: 0x5228,\n  0xE7AD95: 0x5229,\n  0xE7ADA0: 0x522A,\n  0xE7ADA4: 0x522B,\n  0xE7ADA6: 0x522C,\n  0xE7ADA9: 0x522D,\n  0xE7ADAA: 0x522E,\n  0xE7ADAD: 0x522F,\n  0xE7ADAF: 0x5230,\n  0xE7ADB2: 0x5231,\n  0xE7ADB3: 0x5232,\n  0xE7ADB7: 0x5233,\n  0xE7AE84: 0x5234,\n  0xE7AE89: 0x5235,\n  0xE7AE8E: 0x5236,\n  0xE7AE90: 0x5237,\n  0xE7AE91: 0x5238,\n  0xE7AE96: 0x5239,\n  0xE7AE9B: 0x523A,\n  0xE7AE9E: 0x523B,\n  0xE7AEA0: 0x523C,\n  0xE7AEA5: 0x523D,\n  0xE7AEAC: 0x523E,\n  0xE7AEAF: 0x523F,\n  0xE7AEB0: 0x5240,\n  0xE7AEB2: 0x5241,\n  0xE7AEB5: 0x5242,\n  0xE7AEB6: 0x5243,\n  0xE7AEBA: 0x5244,\n  0xE7AEBB: 0x5245,\n  0xE7AEBC: 0x5246,\n  0xE7AEBD: 0x5247,\n  0xE7AF82: 0x5248,\n  0xE7AF85: 0x5249,\n  0xE7AF88: 0x524A,\n  0xE7AF8A: 0x524B,\n  0xE7AF94: 0x524C,\n  0xE7AF96: 0x524D,\n  0xE7AF97: 0x524E,\n  0xE7AF99: 0x524F,\n  0xE7AF9A: 0x5250,\n  0xE7AF9B: 0x5251,\n  0xE7AFA8: 0x5252,\n  0xE7AFAA: 0x5253,\n  0xE7AFB2: 0x5254,\n  0xE7AFB4: 0x5255,\n  0xE7AFB5: 0x5256,\n  0xE7AFB8: 0x5257,\n  0xE7AFB9: 0x5258,\n  0xE7AFBA: 0x5259,\n  0xE7AFBC: 0x525A,\n  0xE7AFBE: 0x525B,\n  0xE7B081: 0x525C,\n  0xE7B082: 0x525D,\n  0xE7B083: 0x525E,\n  0xE7B084: 0x525F,\n  0xE7B086: 0x5260,\n  0xE7B089: 0x5261,\n  0xE7B08B: 0x5262,\n  0xE7B08C: 0x5263,\n  0xE7B08E: 0x5264,\n  0xE7B08F: 0x5265,\n  0xE7B099: 0x5266,\n  0xE7B09B: 0x5267,\n  0xE7B0A0: 0x5268,\n  0xE7B0A5: 0x5269,\n  0xE7B0A6: 0x526A,\n  0xE7B0A8: 0x526B,\n  0xE7B0AC: 0x526C,\n  0xE7B0B1: 0x526D,\n  0xE7B0B3: 0x526E,\n  0xE7B0B4: 0x526F,\n  0xE7B0B6: 0x5270,\n  0xE7B0B9: 0x5271,\n  0xE7B0BA: 0x5272,\n  0xE7B186: 0x5273,\n  0xE7B18A: 0x5274,\n  0xE7B195: 0x5275,\n  0xE7B191: 0x5276,\n  0xE7B192: 0x5277,\n  0xE7B193: 0x5278,\n  0xE7B199: 0x5279,\n  0xE7B19A: 0x527A,\n  0xE7B19B: 0x527B,\n  0xE7B19C: 0x527C,\n  0xE7B19D: 0x527D,\n  0xE7B19E: 0x527E,\n  0xE7B1A1: 0x5321,\n  0xE7B1A3: 0x5322,\n  0xE7B1A7: 0x5323,\n  0xE7B1A9: 0x5324,\n  0xE7B1AD: 0x5325,\n  0xE7B1AE: 0x5326,\n  0xE7B1B0: 0x5327,\n  0xE7B1B2: 0x5328,\n  0xE7B1B9: 0x5329,\n  0xE7B1BC: 0x532A,\n  0xE7B1BD: 0x532B,\n  0xE7B286: 0x532C,\n  0xE7B287: 0x532D,\n  0xE7B28F: 0x532E,\n  0xE7B294: 0x532F,\n  0xE7B29E: 0x5330,\n  0xE7B2A0: 0x5331,\n  0xE7B2A6: 0x5332,\n  0xE7B2B0: 0x5333,\n  0xE7B2B6: 0x5334,\n  0xE7B2B7: 0x5335,\n  0xE7B2BA: 0x5336,\n  0xE7B2BB: 0x5337,\n  0xE7B2BC: 0x5338,\n  0xE7B2BF: 0x5339,\n  0xE7B384: 0x533A,\n  0xE7B387: 0x533B,\n  0xE7B388: 0x533C,\n  0xE7B389: 0x533D,\n  0xE7B38D: 0x533E,\n  0xE7B38F: 0x533F,\n  0xE7B393: 0x5340,\n  0xE7B394: 0x5341,\n  0xE7B395: 0x5342,\n  0xE7B397: 0x5343,\n  0xE7B399: 0x5344,\n  0xE7B39A: 0x5345,\n  0xE7B39D: 0x5346,\n  0xE7B3A6: 0x5347,\n  0xE7B3A9: 0x5348,\n  0xE7B3AB: 0x5349,\n  0xE7B3B5: 0x534A,\n  0xE7B483: 0x534B,\n  0xE7B487: 0x534C,\n  0xE7B488: 0x534D,\n  0xE7B489: 0x534E,\n  0xE7B48F: 0x534F,\n  0xE7B491: 0x5350,\n  0xE7B492: 0x5351,\n  0xE7B493: 0x5352,\n  0xE7B496: 0x5353,\n  0xE7B49D: 0x5354,\n  0xE7B49E: 0x5355,\n  0xE7B4A3: 0x5356,\n  0xE7B4A6: 0x5357,\n  0xE7B4AA: 0x5358,\n  0xE7B4AD: 0x5359,\n  0xE7B4B1: 0x535A,\n  0xE7B4BC: 0x535B,\n  0xE7B4BD: 0x535C,\n  0xE7B4BE: 0x535D,\n  0xE7B580: 0x535E,\n  0xE7B581: 0x535F,\n  0xE7B587: 0x5360,\n  0xE7B588: 0x5361,\n  0xE7B58D: 0x5362,\n  0xE7B591: 0x5363,\n  0xE7B593: 0x5364,\n  0xE7B597: 0x5365,\n  0xE7B599: 0x5366,\n  0xE7B59A: 0x5367,\n  0xE7B59C: 0x5368,\n  0xE7B59D: 0x5369,\n  0xE7B5A5: 0x536A,\n  0xE7B5A7: 0x536B,\n  0xE7B5AA: 0x536C,\n  0xE7B5B0: 0x536D,\n  0xE7B5B8: 0x536E,\n  0xE7B5BA: 0x536F,\n  0xE7B5BB: 0x5370,\n  0xE7B5BF: 0x5371,\n  0xE7B681: 0x5372,\n  0xE7B682: 0x5373,\n  0xE7B683: 0x5374,\n  0xE7B685: 0x5375,\n  0xE7B686: 0x5376,\n  0xE7B688: 0x5377,\n  0xE7B68B: 0x5378,\n  0xE7B68C: 0x5379,\n  0xE7B68D: 0x537A,\n  0xE7B691: 0x537B,\n  0xE7B696: 0x537C,\n  0xE7B697: 0x537D,\n  0xE7B69D: 0x537E,\n  0xE7B69E: 0x5421,\n  0xE7B6A6: 0x5422,\n  0xE7B6A7: 0x5423,\n  0xE7B6AA: 0x5424,\n  0xE7B6B3: 0x5425,\n  0xE7B6B6: 0x5426,\n  0xE7B6B7: 0x5427,\n  0xE7B6B9: 0x5428,\n  0xE7B782: 0x5429,\n  0xE7B783: 0x542A,\n  0xE7B784: 0x542B,\n  0xE7B785: 0x542C,\n  0xE7B786: 0x542D,\n  0xE7B78C: 0x542E,\n  0xE7B78D: 0x542F,\n  0xE7B78E: 0x5430,\n  0xE7B797: 0x5431,\n  0xE7B799: 0x5432,\n  0xE7B880: 0x5433,\n  0xE7B7A2: 0x5434,\n  0xE7B7A5: 0x5435,\n  0xE7B7A6: 0x5436,\n  0xE7B7AA: 0x5437,\n  0xE7B7AB: 0x5438,\n  0xE7B7AD: 0x5439,\n  0xE7B7B1: 0x543A,\n  0xE7B7B5: 0x543B,\n  0xE7B7B6: 0x543C,\n  0xE7B7B9: 0x543D,\n  0xE7B7BA: 0x543E,\n  0xE7B888: 0x543F,\n  0xE7B890: 0x5440,\n  0xE7B891: 0x5441,\n  0xE7B895: 0x5442,\n  0xE7B897: 0x5443,\n  0xE7B89C: 0x5444,\n  0xE7B89D: 0x5445,\n  0xE7B8A0: 0x5446,\n  0xE7B8A7: 0x5447,\n  0xE7B8A8: 0x5448,\n  0xE7B8AC: 0x5449,\n  0xE7B8AD: 0x544A,\n  0xE7B8AF: 0x544B,\n  0xE7B8B3: 0x544C,\n  0xE7B8B6: 0x544D,\n  0xE7B8BF: 0x544E,\n  0xE7B984: 0x544F,\n  0xE7B985: 0x5450,\n  0xE7B987: 0x5451,\n  0xE7B98E: 0x5452,\n  0xE7B990: 0x5453,\n  0xE7B992: 0x5454,\n  0xE7B998: 0x5455,\n  0xE7B99F: 0x5456,\n  0xE7B9A1: 0x5457,\n  0xE7B9A2: 0x5458,\n  0xE7B9A5: 0x5459,\n  0xE7B9AB: 0x545A,\n  0xE7B9AE: 0x545B,\n  0xE7B9AF: 0x545C,\n  0xE7B9B3: 0x545D,\n  0xE7B9B8: 0x545E,\n  0xE7B9BE: 0x545F,\n  0xE7BA81: 0x5460,\n  0xE7BA86: 0x5461,\n  0xE7BA87: 0x5462,\n  0xE7BA8A: 0x5463,\n  0xE7BA8D: 0x5464,\n  0xE7BA91: 0x5465,\n  0xE7BA95: 0x5466,\n  0xE7BA98: 0x5467,\n  0xE7BA9A: 0x5468,\n  0xE7BA9D: 0x5469,\n  0xE7BA9E: 0x546A,\n  0xE7BCBC: 0x546B,\n  0xE7BCBB: 0x546C,\n  0xE7BCBD: 0x546D,\n  0xE7BCBE: 0x546E,\n  0xE7BCBF: 0x546F,\n  0xE7BD83: 0x5470,\n  0xE7BD84: 0x5471,\n  0xE7BD87: 0x5472,\n  0xE7BD8F: 0x5473,\n  0xE7BD92: 0x5474,\n  0xE7BD93: 0x5475,\n  0xE7BD9B: 0x5476,\n  0xE7BD9C: 0x5477,\n  0xE7BD9D: 0x5478,\n  0xE7BDA1: 0x5479,\n  0xE7BDA3: 0x547A,\n  0xE7BDA4: 0x547B,\n  0xE7BDA5: 0x547C,\n  0xE7BDA6: 0x547D,\n  0xE7BDAD: 0x547E,\n  0xE7BDB1: 0x5521,\n  0xE7BDBD: 0x5522,\n  0xE7BDBE: 0x5523,\n  0xE7BDBF: 0x5524,\n  0xE7BE80: 0x5525,\n  0xE7BE8B: 0x5526,\n  0xE7BE8D: 0x5527,\n  0xE7BE8F: 0x5528,\n  0xE7BE90: 0x5529,\n  0xE7BE91: 0x552A,\n  0xE7BE96: 0x552B,\n  0xE7BE97: 0x552C,\n  0xE7BE9C: 0x552D,\n  0xE7BEA1: 0x552E,\n  0xE7BEA2: 0x552F,\n  0xE7BEA6: 0x5530,\n  0xE7BEAA: 0x5531,\n  0xE7BEAD: 0x5532,\n  0xE7BEB4: 0x5533,\n  0xE7BEBC: 0x5534,\n  0xE7BEBF: 0x5535,\n  0xE7BF80: 0x5536,\n  0xE7BF83: 0x5537,\n  0xE7BF88: 0x5538,\n  0xE7BF8E: 0x5539,\n  0xE7BF8F: 0x553A,\n  0xE7BF9B: 0x553B,\n  0xE7BF9F: 0x553C,\n  0xE7BFA3: 0x553D,\n  0xE7BFA5: 0x553E,\n  0xE7BFA8: 0x553F,\n  0xE7BFAC: 0x5540,\n  0xE7BFAE: 0x5541,\n  0xE7BFAF: 0x5542,\n  0xE7BFB2: 0x5543,\n  0xE7BFBA: 0x5544,\n  0xE7BFBD: 0x5545,\n  0xE7BFBE: 0x5546,\n  0xE7BFBF: 0x5547,\n  0xE88087: 0x5548,\n  0xE88088: 0x5549,\n  0xE8808A: 0x554A,\n  0xE8808D: 0x554B,\n  0xE8808E: 0x554C,\n  0xE8808F: 0x554D,\n  0xE88091: 0x554E,\n  0xE88093: 0x554F,\n  0xE88094: 0x5550,\n  0xE88096: 0x5551,\n  0xE8809D: 0x5552,\n  0xE8809E: 0x5553,\n  0xE8809F: 0x5554,\n  0xE880A0: 0x5555,\n  0xE880A4: 0x5556,\n  0xE880A6: 0x5557,\n  0xE880AC: 0x5558,\n  0xE880AE: 0x5559,\n  0xE880B0: 0x555A,\n  0xE880B4: 0x555B,\n  0xE880B5: 0x555C,\n  0xE880B7: 0x555D,\n  0xE880B9: 0x555E,\n  0xE880BA: 0x555F,\n  0xE880BC: 0x5560,\n  0xE880BE: 0x5561,\n  0xE88180: 0x5562,\n  0xE88184: 0x5563,\n  0xE881A0: 0x5564,\n  0xE881A4: 0x5565,\n  0xE881A6: 0x5566,\n  0xE881AD: 0x5567,\n  0xE881B1: 0x5568,\n  0xE881B5: 0x5569,\n  0xE88281: 0x556A,\n  0xE88288: 0x556B,\n  0xE8828E: 0x556C,\n  0xE8829C: 0x556D,\n  0xE8829E: 0x556E,\n  0xE882A6: 0x556F,\n  0xE882A7: 0x5570,\n  0xE882AB: 0x5571,\n  0xE882B8: 0x5572,\n  0xE882B9: 0x5573,\n  0xE88388: 0x5574,\n  0xE8838D: 0x5575,\n  0xE8838F: 0x5576,\n  0xE88392: 0x5577,\n  0xE88394: 0x5578,\n  0xE88395: 0x5579,\n  0xE88397: 0x557A,\n  0xE88398: 0x557B,\n  0xE883A0: 0x557C,\n  0xE883AD: 0x557D,\n  0xE883AE: 0x557E,\n  0xE883B0: 0x5621,\n  0xE883B2: 0x5622,\n  0xE883B3: 0x5623,\n  0xE883B6: 0x5624,\n  0xE883B9: 0x5625,\n  0xE883BA: 0x5626,\n  0xE883BE: 0x5627,\n  0xE88483: 0x5628,\n  0xE8848B: 0x5629,\n  0xE88496: 0x562A,\n  0xE88497: 0x562B,\n  0xE88498: 0x562C,\n  0xE8849C: 0x562D,\n  0xE8849E: 0x562E,\n  0xE884A0: 0x562F,\n  0xE884A4: 0x5630,\n  0xE884A7: 0x5631,\n  0xE884AC: 0x5632,\n  0xE884B0: 0x5633,\n  0xE884B5: 0x5634,\n  0xE884BA: 0x5635,\n  0xE884BC: 0x5636,\n  0xE88585: 0x5637,\n  0xE88587: 0x5638,\n  0xE8858A: 0x5639,\n  0xE8858C: 0x563A,\n  0xE88592: 0x563B,\n  0xE88597: 0x563C,\n  0xE885A0: 0x563D,\n  0xE885A1: 0x563E,\n  0xE885A7: 0x563F,\n  0xE885A8: 0x5640,\n  0xE885A9: 0x5641,\n  0xE885AD: 0x5642,\n  0xE885AF: 0x5643,\n  0xE885B7: 0x5644,\n  0xE88681: 0x5645,\n  0xE88690: 0x5646,\n  0xE88684: 0x5647,\n  0xE88685: 0x5648,\n  0xE88686: 0x5649,\n  0xE8868B: 0x564A,\n  0xE8868E: 0x564B,\n  0xE88696: 0x564C,\n  0xE88698: 0x564D,\n  0xE8869B: 0x564E,\n  0xE8869E: 0x564F,\n  0xE886A2: 0x5650,\n  0xE886AE: 0x5651,\n  0xE886B2: 0x5652,\n  0xE886B4: 0x5653,\n  0xE886BB: 0x5654,\n  0xE8878B: 0x5655,\n  0xE88783: 0x5656,\n  0xE88785: 0x5657,\n  0xE8878A: 0x5658,\n  0xE8878E: 0x5659,\n  0xE8878F: 0x565A,\n  0xE88795: 0x565B,\n  0xE88797: 0x565C,\n  0xE8879B: 0x565D,\n  0xE8879D: 0x565E,\n  0xE8879E: 0x565F,\n  0xE887A1: 0x5660,\n  0xE887A4: 0x5661,\n  0xE887AB: 0x5662,\n  0xE887AC: 0x5663,\n  0xE887B0: 0x5664,\n  0xE887B1: 0x5665,\n  0xE887B2: 0x5666,\n  0xE887B5: 0x5667,\n  0xE887B6: 0x5668,\n  0xE887B8: 0x5669,\n  0xE887B9: 0x566A,\n  0xE887BD: 0x566B,\n  0xE887BF: 0x566C,\n  0xE88880: 0x566D,\n  0xE88883: 0x566E,\n  0xE8888F: 0x566F,\n  0xE88893: 0x5670,\n  0xE88894: 0x5671,\n  0xE88899: 0x5672,\n  0xE8889A: 0x5673,\n  0xE8889D: 0x5674,\n  0xE888A1: 0x5675,\n  0xE888A2: 0x5676,\n  0xE888A8: 0x5677,\n  0xE888B2: 0x5678,\n  0xE888B4: 0x5679,\n  0xE888BA: 0x567A,\n  0xE88983: 0x567B,\n  0xE88984: 0x567C,\n  0xE88985: 0x567D,\n  0xE88986: 0x567E,\n  0xE8898B: 0x5721,\n  0xE8898E: 0x5722,\n  0xE8898F: 0x5723,\n  0xE88991: 0x5724,\n  0xE88996: 0x5725,\n  0xE8899C: 0x5726,\n  0xE889A0: 0x5727,\n  0xE889A3: 0x5728,\n  0xE889A7: 0x5729,\n  0xE889AD: 0x572A,\n  0xE889B4: 0x572B,\n  0xE889BB: 0x572C,\n  0xE889BD: 0x572D,\n  0xE889BF: 0x572E,\n  0xE88A80: 0x572F,\n  0xE88A81: 0x5730,\n  0xE88A83: 0x5731,\n  0xE88A84: 0x5732,\n  0xE88A87: 0x5733,\n  0xE88A89: 0x5734,\n  0xE88A8A: 0x5735,\n  0xE88A8E: 0x5736,\n  0xE88A91: 0x5737,\n  0xE88A94: 0x5738,\n  0xE88A96: 0x5739,\n  0xE88A98: 0x573A,\n  0xE88A9A: 0x573B,\n  0xE88A9B: 0x573C,\n  0xE88AA0: 0x573D,\n  0xE88AA1: 0x573E,\n  0xE88AA3: 0x573F,\n  0xE88AA4: 0x5740,\n  0xE88AA7: 0x5741,\n  0xE88AA8: 0x5742,\n  0xE88AA9: 0x5743,\n  0xE88AAA: 0x5744,\n  0xE88AAE: 0x5745,\n  0xE88AB0: 0x5746,\n  0xE88AB2: 0x5747,\n  0xE88AB4: 0x5748,\n  0xE88AB7: 0x5749,\n  0xE88ABA: 0x574A,\n  0xE88ABC: 0x574B,\n  0xE88ABE: 0x574C,\n  0xE88ABF: 0x574D,\n  0xE88B86: 0x574E,\n  0xE88B90: 0x574F,\n  0xE88B95: 0x5750,\n  0xE88B9A: 0x5751,\n  0xE88BA0: 0x5752,\n  0xE88BA2: 0x5753,\n  0xE88BA4: 0x5754,\n  0xE88BA8: 0x5755,\n  0xE88BAA: 0x5756,\n  0xE88BAD: 0x5757,\n  0xE88BAF: 0x5758,\n  0xE88BB6: 0x5759,\n  0xE88BB7: 0x575A,\n  0xE88BBD: 0x575B,\n  0xE88BBE: 0x575C,\n  0xE88C80: 0x575D,\n  0xE88C81: 0x575E,\n  0xE88C87: 0x575F,\n  0xE88C88: 0x5760,\n  0xE88C8A: 0x5761,\n  0xE88C8B: 0x5762,\n  0xE88D94: 0x5763,\n  0xE88C9B: 0x5764,\n  0xE88C9D: 0x5765,\n  0xE88C9E: 0x5766,\n  0xE88C9F: 0x5767,\n  0xE88CA1: 0x5768,\n  0xE88CA2: 0x5769,\n  0xE88CAC: 0x576A,\n  0xE88CAD: 0x576B,\n  0xE88CAE: 0x576C,\n  0xE88CB0: 0x576D,\n  0xE88CB3: 0x576E,\n  0xE88CB7: 0x576F,\n  0xE88CBA: 0x5770,\n  0xE88CBC: 0x5771,\n  0xE88CBD: 0x5772,\n  0xE88D82: 0x5773,\n  0xE88D83: 0x5774,\n  0xE88D84: 0x5775,\n  0xE88D87: 0x5776,\n  0xE88D8D: 0x5777,\n  0xE88D8E: 0x5778,\n  0xE88D91: 0x5779,\n  0xE88D95: 0x577A,\n  0xE88D96: 0x577B,\n  0xE88D97: 0x577C,\n  0xE88DB0: 0x577D,\n  0xE88DB8: 0x577E,\n  0xE88DBD: 0x5821,\n  0xE88DBF: 0x5822,\n  0xE88E80: 0x5823,\n  0xE88E82: 0x5824,\n  0xE88E84: 0x5825,\n  0xE88E86: 0x5826,\n  0xE88E8D: 0x5827,\n  0xE88E92: 0x5828,\n  0xE88E94: 0x5829,\n  0xE88E95: 0x582A,\n  0xE88E98: 0x582B,\n  0xE88E99: 0x582C,\n  0xE88E9B: 0x582D,\n  0xE88E9C: 0x582E,\n  0xE88E9D: 0x582F,\n  0xE88EA6: 0x5830,\n  0xE88EA7: 0x5831,\n  0xE88EA9: 0x5832,\n  0xE88EAC: 0x5833,\n  0xE88EBE: 0x5834,\n  0xE88EBF: 0x5835,\n  0xE88F80: 0x5836,\n  0xE88F87: 0x5837,\n  0xE88F89: 0x5838,\n  0xE88F8F: 0x5839,\n  0xE88F90: 0x583A,\n  0xE88F91: 0x583B,\n  0xE88F94: 0x583C,\n  0xE88F9D: 0x583D,\n  0xE88D93: 0x583E,\n  0xE88FA8: 0x583F,\n  0xE88FAA: 0x5840,\n  0xE88FB6: 0x5841,\n  0xE88FB8: 0x5842,\n  0xE88FB9: 0x5843,\n  0xE88FBC: 0x5844,\n  0xE89081: 0x5845,\n  0xE89086: 0x5846,\n  0xE8908A: 0x5847,\n  0xE8908F: 0x5848,\n  0xE89091: 0x5849,\n  0xE89095: 0x584A,\n  0xE89099: 0x584B,\n  0xE88EAD: 0x584C,\n  0xE890AF: 0x584D,\n  0xE890B9: 0x584E,\n  0xE89185: 0x584F,\n  0xE89187: 0x5850,\n  0xE89188: 0x5851,\n  0xE8918A: 0x5852,\n  0xE8918D: 0x5853,\n  0xE8918F: 0x5854,\n  0xE89191: 0x5855,\n  0xE89192: 0x5856,\n  0xE89196: 0x5857,\n  0xE89198: 0x5858,\n  0xE89199: 0x5859,\n  0xE8919A: 0x585A,\n  0xE8919C: 0x585B,\n  0xE891A0: 0x585C,\n  0xE891A4: 0x585D,\n  0xE891A5: 0x585E,\n  0xE891A7: 0x585F,\n  0xE891AA: 0x5860,\n  0xE891B0: 0x5861,\n  0xE891B3: 0x5862,\n  0xE891B4: 0x5863,\n  0xE891B6: 0x5864,\n  0xE891B8: 0x5865,\n  0xE891BC: 0x5866,\n  0xE891BD: 0x5867,\n  0xE89281: 0x5868,\n  0xE89285: 0x5869,\n  0xE89292: 0x586A,\n  0xE89293: 0x586B,\n  0xE89295: 0x586C,\n  0xE8929E: 0x586D,\n  0xE892A6: 0x586E,\n  0xE892A8: 0x586F,\n  0xE892A9: 0x5870,\n  0xE892AA: 0x5871,\n  0xE892AF: 0x5872,\n  0xE892B1: 0x5873,\n  0xE892B4: 0x5874,\n  0xE892BA: 0x5875,\n  0xE892BD: 0x5876,\n  0xE892BE: 0x5877,\n  0xE89380: 0x5878,\n  0xE89382: 0x5879,\n  0xE89387: 0x587A,\n  0xE89388: 0x587B,\n  0xE8938C: 0x587C,\n  0xE8938F: 0x587D,\n  0xE89393: 0x587E,\n  0xE8939C: 0x5921,\n  0xE893A7: 0x5922,\n  0xE893AA: 0x5923,\n  0xE893AF: 0x5924,\n  0xE893B0: 0x5925,\n  0xE893B1: 0x5926,\n  0xE893B2: 0x5927,\n  0xE893B7: 0x5928,\n  0xE894B2: 0x5929,\n  0xE893BA: 0x592A,\n  0xE893BB: 0x592B,\n  0xE893BD: 0x592C,\n  0xE89482: 0x592D,\n  0xE89483: 0x592E,\n  0xE89487: 0x592F,\n  0xE8948C: 0x5930,\n  0xE8948E: 0x5931,\n  0xE89490: 0x5932,\n  0xE8949C: 0x5933,\n  0xE8949E: 0x5934,\n  0xE894A2: 0x5935,\n  0xE894A3: 0x5936,\n  0xE894A4: 0x5937,\n  0xE894A5: 0x5938,\n  0xE894A7: 0x5939,\n  0xE894AA: 0x593A,\n  0xE894AB: 0x593B,\n  0xE894AF: 0x593C,\n  0xE894B3: 0x593D,\n  0xE894B4: 0x593E,\n  0xE894B6: 0x593F,\n  0xE894BF: 0x5940,\n  0xE89586: 0x5941,\n  0xE8958F: 0x5942,\n  0xE89590: 0x5943,\n  0xE89591: 0x5944,\n  0xE89592: 0x5945,\n  0xE89593: 0x5946,\n  0xE89596: 0x5947,\n  0xE89599: 0x5948,\n  0xE8959C: 0x5949,\n  0xE8959D: 0x594A,\n  0xE8959E: 0x594B,\n  0xE8959F: 0x594C,\n  0xE895A0: 0x594D,\n  0xE895A1: 0x594E,\n  0xE895A2: 0x594F,\n  0xE895A4: 0x5950,\n  0xE895AB: 0x5951,\n  0xE895AF: 0x5952,\n  0xE895B9: 0x5953,\n  0xE895BA: 0x5954,\n  0xE895BB: 0x5955,\n  0xE895BD: 0x5956,\n  0xE895BF: 0x5957,\n  0xE89681: 0x5958,\n  0xE89685: 0x5959,\n  0xE89686: 0x595A,\n  0xE89689: 0x595B,\n  0xE8968B: 0x595C,\n  0xE8968C: 0x595D,\n  0xE8968F: 0x595E,\n  0xE89693: 0x595F,\n  0xE89698: 0x5960,\n  0xE8969D: 0x5961,\n  0xE8969F: 0x5962,\n  0xE896A0: 0x5963,\n  0xE896A2: 0x5964,\n  0xE896A5: 0x5965,\n  0xE896A7: 0x5966,\n  0xE896B4: 0x5967,\n  0xE896B6: 0x5968,\n  0xE896B7: 0x5969,\n  0xE896B8: 0x596A,\n  0xE896BC: 0x596B,\n  0xE896BD: 0x596C,\n  0xE896BE: 0x596D,\n  0xE896BF: 0x596E,\n  0xE89782: 0x596F,\n  0xE89787: 0x5970,\n  0xE8978A: 0x5971,\n  0xE8978B: 0x5972,\n  0xE8978E: 0x5973,\n  0xE896AD: 0x5974,\n  0xE89798: 0x5975,\n  0xE8979A: 0x5976,\n  0xE8979F: 0x5977,\n  0xE897A0: 0x5978,\n  0xE897A6: 0x5979,\n  0xE897A8: 0x597A,\n  0xE897AD: 0x597B,\n  0xE897B3: 0x597C,\n  0xE897B6: 0x597D,\n  0xE897BC: 0x597E,\n  0xE897BF: 0x5A21,\n  0xE89880: 0x5A22,\n  0xE89884: 0x5A23,\n  0xE89885: 0x5A24,\n  0xE8988D: 0x5A25,\n  0xE8988E: 0x5A26,\n  0xE89890: 0x5A27,\n  0xE89891: 0x5A28,\n  0xE89892: 0x5A29,\n  0xE89898: 0x5A2A,\n  0xE89899: 0x5A2B,\n  0xE8989B: 0x5A2C,\n  0xE8989E: 0x5A2D,\n  0xE898A1: 0x5A2E,\n  0xE898A7: 0x5A2F,\n  0xE898A9: 0x5A30,\n  0xE898B6: 0x5A31,\n  0xE898B8: 0x5A32,\n  0xE898BA: 0x5A33,\n  0xE898BC: 0x5A34,\n  0xE898BD: 0x5A35,\n  0xE89980: 0x5A36,\n  0xE89982: 0x5A37,\n  0xE89986: 0x5A38,\n  0xE89992: 0x5A39,\n  0xE89993: 0x5A3A,\n  0xE89996: 0x5A3B,\n  0xE89997: 0x5A3C,\n  0xE89998: 0x5A3D,\n  0xE89999: 0x5A3E,\n  0xE8999D: 0x5A3F,\n  0xE899A0: 0x5A40,\n  0xE899A1: 0x5A41,\n  0xE899A2: 0x5A42,\n  0xE899A3: 0x5A43,\n  0xE899A4: 0x5A44,\n  0xE899A9: 0x5A45,\n  0xE899AC: 0x5A46,\n  0xE899AF: 0x5A47,\n  0xE899B5: 0x5A48,\n  0xE899B6: 0x5A49,\n  0xE899B7: 0x5A4A,\n  0xE899BA: 0x5A4B,\n  0xE89A8D: 0x5A4C,\n  0xE89A91: 0x5A4D,\n  0xE89A96: 0x5A4E,\n  0xE89A98: 0x5A4F,\n  0xE89A9A: 0x5A50,\n  0xE89A9C: 0x5A51,\n  0xE89AA1: 0x5A52,\n  0xE89AA6: 0x5A53,\n  0xE89AA7: 0x5A54,\n  0xE89AA8: 0x5A55,\n  0xE89AAD: 0x5A56,\n  0xE89AB1: 0x5A57,\n  0xE89AB3: 0x5A58,\n  0xE89AB4: 0x5A59,\n  0xE89AB5: 0x5A5A,\n  0xE89AB7: 0x5A5B,\n  0xE89AB8: 0x5A5C,\n  0xE89AB9: 0x5A5D,\n  0xE89ABF: 0x5A5E,\n  0xE89B80: 0x5A5F,\n  0xE89B81: 0x5A60,\n  0xE89B83: 0x5A61,\n  0xE89B85: 0x5A62,\n  0xE89B91: 0x5A63,\n  0xE89B92: 0x5A64,\n  0xE89B95: 0x5A65,\n  0xE89B97: 0x5A66,\n  0xE89B9A: 0x5A67,\n  0xE89B9C: 0x5A68,\n  0xE89BA0: 0x5A69,\n  0xE89BA3: 0x5A6A,\n  0xE89BA5: 0x5A6B,\n  0xE89BA7: 0x5A6C,\n  0xE89A88: 0x5A6D,\n  0xE89BBA: 0x5A6E,\n  0xE89BBC: 0x5A6F,\n  0xE89BBD: 0x5A70,\n  0xE89C84: 0x5A71,\n  0xE89C85: 0x5A72,\n  0xE89C87: 0x5A73,\n  0xE89C8B: 0x5A74,\n  0xE89C8E: 0x5A75,\n  0xE89C8F: 0x5A76,\n  0xE89C90: 0x5A77,\n  0xE89C93: 0x5A78,\n  0xE89C94: 0x5A79,\n  0xE89C99: 0x5A7A,\n  0xE89C9E: 0x5A7B,\n  0xE89C9F: 0x5A7C,\n  0xE89CA1: 0x5A7D,\n  0xE89CA3: 0x5A7E,\n  0xE89CA8: 0x5B21,\n  0xE89CAE: 0x5B22,\n  0xE89CAF: 0x5B23,\n  0xE89CB1: 0x5B24,\n  0xE89CB2: 0x5B25,\n  0xE89CB9: 0x5B26,\n  0xE89CBA: 0x5B27,\n  0xE89CBC: 0x5B28,\n  0xE89CBD: 0x5B29,\n  0xE89CBE: 0x5B2A,\n  0xE89D80: 0x5B2B,\n  0xE89D83: 0x5B2C,\n  0xE89D85: 0x5B2D,\n  0xE89D8D: 0x5B2E,\n  0xE89D98: 0x5B2F,\n  0xE89D9D: 0x5B30,\n  0xE89DA1: 0x5B31,\n  0xE89DA4: 0x5B32,\n  0xE89DA5: 0x5B33,\n  0xE89DAF: 0x5B34,\n  0xE89DB1: 0x5B35,\n  0xE89DB2: 0x5B36,\n  0xE89DBB: 0x5B37,\n  0xE89E83: 0x5B38,\n  0xE89E84: 0x5B39,\n  0xE89E85: 0x5B3A,\n  0xE89E86: 0x5B3B,\n  0xE89E87: 0x5B3C,\n  0xE89E88: 0x5B3D,\n  0xE89E89: 0x5B3E,\n  0xE89E8B: 0x5B3F,\n  0xE89E8C: 0x5B40,\n  0xE89E90: 0x5B41,\n  0xE89E93: 0x5B42,\n  0xE89E95: 0x5B43,\n  0xE89E97: 0x5B44,\n  0xE89E98: 0x5B45,\n  0xE89E99: 0x5B46,\n  0xE89E9E: 0x5B47,\n  0xE89EA0: 0x5B48,\n  0xE89EA3: 0x5B49,\n  0xE89EA7: 0x5B4A,\n  0xE89EAC: 0x5B4B,\n  0xE89EAD: 0x5B4C,\n  0xE89EAE: 0x5B4D,\n  0xE89EB1: 0x5B4E,\n  0xE89EB5: 0x5B4F,\n  0xE89EBE: 0x5B50,\n  0xE89EBF: 0x5B51,\n  0xE89F81: 0x5B52,\n  0xE89F88: 0x5B53,\n  0xE89F89: 0x5B54,\n  0xE89F8A: 0x5B55,\n  0xE89F8E: 0x5B56,\n  0xE89F95: 0x5B57,\n  0xE89F96: 0x5B58,\n  0xE89F99: 0x5B59,\n  0xE89F9A: 0x5B5A,\n  0xE89F9C: 0x5B5B,\n  0xE89F9F: 0x5B5C,\n  0xE89FA2: 0x5B5D,\n  0xE89FA3: 0x5B5E,\n  0xE89FA4: 0x5B5F,\n  0xE89FAA: 0x5B60,\n  0xE89FAB: 0x5B61,\n  0xE89FAD: 0x5B62,\n  0xE89FB1: 0x5B63,\n  0xE89FB3: 0x5B64,\n  0xE89FB8: 0x5B65,\n  0xE89FBA: 0x5B66,\n  0xE89FBF: 0x5B67,\n  0xE8A081: 0x5B68,\n  0xE8A083: 0x5B69,\n  0xE8A086: 0x5B6A,\n  0xE8A089: 0x5B6B,\n  0xE8A08A: 0x5B6C,\n  0xE8A08B: 0x5B6D,\n  0xE8A090: 0x5B6E,\n  0xE8A099: 0x5B6F,\n  0xE8A092: 0x5B70,\n  0xE8A093: 0x5B71,\n  0xE8A094: 0x5B72,\n  0xE8A098: 0x5B73,\n  0xE8A09A: 0x5B74,\n  0xE8A09B: 0x5B75,\n  0xE8A09C: 0x5B76,\n  0xE8A09E: 0x5B77,\n  0xE8A09F: 0x5B78,\n  0xE8A0A8: 0x5B79,\n  0xE8A0AD: 0x5B7A,\n  0xE8A0AE: 0x5B7B,\n  0xE8A0B0: 0x5B7C,\n  0xE8A0B2: 0x5B7D,\n  0xE8A0B5: 0x5B7E,\n  0xE8A0BA: 0x5C21,\n  0xE8A0BC: 0x5C22,\n  0xE8A181: 0x5C23,\n  0xE8A183: 0x5C24,\n  0xE8A185: 0x5C25,\n  0xE8A188: 0x5C26,\n  0xE8A189: 0x5C27,\n  0xE8A18A: 0x5C28,\n  0xE8A18B: 0x5C29,\n  0xE8A18E: 0x5C2A,\n  0xE8A191: 0x5C2B,\n  0xE8A195: 0x5C2C,\n  0xE8A196: 0x5C2D,\n  0xE8A198: 0x5C2E,\n  0xE8A19A: 0x5C2F,\n  0xE8A19C: 0x5C30,\n  0xE8A19F: 0x5C31,\n  0xE8A1A0: 0x5C32,\n  0xE8A1A4: 0x5C33,\n  0xE8A1A9: 0x5C34,\n  0xE8A1B1: 0x5C35,\n  0xE8A1B9: 0x5C36,\n  0xE8A1BB: 0x5C37,\n  0xE8A280: 0x5C38,\n  0xE8A298: 0x5C39,\n  0xE8A29A: 0x5C3A,\n  0xE8A29B: 0x5C3B,\n  0xE8A29C: 0x5C3C,\n  0xE8A29F: 0x5C3D,\n  0xE8A2A0: 0x5C3E,\n  0xE8A2A8: 0x5C3F,\n  0xE8A2AA: 0x5C40,\n  0xE8A2BA: 0x5C41,\n  0xE8A2BD: 0x5C42,\n  0xE8A2BE: 0x5C43,\n  0xE8A380: 0x5C44,\n  0xE8A38A: 0x5C45,\n  0xE8A38B: 0x5C46,\n  0xE8A38C: 0x5C47,\n  0xE8A38D: 0x5C48,\n  0xE8A38E: 0x5C49,\n  0xE8A391: 0x5C4A,\n  0xE8A392: 0x5C4B,\n  0xE8A393: 0x5C4C,\n  0xE8A39B: 0x5C4D,\n  0xE8A39E: 0x5C4E,\n  0xE8A3A7: 0x5C4F,\n  0xE8A3AF: 0x5C50,\n  0xE8A3B0: 0x5C51,\n  0xE8A3B1: 0x5C52,\n  0xE8A3B5: 0x5C53,\n  0xE8A3B7: 0x5C54,\n  0xE8A481: 0x5C55,\n  0xE8A486: 0x5C56,\n  0xE8A48D: 0x5C57,\n  0xE8A48E: 0x5C58,\n  0xE8A48F: 0x5C59,\n  0xE8A495: 0x5C5A,\n  0xE8A496: 0x5C5B,\n  0xE8A498: 0x5C5C,\n  0xE8A499: 0x5C5D,\n  0xE8A49A: 0x5C5E,\n  0xE8A49C: 0x5C5F,\n  0xE8A4A0: 0x5C60,\n  0xE8A4A6: 0x5C61,\n  0xE8A4A7: 0x5C62,\n  0xE8A4A8: 0x5C63,\n  0xE8A4B0: 0x5C64,\n  0xE8A4B1: 0x5C65,\n  0xE8A4B2: 0x5C66,\n  0xE8A4B5: 0x5C67,\n  0xE8A4B9: 0x5C68,\n  0xE8A4BA: 0x5C69,\n  0xE8A4BE: 0x5C6A,\n  0xE8A580: 0x5C6B,\n  0xE8A582: 0x5C6C,\n  0xE8A585: 0x5C6D,\n  0xE8A586: 0x5C6E,\n  0xE8A589: 0x5C6F,\n  0xE8A58F: 0x5C70,\n  0xE8A592: 0x5C71,\n  0xE8A597: 0x5C72,\n  0xE8A59A: 0x5C73,\n  0xE8A59B: 0x5C74,\n  0xE8A59C: 0x5C75,\n  0xE8A5A1: 0x5C76,\n  0xE8A5A2: 0x5C77,\n  0xE8A5A3: 0x5C78,\n  0xE8A5AB: 0x5C79,\n  0xE8A5AE: 0x5C7A,\n  0xE8A5B0: 0x5C7B,\n  0xE8A5B3: 0x5C7C,\n  0xE8A5B5: 0x5C7D,\n  0xE8A5BA: 0x5C7E,\n  0xE8A5BB: 0x5D21,\n  0xE8A5BC: 0x5D22,\n  0xE8A5BD: 0x5D23,\n  0xE8A689: 0x5D24,\n  0xE8A68D: 0x5D25,\n  0xE8A690: 0x5D26,\n  0xE8A694: 0x5D27,\n  0xE8A695: 0x5D28,\n  0xE8A69B: 0x5D29,\n  0xE8A69C: 0x5D2A,\n  0xE8A69F: 0x5D2B,\n  0xE8A6A0: 0x5D2C,\n  0xE8A6A5: 0x5D2D,\n  0xE8A6B0: 0x5D2E,\n  0xE8A6B4: 0x5D2F,\n  0xE8A6B5: 0x5D30,\n  0xE8A6B6: 0x5D31,\n  0xE8A6B7: 0x5D32,\n  0xE8A6BC: 0x5D33,\n  0xE8A794: 0x5D34,\n  0xE8A795: 0x5D35,\n  0xE8A796: 0x5D36,\n  0xE8A797: 0x5D37,\n  0xE8A798: 0x5D38,\n  0xE8A7A5: 0x5D39,\n  0xE8A7A9: 0x5D3A,\n  0xE8A7AB: 0x5D3B,\n  0xE8A7AD: 0x5D3C,\n  0xE8A7B1: 0x5D3D,\n  0xE8A7B3: 0x5D3E,\n  0xE8A7B6: 0x5D3F,\n  0xE8A7B9: 0x5D40,\n  0xE8A7BD: 0x5D41,\n  0xE8A7BF: 0x5D42,\n  0xE8A884: 0x5D43,\n  0xE8A885: 0x5D44,\n  0xE8A887: 0x5D45,\n  0xE8A88F: 0x5D46,\n  0xE8A891: 0x5D47,\n  0xE8A892: 0x5D48,\n  0xE8A894: 0x5D49,\n  0xE8A895: 0x5D4A,\n  0xE8A89E: 0x5D4B,\n  0xE8A8A0: 0x5D4C,\n  0xE8A8A2: 0x5D4D,\n  0xE8A8A4: 0x5D4E,\n  0xE8A8A6: 0x5D4F,\n  0xE8A8AB: 0x5D50,\n  0xE8A8AC: 0x5D51,\n  0xE8A8AF: 0x5D52,\n  0xE8A8B5: 0x5D53,\n  0xE8A8B7: 0x5D54,\n  0xE8A8BD: 0x5D55,\n  0xE8A8BE: 0x5D56,\n  0xE8A980: 0x5D57,\n  0xE8A983: 0x5D58,\n  0xE8A985: 0x5D59,\n  0xE8A987: 0x5D5A,\n  0xE8A989: 0x5D5B,\n  0xE8A98D: 0x5D5C,\n  0xE8A98E: 0x5D5D,\n  0xE8A993: 0x5D5E,\n  0xE8A996: 0x5D5F,\n  0xE8A997: 0x5D60,\n  0xE8A998: 0x5D61,\n  0xE8A99C: 0x5D62,\n  0xE8A99D: 0x5D63,\n  0xE8A9A1: 0x5D64,\n  0xE8A9A5: 0x5D65,\n  0xE8A9A7: 0x5D66,\n  0xE8A9B5: 0x5D67,\n  0xE8A9B6: 0x5D68,\n  0xE8A9B7: 0x5D69,\n  0xE8A9B9: 0x5D6A,\n  0xE8A9BA: 0x5D6B,\n  0xE8A9BB: 0x5D6C,\n  0xE8A9BE: 0x5D6D,\n  0xE8A9BF: 0x5D6E,\n  0xE8AA80: 0x5D6F,\n  0xE8AA83: 0x5D70,\n  0xE8AA86: 0x5D71,\n  0xE8AA8B: 0x5D72,\n  0xE8AA8F: 0x5D73,\n  0xE8AA90: 0x5D74,\n  0xE8AA92: 0x5D75,\n  0xE8AA96: 0x5D76,\n  0xE8AA97: 0x5D77,\n  0xE8AA99: 0x5D78,\n  0xE8AA9F: 0x5D79,\n  0xE8AAA7: 0x5D7A,\n  0xE8AAA9: 0x5D7B,\n  0xE8AAAE: 0x5D7C,\n  0xE8AAAF: 0x5D7D,\n  0xE8AAB3: 0x5D7E,\n  0xE8AAB6: 0x5E21,\n  0xE8AAB7: 0x5E22,\n  0xE8AABB: 0x5E23,\n  0xE8AABE: 0x5E24,\n  0xE8AB83: 0x5E25,\n  0xE8AB86: 0x5E26,\n  0xE8AB88: 0x5E27,\n  0xE8AB89: 0x5E28,\n  0xE8AB8A: 0x5E29,\n  0xE8AB91: 0x5E2A,\n  0xE8AB93: 0x5E2B,\n  0xE8AB94: 0x5E2C,\n  0xE8AB95: 0x5E2D,\n  0xE8AB97: 0x5E2E,\n  0xE8AB9D: 0x5E2F,\n  0xE8AB9F: 0x5E30,\n  0xE8ABAC: 0x5E31,\n  0xE8ABB0: 0x5E32,\n  0xE8ABB4: 0x5E33,\n  0xE8ABB5: 0x5E34,\n  0xE8ABB6: 0x5E35,\n  0xE8ABBC: 0x5E36,\n  0xE8ABBF: 0x5E37,\n  0xE8AC85: 0x5E38,\n  0xE8AC86: 0x5E39,\n  0xE8AC8B: 0x5E3A,\n  0xE8AC91: 0x5E3B,\n  0xE8AC9C: 0x5E3C,\n  0xE8AC9E: 0x5E3D,\n  0xE8AC9F: 0x5E3E,\n  0xE8AC8A: 0x5E3F,\n  0xE8ACAD: 0x5E40,\n  0xE8ACB0: 0x5E41,\n  0xE8ACB7: 0x5E42,\n  0xE8ACBC: 0x5E43,\n  0xE8AD82: 0x5E44,\n  0xE8AD83: 0x5E45,\n  0xE8AD84: 0x5E46,\n  0xE8AD85: 0x5E47,\n  0xE8AD86: 0x5E48,\n  0xE8AD88: 0x5E49,\n  0xE8AD92: 0x5E4A,\n  0xE8AD93: 0x5E4B,\n  0xE8AD94: 0x5E4C,\n  0xE8AD99: 0x5E4D,\n  0xE8AD8D: 0x5E4E,\n  0xE8AD9E: 0x5E4F,\n  0xE8ADA3: 0x5E50,\n  0xE8ADAD: 0x5E51,\n  0xE8ADB6: 0x5E52,\n  0xE8ADB8: 0x5E53,\n  0xE8ADB9: 0x5E54,\n  0xE8ADBC: 0x5E55,\n  0xE8ADBE: 0x5E56,\n  0xE8AE81: 0x5E57,\n  0xE8AE84: 0x5E58,\n  0xE8AE85: 0x5E59,\n  0xE8AE8B: 0x5E5A,\n  0xE8AE8D: 0x5E5B,\n  0xE8AE8F: 0x5E5C,\n  0xE8AE94: 0x5E5D,\n  0xE8AE95: 0x5E5E,\n  0xE8AE9C: 0x5E5F,\n  0xE8AE9E: 0x5E60,\n  0xE8AE9F: 0x5E61,\n  0xE8B0B8: 0x5E62,\n  0xE8B0B9: 0x5E63,\n  0xE8B0BD: 0x5E64,\n  0xE8B0BE: 0x5E65,\n  0xE8B185: 0x5E66,\n  0xE8B187: 0x5E67,\n  0xE8B189: 0x5E68,\n  0xE8B18B: 0x5E69,\n  0xE8B18F: 0x5E6A,\n  0xE8B191: 0x5E6B,\n  0xE8B193: 0x5E6C,\n  0xE8B194: 0x5E6D,\n  0xE8B197: 0x5E6E,\n  0xE8B198: 0x5E6F,\n  0xE8B19B: 0x5E70,\n  0xE8B19D: 0x5E71,\n  0xE8B199: 0x5E72,\n  0xE8B1A3: 0x5E73,\n  0xE8B1A4: 0x5E74,\n  0xE8B1A6: 0x5E75,\n  0xE8B1A8: 0x5E76,\n  0xE8B1A9: 0x5E77,\n  0xE8B1AD: 0x5E78,\n  0xE8B1B3: 0x5E79,\n  0xE8B1B5: 0x5E7A,\n  0xE8B1B6: 0x5E7B,\n  0xE8B1BB: 0x5E7C,\n  0xE8B1BE: 0x5E7D,\n  0xE8B286: 0x5E7E,\n  0xE8B287: 0x5F21,\n  0xE8B28B: 0x5F22,\n  0xE8B290: 0x5F23,\n  0xE8B292: 0x5F24,\n  0xE8B293: 0x5F25,\n  0xE8B299: 0x5F26,\n  0xE8B29B: 0x5F27,\n  0xE8B29C: 0x5F28,\n  0xE8B2A4: 0x5F29,\n  0xE8B2B9: 0x5F2A,\n  0xE8B2BA: 0x5F2B,\n  0xE8B385: 0x5F2C,\n  0xE8B386: 0x5F2D,\n  0xE8B389: 0x5F2E,\n  0xE8B38B: 0x5F2F,\n  0xE8B38F: 0x5F30,\n  0xE8B396: 0x5F31,\n  0xE8B395: 0x5F32,\n  0xE8B399: 0x5F33,\n  0xE8B39D: 0x5F34,\n  0xE8B3A1: 0x5F35,\n  0xE8B3A8: 0x5F36,\n  0xE8B3AC: 0x5F37,\n  0xE8B3AF: 0x5F38,\n  0xE8B3B0: 0x5F39,\n  0xE8B3B2: 0x5F3A,\n  0xE8B3B5: 0x5F3B,\n  0xE8B3B7: 0x5F3C,\n  0xE8B3B8: 0x5F3D,\n  0xE8B3BE: 0x5F3E,\n  0xE8B3BF: 0x5F3F,\n  0xE8B481: 0x5F40,\n  0xE8B483: 0x5F41,\n  0xE8B489: 0x5F42,\n  0xE8B492: 0x5F43,\n  0xE8B497: 0x5F44,\n  0xE8B49B: 0x5F45,\n  0xE8B5A5: 0x5F46,\n  0xE8B5A9: 0x5F47,\n  0xE8B5AC: 0x5F48,\n  0xE8B5AE: 0x5F49,\n  0xE8B5BF: 0x5F4A,\n  0xE8B682: 0x5F4B,\n  0xE8B684: 0x5F4C,\n  0xE8B688: 0x5F4D,\n  0xE8B68D: 0x5F4E,\n  0xE8B690: 0x5F4F,\n  0xE8B691: 0x5F50,\n  0xE8B695: 0x5F51,\n  0xE8B69E: 0x5F52,\n  0xE8B69F: 0x5F53,\n  0xE8B6A0: 0x5F54,\n  0xE8B6A6: 0x5F55,\n  0xE8B6AB: 0x5F56,\n  0xE8B6AC: 0x5F57,\n  0xE8B6AF: 0x5F58,\n  0xE8B6B2: 0x5F59,\n  0xE8B6B5: 0x5F5A,\n  0xE8B6B7: 0x5F5B,\n  0xE8B6B9: 0x5F5C,\n  0xE8B6BB: 0x5F5D,\n  0xE8B780: 0x5F5E,\n  0xE8B785: 0x5F5F,\n  0xE8B786: 0x5F60,\n  0xE8B787: 0x5F61,\n  0xE8B788: 0x5F62,\n  0xE8B78A: 0x5F63,\n  0xE8B78E: 0x5F64,\n  0xE8B791: 0x5F65,\n  0xE8B794: 0x5F66,\n  0xE8B795: 0x5F67,\n  0xE8B797: 0x5F68,\n  0xE8B799: 0x5F69,\n  0xE8B7A4: 0x5F6A,\n  0xE8B7A5: 0x5F6B,\n  0xE8B7A7: 0x5F6C,\n  0xE8B7AC: 0x5F6D,\n  0xE8B7B0: 0x5F6E,\n  0xE8B6BC: 0x5F6F,\n  0xE8B7B1: 0x5F70,\n  0xE8B7B2: 0x5F71,\n  0xE8B7B4: 0x5F72,\n  0xE8B7BD: 0x5F73,\n  0xE8B881: 0x5F74,\n  0xE8B884: 0x5F75,\n  0xE8B885: 0x5F76,\n  0xE8B886: 0x5F77,\n  0xE8B88B: 0x5F78,\n  0xE8B891: 0x5F79,\n  0xE8B894: 0x5F7A,\n  0xE8B896: 0x5F7B,\n  0xE8B8A0: 0x5F7C,\n  0xE8B8A1: 0x5F7D,\n  0xE8B8A2: 0x5F7E,\n  0xE8B8A3: 0x6021,\n  0xE8B8A6: 0x6022,\n  0xE8B8A7: 0x6023,\n  0xE8B8B1: 0x6024,\n  0xE8B8B3: 0x6025,\n  0xE8B8B6: 0x6026,\n  0xE8B8B7: 0x6027,\n  0xE8B8B8: 0x6028,\n  0xE8B8B9: 0x6029,\n  0xE8B8BD: 0x602A,\n  0xE8B980: 0x602B,\n  0xE8B981: 0x602C,\n  0xE8B98B: 0x602D,\n  0xE8B98D: 0x602E,\n  0xE8B98E: 0x602F,\n  0xE8B98F: 0x6030,\n  0xE8B994: 0x6031,\n  0xE8B99B: 0x6032,\n  0xE8B99C: 0x6033,\n  0xE8B99D: 0x6034,\n  0xE8B99E: 0x6035,\n  0xE8B9A1: 0x6036,\n  0xE8B9A2: 0x6037,\n  0xE8B9A9: 0x6038,\n  0xE8B9AC: 0x6039,\n  0xE8B9AD: 0x603A,\n  0xE8B9AF: 0x603B,\n  0xE8B9B0: 0x603C,\n  0xE8B9B1: 0x603D,\n  0xE8B9B9: 0x603E,\n  0xE8B9BA: 0x603F,\n  0xE8B9BB: 0x6040,\n  0xE8BA82: 0x6041,\n  0xE8BA83: 0x6042,\n  0xE8BA89: 0x6043,\n  0xE8BA90: 0x6044,\n  0xE8BA92: 0x6045,\n  0xE8BA95: 0x6046,\n  0xE8BA9A: 0x6047,\n  0xE8BA9B: 0x6048,\n  0xE8BA9D: 0x6049,\n  0xE8BA9E: 0x604A,\n  0xE8BAA2: 0x604B,\n  0xE8BAA7: 0x604C,\n  0xE8BAA9: 0x604D,\n  0xE8BAAD: 0x604E,\n  0xE8BAAE: 0x604F,\n  0xE8BAB3: 0x6050,\n  0xE8BAB5: 0x6051,\n  0xE8BABA: 0x6052,\n  0xE8BABB: 0x6053,\n  0xE8BB80: 0x6054,\n  0xE8BB81: 0x6055,\n  0xE8BB83: 0x6056,\n  0xE8BB84: 0x6057,\n  0xE8BB87: 0x6058,\n  0xE8BB8F: 0x6059,\n  0xE8BB91: 0x605A,\n  0xE8BB94: 0x605B,\n  0xE8BB9C: 0x605C,\n  0xE8BBA8: 0x605D,\n  0xE8BBAE: 0x605E,\n  0xE8BBB0: 0x605F,\n  0xE8BBB1: 0x6060,\n  0xE8BBB7: 0x6061,\n  0xE8BBB9: 0x6062,\n  0xE8BBBA: 0x6063,\n  0xE8BBAD: 0x6064,\n  0xE8BC80: 0x6065,\n  0xE8BC82: 0x6066,\n  0xE8BC87: 0x6067,\n  0xE8BC88: 0x6068,\n  0xE8BC8F: 0x6069,\n  0xE8BC90: 0x606A,\n  0xE8BC96: 0x606B,\n  0xE8BC97: 0x606C,\n  0xE8BC98: 0x606D,\n  0xE8BC9E: 0x606E,\n  0xE8BCA0: 0x606F,\n  0xE8BCA1: 0x6070,\n  0xE8BCA3: 0x6071,\n  0xE8BCA5: 0x6072,\n  0xE8BCA7: 0x6073,\n  0xE8BCA8: 0x6074,\n  0xE8BCAC: 0x6075,\n  0xE8BCAD: 0x6076,\n  0xE8BCAE: 0x6077,\n  0xE8BCB4: 0x6078,\n  0xE8BCB5: 0x6079,\n  0xE8BCB6: 0x607A,\n  0xE8BCB7: 0x607B,\n  0xE8BCBA: 0x607C,\n  0xE8BD80: 0x607D,\n  0xE8BD81: 0x607E,\n  0xE8BD83: 0x6121,\n  0xE8BD87: 0x6122,\n  0xE8BD8F: 0x6123,\n  0xE8BD91: 0x6124,\n  0xE8BD92: 0x6125,\n  0xE8BD93: 0x6126,\n  0xE8BD94: 0x6127,\n  0xE8BD95: 0x6128,\n  0xE8BD98: 0x6129,\n  0xE8BD9D: 0x612A,\n  0xE8BD9E: 0x612B,\n  0xE8BDA5: 0x612C,\n  0xE8BE9D: 0x612D,\n  0xE8BEA0: 0x612E,\n  0xE8BEA1: 0x612F,\n  0xE8BEA4: 0x6130,\n  0xE8BEA5: 0x6131,\n  0xE8BEA6: 0x6132,\n  0xE8BEB5: 0x6133,\n  0xE8BEB6: 0x6134,\n  0xE8BEB8: 0x6135,\n  0xE8BEBE: 0x6136,\n  0xE8BF80: 0x6137,\n  0xE8BF81: 0x6138,\n  0xE8BF86: 0x6139,\n  0xE8BF8A: 0x613A,\n  0xE8BF8B: 0x613B,\n  0xE8BF8D: 0x613C,\n  0xE8BF90: 0x613D,\n  0xE8BF92: 0x613E,\n  0xE8BF93: 0x613F,\n  0xE8BF95: 0x6140,\n  0xE8BFA0: 0x6141,\n  0xE8BFA3: 0x6142,\n  0xE8BFA4: 0x6143,\n  0xE8BFA8: 0x6144,\n  0xE8BFAE: 0x6145,\n  0xE8BFB1: 0x6146,\n  0xE8BFB5: 0x6147,\n  0xE8BFB6: 0x6148,\n  0xE8BFBB: 0x6149,\n  0xE8BFBE: 0x614A,\n  0xE98082: 0x614B,\n  0xE98084: 0x614C,\n  0xE98088: 0x614D,\n  0xE9808C: 0x614E,\n  0xE98098: 0x614F,\n  0xE9809B: 0x6150,\n  0xE980A8: 0x6151,\n  0xE980A9: 0x6152,\n  0xE980AF: 0x6153,\n  0xE980AA: 0x6154,\n  0xE980AC: 0x6155,\n  0xE980AD: 0x6156,\n  0xE980B3: 0x6157,\n  0xE980B4: 0x6158,\n  0xE980B7: 0x6159,\n  0xE980BF: 0x615A,\n  0xE98183: 0x615B,\n  0xE98184: 0x615C,\n  0xE9818C: 0x615D,\n  0xE9819B: 0x615E,\n  0xE9819D: 0x615F,\n  0xE981A2: 0x6160,\n  0xE981A6: 0x6161,\n  0xE981A7: 0x6162,\n  0xE981AC: 0x6163,\n  0xE981B0: 0x6164,\n  0xE981B4: 0x6165,\n  0xE981B9: 0x6166,\n  0xE98285: 0x6167,\n  0xE98288: 0x6168,\n  0xE9828B: 0x6169,\n  0xE9828C: 0x616A,\n  0xE9828E: 0x616B,\n  0xE98290: 0x616C,\n  0xE98295: 0x616D,\n  0xE98297: 0x616E,\n  0xE98298: 0x616F,\n  0xE98299: 0x6170,\n  0xE9829B: 0x6171,\n  0xE982A0: 0x6172,\n  0xE982A1: 0x6173,\n  0xE982A2: 0x6174,\n  0xE982A5: 0x6175,\n  0xE982B0: 0x6176,\n  0xE982B2: 0x6177,\n  0xE982B3: 0x6178,\n  0xE982B4: 0x6179,\n  0xE982B6: 0x617A,\n  0xE982BD: 0x617B,\n  0xE9838C: 0x617C,\n  0xE982BE: 0x617D,\n  0xE98383: 0x617E,\n  0xE98384: 0x6221,\n  0xE98385: 0x6222,\n  0xE98387: 0x6223,\n  0xE98388: 0x6224,\n  0xE98395: 0x6225,\n  0xE98397: 0x6226,\n  0xE98398: 0x6227,\n  0xE98399: 0x6228,\n  0xE9839C: 0x6229,\n  0xE9839D: 0x622A,\n  0xE9839F: 0x622B,\n  0xE983A5: 0x622C,\n  0xE98392: 0x622D,\n  0xE983B6: 0x622E,\n  0xE983AB: 0x622F,\n  0xE983AF: 0x6230,\n  0xE983B0: 0x6231,\n  0xE983B4: 0x6232,\n  0xE983BE: 0x6233,\n  0xE983BF: 0x6234,\n  0xE98480: 0x6235,\n  0xE98484: 0x6236,\n  0xE98485: 0x6237,\n  0xE98486: 0x6238,\n  0xE98488: 0x6239,\n  0xE9848D: 0x623A,\n  0xE98490: 0x623B,\n  0xE98494: 0x623C,\n  0xE98496: 0x623D,\n  0xE98497: 0x623E,\n  0xE98498: 0x623F,\n  0xE9849A: 0x6240,\n  0xE9849C: 0x6241,\n  0xE9849E: 0x6242,\n  0xE984A0: 0x6243,\n  0xE984A5: 0x6244,\n  0xE984A2: 0x6245,\n  0xE984A3: 0x6246,\n  0xE984A7: 0x6247,\n  0xE984A9: 0x6248,\n  0xE984AE: 0x6249,\n  0xE984AF: 0x624A,\n  0xE984B1: 0x624B,\n  0xE984B4: 0x624C,\n  0xE984B6: 0x624D,\n  0xE984B7: 0x624E,\n  0xE984B9: 0x624F,\n  0xE984BA: 0x6250,\n  0xE984BC: 0x6251,\n  0xE984BD: 0x6252,\n  0xE98583: 0x6253,\n  0xE98587: 0x6254,\n  0xE98588: 0x6255,\n  0xE9858F: 0x6256,\n  0xE98593: 0x6257,\n  0xE98597: 0x6258,\n  0xE98599: 0x6259,\n  0xE9859A: 0x625A,\n  0xE9859B: 0x625B,\n  0xE985A1: 0x625C,\n  0xE985A4: 0x625D,\n  0xE985A7: 0x625E,\n  0xE985AD: 0x625F,\n  0xE985B4: 0x6260,\n  0xE985B9: 0x6261,\n  0xE985BA: 0x6262,\n  0xE985BB: 0x6263,\n  0xE98681: 0x6264,\n  0xE98683: 0x6265,\n  0xE98685: 0x6266,\n  0xE98686: 0x6267,\n  0xE9868A: 0x6268,\n  0xE9868E: 0x6269,\n  0xE98691: 0x626A,\n  0xE98693: 0x626B,\n  0xE98694: 0x626C,\n  0xE98695: 0x626D,\n  0xE98698: 0x626E,\n  0xE9869E: 0x626F,\n  0xE986A1: 0x6270,\n  0xE986A6: 0x6271,\n  0xE986A8: 0x6272,\n  0xE986AC: 0x6273,\n  0xE986AD: 0x6274,\n  0xE986AE: 0x6275,\n  0xE986B0: 0x6276,\n  0xE986B1: 0x6277,\n  0xE986B2: 0x6278,\n  0xE986B3: 0x6279,\n  0xE986B6: 0x627A,\n  0xE986BB: 0x627B,\n  0xE986BC: 0x627C,\n  0xE986BD: 0x627D,\n  0xE986BF: 0x627E,\n  0xE98782: 0x6321,\n  0xE98783: 0x6322,\n  0xE98785: 0x6323,\n  0xE98793: 0x6324,\n  0xE98794: 0x6325,\n  0xE98797: 0x6326,\n  0xE98799: 0x6327,\n  0xE9879A: 0x6328,\n  0xE9879E: 0x6329,\n  0xE987A4: 0x632A,\n  0xE987A5: 0x632B,\n  0xE987A9: 0x632C,\n  0xE987AA: 0x632D,\n  0xE987AC: 0x632E,\n  0xE987AD: 0x632F,\n  0xE987AE: 0x6330,\n  0xE987AF: 0x6331,\n  0xE987B0: 0x6332,\n  0xE987B1: 0x6333,\n  0xE987B7: 0x6334,\n  0xE987B9: 0x6335,\n  0xE987BB: 0x6336,\n  0xE987BD: 0x6337,\n  0xE98880: 0x6338,\n  0xE98881: 0x6339,\n  0xE98884: 0x633A,\n  0xE98885: 0x633B,\n  0xE98886: 0x633C,\n  0xE98887: 0x633D,\n  0xE98889: 0x633E,\n  0xE9888A: 0x633F,\n  0xE9888C: 0x6340,\n  0xE98890: 0x6341,\n  0xE98892: 0x6342,\n  0xE98893: 0x6343,\n  0xE98896: 0x6344,\n  0xE98898: 0x6345,\n  0xE9889C: 0x6346,\n  0xE9889D: 0x6347,\n  0xE988A3: 0x6348,\n  0xE988A4: 0x6349,\n  0xE988A5: 0x634A,\n  0xE988A6: 0x634B,\n  0xE988A8: 0x634C,\n  0xE988AE: 0x634D,\n  0xE988AF: 0x634E,\n  0xE988B0: 0x634F,\n  0xE988B3: 0x6350,\n  0xE988B5: 0x6351,\n  0xE988B6: 0x6352,\n  0xE988B8: 0x6353,\n  0xE988B9: 0x6354,\n  0xE988BA: 0x6355,\n  0xE988BC: 0x6356,\n  0xE988BE: 0x6357,\n  0xE98980: 0x6358,\n  0xE98982: 0x6359,\n  0xE98983: 0x635A,\n  0xE98986: 0x635B,\n  0xE98987: 0x635C,\n  0xE9898A: 0x635D,\n  0xE9898D: 0x635E,\n  0xE9898E: 0x635F,\n  0xE9898F: 0x6360,\n  0xE98991: 0x6361,\n  0xE98998: 0x6362,\n  0xE98999: 0x6363,\n  0xE9899C: 0x6364,\n  0xE9899D: 0x6365,\n  0xE989A0: 0x6366,\n  0xE989A1: 0x6367,\n  0xE989A5: 0x6368,\n  0xE989A7: 0x6369,\n  0xE989A8: 0x636A,\n  0xE989A9: 0x636B,\n  0xE989AE: 0x636C,\n  0xE989AF: 0x636D,\n  0xE989B0: 0x636E,\n  0xE989B5: 0x636F,\n  0xE989B6: 0x6370,\n  0xE989B7: 0x6371,\n  0xE989B8: 0x6372,\n  0xE989B9: 0x6373,\n  0xE989BB: 0x6374,\n  0xE989BC: 0x6375,\n  0xE989BD: 0x6376,\n  0xE989BF: 0x6377,\n  0xE98A88: 0x6378,\n  0xE98A89: 0x6379,\n  0xE98A8A: 0x637A,\n  0xE98A8D: 0x637B,\n  0xE98A8E: 0x637C,\n  0xE98A92: 0x637D,\n  0xE98A97: 0x637E,\n  0xE98A99: 0x6421,\n  0xE98A9F: 0x6422,\n  0xE98AA0: 0x6423,\n  0xE98AA4: 0x6424,\n  0xE98AA5: 0x6425,\n  0xE98AA7: 0x6426,\n  0xE98AA8: 0x6427,\n  0xE98AAB: 0x6428,\n  0xE98AAF: 0x6429,\n  0xE98AB2: 0x642A,\n  0xE98AB6: 0x642B,\n  0xE98AB8: 0x642C,\n  0xE98ABA: 0x642D,\n  0xE98ABB: 0x642E,\n  0xE98ABC: 0x642F,\n  0xE98ABD: 0x6430,\n  0xE98ABF: 0x6431,\n  0xE98B80: 0x6432,\n  0xE98B81: 0x6433,\n  0xE98B82: 0x6434,\n  0xE98B83: 0x6435,\n  0xE98B85: 0x6436,\n  0xE98B86: 0x6437,\n  0xE98B87: 0x6438,\n  0xE98B88: 0x6439,\n  0xE98B8B: 0x643A,\n  0xE98B8C: 0x643B,\n  0xE98B8D: 0x643C,\n  0xE98B8E: 0x643D,\n  0xE98B90: 0x643E,\n  0xE98B93: 0x643F,\n  0xE98B95: 0x6440,\n  0xE98B97: 0x6441,\n  0xE98B98: 0x6442,\n  0xE98B99: 0x6443,\n  0xE98B9C: 0x6444,\n  0xE98B9D: 0x6445,\n  0xE98B9F: 0x6446,\n  0xE98BA0: 0x6447,\n  0xE98BA1: 0x6448,\n  0xE98BA3: 0x6449,\n  0xE98BA5: 0x644A,\n  0xE98BA7: 0x644B,\n  0xE98BA8: 0x644C,\n  0xE98BAC: 0x644D,\n  0xE98BAE: 0x644E,\n  0xE98BB0: 0x644F,\n  0xE98BB9: 0x6450,\n  0xE98BBB: 0x6451,\n  0xE98BBF: 0x6452,\n  0xE98C80: 0x6453,\n  0xE98C82: 0x6454,\n  0xE98C88: 0x6455,\n  0xE98C8D: 0x6456,\n  0xE98C91: 0x6457,\n  0xE98C94: 0x6458,\n  0xE98C95: 0x6459,\n  0xE98C9C: 0x645A,\n  0xE98C9D: 0x645B,\n  0xE98C9E: 0x645C,\n  0xE98C9F: 0x645D,\n  0xE98CA1: 0x645E,\n  0xE98CA4: 0x645F,\n  0xE98CA5: 0x6460,\n  0xE98CA7: 0x6461,\n  0xE98CA9: 0x6462,\n  0xE98CAA: 0x6463,\n  0xE98CB3: 0x6464,\n  0xE98CB4: 0x6465,\n  0xE98CB6: 0x6466,\n  0xE98CB7: 0x6467,\n  0xE98D87: 0x6468,\n  0xE98D88: 0x6469,\n  0xE98D89: 0x646A,\n  0xE98D90: 0x646B,\n  0xE98D91: 0x646C,\n  0xE98D92: 0x646D,\n  0xE98D95: 0x646E,\n  0xE98D97: 0x646F,\n  0xE98D98: 0x6470,\n  0xE98D9A: 0x6471,\n  0xE98D9E: 0x6472,\n  0xE98DA4: 0x6473,\n  0xE98DA5: 0x6474,\n  0xE98DA7: 0x6475,\n  0xE98DA9: 0x6476,\n  0xE98DAA: 0x6477,\n  0xE98DAD: 0x6478,\n  0xE98DAF: 0x6479,\n  0xE98DB0: 0x647A,\n  0xE98DB1: 0x647B,\n  0xE98DB3: 0x647C,\n  0xE98DB4: 0x647D,\n  0xE98DB6: 0x647E,\n  0xE98DBA: 0x6521,\n  0xE98DBD: 0x6522,\n  0xE98DBF: 0x6523,\n  0xE98E80: 0x6524,\n  0xE98E81: 0x6525,\n  0xE98E82: 0x6526,\n  0xE98E88: 0x6527,\n  0xE98E8A: 0x6528,\n  0xE98E8B: 0x6529,\n  0xE98E8D: 0x652A,\n  0xE98E8F: 0x652B,\n  0xE98E92: 0x652C,\n  0xE98E95: 0x652D,\n  0xE98E98: 0x652E,\n  0xE98E9B: 0x652F,\n  0xE98E9E: 0x6530,\n  0xE98EA1: 0x6531,\n  0xE98EA3: 0x6532,\n  0xE98EA4: 0x6533,\n  0xE98EA6: 0x6534,\n  0xE98EA8: 0x6535,\n  0xE98EAB: 0x6536,\n  0xE98EB4: 0x6537,\n  0xE98EB5: 0x6538,\n  0xE98EB6: 0x6539,\n  0xE98EBA: 0x653A,\n  0xE98EA9: 0x653B,\n  0xE98F81: 0x653C,\n  0xE98F84: 0x653D,\n  0xE98F85: 0x653E,\n  0xE98F86: 0x653F,\n  0xE98F87: 0x6540,\n  0xE98F89: 0x6541,\n  0xE98F8A: 0x6542,\n  0xE98F8B: 0x6543,\n  0xE98F8C: 0x6544,\n  0xE98F8D: 0x6545,\n  0xE98F93: 0x6546,\n  0xE98F99: 0x6547,\n  0xE98F9C: 0x6548,\n  0xE98F9E: 0x6549,\n  0xE98F9F: 0x654A,\n  0xE98FA2: 0x654B,\n  0xE98FA6: 0x654C,\n  0xE98FA7: 0x654D,\n  0xE98FB9: 0x654E,\n  0xE98FB7: 0x654F,\n  0xE98FB8: 0x6550,\n  0xE98FBA: 0x6551,\n  0xE98FBB: 0x6552,\n  0xE98FBD: 0x6553,\n  0xE99081: 0x6554,\n  0xE99082: 0x6555,\n  0xE99084: 0x6556,\n  0xE99088: 0x6557,\n  0xE99089: 0x6558,\n  0xE9908D: 0x6559,\n  0xE9908E: 0x655A,\n  0xE9908F: 0x655B,\n  0xE99095: 0x655C,\n  0xE99096: 0x655D,\n  0xE99097: 0x655E,\n  0xE9909F: 0x655F,\n  0xE990AE: 0x6560,\n  0xE990AF: 0x6561,\n  0xE990B1: 0x6562,\n  0xE990B2: 0x6563,\n  0xE990B3: 0x6564,\n  0xE990B4: 0x6565,\n  0xE990BB: 0x6566,\n  0xE990BF: 0x6567,\n  0xE990BD: 0x6568,\n  0xE99183: 0x6569,\n  0xE99185: 0x656A,\n  0xE99188: 0x656B,\n  0xE9918A: 0x656C,\n  0xE9918C: 0x656D,\n  0xE99195: 0x656E,\n  0xE99199: 0x656F,\n  0xE9919C: 0x6570,\n  0xE9919F: 0x6571,\n  0xE991A1: 0x6572,\n  0xE991A3: 0x6573,\n  0xE991A8: 0x6574,\n  0xE991AB: 0x6575,\n  0xE991AD: 0x6576,\n  0xE991AE: 0x6577,\n  0xE991AF: 0x6578,\n  0xE991B1: 0x6579,\n  0xE991B2: 0x657A,\n  0xE99284: 0x657B,\n  0xE99283: 0x657C,\n  0xE995B8: 0x657D,\n  0xE995B9: 0x657E,\n  0xE995BE: 0x6621,\n  0xE99684: 0x6622,\n  0xE99688: 0x6623,\n  0xE9968C: 0x6624,\n  0xE9968D: 0x6625,\n  0xE9968E: 0x6626,\n  0xE9969D: 0x6627,\n  0xE9969E: 0x6628,\n  0xE9969F: 0x6629,\n  0xE996A1: 0x662A,\n  0xE996A6: 0x662B,\n  0xE996A9: 0x662C,\n  0xE996AB: 0x662D,\n  0xE996AC: 0x662E,\n  0xE996B4: 0x662F,\n  0xE996B6: 0x6630,\n  0xE996BA: 0x6631,\n  0xE996BD: 0x6632,\n  0xE996BF: 0x6633,\n  0xE99786: 0x6634,\n  0xE99788: 0x6635,\n  0xE99789: 0x6636,\n  0xE9978B: 0x6637,\n  0xE99790: 0x6638,\n  0xE99791: 0x6639,\n  0xE99792: 0x663A,\n  0xE99793: 0x663B,\n  0xE99799: 0x663C,\n  0xE9979A: 0x663D,\n  0xE9979D: 0x663E,\n  0xE9979E: 0x663F,\n  0xE9979F: 0x6640,\n  0xE997A0: 0x6641,\n  0xE997A4: 0x6642,\n  0xE997A6: 0x6643,\n  0xE9989D: 0x6644,\n  0xE9989E: 0x6645,\n  0xE998A2: 0x6646,\n  0xE998A4: 0x6647,\n  0xE998A5: 0x6648,\n  0xE998A6: 0x6649,\n  0xE998AC: 0x664A,\n  0xE998B1: 0x664B,\n  0xE998B3: 0x664C,\n  0xE998B7: 0x664D,\n  0xE998B8: 0x664E,\n  0xE998B9: 0x664F,\n  0xE998BA: 0x6650,\n  0xE998BC: 0x6651,\n  0xE998BD: 0x6652,\n  0xE99981: 0x6653,\n  0xE99992: 0x6654,\n  0xE99994: 0x6655,\n  0xE99996: 0x6656,\n  0xE99997: 0x6657,\n  0xE99998: 0x6658,\n  0xE999A1: 0x6659,\n  0xE999AE: 0x665A,\n  0xE999B4: 0x665B,\n  0xE999BB: 0x665C,\n  0xE999BC: 0x665D,\n  0xE999BE: 0x665E,\n  0xE999BF: 0x665F,\n  0xE99A81: 0x6660,\n  0xE99A82: 0x6661,\n  0xE99A83: 0x6662,\n  0xE99A84: 0x6663,\n  0xE99A89: 0x6664,\n  0xE99A91: 0x6665,\n  0xE99A96: 0x6666,\n  0xE99A9A: 0x6667,\n  0xE99A9D: 0x6668,\n  0xE99A9F: 0x6669,\n  0xE99AA4: 0x666A,\n  0xE99AA5: 0x666B,\n  0xE99AA6: 0x666C,\n  0xE99AA9: 0x666D,\n  0xE99AAE: 0x666E,\n  0xE99AAF: 0x666F,\n  0xE99AB3: 0x6670,\n  0xE99ABA: 0x6671,\n  0xE99B8A: 0x6672,\n  0xE99B92: 0x6673,\n  0xE5B6B2: 0x6674,\n  0xE99B98: 0x6675,\n  0xE99B9A: 0x6676,\n  0xE99B9D: 0x6677,\n  0xE99B9E: 0x6678,\n  0xE99B9F: 0x6679,\n  0xE99BA9: 0x667A,\n  0xE99BAF: 0x667B,\n  0xE99BB1: 0x667C,\n  0xE99BBA: 0x667D,\n  0xE99C82: 0x667E,\n  0xE99C83: 0x6721,\n  0xE99C85: 0x6722,\n  0xE99C89: 0x6723,\n  0xE99C9A: 0x6724,\n  0xE99C9B: 0x6725,\n  0xE99C9D: 0x6726,\n  0xE99CA1: 0x6727,\n  0xE99CA2: 0x6728,\n  0xE99CA3: 0x6729,\n  0xE99CA8: 0x672A,\n  0xE99CB1: 0x672B,\n  0xE99CB3: 0x672C,\n  0xE99D81: 0x672D,\n  0xE99D83: 0x672E,\n  0xE99D8A: 0x672F,\n  0xE99D8E: 0x6730,\n  0xE99D8F: 0x6731,\n  0xE99D95: 0x6732,\n  0xE99D97: 0x6733,\n  0xE99D98: 0x6734,\n  0xE99D9A: 0x6735,\n  0xE99D9B: 0x6736,\n  0xE99DA3: 0x6737,\n  0xE99DA7: 0x6738,\n  0xE99DAA: 0x6739,\n  0xE99DAE: 0x673A,\n  0xE99DB3: 0x673B,\n  0xE99DB6: 0x673C,\n  0xE99DB7: 0x673D,\n  0xE99DB8: 0x673E,\n  0xE99DBB: 0x673F,\n  0xE99DBD: 0x6740,\n  0xE99DBF: 0x6741,\n  0xE99E80: 0x6742,\n  0xE99E89: 0x6743,\n  0xE99E95: 0x6744,\n  0xE99E96: 0x6745,\n  0xE99E97: 0x6746,\n  0xE99E99: 0x6747,\n  0xE99E9A: 0x6748,\n  0xE99E9E: 0x6749,\n  0xE99E9F: 0x674A,\n  0xE99EA2: 0x674B,\n  0xE99EAC: 0x674C,\n  0xE99EAE: 0x674D,\n  0xE99EB1: 0x674E,\n  0xE99EB2: 0x674F,\n  0xE99EB5: 0x6750,\n  0xE99EB6: 0x6751,\n  0xE99EB8: 0x6752,\n  0xE99EB9: 0x6753,\n  0xE99EBA: 0x6754,\n  0xE99EBC: 0x6755,\n  0xE99EBE: 0x6756,\n  0xE99EBF: 0x6757,\n  0xE99F81: 0x6758,\n  0xE99F84: 0x6759,\n  0xE99F85: 0x675A,\n  0xE99F87: 0x675B,\n  0xE99F89: 0x675C,\n  0xE99F8A: 0x675D,\n  0xE99F8C: 0x675E,\n  0xE99F8D: 0x675F,\n  0xE99F8E: 0x6760,\n  0xE99F90: 0x6761,\n  0xE99F91: 0x6762,\n  0xE99F94: 0x6763,\n  0xE99F97: 0x6764,\n  0xE99F98: 0x6765,\n  0xE99F99: 0x6766,\n  0xE99F9D: 0x6767,\n  0xE99F9E: 0x6768,\n  0xE99FA0: 0x6769,\n  0xE99F9B: 0x676A,\n  0xE99FA1: 0x676B,\n  0xE99FA4: 0x676C,\n  0xE99FAF: 0x676D,\n  0xE99FB1: 0x676E,\n  0xE99FB4: 0x676F,\n  0xE99FB7: 0x6770,\n  0xE99FB8: 0x6771,\n  0xE99FBA: 0x6772,\n  0xE9A087: 0x6773,\n  0xE9A08A: 0x6774,\n  0xE9A099: 0x6775,\n  0xE9A08D: 0x6776,\n  0xE9A08E: 0x6777,\n  0xE9A094: 0x6778,\n  0xE9A096: 0x6779,\n  0xE9A09C: 0x677A,\n  0xE9A09E: 0x677B,\n  0xE9A0A0: 0x677C,\n  0xE9A0A3: 0x677D,\n  0xE9A0A6: 0x677E,\n  0xE9A0AB: 0x6821,\n  0xE9A0AE: 0x6822,\n  0xE9A0AF: 0x6823,\n  0xE9A0B0: 0x6824,\n  0xE9A0B2: 0x6825,\n  0xE9A0B3: 0x6826,\n  0xE9A0B5: 0x6827,\n  0xE9A0A5: 0x6828,\n  0xE9A0BE: 0x6829,\n  0xE9A184: 0x682A,\n  0xE9A187: 0x682B,\n  0xE9A18A: 0x682C,\n  0xE9A191: 0x682D,\n  0xE9A192: 0x682E,\n  0xE9A193: 0x682F,\n  0xE9A196: 0x6830,\n  0xE9A197: 0x6831,\n  0xE9A199: 0x6832,\n  0xE9A19A: 0x6833,\n  0xE9A1A2: 0x6834,\n  0xE9A1A3: 0x6835,\n  0xE9A1A5: 0x6836,\n  0xE9A1A6: 0x6837,\n  0xE9A1AA: 0x6838,\n  0xE9A1AC: 0x6839,\n  0xE9A2AB: 0x683A,\n  0xE9A2AD: 0x683B,\n  0xE9A2AE: 0x683C,\n  0xE9A2B0: 0x683D,\n  0xE9A2B4: 0x683E,\n  0xE9A2B7: 0x683F,\n  0xE9A2B8: 0x6840,\n  0xE9A2BA: 0x6841,\n  0xE9A2BB: 0x6842,\n  0xE9A2BF: 0x6843,\n  0xE9A382: 0x6844,\n  0xE9A385: 0x6845,\n  0xE9A388: 0x6846,\n  0xE9A38C: 0x6847,\n  0xE9A3A1: 0x6848,\n  0xE9A3A3: 0x6849,\n  0xE9A3A5: 0x684A,\n  0xE9A3A6: 0x684B,\n  0xE9A3A7: 0x684C,\n  0xE9A3AA: 0x684D,\n  0xE9A3B3: 0x684E,\n  0xE9A3B6: 0x684F,\n  0xE9A482: 0x6850,\n  0xE9A487: 0x6851,\n  0xE9A488: 0x6852,\n  0xE9A491: 0x6853,\n  0xE9A495: 0x6854,\n  0xE9A496: 0x6855,\n  0xE9A497: 0x6856,\n  0xE9A49A: 0x6857,\n  0xE9A49B: 0x6858,\n  0xE9A49C: 0x6859,\n  0xE9A49F: 0x685A,\n  0xE9A4A2: 0x685B,\n  0xE9A4A6: 0x685C,\n  0xE9A4A7: 0x685D,\n  0xE9A4AB: 0x685E,\n  0xE9A4B1: 0x685F,\n  0xE9A4B2: 0x6860,\n  0xE9A4B3: 0x6861,\n  0xE9A4B4: 0x6862,\n  0xE9A4B5: 0x6863,\n  0xE9A4B9: 0x6864,\n  0xE9A4BA: 0x6865,\n  0xE9A4BB: 0x6866,\n  0xE9A4BC: 0x6867,\n  0xE9A580: 0x6868,\n  0xE9A581: 0x6869,\n  0xE9A586: 0x686A,\n  0xE9A587: 0x686B,\n  0xE9A588: 0x686C,\n  0xE9A58D: 0x686D,\n  0xE9A58E: 0x686E,\n  0xE9A594: 0x686F,\n  0xE9A598: 0x6870,\n  0xE9A599: 0x6871,\n  0xE9A59B: 0x6872,\n  0xE9A59C: 0x6873,\n  0xE9A59E: 0x6874,\n  0xE9A59F: 0x6875,\n  0xE9A5A0: 0x6876,\n  0xE9A69B: 0x6877,\n  0xE9A69D: 0x6878,\n  0xE9A69F: 0x6879,\n  0xE9A6A6: 0x687A,\n  0xE9A6B0: 0x687B,\n  0xE9A6B1: 0x687C,\n  0xE9A6B2: 0x687D,\n  0xE9A6B5: 0x687E,\n  0xE9A6B9: 0x6921,\n  0xE9A6BA: 0x6922,\n  0xE9A6BD: 0x6923,\n  0xE9A6BF: 0x6924,\n  0xE9A783: 0x6925,\n  0xE9A789: 0x6926,\n  0xE9A793: 0x6927,\n  0xE9A794: 0x6928,\n  0xE9A799: 0x6929,\n  0xE9A79A: 0x692A,\n  0xE9A79C: 0x692B,\n  0xE9A79E: 0x692C,\n  0xE9A7A7: 0x692D,\n  0xE9A7AA: 0x692E,\n  0xE9A7AB: 0x692F,\n  0xE9A7AC: 0x6930,\n  0xE9A7B0: 0x6931,\n  0xE9A7B4: 0x6932,\n  0xE9A7B5: 0x6933,\n  0xE9A7B9: 0x6934,\n  0xE9A7BD: 0x6935,\n  0xE9A7BE: 0x6936,\n  0xE9A882: 0x6937,\n  0xE9A883: 0x6938,\n  0xE9A884: 0x6939,\n  0xE9A88B: 0x693A,\n  0xE9A88C: 0x693B,\n  0xE9A890: 0x693C,\n  0xE9A891: 0x693D,\n  0xE9A896: 0x693E,\n  0xE9A89E: 0x693F,\n  0xE9A8A0: 0x6940,\n  0xE9A8A2: 0x6941,\n  0xE9A8A3: 0x6942,\n  0xE9A8A4: 0x6943,\n  0xE9A8A7: 0x6944,\n  0xE9A8AD: 0x6945,\n  0xE9A8AE: 0x6946,\n  0xE9A8B3: 0x6947,\n  0xE9A8B5: 0x6948,\n  0xE9A8B6: 0x6949,\n  0xE9A8B8: 0x694A,\n  0xE9A987: 0x694B,\n  0xE9A981: 0x694C,\n  0xE9A984: 0x694D,\n  0xE9A98A: 0x694E,\n  0xE9A98B: 0x694F,\n  0xE9A98C: 0x6950,\n  0xE9A98E: 0x6951,\n  0xE9A991: 0x6952,\n  0xE9A994: 0x6953,\n  0xE9A996: 0x6954,\n  0xE9A99D: 0x6955,\n  0xE9AAAA: 0x6956,\n  0xE9AAAC: 0x6957,\n  0xE9AAAE: 0x6958,\n  0xE9AAAF: 0x6959,\n  0xE9AAB2: 0x695A,\n  0xE9AAB4: 0x695B,\n  0xE9AAB5: 0x695C,\n  0xE9AAB6: 0x695D,\n  0xE9AAB9: 0x695E,\n  0xE9AABB: 0x695F,\n  0xE9AABE: 0x6960,\n  0xE9AABF: 0x6961,\n  0xE9AB81: 0x6962,\n  0xE9AB83: 0x6963,\n  0xE9AB86: 0x6964,\n  0xE9AB88: 0x6965,\n  0xE9AB8E: 0x6966,\n  0xE9AB90: 0x6967,\n  0xE9AB92: 0x6968,\n  0xE9AB95: 0x6969,\n  0xE9AB96: 0x696A,\n  0xE9AB97: 0x696B,\n  0xE9AB9B: 0x696C,\n  0xE9AB9C: 0x696D,\n  0xE9ABA0: 0x696E,\n  0xE9ABA4: 0x696F,\n  0xE9ABA5: 0x6970,\n  0xE9ABA7: 0x6971,\n  0xE9ABA9: 0x6972,\n  0xE9ABAC: 0x6973,\n  0xE9ABB2: 0x6974,\n  0xE9ABB3: 0x6975,\n  0xE9ABB5: 0x6976,\n  0xE9ABB9: 0x6977,\n  0xE9ABBA: 0x6978,\n  0xE9ABBD: 0x6979,\n  0xE9ABBF: 0x697A,\n  0xE9AC80: 0x697B,\n  0xE9AC81: 0x697C,\n  0xE9AC82: 0x697D,\n  0xE9AC83: 0x697E,\n  0xE9AC84: 0x6A21,\n  0xE9AC85: 0x6A22,\n  0xE9AC88: 0x6A23,\n  0xE9AC89: 0x6A24,\n  0xE9AC8B: 0x6A25,\n  0xE9AC8C: 0x6A26,\n  0xE9AC8D: 0x6A27,\n  0xE9AC8E: 0x6A28,\n  0xE9AC90: 0x6A29,\n  0xE9AC92: 0x6A2A,\n  0xE9AC96: 0x6A2B,\n  0xE9AC99: 0x6A2C,\n  0xE9AC9B: 0x6A2D,\n  0xE9AC9C: 0x6A2E,\n  0xE9ACA0: 0x6A2F,\n  0xE9ACA6: 0x6A30,\n  0xE9ACAB: 0x6A31,\n  0xE9ACAD: 0x6A32,\n  0xE9ACB3: 0x6A33,\n  0xE9ACB4: 0x6A34,\n  0xE9ACB5: 0x6A35,\n  0xE9ACB7: 0x6A36,\n  0xE9ACB9: 0x6A37,\n  0xE9ACBA: 0x6A38,\n  0xE9ACBD: 0x6A39,\n  0xE9AD88: 0x6A3A,\n  0xE9AD8B: 0x6A3B,\n  0xE9AD8C: 0x6A3C,\n  0xE9AD95: 0x6A3D,\n  0xE9AD96: 0x6A3E,\n  0xE9AD97: 0x6A3F,\n  0xE9AD9B: 0x6A40,\n  0xE9AD9E: 0x6A41,\n  0xE9ADA1: 0x6A42,\n  0xE9ADA3: 0x6A43,\n  0xE9ADA5: 0x6A44,\n  0xE9ADA6: 0x6A45,\n  0xE9ADA8: 0x6A46,\n  0xE9ADAA: 0x6A47,\n  0xE9ADAB: 0x6A48,\n  0xE9ADAC: 0x6A49,\n  0xE9ADAD: 0x6A4A,\n  0xE9ADAE: 0x6A4B,\n  0xE9ADB3: 0x6A4C,\n  0xE9ADB5: 0x6A4D,\n  0xE9ADB7: 0x6A4E,\n  0xE9ADB8: 0x6A4F,\n  0xE9ADB9: 0x6A50,\n  0xE9ADBF: 0x6A51,\n  0xE9AE80: 0x6A52,\n  0xE9AE84: 0x6A53,\n  0xE9AE85: 0x6A54,\n  0xE9AE86: 0x6A55,\n  0xE9AE87: 0x6A56,\n  0xE9AE89: 0x6A57,\n  0xE9AE8A: 0x6A58,\n  0xE9AE8B: 0x6A59,\n  0xE9AE8D: 0x6A5A,\n  0xE9AE8F: 0x6A5B,\n  0xE9AE90: 0x6A5C,\n  0xE9AE94: 0x6A5D,\n  0xE9AE9A: 0x6A5E,\n  0xE9AE9D: 0x6A5F,\n  0xE9AE9E: 0x6A60,\n  0xE9AEA6: 0x6A61,\n  0xE9AEA7: 0x6A62,\n  0xE9AEA9: 0x6A63,\n  0xE9AEAC: 0x6A64,\n  0xE9AEB0: 0x6A65,\n  0xE9AEB1: 0x6A66,\n  0xE9AEB2: 0x6A67,\n  0xE9AEB7: 0x6A68,\n  0xE9AEB8: 0x6A69,\n  0xE9AEBB: 0x6A6A,\n  0xE9AEBC: 0x6A6B,\n  0xE9AEBE: 0x6A6C,\n  0xE9AEBF: 0x6A6D,\n  0xE9AF81: 0x6A6E,\n  0xE9AF87: 0x6A6F,\n  0xE9AF88: 0x6A70,\n  0xE9AF8E: 0x6A71,\n  0xE9AF90: 0x6A72,\n  0xE9AF97: 0x6A73,\n  0xE9AF98: 0x6A74,\n  0xE9AF9D: 0x6A75,\n  0xE9AF9F: 0x6A76,\n  0xE9AFA5: 0x6A77,\n  0xE9AFA7: 0x6A78,\n  0xE9AFAA: 0x6A79,\n  0xE9AFAB: 0x6A7A,\n  0xE9AFAF: 0x6A7B,\n  0xE9AFB3: 0x6A7C,\n  0xE9AFB7: 0x6A7D,\n  0xE9AFB8: 0x6A7E,\n  0xE9AFB9: 0x6B21,\n  0xE9AFBA: 0x6B22,\n  0xE9AFBD: 0x6B23,\n  0xE9AFBF: 0x6B24,\n  0xE9B080: 0x6B25,\n  0xE9B082: 0x6B26,\n  0xE9B08B: 0x6B27,\n  0xE9B08F: 0x6B28,\n  0xE9B091: 0x6B29,\n  0xE9B096: 0x6B2A,\n  0xE9B098: 0x6B2B,\n  0xE9B099: 0x6B2C,\n  0xE9B09A: 0x6B2D,\n  0xE9B09C: 0x6B2E,\n  0xE9B09E: 0x6B2F,\n  0xE9B0A2: 0x6B30,\n  0xE9B0A3: 0x6B31,\n  0xE9B0A6: 0x6B32,\n  0xE9B0A7: 0x6B33,\n  0xE9B0A8: 0x6B34,\n  0xE9B0A9: 0x6B35,\n  0xE9B0AA: 0x6B36,\n  0xE9B0B1: 0x6B37,\n  0xE9B0B5: 0x6B38,\n  0xE9B0B6: 0x6B39,\n  0xE9B0B7: 0x6B3A,\n  0xE9B0BD: 0x6B3B,\n  0xE9B181: 0x6B3C,\n  0xE9B183: 0x6B3D,\n  0xE9B184: 0x6B3E,\n  0xE9B185: 0x6B3F,\n  0xE9B189: 0x6B40,\n  0xE9B18A: 0x6B41,\n  0xE9B18E: 0x6B42,\n  0xE9B18F: 0x6B43,\n  0xE9B190: 0x6B44,\n  0xE9B193: 0x6B45,\n  0xE9B194: 0x6B46,\n  0xE9B196: 0x6B47,\n  0xE9B198: 0x6B48,\n  0xE9B19B: 0x6B49,\n  0xE9B19D: 0x6B4A,\n  0xE9B19E: 0x6B4B,\n  0xE9B19F: 0x6B4C,\n  0xE9B1A3: 0x6B4D,\n  0xE9B1A9: 0x6B4E,\n  0xE9B1AA: 0x6B4F,\n  0xE9B19C: 0x6B50,\n  0xE9B1AB: 0x6B51,\n  0xE9B1A8: 0x6B52,\n  0xE9B1AE: 0x6B53,\n  0xE9B1B0: 0x6B54,\n  0xE9B1B2: 0x6B55,\n  0xE9B1B5: 0x6B56,\n  0xE9B1B7: 0x6B57,\n  0xE9B1BB: 0x6B58,\n  0xE9B3A6: 0x6B59,\n  0xE9B3B2: 0x6B5A,\n  0xE9B3B7: 0x6B5B,\n  0xE9B3B9: 0x6B5C,\n  0xE9B48B: 0x6B5D,\n  0xE9B482: 0x6B5E,\n  0xE9B491: 0x6B5F,\n  0xE9B497: 0x6B60,\n  0xE9B498: 0x6B61,\n  0xE9B49C: 0x6B62,\n  0xE9B49D: 0x6B63,\n  0xE9B49E: 0x6B64,\n  0xE9B4AF: 0x6B65,\n  0xE9B4B0: 0x6B66,\n  0xE9B4B2: 0x6B67,\n  0xE9B4B3: 0x6B68,\n  0xE9B4B4: 0x6B69,\n  0xE9B4BA: 0x6B6A,\n  0xE9B4BC: 0x6B6B,\n  0xE9B585: 0x6B6C,\n  0xE9B4BD: 0x6B6D,\n  0xE9B582: 0x6B6E,\n  0xE9B583: 0x6B6F,\n  0xE9B587: 0x6B70,\n  0xE9B58A: 0x6B71,\n  0xE9B593: 0x6B72,\n  0xE9B594: 0x6B73,\n  0xE9B59F: 0x6B74,\n  0xE9B5A3: 0x6B75,\n  0xE9B5A2: 0x6B76,\n  0xE9B5A5: 0x6B77,\n  0xE9B5A9: 0x6B78,\n  0xE9B5AA: 0x6B79,\n  0xE9B5AB: 0x6B7A,\n  0xE9B5B0: 0x6B7B,\n  0xE9B5B6: 0x6B7C,\n  0xE9B5B7: 0x6B7D,\n  0xE9B5BB: 0x6B7E,\n  0xE9B5BC: 0x6C21,\n  0xE9B5BE: 0x6C22,\n  0xE9B683: 0x6C23,\n  0xE9B684: 0x6C24,\n  0xE9B686: 0x6C25,\n  0xE9B68A: 0x6C26,\n  0xE9B68D: 0x6C27,\n  0xE9B68E: 0x6C28,\n  0xE9B692: 0x6C29,\n  0xE9B693: 0x6C2A,\n  0xE9B695: 0x6C2B,\n  0xE9B696: 0x6C2C,\n  0xE9B697: 0x6C2D,\n  0xE9B698: 0x6C2E,\n  0xE9B6A1: 0x6C2F,\n  0xE9B6AA: 0x6C30,\n  0xE9B6AC: 0x6C31,\n  0xE9B6AE: 0x6C32,\n  0xE9B6B1: 0x6C33,\n  0xE9B6B5: 0x6C34,\n  0xE9B6B9: 0x6C35,\n  0xE9B6BC: 0x6C36,\n  0xE9B6BF: 0x6C37,\n  0xE9B783: 0x6C38,\n  0xE9B787: 0x6C39,\n  0xE9B789: 0x6C3A,\n  0xE9B78A: 0x6C3B,\n  0xE9B794: 0x6C3C,\n  0xE9B795: 0x6C3D,\n  0xE9B796: 0x6C3E,\n  0xE9B797: 0x6C3F,\n  0xE9B79A: 0x6C40,\n  0xE9B79E: 0x6C41,\n  0xE9B79F: 0x6C42,\n  0xE9B7A0: 0x6C43,\n  0xE9B7A5: 0x6C44,\n  0xE9B7A7: 0x6C45,\n  0xE9B7A9: 0x6C46,\n  0xE9B7AB: 0x6C47,\n  0xE9B7AE: 0x6C48,\n  0xE9B7B0: 0x6C49,\n  0xE9B7B3: 0x6C4A,\n  0xE9B7B4: 0x6C4B,\n  0xE9B7BE: 0x6C4C,\n  0xE9B88A: 0x6C4D,\n  0xE9B882: 0x6C4E,\n  0xE9B887: 0x6C4F,\n  0xE9B88E: 0x6C50,\n  0xE9B890: 0x6C51,\n  0xE9B891: 0x6C52,\n  0xE9B892: 0x6C53,\n  0xE9B895: 0x6C54,\n  0xE9B896: 0x6C55,\n  0xE9B899: 0x6C56,\n  0xE9B89C: 0x6C57,\n  0xE9B89D: 0x6C58,\n  0xE9B9BA: 0x6C59,\n  0xE9B9BB: 0x6C5A,\n  0xE9B9BC: 0x6C5B,\n  0xE9BA80: 0x6C5C,\n  0xE9BA82: 0x6C5D,\n  0xE9BA83: 0x6C5E,\n  0xE9BA84: 0x6C5F,\n  0xE9BA85: 0x6C60,\n  0xE9BA87: 0x6C61,\n  0xE9BA8E: 0x6C62,\n  0xE9BA8F: 0x6C63,\n  0xE9BA96: 0x6C64,\n  0xE9BA98: 0x6C65,\n  0xE9BA9B: 0x6C66,\n  0xE9BA9E: 0x6C67,\n  0xE9BAA4: 0x6C68,\n  0xE9BAA8: 0x6C69,\n  0xE9BAAC: 0x6C6A,\n  0xE9BAAE: 0x6C6B,\n  0xE9BAAF: 0x6C6C,\n  0xE9BAB0: 0x6C6D,\n  0xE9BAB3: 0x6C6E,\n  0xE9BAB4: 0x6C6F,\n  0xE9BAB5: 0x6C70,\n  0xE9BB86: 0x6C71,\n  0xE9BB88: 0x6C72,\n  0xE9BB8B: 0x6C73,\n  0xE9BB95: 0x6C74,\n  0xE9BB9F: 0x6C75,\n  0xE9BBA4: 0x6C76,\n  0xE9BBA7: 0x6C77,\n  0xE9BBAC: 0x6C78,\n  0xE9BBAD: 0x6C79,\n  0xE9BBAE: 0x6C7A,\n  0xE9BBB0: 0x6C7B,\n  0xE9BBB1: 0x6C7C,\n  0xE9BBB2: 0x6C7D,\n  0xE9BBB5: 0x6C7E,\n  0xE9BBB8: 0x6D21,\n  0xE9BBBF: 0x6D22,\n  0xE9BC82: 0x6D23,\n  0xE9BC83: 0x6D24,\n  0xE9BC89: 0x6D25,\n  0xE9BC8F: 0x6D26,\n  0xE9BC90: 0x6D27,\n  0xE9BC91: 0x6D28,\n  0xE9BC92: 0x6D29,\n  0xE9BC94: 0x6D2A,\n  0xE9BC96: 0x6D2B,\n  0xE9BC97: 0x6D2C,\n  0xE9BC99: 0x6D2D,\n  0xE9BC9A: 0x6D2E,\n  0xE9BC9B: 0x6D2F,\n  0xE9BC9F: 0x6D30,\n  0xE9BCA2: 0x6D31,\n  0xE9BCA6: 0x6D32,\n  0xE9BCAA: 0x6D33,\n  0xE9BCAB: 0x6D34,\n  0xE9BCAF: 0x6D35,\n  0xE9BCB1: 0x6D36,\n  0xE9BCB2: 0x6D37,\n  0xE9BCB4: 0x6D38,\n  0xE9BCB7: 0x6D39,\n  0xE9BCB9: 0x6D3A,\n  0xE9BCBA: 0x6D3B,\n  0xE9BCBC: 0x6D3C,\n  0xE9BCBD: 0x6D3D,\n  0xE9BCBF: 0x6D3E,\n  0xE9BD81: 0x6D3F,\n  0xE9BD83: 0x6D40,\n  0xE9BD84: 0x6D41,\n  0xE9BD85: 0x6D42,\n  0xE9BD86: 0x6D43,\n  0xE9BD87: 0x6D44,\n  0xE9BD93: 0x6D45,\n  0xE9BD95: 0x6D46,\n  0xE9BD96: 0x6D47,\n  0xE9BD97: 0x6D48,\n  0xE9BD98: 0x6D49,\n  0xE9BD9A: 0x6D4A,\n  0xE9BD9D: 0x6D4B,\n  0xE9BD9E: 0x6D4C,\n  0xE9BDA8: 0x6D4D,\n  0xE9BDA9: 0x6D4E,\n  0xE9BDAD: 0x6D4F,\n  0xE9BDAE: 0x6D50,\n  0xE9BDAF: 0x6D51,\n  0xE9BDB0: 0x6D52,\n  0xE9BDB1: 0x6D53,\n  0xE9BDB3: 0x6D54,\n  0xE9BDB5: 0x6D55,\n  0xE9BDBA: 0x6D56,\n  0xE9BDBD: 0x6D57,\n  0xE9BE8F: 0x6D58,\n  0xE9BE90: 0x6D59,\n  0xE9BE91: 0x6D5A,\n  0xE9BE92: 0x6D5B,\n  0xE9BE94: 0x6D5C,\n  0xE9BE96: 0x6D5D,\n  0xE9BE97: 0x6D5E,\n  0xE9BE9E: 0x6D5F,\n  0xE9BEA1: 0x6D60,\n  0xE9BEA2: 0x6D61,\n  0xE9BEA3: 0x6D62,\n  0xE9BEA5: 0x6D63,\n  //FIXME: mojibake\n  0xE3809C: 0x2141\n};","/**\n * Encoding conversion table for JIS to UTF-8\n */\nvar JIS_TO_UTF8_TABLE = null;\nmodule.exports = JIS_TO_UTF8_TABLE;","/**\n * Encoding conversion table for JIS X 0212:1990 (Hojo-Kanji) to UTF-8\n */\nvar JISX0212_TO_UTF8_TABLE = null;\nmodule.exports = JISX0212_TO_UTF8_TABLE;","var config = require('./config');\n\nvar util = require('./util');\n\nvar EncodingDetect = require('./encoding-detect');\n\nvar EncodingTable = require('./encoding-table');\n/**\n * JIS to SJIS\n */\n\n\nfunction JISToSJIS(data) {\n  var results = [];\n  var index = 0;\n  var i = 0;\n  var len = data && data.length;\n  var b1, b2;\n\n  for (; i < len; i++) {\n    // escape sequence\n    while (data[i] === 0x1B) {\n      if (data[i + 1] === 0x24 && data[i + 2] === 0x42 || data[i + 1] === 0x24 && data[i + 2] === 0x40) {\n        index = 1;\n      } else if (data[i + 1] === 0x28 && data[i + 2] === 0x49) {\n        index = 2;\n      } else if (data[i + 1] === 0x24 && data[i + 2] === 0x28 && data[i + 3] === 0x44) {\n        index = 3;\n        i++;\n      } else {\n        index = 0;\n      }\n\n      i += 3;\n\n      if (data[i] === void 0) {\n        return results;\n      }\n    }\n\n    if (index === 1) {\n      b1 = data[i];\n      b2 = data[++i];\n\n      if (b1 & 0x01) {\n        b1 >>= 1;\n\n        if (b1 < 0x2F) {\n          b1 += 0x71;\n        } else {\n          b1 -= 0x4F;\n        }\n\n        if (b2 > 0x5F) {\n          b2 += 0x20;\n        } else {\n          b2 += 0x1F;\n        }\n      } else {\n        b1 >>= 1;\n\n        if (b1 <= 0x2F) {\n          b1 += 0x70;\n        } else {\n          b1 -= 0x50;\n        }\n\n        b2 += 0x7E;\n      }\n\n      results[results.length] = b1 & 0xFF;\n      results[results.length] = b2 & 0xFF;\n    } else if (index === 2) {\n      results[results.length] = data[i] + 0x80 & 0xFF;\n    } else if (index === 3) {\n      // Shift_JIS cannot convert JIS X 0212:1990.\n      results[results.length] = config.UNKNOWN_CHARACTER;\n    } else {\n      results[results.length] = data[i] & 0xFF;\n    }\n  }\n\n  return results;\n}\n\nexports.JISToSJIS = JISToSJIS;\n/**\n * JIS to EUCJP\n */\n\nfunction JISToEUCJP(data) {\n  var results = [];\n  var index = 0;\n  var len = data && data.length;\n  var i = 0;\n\n  for (; i < len; i++) {\n    // escape sequence\n    while (data[i] === 0x1B) {\n      if (data[i + 1] === 0x24 && data[i + 2] === 0x42 || data[i + 1] === 0x24 && data[i + 2] === 0x40) {\n        index = 1;\n      } else if (data[i + 1] === 0x28 && data[i + 2] === 0x49) {\n        index = 2;\n      } else if (data[i + 1] === 0x24 && data[i + 2] === 0x28 && data[i + 3] === 0x44) {\n        index = 3;\n        i++;\n      } else {\n        index = 0;\n      }\n\n      i += 3;\n\n      if (data[i] === void 0) {\n        return results;\n      }\n    }\n\n    if (index === 1) {\n      results[results.length] = data[i] + 0x80 & 0xFF;\n      results[results.length] = data[++i] + 0x80 & 0xFF;\n    } else if (index === 2) {\n      results[results.length] = 0x8E;\n      results[results.length] = data[i] + 0x80 & 0xFF;\n    } else if (index === 3) {\n      results[results.length] = 0x8F;\n      results[results.length] = data[i] + 0x80 & 0xFF;\n      results[results.length] = data[++i] + 0x80 & 0xFF;\n    } else {\n      results[results.length] = data[i] & 0xFF;\n    }\n  }\n\n  return results;\n}\n\nexports.JISToEUCJP = JISToEUCJP;\n/**\n * SJIS to JIS\n */\n\nfunction SJISToJIS(data) {\n  var results = [];\n  var index = 0;\n  var len = data && data.length;\n  var i = 0;\n  var b1, b2;\n  var esc = [0x1B, 0x28, 0x42, 0x1B, 0x24, 0x42, 0x1B, 0x28, 0x49];\n\n  for (; i < len; i++) {\n    b1 = data[i];\n\n    if (b1 >= 0xA1 && b1 <= 0xDF) {\n      if (index !== 2) {\n        index = 2;\n        results[results.length] = esc[6];\n        results[results.length] = esc[7];\n        results[results.length] = esc[8];\n      }\n\n      results[results.length] = b1 - 0x80 & 0xFF;\n    } else if (b1 >= 0x80) {\n      if (index !== 1) {\n        index = 1;\n        results[results.length] = esc[3];\n        results[results.length] = esc[4];\n        results[results.length] = esc[5];\n      }\n\n      b1 <<= 1;\n      b2 = data[++i];\n\n      if (b2 < 0x9F) {\n        if (b1 < 0x13F) {\n          b1 -= 0xE1;\n        } else {\n          b1 -= 0x61;\n        }\n\n        if (b2 > 0x7E) {\n          b2 -= 0x20;\n        } else {\n          b2 -= 0x1F;\n        }\n      } else {\n        if (b1 < 0x13F) {\n          b1 -= 0xE0;\n        } else {\n          b1 -= 0x60;\n        }\n\n        b2 -= 0x7E;\n      }\n\n      results[results.length] = b1 & 0xFF;\n      results[results.length] = b2 & 0xFF;\n    } else {\n      if (index !== 0) {\n        index = 0;\n        results[results.length] = esc[0];\n        results[results.length] = esc[1];\n        results[results.length] = esc[2];\n      }\n\n      results[results.length] = b1 & 0xFF;\n    }\n  }\n\n  if (index !== 0) {\n    results[results.length] = esc[0];\n    results[results.length] = esc[1];\n    results[results.length] = esc[2];\n  }\n\n  return results;\n}\n\nexports.SJISToJIS = SJISToJIS;\n/**\n * SJIS to EUCJP\n */\n\nfunction SJISToEUCJP(data) {\n  var results = [];\n  var len = data && data.length;\n  var i = 0;\n  var b1, b2;\n\n  for (; i < len; i++) {\n    b1 = data[i];\n\n    if (b1 >= 0xA1 && b1 <= 0xDF) {\n      results[results.length] = 0x8E;\n      results[results.length] = b1;\n    } else if (b1 >= 0x81) {\n      b2 = data[++i];\n      b1 <<= 1;\n\n      if (b2 < 0x9F) {\n        if (b1 < 0x13F) {\n          b1 -= 0x61;\n        } else {\n          b1 -= 0xE1;\n        }\n\n        if (b2 > 0x7E) {\n          b2 += 0x60;\n        } else {\n          b2 += 0x61;\n        }\n      } else {\n        if (b1 < 0x13F) {\n          b1 -= 0x60;\n        } else {\n          b1 -= 0xE0;\n        }\n\n        b2 += 0x02;\n      }\n\n      results[results.length] = b1 & 0xFF;\n      results[results.length] = b2 & 0xFF;\n    } else {\n      results[results.length] = b1 & 0xFF;\n    }\n  }\n\n  return results;\n}\n\nexports.SJISToEUCJP = SJISToEUCJP;\n/**\n * EUCJP to JIS\n */\n\nfunction EUCJPToJIS(data) {\n  var results = [];\n  var index = 0;\n  var len = data && data.length;\n  var i = 0;\n  var b; // escape sequence\n\n  var esc = [0x1B, 0x28, 0x42, 0x1B, 0x24, 0x42, 0x1B, 0x28, 0x49, 0x1B, 0x24, 0x28, 0x44];\n\n  for (; i < len; i++) {\n    b = data[i];\n\n    if (b === 0x8E) {\n      if (index !== 2) {\n        index = 2;\n        results[results.length] = esc[6];\n        results[results.length] = esc[7];\n        results[results.length] = esc[8];\n      }\n\n      results[results.length] = data[++i] - 0x80 & 0xFF;\n    } else if (b === 0x8F) {\n      if (index !== 3) {\n        index = 3;\n        results[results.length] = esc[9];\n        results[results.length] = esc[10];\n        results[results.length] = esc[11];\n        results[results.length] = esc[12];\n      }\n\n      results[results.length] = data[++i] - 0x80 & 0xFF;\n      results[results.length] = data[++i] - 0x80 & 0xFF;\n    } else if (b > 0x8E) {\n      if (index !== 1) {\n        index = 1;\n        results[results.length] = esc[3];\n        results[results.length] = esc[4];\n        results[results.length] = esc[5];\n      }\n\n      results[results.length] = b - 0x80 & 0xFF;\n      results[results.length] = data[++i] - 0x80 & 0xFF;\n    } else {\n      if (index !== 0) {\n        index = 0;\n        results[results.length] = esc[0];\n        results[results.length] = esc[1];\n        results[results.length] = esc[2];\n      }\n\n      results[results.length] = b & 0xFF;\n    }\n  }\n\n  if (index !== 0) {\n    results[results.length] = esc[0];\n    results[results.length] = esc[1];\n    results[results.length] = esc[2];\n  }\n\n  return results;\n}\n\nexports.EUCJPToJIS = EUCJPToJIS;\n/**\n * EUCJP to SJIS\n */\n\nfunction EUCJPToSJIS(data) {\n  var results = [];\n  var len = data && data.length;\n  var i = 0;\n  var b1, b2;\n\n  for (; i < len; i++) {\n    b1 = data[i];\n\n    if (b1 === 0x8F) {\n      results[results.length] = config.UNKNOWN_CHARACTER;\n      i += 2;\n    } else if (b1 > 0x8E) {\n      b2 = data[++i];\n\n      if (b1 & 0x01) {\n        b1 >>= 1;\n\n        if (b1 < 0x6F) {\n          b1 += 0x31;\n        } else {\n          b1 += 0x71;\n        }\n\n        if (b2 > 0xDF) {\n          b2 -= 0x60;\n        } else {\n          b2 -= 0x61;\n        }\n      } else {\n        b1 >>= 1;\n\n        if (b1 <= 0x6F) {\n          b1 += 0x30;\n        } else {\n          b1 += 0x70;\n        }\n\n        b2 -= 0x02;\n      }\n\n      results[results.length] = b1 & 0xFF;\n      results[results.length] = b2 & 0xFF;\n    } else if (b1 === 0x8E) {\n      results[results.length] = data[++i] & 0xFF;\n    } else {\n      results[results.length] = b1 & 0xFF;\n    }\n  }\n\n  return results;\n}\n\nexports.EUCJPToSJIS = EUCJPToSJIS;\n/**\n * SJIS To UTF-8\n */\n\nfunction SJISToUTF8(data) {\n  config.init_JIS_TO_UTF8_TABLE();\n  var results = [];\n  var i = 0;\n  var len = data && data.length;\n  var b, b1, b2, u2, u3, jis, utf8;\n\n  for (; i < len; i++) {\n    b = data[i];\n\n    if (b >= 0xA1 && b <= 0xDF) {\n      b2 = b - 0x40;\n      u2 = 0xBC | b2 >> 6 & 0x03;\n      u3 = 0x80 | b2 & 0x3F;\n      results[results.length] = 0xEF;\n      results[results.length] = u2 & 0xFF;\n      results[results.length] = u3 & 0xFF;\n    } else if (b >= 0x80) {\n      b1 = b << 1;\n      b2 = data[++i];\n\n      if (b2 < 0x9F) {\n        if (b1 < 0x13F) {\n          b1 -= 0xE1;\n        } else {\n          b1 -= 0x61;\n        }\n\n        if (b2 > 0x7E) {\n          b2 -= 0x20;\n        } else {\n          b2 -= 0x1F;\n        }\n      } else {\n        if (b1 < 0x13F) {\n          b1 -= 0xE0;\n        } else {\n          b1 -= 0x60;\n        }\n\n        b2 -= 0x7E;\n      }\n\n      b1 &= 0xFF;\n      jis = (b1 << 8) + b2;\n      utf8 = EncodingTable.JIS_TO_UTF8_TABLE[jis];\n\n      if (utf8 === void 0) {\n        results[results.length] = config.UNKNOWN_CHARACTER;\n      } else {\n        if (utf8 < 0xFFFF) {\n          results[results.length] = utf8 >> 8 & 0xFF;\n          results[results.length] = utf8 & 0xFF;\n        } else {\n          results[results.length] = utf8 >> 16 & 0xFF;\n          results[results.length] = utf8 >> 8 & 0xFF;\n          results[results.length] = utf8 & 0xFF;\n        }\n      }\n    } else {\n      results[results.length] = data[i] & 0xFF;\n    }\n  }\n\n  return results;\n}\n\nexports.SJISToUTF8 = SJISToUTF8;\n/**\n * EUC-JP to UTF-8\n */\n\nfunction EUCJPToUTF8(data) {\n  config.init_JIS_TO_UTF8_TABLE();\n  var results = [];\n  var i = 0;\n  var len = data && data.length;\n  var b, b2, u2, u3, j2, j3, jis, utf8;\n\n  for (; i < len; i++) {\n    b = data[i];\n\n    if (b === 0x8E) {\n      b2 = data[++i] - 0x40;\n      u2 = 0xBC | b2 >> 6 & 0x03;\n      u3 = 0x80 | b2 & 0x3F;\n      results[results.length] = 0xEF;\n      results[results.length] = u2 & 0xFF;\n      results[results.length] = u3 & 0xFF;\n    } else if (b === 0x8F) {\n      j2 = data[++i] - 0x80;\n      j3 = data[++i] - 0x80;\n      jis = (j2 << 8) + j3;\n      utf8 = EncodingTable.JISX0212_TO_UTF8_TABLE[jis];\n\n      if (utf8 === void 0) {\n        results[results.length] = config.UNKNOWN_CHARACTER;\n      } else {\n        if (utf8 < 0xFFFF) {\n          results[results.length] = utf8 >> 8 & 0xFF;\n          results[results.length] = utf8 & 0xFF;\n        } else {\n          results[results.length] = utf8 >> 16 & 0xFF;\n          results[results.length] = utf8 >> 8 & 0xFF;\n          results[results.length] = utf8 & 0xFF;\n        }\n      }\n    } else if (b >= 0x80) {\n      jis = (b - 0x80 << 8) + (data[++i] - 0x80);\n      utf8 = EncodingTable.JIS_TO_UTF8_TABLE[jis];\n\n      if (utf8 === void 0) {\n        results[results.length] = config.UNKNOWN_CHARACTER;\n      } else {\n        if (utf8 < 0xFFFF) {\n          results[results.length] = utf8 >> 8 & 0xFF;\n          results[results.length] = utf8 & 0xFF;\n        } else {\n          results[results.length] = utf8 >> 16 & 0xFF;\n          results[results.length] = utf8 >> 8 & 0xFF;\n          results[results.length] = utf8 & 0xFF;\n        }\n      }\n    } else {\n      results[results.length] = data[i] & 0xFF;\n    }\n  }\n\n  return results;\n}\n\nexports.EUCJPToUTF8 = EUCJPToUTF8;\n/**\n * JIS to UTF-8\n */\n\nfunction JISToUTF8(data) {\n  config.init_JIS_TO_UTF8_TABLE();\n  var results = [];\n  var index = 0;\n  var i = 0;\n  var len = data && data.length;\n  var b2, u2, u3, jis, utf8;\n\n  for (; i < len; i++) {\n    while (data[i] === 0x1B) {\n      if (data[i + 1] === 0x24 && data[i + 2] === 0x42 || data[i + 1] === 0x24 && data[i + 2] === 0x40) {\n        index = 1;\n      } else if (data[i + 1] === 0x28 && data[i + 2] === 0x49) {\n        index = 2;\n      } else if (data[i + 1] === 0x24 && data[i + 2] === 0x28 && data[i + 3] === 0x44) {\n        index = 3;\n        i++;\n      } else {\n        index = 0;\n      }\n\n      i += 3;\n\n      if (data[i] === void 0) {\n        return results;\n      }\n    }\n\n    if (index === 1) {\n      jis = (data[i] << 8) + data[++i];\n      utf8 = EncodingTable.JIS_TO_UTF8_TABLE[jis];\n\n      if (utf8 === void 0) {\n        results[results.length] = config.UNKNOWN_CHARACTER;\n      } else {\n        if (utf8 < 0xFFFF) {\n          results[results.length] = utf8 >> 8 & 0xFF;\n          results[results.length] = utf8 & 0xFF;\n        } else {\n          results[results.length] = utf8 >> 16 & 0xFF;\n          results[results.length] = utf8 >> 8 & 0xFF;\n          results[results.length] = utf8 & 0xFF;\n        }\n      }\n    } else if (index === 2) {\n      b2 = data[i] + 0x40;\n      u2 = 0xBC | b2 >> 6 & 0x03;\n      u3 = 0x80 | b2 & 0x3F;\n      results[results.length] = 0xEF;\n      results[results.length] = u2 & 0xFF;\n      results[results.length] = u3 & 0xFF;\n    } else if (index === 3) {\n      jis = (data[i] << 8) + data[++i];\n      utf8 = EncodingTable.JISX0212_TO_UTF8_TABLE[jis];\n\n      if (utf8 === void 0) {\n        results[results.length] = config.UNKNOWN_CHARACTER;\n      } else {\n        if (utf8 < 0xFFFF) {\n          results[results.length] = utf8 >> 8 & 0xFF;\n          results[results.length] = utf8 & 0xFF;\n        } else {\n          results[results.length] = utf8 >> 16 & 0xFF;\n          results[results.length] = utf8 >> 8 & 0xFF;\n          results[results.length] = utf8 & 0xFF;\n        }\n      }\n    } else {\n      results[results.length] = data[i] & 0xFF;\n    }\n  }\n\n  return results;\n}\n\nexports.JISToUTF8 = JISToUTF8;\n/**\n * UTF-8 to SJIS\n */\n\nfunction UTF8ToSJIS(data) {\n  var results = [];\n  var i = 0;\n  var len = data && data.length;\n  var b, b1, b2, utf8, jis;\n\n  for (; i < len; i++) {\n    b = data[i];\n\n    if (b >= 0x80) {\n      if (b <= 0xDF) {\n        // 2 bytes\n        utf8 = (b << 8) + data[++i];\n      } else {\n        // 3 bytes\n        utf8 = (b << 16) + (data[++i] << 8) + (data[++i] & 0xFF);\n      }\n\n      jis = EncodingTable.UTF8_TO_JIS_TABLE[utf8];\n\n      if (jis === void 0) {\n        results[results.length] = config.UNKNOWN_CHARACTER;\n      } else {\n        if (jis < 0xFF) {\n          results[results.length] = jis + 0x80;\n        } else {\n          if (jis > 0x10000) {\n            jis -= 0x10000;\n          }\n\n          b1 = jis >> 8;\n          b2 = jis & 0xFF;\n\n          if (b1 & 0x01) {\n            b1 >>= 1;\n\n            if (b1 < 0x2F) {\n              b1 += 0x71;\n            } else {\n              b1 -= 0x4F;\n            }\n\n            if (b2 > 0x5F) {\n              b2 += 0x20;\n            } else {\n              b2 += 0x1F;\n            }\n          } else {\n            b1 >>= 1;\n\n            if (b1 <= 0x2F) {\n              b1 += 0x70;\n            } else {\n              b1 -= 0x50;\n            }\n\n            b2 += 0x7E;\n          }\n\n          results[results.length] = b1 & 0xFF;\n          results[results.length] = b2 & 0xFF;\n        }\n      }\n    } else {\n      results[results.length] = data[i] & 0xFF;\n    }\n  }\n\n  return results;\n}\n\nexports.UTF8ToSJIS = UTF8ToSJIS;\n/**\n * UTF-8 to EUC-JP\n */\n\nfunction UTF8ToEUCJP(data) {\n  var results = [];\n  var i = 0;\n  var len = data && data.length;\n  var b, utf8, jis;\n\n  for (; i < len; i++) {\n    b = data[i];\n\n    if (b >= 0x80) {\n      if (b <= 0xDF) {\n        utf8 = (data[i++] << 8) + data[i];\n      } else {\n        utf8 = (data[i++] << 16) + (data[i++] << 8) + (data[i] & 0xFF);\n      }\n\n      jis = EncodingTable.UTF8_TO_JIS_TABLE[utf8];\n\n      if (jis === void 0) {\n        jis = EncodingTable.UTF8_TO_JISX0212_TABLE[utf8];\n\n        if (jis === void 0) {\n          results[results.length] = config.UNKNOWN_CHARACTER;\n        } else {\n          results[results.length] = 0x8F;\n          results[results.length] = (jis >> 8) - 0x80 & 0xFF;\n          results[results.length] = (jis & 0xFF) - 0x80 & 0xFF;\n        }\n      } else {\n        if (jis > 0x10000) {\n          jis -= 0x10000;\n        }\n\n        if (jis < 0xFF) {\n          results[results.length] = 0x8E;\n          results[results.length] = jis - 0x80 & 0xFF;\n        } else {\n          results[results.length] = (jis >> 8) - 0x80 & 0xFF;\n          results[results.length] = (jis & 0xFF) - 0x80 & 0xFF;\n        }\n      }\n    } else {\n      results[results.length] = data[i] & 0xFF;\n    }\n  }\n\n  return results;\n}\n\nexports.UTF8ToEUCJP = UTF8ToEUCJP;\n/**\n * UTF-8 to JIS\n */\n\nfunction UTF8ToJIS(data) {\n  var results = [];\n  var index = 0;\n  var len = data && data.length;\n  var i = 0;\n  var b, utf8, jis;\n  var esc = [0x1B, 0x28, 0x42, 0x1B, 0x24, 0x42, 0x1B, 0x28, 0x49, 0x1B, 0x24, 0x28, 0x44];\n\n  for (; i < len; i++) {\n    b = data[i];\n\n    if (b < 0x80) {\n      if (index !== 0) {\n        index = 0;\n        results[results.length] = esc[0];\n        results[results.length] = esc[1];\n        results[results.length] = esc[2];\n      }\n\n      results[results.length] = b & 0xFF;\n    } else {\n      if (b <= 0xDF) {\n        utf8 = (data[i] << 8) + data[++i];\n      } else {\n        utf8 = (data[i] << 16) + (data[++i] << 8) + data[++i];\n      }\n\n      jis = EncodingTable.UTF8_TO_JIS_TABLE[utf8];\n\n      if (jis === void 0) {\n        jis = EncodingTable.UTF8_TO_JISX0212_TABLE[utf8];\n\n        if (jis === void 0) {\n          if (index !== 0) {\n            index = 0;\n            results[results.length] = esc[0];\n            results[results.length] = esc[1];\n            results[results.length] = esc[2];\n          }\n\n          results[results.length] = config.UNKNOWN_CHARACTER;\n        } else {\n          // JIS X 0212:1990\n          if (index !== 3) {\n            index = 3;\n            results[results.length] = esc[9];\n            results[results.length] = esc[10];\n            results[results.length] = esc[11];\n            results[results.length] = esc[12];\n          }\n\n          results[results.length] = jis >> 8 & 0xFF;\n          results[results.length] = jis & 0xFF;\n        }\n      } else {\n        if (jis > 0x10000) {\n          jis -= 0x10000;\n        }\n\n        if (jis < 0xFF) {\n          // Halfwidth Katakana\n          if (index !== 2) {\n            index = 2;\n            results[results.length] = esc[6];\n            results[results.length] = esc[7];\n            results[results.length] = esc[8];\n          }\n\n          results[results.length] = jis & 0xFF;\n        } else {\n          if (index !== 1) {\n            index = 1;\n            results[results.length] = esc[3];\n            results[results.length] = esc[4];\n            results[results.length] = esc[5];\n          }\n\n          results[results.length] = jis >> 8 & 0xFF;\n          results[results.length] = jis & 0xFF;\n        }\n      }\n    }\n  }\n\n  if (index !== 0) {\n    results[results.length] = esc[0];\n    results[results.length] = esc[1];\n    results[results.length] = esc[2];\n  }\n\n  return results;\n}\n\nexports.UTF8ToJIS = UTF8ToJIS;\n/**\n * UTF-16 (JavaScript Unicode array) to UTF-8\n */\n\nfunction UNICODEToUTF8(data) {\n  var results = [];\n  var i = 0;\n  var len = data && data.length;\n  var c, second;\n\n  for (; i < len; i++) {\n    c = data[i]; // high surrogate\n\n    if (c >= 0xD800 && c <= 0xDBFF && i + 1 < len) {\n      second = data[i + 1]; // low surrogate\n\n      if (second >= 0xDC00 && second <= 0xDFFF) {\n        c = (c - 0xD800) * 0x400 + second - 0xDC00 + 0x10000;\n        i++;\n      }\n    }\n\n    if (c < 0x80) {\n      results[results.length] = c;\n    } else if (c < 0x800) {\n      results[results.length] = 0xC0 | c >> 6 & 0x1F;\n      results[results.length] = 0x80 | c & 0x3F;\n    } else if (c < 0x10000) {\n      results[results.length] = 0xE0 | c >> 12 & 0xF;\n      results[results.length] = 0x80 | c >> 6 & 0x3F;\n      results[results.length] = 0x80 | c & 0x3F;\n    } else if (c < 0x200000) {\n      results[results.length] = 0xF0 | c >> 18 & 0xF;\n      results[results.length] = 0x80 | c >> 12 & 0x3F;\n      results[results.length] = 0x80 | c >> 6 & 0x3F;\n      results[results.length] = 0x80 | c & 0x3F;\n    }\n  }\n\n  return results;\n}\n\nexports.UNICODEToUTF8 = UNICODEToUTF8;\n/**\n * UTF-8 to UTF-16 (JavaScript Unicode array)\n */\n\nfunction UTF8ToUNICODE(data) {\n  var results = [];\n  var i = 0;\n  var len = data && data.length;\n  var n, c, c2, c3, c4, code;\n\n  while (i < len) {\n    c = data[i++];\n    n = c >> 4;\n\n    if (n >= 0 && n <= 7) {\n      // 0xxx xxxx\n      code = c;\n    } else if (n === 12 || n === 13) {\n      // 110x xxxx\n      // 10xx xxxx\n      c2 = data[i++];\n      code = (c & 0x1F) << 6 | c2 & 0x3F;\n    } else if (n === 14) {\n      // 1110 xxxx\n      // 10xx xxxx\n      // 10xx xxxx\n      c2 = data[i++];\n      c3 = data[i++];\n      code = (c & 0x0F) << 12 | (c2 & 0x3F) << 6 | c3 & 0x3F;\n    } else if (n === 15) {\n      // 1111 0xxx\n      // 10xx xxxx\n      // 10xx xxxx\n      // 10xx xxxx\n      c2 = data[i++];\n      c3 = data[i++];\n      c4 = data[i++];\n      code = (c & 0x7) << 18 | (c2 & 0x3F) << 12 | (c3 & 0x3F) << 6 | c4 & 0x3F;\n    }\n\n    if (code <= 0xFFFF) {\n      results[results.length] = code;\n    } else {\n      // Split in surrogate halves\n      code -= 0x10000;\n      results[results.length] = (code >> 10) + 0xD800; // High surrogate\n\n      results[results.length] = code % 0x400 + 0xDC00; // Low surrogate\n    }\n  }\n\n  return results;\n}\n\nexports.UTF8ToUNICODE = UTF8ToUNICODE;\n/**\n * UTF-16 (JavaScript Unicode array) to UTF-16\n *\n * UTF-16BE (big-endian)\n * Note: this function does not prepend the BOM by default.\n *\n * RFC 2781 4.3 Interpreting text labelled as UTF-16\n *   If the first two octets of the text is not 0xFE followed by\n *   0xFF, and is not 0xFF followed by 0xFE, then the text SHOULD be\n *   interpreted as being big-endian.\n *\n * @link https://www.ietf.org/rfc/rfc2781.txt\n * UTF-16, an encoding of ISO 10646\n */\n\nfunction UNICODEToUTF16(data, options) {\n  var results;\n\n  if (options && options.bom) {\n    var optBom = options.bom;\n\n    if (!util.isString(optBom)) {\n      optBom = 'BE';\n    }\n\n    var bom, utf16;\n\n    if (optBom.charAt(0).toUpperCase() === 'B') {\n      // Big-endian\n      bom = [0xFE, 0xFF];\n      utf16 = UNICODEToUTF16BE(data);\n    } else {\n      // Little-endian\n      bom = [0xFF, 0xFE];\n      utf16 = UNICODEToUTF16LE(data);\n    }\n\n    results = [];\n    results[0] = bom[0];\n    results[1] = bom[1];\n\n    for (var i = 0, len = utf16.length; i < len; i++) {\n      results[results.length] = utf16[i];\n    }\n  } else {\n    // Without BOM: Convert as BE (SHOULD).\n    results = UNICODEToUTF16BE(data);\n  }\n\n  return results;\n}\n\nexports.UNICODEToUTF16 = UNICODEToUTF16;\n/**\n * UTF-16 (JavaScript Unicode array) to UTF-16BE\n *\n * @link https://www.ietf.org/rfc/rfc2781.txt\n * UTF-16, an encoding of ISO 10646\n */\n\nfunction UNICODEToUTF16BE(data) {\n  var results = [];\n  var i = 0;\n  var len = data && data.length;\n  var c;\n\n  while (i < len) {\n    c = data[i++];\n\n    if (c <= 0xFF) {\n      results[results.length] = 0;\n      results[results.length] = c;\n    } else if (c <= 0xFFFF) {\n      results[results.length] = c >> 8 & 0xFF;\n      results[results.length] = c & 0xFF;\n    }\n  }\n\n  return results;\n}\n\nexports.UNICODEToUTF16BE = UNICODEToUTF16BE;\n/**\n * UTF-16 (JavaScript Unicode array) to UTF-16LE\n *\n * @link https://www.ietf.org/rfc/rfc2781.txt\n * UTF-16, an encoding of ISO 10646\n */\n\nfunction UNICODEToUTF16LE(data) {\n  var results = [];\n  var i = 0;\n  var len = data && data.length;\n  var c;\n\n  while (i < len) {\n    c = data[i++];\n\n    if (c <= 0xFF) {\n      results[results.length] = c;\n      results[results.length] = 0;\n    } else if (c <= 0xFFFF) {\n      results[results.length] = c & 0xFF;\n      results[results.length] = c >> 8 & 0xFF;\n    }\n  }\n\n  return results;\n}\n\nexports.UNICODEToUTF16LE = UNICODEToUTF16LE;\n/**\n * UTF-16BE to UTF-16 (JavaScript Unicode array)\n *\n * @link https://www.ietf.org/rfc/rfc2781.txt\n * UTF-16, an encoding of ISO 10646\n */\n\nfunction UTF16BEToUNICODE(data) {\n  var results = [];\n  var i = 0;\n  var len = data && data.length;\n  var c1, c2;\n\n  if (len >= 2 && (data[0] === 0xFE && data[1] === 0xFF || data[0] === 0xFF && data[1] === 0xFE)) {\n    i = 2;\n  }\n\n  while (i < len) {\n    c1 = data[i++];\n    c2 = data[i++];\n\n    if (c1 === 0) {\n      results[results.length] = c2;\n    } else {\n      results[results.length] = (c1 & 0xFF) << 8 | c2 & 0xFF;\n    }\n  }\n\n  return results;\n}\n\nexports.UTF16BEToUNICODE = UTF16BEToUNICODE;\n/**\n * UTF-16LE to UTF-16 (JavaScript Unicode array)\n *\n * @link https://www.ietf.org/rfc/rfc2781.txt\n * UTF-16, an encoding of ISO 10646\n */\n\nfunction UTF16LEToUNICODE(data) {\n  var results = [];\n  var i = 0;\n  var len = data && data.length;\n  var c1, c2;\n\n  if (len >= 2 && (data[0] === 0xFE && data[1] === 0xFF || data[0] === 0xFF && data[1] === 0xFE)) {\n    i = 2;\n  }\n\n  while (i < len) {\n    c1 = data[i++];\n    c2 = data[i++];\n\n    if (c2 === 0) {\n      results[results.length] = c1;\n    } else {\n      results[results.length] = (c2 & 0xFF) << 8 | c1 & 0xFF;\n    }\n  }\n\n  return results;\n}\n\nexports.UTF16LEToUNICODE = UTF16LEToUNICODE;\n/**\n * UTF-16 to UTF-16 (JavaScript Unicode array)\n *\n * @link https://www.ietf.org/rfc/rfc2781.txt\n * UTF-16, an encoding of ISO 10646\n */\n\nfunction UTF16ToUNICODE(data) {\n  var results = [];\n  var i = 0;\n  var len = data && data.length;\n  var isLE = false;\n  var first = true;\n  var c1, c2;\n\n  while (i < len) {\n    c1 = data[i++];\n    c2 = data[i++];\n\n    if (first && i === 2) {\n      first = false;\n\n      if (c1 === 0xFE && c2 === 0xFF) {\n        isLE = false;\n      } else if (c1 === 0xFF && c2 === 0xFE) {\n        // Little-endian\n        isLE = true;\n      } else {\n        isLE = EncodingDetect.isUTF16LE(data);\n        i = 0;\n      }\n\n      continue;\n    }\n\n    if (isLE) {\n      if (c2 === 0) {\n        results[results.length] = c1;\n      } else {\n        results[results.length] = (c2 & 0xFF) << 8 | c1 & 0xFF;\n      }\n    } else {\n      if (c1 === 0) {\n        results[results.length] = c2;\n      } else {\n        results[results.length] = (c1 & 0xFF) << 8 | c2 & 0xFF;\n      }\n    }\n  }\n\n  return results;\n}\n\nexports.UTF16ToUNICODE = UTF16ToUNICODE;\n/**\n * UTF-16 to UTF-16BE\n */\n\nfunction UTF16ToUTF16BE(data) {\n  var results = [];\n  var i = 0;\n  var len = data && data.length;\n  var isLE = false;\n  var first = true;\n  var c1, c2;\n\n  while (i < len) {\n    c1 = data[i++];\n    c2 = data[i++];\n\n    if (first && i === 2) {\n      first = false;\n\n      if (c1 === 0xFE && c2 === 0xFF) {\n        isLE = false;\n      } else if (c1 === 0xFF && c2 === 0xFE) {\n        // Little-endian\n        isLE = true;\n      } else {\n        isLE = EncodingDetect.isUTF16LE(data);\n        i = 0;\n      }\n\n      continue;\n    }\n\n    if (isLE) {\n      results[results.length] = c2;\n      results[results.length] = c1;\n    } else {\n      results[results.length] = c1;\n      results[results.length] = c2;\n    }\n  }\n\n  return results;\n}\n\nexports.UTF16ToUTF16BE = UTF16ToUTF16BE;\n/**\n * UTF-16BE to UTF-16\n */\n\nfunction UTF16BEToUTF16(data, options) {\n  var isLE = false;\n  var bom;\n\n  if (options && options.bom) {\n    var optBom = options.bom;\n\n    if (!util.isString(optBom)) {\n      optBom = 'BE';\n    }\n\n    if (optBom.charAt(0).toUpperCase() === 'B') {\n      // Big-endian\n      bom = [0xFE, 0xFF];\n    } else {\n      // Little-endian\n      bom = [0xFF, 0xFE];\n      isLE = true;\n    }\n  }\n\n  var results = [];\n  var len = data && data.length;\n  var i = 0;\n\n  if (len >= 2 && (data[0] === 0xFE && data[1] === 0xFF || data[0] === 0xFF && data[1] === 0xFE)) {\n    i = 2;\n  }\n\n  if (bom) {\n    results[0] = bom[0];\n    results[1] = bom[1];\n  }\n\n  var c1, c2;\n\n  while (i < len) {\n    c1 = data[i++];\n    c2 = data[i++];\n\n    if (isLE) {\n      results[results.length] = c2;\n      results[results.length] = c1;\n    } else {\n      results[results.length] = c1;\n      results[results.length] = c2;\n    }\n  }\n\n  return results;\n}\n\nexports.UTF16BEToUTF16 = UTF16BEToUTF16;\n/**\n * UTF-16 to UTF-16LE\n */\n\nfunction UTF16ToUTF16LE(data) {\n  var results = [];\n  var i = 0;\n  var len = data && data.length;\n  var isLE = false;\n  var first = true;\n  var c1, c2;\n\n  while (i < len) {\n    c1 = data[i++];\n    c2 = data[i++];\n\n    if (first && i === 2) {\n      first = false;\n\n      if (c1 === 0xFE && c2 === 0xFF) {\n        isLE = false;\n      } else if (c1 === 0xFF && c2 === 0xFE) {\n        // Little-endian\n        isLE = true;\n      } else {\n        isLE = EncodingDetect.isUTF16LE(data);\n        i = 0;\n      }\n\n      continue;\n    }\n\n    if (isLE) {\n      results[results.length] = c1;\n      results[results.length] = c2;\n    } else {\n      results[results.length] = c2;\n      results[results.length] = c1;\n    }\n  }\n\n  return results;\n}\n\nexports.UTF16ToUTF16LE = UTF16ToUTF16LE;\n/**\n * UTF-16LE to UTF-16\n */\n\nfunction UTF16LEToUTF16(data, options) {\n  var isLE = false;\n  var bom;\n\n  if (options && options.bom) {\n    var optBom = options.bom;\n\n    if (!util.isString(optBom)) {\n      optBom = 'BE';\n    }\n\n    if (optBom.charAt(0).toUpperCase() === 'B') {\n      // Big-endian\n      bom = [0xFE, 0xFF];\n    } else {\n      // Little-endian\n      bom = [0xFF, 0xFE];\n      isLE = true;\n    }\n  }\n\n  var results = [];\n  var len = data && data.length;\n  var i = 0;\n\n  if (len >= 2 && (data[0] === 0xFE && data[1] === 0xFF || data[0] === 0xFF && data[1] === 0xFE)) {\n    i = 2;\n  }\n\n  if (bom) {\n    results[0] = bom[0];\n    results[1] = bom[1];\n  }\n\n  var c1, c2;\n\n  while (i < len) {\n    c1 = data[i++];\n    c2 = data[i++];\n\n    if (isLE) {\n      results[results.length] = c1;\n      results[results.length] = c2;\n    } else {\n      results[results.length] = c2;\n      results[results.length] = c1;\n    }\n  }\n\n  return results;\n}\n\nexports.UTF16LEToUTF16 = UTF16LEToUTF16;\n/**\n * UTF-16BE to UTF-16LE\n */\n\nfunction UTF16BEToUTF16LE(data) {\n  var results = [];\n  var i = 0;\n  var len = data && data.length;\n  var c1, c2;\n\n  if (len >= 2 && (data[0] === 0xFE && data[1] === 0xFF || data[0] === 0xFF && data[1] === 0xFE)) {\n    i = 2;\n  }\n\n  while (i < len) {\n    c1 = data[i++];\n    c2 = data[i++];\n    results[results.length] = c2;\n    results[results.length] = c1;\n  }\n\n  return results;\n}\n\nexports.UTF16BEToUTF16LE = UTF16BEToUTF16LE;\n/**\n * UTF-16LE to UTF-16BE\n */\n\nfunction UTF16LEToUTF16BE(data) {\n  return UTF16BEToUTF16LE(data);\n}\n\nexports.UTF16LEToUTF16BE = UTF16LEToUTF16BE;\n/**\n * UTF-16 (JavaScript Unicode array) to JIS\n */\n\nfunction UNICODEToJIS(data) {\n  return UTF8ToJIS(UNICODEToUTF8(data));\n}\n\nexports.UNICODEToJIS = UNICODEToJIS;\n/**\n * JIS to UTF-16 (JavaScript Unicode array)\n */\n\nfunction JISToUNICODE(data) {\n  return UTF8ToUNICODE(JISToUTF8(data));\n}\n\nexports.JISToUNICODE = JISToUNICODE;\n/**\n * UTF-16 (JavaScript Unicode array) to EUCJP\n */\n\nfunction UNICODEToEUCJP(data) {\n  return UTF8ToEUCJP(UNICODEToUTF8(data));\n}\n\nexports.UNICODEToEUCJP = UNICODEToEUCJP;\n/**\n * EUCJP to UTF-16 (JavaScript Unicode array)\n */\n\nfunction EUCJPToUNICODE(data) {\n  return UTF8ToUNICODE(EUCJPToUTF8(data));\n}\n\nexports.EUCJPToUNICODE = EUCJPToUNICODE;\n/**\n * UTF-16 (JavaScript Unicode array) to SJIS\n */\n\nfunction UNICODEToSJIS(data) {\n  return UTF8ToSJIS(UNICODEToUTF8(data));\n}\n\nexports.UNICODEToSJIS = UNICODEToSJIS;\n/**\n * SJIS to UTF-16 (JavaScript Unicode array)\n */\n\nfunction SJISToUNICODE(data) {\n  return UTF8ToUNICODE(SJISToUTF8(data));\n}\n\nexports.SJISToUNICODE = SJISToUNICODE;\n/**\n * UTF-8 to UTF-16\n */\n\nfunction UTF8ToUTF16(data, options) {\n  return UNICODEToUTF16(UTF8ToUNICODE(data), options);\n}\n\nexports.UTF8ToUTF16 = UTF8ToUTF16;\n/**\n * UTF-16 to UTF-8\n */\n\nfunction UTF16ToUTF8(data) {\n  return UNICODEToUTF8(UTF16ToUNICODE(data));\n}\n\nexports.UTF16ToUTF8 = UTF16ToUTF8;\n/**\n * UTF-8 to UTF-16BE\n */\n\nfunction UTF8ToUTF16BE(data) {\n  return UNICODEToUTF16BE(UTF8ToUNICODE(data));\n}\n\nexports.UTF8ToUTF16BE = UTF8ToUTF16BE;\n/**\n * UTF-16BE to UTF-8\n */\n\nfunction UTF16BEToUTF8(data) {\n  return UNICODEToUTF8(UTF16BEToUNICODE(data));\n}\n\nexports.UTF16BEToUTF8 = UTF16BEToUTF8;\n/**\n * UTF-8 to UTF-16LE\n */\n\nfunction UTF8ToUTF16LE(data) {\n  return UNICODEToUTF16LE(UTF8ToUNICODE(data));\n}\n\nexports.UTF8ToUTF16LE = UTF8ToUTF16LE;\n/**\n * UTF-16LE to UTF-8\n */\n\nfunction UTF16LEToUTF8(data) {\n  return UNICODEToUTF8(UTF16LEToUNICODE(data));\n}\n\nexports.UTF16LEToUTF8 = UTF16LEToUTF8;\n/**\n * JIS to UTF-16\n */\n\nfunction JISToUTF16(data, options) {\n  return UTF8ToUTF16(JISToUTF8(data), options);\n}\n\nexports.JISToUTF16 = JISToUTF16;\n/**\n * UTF-16 to JIS\n */\n\nfunction UTF16ToJIS(data) {\n  return UTF8ToJIS(UTF16ToUTF8(data));\n}\n\nexports.UTF16ToJIS = UTF16ToJIS;\n/**\n * JIS to UTF-16BE\n */\n\nfunction JISToUTF16BE(data) {\n  return UTF8ToUTF16BE(JISToUTF8(data));\n}\n\nexports.JISToUTF16BE = JISToUTF16BE;\n/**\n * UTF-16BE to JIS\n */\n\nfunction UTF16BEToJIS(data) {\n  return UTF8ToJIS(UTF16BEToUTF8(data));\n}\n\nexports.UTF16BEToJIS = UTF16BEToJIS;\n/**\n * JIS to UTF-16LE\n */\n\nfunction JISToUTF16LE(data) {\n  return UTF8ToUTF16LE(JISToUTF8(data));\n}\n\nexports.JISToUTF16LE = JISToUTF16LE;\n/**\n * UTF-16LE to JIS\n */\n\nfunction UTF16LEToJIS(data) {\n  return UTF8ToJIS(UTF16LEToUTF8(data));\n}\n\nexports.UTF16LEToJIS = UTF16LEToJIS;\n/**\n * EUC-JP to UTF-16\n */\n\nfunction EUCJPToUTF16(data, options) {\n  return UTF8ToUTF16(EUCJPToUTF8(data), options);\n}\n\nexports.EUCJPToUTF16 = EUCJPToUTF16;\n/**\n * UTF-16 to EUC-JP\n */\n\nfunction UTF16ToEUCJP(data) {\n  return UTF8ToEUCJP(UTF16ToUTF8(data));\n}\n\nexports.UTF16ToEUCJP = UTF16ToEUCJP;\n/**\n * EUC-JP to UTF-16BE\n */\n\nfunction EUCJPToUTF16BE(data) {\n  return UTF8ToUTF16BE(EUCJPToUTF8(data));\n}\n\nexports.EUCJPToUTF16BE = EUCJPToUTF16BE;\n/**\n * UTF-16BE to EUC-JP\n */\n\nfunction UTF16BEToEUCJP(data) {\n  return UTF8ToEUCJP(UTF16BEToUTF8(data));\n}\n\nexports.UTF16BEToEUCJP = UTF16BEToEUCJP;\n/**\n * EUC-JP to UTF-16LE\n */\n\nfunction EUCJPToUTF16LE(data) {\n  return UTF8ToUTF16LE(EUCJPToUTF8(data));\n}\n\nexports.EUCJPToUTF16LE = EUCJPToUTF16LE;\n/**\n * UTF-16LE to EUC-JP\n */\n\nfunction UTF16LEToEUCJP(data) {\n  return UTF8ToEUCJP(UTF16LEToUTF8(data));\n}\n\nexports.UTF16LEToEUCJP = UTF16LEToEUCJP;\n/**\n * SJIS to UTF-16\n */\n\nfunction SJISToUTF16(data, options) {\n  return UTF8ToUTF16(SJISToUTF8(data), options);\n}\n\nexports.SJISToUTF16 = SJISToUTF16;\n/**\n * UTF-16 to SJIS\n */\n\nfunction UTF16ToSJIS(data) {\n  return UTF8ToSJIS(UTF16ToUTF8(data));\n}\n\nexports.UTF16ToSJIS = UTF16ToSJIS;\n/**\n * SJIS to UTF-16BE\n */\n\nfunction SJISToUTF16BE(data) {\n  return UTF8ToUTF16BE(SJISToUTF8(data));\n}\n\nexports.SJISToUTF16BE = SJISToUTF16BE;\n/**\n * UTF-16BE to SJIS\n */\n\nfunction UTF16BEToSJIS(data) {\n  return UTF8ToSJIS(UTF16BEToUTF8(data));\n}\n\nexports.UTF16BEToSJIS = UTF16BEToSJIS;\n/**\n * SJIS to UTF-16LE\n */\n\nfunction SJISToUTF16LE(data) {\n  return UTF8ToUTF16LE(SJISToUTF8(data));\n}\n\nexports.SJISToUTF16LE = SJISToUTF16LE;\n/**\n * UTF-16LE to SJIS\n */\n\nfunction UTF16LEToSJIS(data) {\n  return UTF8ToSJIS(UTF16LEToUTF8(data));\n}\n\nexports.UTF16LEToSJIS = UTF16LEToSJIS;","/**\n * Katakana table\n */\nexports.HANKANA_TABLE = {\n  0x3001: 0xFF64,\n  0x3002: 0xFF61,\n  0x300C: 0xFF62,\n  0x300D: 0xFF63,\n  0x309B: 0xFF9E,\n  0x309C: 0xFF9F,\n  0x30A1: 0xFF67,\n  0x30A2: 0xFF71,\n  0x30A3: 0xFF68,\n  0x30A4: 0xFF72,\n  0x30A5: 0xFF69,\n  0x30A6: 0xFF73,\n  0x30A7: 0xFF6A,\n  0x30A8: 0xFF74,\n  0x30A9: 0xFF6B,\n  0x30AA: 0xFF75,\n  0x30AB: 0xFF76,\n  0x30AD: 0xFF77,\n  0x30AF: 0xFF78,\n  0x30B1: 0xFF79,\n  0x30B3: 0xFF7A,\n  0x30B5: 0xFF7B,\n  0x30B7: 0xFF7C,\n  0x30B9: 0xFF7D,\n  0x30BB: 0xFF7E,\n  0x30BD: 0xFF7F,\n  0x30BF: 0xFF80,\n  0x30C1: 0xFF81,\n  0x30C3: 0xFF6F,\n  0x30C4: 0xFF82,\n  0x30C6: 0xFF83,\n  0x30C8: 0xFF84,\n  0x30CA: 0xFF85,\n  0x30CB: 0xFF86,\n  0x30CC: 0xFF87,\n  0x30CD: 0xFF88,\n  0x30CE: 0xFF89,\n  0x30CF: 0xFF8A,\n  0x30D2: 0xFF8B,\n  0x30D5: 0xFF8C,\n  0x30D8: 0xFF8D,\n  0x30DB: 0xFF8E,\n  0x30DE: 0xFF8F,\n  0x30DF: 0xFF90,\n  0x30E0: 0xFF91,\n  0x30E1: 0xFF92,\n  0x30E2: 0xFF93,\n  0x30E3: 0xFF6C,\n  0x30E4: 0xFF94,\n  0x30E5: 0xFF6D,\n  0x30E6: 0xFF95,\n  0x30E7: 0xFF6E,\n  0x30E8: 0xFF96,\n  0x30E9: 0xFF97,\n  0x30EA: 0xFF98,\n  0x30EB: 0xFF99,\n  0x30EC: 0xFF9A,\n  0x30ED: 0xFF9B,\n  0x30EF: 0xFF9C,\n  0x30F2: 0xFF66,\n  0x30F3: 0xFF9D,\n  0x30FB: 0xFF65,\n  0x30FC: 0xFF70\n};\nexports.HANKANA_SONANTS = {\n  0x30F4: 0xFF73,\n  0x30F7: 0xFF9C,\n  0x30FA: 0xFF66\n};\nexports.HANKANA_MARKS = [0xFF9E, 0xFF9F];\n/**\n * Zenkaku table [U+FF61] - [U+FF9F]\n */\n\nexports.ZENKANA_TABLE = [0x3002, 0x300C, 0x300D, 0x3001, 0x30FB, 0x30F2, 0x30A1, 0x30A3, 0x30A5, 0x30A7, 0x30A9, 0x30E3, 0x30E5, 0x30E7, 0x30C3, 0x30FC, 0x30A2, 0x30A4, 0x30A6, 0x30A8, 0x30AA, 0x30AB, 0x30AD, 0x30AF, 0x30B1, 0x30B3, 0x30B5, 0x30B7, 0x30B9, 0x30BB, 0x30BD, 0x30BF, 0x30C1, 0x30C4, 0x30C6, 0x30C8, 0x30CA, 0x30CB, 0x30CC, 0x30CD, 0x30CE, 0x30CF, 0x30D2, 0x30D5, 0x30D8, 0x30DB, 0x30DE, 0x30DF, 0x30E0, 0x30E1, 0x30E2, 0x30E4, 0x30E6, 0x30E8, 0x30E9, 0x30EA, 0x30EB, 0x30EC, 0x30ED, 0x30EF, 0x30F3, 0x309B, 0x309C];","$(document).on('turbolinks:load', function() {\n  // 価格表 詳細 / 選択 / 新規作成 画面\n  if (g_prices.is_prices_edit || g_prices.is_prices_show || g_prices.is_optional_prices_edit || g_prices.is_optional_prices_show) {\n    const reservation_method = (g_prices.is_prices_edit || g_prices.is_prices_show) ? 'admin' : 'optional';\n    const prices_name = (reservation_method == 'admin') ? 'prices' : 'optional_prices';\n    const prices_edit_action = (reservation_method == 'admin') ? 'calendar' : 'new';\n    const prices_show_json_path = (room_id, start_on_value) => (\n      '/rooms/' + room_id + '/' + prices_name + '/' + start_on_value + '.json'\n    );\n    const prices_edit_path = (room_id, source_room_id, start_on_value) => (\n      '/rooms/' + room_id + '/' + prices_name + '/' + prices_edit_action + '?source=' + source_room_id + '&start_on=' + start_on_value\n    );\n\n    // 価格表 詳細 / 選択 画面\n    if(g_prices.is_prices_show || g_prices.is_optional_prices_show) {\n      window.g_prices.show_update_prices = function (room_id, start_on_value) {\n        $.getJSON(\n          prices_show_json_path(room_id, start_on_value),\n          function (prices) {\n            switch (reservation_method) {\n              case 'admin':\n                // price_calendar_readonly.jsに定義\n                g_prices.show_render_calendar(prices);\n                break;\n              case 'optional':\n                // optional_price.jsに定義\n                g_prices.show_render_optional_prices(prices);\n                break;\n            }\n          }\n        );\n      };\n\n      // 価格表 選択 (_select_price.html)\n      if (g_prices.is_select_price) {\n        const select_price_facility = $('#select_price_facility');\n        const select_price_room = $('#select_price_room');\n        const select_price_start_on = $('#select_price_start_on');\n        const button_copy_selected_price = $('#copy_selected_price');\n\n        const select_price_facility_save = $('#select_price_facility_save');\n        const select_price_room_save = $('#select_price_room_save');\n        const select_price_start_on_save = $('#select_price_start_on_save');\n\n        // 価格表の選択 初期化処理\n\n        // _select_price.html.slimで設定されているprices_edit_room_id, select_price_availablesを使用\n        window.g_prices.select_prices_init = function() {\n          const prices_show_update_prices = function (facility_id, room_id, start_on_value) {\n            g_prices.show_update_prices(room_id, start_on_value);\n          };\n          const set_select_option = function (select, option_data, default_value) {\n            select.empty();\n            for (data of option_data) {\n              let newOption = new Option(data.text, data.value, false, false);\n              select.append(newOption);\n            }\n            select.val(default_value);\n            select.trigger('change');\n          };\n          const facility_rooms = (facility_id) => select_price_availables[facility_id].rooms;\n          const room_start_on = (facility_id, room_id) => select_price_availables[facility_id].room[room_id].start_on;\n\n          // ブラウザ「戻る」→「進む」で選択肢値が不当になる問題(turbolinksが画面更新時select2.jsの選択値を変更してしまう)対処\n          // 保存しておいたものを復元\n          if (select_price_facility_save.val() != '') {\n            select_price_facility.val(select_price_facility_save.val());\n          }\n          if (select_price_room_save.val() != '') {\n            select_price_room.val(select_price_room_save.val());\n          }\n          if (select_price_start_on_save.val() != '') {\n            select_price_start_on.val(select_price_start_on_save.val());\n          }\n\n          // セレクトボックスの初期化\n\n          // 施設\n\n          select_price_facility.select2();\n          select_price_facility.on('select2:select', function (e) {\n            const data = e.params.data;\n\n            const facility_id = data.id;\n            const room_id = facility_rooms(facility_id)[0].value;\n            const start_on = room_start_on(facility_id, room_id);\n            const start_on_value = start_on[start_on.length - 1].value;\n\n            set_select_option(select_price_room, facility_rooms(facility_id), room_id);\n            set_select_option(select_price_start_on, start_on, start_on_value);\n            prices_show_update_prices(facility_id, room_id, start_on_value);\n          });\n\n          // 部屋\n\n          select_price_room.select2();\n          select_price_room.on('select2:select', function (e) {\n            const data = e.params.data;\n\n            const facility_id = select_price_facility.val();\n            const room_id = data.id;\n            const start_on = room_start_on(facility_id, room_id);\n            const start_on_value = start_on[start_on.length - 1].value;\n\n            set_select_option(select_price_start_on, start_on, start_on_value);\n            prices_show_update_prices(facility_id, room_id, start_on_value);\n          });\n\n          // 反映日\n\n          select_price_start_on.select2();\n          select_price_start_on.on('select2:select', function (e) {\n            const data = e.params.data;\n\n            const facility_id = select_price_facility.val();\n            const room_id = select_price_room.val();\n            const start_on_value = data.id;\n\n            prices_show_update_prices(facility_id, room_id, start_on_value);\n          });\n\n          // 決定ボタン\n\n          button_copy_selected_price.on('click', function (e) {\n            e.preventDefault();\n            e.stopPropagation();\n            e.stopImmediatePropagation();\n\n            const room_id = select_price_room.val();\n            const start_on_value = select_price_start_on.val();\n\n            location.href = prices_edit_path(prices_edit_room_id, room_id, start_on_value);\n          });\n\n          // 価格表の選択 施設/部屋/反映日セレクトボックス値によるカレンダー(時間枠部屋)または表(時間あたり部屋)の初期描画\n\n          prices_show_update_prices(select_price_facility.val(), select_price_room.val(), select_price_start_on.val());\n        };\n\n        // 画面を離れる前の 価格表選択 終了処理\n        window.g_prices.select_prices_fini = function() {\n          // ブラウザ「戻る」→「進む」で選択肢が不当になる問題(turbolinksが画面更新時select2.jsの選択値を変更してしまう)対処\n          // 保存しておく\n          select_price_facility_save.val(select_price_facility.val());\n          select_price_room_save.val(select_price_room.val());\n          select_price_start_on_save.val(select_price_start_on.val());\n\n          // 再度ブラウザの移動で戻ってきたときselect2が多重初期化される問題を回避\n          // ブラウザ「戻る」「進む」等の画面遷移前にselect2を破棄しておく\n          select_price_facility.select2('destroy');\n          select_price_room.select2('destroy');\n          select_price_start_on.select2('destroy');\n        }\n      }\n    }\n\n    window.g_prices.prices_by_date_type = function (prices, date_type) {\n      let prices_dt = [];\n      for (const price of prices) {\n        if (price.date_type == date_type) {\n          prices_dt.push(price);\n        }\n      }\n      return prices_dt;\n    };\n\n    // 価格表 新規作成\n    if (g_prices.is_prices_edit || g_prices.is_optional_prices_edit) {\n      // 時間枠価格表 が編集中かどうか\n      const prices_edit_is_editing = function () {\n        return !$.isEmptyObject(input_values);\n      }\n\n      window.g_prices.confirm_editing = function () {\n        let is_editing;\n        switch (reservation_method) {\n          case 'admin':\n            is_editing = prices_edit_is_editing();\n            break;\n          case 'optional':\n            // optional_price.jsに定義\n            is_editing = g_prices.optional_prices_is_editing();\n            break;\n          default:\n            is_editing = false;\n        }\n\n        if (is_editing) {\n          return window.confirm('作成中の価格表を破棄します。よろしいですか?');\n        }\n        return true;\n      };\n    }\n\n    // 時間枠価格表 新規作成\n    if (g_prices.is_prices_edit) {\n      const price_calendar_date_no = [1, 2, 3, 4, 5, 6, 7];\n      const price_calendar_week = no => ('#price-calendar-week' + no);\n\n      // 他ブロックから参照するのでvar宣言\n      var input_values = {};\n\n      const get_calendar_events_from_input_values = function (this_calendar) {\n        const date_type = this_calendar.data('date-type');\n        let events = [];\n        $.each(input_values, function(k, v) {\n          if (date_type !== v.date_type) { return true }\n          events.push({\n            id: k,\n            date_type: v.date_type,\n            title: '\\\\ ' + v.yen,\n            yen: v.yen,\n            start: v.checkin,\n            end: v.checkout,\n          })\n        });\n        return events;\n      }\n\n      // $('#price-calendar-weekday, #price-calendar-holiday').empty();\n      $('#price-calendar-week1, #price-calendar-week2, #price-calendar-week3, #price-calendar-week4, #price-calendar-week5, #price-calendar-week6, #price-calendar-week7').empty();\n      const params = calendar_base_params();\n      Object.assign(params, {\n        // Defines the buttons and title at the top of the calendar.\n        header: {\n          //left: 'today prev,next title',\n          left: '',\n          center: '',\n          //right: 'month agendaWeek agendaDay'\n          right: ''\n        },\n        // The initial view when the calendar loads.\n        defaultView: 'agendaDay',\n        minTime: '00:00:00',\n        maxTime: '24:00:00',\n        selectHelper: true,\n        ignoreTimezone: false,\n\n        // FIXME eventDrop, eventResize\n        editable: false,\n        // editable: true,\n\n        droppable: false,\n        displayEventEnd: true,\n        //timeFormat: 'HH:mm',\n        eventColor: 'rgba(150,150,150,0.2)',\n        eventTextColor: \"green\",\n\n        // Triggered when a date/time selection is made.\n        select: function(start, end, jsEvent, view, resource) {\n          createEvent(start, end, view);\n        },\n        eventDrop: function(event, delta, revertFunc, jsEvent, ui, view) {\n          // FIXME TypeError: this.eventInstances[0] is undefined\n          // May need to upgrade fullcalendar ver3.10.0 >> ver4.3.0~\n          // Since there are many destructive changes, we will postpone it this time.\n          // ref: https://github.com/fullcalendar/fullcalendar/issues/4127\n          //      https://github.com/Apexal/late/issues/155\n\n          // moveEvent(event, view);\n        },\n        eventResize: function(event, delta, revertFunc, jsEvent, ui, view) {\n          // FIXME TypeError: this.eventInstances[0] is undefined\n          // May need to upgrade fullcalendar ver3.10.0 >> ver4.3.0~\n          // Since there are many destructive changes, we will postpone it this time.\n          // ref: https://github.com/fullcalendar/fullcalendar/issues/4127\n          //      https://github.com/Apexal/late/issues/155\n\n          // moveEvent(event, view);\n        },\n        eventClick: function(calEvent, jsEvent, view) {\n          // updateEvent(calEvent, view);\n          removeEvent(calEvent, view);\n        },\n      });\n\n      // カラムヘッダに空白をセットし、非表示化\n      params.columnHeaderText = function(date) { return '' };\n      $('#price-calendar-week1').fullCalendar(params);\n      params.columnHeaderText = function(date) { return '' };\n      $('#price-calendar-week2').fullCalendar(params);\n      params.columnHeaderText = function(date) { return '' };\n      $('#price-calendar-week3').fullCalendar(params);\n      params.columnHeaderText = function(date) { return '' };\n      $('#price-calendar-week4').fullCalendar(params);\n      params.columnHeaderText = function(date) { return '' };\n      $('#price-calendar-week5').fullCalendar(params);\n      params.columnHeaderText = function(date) { return '' };\n      $('#price-calendar-week6').fullCalendar(params);\n      params.columnHeaderText = function(date) { return '' };\n      $('#price-calendar-week7').fullCalendar(params);\n\n      // polyfill\n      const isInteger = function(val){\n            return typeof value === \"number\" &&\n                  isFinite(value) &&\n                  Math.floor(value) === value;\n      }\n\n      const eventForm = function(start, end, yen, date_type, initial) {\n        let price;\n        if (!initial) {\n          price = prompt('価格を入力して下さい: ', yen);\n\n          let err_msg = '';\n          if (price == null || price === '') {\n            err_msg = '価格が入力されていません'\n          } else if (!$.isNumeric(price)){\n            err_msg = '数字を入力してください'\n          } else if (isInteger(parseFloat(price))){\n            err_msg = '整数で入力してください'\n          } else if (parseInt(price) < 0){\n            err_msg = 'マイナスの値は入力できません'\n          }\n          if (err_msg.length) {\n            alert(err_msg);\n            return null\n          }\n          price = parseInt(price);\n        } else {\n          price = yen;\n        }\n        var ret = {\n\n          //title: '\\\\ ' + parseInt(price),\n\n          checkin: start.format('HH:mm:ss'),\n          checkout: end.format('HH:mm:ss'),\n          yen: price,\n          date_type: date_type,\n        }\n        const start_of_day = start.hour(0).minute(0).seconds(0)\n        if (end - start_of_day >= 24 * 60 * 60 * 1000) {\n          ret['checkout'] = '23:59:59'\n        }\n        return ret;\n      };\n\n      var delete_no_id_values = function () {\n        // 曜日が指定されてない料金は削除\n        var arrayData1 = $('input[name=\"ids[]\"]');\n        var arrayData2 = $('input[name=\"checkins[]\"]');\n        var arrayData3 = $('input[name=\"checkouts[]\"]');\n        var arrayData4 = $('input[name=\"yens[]\"]');\n        var arrayData5 = $('input[name=\"date_types[]\"]');\n\n        var deleteNo = [];\n        $.each(input_values, function(k, v){\n          let dataflg = 0;\n          for (let i = 0; i < arrayData1.length; i++) {\n            if (arrayData1[i].value == k)\n            {\n              dataflg++;\n            }\n          }\n          if (dataflg == 0)\n          {\n            deleteNo.push(k);\n          }\n        });\n        for (let i = 0; i < deleteNo.length; i++) {\n          delete input_values[deleteNo[i]];\n        }\n\n        // 料金カレンダーの前詰め処理\n        for (let i = 0; i < arrayData1.length; i++) {\n          $.each(input_values, function(k, v){\n            if (arrayData1[i].value == k && arrayData5[i].value != v.date_type) {          \n              const datas = {\n                checkin: arrayData2[i].value,\n                checkout: arrayData3[i].value,\n                yen: arrayData4[i].value,\n                date_type: parseInt(arrayData5[i].value),\n              }\n              if (datas != null) {\n                input_values[k] = datas\n              }            \n            }\n          });\n        }\n      };\n\n      var set_hidden_values = function() {\n        $('.prices-hidden-field').empty();\n        $.each(input_values, function(k, v){\n          $('<input>').attr({ type: 'hidden', name: 'ids[]', value: k }).appendTo('.prices-hidden-field');\n          $('<input>').attr({ type: 'hidden', name: 'checkins[]', value: v.checkin }).appendTo('.prices-hidden-field');\n          $('<input>').attr({ type: 'hidden', name: 'checkouts[]', value: v.checkout }).appendTo('.prices-hidden-field');\n          $('<input>').attr({ type: 'hidden', name: 'yens[]', value: v.yen }).appendTo('.prices-hidden-field');\n          $('<input>').attr({ type: 'hidden', name: 'date_types[]', value: v.date_type }).appendTo('.prices-hidden-field');\n        });\n      };\n\n      var set_calendar_value = function (this_calendar) {\n        const events = get_calendar_events_from_input_values(this_calendar);\n        this_calendar.fullCalendar('removeEvents');\n        this_calendar.fullCalendar('addEventSource', events, true);\n        this_calendar.fullCalendar('rerenderEvents');\n      };\n\n      // input_valuesに要素を追加するためのkeyを返す。\n      // 1msec以内に複数回呼び出されても一意となるようにする。\n      const get_key = function () {\n        let now = Date.now();\n        let key = now.toString(16);\n        while (Object.hasOwn(input_values, key)) {\n          now++;\n          key = now.toString(16);\n        }\n        return key;\n      };\n\n      // 他ブロックから呼び出すのでvar宣言\n      var createEvent_common = function (this_calendar, start, end, yen, initial) {\n        const date_type = this_calendar.data('date-type');\n\n        const data = eventForm(start, end, yen, date_type, initial);\n        if (data == null) {\n          return;\n        }\n\n        const temporary_key = get_key();\n        input_values[temporary_key] = data;\n      };\n\n      const createEvent = function(start, end, view) {\n        const this_calendar = $(view.el).parents('.price-calendar');\n        delete_no_id_values();\n        createEvent_common(this_calendar, start, end, 0, false);\n        set_hidden_values();\n        set_calendar_value(this_calendar);\n        this_calendar.fullCalendar('unselect');\n      }\n\n      const updateEvent = function(event, view) {\n        const this_calendar = $(view.el).parents('.price-calendar');\n        const date_type = this_calendar.data('date-type');\n\n        const data = eventForm(event.start, event.end, event.yen, date_type, false);\n        if (data == null) {return false}\n\n        input_values[event.id] = data;\n        set_hidden_values();\n        set_calendar_value(this_calendar);\n        this_calendar.fullCalendar('unselect');\n      };\n\n      const moveEvent = function(event, view) {\n        const this_calendar = $(view.el).parents('.price-calendar');\n\n        input_values[event.id]['checkin'] = event.start.format('HH:mm:ss');\n        input_values[event.id]['checkout'] = event.end.format('HH:mm:ss');\n        set_hidden_values();\n        set_calendar_value(this_calendar);\n        this_calendar.fullCalendar('unselect');\n      };\n\n      var removeEvent = function(event, view) {\n        const this_calendar = $(view.el).parents('.price-calendar');\n        var res = confirm(\"本当に削除しますか?\");\n        if (res === false) {return false}\n\n        delete input_values[event.id];\n\n        var arrayDate1 = $('input[name=\"ids[]\"]');\n        var arrayDate2 = $('input[name=\"checkins[]\"]');\n        var arrayDate3 = $('input[name=\"checkouts[]\"]');\n        var arrayDate4 = $('input[name=\"yens[]\"]');\n        var arrayDate5 = $('input[name=\"date_types[]\"]');\n        for (let i = 0; i < arrayDate1.length; i++) {\n          $.each(input_values, function(k, v){\n            if (arrayDate1[i].value == k && arrayDate5[i].value != v.date_type) {          \n              const datas = {\n                checkin: arrayDate2[i].value,\n                checkout: arrayDate3[i].value,\n                yen: arrayDate4[i].value,\n                date_type: parseInt(arrayDate5[i].value),\n              }\n              if (datas != null) {\n                input_values[k] = datas\n              }\n              \n            }\n          });\n        }\n        \n        set_hidden_values();\n        set_calendar_value(this_calendar);\n        this_calendar.fullCalendar('unselect');\n      };\n\n      const el1 = document.getElementsByClassName(\"week1\");\n      const el2 = document.getElementsByClassName(\"week2\");\n      const el3 = document.getElementsByClassName(\"week3\");\n      const el4 = document.getElementsByClassName(\"week4\");\n      const el5 = document.getElementsByClassName(\"week5\");\n      const el6 = document.getElementsByClassName(\"week6\");\n      const el7 = document.getElementsByClassName(\"week7\");\n  \n      // チェックボックスの付け替え\n      $('input#dayname1').change(function () {\n        for (let i = 0; i < el1.length; i++) {\n          var prop = $(el1[i]).prop('checked');\n          if (prop) {\n            for (let step = 0; step < 7; step++) {\n              this_el = [el1,el2,el3,el4,el5,el6,el7][step]\n              if (step != 0) {\n                $(this_el[i]).prop('checked', false);\n              }\n            }\n          }\n        }   \n      })\n  \n      // チェックボックスの付け替え\n      $('input#dayname2').change(function () {\n        for (let i = 0; i < el2.length; i++) {\n          var prop = $(el2[i]).prop('checked');\n          if (prop) {\n            for (let step = 0; step < 7; step++) {\n              this_el = [el1,el2,el3,el4,el5,el6,el7][step]\n              if (step != 1) {\n                $(this_el[i]).prop('checked', false);\n              }\n            }\n          }\n        }   \n      })\n  \n      // チェックボックスの付け替え\n      $('input#dayname3').change(function () {\n        for (let i = 0; i < el3.length; i++) {\n          var prop = $(el3[i]).prop('checked');\n          if (prop) {\n            for (let step = 0; step < 7; step++) {\n              this_el = [el1,el2,el3,el4,el5,el6,el7][step]\n              if (step != 2) {\n                $(this_el[i]).prop('checked', false);\n              }\n            }\n          }\n        }   \n      })\n  \n      // チェックボックスの付け替え\n      $('input#dayname4').change(function () {\n        for (let i = 0; i < el4.length; i++) {\n          var prop = $(el4[i]).prop('checked');\n          if (prop) {\n            for (let step = 0; step < 7; step++) {\n              this_el = [el1,el2,el3,el4,el5,el6,el7][step]\n              if (step != 3) {\n                $(this_el[i]).prop('checked', false);\n              }\n            }\n          }\n        }   \n      })\n  \n      // チェックボックスの付け替え\n      $('input#dayname5').change(function () {\n        for (let i = 0; i < el5.length; i++) {\n          var prop = $(el5[i]).prop('checked');\n          if (prop) {\n            for (let step = 0; step < 7; step++) {\n              this_el = [el1,el2,el3,el4,el5,el6,el7][step]\n              if (step != 4) {\n                $(this_el[i]).prop('checked', false);\n              }\n            }\n          }\n        }   \n      })\n  \n      // チェックボックスの付け替え\n      $('input#dayname6').change(function () {\n        for (let i = 0; i < el6.length; i++) {\n          var prop = $(el6[i]).prop('checked');\n          if (prop) {\n            for (let step = 0; step < 7; step++) {\n              this_el = [el1,el2,el3,el4,el5,el6,el7][step]\n              if (step != 5) {\n                $(this_el[i]).prop('checked', false);\n              }\n            }\n          }\n        }   \n      })\n  \n      // チェックボックスの付け替え\n      $('input#dayname7').change(function () {\n        for (let i = 0; i < el7.length; i++) {\n          var prop = $(el7[i]).prop('checked');\n          if (prop) {\n            for (let step = 0; step < 7; step++) {\n              this_el = [el1,el2,el3,el4,el5,el6,el7][step]\n              if (step != 6) {\n                $(this_el[i]).prop('checked', false);\n              }\n            }\n          }\n        }   \n      })\n  \n      // カウントボタンを取得する\n      const calendaradd = document.getElementById(\"calendar_add\");\n  \n      // チェック済みのチェックボックスの数を返す\n      const getCheckedCount = () => {\n        // 可視セルの件数カウント\n        let count = 0;\t\t\t\t// チェックボックスのチェック状態の件数\n        let tableCnt = 0;\t\t\t// 可視化されているCell件数\n        let noChkCnt = 0;\t\t\t// 可視化状態Cellで全てのチャックボックスが未チェック状態の件数\n  \n        for (let step = 0; step < 7; step++) {\n          this_el = [el1,el2,el3,el4,el5,el6,el7][step]\n          this_td = [$('#td1'),$('#td2'),$('#td3'),$('#td4'),$('#td5'),$('#td6'),$('#td7')][step]\n  \n          if (this_td.css('display') != 'none') {\n            let chkCnt = 0;\n            for (let i = 0; i < this_el.length; i++) {\n              if (this_el[i].checked) {\n                count++;\n                chkCnt++\n              }\n            }\n            if (chkCnt == 0) {\n              noChkCnt++;\n            }\n            tableCnt++;\n          }\n        }\n  \n        if (7 - (count + noChkCnt) > 0)\n        {\n          // CSS更新\n          let setWidth = (tableCnt + 1) * 400;\n          $('#calen_table').css({ 'width': setWidth + 'px' });\n        \n          for (let step = 0; step < 7; step++) {\n            this_td = [$('#td1'),$('#td2'),$('#td3'),$('#td4'),$('#td5'),$('#td6'),$('#td7')][step]\n            this_tdsp = [$('#td1sp'),$('#td2sp'),$('#td3sp'),$('#td4sp'),$('#td5sp'),$('#td6sp'),$('#td7sp')][step]\n            this_table = [$('#price-calendar-week1'),$('#price-calendar-week2'),$('#price-calendar-week3'),$('#price-calendar-week4'),$('#price-calendar-week5'),$('#price-calendar-week6'),$('#price-calendar-week7')][step]\n  \n            if (this_td.css('display') == 'none') {\n              // 非表示の場合\n              this_td.css('display', 'table-cell');\n              this_tdsp.css('display', 'table-cell', { 'width': '10px' });\n              this_table.fullCalendar('removeEvents');\n              this_table.fullCalendar('rerenderEvents');\n              return null;\n            }\n          } \n        }\n      };\n  \n      if (calendaradd != null)\n      {\n        //ボタンをクリックした時に「getCheckedCount()」を呼び出す\n        calendaradd.addEventListener(\"click\", getCheckedCount, false);\n      }\n  \n      // クリアボタンを取得する\n      const calendarclear = document.getElementById(\"calendar_clear\");\n  \n      // 全ての曜日チェックボックスが未チェックの場合は不可視\n      const getCalenCheckedCount = () => {\n        let tableCnt = 7;\n  \n        // 曜日チェックボックスのチェック状態確認\n        for (let step = 0; step < 7; step++) {\n          let chkCnt = 0;\n          this_el = [el1,el2,el3,el4,el5,el6,el7][step];\n          this_td = [$('#td1'),$('#td2'),$('#td3'),$('#td4'),$('#td5'),$('#td6'),$('#td7')][step];\n          this_tdsp = [$('#td1sp'),$('#td2sp'),$('#td3sp'),$('#td4sp'),$('#td5sp'),$('#td6sp'),$('#td7sp')][step];\n          const this_calendar = $(price_calendar_week(price_calendar_date_no[step]));\n          for (let i = 0; i < this_el.length; i++) {\n            if (this_el[i].checked) {\n              chkCnt++;\n            }\n          }\n  \n          if (chkCnt == 0) {\n            let chkCnt2 = 0;\n            let moveFlg = 0;\n            for (let step2 = step + 1; step2 < 7; step2++) {\n              this_el2 = [el1,el2,el3,el4,el5,el6,el7][step2];\n              for (let j = 0; j < this_el2.length; j++) {\n                if (this_el2[j].checked) {\n                  chkCnt2++;\n                }\n              }\n  \n              if (chkCnt2 > 0 && moveFlg == 0) {\n                const this_calendar2 = $(price_calendar_week(price_calendar_date_no[step2]));\n                moveFlg = 1;\n  \n                for (let k = 0; k < this_el2.length; k++) {\n                  if (this_el2[k].checked) {\n                    $(this_el[k]).prop('checked', true);\n                    $(this_el2[k]).prop('checked', false);\n                  }\n                }\n  \n                const events = this_calendar.fullCalendar('clientEvents');\n                for (const index in events) {\n                  delete input_values[events[index].id];\n                }\n                this_calendar.fullCalendar('removeEvents');\n  \n                const date_type = this_calendar.data('date-type');\n                let events2 = this_calendar2.fullCalendar('clientEvents');\n                this_calendar2.fullCalendar('removeEvents');\n  \n                for (i in events2) {\n                  const id = events2[i].id;\n                  // this_calendarへ移動\n                  input_values[id].date_type = date_type;\n                  events2[i].date_type = date_type;\n                }\n  \n                this_calendar.fullCalendar('addEventSource', events2, true);\n                this_calendar.fullCalendar('rerenderEvents');\n  \n                set_hidden_values();\n              }\n            }\n            \n            if (moveFlg == 0)\n            {\n              this_td.css('display', 'none');\n              this_tdsp.css('display', 'none');\n              var array = this_calendar.fullCalendar('clientEvents');\n              for (const index in array) {\n                delete input_values[array[index].id];\n              }\n              this_calendar.fullCalendar('removeEvents');\n              tableCnt--;\n\n              set_hidden_values();\n            }\n          }\n        }\n  \n        // 価格表が全て削除された場合は、初期化された価格表を1件表示\n        if (tableCnt == 0) {\n          $('#td1').css('display', 'table-cell');\n          $('#td1sp').css('display', 'table-cell', { 'width': '10px' });\n          $('#price-calendar-week1').fullCalendar('removeEvents');\n          $('#price-calendar-week1').fullCalendar('rerenderEvents');\n  \n          for (let i = 0; i < el1.length; i++) {\n            $(el1[i]).prop('checked', true);\n          }\n  \n          tableCnt=1;\n        }\n  \n        // CSS更新\n        let setWidth = tableCnt * 400;\n        $('#calen_table').css({ 'width': setWidth + 'px' });\n      };\n  \n      if (calendarclear != null)\n      {\n        // ボタンをクリックした時に「getCheckedCount()」を呼び出す\n        calendarclear.addEventListener(\"click\", getCalenCheckedCount, false);\n      }\n  \n      // 【先着予約受付-保存する】曜日チェックボックスのチェック状態確認\n      $('#calendar-save').on('click', function() {\n        for (let step = 0; step < 7; step++) {\n          this_calendar = [$('#price-calendar-week1'),$('#price-calendar-week2'),$('#price-calendar-week3'),$('#price-calendar-week4'),$('#price-calendar-week5'),$('#price-calendar-week6'),$('#price-calendar-week7')][step]\n          var array = this_calendar.fullCalendar('clientEvents');\n          \n          // 曜日チェックボックスのチェック数カウント\n          this_el = [el1, el2, el3, el4, el5, el6, el7][step]\n          let chkCnt = 0;\n          for (let i = 0; i < this_el.length; i++) {\n            if (this_el[i].checked) {\n              chkCnt++;\n            }\n          }\n  \n          if (array.length > 0) {\n            // 料金が入力されていて曜日がチェックされていない項目の確認\n            if (chkCnt == 0) {\n                alert(\"曜日が指定されていない項目が存在します。\");\n                return false;\n            }\n          }\n          else\n          {\n            // 曜日がチェックされていて料金が入力されていない項目の確認\n            if (chkCnt > 0) {\n              alert(\"料金(円) が入力されていません。\");\n              return false;\n            }        \n          }\n        }    \n      });\n    \n      // 既存の価格表から作成する時はpricesが設定されている。表示の時はprices == null\n      if (prices != null) {\n        const sort_compare_asc = (a, b) => ((a < b) ? -1 : 1);\n\n        const sort_prices_by_time = function (prices) {\n          prices.sort((a, b) => sort_compare_asc(a.checkout, b.checkout));\n          prices.sort((a, b) => sort_compare_asc(a.checkin, b.checkin));\n          return prices;\n        }\n\n        // 時間枠価格表 単一枠が同一かどうか\n\n        const same_price = function (p1, p2) {\n          if ((p1.checkin == p2.checkin) &&\n            (p1.checkout == p2.checkout) &&\n            (p1.yen == p2.yen)) {\n            return true;\n          }\n          return false;\n        }\n\n        // 時間枠価格表 複数枠が同一かどうか\n\n        const same_prices = function (pa1, pa2) {\n          if (pa1.length != pa2.length) {\n            return false;\n          }\n          for (let i = 0; i < pa1.length; i++) {\n            if (!same_price(pa1[i], pa2[i])) {\n              return false;\n            }\n          }\n          return true;\n        }\n\n        // 時間枠価格表の同じ枠の曜日をマージ\n\n        const merge_prices = function (prices) {\n          let prices_array = [];\n          for (date_type of g_prices.date_types) {\n            const prices_by_date_type = g_prices.prices_by_date_type(prices, date_type);\n            if (prices_by_date_type.length > 0) {\n              prices_array.push(sort_prices_by_time(prices_by_date_type));\n            }\n          };\n\n          // merged_prices: {date_types: [date_type1, date_type2, ...], prices: prices}\n          let merged_prices = [];\n          let prices_a;\n          while (prices_a = prices_array.shift()) {\n            const prices_a_date_type = prices_a[0].date_type;\n            let merged_price_a = {date_types: [prices_a_date_type], prices: prices_a};\n            let prices_b_array = Array.from(prices_array);\n            let prices_b;\n            while (prices_b = prices_b_array.shift()) {\n              const prices_b_date_type = prices_b[0].date_type;\n              if (same_prices(prices_a, prices_b)) {\n                merged_price_a.date_types.push(prices_b_date_type);\n                const index_b = prices_array.indexOf(prices_b);\n                prices_array.splice(index_b, 1);\n              }\n            }\n            merged_prices.push(merged_price_a);\n          }\n          return merged_prices;\n        }\n\n        // 時間枠価格表 新規作成 初期化\n\n        // カレンダーイベント\n\n        const create_fullcalendar_events = function (merged_prices) {\n          for (let i = 0; i < merged_prices.length; i++) {\n            const this_calendar = $(price_calendar_week(price_calendar_date_no[i]));\n            merged_prices[i].prices.forEach(price => {\n              createEvent_common(\n                this_calendar,\n                $.fullCalendar.moment(price.checkin),\n                $.fullCalendar.moment(price.checkout),\n                price.yen,\n                true\n              );\n            });\n            set_calendar_value(this_calendar);\n          }\n          set_hidden_values();\n        }\n\n        const price_calendar_td = no => $('#td' + no);\n        const price_calendar_tdsp = no => $('#td' + no + 'sp');\n\n        // 曜日チェックボックス\n\n        const render_checkboxes = function (no, date_types) {\n          g_prices.date_types.forEach(date_type => {\n            let checkbox = price_calendar_td(no).find('.week' + no + '[name=\"' + date_type + no + '\"]');\n            if (date_types.includes(date_type)) {\n              checkbox.prop('checked', true);\n            } else {\n              checkbox.prop('checked', false);\n            }\n          });\n        }\n\n        // カレンダー\n\n        const render_calendar = function (no) {\n          let td = price_calendar_td(no);\n          let tdsp = price_calendar_tdsp(no);\n          if (td.css('display') == 'none') {\n            td.css('display', 'table-cell');\n            tdsp.css('display', 'table-cell', { 'width': '10px' });\n            $(price_calendar_week(no)).fullCalendar('rerenderEvents');\n          }\n        }\n\n        const render_calendars = function (merged_prices) {\n          $('#calen_table').css({ 'width': (400 * merged_prices.length) + 'px' });\n          for (let i = 0; i < merged_prices.length; i++) {\n            const no = price_calendar_date_no[i];\n            const date_types = merged_prices[i].date_types;\n            render_checkboxes(no, date_types);\n            render_calendar(no);\n          }\n        }\n\n        // 時間枠価格表 新規作成 初期化\n\n        // prices: {checkin: Todayのcheckin時分秒, checkout: Todayのcheckout時分秒, date_type: 曜日, yen: 料金}の配列\n        const merged_prices = merge_prices(prices);\n        // merged_prices: {date_types: [date_type1, date_type2, ...], prices: prices(date_typeは使用しない)}の配列\n        create_fullcalendar_events(merged_prices);\n        render_calendars(merged_prices);\n      } // prices != null\n\n      // 「既存の価格表から作成」ボタン\n      $('#select_prices').on('click', function () {\n        return g_prices.confirm_editing();\n      });\n    }\n  }\n});\n","$(document).on('turbolinks:load', function() {\n  if (g_prices.is_prices_show) { \n    // 時間枠価格表 表示画面(詳細 または 選択)\n\n    const price_calendar_readonly_date_no = [1, 2, 3, 4, 5, 6, 7];\n    const price_calendar_readonly_date_jp = ['月曜', '火曜', '水曜', '木曜', '金曜', '土曜', '日曜・祝日'];\n    const price_calendar_readonly_week = no => ('#price-calendar-readonly-week' + no);\n    const price_calendar = index => $(price_calendar_readonly_week(price_calendar_readonly_date_no[index]));\n\n    const price_to_fullcalendar_event = function(price) {\n      return {\n        title: '\\\\ ' + price.yen,\n        start: price.checkin,\n        end: price.checkout\n      }\n    }\n\n    // 時間枠価格表 表示画面(詳細 または 選択)でのカレンダー描画\n\n    window.g_prices.show_render_calendar = function (prices) {\n      for (i = 0; i < g_prices.date_types.length; i++) {\n        const calendar = price_calendar(i);\n        const date_type = g_prices.date_types[i];\n        const events = g_prices.prices_by_date_type(prices, date_type).map(price => price_to_fullcalendar_event(price));\n        calendar.fullCalendar('removeEvents');\n        calendar.fullCalendar('addEventSource', events, true);\n        calendar.fullCalendar('rerenderEvents');\n      }\n    }\n\n    // 時間枠価格表 表示画面(詳細 または 選択)の初期化\n\n    const params = calendar_base_params();\n    Object.assign(params, {\n      header: {\n        left: '',\n        center: '',\n        right: ''\n      },\n      defaultView: 'agendaDay',\n      minTime: '00:00:00',\n      maxTime: '24:00:00',\n      selectable: false,\n      selectHelper: false,\n      ignoreTimezone: false,\n      editable: false,\n      droppable: false,\n      displayEventEnd: true,\n      eventColor: 'gray',\n      eventTextColor: \"black\",\n    });\n\n    for (let i = 0; i < price_calendar_readonly_date_no.length; i++) {\n      let calendar = price_calendar(i);\n      calendar.empty();\n      params.columnHeaderText = function() { return price_calendar_readonly_date_jp[i] };\n      calendar.fullCalendar(params);\n    }\n\n    if (g_prices.is_select_price) {\n      // 時間枠価格表 選択\n      g_prices.select_prices_init();\n    } else {\n      // 時間枠価格表 詳細\n      g_prices.show_update_prices(room_id, start_on_value);\n    }\n  }\n});\n\n$(document).on('turbolinks:before-cache', function() {\n  if (g_prices.is_prices_show) {\n    if (g_prices.is_select_price) {\n      // 時間枠価格表 選択 終了処理\n      g_prices.select_prices_fini();\n    }\n  }\n});\n","$(document).on('turbolinks:load', function() {\n  if (g_prices.is_optional_prices_edit) {\n    const option_val_sel = (val) => `option[value=\"${val}\"]`;\n\n    const date_type_tr_sel = (date_type) => `tr#fields_optional_price_${date_type}`;\n    const field_td_sel = (field) => `td#${field}`;\n    const field_control_sel = (control, field) => `${control}[name=\"input[optional_prices][][${field}]\"]`;\n    const time_select_control_sel = (field, column) => {\n      const time_column = {hour: '4i', min: '5i'};\n      return `select[name=\"input[optional_prices][][${field}][][${field}(${time_column[column]})]\"]`;\n    };\n    const close_hour_select_sel = time_select_control_sel('close_seconds', 'hour');\n    const close_min_select_sel = time_select_control_sel('close_seconds', 'min');\n\n    const option_val_el = (val) => $('<option>').val(val).text(val);\n    const select_option_59_el = (select_el) => select_el.children(option_val_sel('59'));\n\n    const enable_min_59 = (min_el) => {\n      if (select_option_59_el(min_el).length > 0) {\n        return false;\n      }\n      min_el.append(option_val_el('59'));\n      return true;\n    };\n    const disable_min_59 = (min_el) => {\n      if (select_option_59_el(min_el).length == 0) {\n        return false;\n      }\n      select_option_59_el(min_el).remove();\n      return true;\n    };\n    const set_min_59 =(min_el) => {\n      enable_min_59(min_el);\n      min_el.val('59');\n    };\n\n    const enable_all_close_2359 = () => {\n      // Collection Manipulation\n      $(`${g_prices.sel.optional_prices_edit} ${close_min_select_sel}`).each(function() {\n        enable_min_59($(this));\n      });\n    };\n\n    window.g_ope = {\n      enable_all_close_2359: enable_all_close_2359,\n    }\n\n    const init_close_2359 = () => {\n      for (let optional_price of g_optional_prices.collection) {\n        if (optional_price.close_seconds == g_close_seconds_end_of_day) {\n          const close_min_el = $(`${date_type_tr_sel(optional_price.date_type)} ${close_min_select_sel}`);\n          set_min_59(close_min_el);\n        }\n      }\n    };\n\n    init_close_2359();\n\n    const close_hour = $(`${g_prices.sel.optional_prices_edit} ${close_hour_select_sel}`);\n    close_hour.on('change', function() {\n      const close_seconds_td_el = $(this).parent();\n      const close_min_el = close_seconds_td_el.find(close_min_select_sel)\n      if ($(this).val() == '23') {\n        enable_min_59(close_min_el);\n      } else {\n        disable_min_59(close_min_el);\n      }\n    });\n    close_hour.trigger('change');\n  }\n\n  $('input#date_week_select').change(function () {\n    var prop = $('input#date_week_select').prop('checked');\n    // もしpropがチェック状態だったら\n    if (prop) {\n      $(\".optional_price_date_type\").slideUp()\n      $(\".optional_price_week_type\").slideDown()\n    } else {\n      $(\".optional_price_date_type\").slideDown()\n      $(\".optional_price_week_type\").slideUp()\n    }\n  })\n\n  $('#data_save').on('click', function(){\n    var start_on = document.getElementById('start_on');\n    var start_on_value = start_on.value;\n    var start_on_min = start_on.min;\n\n    g_ope.enable_all_close_2359();\n\n    if (start_on_value >= start_on_min) {\n      var prop = $('input#date_week_select').prop('checked');\n      // もしpropがチェック状態だったら\n      if (prop) {\n        let el_yen = document.getElementsByClassName(\"week_yen\");\n        let chk_yen = \"\";\n        for (let i = 0; i < el_yen.length; i++) {\n          if (el_yen[i].value != null && el_yen[i].value != '' && Number(el_yen[i].value) >= 0) { \n            var eos1 = document.getElementsByClassName('week_open_seconds');\n            let array_os = ['', '', '', '', '', '', '', '', '', '', '', '', '', ''];\n            for (let j = 0; j < eos1.length; j++) {\n              array_os[j] = eos1[j].value;\n            }    \n\n            var ecs1 = document.getElementsByClassName('week_close_seconds');\n            let array_cs = ['', '', '', '', '', '', '', '', '', '', '', '', '', ''];\n            for (let j = 0; j < ecs1.length; j++) {\n              array_cs[j] = ecs1[j].value;\n            }   \n\n            let st = Number(array_os[i*2]) * 3600 + Number(array_os[i*2+1]) * 60;\n            let ed = Number(array_cs[i*2]) * 3600 + Number(array_cs[i*2+1]) * 60;\n\n            if (st >= ed) {\n              alert('閉館時間 は、開館時間より後の時間を指定してください。')\n              return false;             \n            }\n\n            let su = document.getElementsByClassName('select_unit');\n            if (su[1].value == 'quarter_hour') {\n              if (ed - st < 15 * 60) {\n                alert('開館時間と開館時間は15分以上間隔を開けてください。')\n                return false;  \n              }\n            } else if (su[1].value == 'half_hour') {\n              if (ed - st < 30 * 60) {\n                alert('開館時間と開館時間は30分以上間隔を開けてください。')\n                return false;  \n              }\n            } else if (su[1].value == 'one_hour') {\n              if (ed - st < 60 * 60) {\n                alert('開館時間と開館時間は1時間以上間隔を開けてください。')\n                return false;  \n              }\n            }\n\n            chk_yen = chk_yen + el_yen[i].value;\n          }\n        }\n\n        let el_unit_seconds = document.getElementsByClassName(\"date_unit_seconds\");\n        for (let i = 0; i < el_unit_seconds.length; i++) { \n          if (el_unit_seconds[i].value != 'quarter_hour' && el_unit_seconds[i].value != 'half_hour' && el_unit_seconds[i].value != 'one_hour') {\n            alert('単位時間 は正しい単位時間ではありません。')\n            return false;\n          }\n        }\n\n        let el_max_yen = document.getElementsByClassName(\"week_max_yen\");\n        for (let i = 0; i < el_max_yen.length; i++) {\n          if (isNaN(el_max_yen[i].value) == true)\n          {\n            alert('最大料金(円) を整数で指定してください。')\n            return false;\n          } \n          if (el_max_yen[i].value < 0) {\n            alert('最大料金は 0 以上を指定してください。')\n            return false;\n          }\n        }\n\n        if (chk_yen) {\n          var eos1 = document.getElementsByClassName('date_open_seconds');\n          for (let i = 0; i < eos1.length; i++) {\n            eos1[i].value = \"00\";\n          }\n      \n          var ecs1 = document.getElementsByClassName('date_close_seconds');\n          for (let i = 0; i < ecs1.length; i++) {\n            ecs1[i].value = \"00\";\n          }   \n      \n          var el1 = document.getElementsByClassName('date_yen');\n          for (let i = 0; i < el1.length; i++) {\n            el1[i].value = '';\n          }\n        } else {\n          alert('単位時間あたりの料金(円)が入力されていません。')\n          return false;\n        }\n      } else {\n        let el_yen = document.getElementsByClassName(\"date_yen\");\n        let chk_yen = \"\";\n        for (let i = 0; i < el_yen.length; i++) {\n          if (el_yen[i].value != null && el_yen[i].value != '' && Number(el_yen[i].value) >= 0) {\n            var eos1 = document.getElementsByClassName('date_open_seconds');\n            let array_os = ['', '', '', ''];\n            for (let j = 0; j < eos1.length; j++) {\n              array_os[j] = eos1[j].value;\n            }    \n\n            var ecs1 = document.getElementsByClassName('date_close_seconds');\n            let array_cs = ['', '', '', ''];\n            for (let j = 0; j < ecs1.length; j++) {\n              array_cs[j] = ecs1[j].value;\n            }   \n\n            let st = Number(array_os[i*2]) * 3600 + Number(array_os[i*2+1]) * 60;\n            let ed = Number(array_cs[i*2]) * 3600 + Number(array_cs[i*2+1]) * 60;\n\n            if (st >= ed) {\n              alert('閉館時間 は、開館時間より後の時間を指定してください。')\n              return false;             \n            }\n\n            let su = document.getElementsByClassName('select_unit');\n            if (su[0].value == 'quarter_hour') {\n              if (ed - st < 15 * 60) {\n                alert('開館時間と開館時間は15分以上間隔を開けてください。')\n                return false;  \n              }\n            } else if (su[0].value == 'half_hour') {\n              if (ed - st < 30 * 60) {\n                alert('開館時間と開館時間は30分以上間隔を開けてください。')\n                return false;  \n              }\n            } else if (su[0].value == 'one_hour') {\n              if (ed - st < 60 * 60) {\n                alert('開館時間と開館時間は1時間以上間隔を開けてください。')\n                return false;  \n              }\n            }\n\n            chk_yen = chk_yen + el_yen[i].value;\n          }\n        }\n\n        let el_unit_seconds = document.getElementsByClassName(\"date_unit_seconds\");\n        for (let i = 0; i < el_unit_seconds.length; i++) { \n          if (el_unit_seconds[i].value != 'quarter_hour' && el_unit_seconds[i].value != 'half_hour' && el_unit_seconds[i].value != 'one_hour') {\n            alert('単位時間 は正しい単位時間ではありません。')\n            return false;\n          }\n        }\n\n        let el_max_yen = document.getElementsByClassName(\"date_max_yen\");\n        for (let i = 0; i < el_max_yen.length; i++) {        \n          if (isNaN(el_max_yen[i].value) == true)\n          {\n            alert('最大料金(円) を整数で指定してください。')\n            return false;\n          } \n          if (el_max_yen[i].value < 0) {\n            alert('最大料金は 0 以上を指定してください。')\n            return false;\n          }\n        }\n\n        if (chk_yen) {\n          // 平日/休日の開館時間を平日なら月曜から金曜・休日なら土曜から日曜へ代入\n          var eos1 = document.getElementsByClassName('date_open_seconds');\n          let array_os = ['', '', '', ''];\n          for (let i = 0; i < eos1.length; i++) {\n            array_os[i] = eos1[i].value;\n            eos1[i].value = \"00\";\n          }    \n\n          var eos2 = document.getElementsByClassName('week_open_seconds');\n          for (let i = 0; i < eos2.length; i++) {\n            if (i < 10)\n            {\n              if (i % 2 == 0)\n              {\n                eos2[i].value = array_os[0];\n              } else {\n                eos2[i].value = array_os[1];\n              }\n            } else {\n              if (i % 2 == 0)\n              {\n                eos2[i].value = array_os[2];\n              } else {\n                eos2[i].value = array_os[3];\n              }\n            }\n          }\n\n          // 平日/休日の閉館時間を平日なら月曜から金曜・休日なら土曜から日曜へ代入\n          var ecs1 = document.getElementsByClassName('date_close_seconds');\n          let array_cs = ['', '', '', ''];\n          for (let i = 0; i < ecs1.length; i++) {\n            array_cs[i] = ecs1[i].value;\n            ecs1[i].value = \"00\"\n          }      \n\n          var ecs2 = document.getElementsByClassName('week_close_seconds');\n          for (let i = 0; i < ecs2.length; i++) {\n            if (i < 10)\n            {\n              if (i % 2 == 0)\n              {\n                ecs2[i].value = array_cs[0];\n              } else {\n                ecs2[i].value = array_cs[1];\n              }\n            } else {\n              if (i % 2 == 0)\n              {\n                ecs2[i].value = array_cs[2];\n              } else {\n                ecs2[i].value = array_cs[3];\n              }\n            }\n          }\n\n          // 平日/休日の1時間あたりの料金を平日なら月曜から金曜・休日なら土曜から日曜へ代入\n          var el1_unit = document.getElementsByClassName('date_unit_seconds');\n          let array_unit = ['', ''];\n          for (let i = 0; i < el1_unit.length; i++) {\n            array_unit[i] = el1_unit[i].value\n            el1_unit[i].value = '';\n          }\n\n          var el2_unit = document.getElementsByClassName('week_unit_seconds');\n          for (let i = 0; i < el2_unit.length; i++) {\n            if (i < 5) {\n              el2_unit[i].value = array_unit[0];\n            } else {\n              el2_unit[i].value = array_unit[1];\n            }\n          }\n\n          // 平日/休日の1時間あたりの料金を平日なら月曜から金曜・休日なら土曜から日曜へ代入\n          var el1 = document.getElementsByClassName('date_yen');\n          let array = [0, 0];\n          for (let i = 0; i < el1.length; i++) {\n            array[i] = el1[i].value;\n            el1[i].value = '';\n          }\n\n          var el2 = document.getElementsByClassName('week_yen');\n          for (let i = 0; i < el2.length; i++) {\n            if (i < 5)\n            {\n              el2[i].value = array[0];\n            } else {\n              el2[i].value = array[1];\n            }\n          }\n         \n          // 平日/休日の最大料金を平日なら月曜から金曜・休日なら土曜から日曜へ代入\n          let el1_max_yen = document.getElementsByClassName(\"date_max_yen\");\n          let array_max_yen = [0, 0];\n          for (let i = 0; i < el1_max_yen.length; i++) {\n            array_max_yen[i] = el1_max_yen[i].value;\n            el1_max_yen[i].value = '';\n          }\n\n          var el2_max_yen = document.getElementsByClassName('week_max_yen');\n          for (let i = 0; i < el2_max_yen.length; i++) {\n            if (i < 5)\n            {\n              el2_max_yen[i].value = array_max_yen[0];\n            } else {\n              el2_max_yen[i].value = array_max_yen[1];\n            }\n          }\n        } else {\n          alert('単位時間あたりの料金(円)が入力されていません。')\n          return false;\n        }\n      }\n    } \n  })\n\n  $(window).on('pageshow', function() {\n    $('input#date_week_select').trigger('change');\n\n    var btns = document.querySelectorAll('#btn_clear');\n    for(var i = 0; i < btns.length; i++){\n        btns[i].addEventListener('click',function(){  \n            var res = confirm(\"クリアしますか?\"); \n            if (res) {         \n              const result = $(this).attr('name');\n              var date_type = { weekday: 0, holiday: 1, monday: 2, tuesday: 3, wednesday: 4, thursday: 5, friday: 6, saturday: 7, sunday: 8 };\n              var index = date_type[result];\n            \n              if (result == \"weekday\" || result == \"holiday\") {\n                var el11 = document.getElementsByClassName('date_open_seconds');\n                var el12 = document.getElementsByClassName('date_close_seconds');\n                var el13 = document.getElementsByClassName('date_unit_seconds');\n                var el14 = document.getElementsByClassName('date_yen');\n                var el15 = document.getElementsByClassName('date_max_yen');\n            \n                el11[index * 2].value = \"00\";\n                el11[index * 2 + 1].value = \"00\";\n                el12[index * 2].value = \"00\";\n                el12[index * 2 + 1].value = \"00\";\n                el13[index].value = 'one_hour';\n                el14[index].value = '';\n                el15[index].value = '';\n              } else {\n                index -= 2;\n                var el21 = document.getElementsByClassName('week_open_seconds');\n                var el22 = document.getElementsByClassName('week_close_seconds');\n                var el23 = document.getElementsByClassName('week_unit_seconds');\n                var el24 = document.getElementsByClassName('week_yen');\n                var el25 = document.getElementsByClassName('week_max_yen');\n            \n                el21[index * 2].value = \"00\";\n                el21[index * 2 + 1].value = \"00\";\n                el22[index * 2].value = \"00\";\n                el22[index * 2 + 1].value = \"00\";\n                el23[index].value = 'one_hour';\n                el24[index].value = '';\n                el25[index].value = '';\n              }\n            }\n        },false);\n    }\n  })\n\n  if (g_prices.is_optional_prices_show) {\n    if (g_prices.is_select_price) {\n      // 時間あたり価格表 選択画面\n      window.g_prices.show_render_optional_prices = function (prices) {\n        const optional_price_by_date_type = (prices, date_type) => prices.find(price => price.date_type == date_type);\n        const optional_prices_show_tr = no => $('tr.optional_prices_show_' + no);\n        // g_prices.date_types順に表示\n        for (i = 0; i < g_prices.date_types.length; i++) {\n          const tr = optional_prices_show_tr(i);\n          if (!tr) continue;\n          if (i >= prices.length) {\n            tr.hide();\n            continue;\n          }\n          tr.show();\n          const price = optional_price_by_date_type(prices, g_prices.date_types[i]);\n          tr.find('.start_on').text(price.start_on);\n          // date_type文字列を日本語に変換\n          const date_type_jp = optional_price_date_types[price.date_type];\n          tr.find('.date_type').text(date_type_jp);\n          tr.find('.open_seconds').text(price.open_time);\n          tr.find('.close_seconds').text(price.close_time);\n          tr.find('.unit_seconds').text(price.unit_seconds);\n          tr.find('.yen').text(price.yen);\n          tr.find('.max_yen').text(price.max_yen);\n        }\n      }\n\n      //  時間あたり価格表 選択画面 初期化\n      //  (価格表表示 詳細画面はJSによる初期化不要)\n      g_prices.select_prices_init();\n    }\n  }\n\n  // 時間あたり価格表 新規作成\n  if (g_prices.is_optional_prices_edit) {\n    const date_types_week = g_prices.date_types;\n    const date_types_date = ['weekday', 'holiday'];\n\n    const checkbox_date_week_select = $('input#date_week_select');\n    const tr_fields_optional_price = date_type => $('tr#fields_optional_price_' + date_type);\n\n    const time_select_column = {hour: '(4i)', min: '(5i)'};\n    const selector_optional_price_time_select = (field, column) => 'select[name=\"input[optional_prices][][' + field + '][][' + field + time_select_column[column] +']\"]';\n    const selector_optional_price = (field) => 'input[name=\"input[optional_prices][][' + field + ']\"]';\n    const input_optional_price = (date_type, field) => tr_fields_optional_price(date_type).find(selector_optional_price(field));\n    const selector_optional_price_unit_seconds = 'select[name=\"optional_price_collection[optional_prices][][unit_seconds]\"]';\n    const select_optional_price_unit_seconds = (date_type) => tr_fields_optional_price(date_type).find(selector_optional_price_unit_seconds);\n\n    const time_select_optional_price_exists = (date_type, field) => (\n      (tr_fields_optional_price(date_type).find(selector_optional_price_time_select(field, 'hour')).val() != '00') ||\n      (tr_fields_optional_price(date_type).find(selector_optional_price_time_select(field, 'min')).val() != '00')\n    );\n\n    // 時間あたり価格表が編集中かどうか\n    window.g_prices.optional_prices_is_editing = function () {\n      const date_types = checkbox_date_week_select.prop('checked') ? date_types_week : date_types_date;\n      return (date_types.some(date_type => (\n        time_select_optional_price_exists(date_type, 'open_seconds') ||\n        time_select_optional_price_exists(date_type, 'close_seconds') ||\n        (select_optional_price_unit_seconds(date_type).val() != 'one_hour') ||\n        (input_optional_price(date_type, 'yen').val() != '') ||\n        (input_optional_price(date_type, 'max_yen').val() != '')\n      )));\n    };\n\n    // 初期化\n\n    // 「既存の価格表から作成」ボタン\n    $('#select_prices').on('click', function () {\n      return g_prices.confirm_editing();\n    });\n  }\n});\n\n$(document).on('turbolinks:before-cache', function() {\n  if (g_prices.is_optional_prices_show) {\n    if (g_prices.is_select_price) {\n      // 時間あたり価格表 選択\n      g_prices.select_prices_fini();\n    }\n  }\n});\n","$(document).on('ready turbolinks:load', function() {\n  if ($('#use-reports').length == 0) {\n    return;\n  }\n\n  $('#use-reports .use-report input[name=\"use_report[agree_of_term]\"]:checkbox').on('click', function() {\n    $(this).parents('.use-report').find('input:submit.submit-button').prop('disabled', !$(this).prop('checked'));\n  });\n\n  // 利用報告書submitの処理\n  //   利用報告書入力画面(use_reports/_form.html.slim)の「提出」\n  //   窓口対応者の(提出後)利用報告書(use_reports/_show.html.slim)の「備考更新」\n  $('#use-reports .use-report input:submit').on('click', function() {\n    const clicked_use_report = $(this).parents('.use-report');\n\n    // クリックした以外の利用日の入力項目を(disabledにすることで)パラメタから除く\n    var clicked_reservation_id = clicked_use_report.find('input[name=\"use_report[reservation_id]\"]').val();\n    $('#use-reports .use-report').each(function() {\n      var reservation_id = $(this).find('input[name=\"use_report[reservation_id]\"]').val();\n      if (reservation_id != clicked_reservation_id) {\n        $(this).find('[name*=\"use_report\"]').prop('disabled', true);\n      }\n    });\n\n    $('#use-reports [name=use_report_switch]').prop('disabled', true);\n\n    // 利用報告書を更新するので、RailsのPATCHメソッドとして呼び出す。\n    //   PATCH用の入力項目(name: _method): reservations/_reservation_use_report_tab.html.slimにある。\n    //   予約の他のタブでの処理に影響しないよう、disabledとして配置しておき、利用報告書で使うときだけ有効にする。\n    $('#use-reports input[name=\"_method\"]').prop('disabled', false);\n\n    $(this).trigger('submit');\n  });\n});\n","function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n/*!\n * FullCalendar v3.10.0\n * Docs & License: https://fullcalendar.io/\n * (c) 2018 Adam Shaw\n */\n(function webpackUniversalModuleDefinition(root, factory) {\n  if ((typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) === 'object' && (typeof module === \"undefined\" ? \"undefined\" : _typeof(module)) === 'object') module.exports = factory(require(\"moment\"), require(\"jquery\"));else if (typeof define === 'function' && define.amd) define([\"moment\", \"jquery\"], factory);else if ((typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) === 'object') exports[\"FullCalendar\"] = factory(require(\"moment\"), require(\"jquery\"));else root[\"FullCalendar\"] = factory(root[\"moment\"], root[\"jQuery\"]);\n})(typeof self !== 'undefined' ? self : this, function (__WEBPACK_EXTERNAL_MODULE_0__, __WEBPACK_EXTERNAL_MODULE_3__) {\n  return (\n    /******/\n    function (modules) {\n      // webpackBootstrap\n\n      /******/\n      // The module cache\n\n      /******/\n      var installedModules = {};\n      /******/\n\n      /******/\n      // The require function\n\n      /******/\n\n      function __webpack_require__(moduleId) {\n        /******/\n\n        /******/\n        // Check if module is in cache\n\n        /******/\n        if (installedModules[moduleId]) {\n          /******/\n          return installedModules[moduleId].exports;\n          /******/\n        }\n        /******/\n        // Create a new module (and put it into the cache)\n\n        /******/\n\n\n        var module = installedModules[moduleId] = {\n          /******/\n          i: moduleId,\n\n          /******/\n          l: false,\n\n          /******/\n          exports: {}\n          /******/\n\n        };\n        /******/\n\n        /******/\n        // Execute the module function\n\n        /******/\n\n        modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n        /******/\n\n        /******/\n        // Flag the module as loaded\n\n        /******/\n\n        module.l = true;\n        /******/\n\n        /******/\n        // Return the exports of the module\n\n        /******/\n\n        return module.exports;\n        /******/\n      }\n      /******/\n\n      /******/\n\n      /******/\n      // expose the modules object (__webpack_modules__)\n\n      /******/\n\n\n      __webpack_require__.m = modules;\n      /******/\n\n      /******/\n      // expose the module cache\n\n      /******/\n\n      __webpack_require__.c = installedModules;\n      /******/\n\n      /******/\n      // define getter function for harmony exports\n\n      /******/\n\n      __webpack_require__.d = function (exports, name, getter) {\n        /******/\n        if (!__webpack_require__.o(exports, name)) {\n          /******/\n          Object.defineProperty(exports, name, {\n            /******/\n            configurable: false,\n\n            /******/\n            enumerable: true,\n\n            /******/\n            get: getter\n            /******/\n\n          });\n          /******/\n        }\n        /******/\n\n      };\n      /******/\n\n      /******/\n      // getDefaultExport function for compatibility with non-harmony modules\n\n      /******/\n\n\n      __webpack_require__.n = function (module) {\n        /******/\n        var getter = module && module.__esModule ?\n        /******/\n        function getDefault() {\n          return module['default'];\n        } :\n        /******/\n        function getModuleExports() {\n          return module;\n        };\n        /******/\n\n        __webpack_require__.d(getter, 'a', getter);\n        /******/\n\n\n        return getter;\n        /******/\n      };\n      /******/\n\n      /******/\n      // Object.prototype.hasOwnProperty.call\n\n      /******/\n\n\n      __webpack_require__.o = function (object, property) {\n        return Object.prototype.hasOwnProperty.call(object, property);\n      };\n      /******/\n\n      /******/\n      // __webpack_public_path__\n\n      /******/\n\n\n      __webpack_require__.p = \"\";\n      /******/\n\n      /******/\n      // Load entry module and return exports\n\n      /******/\n\n      return __webpack_require__(__webpack_require__.s = 256);\n      /******/\n    }(\n    /************************************************************************/\n\n    /******/\n    [\n    /* 0 */\n\n    /***/\n    function (module, exports) {\n      module.exports = __WEBPACK_EXTERNAL_MODULE_0__;\n      /***/\n    },,\n    /* 1 */\n\n    /* 2 */\n\n    /***/\n    function (module, exports) {\n      /*\r\n      derived from:\r\n      https://github.com/Microsoft/tslib/blob/v1.6.0/tslib.js\r\n      \n      only include the helpers we need, to keep down filesize\r\n      */\n      var extendStatics = Object.setPrototypeOf || {\n        __proto__: []\n      } instanceof Array && function (d, b) {\n        d.__proto__ = b;\n      } || function (d, b) {\n        for (var p in b) {\n          if (b.hasOwnProperty(p)) d[p] = b[p];\n        }\n      };\n\n      exports.__extends = function (d, b) {\n        extendStatics(d, b);\n\n        function __() {\n          this.constructor = d;\n        }\n\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n      };\n      /***/\n\n    },\n    /* 3 */\n\n    /***/\n    function (module, exports) {\n      module.exports = __WEBPACK_EXTERNAL_MODULE_3__;\n      /***/\n    },\n    /* 4 */\n\n    /***/\n    function (module, exports, __webpack_require__) {\n      Object.defineProperty(exports, \"__esModule\", {\n        value: true\n      });\n\n      var moment = __webpack_require__(0);\n\n      var $ = __webpack_require__(3);\n      /* FullCalendar-specific DOM Utilities\r\n      ----------------------------------------------------------------------------------------------------------------------*/\n      // Given the scrollbar widths of some other container, create borders/margins on rowEls in order to match the left\n      // and right space that was offset by the scrollbars. A 1-pixel border first, then margin beyond that.\n\n\n      function compensateScroll(rowEls, scrollbarWidths) {\n        if (scrollbarWidths.left) {\n          rowEls.css({\n            'border-left-width': 1,\n            'margin-left': scrollbarWidths.left - 1\n          });\n        }\n\n        if (scrollbarWidths.right) {\n          rowEls.css({\n            'border-right-width': 1,\n            'margin-right': scrollbarWidths.right - 1\n          });\n        }\n      }\n\n      exports.compensateScroll = compensateScroll; // Undoes compensateScroll and restores all borders/margins\n\n      function uncompensateScroll(rowEls) {\n        rowEls.css({\n          'margin-left': '',\n          'margin-right': '',\n          'border-left-width': '',\n          'border-right-width': ''\n        });\n      }\n\n      exports.uncompensateScroll = uncompensateScroll; // Make the mouse cursor express that an event is not allowed in the current area\n\n      function disableCursor() {\n        $('body').addClass('fc-not-allowed');\n      }\n\n      exports.disableCursor = disableCursor; // Returns the mouse cursor to its original look\n\n      function enableCursor() {\n        $('body').removeClass('fc-not-allowed');\n      }\n\n      exports.enableCursor = enableCursor; // Given a total available height to fill, have `els` (essentially child rows) expand to accomodate.\n      // By default, all elements that are shorter than the recommended height are expanded uniformly, not considering\n      // any other els that are already too tall. if `shouldRedistribute` is on, it considers these tall rows and\n      // reduces the available height.\n\n      function distributeHeight(els, availableHeight, shouldRedistribute) {\n        // *FLOORING NOTE*: we floor in certain places because zoom can give inaccurate floating-point dimensions,\n        // and it is better to be shorter than taller, to avoid creating unnecessary scrollbars.\n        var minOffset1 = Math.floor(availableHeight / els.length); // for non-last element\n\n        var minOffset2 = Math.floor(availableHeight - minOffset1 * (els.length - 1)); // for last element *FLOORING NOTE*\n\n        var flexEls = []; // elements that are allowed to expand. array of DOM nodes\n\n        var flexOffsets = []; // amount of vertical space it takes up\n\n        var flexHeights = []; // actual css height\n\n        var usedHeight = 0;\n        undistributeHeight(els); // give all elements their natural height\n        // find elements that are below the recommended height (expandable).\n        // important to query for heights in a single first pass (to avoid reflow oscillation).\n\n        els.each(function (i, el) {\n          var minOffset = i === els.length - 1 ? minOffset2 : minOffset1;\n          var naturalOffset = $(el).outerHeight(true);\n\n          if (naturalOffset < minOffset) {\n            flexEls.push(el);\n            flexOffsets.push(naturalOffset);\n            flexHeights.push($(el).height());\n          } else {\n            // this element stretches past recommended height (non-expandable). mark the space as occupied.\n            usedHeight += naturalOffset;\n          }\n        }); // readjust the recommended height to only consider the height available to non-maxed-out rows.\n\n        if (shouldRedistribute) {\n          availableHeight -= usedHeight;\n          minOffset1 = Math.floor(availableHeight / flexEls.length);\n          minOffset2 = Math.floor(availableHeight - minOffset1 * (flexEls.length - 1)); // *FLOORING NOTE*\n        } // assign heights to all expandable elements\n\n\n        $(flexEls).each(function (i, el) {\n          var minOffset = i === flexEls.length - 1 ? minOffset2 : minOffset1;\n          var naturalOffset = flexOffsets[i];\n          var naturalHeight = flexHeights[i];\n          var newHeight = minOffset - (naturalOffset - naturalHeight); // subtract the margin/padding\n\n          if (naturalOffset < minOffset) {\n            // we check this again because redistribution might have changed things\n            $(el).height(newHeight);\n          }\n        });\n      }\n\n      exports.distributeHeight = distributeHeight; // Undoes distrubuteHeight, restoring all els to their natural height\n\n      function undistributeHeight(els) {\n        els.height('');\n      }\n\n      exports.undistributeHeight = undistributeHeight; // Given `els`, a jQuery set of <td> cells, find the cell with the largest natural width and set the widths of all the\n      // cells to be that width.\n      // PREREQUISITE: if you want a cell to take up width, it needs to have a single inner element w/ display:inline\n\n      function matchCellWidths(els) {\n        var maxInnerWidth = 0;\n        els.find('> *').each(function (i, innerEl) {\n          var innerWidth = $(innerEl).outerWidth();\n\n          if (innerWidth > maxInnerWidth) {\n            maxInnerWidth = innerWidth;\n          }\n        });\n        maxInnerWidth++; // sometimes not accurate of width the text needs to stay on one line. insurance\n\n        els.width(maxInnerWidth);\n        return maxInnerWidth;\n      }\n\n      exports.matchCellWidths = matchCellWidths; // Given one element that resides inside another,\n      // Subtracts the height of the inner element from the outer element.\n\n      function subtractInnerElHeight(outerEl, innerEl) {\n        var both = outerEl.add(innerEl);\n        var diff; // effin' IE8/9/10/11 sometimes returns 0 for dimensions. this weird hack was the only thing that worked\n\n        both.css({\n          position: 'relative',\n          left: -1 // ensure reflow in case the el was already relative. negative is less likely to cause new scroll\n\n        });\n        diff = outerEl.outerHeight() - innerEl.outerHeight(); // grab the dimensions\n\n        both.css({\n          position: '',\n          left: ''\n        }); // undo hack\n\n        return diff;\n      }\n\n      exports.subtractInnerElHeight = subtractInnerElHeight;\n      /* Element Geom Utilities\r\n      ----------------------------------------------------------------------------------------------------------------------*/\n      // borrowed from https://github.com/jquery/jquery-ui/blob/1.11.0/ui/core.js#L51\n\n      function getScrollParent(el) {\n        var position = el.css('position');\n        var scrollParent = el.parents().filter(function () {\n          var parent = $(this);\n          return /(auto|scroll)/.test(parent.css('overflow') + parent.css('overflow-y') + parent.css('overflow-x'));\n        }).eq(0);\n        return position === 'fixed' || !scrollParent.length ? $(el[0].ownerDocument || document) : scrollParent;\n      }\n\n      exports.getScrollParent = getScrollParent; // Queries the outer bounding area of a jQuery element.\n      // Returns a rectangle with absolute coordinates: left, right (exclusive), top, bottom (exclusive).\n      // Origin is optional.\n\n      function getOuterRect(el, origin) {\n        var offset = el.offset();\n        var left = offset.left - (origin ? origin.left : 0);\n        var top = offset.top - (origin ? origin.top : 0);\n        return {\n          left: left,\n          right: left + el.outerWidth(),\n          top: top,\n          bottom: top + el.outerHeight()\n        };\n      }\n\n      exports.getOuterRect = getOuterRect; // Queries the area within the margin/border/scrollbars of a jQuery element. Does not go within the padding.\n      // Returns a rectangle with absolute coordinates: left, right (exclusive), top, bottom (exclusive).\n      // Origin is optional.\n      // WARNING: given element can't have borders\n      // NOTE: should use clientLeft/clientTop, but very unreliable cross-browser.\n\n      function getClientRect(el, origin) {\n        var offset = el.offset();\n        var scrollbarWidths = getScrollbarWidths(el);\n        var left = offset.left + getCssFloat(el, 'border-left-width') + scrollbarWidths.left - (origin ? origin.left : 0);\n        var top = offset.top + getCssFloat(el, 'border-top-width') + scrollbarWidths.top - (origin ? origin.top : 0);\n        return {\n          left: left,\n          right: left + el[0].clientWidth,\n          top: top,\n          bottom: top + el[0].clientHeight // clientHeight includes padding but NOT scrollbars\n\n        };\n      }\n\n      exports.getClientRect = getClientRect; // Queries the area within the margin/border/padding of a jQuery element. Assumed not to have scrollbars.\n      // Returns a rectangle with absolute coordinates: left, right (exclusive), top, bottom (exclusive).\n      // Origin is optional.\n\n      function getContentRect(el, origin) {\n        var offset = el.offset(); // just outside of border, margin not included\n\n        var left = offset.left + getCssFloat(el, 'border-left-width') + getCssFloat(el, 'padding-left') - (origin ? origin.left : 0);\n        var top = offset.top + getCssFloat(el, 'border-top-width') + getCssFloat(el, 'padding-top') - (origin ? origin.top : 0);\n        return {\n          left: left,\n          right: left + el.width(),\n          top: top,\n          bottom: top + el.height()\n        };\n      }\n\n      exports.getContentRect = getContentRect; // Returns the computed left/right/top/bottom scrollbar widths for the given jQuery element.\n      // WARNING: given element can't have borders (which will cause offsetWidth/offsetHeight to be larger).\n      // NOTE: should use clientLeft/clientTop, but very unreliable cross-browser.\n\n      function getScrollbarWidths(el) {\n        var leftRightWidth = el[0].offsetWidth - el[0].clientWidth;\n        var bottomWidth = el[0].offsetHeight - el[0].clientHeight;\n        var widths;\n        leftRightWidth = sanitizeScrollbarWidth(leftRightWidth);\n        bottomWidth = sanitizeScrollbarWidth(bottomWidth);\n        widths = {\n          left: 0,\n          right: 0,\n          top: 0,\n          bottom: bottomWidth\n        };\n\n        if (getIsLeftRtlScrollbars() && el.css('direction') === 'rtl') {\n          // is the scrollbar on the left side?\n          widths.left = leftRightWidth;\n        } else {\n          widths.right = leftRightWidth;\n        }\n\n        return widths;\n      }\n\n      exports.getScrollbarWidths = getScrollbarWidths; // The scrollbar width computations in getScrollbarWidths are sometimes flawed when it comes to\n      // retina displays, rounding, and IE11. Massage them into a usable value.\n\n      function sanitizeScrollbarWidth(width) {\n        width = Math.max(0, width); // no negatives\n\n        width = Math.round(width);\n        return width;\n      } // Logic for determining if, when the element is right-to-left, the scrollbar appears on the left side\n\n\n      var _isLeftRtlScrollbars = null;\n\n      function getIsLeftRtlScrollbars() {\n        if (_isLeftRtlScrollbars === null) {\n          _isLeftRtlScrollbars = computeIsLeftRtlScrollbars();\n        }\n\n        return _isLeftRtlScrollbars;\n      }\n\n      function computeIsLeftRtlScrollbars() {\n        var el = $('<div><div/></div>').css({\n          position: 'absolute',\n          top: -1000,\n          left: 0,\n          border: 0,\n          padding: 0,\n          overflow: 'scroll',\n          direction: 'rtl'\n        }).appendTo('body');\n        var innerEl = el.children();\n        var res = innerEl.offset().left > el.offset().left; // is the inner div shifted to accommodate a left scrollbar?\n\n        el.remove();\n        return res;\n      } // Retrieves a jQuery element's computed CSS value as a floating-point number.\n      // If the queried value is non-numeric (ex: IE can return \"medium\" for border width), will just return zero.\n\n\n      function getCssFloat(el, prop) {\n        return parseFloat(el.css(prop)) || 0;\n      }\n      /* Mouse / Touch Utilities\r\n      ----------------------------------------------------------------------------------------------------------------------*/\n      // Returns a boolean whether this was a left mouse click and no ctrl key (which means right click on Mac)\n\n\n      function isPrimaryMouseButton(ev) {\n        return ev.which === 1 && !ev.ctrlKey;\n      }\n\n      exports.isPrimaryMouseButton = isPrimaryMouseButton;\n\n      function getEvX(ev) {\n        var touches = ev.originalEvent.touches; // on mobile FF, pageX for touch events is present, but incorrect,\n        // so, look at touch coordinates first.\n\n        if (touches && touches.length) {\n          return touches[0].pageX;\n        }\n\n        return ev.pageX;\n      }\n\n      exports.getEvX = getEvX;\n\n      function getEvY(ev) {\n        var touches = ev.originalEvent.touches; // on mobile FF, pageX for touch events is present, but incorrect,\n        // so, look at touch coordinates first.\n\n        if (touches && touches.length) {\n          return touches[0].pageY;\n        }\n\n        return ev.pageY;\n      }\n\n      exports.getEvY = getEvY;\n\n      function getEvIsTouch(ev) {\n        return /^touch/.test(ev.type);\n      }\n\n      exports.getEvIsTouch = getEvIsTouch;\n\n      function preventSelection(el) {\n        el.addClass('fc-unselectable').on('selectstart', preventDefault);\n      }\n\n      exports.preventSelection = preventSelection;\n\n      function allowSelection(el) {\n        el.removeClass('fc-unselectable').off('selectstart', preventDefault);\n      }\n\n      exports.allowSelection = allowSelection; // Stops a mouse/touch event from doing it's native browser action\n\n      function preventDefault(ev) {\n        ev.preventDefault();\n      }\n\n      exports.preventDefault = preventDefault;\n      /* General Geometry Utils\r\n      ----------------------------------------------------------------------------------------------------------------------*/\n      // Returns a new rectangle that is the intersection of the two rectangles. If they don't intersect, returns false\n\n      function intersectRects(rect1, rect2) {\n        var res = {\n          left: Math.max(rect1.left, rect2.left),\n          right: Math.min(rect1.right, rect2.right),\n          top: Math.max(rect1.top, rect2.top),\n          bottom: Math.min(rect1.bottom, rect2.bottom)\n        };\n\n        if (res.left < res.right && res.top < res.bottom) {\n          return res;\n        }\n\n        return false;\n      }\n\n      exports.intersectRects = intersectRects; // Returns a new point that will have been moved to reside within the given rectangle\n\n      function constrainPoint(point, rect) {\n        return {\n          left: Math.min(Math.max(point.left, rect.left), rect.right),\n          top: Math.min(Math.max(point.top, rect.top), rect.bottom)\n        };\n      }\n\n      exports.constrainPoint = constrainPoint; // Returns a point that is the center of the given rectangle\n\n      function getRectCenter(rect) {\n        return {\n          left: (rect.left + rect.right) / 2,\n          top: (rect.top + rect.bottom) / 2\n        };\n      }\n\n      exports.getRectCenter = getRectCenter; // Subtracts point2's coordinates from point1's coordinates, returning a delta\n\n      function diffPoints(point1, point2) {\n        return {\n          left: point1.left - point2.left,\n          top: point1.top - point2.top\n        };\n      }\n\n      exports.diffPoints = diffPoints;\n      /* Object Ordering by Field\r\n      ----------------------------------------------------------------------------------------------------------------------*/\n\n      function parseFieldSpecs(input) {\n        var specs = [];\n        var tokens = [];\n        var i;\n        var token;\n\n        if (typeof input === 'string') {\n          tokens = input.split(/\\s*,\\s*/);\n        } else if (typeof input === 'function') {\n          tokens = [input];\n        } else if ($.isArray(input)) {\n          tokens = input;\n        }\n\n        for (i = 0; i < tokens.length; i++) {\n          token = tokens[i];\n\n          if (typeof token === 'string') {\n            specs.push(token.charAt(0) === '-' ? {\n              field: token.substring(1),\n              order: -1\n            } : {\n              field: token,\n              order: 1\n            });\n          } else if (typeof token === 'function') {\n            specs.push({\n              func: token\n            });\n          }\n        }\n\n        return specs;\n      }\n\n      exports.parseFieldSpecs = parseFieldSpecs;\n\n      function compareByFieldSpecs(obj1, obj2, fieldSpecs, obj1fallback, obj2fallback) {\n        var i;\n        var cmp;\n\n        for (i = 0; i < fieldSpecs.length; i++) {\n          cmp = compareByFieldSpec(obj1, obj2, fieldSpecs[i], obj1fallback, obj2fallback);\n\n          if (cmp) {\n            return cmp;\n          }\n        }\n\n        return 0;\n      }\n\n      exports.compareByFieldSpecs = compareByFieldSpecs;\n\n      function compareByFieldSpec(obj1, obj2, fieldSpec, obj1fallback, obj2fallback) {\n        if (fieldSpec.func) {\n          return fieldSpec.func(obj1, obj2);\n        }\n\n        var val1 = obj1[fieldSpec.field];\n        var val2 = obj2[fieldSpec.field];\n\n        if (val1 == null && obj1fallback) {\n          val1 = obj1fallback[fieldSpec.field];\n        }\n\n        if (val2 == null && obj2fallback) {\n          val2 = obj2fallback[fieldSpec.field];\n        }\n\n        return flexibleCompare(val1, val2) * (fieldSpec.order || 1);\n      }\n\n      exports.compareByFieldSpec = compareByFieldSpec;\n\n      function flexibleCompare(a, b) {\n        if (!a && !b) {\n          return 0;\n        }\n\n        if (b == null) {\n          return -1;\n        }\n\n        if (a == null) {\n          return 1;\n        }\n\n        if ($.type(a) === 'string' || $.type(b) === 'string') {\n          return String(a).localeCompare(String(b));\n        }\n\n        return a - b;\n      }\n\n      exports.flexibleCompare = flexibleCompare;\n      /* Date Utilities\r\n      ----------------------------------------------------------------------------------------------------------------------*/\n\n      exports.dayIDs = ['sun', 'mon', 'tue', 'wed', 'thu', 'fri', 'sat'];\n      exports.unitsDesc = ['year', 'month', 'week', 'day', 'hour', 'minute', 'second', 'millisecond']; // descending\n      // Diffs the two moments into a Duration where full-days are recorded first, then the remaining time.\n      // Moments will have their timezones normalized.\n\n      function diffDayTime(a, b) {\n        return moment.duration({\n          days: a.clone().stripTime().diff(b.clone().stripTime(), 'days'),\n          ms: a.time() - b.time() // time-of-day from day start. disregards timezone\n\n        });\n      }\n\n      exports.diffDayTime = diffDayTime; // Diffs the two moments via their start-of-day (regardless of timezone). Produces whole-day durations.\n\n      function diffDay(a, b) {\n        return moment.duration({\n          days: a.clone().stripTime().diff(b.clone().stripTime(), 'days')\n        });\n      }\n\n      exports.diffDay = diffDay; // Diffs two moments, producing a duration, made of a whole-unit-increment of the given unit. Uses rounding.\n\n      function diffByUnit(a, b, unit) {\n        return moment.duration(Math.round(a.diff(b, unit, true)), // returnFloat=true\n        unit);\n      }\n\n      exports.diffByUnit = diffByUnit; // Computes the unit name of the largest whole-unit period of time.\n      // For example, 48 hours will be \"days\" whereas 49 hours will be \"hours\".\n      // Accepts start/end, a range object, or an original duration object.\n\n      function computeGreatestUnit(start, end) {\n        var i;\n        var unit;\n        var val;\n\n        for (i = 0; i < exports.unitsDesc.length; i++) {\n          unit = exports.unitsDesc[i];\n          val = computeRangeAs(unit, start, end);\n\n          if (val >= 1 && isInt(val)) {\n            break;\n          }\n        }\n\n        return unit; // will be \"milliseconds\" if nothing else matches\n      }\n\n      exports.computeGreatestUnit = computeGreatestUnit; // like computeGreatestUnit, but has special abilities to interpret the source input for clues\n\n      function computeDurationGreatestUnit(duration, durationInput) {\n        var unit = computeGreatestUnit(duration); // prevent days:7 from being interpreted as a week\n\n        if (unit === 'week' && _typeof(durationInput) === 'object' && durationInput.days) {\n          unit = 'day';\n        }\n\n        return unit;\n      }\n\n      exports.computeDurationGreatestUnit = computeDurationGreatestUnit; // Computes the number of units (like \"hours\") in the given range.\n      // Range can be a {start,end} object, separate start/end args, or a Duration.\n      // Results are based on Moment's .as() and .diff() methods, so results can depend on internal handling\n      // of month-diffing logic (which tends to vary from version to version).\n\n      function computeRangeAs(unit, start, end) {\n        if (end != null) {\n          // given start, end\n          return end.diff(start, unit, true);\n        } else if (moment.isDuration(start)) {\n          // given duration\n          return start.as(unit);\n        } else {\n          // given { start, end } range object\n          return start.end.diff(start.start, unit, true);\n        }\n      } // Intelligently divides a range (specified by a start/end params) by a duration\n\n\n      function divideRangeByDuration(start, end, dur) {\n        var months;\n\n        if (durationHasTime(dur)) {\n          return (end - start) / dur;\n        }\n\n        months = dur.asMonths();\n\n        if (Math.abs(months) >= 1 && isInt(months)) {\n          return end.diff(start, 'months', true) / months;\n        }\n\n        return end.diff(start, 'days', true) / dur.asDays();\n      }\n\n      exports.divideRangeByDuration = divideRangeByDuration; // Intelligently divides one duration by another\n\n      function divideDurationByDuration(dur1, dur2) {\n        var months1;\n        var months2;\n\n        if (durationHasTime(dur1) || durationHasTime(dur2)) {\n          return dur1 / dur2;\n        }\n\n        months1 = dur1.asMonths();\n        months2 = dur2.asMonths();\n\n        if (Math.abs(months1) >= 1 && isInt(months1) && Math.abs(months2) >= 1 && isInt(months2)) {\n          return months1 / months2;\n        }\n\n        return dur1.asDays() / dur2.asDays();\n      }\n\n      exports.divideDurationByDuration = divideDurationByDuration; // Intelligently multiplies a duration by a number\n\n      function multiplyDuration(dur, n) {\n        var months;\n\n        if (durationHasTime(dur)) {\n          return moment.duration(dur * n);\n        }\n\n        months = dur.asMonths();\n\n        if (Math.abs(months) >= 1 && isInt(months)) {\n          return moment.duration({\n            months: months * n\n          });\n        }\n\n        return moment.duration({\n          days: dur.asDays() * n\n        });\n      }\n\n      exports.multiplyDuration = multiplyDuration; // Returns a boolean about whether the given duration has any time parts (hours/minutes/seconds/ms)\n\n      function durationHasTime(dur) {\n        return Boolean(dur.hours() || dur.minutes() || dur.seconds() || dur.milliseconds());\n      }\n\n      exports.durationHasTime = durationHasTime;\n\n      function isNativeDate(input) {\n        return Object.prototype.toString.call(input) === '[object Date]' || input instanceof Date;\n      }\n\n      exports.isNativeDate = isNativeDate; // Returns a boolean about whether the given input is a time string, like \"06:40:00\" or \"06:00\"\n\n      function isTimeString(str) {\n        return typeof str === 'string' && /^\\d+\\:\\d+(?:\\:\\d+\\.?(?:\\d{3})?)?$/.test(str);\n      }\n\n      exports.isTimeString = isTimeString;\n      /* Logging and Debug\r\n      ----------------------------------------------------------------------------------------------------------------------*/\n\n      function log() {\n        var args = [];\n\n        for (var _i = 0; _i < arguments.length; _i++) {\n          args[_i] = arguments[_i];\n        }\n\n        var console = window.console;\n\n        if (console && console.log) {\n          return console.log.apply(console, args);\n        }\n      }\n\n      exports.log = log;\n\n      function warn() {\n        var args = [];\n\n        for (var _i = 0; _i < arguments.length; _i++) {\n          args[_i] = arguments[_i];\n        }\n\n        var console = window.console;\n\n        if (console && console.warn) {\n          return console.warn.apply(console, args);\n        } else {\n          return log.apply(null, args);\n        }\n      }\n\n      exports.warn = warn;\n      /* General Utilities\r\n      ----------------------------------------------------------------------------------------------------------------------*/\n\n      var hasOwnPropMethod = {}.hasOwnProperty; // Merges an array of objects into a single object.\n      // The second argument allows for an array of property names who's object values will be merged together.\n\n      function mergeProps(propObjs, complexProps) {\n        var dest = {};\n        var i;\n        var name;\n        var complexObjs;\n        var j;\n        var val;\n        var props;\n\n        if (complexProps) {\n          for (i = 0; i < complexProps.length; i++) {\n            name = complexProps[i];\n            complexObjs = []; // collect the trailing object values, stopping when a non-object is discovered\n\n            for (j = propObjs.length - 1; j >= 0; j--) {\n              val = propObjs[j][name];\n\n              if (_typeof(val) === 'object') {\n                complexObjs.unshift(val);\n              } else if (val !== undefined) {\n                dest[name] = val; // if there were no objects, this value will be used\n\n                break;\n              }\n            } // if the trailing values were objects, use the merged value\n\n\n            if (complexObjs.length) {\n              dest[name] = mergeProps(complexObjs);\n            }\n          }\n        } // copy values into the destination, going from last to first\n\n\n        for (i = propObjs.length - 1; i >= 0; i--) {\n          props = propObjs[i];\n\n          for (name in props) {\n            if (!(name in dest)) {\n              // if already assigned by previous props or complex props, don't reassign\n              dest[name] = props[name];\n            }\n          }\n        }\n\n        return dest;\n      }\n\n      exports.mergeProps = mergeProps;\n\n      function copyOwnProps(src, dest) {\n        for (var name_1 in src) {\n          if (hasOwnProp(src, name_1)) {\n            dest[name_1] = src[name_1];\n          }\n        }\n      }\n\n      exports.copyOwnProps = copyOwnProps;\n\n      function hasOwnProp(obj, name) {\n        return hasOwnPropMethod.call(obj, name);\n      }\n\n      exports.hasOwnProp = hasOwnProp;\n\n      function applyAll(functions, thisObj, args) {\n        if ($.isFunction(functions)) {\n          functions = [functions];\n        }\n\n        if (functions) {\n          var i = void 0;\n          var ret = void 0;\n\n          for (i = 0; i < functions.length; i++) {\n            ret = functions[i].apply(thisObj, args) || ret;\n          }\n\n          return ret;\n        }\n      }\n\n      exports.applyAll = applyAll;\n\n      function removeMatching(array, testFunc) {\n        var removeCnt = 0;\n        var i = 0;\n\n        while (i < array.length) {\n          if (testFunc(array[i])) {\n            // truthy value means *remove*\n            array.splice(i, 1);\n            removeCnt++;\n          } else {\n            i++;\n          }\n        }\n\n        return removeCnt;\n      }\n\n      exports.removeMatching = removeMatching;\n\n      function removeExact(array, exactVal) {\n        var removeCnt = 0;\n        var i = 0;\n\n        while (i < array.length) {\n          if (array[i] === exactVal) {\n            array.splice(i, 1);\n            removeCnt++;\n          } else {\n            i++;\n          }\n        }\n\n        return removeCnt;\n      }\n\n      exports.removeExact = removeExact;\n\n      function isArraysEqual(a0, a1) {\n        var len = a0.length;\n        var i;\n\n        if (len == null || len !== a1.length) {\n          // not array? or not same length?\n          return false;\n        }\n\n        for (i = 0; i < len; i++) {\n          if (a0[i] !== a1[i]) {\n            return false;\n          }\n        }\n\n        return true;\n      }\n\n      exports.isArraysEqual = isArraysEqual;\n\n      function firstDefined() {\n        var args = [];\n\n        for (var _i = 0; _i < arguments.length; _i++) {\n          args[_i] = arguments[_i];\n        }\n\n        for (var i = 0; i < args.length; i++) {\n          if (args[i] !== undefined) {\n            return args[i];\n          }\n        }\n      }\n\n      exports.firstDefined = firstDefined;\n\n      function htmlEscape(s) {\n        return (s + '').replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/'/g, '&#039;').replace(/\"/g, '&quot;').replace(/\\n/g, '<br />');\n      }\n\n      exports.htmlEscape = htmlEscape;\n\n      function stripHtmlEntities(text) {\n        return text.replace(/&.*?;/g, '');\n      }\n\n      exports.stripHtmlEntities = stripHtmlEntities; // Given a hash of CSS properties, returns a string of CSS.\n      // Uses property names as-is (no camel-case conversion). Will not make statements for null/undefined values.\n\n      function cssToStr(cssProps) {\n        var statements = [];\n        $.each(cssProps, function (name, val) {\n          if (val != null) {\n            statements.push(name + ':' + val);\n          }\n        });\n        return statements.join(';');\n      }\n\n      exports.cssToStr = cssToStr; // Given an object hash of HTML attribute names to values,\n      // generates a string that can be injected between < > in HTML\n\n      function attrsToStr(attrs) {\n        var parts = [];\n        $.each(attrs, function (name, val) {\n          if (val != null) {\n            parts.push(name + '=\"' + htmlEscape(val) + '\"');\n          }\n        });\n        return parts.join(' ');\n      }\n\n      exports.attrsToStr = attrsToStr;\n\n      function capitaliseFirstLetter(str) {\n        return str.charAt(0).toUpperCase() + str.slice(1);\n      }\n\n      exports.capitaliseFirstLetter = capitaliseFirstLetter;\n\n      function compareNumbers(a, b) {\n        return a - b;\n      }\n\n      exports.compareNumbers = compareNumbers;\n\n      function isInt(n) {\n        return n % 1 === 0;\n      }\n\n      exports.isInt = isInt; // Returns a method bound to the given object context.\n      // Just like one of the jQuery.proxy signatures, but without the undesired behavior of treating the same method with\n      // different contexts as identical when binding/unbinding events.\n\n      function proxy(obj, methodName) {\n        var method = obj[methodName];\n        return function () {\n          return method.apply(obj, arguments);\n        };\n      }\n\n      exports.proxy = proxy; // Returns a function, that, as long as it continues to be invoked, will not\n      // be triggered. The function will be called after it stops being called for\n      // N milliseconds. If `immediate` is passed, trigger the function on the\n      // leading edge, instead of the trailing.\n      // https://github.com/jashkenas/underscore/blob/1.6.0/underscore.js#L714\n\n      function debounce(func, wait, immediate) {\n        if (immediate === void 0) {\n          immediate = false;\n        }\n\n        var timeout;\n        var args;\n        var context;\n        var timestamp;\n        var result;\n\n        var later = function later() {\n          var last = +new Date() - timestamp;\n\n          if (last < wait) {\n            timeout = setTimeout(later, wait - last);\n          } else {\n            timeout = null;\n\n            if (!immediate) {\n              result = func.apply(context, args);\n              context = args = null;\n            }\n          }\n        };\n\n        return function () {\n          context = this;\n          args = arguments;\n          timestamp = +new Date();\n          var callNow = immediate && !timeout;\n\n          if (!timeout) {\n            timeout = setTimeout(later, wait);\n          }\n\n          if (callNow) {\n            result = func.apply(context, args);\n            context = args = null;\n          }\n\n          return result;\n        };\n      }\n\n      exports.debounce = debounce;\n      /***/\n    },\n    /* 5 */\n\n    /***/\n    function (module, exports, __webpack_require__) {\n      Object.defineProperty(exports, \"__esModule\", {\n        value: true\n      });\n\n      var moment = __webpack_require__(0);\n\n      var moment_ext_1 = __webpack_require__(11);\n\n      var UnzonedRange =\n      /** @class */\n      function () {\n        function UnzonedRange(startInput, endInput) {\n          // TODO: move these into footprint.\n          // Especially, doesn't make sense for null startMs/endMs.\n          this.isStart = true;\n          this.isEnd = true;\n\n          if (moment.isMoment(startInput)) {\n            startInput = startInput.clone().stripZone();\n          }\n\n          if (moment.isMoment(endInput)) {\n            endInput = endInput.clone().stripZone();\n          }\n\n          if (startInput) {\n            this.startMs = startInput.valueOf();\n          }\n\n          if (endInput) {\n            this.endMs = endInput.valueOf();\n          }\n        }\n        /*\r\n        SIDEEFFECT: will mutate eventRanges.\r\n        Will return a new array result.\r\n        Only works for non-open-ended ranges.\r\n        */\n\n\n        UnzonedRange.invertRanges = function (ranges, constraintRange) {\n          var invertedRanges = [];\n          var startMs = constraintRange.startMs; // the end of the previous range. the start of the new range\n\n          var i;\n          var dateRange; // ranges need to be in order. required for our date-walking algorithm\n\n          ranges.sort(compareUnzonedRanges);\n\n          for (i = 0; i < ranges.length; i++) {\n            dateRange = ranges[i]; // add the span of time before the event (if there is any)\n\n            if (dateRange.startMs > startMs) {\n              // compare millisecond time (skip any ambig logic)\n              invertedRanges.push(new UnzonedRange(startMs, dateRange.startMs));\n            }\n\n            if (dateRange.endMs > startMs) {\n              startMs = dateRange.endMs;\n            }\n          } // add the span of time after the last event (if there is any)\n\n\n          if (startMs < constraintRange.endMs) {\n            // compare millisecond time (skip any ambig logic)\n            invertedRanges.push(new UnzonedRange(startMs, constraintRange.endMs));\n          }\n\n          return invertedRanges;\n        };\n\n        UnzonedRange.prototype.intersect = function (otherRange) {\n          var startMs = this.startMs;\n          var endMs = this.endMs;\n          var newRange = null;\n\n          if (otherRange.startMs != null) {\n            if (startMs == null) {\n              startMs = otherRange.startMs;\n            } else {\n              startMs = Math.max(startMs, otherRange.startMs);\n            }\n          }\n\n          if (otherRange.endMs != null) {\n            if (endMs == null) {\n              endMs = otherRange.endMs;\n            } else {\n              endMs = Math.min(endMs, otherRange.endMs);\n            }\n          }\n\n          if (startMs == null || endMs == null || startMs < endMs) {\n            newRange = new UnzonedRange(startMs, endMs);\n            newRange.isStart = this.isStart && startMs === this.startMs;\n            newRange.isEnd = this.isEnd && endMs === this.endMs;\n          }\n\n          return newRange;\n        };\n\n        UnzonedRange.prototype.intersectsWith = function (otherRange) {\n          return (this.endMs == null || otherRange.startMs == null || this.endMs > otherRange.startMs) && (this.startMs == null || otherRange.endMs == null || this.startMs < otherRange.endMs);\n        };\n\n        UnzonedRange.prototype.containsRange = function (innerRange) {\n          return (this.startMs == null || innerRange.startMs != null && innerRange.startMs >= this.startMs) && (this.endMs == null || innerRange.endMs != null && innerRange.endMs <= this.endMs);\n        }; // `date` can be a moment, a Date, or a millisecond time.\n\n\n        UnzonedRange.prototype.containsDate = function (date) {\n          var ms = date.valueOf();\n          return (this.startMs == null || ms >= this.startMs) && (this.endMs == null || ms < this.endMs);\n        }; // If the given date is not within the given range, move it inside.\n        // (If it's past the end, make it one millisecond before the end).\n        // `date` can be a moment, a Date, or a millisecond time.\n        // Returns a MS-time.\n\n\n        UnzonedRange.prototype.constrainDate = function (date) {\n          var ms = date.valueOf();\n\n          if (this.startMs != null && ms < this.startMs) {\n            ms = this.startMs;\n          }\n\n          if (this.endMs != null && ms >= this.endMs) {\n            ms = this.endMs - 1;\n          }\n\n          return ms;\n        };\n\n        UnzonedRange.prototype.equals = function (otherRange) {\n          return this.startMs === otherRange.startMs && this.endMs === otherRange.endMs;\n        };\n\n        UnzonedRange.prototype.clone = function () {\n          var range = new UnzonedRange(this.startMs, this.endMs);\n          range.isStart = this.isStart;\n          range.isEnd = this.isEnd;\n          return range;\n        }; // Returns an ambig-zoned moment from startMs.\n        // BEWARE: returned moment is not localized.\n        // Formatting and start-of-week will be default.\n\n\n        UnzonedRange.prototype.getStart = function () {\n          if (this.startMs != null) {\n            return moment_ext_1[\"default\"].utc(this.startMs).stripZone();\n          }\n\n          return null;\n        }; // Returns an ambig-zoned moment from startMs.\n        // BEWARE: returned moment is not localized.\n        // Formatting and start-of-week will be default.\n\n\n        UnzonedRange.prototype.getEnd = function () {\n          if (this.endMs != null) {\n            return moment_ext_1[\"default\"].utc(this.endMs).stripZone();\n          }\n\n          return null;\n        };\n\n        UnzonedRange.prototype.as = function (unit) {\n          return moment.utc(this.endMs).diff(moment.utc(this.startMs), unit, true);\n        };\n\n        return UnzonedRange;\n      }();\n\n      exports[\"default\"] = UnzonedRange;\n      /*\r\n      Only works for non-open-ended ranges.\r\n      */\n\n      function compareUnzonedRanges(range1, range2) {\n        return range1.startMs - range2.startMs; // earlier ranges go first\n      }\n      /***/\n\n    },\n    /* 6 */\n\n    /***/\n    function (module, exports, __webpack_require__) {\n      Object.defineProperty(exports, \"__esModule\", {\n        value: true\n      });\n\n      var tslib_1 = __webpack_require__(2);\n\n      var $ = __webpack_require__(3);\n\n      var ParsableModelMixin_1 = __webpack_require__(52);\n\n      var Class_1 = __webpack_require__(35);\n\n      var EventDefParser_1 = __webpack_require__(36);\n\n      var EventSource =\n      /** @class */\n      function (_super) {\n        tslib_1.__extends(EventSource, _super); // can we do away with calendar? at least for the abstract?\n        // useful for buildEventDef\n\n\n        function EventSource(calendar) {\n          var _this = _super.call(this) || this;\n\n          _this.calendar = calendar;\n          _this.className = [];\n          _this.uid = String(EventSource.uuid++);\n          return _this;\n        }\n        /*\r\n        rawInput can be any data type!\r\n        */\n\n\n        EventSource.parse = function (rawInput, calendar) {\n          var source = new this(calendar);\n\n          if (_typeof(rawInput) === 'object') {\n            if (source.applyProps(rawInput)) {\n              return source;\n            }\n          }\n\n          return false;\n        };\n\n        EventSource.normalizeId = function (id) {\n          if (id) {\n            return String(id);\n          }\n\n          return null;\n        };\n\n        EventSource.prototype.fetch = function (start, end, timezone) {// subclasses must implement. must return a promise.\n        };\n\n        EventSource.prototype.removeEventDefsById = function (eventDefId) {// optional for subclasses to implement\n        };\n\n        EventSource.prototype.removeAllEventDefs = function () {// optional for subclasses to implement\n        };\n        /*\r\n        For compairing/matching\r\n        */\n\n\n        EventSource.prototype.getPrimitive = function (otherSource) {// subclasses must implement\n        };\n\n        EventSource.prototype.parseEventDefs = function (rawEventDefs) {\n          var i;\n          var eventDef;\n          var eventDefs = [];\n\n          for (i = 0; i < rawEventDefs.length; i++) {\n            eventDef = this.parseEventDef(rawEventDefs[i]);\n\n            if (eventDef) {\n              eventDefs.push(eventDef);\n            }\n          }\n\n          return eventDefs;\n        };\n\n        EventSource.prototype.parseEventDef = function (rawInput) {\n          var calendarTransform = this.calendar.opt('eventDataTransform');\n          var sourceTransform = this.eventDataTransform;\n\n          if (calendarTransform) {\n            rawInput = calendarTransform(rawInput, this.calendar);\n          }\n\n          if (sourceTransform) {\n            rawInput = sourceTransform(rawInput, this.calendar);\n          }\n\n          return EventDefParser_1[\"default\"].parse(rawInput, this);\n        };\n\n        EventSource.prototype.applyManualStandardProps = function (rawProps) {\n          if (rawProps.id != null) {\n            this.id = EventSource.normalizeId(rawProps.id);\n          } // TODO: converge with EventDef\n\n\n          if ($.isArray(rawProps.className)) {\n            this.className = rawProps.className;\n          } else if (typeof rawProps.className === 'string') {\n            this.className = rawProps.className.split(/\\s+/);\n          }\n\n          return true;\n        };\n\n        EventSource.uuid = 0;\n        EventSource.defineStandardProps = ParsableModelMixin_1[\"default\"].defineStandardProps;\n        EventSource.copyVerbatimStandardProps = ParsableModelMixin_1[\"default\"].copyVerbatimStandardProps;\n        return EventSource;\n      }(Class_1[\"default\"]);\n\n      exports[\"default\"] = EventSource;\n      ParsableModelMixin_1[\"default\"].mixInto(EventSource); // Parsing\n      // ---------------------------------------------------------------------------------------------------------------------\n\n      EventSource.defineStandardProps({\n        // manually process...\n        id: false,\n        className: false,\n        // automatically transfer...\n        color: true,\n        backgroundColor: true,\n        borderColor: true,\n        textColor: true,\n        editable: true,\n        startEditable: true,\n        durationEditable: true,\n        rendering: true,\n        overlap: true,\n        constraint: true,\n        allDayDefault: true,\n        eventDataTransform: true\n      });\n      /***/\n    },\n    /* 7 */\n\n    /***/\n    function (module, exports, __webpack_require__) {\n      /*\r\n      Utility methods for easily listening to events on another object,\r\n      and more importantly, easily unlistening from them.\r\n      \n      USAGE:\r\n        import { default as ListenerMixin, ListenerInterface } from './ListenerMixin'\r\n      in class:\r\n        listenTo: ListenerInterface['listenTo']\r\n        stopListeningTo: ListenerInterface['stopListeningTo']\r\n      after class:\r\n        ListenerMixin.mixInto(TheClass)\r\n      */\n      Object.defineProperty(exports, \"__esModule\", {\n        value: true\n      });\n\n      var tslib_1 = __webpack_require__(2);\n\n      var $ = __webpack_require__(3);\n\n      var Mixin_1 = __webpack_require__(15);\n\n      var guid = 0;\n\n      var ListenerMixin =\n      /** @class */\n      function (_super) {\n        tslib_1.__extends(ListenerMixin, _super);\n\n        function ListenerMixin() {\n          return _super !== null && _super.apply(this, arguments) || this;\n        }\n        /*\r\n        Given an `other` object that has on/off methods, bind the given `callback` to an event by the given name.\r\n        The `callback` will be called with the `this` context of the object that .listenTo is being called on.\r\n        Can be called:\r\n          .listenTo(other, eventName, callback)\r\n        OR\r\n          .listenTo(other, {\r\n            eventName1: callback1,\r\n            eventName2: callback2\r\n          })\r\n        */\n\n\n        ListenerMixin.prototype.listenTo = function (other, arg, callback) {\n          if (_typeof(arg) === 'object') {\n            // given dictionary of callbacks\n            for (var eventName in arg) {\n              if (arg.hasOwnProperty(eventName)) {\n                this.listenTo(other, eventName, arg[eventName]);\n              }\n            }\n          } else if (typeof arg === 'string') {\n            other.on(arg + '.' + this.getListenerNamespace(), // use event namespacing to identify this object\n            $.proxy(callback, this) // always use `this` context\n            // the usually-undesired jQuery guid behavior doesn't matter,\n            // because we always unbind via namespace\n            );\n          }\n        };\n        /*\r\n        Causes the current object to stop listening to events on the `other` object.\r\n        `eventName` is optional. If omitted, will stop listening to ALL events on `other`.\r\n        */\n\n\n        ListenerMixin.prototype.stopListeningTo = function (other, eventName) {\n          other.off((eventName || '') + '.' + this.getListenerNamespace());\n        };\n        /*\r\n        Returns a string, unique to this object, to be used for event namespacing\r\n        */\n\n\n        ListenerMixin.prototype.getListenerNamespace = function () {\n          if (this.listenerId == null) {\n            this.listenerId = guid++;\n          }\n\n          return '_listener' + this.listenerId;\n        };\n\n        return ListenerMixin;\n      }(Mixin_1[\"default\"]);\n\n      exports[\"default\"] = ListenerMixin;\n      /***/\n    },,\n    /* 8 */\n\n    /* 9 */\n\n    /***/\n    function (module, exports, __webpack_require__) {\n      Object.defineProperty(exports, \"__esModule\", {\n        value: true\n      });\n\n      var tslib_1 = __webpack_require__(2);\n\n      var EventDef_1 = __webpack_require__(37);\n\n      var EventInstance_1 = __webpack_require__(53);\n\n      var EventDateProfile_1 = __webpack_require__(16);\n\n      var SingleEventDef =\n      /** @class */\n      function (_super) {\n        tslib_1.__extends(SingleEventDef, _super);\n\n        function SingleEventDef() {\n          return _super !== null && _super.apply(this, arguments) || this;\n        }\n        /*\r\n        Will receive start/end params, but will be ignored.\r\n        */\n\n\n        SingleEventDef.prototype.buildInstances = function () {\n          return [this.buildInstance()];\n        };\n\n        SingleEventDef.prototype.buildInstance = function () {\n          return new EventInstance_1[\"default\"](this, // definition\n          this.dateProfile);\n        };\n\n        SingleEventDef.prototype.isAllDay = function () {\n          return this.dateProfile.isAllDay();\n        };\n\n        SingleEventDef.prototype.clone = function () {\n          var def = _super.prototype.clone.call(this);\n\n          def.dateProfile = this.dateProfile;\n          return def;\n        };\n\n        SingleEventDef.prototype.rezone = function () {\n          var calendar = this.source.calendar;\n          var dateProfile = this.dateProfile;\n          this.dateProfile = new EventDateProfile_1[\"default\"](calendar.moment(dateProfile.start), dateProfile.end ? calendar.moment(dateProfile.end) : null, calendar);\n        };\n        /*\r\n        NOTE: if super-method fails, should still attempt to apply\r\n        */\n\n\n        SingleEventDef.prototype.applyManualStandardProps = function (rawProps) {\n          var superSuccess = _super.prototype.applyManualStandardProps.call(this, rawProps);\n\n          var dateProfile = EventDateProfile_1[\"default\"].parse(rawProps, this.source); // returns null on failure\n\n          if (dateProfile) {\n            this.dateProfile = dateProfile; // make sure `date` shows up in the legacy event objects as-is\n\n            if (rawProps.date != null) {\n              this.miscProps.date = rawProps.date;\n            }\n\n            return superSuccess;\n          } else {\n            return false;\n          }\n        };\n\n        return SingleEventDef;\n      }(EventDef_1[\"default\"]);\n\n      exports[\"default\"] = SingleEventDef; // Parsing\n      // ---------------------------------------------------------------------------------------------------------------------\n\n      SingleEventDef.defineStandardProps({\n        start: false,\n        date: false,\n        end: false,\n        allDay: false\n      });\n      /***/\n    },,\n    /* 10 */\n\n    /* 11 */\n\n    /***/\n    function (module, exports, __webpack_require__) {\n      Object.defineProperty(exports, \"__esModule\", {\n        value: true\n      });\n\n      var moment = __webpack_require__(0);\n\n      var $ = __webpack_require__(3);\n\n      var util_1 = __webpack_require__(4);\n\n      var ambigDateOfMonthRegex = /^\\s*\\d{4}-\\d\\d$/;\n      var ambigTimeOrZoneRegex = /^\\s*\\d{4}-(?:(\\d\\d-\\d\\d)|(W\\d\\d$)|(W\\d\\d-\\d)|(\\d\\d\\d))((T| )(\\d\\d(:\\d\\d(:\\d\\d(\\.\\d+)?)?)?)?)?$/;\n      var newMomentProto = moment.fn; // where we will attach our new methods\n\n      exports.newMomentProto = newMomentProto;\n      var oldMomentProto = $.extend({}, newMomentProto); // copy of original moment methods\n\n      exports.oldMomentProto = oldMomentProto; // tell momentjs to transfer these properties upon clone\n\n      var momentProperties = moment.momentProperties;\n      momentProperties.push('_fullCalendar');\n      momentProperties.push('_ambigTime');\n      momentProperties.push('_ambigZone');\n      /*\r\n      Call this if you want Moment's original format method to be used\r\n      */\n\n      function oldMomentFormat(mom, formatStr) {\n        return oldMomentProto.format.call(mom, formatStr); // oldMomentProto defined in moment-ext.js\n      }\n\n      exports.oldMomentFormat = oldMomentFormat; // Creating\n      // -------------------------------------------------------------------------------------------------\n      // Creates a new moment, similar to the vanilla moment(...) constructor, but with\n      // extra features (ambiguous time, enhanced formatting). When given an existing moment,\n      // it will function as a clone (and retain the zone of the moment). Anything else will\n      // result in a moment in the local zone.\n\n      var momentExt = function momentExt() {\n        return makeMoment(arguments);\n      };\n\n      exports[\"default\"] = momentExt; // Sames as momentExt, but forces the resulting moment to be in the UTC timezone.\n\n      momentExt.utc = function () {\n        var mom = makeMoment(arguments, true); // Force it into UTC because makeMoment doesn't guarantee it\n        // (if given a pre-existing moment for example)\n\n        if (mom.hasTime()) {\n          // don't give ambiguously-timed moments a UTC zone\n          mom.utc();\n        }\n\n        return mom;\n      }; // Same as momentExt, but when given an ISO8601 string, the timezone offset is preserved.\n      // ISO8601 strings with no timezone offset will become ambiguously zoned.\n\n\n      momentExt.parseZone = function () {\n        return makeMoment(arguments, true, true);\n      }; // Builds an enhanced moment from args. When given an existing moment, it clones. When given a\n      // native Date, or called with no arguments (the current time), the resulting moment will be local.\n      // Anything else needs to be \"parsed\" (a string or an array), and will be affected by:\n      //    parseAsUTC - if there is no zone information, should we parse the input in UTC?\n      //    parseZone - if there is zone information, should we force the zone of the moment?\n\n\n      function makeMoment(args, parseAsUTC, parseZone) {\n        if (parseAsUTC === void 0) {\n          parseAsUTC = false;\n        }\n\n        if (parseZone === void 0) {\n          parseZone = false;\n        }\n\n        var input = args[0];\n        var isSingleString = args.length === 1 && typeof input === 'string';\n        var isAmbigTime;\n        var isAmbigZone;\n        var ambigMatch;\n        var mom;\n\n        if (moment.isMoment(input) || util_1.isNativeDate(input) || input === undefined) {\n          mom = moment.apply(null, args);\n        } else {\n          // \"parsing\" is required\n          isAmbigTime = false;\n          isAmbigZone = false;\n\n          if (isSingleString) {\n            if (ambigDateOfMonthRegex.test(input)) {\n              // accept strings like '2014-05', but convert to the first of the month\n              input += '-01';\n              args = [input]; // for when we pass it on to moment's constructor\n\n              isAmbigTime = true;\n              isAmbigZone = true;\n            } else if (ambigMatch = ambigTimeOrZoneRegex.exec(input)) {\n              isAmbigTime = !ambigMatch[5]; // no time part?\n\n              isAmbigZone = true;\n            }\n          } else if ($.isArray(input)) {\n            // arrays have no timezone information, so assume ambiguous zone\n            isAmbigZone = true;\n          } // otherwise, probably a string with a format\n\n\n          if (parseAsUTC || isAmbigTime) {\n            mom = moment.utc.apply(moment, args);\n          } else {\n            mom = moment.apply(null, args);\n          }\n\n          if (isAmbigTime) {\n            mom._ambigTime = true;\n            mom._ambigZone = true; // ambiguous time always means ambiguous zone\n          } else if (parseZone) {\n            // let's record the inputted zone somehow\n            if (isAmbigZone) {\n              mom._ambigZone = true;\n            } else if (isSingleString) {\n              mom.utcOffset(input); // if not a valid zone, will assign UTC\n            }\n          }\n        }\n\n        mom._fullCalendar = true; // flag for extended functionality\n\n        return mom;\n      } // Week Number\n      // -------------------------------------------------------------------------------------------------\n      // Returns the week number, considering the locale's custom week number calcuation\n      // `weeks` is an alias for `week`\n\n\n      newMomentProto.week = newMomentProto.weeks = function (input) {\n        var weekCalc = this._locale._fullCalendar_weekCalc;\n\n        if (input == null && typeof weekCalc === 'function') {\n          // custom function only works for getter\n          return weekCalc(this);\n        } else if (weekCalc === 'ISO') {\n          return oldMomentProto.isoWeek.apply(this, arguments); // ISO getter/setter\n        }\n\n        return oldMomentProto.week.apply(this, arguments); // local getter/setter\n      }; // Time-of-day\n      // -------------------------------------------------------------------------------------------------\n      // GETTER\n      // Returns a Duration with the hours/minutes/seconds/ms values of the moment.\n      // If the moment has an ambiguous time, a duration of 00:00 will be returned.\n      //\n      // SETTER\n      // You can supply a Duration, a Moment, or a Duration-like argument.\n      // When setting the time, and the moment has an ambiguous time, it then becomes unambiguous.\n\n\n      newMomentProto.time = function (time) {\n        // Fallback to the original method (if there is one) if this moment wasn't created via FullCalendar.\n        // `time` is a generic enough method name where this precaution is necessary to avoid collisions w/ other plugins.\n        if (!this._fullCalendar) {\n          return oldMomentProto.time.apply(this, arguments);\n        }\n\n        if (time == null) {\n          // getter\n          return moment.duration({\n            hours: this.hours(),\n            minutes: this.minutes(),\n            seconds: this.seconds(),\n            milliseconds: this.milliseconds()\n          });\n        } else {\n          // setter\n          this._ambigTime = false; // mark that the moment now has a time\n\n          if (!moment.isDuration(time) && !moment.isMoment(time)) {\n            time = moment.duration(time);\n          } // The day value should cause overflow (so 24 hours becomes 00:00:00 of next day).\n          // Only for Duration times, not Moment times.\n\n\n          var dayHours = 0;\n\n          if (moment.isDuration(time)) {\n            dayHours = Math.floor(time.asDays()) * 24;\n          } // We need to set the individual fields.\n          // Can't use startOf('day') then add duration. In case of DST at start of day.\n\n\n          return this.hours(dayHours + time.hours()).minutes(time.minutes()).seconds(time.seconds()).milliseconds(time.milliseconds());\n        }\n      }; // Converts the moment to UTC, stripping out its time-of-day and timezone offset,\n      // but preserving its YMD. A moment with a stripped time will display no time\n      // nor timezone offset when .format() is called.\n\n\n      newMomentProto.stripTime = function () {\n        if (!this._ambigTime) {\n          this.utc(true); // keepLocalTime=true (for keeping *date* value)\n          // set time to zero\n\n          this.set({\n            hours: 0,\n            minutes: 0,\n            seconds: 0,\n            ms: 0\n          }); // Mark the time as ambiguous. This needs to happen after the .utc() call, which might call .utcOffset(),\n          // which clears all ambig flags.\n\n          this._ambigTime = true;\n          this._ambigZone = true; // if ambiguous time, also ambiguous timezone offset\n        }\n\n        return this; // for chaining\n      }; // Returns if the moment has a non-ambiguous time (boolean)\n\n\n      newMomentProto.hasTime = function () {\n        return !this._ambigTime;\n      }; // Timezone\n      // -------------------------------------------------------------------------------------------------\n      // Converts the moment to UTC, stripping out its timezone offset, but preserving its\n      // YMD and time-of-day. A moment with a stripped timezone offset will display no\n      // timezone offset when .format() is called.\n\n\n      newMomentProto.stripZone = function () {\n        var wasAmbigTime;\n\n        if (!this._ambigZone) {\n          wasAmbigTime = this._ambigTime;\n          this.utc(true); // keepLocalTime=true (for keeping date and time values)\n          // the above call to .utc()/.utcOffset() unfortunately might clear the ambig flags, so restore\n\n          this._ambigTime = wasAmbigTime || false; // Mark the zone as ambiguous. This needs to happen after the .utc() call, which might call .utcOffset(),\n          // which clears the ambig flags.\n\n          this._ambigZone = true;\n        }\n\n        return this; // for chaining\n      }; // Returns of the moment has a non-ambiguous timezone offset (boolean)\n\n\n      newMomentProto.hasZone = function () {\n        return !this._ambigZone;\n      }; // implicitly marks a zone\n\n\n      newMomentProto.local = function (keepLocalTime) {\n        // for when converting from ambiguously-zoned to local,\n        // keep the time values when converting from UTC -> local\n        oldMomentProto.local.call(this, this._ambigZone || keepLocalTime); // ensure non-ambiguous\n        // this probably already happened via local() -> utcOffset(), but don't rely on Moment's internals\n\n        this._ambigTime = false;\n        this._ambigZone = false;\n        return this; // for chaining\n      }; // implicitly marks a zone\n\n\n      newMomentProto.utc = function (keepLocalTime) {\n        oldMomentProto.utc.call(this, keepLocalTime); // ensure non-ambiguous\n        // this probably already happened via utc() -> utcOffset(), but don't rely on Moment's internals\n\n        this._ambigTime = false;\n        this._ambigZone = false;\n        return this;\n      }; // implicitly marks a zone (will probably get called upon .utc() and .local())\n\n\n      newMomentProto.utcOffset = function (tzo) {\n        if (tzo != null) {\n          // setter\n          // these assignments needs to happen before the original zone method is called.\n          // I forget why, something to do with a browser crash.\n          this._ambigTime = false;\n          this._ambigZone = false;\n        }\n\n        return oldMomentProto.utcOffset.apply(this, arguments);\n      };\n      /***/\n\n    },\n    /* 12 */\n\n    /***/\n    function (module, exports) {\n      Object.defineProperty(exports, \"__esModule\", {\n        value: true\n      });\n      /*\r\n      Meant to be immutable\r\n      */\n\n      var ComponentFootprint =\n      /** @class */\n      function () {\n        function ComponentFootprint(unzonedRange, isAllDay) {\n          this.isAllDay = false; // component can choose to ignore this\n\n          this.unzonedRange = unzonedRange;\n          this.isAllDay = isAllDay;\n        }\n        /*\r\n        Only works for non-open-ended ranges.\r\n        */\n\n\n        ComponentFootprint.prototype.toLegacy = function (calendar) {\n          return {\n            start: calendar.msToMoment(this.unzonedRange.startMs, this.isAllDay),\n            end: calendar.msToMoment(this.unzonedRange.endMs, this.isAllDay)\n          };\n        };\n\n        return ComponentFootprint;\n      }();\n\n      exports[\"default\"] = ComponentFootprint;\n      /***/\n    },\n    /* 13 */\n\n    /***/\n    function (module, exports, __webpack_require__) {\n      /*\r\n      USAGE:\r\n        import { default as EmitterMixin, EmitterInterface } from './EmitterMixin'\r\n      in class:\r\n        on: EmitterInterface['on']\r\n        one: EmitterInterface['one']\r\n        off: EmitterInterface['off']\r\n        trigger: EmitterInterface['trigger']\r\n        triggerWith: EmitterInterface['triggerWith']\r\n        hasHandlers: EmitterInterface['hasHandlers']\r\n      after class:\r\n        EmitterMixin.mixInto(TheClass)\r\n      */\n      Object.defineProperty(exports, \"__esModule\", {\n        value: true\n      });\n\n      var tslib_1 = __webpack_require__(2);\n\n      var $ = __webpack_require__(3);\n\n      var Mixin_1 = __webpack_require__(15);\n\n      var EmitterMixin =\n      /** @class */\n      function (_super) {\n        tslib_1.__extends(EmitterMixin, _super);\n\n        function EmitterMixin() {\n          return _super !== null && _super.apply(this, arguments) || this;\n        } // jQuery-ification via $(this) allows a non-DOM object to have\n        // the same event handling capabilities (including namespaces).\n\n\n        EmitterMixin.prototype.on = function (types, handler) {\n          $(this).on(types, this._prepareIntercept(handler));\n          return this; // for chaining\n        };\n\n        EmitterMixin.prototype.one = function (types, handler) {\n          $(this).one(types, this._prepareIntercept(handler));\n          return this; // for chaining\n        };\n\n        EmitterMixin.prototype._prepareIntercept = function (handler) {\n          // handlers are always called with an \"event\" object as their first param.\n          // sneak the `this` context and arguments into the extra parameter object\n          // and forward them on to the original handler.\n          var intercept = function intercept(ev, extra) {\n            return handler.apply(extra.context || this, extra.args || []);\n          }; // mimick jQuery's internal \"proxy\" system (risky, I know)\n          // causing all functions with the same .guid to appear to be the same.\n          // https://github.com/jquery/jquery/blob/2.2.4/src/core.js#L448\n          // this is needed for calling .off with the original non-intercept handler.\n\n\n          if (!handler.guid) {\n            handler.guid = $.guid++;\n          }\n\n          intercept.guid = handler.guid;\n          return intercept;\n        };\n\n        EmitterMixin.prototype.off = function (types, handler) {\n          $(this).off(types, handler);\n          return this; // for chaining\n        };\n\n        EmitterMixin.prototype.trigger = function (types) {\n          var args = [];\n\n          for (var _i = 1; _i < arguments.length; _i++) {\n            args[_i - 1] = arguments[_i];\n          } // pass in \"extra\" info to the intercept\n\n\n          $(this).triggerHandler(types, {\n            args: args\n          });\n          return this; // for chaining\n        };\n\n        EmitterMixin.prototype.triggerWith = function (types, context, args) {\n          // `triggerHandler` is less reliant on the DOM compared to `trigger`.\n          // pass in \"extra\" info to the intercept.\n          $(this).triggerHandler(types, {\n            context: context,\n            args: args\n          });\n          return this; // for chaining\n        };\n\n        EmitterMixin.prototype.hasHandlers = function (type) {\n          var hash = $._data(this, 'events'); // http://blog.jquery.com/2012/08/09/jquery-1-8-released/\n\n\n          return hash && hash[type] && hash[type].length > 0;\n        };\n\n        return EmitterMixin;\n      }(Mixin_1[\"default\"]);\n\n      exports[\"default\"] = EmitterMixin;\n      /***/\n    },\n    /* 14 */\n\n    /***/\n    function (module, exports) {\n      Object.defineProperty(exports, \"__esModule\", {\n        value: true\n      });\n\n      var Interaction =\n      /** @class */\n      function () {\n        function Interaction(component) {\n          this.view = component._getView();\n          this.component = component;\n        }\n\n        Interaction.prototype.opt = function (name) {\n          return this.view.opt(name);\n        };\n\n        Interaction.prototype.end = function () {// subclasses can implement\n        };\n\n        return Interaction;\n      }();\n\n      exports[\"default\"] = Interaction;\n      /***/\n    },\n    /* 15 */\n\n    /***/\n    function (module, exports) {\n      Object.defineProperty(exports, \"__esModule\", {\n        value: true\n      });\n\n      var Mixin =\n      /** @class */\n      function () {\n        function Mixin() {}\n\n        Mixin.mixInto = function (destClass) {\n          var _this = this;\n\n          Object.getOwnPropertyNames(this.prototype).forEach(function (name) {\n            if (!destClass.prototype[name]) {\n              // if destination class doesn't already define it\n              destClass.prototype[name] = _this.prototype[name];\n            }\n          });\n        };\n        /*\r\n        will override existing methods\r\n        TODO: remove! not used anymore\r\n        */\n\n\n        Mixin.mixOver = function (destClass) {\n          var _this = this;\n\n          Object.getOwnPropertyNames(this.prototype).forEach(function (name) {\n            destClass.prototype[name] = _this.prototype[name];\n          });\n        };\n\n        return Mixin;\n      }();\n\n      exports[\"default\"] = Mixin;\n      /***/\n    },\n    /* 16 */\n\n    /***/\n    function (module, exports, __webpack_require__) {\n      Object.defineProperty(exports, \"__esModule\", {\n        value: true\n      });\n\n      var UnzonedRange_1 = __webpack_require__(5);\n      /*\r\n      Meant to be immutable\r\n      */\n\n\n      var EventDateProfile =\n      /** @class */\n      function () {\n        function EventDateProfile(start, end, calendar) {\n          this.start = start;\n          this.end = end || null;\n          this.unzonedRange = this.buildUnzonedRange(calendar);\n        }\n        /*\r\n        Needs an EventSource object\r\n        */\n\n\n        EventDateProfile.parse = function (rawProps, source) {\n          var startInput = rawProps.start || rawProps.date;\n          var endInput = rawProps.end;\n\n          if (!startInput) {\n            return false;\n          }\n\n          var calendar = source.calendar;\n          var start = calendar.moment(startInput);\n          var end = endInput ? calendar.moment(endInput) : null;\n          var forcedAllDay = rawProps.allDay;\n          var forceEventDuration = calendar.opt('forceEventDuration');\n\n          if (!start.isValid()) {\n            return false;\n          }\n\n          if (forcedAllDay == null) {\n            forcedAllDay = source.allDayDefault;\n\n            if (forcedAllDay == null) {\n              forcedAllDay = calendar.opt('allDayDefault');\n            }\n          }\n\n          if (forcedAllDay === true) {\n            start.stripTime();\n\n            if (end) {\n              end.stripTime();\n            }\n          } else if (forcedAllDay === false) {\n            if (!start.hasTime()) {\n              start.time(0);\n            }\n\n            if (end && !end.hasTime()) {\n              end.time(0);\n            }\n          }\n\n          if (end && (!end.isValid() || !end.isAfter(start))) {\n            end = null;\n          }\n\n          if (!end && forceEventDuration) {\n            end = calendar.getDefaultEventEnd(!start.hasTime(), start);\n          }\n\n          return new EventDateProfile(start, end, calendar);\n        };\n\n        EventDateProfile.isStandardProp = function (propName) {\n          return propName === 'start' || propName === 'date' || propName === 'end' || propName === 'allDay';\n        };\n\n        EventDateProfile.prototype.isAllDay = function () {\n          return !(this.start.hasTime() || this.end && this.end.hasTime());\n        };\n        /*\r\n        Needs a Calendar object\r\n        */\n\n\n        EventDateProfile.prototype.buildUnzonedRange = function (calendar) {\n          var startMs = this.start.clone().stripZone().valueOf();\n          var endMs = this.getEnd(calendar).stripZone().valueOf();\n          return new UnzonedRange_1[\"default\"](startMs, endMs);\n        };\n        /*\r\n        Needs a Calendar object\r\n        */\n\n\n        EventDateProfile.prototype.getEnd = function (calendar) {\n          return this.end ? this.end.clone() : // derive the end from the start and allDay. compute allDay if necessary\n          calendar.getDefaultEventEnd(this.isAllDay(), this.start);\n        };\n\n        return EventDateProfile;\n      }();\n\n      exports[\"default\"] = EventDateProfile;\n      /***/\n    },\n    /* 17 */\n\n    /***/\n    function (module, exports, __webpack_require__) {\n      Object.defineProperty(exports, \"__esModule\", {\n        value: true\n      });\n\n      var tslib_1 = __webpack_require__(2);\n\n      var util_1 = __webpack_require__(4);\n\n      var DragListener_1 = __webpack_require__(59);\n      /* Tracks mouse movements over a component and raises events about which hit the mouse is over.\r\n      ------------------------------------------------------------------------------------------------------------------------\r\n      options:\r\n      - subjectEl\r\n      - subjectCenter\r\n      */\n\n\n      var HitDragListener =\n      /** @class */\n      function (_super) {\n        tslib_1.__extends(HitDragListener, _super);\n\n        function HitDragListener(component, options) {\n          var _this = _super.call(this, options) || this;\n\n          _this.component = component;\n          return _this;\n        } // Called when drag listening starts (but a real drag has not necessarily began).\n        // ev might be undefined if dragging was started manually.\n\n\n        HitDragListener.prototype.handleInteractionStart = function (ev) {\n          var subjectEl = this.subjectEl;\n          var subjectRect;\n          var origPoint;\n          var point;\n          this.component.hitsNeeded();\n          this.computeScrollBounds(); // for autoscroll\n\n          if (ev) {\n            origPoint = {\n              left: util_1.getEvX(ev),\n              top: util_1.getEvY(ev)\n            };\n            point = origPoint; // constrain the point to bounds of the element being dragged\n\n            if (subjectEl) {\n              subjectRect = util_1.getOuterRect(subjectEl); // used for centering as well\n\n              point = util_1.constrainPoint(point, subjectRect);\n            }\n\n            this.origHit = this.queryHit(point.left, point.top); // treat the center of the subject as the collision point?\n\n            if (subjectEl && this.options.subjectCenter) {\n              // only consider the area the subject overlaps the hit. best for large subjects.\n              // TODO: skip this if hit didn't supply left/right/top/bottom\n              if (this.origHit) {\n                subjectRect = util_1.intersectRects(this.origHit, subjectRect) || subjectRect; // in case there is no intersection\n              }\n\n              point = util_1.getRectCenter(subjectRect);\n            }\n\n            this.coordAdjust = util_1.diffPoints(point, origPoint); // point - origPoint\n          } else {\n            this.origHit = null;\n            this.coordAdjust = null;\n          } // call the super-method. do it after origHit has been computed\n\n\n          _super.prototype.handleInteractionStart.call(this, ev);\n        }; // Called when the actual drag has started\n\n\n        HitDragListener.prototype.handleDragStart = function (ev) {\n          var hit;\n\n          _super.prototype.handleDragStart.call(this, ev); // might be different from this.origHit if the min-distance is large\n\n\n          hit = this.queryHit(util_1.getEvX(ev), util_1.getEvY(ev)); // report the initial hit the mouse is over\n          // especially important if no min-distance and drag starts immediately\n\n          if (hit) {\n            this.handleHitOver(hit);\n          }\n        }; // Called when the drag moves\n\n\n        HitDragListener.prototype.handleDrag = function (dx, dy, ev) {\n          var hit;\n\n          _super.prototype.handleDrag.call(this, dx, dy, ev);\n\n          hit = this.queryHit(util_1.getEvX(ev), util_1.getEvY(ev));\n\n          if (!isHitsEqual(hit, this.hit)) {\n            // a different hit than before?\n            if (this.hit) {\n              this.handleHitOut();\n            }\n\n            if (hit) {\n              this.handleHitOver(hit);\n            }\n          }\n        }; // Called when dragging has been stopped\n\n\n        HitDragListener.prototype.handleDragEnd = function (ev) {\n          this.handleHitDone();\n\n          _super.prototype.handleDragEnd.call(this, ev);\n        }; // Called when a the mouse has just moved over a new hit\n\n\n        HitDragListener.prototype.handleHitOver = function (hit) {\n          var isOrig = isHitsEqual(hit, this.origHit);\n          this.hit = hit;\n          this.trigger('hitOver', this.hit, isOrig, this.origHit);\n        }; // Called when the mouse has just moved out of a hit\n\n\n        HitDragListener.prototype.handleHitOut = function () {\n          if (this.hit) {\n            this.trigger('hitOut', this.hit);\n            this.handleHitDone();\n            this.hit = null;\n          }\n        }; // Called after a hitOut. Also called before a dragStop\n\n\n        HitDragListener.prototype.handleHitDone = function () {\n          if (this.hit) {\n            this.trigger('hitDone', this.hit);\n          }\n        }; // Called when the interaction ends, whether there was a real drag or not\n\n\n        HitDragListener.prototype.handleInteractionEnd = function (ev, isCancelled) {\n          _super.prototype.handleInteractionEnd.call(this, ev, isCancelled);\n\n          this.origHit = null;\n          this.hit = null;\n          this.component.hitsNotNeeded();\n        }; // Called when scrolling has stopped, whether through auto scroll, or the user scrolling\n\n\n        HitDragListener.prototype.handleScrollEnd = function () {\n          _super.prototype.handleScrollEnd.call(this); // hits' absolute positions will be in new places after a user's scroll.\n          // HACK for recomputing.\n\n\n          if (this.isDragging) {\n            this.component.releaseHits();\n            this.component.prepareHits();\n          }\n        }; // Gets the hit underneath the coordinates for the given mouse event\n\n\n        HitDragListener.prototype.queryHit = function (left, top) {\n          if (this.coordAdjust) {\n            left += this.coordAdjust.left;\n            top += this.coordAdjust.top;\n          }\n\n          return this.component.queryHit(left, top);\n        };\n\n        return HitDragListener;\n      }(DragListener_1[\"default\"]);\n\n      exports[\"default\"] = HitDragListener; // Returns `true` if the hits are identically equal. `false` otherwise. Must be from the same component.\n      // Two null values will be considered equal, as two \"out of the component\" states are the same.\n\n      function isHitsEqual(hit0, hit1) {\n        if (!hit0 && !hit1) {\n          return true;\n        }\n\n        if (hit0 && hit1) {\n          return hit0.component === hit1.component && isHitPropsWithin(hit0, hit1) && isHitPropsWithin(hit1, hit0); // ensures all props are identical\n        }\n\n        return false;\n      } // Returns true if all of subHit's non-standard properties are within superHit\n\n\n      function isHitPropsWithin(subHit, superHit) {\n        for (var propName in subHit) {\n          if (!/^(component|left|right|top|bottom)$/.test(propName)) {\n            if (subHit[propName] !== superHit[propName]) {\n              return false;\n            }\n          }\n        }\n\n        return true;\n      }\n      /***/\n\n    },\n    /* 18 */\n\n    /***/\n    function (module, exports, __webpack_require__) {\n      Object.defineProperty(exports, \"__esModule\", {\n        value: true\n      });\n      exports.version = '3.10.0'; // When introducing internal API incompatibilities (where fullcalendar plugins would break),\n      // the minor version of the calendar should be upped (ex: 2.7.2 -> 2.8.0)\n      // and the below integer should be incremented.\n\n      exports.internalApiVersion = 12;\n\n      var util_1 = __webpack_require__(4);\n\n      exports.applyAll = util_1.applyAll;\n      exports.debounce = util_1.debounce;\n      exports.isInt = util_1.isInt;\n      exports.htmlEscape = util_1.htmlEscape;\n      exports.cssToStr = util_1.cssToStr;\n      exports.proxy = util_1.proxy;\n      exports.capitaliseFirstLetter = util_1.capitaliseFirstLetter;\n      exports.getOuterRect = util_1.getOuterRect;\n      exports.getClientRect = util_1.getClientRect;\n      exports.getContentRect = util_1.getContentRect;\n      exports.getScrollbarWidths = util_1.getScrollbarWidths;\n      exports.preventDefault = util_1.preventDefault;\n      exports.parseFieldSpecs = util_1.parseFieldSpecs;\n      exports.compareByFieldSpecs = util_1.compareByFieldSpecs;\n      exports.compareByFieldSpec = util_1.compareByFieldSpec;\n      exports.flexibleCompare = util_1.flexibleCompare;\n      exports.computeGreatestUnit = util_1.computeGreatestUnit;\n      exports.divideRangeByDuration = util_1.divideRangeByDuration;\n      exports.divideDurationByDuration = util_1.divideDurationByDuration;\n      exports.multiplyDuration = util_1.multiplyDuration;\n      exports.durationHasTime = util_1.durationHasTime;\n      exports.log = util_1.log;\n      exports.warn = util_1.warn;\n      exports.removeExact = util_1.removeExact;\n      exports.intersectRects = util_1.intersectRects;\n      exports.allowSelection = util_1.allowSelection;\n      exports.attrsToStr = util_1.attrsToStr;\n      exports.compareNumbers = util_1.compareNumbers;\n      exports.compensateScroll = util_1.compensateScroll;\n      exports.computeDurationGreatestUnit = util_1.computeDurationGreatestUnit;\n      exports.constrainPoint = util_1.constrainPoint;\n      exports.copyOwnProps = util_1.copyOwnProps;\n      exports.diffByUnit = util_1.diffByUnit;\n      exports.diffDay = util_1.diffDay;\n      exports.diffDayTime = util_1.diffDayTime;\n      exports.diffPoints = util_1.diffPoints;\n      exports.disableCursor = util_1.disableCursor;\n      exports.distributeHeight = util_1.distributeHeight;\n      exports.enableCursor = util_1.enableCursor;\n      exports.firstDefined = util_1.firstDefined;\n      exports.getEvIsTouch = util_1.getEvIsTouch;\n      exports.getEvX = util_1.getEvX;\n      exports.getEvY = util_1.getEvY;\n      exports.getRectCenter = util_1.getRectCenter;\n      exports.getScrollParent = util_1.getScrollParent;\n      exports.hasOwnProp = util_1.hasOwnProp;\n      exports.isArraysEqual = util_1.isArraysEqual;\n      exports.isNativeDate = util_1.isNativeDate;\n      exports.isPrimaryMouseButton = util_1.isPrimaryMouseButton;\n      exports.isTimeString = util_1.isTimeString;\n      exports.matchCellWidths = util_1.matchCellWidths;\n      exports.mergeProps = util_1.mergeProps;\n      exports.preventSelection = util_1.preventSelection;\n      exports.removeMatching = util_1.removeMatching;\n      exports.stripHtmlEntities = util_1.stripHtmlEntities;\n      exports.subtractInnerElHeight = util_1.subtractInnerElHeight;\n      exports.uncompensateScroll = util_1.uncompensateScroll;\n      exports.undistributeHeight = util_1.undistributeHeight;\n      exports.dayIDs = util_1.dayIDs;\n      exports.unitsDesc = util_1.unitsDesc;\n\n      var date_formatting_1 = __webpack_require__(49);\n\n      exports.formatDate = date_formatting_1.formatDate;\n      exports.formatRange = date_formatting_1.formatRange;\n      exports.queryMostGranularFormatUnit = date_formatting_1.queryMostGranularFormatUnit;\n\n      var locale_1 = __webpack_require__(32);\n\n      exports.datepickerLocale = locale_1.datepickerLocale;\n      exports.locale = locale_1.locale;\n      exports.getMomentLocaleData = locale_1.getMomentLocaleData;\n      exports.populateInstanceComputableOptions = locale_1.populateInstanceComputableOptions;\n\n      var util_2 = __webpack_require__(19);\n\n      exports.eventDefsToEventInstances = util_2.eventDefsToEventInstances;\n      exports.eventFootprintToComponentFootprint = util_2.eventFootprintToComponentFootprint;\n      exports.eventInstanceToEventRange = util_2.eventInstanceToEventRange;\n      exports.eventInstanceToUnzonedRange = util_2.eventInstanceToUnzonedRange;\n      exports.eventRangeToEventFootprint = util_2.eventRangeToEventFootprint;\n\n      var moment_ext_1 = __webpack_require__(11);\n\n      exports.moment = moment_ext_1[\"default\"];\n\n      var EmitterMixin_1 = __webpack_require__(13);\n\n      exports.EmitterMixin = EmitterMixin_1[\"default\"];\n\n      var ListenerMixin_1 = __webpack_require__(7);\n\n      exports.ListenerMixin = ListenerMixin_1[\"default\"];\n\n      var Model_1 = __webpack_require__(51);\n\n      exports.Model = Model_1[\"default\"];\n\n      var Constraints_1 = __webpack_require__(217);\n\n      exports.Constraints = Constraints_1[\"default\"];\n\n      var DateProfileGenerator_1 = __webpack_require__(55);\n\n      exports.DateProfileGenerator = DateProfileGenerator_1[\"default\"];\n\n      var UnzonedRange_1 = __webpack_require__(5);\n\n      exports.UnzonedRange = UnzonedRange_1[\"default\"];\n\n      var ComponentFootprint_1 = __webpack_require__(12);\n\n      exports.ComponentFootprint = ComponentFootprint_1[\"default\"];\n\n      var BusinessHourGenerator_1 = __webpack_require__(218);\n\n      exports.BusinessHourGenerator = BusinessHourGenerator_1[\"default\"];\n\n      var EventPeriod_1 = __webpack_require__(219);\n\n      exports.EventPeriod = EventPeriod_1[\"default\"];\n\n      var EventManager_1 = __webpack_require__(220);\n\n      exports.EventManager = EventManager_1[\"default\"];\n\n      var EventDef_1 = __webpack_require__(37);\n\n      exports.EventDef = EventDef_1[\"default\"];\n\n      var EventDefMutation_1 = __webpack_require__(39);\n\n      exports.EventDefMutation = EventDefMutation_1[\"default\"];\n\n      var EventDefParser_1 = __webpack_require__(36);\n\n      exports.EventDefParser = EventDefParser_1[\"default\"];\n\n      var EventInstance_1 = __webpack_require__(53);\n\n      exports.EventInstance = EventInstance_1[\"default\"];\n\n      var EventRange_1 = __webpack_require__(50);\n\n      exports.EventRange = EventRange_1[\"default\"];\n\n      var RecurringEventDef_1 = __webpack_require__(54);\n\n      exports.RecurringEventDef = RecurringEventDef_1[\"default\"];\n\n      var SingleEventDef_1 = __webpack_require__(9);\n\n      exports.SingleEventDef = SingleEventDef_1[\"default\"];\n\n      var EventDefDateMutation_1 = __webpack_require__(40);\n\n      exports.EventDefDateMutation = EventDefDateMutation_1[\"default\"];\n\n      var EventDateProfile_1 = __webpack_require__(16);\n\n      exports.EventDateProfile = EventDateProfile_1[\"default\"];\n\n      var EventSourceParser_1 = __webpack_require__(38);\n\n      exports.EventSourceParser = EventSourceParser_1[\"default\"];\n\n      var EventSource_1 = __webpack_require__(6);\n\n      exports.EventSource = EventSource_1[\"default\"];\n\n      var ThemeRegistry_1 = __webpack_require__(57);\n\n      exports.defineThemeSystem = ThemeRegistry_1.defineThemeSystem;\n      exports.getThemeSystemClass = ThemeRegistry_1.getThemeSystemClass;\n\n      var EventInstanceGroup_1 = __webpack_require__(20);\n\n      exports.EventInstanceGroup = EventInstanceGroup_1[\"default\"];\n\n      var ArrayEventSource_1 = __webpack_require__(56);\n\n      exports.ArrayEventSource = ArrayEventSource_1[\"default\"];\n\n      var FuncEventSource_1 = __webpack_require__(223);\n\n      exports.FuncEventSource = FuncEventSource_1[\"default\"];\n\n      var JsonFeedEventSource_1 = __webpack_require__(224);\n\n      exports.JsonFeedEventSource = JsonFeedEventSource_1[\"default\"];\n\n      var EventFootprint_1 = __webpack_require__(34);\n\n      exports.EventFootprint = EventFootprint_1[\"default\"];\n\n      var Class_1 = __webpack_require__(35);\n\n      exports.Class = Class_1[\"default\"];\n\n      var Mixin_1 = __webpack_require__(15);\n\n      exports.Mixin = Mixin_1[\"default\"];\n\n      var CoordCache_1 = __webpack_require__(58);\n\n      exports.CoordCache = CoordCache_1[\"default\"];\n\n      var Iterator_1 = __webpack_require__(225);\n\n      exports.Iterator = Iterator_1[\"default\"];\n\n      var DragListener_1 = __webpack_require__(59);\n\n      exports.DragListener = DragListener_1[\"default\"];\n\n      var HitDragListener_1 = __webpack_require__(17);\n\n      exports.HitDragListener = HitDragListener_1[\"default\"];\n\n      var MouseFollower_1 = __webpack_require__(226);\n\n      exports.MouseFollower = MouseFollower_1[\"default\"];\n\n      var ParsableModelMixin_1 = __webpack_require__(52);\n\n      exports.ParsableModelMixin = ParsableModelMixin_1[\"default\"];\n\n      var Popover_1 = __webpack_require__(227);\n\n      exports.Popover = Popover_1[\"default\"];\n\n      var Promise_1 = __webpack_require__(21);\n\n      exports.Promise = Promise_1[\"default\"];\n\n      var TaskQueue_1 = __webpack_require__(228);\n\n      exports.TaskQueue = TaskQueue_1[\"default\"];\n\n      var RenderQueue_1 = __webpack_require__(229);\n\n      exports.RenderQueue = RenderQueue_1[\"default\"];\n\n      var Scroller_1 = __webpack_require__(41);\n\n      exports.Scroller = Scroller_1[\"default\"];\n\n      var Theme_1 = __webpack_require__(22);\n\n      exports.Theme = Theme_1[\"default\"];\n\n      var Component_1 = __webpack_require__(230);\n\n      exports.Component = Component_1[\"default\"];\n\n      var DateComponent_1 = __webpack_require__(231);\n\n      exports.DateComponent = DateComponent_1[\"default\"];\n\n      var InteractiveDateComponent_1 = __webpack_require__(42);\n\n      exports.InteractiveDateComponent = InteractiveDateComponent_1[\"default\"];\n\n      var Calendar_1 = __webpack_require__(232);\n\n      exports.Calendar = Calendar_1[\"default\"];\n\n      var View_1 = __webpack_require__(43);\n\n      exports.View = View_1[\"default\"];\n\n      var ViewRegistry_1 = __webpack_require__(24);\n\n      exports.defineView = ViewRegistry_1.defineView;\n      exports.getViewConfig = ViewRegistry_1.getViewConfig;\n\n      var DayTableMixin_1 = __webpack_require__(60);\n\n      exports.DayTableMixin = DayTableMixin_1[\"default\"];\n\n      var BusinessHourRenderer_1 = __webpack_require__(61);\n\n      exports.BusinessHourRenderer = BusinessHourRenderer_1[\"default\"];\n\n      var EventRenderer_1 = __webpack_require__(44);\n\n      exports.EventRenderer = EventRenderer_1[\"default\"];\n\n      var FillRenderer_1 = __webpack_require__(62);\n\n      exports.FillRenderer = FillRenderer_1[\"default\"];\n\n      var HelperRenderer_1 = __webpack_require__(63);\n\n      exports.HelperRenderer = HelperRenderer_1[\"default\"];\n\n      var ExternalDropping_1 = __webpack_require__(233);\n\n      exports.ExternalDropping = ExternalDropping_1[\"default\"];\n\n      var EventResizing_1 = __webpack_require__(234);\n\n      exports.EventResizing = EventResizing_1[\"default\"];\n\n      var EventPointing_1 = __webpack_require__(64);\n\n      exports.EventPointing = EventPointing_1[\"default\"];\n\n      var EventDragging_1 = __webpack_require__(235);\n\n      exports.EventDragging = EventDragging_1[\"default\"];\n\n      var DateSelecting_1 = __webpack_require__(236);\n\n      exports.DateSelecting = DateSelecting_1[\"default\"];\n\n      var DateClicking_1 = __webpack_require__(237);\n\n      exports.DateClicking = DateClicking_1[\"default\"];\n\n      var Interaction_1 = __webpack_require__(14);\n\n      exports.Interaction = Interaction_1[\"default\"];\n\n      var StandardInteractionsMixin_1 = __webpack_require__(65);\n\n      exports.StandardInteractionsMixin = StandardInteractionsMixin_1[\"default\"];\n\n      var AgendaView_1 = __webpack_require__(238);\n\n      exports.AgendaView = AgendaView_1[\"default\"];\n\n      var TimeGrid_1 = __webpack_require__(239);\n\n      exports.TimeGrid = TimeGrid_1[\"default\"];\n\n      var TimeGridEventRenderer_1 = __webpack_require__(240);\n\n      exports.TimeGridEventRenderer = TimeGridEventRenderer_1[\"default\"];\n\n      var TimeGridFillRenderer_1 = __webpack_require__(242);\n\n      exports.TimeGridFillRenderer = TimeGridFillRenderer_1[\"default\"];\n\n      var TimeGridHelperRenderer_1 = __webpack_require__(241);\n\n      exports.TimeGridHelperRenderer = TimeGridHelperRenderer_1[\"default\"];\n\n      var DayGrid_1 = __webpack_require__(66);\n\n      exports.DayGrid = DayGrid_1[\"default\"];\n\n      var DayGridEventRenderer_1 = __webpack_require__(243);\n\n      exports.DayGridEventRenderer = DayGridEventRenderer_1[\"default\"];\n\n      var DayGridFillRenderer_1 = __webpack_require__(245);\n\n      exports.DayGridFillRenderer = DayGridFillRenderer_1[\"default\"];\n\n      var DayGridHelperRenderer_1 = __webpack_require__(244);\n\n      exports.DayGridHelperRenderer = DayGridHelperRenderer_1[\"default\"];\n\n      var BasicView_1 = __webpack_require__(67);\n\n      exports.BasicView = BasicView_1[\"default\"];\n\n      var BasicViewDateProfileGenerator_1 = __webpack_require__(68);\n\n      exports.BasicViewDateProfileGenerator = BasicViewDateProfileGenerator_1[\"default\"];\n\n      var MonthView_1 = __webpack_require__(246);\n\n      exports.MonthView = MonthView_1[\"default\"];\n\n      var MonthViewDateProfileGenerator_1 = __webpack_require__(247);\n\n      exports.MonthViewDateProfileGenerator = MonthViewDateProfileGenerator_1[\"default\"];\n\n      var ListView_1 = __webpack_require__(248);\n\n      exports.ListView = ListView_1[\"default\"];\n\n      var ListEventPointing_1 = __webpack_require__(250);\n\n      exports.ListEventPointing = ListEventPointing_1[\"default\"];\n\n      var ListEventRenderer_1 = __webpack_require__(249);\n\n      exports.ListEventRenderer = ListEventRenderer_1[\"default\"];\n      /***/\n    },\n    /* 19 */\n\n    /***/\n    function (module, exports, __webpack_require__) {\n      Object.defineProperty(exports, \"__esModule\", {\n        value: true\n      });\n\n      var EventRange_1 = __webpack_require__(50);\n\n      var EventFootprint_1 = __webpack_require__(34);\n\n      var ComponentFootprint_1 = __webpack_require__(12);\n\n      function eventDefsToEventInstances(eventDefs, unzonedRange) {\n        var eventInstances = [];\n        var i;\n\n        for (i = 0; i < eventDefs.length; i++) {\n          eventInstances.push.apply(eventInstances, // append\n          eventDefs[i].buildInstances(unzonedRange));\n        }\n\n        return eventInstances;\n      }\n\n      exports.eventDefsToEventInstances = eventDefsToEventInstances;\n\n      function eventInstanceToEventRange(eventInstance) {\n        return new EventRange_1[\"default\"](eventInstance.dateProfile.unzonedRange, eventInstance.def, eventInstance);\n      }\n\n      exports.eventInstanceToEventRange = eventInstanceToEventRange;\n\n      function eventRangeToEventFootprint(eventRange) {\n        return new EventFootprint_1[\"default\"](new ComponentFootprint_1[\"default\"](eventRange.unzonedRange, eventRange.eventDef.isAllDay()), eventRange.eventDef, eventRange.eventInstance // might not exist\n        );\n      }\n\n      exports.eventRangeToEventFootprint = eventRangeToEventFootprint;\n\n      function eventInstanceToUnzonedRange(eventInstance) {\n        return eventInstance.dateProfile.unzonedRange;\n      }\n\n      exports.eventInstanceToUnzonedRange = eventInstanceToUnzonedRange;\n\n      function eventFootprintToComponentFootprint(eventFootprint) {\n        return eventFootprint.componentFootprint;\n      }\n\n      exports.eventFootprintToComponentFootprint = eventFootprintToComponentFootprint;\n      /***/\n    },\n    /* 20 */\n\n    /***/\n    function (module, exports, __webpack_require__) {\n      Object.defineProperty(exports, \"__esModule\", {\n        value: true\n      });\n\n      var UnzonedRange_1 = __webpack_require__(5);\n\n      var util_1 = __webpack_require__(19);\n\n      var EventRange_1 = __webpack_require__(50);\n      /*\r\n      It's expected that there will be at least one EventInstance,\r\n      OR that an explicitEventDef is assigned.\r\n      */\n\n\n      var EventInstanceGroup =\n      /** @class */\n      function () {\n        function EventInstanceGroup(eventInstances) {\n          this.eventInstances = eventInstances || [];\n        }\n\n        EventInstanceGroup.prototype.getAllEventRanges = function (constraintRange) {\n          if (constraintRange) {\n            return this.sliceNormalRenderRanges(constraintRange);\n          } else {\n            return this.eventInstances.map(util_1.eventInstanceToEventRange);\n          }\n        };\n\n        EventInstanceGroup.prototype.sliceRenderRanges = function (constraintRange) {\n          if (this.isInverse()) {\n            return this.sliceInverseRenderRanges(constraintRange);\n          } else {\n            return this.sliceNormalRenderRanges(constraintRange);\n          }\n        };\n\n        EventInstanceGroup.prototype.sliceNormalRenderRanges = function (constraintRange) {\n          var eventInstances = this.eventInstances;\n          var i;\n          var eventInstance;\n          var slicedRange;\n          var slicedEventRanges = [];\n\n          for (i = 0; i < eventInstances.length; i++) {\n            eventInstance = eventInstances[i];\n            slicedRange = eventInstance.dateProfile.unzonedRange.intersect(constraintRange);\n\n            if (slicedRange) {\n              slicedEventRanges.push(new EventRange_1[\"default\"](slicedRange, eventInstance.def, eventInstance));\n            }\n          }\n\n          return slicedEventRanges;\n        };\n\n        EventInstanceGroup.prototype.sliceInverseRenderRanges = function (constraintRange) {\n          var unzonedRanges = this.eventInstances.map(util_1.eventInstanceToUnzonedRange);\n          var ownerDef = this.getEventDef();\n          unzonedRanges = UnzonedRange_1[\"default\"].invertRanges(unzonedRanges, constraintRange);\n          return unzonedRanges.map(function (unzonedRange) {\n            return new EventRange_1[\"default\"](unzonedRange, ownerDef); // don't give an EventInstance\n          });\n        };\n\n        EventInstanceGroup.prototype.isInverse = function () {\n          return this.getEventDef().hasInverseRendering();\n        };\n\n        EventInstanceGroup.prototype.getEventDef = function () {\n          return this.explicitEventDef || this.eventInstances[0].def;\n        };\n\n        return EventInstanceGroup;\n      }();\n\n      exports[\"default\"] = EventInstanceGroup;\n      /***/\n    },\n    /* 21 */\n\n    /***/\n    function (module, exports, __webpack_require__) {\n      Object.defineProperty(exports, \"__esModule\", {\n        value: true\n      });\n\n      var $ = __webpack_require__(3);\n\n      var PromiseStub = {\n        construct: function construct(executor) {\n          var deferred = $.Deferred();\n          var promise = deferred.promise();\n\n          if (typeof executor === 'function') {\n            executor(function (val) {\n              deferred.resolve(val);\n              attachImmediatelyResolvingThen(promise, val);\n            }, function () {\n              deferred.reject();\n              attachImmediatelyRejectingThen(promise);\n            });\n          }\n\n          return promise;\n        },\n        resolve: function resolve(val) {\n          var deferred = $.Deferred().resolve(val);\n          var promise = deferred.promise();\n          attachImmediatelyResolvingThen(promise, val);\n          return promise;\n        },\n        reject: function reject() {\n          var deferred = $.Deferred().reject();\n          var promise = deferred.promise();\n          attachImmediatelyRejectingThen(promise);\n          return promise;\n        }\n      };\n      exports[\"default\"] = PromiseStub;\n\n      function attachImmediatelyResolvingThen(promise, val) {\n        promise.then = function (onResolve) {\n          if (typeof onResolve === 'function') {\n            return PromiseStub.resolve(onResolve(val));\n          }\n\n          return promise;\n        };\n      }\n\n      function attachImmediatelyRejectingThen(promise) {\n        promise.then = function (onResolve, onReject) {\n          if (typeof onReject === 'function') {\n            onReject();\n          }\n\n          return promise;\n        };\n      }\n      /***/\n\n    },\n    /* 22 */\n\n    /***/\n    function (module, exports, __webpack_require__) {\n      Object.defineProperty(exports, \"__esModule\", {\n        value: true\n      });\n\n      var $ = __webpack_require__(3);\n\n      var Theme =\n      /** @class */\n      function () {\n        function Theme(optionsManager) {\n          this.optionsManager = optionsManager;\n          this.processIconOverride();\n        }\n\n        Theme.prototype.processIconOverride = function () {\n          if (this.iconOverrideOption) {\n            this.setIconOverride(this.optionsManager.get(this.iconOverrideOption));\n          }\n        };\n\n        Theme.prototype.setIconOverride = function (iconOverrideHash) {\n          var iconClassesCopy;\n          var buttonName;\n\n          if ($.isPlainObject(iconOverrideHash)) {\n            iconClassesCopy = $.extend({}, this.iconClasses);\n\n            for (buttonName in iconOverrideHash) {\n              iconClassesCopy[buttonName] = this.applyIconOverridePrefix(iconOverrideHash[buttonName]);\n            }\n\n            this.iconClasses = iconClassesCopy;\n          } else if (iconOverrideHash === false) {\n            this.iconClasses = {};\n          }\n        };\n\n        Theme.prototype.applyIconOverridePrefix = function (className) {\n          var prefix = this.iconOverridePrefix;\n\n          if (prefix && className.indexOf(prefix) !== 0) {\n            // if not already present\n            className = prefix + className;\n          }\n\n          return className;\n        };\n\n        Theme.prototype.getClass = function (key) {\n          return this.classes[key] || '';\n        };\n\n        Theme.prototype.getIconClass = function (buttonName) {\n          var className = this.iconClasses[buttonName];\n\n          if (className) {\n            return this.baseIconClass + ' ' + className;\n          }\n\n          return '';\n        };\n\n        Theme.prototype.getCustomButtonIconClass = function (customButtonProps) {\n          var className;\n\n          if (this.iconOverrideCustomButtonOption) {\n            className = customButtonProps[this.iconOverrideCustomButtonOption];\n\n            if (className) {\n              return this.baseIconClass + ' ' + this.applyIconOverridePrefix(className);\n            }\n          }\n\n          return '';\n        };\n\n        return Theme;\n      }();\n\n      exports[\"default\"] = Theme;\n      Theme.prototype.classes = {};\n      Theme.prototype.iconClasses = {};\n      Theme.prototype.baseIconClass = '';\n      Theme.prototype.iconOverridePrefix = '';\n      /***/\n    },\n    /* 23 */\n\n    /***/\n    function (module, exports, __webpack_require__) {\n      Object.defineProperty(exports, \"__esModule\", {\n        value: true\n      });\n\n      var $ = __webpack_require__(3);\n\n      var exportHooks = __webpack_require__(18);\n\n      var EmitterMixin_1 = __webpack_require__(13);\n\n      var ListenerMixin_1 = __webpack_require__(7);\n\n      exportHooks.touchMouseIgnoreWait = 500;\n      var globalEmitter = null;\n      var neededCount = 0;\n      /*\r\n      Listens to document and window-level user-interaction events, like touch events and mouse events,\r\n      and fires these events as-is to whoever is observing a GlobalEmitter.\r\n      Best when used as a singleton via GlobalEmitter.get()\r\n      \n      Normalizes mouse/touch events. For examples:\r\n      - ignores the the simulated mouse events that happen after a quick tap: mousemove+mousedown+mouseup+click\r\n      - compensates for various buggy scenarios where a touchend does not fire\r\n      */\n\n      var GlobalEmitter =\n      /** @class */\n      function () {\n        function GlobalEmitter() {\n          this.isTouching = false;\n          this.mouseIgnoreDepth = 0;\n        } // gets the singleton\n\n\n        GlobalEmitter.get = function () {\n          if (!globalEmitter) {\n            globalEmitter = new GlobalEmitter();\n            globalEmitter.bind();\n          }\n\n          return globalEmitter;\n        }; // called when an object knows it will need a GlobalEmitter in the near future.\n\n\n        GlobalEmitter.needed = function () {\n          GlobalEmitter.get(); // ensures globalEmitter\n\n          neededCount++;\n        }; // called when the object that originally called needed() doesn't need a GlobalEmitter anymore.\n\n\n        GlobalEmitter.unneeded = function () {\n          neededCount--;\n\n          if (!neededCount) {\n            // nobody else needs it\n            globalEmitter.unbind();\n            globalEmitter = null;\n          }\n        };\n\n        GlobalEmitter.prototype.bind = function () {\n          var _this = this;\n\n          this.listenTo($(document), {\n            touchstart: this.handleTouchStart,\n            touchcancel: this.handleTouchCancel,\n            touchend: this.handleTouchEnd,\n            mousedown: this.handleMouseDown,\n            mousemove: this.handleMouseMove,\n            mouseup: this.handleMouseUp,\n            click: this.handleClick,\n            selectstart: this.handleSelectStart,\n            contextmenu: this.handleContextMenu\n          }); // because we need to call preventDefault\n          // because https://www.chromestatus.com/features/5093566007214080\n          // TODO: investigate performance because this is a global handler\n\n          window.addEventListener('touchmove', this.handleTouchMoveProxy = function (ev) {\n            _this.handleTouchMove($.Event(ev));\n          }, {\n            passive: false // allows preventDefault()\n\n          }); // attach a handler to get called when ANY scroll action happens on the page.\n          // this was impossible to do with normal on/off because 'scroll' doesn't bubble.\n          // http://stackoverflow.com/a/32954565/96342\n\n          window.addEventListener('scroll', this.handleScrollProxy = function (ev) {\n            _this.handleScroll($.Event(ev));\n          }, true // useCapture\n          );\n        };\n\n        GlobalEmitter.prototype.unbind = function () {\n          this.stopListeningTo($(document));\n          window.removeEventListener('touchmove', this.handleTouchMoveProxy, {\n            passive: false // use same options as addEventListener\n\n          });\n          window.removeEventListener('scroll', this.handleScrollProxy, true // useCapture\n          );\n        }; // Touch Handlers\n        // -----------------------------------------------------------------------------------------------------------------\n\n\n        GlobalEmitter.prototype.handleTouchStart = function (ev) {\n          // if a previous touch interaction never ended with a touchend, then implicitly end it,\n          // but since a new touch interaction is about to begin, don't start the mouse ignore period.\n          this.stopTouch(ev, true); // skipMouseIgnore=true\n\n          this.isTouching = true;\n          this.trigger('touchstart', ev);\n        };\n\n        GlobalEmitter.prototype.handleTouchMove = function (ev) {\n          if (this.isTouching) {\n            this.trigger('touchmove', ev);\n          }\n        };\n\n        GlobalEmitter.prototype.handleTouchCancel = function (ev) {\n          if (this.isTouching) {\n            this.trigger('touchcancel', ev); // Have touchcancel fire an artificial touchend. That way, handlers won't need to listen to both.\n            // If touchend fires later, it won't have any effect b/c isTouching will be false.\n\n            this.stopTouch(ev);\n          }\n        };\n\n        GlobalEmitter.prototype.handleTouchEnd = function (ev) {\n          this.stopTouch(ev);\n        }; // Mouse Handlers\n        // -----------------------------------------------------------------------------------------------------------------\n\n\n        GlobalEmitter.prototype.handleMouseDown = function (ev) {\n          if (!this.shouldIgnoreMouse()) {\n            this.trigger('mousedown', ev);\n          }\n        };\n\n        GlobalEmitter.prototype.handleMouseMove = function (ev) {\n          if (!this.shouldIgnoreMouse()) {\n            this.trigger('mousemove', ev);\n          }\n        };\n\n        GlobalEmitter.prototype.handleMouseUp = function (ev) {\n          if (!this.shouldIgnoreMouse()) {\n            this.trigger('mouseup', ev);\n          }\n        };\n\n        GlobalEmitter.prototype.handleClick = function (ev) {\n          if (!this.shouldIgnoreMouse()) {\n            this.trigger('click', ev);\n          }\n        }; // Misc Handlers\n        // -----------------------------------------------------------------------------------------------------------------\n\n\n        GlobalEmitter.prototype.handleSelectStart = function (ev) {\n          this.trigger('selectstart', ev);\n        };\n\n        GlobalEmitter.prototype.handleContextMenu = function (ev) {\n          this.trigger('contextmenu', ev);\n        };\n\n        GlobalEmitter.prototype.handleScroll = function (ev) {\n          this.trigger('scroll', ev);\n        }; // Utils\n        // -----------------------------------------------------------------------------------------------------------------\n\n\n        GlobalEmitter.prototype.stopTouch = function (ev, skipMouseIgnore) {\n          if (skipMouseIgnore === void 0) {\n            skipMouseIgnore = false;\n          }\n\n          if (this.isTouching) {\n            this.isTouching = false;\n            this.trigger('touchend', ev);\n\n            if (!skipMouseIgnore) {\n              this.startTouchMouseIgnore();\n            }\n          }\n        };\n\n        GlobalEmitter.prototype.startTouchMouseIgnore = function () {\n          var _this = this;\n\n          var wait = exportHooks.touchMouseIgnoreWait;\n\n          if (wait) {\n            this.mouseIgnoreDepth++;\n            setTimeout(function () {\n              _this.mouseIgnoreDepth--;\n            }, wait);\n          }\n        };\n\n        GlobalEmitter.prototype.shouldIgnoreMouse = function () {\n          return this.isTouching || Boolean(this.mouseIgnoreDepth);\n        };\n\n        return GlobalEmitter;\n      }();\n\n      exports[\"default\"] = GlobalEmitter;\n      ListenerMixin_1[\"default\"].mixInto(GlobalEmitter);\n      EmitterMixin_1[\"default\"].mixInto(GlobalEmitter);\n      /***/\n    },\n    /* 24 */\n\n    /***/\n    function (module, exports, __webpack_require__) {\n      Object.defineProperty(exports, \"__esModule\", {\n        value: true\n      });\n\n      var exportHooks = __webpack_require__(18);\n\n      exports.viewHash = {};\n      exportHooks.views = exports.viewHash;\n\n      function defineView(viewName, viewConfig) {\n        exports.viewHash[viewName] = viewConfig;\n      }\n\n      exports.defineView = defineView;\n\n      function getViewConfig(viewName) {\n        return exports.viewHash[viewName];\n      }\n\n      exports.getViewConfig = getViewConfig;\n      /***/\n    },,,,,,,,\n    /* 25 */\n\n    /* 26 */\n\n    /* 27 */\n\n    /* 28 */\n\n    /* 29 */\n\n    /* 30 */\n\n    /* 31 */\n\n    /* 32 */\n\n    /***/\n    function (module, exports, __webpack_require__) {\n      Object.defineProperty(exports, \"__esModule\", {\n        value: true\n      });\n\n      var $ = __webpack_require__(3);\n\n      var moment = __webpack_require__(0);\n\n      var exportHooks = __webpack_require__(18);\n\n      var options_1 = __webpack_require__(33);\n\n      var util_1 = __webpack_require__(4);\n\n      exports.localeOptionHash = {};\n      exportHooks.locales = exports.localeOptionHash; // NOTE: can't guarantee any of these computations will run because not every locale has datepicker\n      // configs, so make sure there are English fallbacks for these in the defaults file.\n\n      var dpComputableOptions = {\n        buttonText: function buttonText(dpOptions) {\n          return {\n            // the translations sometimes wrongly contain HTML entities\n            prev: util_1.stripHtmlEntities(dpOptions.prevText),\n            next: util_1.stripHtmlEntities(dpOptions.nextText),\n            today: util_1.stripHtmlEntities(dpOptions.currentText)\n          };\n        },\n        // Produces format strings like \"MMMM YYYY\" -> \"September 2014\"\n        monthYearFormat: function monthYearFormat(dpOptions) {\n          return dpOptions.showMonthAfterYear ? 'YYYY[' + dpOptions.yearSuffix + '] MMMM' : 'MMMM YYYY[' + dpOptions.yearSuffix + ']';\n        }\n      };\n      var momComputableOptions = {\n        // Produces format strings like \"ddd M/D\" -> \"Fri 9/15\"\n        dayOfMonthFormat: function dayOfMonthFormat(momOptions, fcOptions) {\n          var format = momOptions.longDateFormat('l'); // for the format like \"M/D/YYYY\"\n          // strip the year off the edge, as well as other misc non-whitespace chars\n\n          format = format.replace(/^Y+[^\\w\\s]*|[^\\w\\s]*Y+$/g, '');\n\n          if (fcOptions.isRTL) {\n            format += ' ddd'; // for RTL, add day-of-week to end\n          } else {\n            format = 'ddd ' + format; // for LTR, add day-of-week to beginning\n          }\n\n          return format;\n        },\n        // Produces format strings like \"h:mma\" -> \"6:00pm\"\n        mediumTimeFormat: function mediumTimeFormat(momOptions) {\n          return momOptions.longDateFormat('LT').replace(/\\s*a$/i, 'a'); // convert AM/PM/am/pm to lowercase. remove any spaces beforehand\n        },\n        // Produces format strings like \"h(:mm)a\" -> \"6pm\" / \"6:30pm\"\n        smallTimeFormat: function smallTimeFormat(momOptions) {\n          return momOptions.longDateFormat('LT').replace(':mm', '(:mm)').replace(/(\\Wmm)$/, '($1)') // like above, but for foreign locales\n          .replace(/\\s*a$/i, 'a'); // convert AM/PM/am/pm to lowercase. remove any spaces beforehand\n        },\n        // Produces format strings like \"h(:mm)t\" -> \"6p\" / \"6:30p\"\n        extraSmallTimeFormat: function extraSmallTimeFormat(momOptions) {\n          return momOptions.longDateFormat('LT').replace(':mm', '(:mm)').replace(/(\\Wmm)$/, '($1)') // like above, but for foreign locales\n          .replace(/\\s*a$/i, 't'); // convert to AM/PM/am/pm to lowercase one-letter. remove any spaces beforehand\n        },\n        // Produces format strings like \"ha\" / \"H\" -> \"6pm\" / \"18\"\n        hourFormat: function hourFormat(momOptions) {\n          return momOptions.longDateFormat('LT').replace(':mm', '').replace(/(\\Wmm)$/, '') // like above, but for foreign locales\n          .replace(/\\s*a$/i, 'a'); // convert AM/PM/am/pm to lowercase. remove any spaces beforehand\n        },\n        // Produces format strings like \"h:mm\" -> \"6:30\" (with no AM/PM)\n        noMeridiemTimeFormat: function noMeridiemTimeFormat(momOptions) {\n          return momOptions.longDateFormat('LT').replace(/\\s*a$/i, ''); // remove trailing AM/PM\n        }\n      }; // options that should be computed off live calendar options (considers override options)\n      // TODO: best place for this? related to locale?\n      // TODO: flipping text based on isRTL is a bad idea because the CSS `direction` might want to handle it\n\n      var instanceComputableOptions = {\n        // Produces format strings for results like \"Mo 16\"\n        smallDayDateFormat: function smallDayDateFormat(options) {\n          return options.isRTL ? 'D dd' : 'dd D';\n        },\n        // Produces format strings for results like \"Wk 5\"\n        weekFormat: function weekFormat(options) {\n          return options.isRTL ? 'w[ ' + options.weekNumberTitle + ']' : '[' + options.weekNumberTitle + ' ]w';\n        },\n        // Produces format strings for results like \"Wk5\"\n        smallWeekFormat: function smallWeekFormat(options) {\n          return options.isRTL ? 'w[' + options.weekNumberTitle + ']' : '[' + options.weekNumberTitle + ']w';\n        }\n      }; // TODO: make these computable properties in optionsManager\n\n      function populateInstanceComputableOptions(options) {\n        $.each(instanceComputableOptions, function (name, func) {\n          if (options[name] == null) {\n            options[name] = func(options);\n          }\n        });\n      }\n\n      exports.populateInstanceComputableOptions = populateInstanceComputableOptions; // Initialize jQuery UI datepicker translations while using some of the translations\n      // Will set this as the default locales for datepicker.\n\n      function datepickerLocale(localeCode, dpLocaleCode, dpOptions) {\n        // get the FullCalendar internal option hash for this locale. create if necessary\n        var fcOptions = exports.localeOptionHash[localeCode] || (exports.localeOptionHash[localeCode] = {}); // transfer some simple options from datepicker to fc\n\n        fcOptions.isRTL = dpOptions.isRTL;\n        fcOptions.weekNumberTitle = dpOptions.weekHeader; // compute some more complex options from datepicker\n\n        $.each(dpComputableOptions, function (name, func) {\n          fcOptions[name] = func(dpOptions);\n        });\n        var jqDatePicker = $.datepicker; // is jQuery UI Datepicker is on the page?\n\n        if (jqDatePicker) {\n          // Register the locale data.\n          // FullCalendar and MomentJS use locale codes like \"pt-br\" but Datepicker\n          // does it like \"pt-BR\" or if it doesn't have the locale, maybe just \"pt\".\n          // Make an alias so the locale can be referenced either way.\n          jqDatePicker.regional[dpLocaleCode] = jqDatePicker.regional[localeCode] = // alias\n          dpOptions; // Alias 'en' to the default locale data. Do this every time.\n\n          jqDatePicker.regional.en = jqDatePicker.regional['']; // Set as Datepicker's global defaults.\n\n          jqDatePicker.setDefaults(dpOptions);\n        }\n      }\n\n      exports.datepickerLocale = datepickerLocale; // Sets FullCalendar-specific translations. Will set the locales as the global default.\n\n      function locale(localeCode, newFcOptions) {\n        var fcOptions;\n        var momOptions; // get the FullCalendar internal option hash for this locale. create if necessary\n\n        fcOptions = exports.localeOptionHash[localeCode] || (exports.localeOptionHash[localeCode] = {}); // provided new options for this locales? merge them in\n\n        if (newFcOptions) {\n          fcOptions = exports.localeOptionHash[localeCode] = options_1.mergeOptions([fcOptions, newFcOptions]);\n        } // compute locale options that weren't defined.\n        // always do this. newFcOptions can be undefined when initializing from i18n file,\n        // so no way to tell if this is an initialization or a default-setting.\n\n\n        momOptions = getMomentLocaleData(localeCode); // will fall back to en\n\n        $.each(momComputableOptions, function (name, func) {\n          if (fcOptions[name] == null) {\n            fcOptions[name] = func(momOptions, fcOptions);\n          }\n        }); // set it as the default locale for FullCalendar\n\n        options_1.globalDefaults.locale = localeCode;\n      }\n\n      exports.locale = locale; // Returns moment's internal locale data. If doesn't exist, returns English.\n\n      function getMomentLocaleData(localeCode) {\n        return moment.localeData(localeCode) || moment.localeData('en');\n      }\n\n      exports.getMomentLocaleData = getMomentLocaleData; // Initialize English by forcing computation of moment-derived options.\n      // Also, sets it as the default.\n\n      locale('en', options_1.englishDefaults);\n      /***/\n    },\n    /* 33 */\n\n    /***/\n    function (module, exports, __webpack_require__) {\n      Object.defineProperty(exports, \"__esModule\", {\n        value: true\n      });\n\n      var util_1 = __webpack_require__(4);\n\n      exports.globalDefaults = {\n        titleRangeSeparator: \" \\u2013 \",\n        monthYearFormat: 'MMMM YYYY',\n        defaultTimedEventDuration: '02:00:00',\n        defaultAllDayEventDuration: {\n          days: 1\n        },\n        forceEventDuration: false,\n        nextDayThreshold: '09:00:00',\n        // display\n        columnHeader: true,\n        defaultView: 'month',\n        aspectRatio: 1.35,\n        header: {\n          left: 'title',\n          center: '',\n          right: 'today prev,next'\n        },\n        weekends: true,\n        weekNumbers: false,\n        weekNumberTitle: 'W',\n        weekNumberCalculation: 'local',\n        // editable: false,\n        // nowIndicator: false,\n        scrollTime: '06:00:00',\n        minTime: '00:00:00',\n        maxTime: '24:00:00',\n        showNonCurrentDates: true,\n        // event ajax\n        lazyFetching: true,\n        startParam: 'start',\n        endParam: 'end',\n        timezoneParam: 'timezone',\n        timezone: false,\n        // allDayDefault: undefined,\n        // locale\n        locale: null,\n        isRTL: false,\n        buttonText: {\n          prev: 'prev',\n          next: 'next',\n          prevYear: 'prev year',\n          nextYear: 'next year',\n          year: 'year',\n          today: 'today',\n          month: 'month',\n          week: 'week',\n          day: 'day'\n        },\n        // buttonIcons: null,\n        allDayText: 'all-day',\n        // allows setting a min-height to the event segment to prevent short events overlapping each other\n        agendaEventMinHeight: 0,\n        // jquery-ui theming\n        theme: false,\n        // themeButtonIcons: null,\n        // eventResizableFromStart: false,\n        dragOpacity: .75,\n        dragRevertDuration: 500,\n        dragScroll: true,\n        // selectable: false,\n        unselectAuto: true,\n        // selectMinDistance: 0,\n        dropAccept: '*',\n        eventOrder: 'title',\n        // eventRenderWait: null,\n        eventLimit: false,\n        eventLimitText: 'more',\n        eventLimitClick: 'popover',\n        dayPopoverFormat: 'LL',\n        handleWindowResize: true,\n        windowResizeDelay: 100,\n        longPressDelay: 1000\n      };\n      exports.englishDefaults = {\n        dayPopoverFormat: 'dddd, MMMM D'\n      };\n      exports.rtlDefaults = {\n        header: {\n          left: 'next,prev today',\n          center: '',\n          right: 'title'\n        },\n        buttonIcons: {\n          prev: 'right-single-arrow',\n          next: 'left-single-arrow',\n          prevYear: 'right-double-arrow',\n          nextYear: 'left-double-arrow'\n        },\n        themeButtonIcons: {\n          prev: 'circle-triangle-e',\n          next: 'circle-triangle-w',\n          nextYear: 'seek-prev',\n          prevYear: 'seek-next'\n        }\n      };\n      var complexOptions = ['header', 'footer', 'buttonText', 'buttonIcons', 'themeButtonIcons']; // Merges an array of option objects into a single object\n\n      function mergeOptions(optionObjs) {\n        return util_1.mergeProps(optionObjs, complexOptions);\n      }\n\n      exports.mergeOptions = mergeOptions;\n      /***/\n    },\n    /* 34 */\n\n    /***/\n    function (module, exports) {\n      Object.defineProperty(exports, \"__esModule\", {\n        value: true\n      });\n\n      var EventFootprint =\n      /** @class */\n      function () {\n        function EventFootprint(componentFootprint, eventDef, eventInstance) {\n          this.componentFootprint = componentFootprint;\n          this.eventDef = eventDef;\n\n          if (eventInstance) {\n            this.eventInstance = eventInstance;\n          }\n        }\n\n        EventFootprint.prototype.getEventLegacy = function () {\n          return (this.eventInstance || this.eventDef).toLegacy();\n        };\n\n        return EventFootprint;\n      }();\n\n      exports[\"default\"] = EventFootprint;\n      /***/\n    },\n    /* 35 */\n\n    /***/\n    function (module, exports, __webpack_require__) {\n      Object.defineProperty(exports, \"__esModule\", {\n        value: true\n      });\n\n      var tslib_1 = __webpack_require__(2);\n\n      var util_1 = __webpack_require__(4); // Class that all other classes will inherit from\n\n\n      var Class =\n      /** @class */\n      function () {\n        function Class() {} // Called on a class to create a subclass.\n        // LIMITATION: cannot provide a constructor!\n\n\n        Class.extend = function (members) {\n          var SubClass =\n          /** @class */\n          function (_super) {\n            tslib_1.__extends(SubClass, _super);\n\n            function SubClass() {\n              return _super !== null && _super.apply(this, arguments) || this;\n            }\n\n            return SubClass;\n          }(this);\n\n          util_1.copyOwnProps(members, SubClass.prototype);\n          return SubClass;\n        }; // Adds new member variables/methods to the class's prototype.\n        // Can be called with another class, or a plain object hash containing new members.\n\n\n        Class.mixin = function (members) {\n          util_1.copyOwnProps(members, this.prototype);\n        };\n\n        return Class;\n      }();\n\n      exports[\"default\"] = Class;\n      /***/\n    },\n    /* 36 */\n\n    /***/\n    function (module, exports, __webpack_require__) {\n      Object.defineProperty(exports, \"__esModule\", {\n        value: true\n      });\n\n      var moment = __webpack_require__(0);\n\n      var util_1 = __webpack_require__(4);\n\n      var SingleEventDef_1 = __webpack_require__(9);\n\n      var RecurringEventDef_1 = __webpack_require__(54);\n\n      exports[\"default\"] = {\n        parse: function parse(eventInput, source) {\n          if (util_1.isTimeString(eventInput.start) || moment.isDuration(eventInput.start) || util_1.isTimeString(eventInput.end) || moment.isDuration(eventInput.end)) {\n            return RecurringEventDef_1[\"default\"].parse(eventInput, source);\n          } else {\n            return SingleEventDef_1[\"default\"].parse(eventInput, source);\n          }\n        }\n      };\n      /***/\n    },\n    /* 37 */\n\n    /***/\n    function (module, exports, __webpack_require__) {\n      Object.defineProperty(exports, \"__esModule\", {\n        value: true\n      });\n\n      var $ = __webpack_require__(3);\n\n      var ParsableModelMixin_1 = __webpack_require__(52);\n\n      var EventDef =\n      /** @class */\n      function () {\n        function EventDef(source) {\n          this.source = source;\n          this.className = [];\n          this.miscProps = {};\n        }\n\n        EventDef.parse = function (rawInput, source) {\n          var def = new this(source);\n\n          if (def.applyProps(rawInput)) {\n            return def;\n          }\n\n          return false;\n        };\n\n        EventDef.normalizeId = function (id) {\n          return String(id);\n        };\n\n        EventDef.generateId = function () {\n          return '_fc' + EventDef.uuid++;\n        };\n\n        EventDef.prototype.clone = function () {\n          var copy = new this.constructor(this.source);\n          copy.id = this.id;\n          copy.rawId = this.rawId;\n          copy.uid = this.uid; // not really unique anymore :(\n\n          EventDef.copyVerbatimStandardProps(this, copy);\n          copy.className = this.className.slice(); // copy\n\n          copy.miscProps = $.extend({}, this.miscProps);\n          return copy;\n        };\n\n        EventDef.prototype.hasInverseRendering = function () {\n          return this.getRendering() === 'inverse-background';\n        };\n\n        EventDef.prototype.hasBgRendering = function () {\n          var rendering = this.getRendering();\n          return rendering === 'inverse-background' || rendering === 'background';\n        };\n\n        EventDef.prototype.getRendering = function () {\n          if (this.rendering != null) {\n            return this.rendering;\n          }\n\n          return this.source.rendering;\n        };\n\n        EventDef.prototype.getConstraint = function () {\n          if (this.constraint != null) {\n            return this.constraint;\n          }\n\n          if (this.source.constraint != null) {\n            return this.source.constraint;\n          }\n\n          return this.source.calendar.opt('eventConstraint'); // what about View option?\n        };\n\n        EventDef.prototype.getOverlap = function () {\n          if (this.overlap != null) {\n            return this.overlap;\n          }\n\n          if (this.source.overlap != null) {\n            return this.source.overlap;\n          }\n\n          return this.source.calendar.opt('eventOverlap'); // what about View option?\n        };\n\n        EventDef.prototype.isStartExplicitlyEditable = function () {\n          if (this.startEditable != null) {\n            return this.startEditable;\n          }\n\n          return this.source.startEditable;\n        };\n\n        EventDef.prototype.isDurationExplicitlyEditable = function () {\n          if (this.durationEditable != null) {\n            return this.durationEditable;\n          }\n\n          return this.source.durationEditable;\n        };\n\n        EventDef.prototype.isExplicitlyEditable = function () {\n          if (this.editable != null) {\n            return this.editable;\n          }\n\n          return this.source.editable;\n        };\n\n        EventDef.prototype.toLegacy = function () {\n          var obj = $.extend({}, this.miscProps);\n          obj._id = this.uid;\n          obj.source = this.source;\n          obj.className = this.className.slice(); // copy\n\n          obj.allDay = this.isAllDay();\n\n          if (this.rawId != null) {\n            obj.id = this.rawId;\n          }\n\n          EventDef.copyVerbatimStandardProps(this, obj);\n          return obj;\n        };\n\n        EventDef.prototype.applyManualStandardProps = function (rawProps) {\n          if (rawProps.id != null) {\n            this.id = EventDef.normalizeId(this.rawId = rawProps.id);\n          } else {\n            this.id = EventDef.generateId();\n          }\n\n          if (rawProps._id != null) {\n            // accept this prop, even tho somewhat internal\n            this.uid = String(rawProps._id);\n          } else {\n            this.uid = EventDef.generateId();\n          } // TODO: converge with EventSource\n\n\n          if ($.isArray(rawProps.className)) {\n            this.className = rawProps.className;\n          }\n\n          if (typeof rawProps.className === 'string') {\n            this.className = rawProps.className.split(/\\s+/);\n          }\n\n          return true;\n        };\n\n        EventDef.prototype.applyMiscProps = function (rawProps) {\n          $.extend(this.miscProps, rawProps);\n        };\n\n        EventDef.uuid = 0;\n        EventDef.defineStandardProps = ParsableModelMixin_1[\"default\"].defineStandardProps;\n        EventDef.copyVerbatimStandardProps = ParsableModelMixin_1[\"default\"].copyVerbatimStandardProps;\n        return EventDef;\n      }();\n\n      exports[\"default\"] = EventDef;\n      ParsableModelMixin_1[\"default\"].mixInto(EventDef);\n      EventDef.defineStandardProps({\n        // not automatically assigned (`false`)\n        _id: false,\n        id: false,\n        className: false,\n        source: false,\n        // automatically assigned (`true`)\n        title: true,\n        url: true,\n        rendering: true,\n        constraint: true,\n        overlap: true,\n        editable: true,\n        startEditable: true,\n        durationEditable: true,\n        color: true,\n        backgroundColor: true,\n        borderColor: true,\n        textColor: true\n      });\n      /***/\n    },\n    /* 38 */\n\n    /***/\n    function (module, exports) {\n      Object.defineProperty(exports, \"__esModule\", {\n        value: true\n      });\n      exports[\"default\"] = {\n        sourceClasses: [],\n        registerClass: function registerClass(EventSourceClass) {\n          this.sourceClasses.unshift(EventSourceClass); // give highest priority\n        },\n        parse: function parse(rawInput, calendar) {\n          var sourceClasses = this.sourceClasses;\n          var i;\n          var eventSource;\n\n          for (i = 0; i < sourceClasses.length; i++) {\n            eventSource = sourceClasses[i].parse(rawInput, calendar);\n\n            if (eventSource) {\n              return eventSource;\n            }\n          }\n        }\n      };\n      /***/\n    },\n    /* 39 */\n\n    /***/\n    function (module, exports, __webpack_require__) {\n      Object.defineProperty(exports, \"__esModule\", {\n        value: true\n      });\n\n      var util_1 = __webpack_require__(4);\n\n      var EventDateProfile_1 = __webpack_require__(16);\n\n      var EventDef_1 = __webpack_require__(37);\n\n      var EventDefDateMutation_1 = __webpack_require__(40);\n\n      var SingleEventDef_1 = __webpack_require__(9);\n\n      var EventDefMutation =\n      /** @class */\n      function () {\n        function EventDefMutation() {}\n\n        EventDefMutation.createFromRawProps = function (eventInstance, rawProps, largeUnit) {\n          var eventDef = eventInstance.def;\n          var dateProps = {};\n          var standardProps = {};\n          var miscProps = {};\n          var verbatimStandardProps = {};\n          var eventDefId = null;\n          var className = null;\n          var propName;\n          var dateProfile;\n          var dateMutation;\n          var defMutation;\n\n          for (propName in rawProps) {\n            if (EventDateProfile_1[\"default\"].isStandardProp(propName)) {\n              dateProps[propName] = rawProps[propName];\n            } else if (eventDef.isStandardProp(propName)) {\n              standardProps[propName] = rawProps[propName];\n            } else if (eventDef.miscProps[propName] !== rawProps[propName]) {\n              // only if changed\n              miscProps[propName] = rawProps[propName];\n            }\n          }\n\n          dateProfile = EventDateProfile_1[\"default\"].parse(dateProps, eventDef.source);\n\n          if (dateProfile) {\n            // no failure?\n            dateMutation = EventDefDateMutation_1[\"default\"].createFromDiff(eventInstance.dateProfile, dateProfile, largeUnit);\n          }\n\n          if (standardProps.id !== eventDef.id) {\n            eventDefId = standardProps.id; // only apply if there's a change\n          }\n\n          if (!util_1.isArraysEqual(standardProps.className, eventDef.className)) {\n            className = standardProps.className; // only apply if there's a change\n          }\n\n          EventDef_1[\"default\"].copyVerbatimStandardProps(standardProps, // src\n          verbatimStandardProps // dest\n          );\n          defMutation = new EventDefMutation();\n          defMutation.eventDefId = eventDefId;\n          defMutation.className = className;\n          defMutation.verbatimStandardProps = verbatimStandardProps;\n          defMutation.miscProps = miscProps;\n\n          if (dateMutation) {\n            defMutation.dateMutation = dateMutation;\n          }\n\n          return defMutation;\n        };\n        /*\r\n        eventDef assumed to be a SingleEventDef.\r\n        returns an undo function.\r\n        */\n\n\n        EventDefMutation.prototype.mutateSingle = function (eventDef) {\n          var origDateProfile;\n\n          if (this.dateMutation) {\n            origDateProfile = eventDef.dateProfile;\n            eventDef.dateProfile = this.dateMutation.buildNewDateProfile(origDateProfile, eventDef.source.calendar);\n          } // can't undo\n          // TODO: more DRY with EventDef::applyManualStandardProps\n\n\n          if (this.eventDefId != null) {\n            eventDef.id = EventDef_1[\"default\"].normalizeId(eventDef.rawId = this.eventDefId);\n          } // can't undo\n          // TODO: more DRY with EventDef::applyManualStandardProps\n\n\n          if (this.className) {\n            eventDef.className = this.className;\n          } // can't undo\n\n\n          if (this.verbatimStandardProps) {\n            SingleEventDef_1[\"default\"].copyVerbatimStandardProps(this.verbatimStandardProps, // src\n            eventDef // dest\n            );\n          } // can't undo\n\n\n          if (this.miscProps) {\n            eventDef.applyMiscProps(this.miscProps);\n          }\n\n          if (origDateProfile) {\n            return function () {\n              eventDef.dateProfile = origDateProfile;\n            };\n          } else {\n            return function () {};\n          }\n        };\n\n        EventDefMutation.prototype.setDateMutation = function (dateMutation) {\n          if (dateMutation && !dateMutation.isEmpty()) {\n            this.dateMutation = dateMutation;\n          } else {\n            this.dateMutation = null;\n          }\n        };\n\n        EventDefMutation.prototype.isEmpty = function () {\n          return !this.dateMutation;\n        };\n\n        return EventDefMutation;\n      }();\n\n      exports[\"default\"] = EventDefMutation;\n      /***/\n    },\n    /* 40 */\n\n    /***/\n    function (module, exports, __webpack_require__) {\n      Object.defineProperty(exports, \"__esModule\", {\n        value: true\n      });\n\n      var util_1 = __webpack_require__(4);\n\n      var EventDateProfile_1 = __webpack_require__(16);\n\n      var EventDefDateMutation =\n      /** @class */\n      function () {\n        function EventDefDateMutation() {\n          this.clearEnd = false;\n          this.forceTimed = false;\n          this.forceAllDay = false;\n        }\n\n        EventDefDateMutation.createFromDiff = function (dateProfile0, dateProfile1, largeUnit) {\n          var clearEnd = dateProfile0.end && !dateProfile1.end;\n          var forceTimed = dateProfile0.isAllDay() && !dateProfile1.isAllDay();\n          var forceAllDay = !dateProfile0.isAllDay() && dateProfile1.isAllDay();\n          var dateDelta;\n          var endDiff;\n          var endDelta;\n          var mutation; // subtracts the dates in the appropriate way, returning a duration\n\n          function subtractDates(date1, date0) {\n            if (largeUnit) {\n              return util_1.diffByUnit(date1, date0, largeUnit); // poorly named\n            } else if (dateProfile1.isAllDay()) {\n              return util_1.diffDay(date1, date0); // poorly named\n            } else {\n              return util_1.diffDayTime(date1, date0); // poorly named\n            }\n          }\n\n          dateDelta = subtractDates(dateProfile1.start, dateProfile0.start);\n\n          if (dateProfile1.end) {\n            // use unzonedRanges because dateProfile0.end might be null\n            endDiff = subtractDates(dateProfile1.unzonedRange.getEnd(), dateProfile0.unzonedRange.getEnd());\n            endDelta = endDiff.subtract(dateDelta);\n          }\n\n          mutation = new EventDefDateMutation();\n          mutation.clearEnd = clearEnd;\n          mutation.forceTimed = forceTimed;\n          mutation.forceAllDay = forceAllDay;\n          mutation.setDateDelta(dateDelta);\n          mutation.setEndDelta(endDelta);\n          return mutation;\n        };\n        /*\r\n        returns an undo function.\r\n        */\n\n\n        EventDefDateMutation.prototype.buildNewDateProfile = function (eventDateProfile, calendar) {\n          var start = eventDateProfile.start.clone();\n          var end = null;\n          var shouldRezone = false;\n\n          if (eventDateProfile.end && !this.clearEnd) {\n            end = eventDateProfile.end.clone();\n          } else if (this.endDelta && !end) {\n            end = calendar.getDefaultEventEnd(eventDateProfile.isAllDay(), start);\n          }\n\n          if (this.forceTimed) {\n            shouldRezone = true;\n\n            if (!start.hasTime()) {\n              start.time(0);\n            }\n\n            if (end && !end.hasTime()) {\n              end.time(0);\n            }\n          } else if (this.forceAllDay) {\n            if (start.hasTime()) {\n              start.stripTime();\n            }\n\n            if (end && end.hasTime()) {\n              end.stripTime();\n            }\n          }\n\n          if (this.dateDelta) {\n            shouldRezone = true;\n            start.add(this.dateDelta);\n\n            if (end) {\n              end.add(this.dateDelta);\n            }\n          } // do this before adding startDelta to start, so we can work off of start\n\n\n          if (this.endDelta) {\n            shouldRezone = true;\n            end.add(this.endDelta);\n          }\n\n          if (this.startDelta) {\n            shouldRezone = true;\n            start.add(this.startDelta);\n          }\n\n          if (shouldRezone) {\n            start = calendar.applyTimezone(start);\n\n            if (end) {\n              end = calendar.applyTimezone(end);\n            }\n          } // TODO: okay to access calendar option?\n\n\n          if (!end && calendar.opt('forceEventDuration')) {\n            end = calendar.getDefaultEventEnd(eventDateProfile.isAllDay(), start);\n          }\n\n          return new EventDateProfile_1[\"default\"](start, end, calendar);\n        };\n\n        EventDefDateMutation.prototype.setDateDelta = function (dateDelta) {\n          if (dateDelta && dateDelta.valueOf()) {\n            this.dateDelta = dateDelta;\n          } else {\n            this.dateDelta = null;\n          }\n        };\n\n        EventDefDateMutation.prototype.setStartDelta = function (startDelta) {\n          if (startDelta && startDelta.valueOf()) {\n            this.startDelta = startDelta;\n          } else {\n            this.startDelta = null;\n          }\n        };\n\n        EventDefDateMutation.prototype.setEndDelta = function (endDelta) {\n          if (endDelta && endDelta.valueOf()) {\n            this.endDelta = endDelta;\n          } else {\n            this.endDelta = null;\n          }\n        };\n\n        EventDefDateMutation.prototype.isEmpty = function () {\n          return !this.clearEnd && !this.forceTimed && !this.forceAllDay && !this.dateDelta && !this.startDelta && !this.endDelta;\n        };\n\n        return EventDefDateMutation;\n      }();\n\n      exports[\"default\"] = EventDefDateMutation;\n      /***/\n    },\n    /* 41 */\n\n    /***/\n    function (module, exports, __webpack_require__) {\n      Object.defineProperty(exports, \"__esModule\", {\n        value: true\n      });\n\n      var tslib_1 = __webpack_require__(2);\n\n      var $ = __webpack_require__(3);\n\n      var util_1 = __webpack_require__(4);\n\n      var Class_1 = __webpack_require__(35);\n      /*\r\n      Embodies a div that has potential scrollbars\r\n      */\n\n\n      var Scroller =\n      /** @class */\n      function (_super) {\n        tslib_1.__extends(Scroller, _super);\n\n        function Scroller(options) {\n          var _this = _super.call(this) || this;\n\n          options = options || {};\n          _this.overflowX = options.overflowX || options.overflow || 'auto';\n          _this.overflowY = options.overflowY || options.overflow || 'auto';\n          return _this;\n        }\n\n        Scroller.prototype.render = function () {\n          this.el = this.renderEl();\n          this.applyOverflow();\n        };\n\n        Scroller.prototype.renderEl = function () {\n          return this.scrollEl = $('<div class=\"fc-scroller\"></div>');\n        }; // sets to natural height, unlocks overflow\n\n\n        Scroller.prototype.clear = function () {\n          this.setHeight('auto');\n          this.applyOverflow();\n        };\n\n        Scroller.prototype.destroy = function () {\n          this.el.remove();\n        }; // Overflow\n        // -----------------------------------------------------------------------------------------------------------------\n\n\n        Scroller.prototype.applyOverflow = function () {\n          this.scrollEl.css({\n            'overflow-x': this.overflowX,\n            'overflow-y': this.overflowY\n          });\n        }; // Causes any 'auto' overflow values to resolves to 'scroll' or 'hidden'.\n        // Useful for preserving scrollbar widths regardless of future resizes.\n        // Can pass in scrollbarWidths for optimization.\n\n\n        Scroller.prototype.lockOverflow = function (scrollbarWidths) {\n          var overflowX = this.overflowX;\n          var overflowY = this.overflowY;\n          scrollbarWidths = scrollbarWidths || this.getScrollbarWidths();\n\n          if (overflowX === 'auto') {\n            overflowX = scrollbarWidths.top || scrollbarWidths.bottom || // horizontal scrollbars?\n            // OR scrolling pane with massless scrollbars?\n            this.scrollEl[0].scrollWidth - 1 > this.scrollEl[0].clientWidth // subtract 1 because of IE off-by-one issue\n            ? 'scroll' : 'hidden';\n          }\n\n          if (overflowY === 'auto') {\n            overflowY = scrollbarWidths.left || scrollbarWidths.right || // vertical scrollbars?\n            // OR scrolling pane with massless scrollbars?\n            this.scrollEl[0].scrollHeight - 1 > this.scrollEl[0].clientHeight // subtract 1 because of IE off-by-one issue\n            ? 'scroll' : 'hidden';\n          }\n\n          this.scrollEl.css({\n            'overflow-x': overflowX,\n            'overflow-y': overflowY\n          });\n        }; // Getters / Setters\n        // -----------------------------------------------------------------------------------------------------------------\n\n\n        Scroller.prototype.setHeight = function (height) {\n          this.scrollEl.height(height);\n        };\n\n        Scroller.prototype.getScrollTop = function () {\n          return this.scrollEl.scrollTop();\n        };\n\n        Scroller.prototype.setScrollTop = function (top) {\n          this.scrollEl.scrollTop(top);\n        };\n\n        Scroller.prototype.getClientWidth = function () {\n          return this.scrollEl[0].clientWidth;\n        };\n\n        Scroller.prototype.getClientHeight = function () {\n          return this.scrollEl[0].clientHeight;\n        };\n\n        Scroller.prototype.getScrollbarWidths = function () {\n          return util_1.getScrollbarWidths(this.scrollEl);\n        };\n\n        return Scroller;\n      }(Class_1[\"default\"]);\n\n      exports[\"default\"] = Scroller;\n      /***/\n    },\n    /* 42 */\n\n    /***/\n    function (module, exports, __webpack_require__) {\n      Object.defineProperty(exports, \"__esModule\", {\n        value: true\n      });\n\n      var tslib_1 = __webpack_require__(2);\n\n      var $ = __webpack_require__(3);\n\n      var util_1 = __webpack_require__(4);\n\n      var DateComponent_1 = __webpack_require__(231);\n\n      var GlobalEmitter_1 = __webpack_require__(23);\n\n      var InteractiveDateComponent =\n      /** @class */\n      function (_super) {\n        tslib_1.__extends(InteractiveDateComponent, _super);\n\n        function InteractiveDateComponent(_view, _options) {\n          var _this = _super.call(this, _view, _options) || this; // self-config, overridable by subclasses\n\n\n          _this.segSelector = '.fc-event-container > *'; // what constitutes an event element?\n\n          if (_this.dateSelectingClass) {\n            _this.dateClicking = new _this.dateClickingClass(_this);\n          }\n\n          if (_this.dateSelectingClass) {\n            _this.dateSelecting = new _this.dateSelectingClass(_this);\n          }\n\n          if (_this.eventPointingClass) {\n            _this.eventPointing = new _this.eventPointingClass(_this);\n          }\n\n          if (_this.eventDraggingClass && _this.eventPointing) {\n            _this.eventDragging = new _this.eventDraggingClass(_this, _this.eventPointing);\n          }\n\n          if (_this.eventResizingClass && _this.eventPointing) {\n            _this.eventResizing = new _this.eventResizingClass(_this, _this.eventPointing);\n          }\n\n          if (_this.externalDroppingClass) {\n            _this.externalDropping = new _this.externalDroppingClass(_this);\n          }\n\n          return _this;\n        } // Sets the container element that the view should render inside of, does global DOM-related initializations,\n        // and renders all the non-date-related content inside.\n\n\n        InteractiveDateComponent.prototype.setElement = function (el) {\n          _super.prototype.setElement.call(this, el);\n\n          if (this.dateClicking) {\n            this.dateClicking.bindToEl(el);\n          }\n\n          if (this.dateSelecting) {\n            this.dateSelecting.bindToEl(el);\n          }\n\n          this.bindAllSegHandlersToEl(el);\n        };\n\n        InteractiveDateComponent.prototype.removeElement = function () {\n          this.endInteractions();\n\n          _super.prototype.removeElement.call(this);\n        };\n\n        InteractiveDateComponent.prototype.executeEventUnrender = function () {\n          this.endInteractions();\n\n          _super.prototype.executeEventUnrender.call(this);\n        };\n\n        InteractiveDateComponent.prototype.bindGlobalHandlers = function () {\n          _super.prototype.bindGlobalHandlers.call(this);\n\n          if (this.externalDropping) {\n            this.externalDropping.bindToDocument();\n          }\n        };\n\n        InteractiveDateComponent.prototype.unbindGlobalHandlers = function () {\n          _super.prototype.unbindGlobalHandlers.call(this);\n\n          if (this.externalDropping) {\n            this.externalDropping.unbindFromDocument();\n          }\n        };\n\n        InteractiveDateComponent.prototype.bindDateHandlerToEl = function (el, name, handler) {\n          var _this = this; // attach a handler to the grid's root element.\n          // jQuery will take care of unregistering them when removeElement gets called.\n\n\n          this.el.on(name, function (ev) {\n            if (!$(ev.target).is(_this.segSelector + ':not(.fc-helper),' + // directly on an event element\n            _this.segSelector + ':not(.fc-helper) *,' + // within an event element\n            '.fc-more,' + // a \"more..\" link\n            'a[data-goto]' // a clickable nav link\n            )) {\n              return handler.call(_this, ev);\n            }\n          });\n        };\n\n        InteractiveDateComponent.prototype.bindAllSegHandlersToEl = function (el) {\n          [this.eventPointing, this.eventDragging, this.eventResizing].forEach(function (eventInteraction) {\n            if (eventInteraction) {\n              eventInteraction.bindToEl(el);\n            }\n          });\n        };\n\n        InteractiveDateComponent.prototype.bindSegHandlerToEl = function (el, name, handler) {\n          var _this = this;\n\n          el.on(name, this.segSelector, function (ev) {\n            var segEl = $(ev.currentTarget);\n\n            if (!segEl.is('.fc-helper')) {\n              var seg = segEl.data('fc-seg'); // grab segment data. put there by View::renderEventsPayload\n\n              if (seg && !_this.shouldIgnoreEventPointing()) {\n                return handler.call(_this, seg, ev); // context will be the Grid\n              }\n            }\n          });\n        };\n\n        InteractiveDateComponent.prototype.shouldIgnoreMouse = function () {\n          // HACK\n          // This will still work even though bindDateHandlerToEl doesn't use GlobalEmitter.\n          return GlobalEmitter_1[\"default\"].get().shouldIgnoreMouse();\n        };\n\n        InteractiveDateComponent.prototype.shouldIgnoreTouch = function () {\n          var view = this._getView(); // On iOS (and Android?) when a new selection is initiated overtop another selection,\n          // the touchend never fires because the elements gets removed mid-touch-interaction (my theory).\n          // HACK: simply don't allow this to happen.\n          // ALSO: prevent selection when an *event* is already raised.\n\n\n          return view.isSelected || view.selectedEvent;\n        };\n\n        InteractiveDateComponent.prototype.shouldIgnoreEventPointing = function () {\n          // only call the handlers if there is not a drag/resize in progress\n          return this.eventDragging && this.eventDragging.isDragging || this.eventResizing && this.eventResizing.isResizing;\n        };\n\n        InteractiveDateComponent.prototype.canStartSelection = function (seg, ev) {\n          return util_1.getEvIsTouch(ev) && !this.canStartResize(seg, ev) && (this.isEventDefDraggable(seg.footprint.eventDef) || this.isEventDefResizable(seg.footprint.eventDef));\n        };\n\n        InteractiveDateComponent.prototype.canStartDrag = function (seg, ev) {\n          return !this.canStartResize(seg, ev) && this.isEventDefDraggable(seg.footprint.eventDef);\n        };\n\n        InteractiveDateComponent.prototype.canStartResize = function (seg, ev) {\n          var view = this._getView();\n\n          var eventDef = seg.footprint.eventDef;\n          return (!util_1.getEvIsTouch(ev) || view.isEventDefSelected(eventDef)) && this.isEventDefResizable(eventDef) && $(ev.target).is('.fc-resizer');\n        }; // Kills all in-progress dragging.\n        // Useful for when public API methods that result in re-rendering are invoked during a drag.\n        // Also useful for when touch devices misbehave and don't fire their touchend.\n\n\n        InteractiveDateComponent.prototype.endInteractions = function () {\n          [this.dateClicking, this.dateSelecting, this.eventPointing, this.eventDragging, this.eventResizing].forEach(function (interaction) {\n            if (interaction) {\n              interaction.end();\n            }\n          });\n        }; // Event Drag-n-Drop\n        // ---------------------------------------------------------------------------------------------------------------\n        // Computes if the given event is allowed to be dragged by the user\n\n\n        InteractiveDateComponent.prototype.isEventDefDraggable = function (eventDef) {\n          return this.isEventDefStartEditable(eventDef);\n        };\n\n        InteractiveDateComponent.prototype.isEventDefStartEditable = function (eventDef) {\n          var isEditable = eventDef.isStartExplicitlyEditable();\n\n          if (isEditable == null) {\n            isEditable = this.opt('eventStartEditable');\n\n            if (isEditable == null) {\n              isEditable = this.isEventDefGenerallyEditable(eventDef);\n            }\n          }\n\n          return isEditable;\n        };\n\n        InteractiveDateComponent.prototype.isEventDefGenerallyEditable = function (eventDef) {\n          var isEditable = eventDef.isExplicitlyEditable();\n\n          if (isEditable == null) {\n            isEditable = this.opt('editable');\n          }\n\n          return isEditable;\n        }; // Event Resizing\n        // ---------------------------------------------------------------------------------------------------------------\n        // Computes if the given event is allowed to be resized from its starting edge\n\n\n        InteractiveDateComponent.prototype.isEventDefResizableFromStart = function (eventDef) {\n          return this.opt('eventResizableFromStart') && this.isEventDefResizable(eventDef);\n        }; // Computes if the given event is allowed to be resized from its ending edge\n\n\n        InteractiveDateComponent.prototype.isEventDefResizableFromEnd = function (eventDef) {\n          return this.isEventDefResizable(eventDef);\n        }; // Computes if the given event is allowed to be resized by the user at all\n\n\n        InteractiveDateComponent.prototype.isEventDefResizable = function (eventDef) {\n          var isResizable = eventDef.isDurationExplicitlyEditable();\n\n          if (isResizable == null) {\n            isResizable = this.opt('eventDurationEditable');\n\n            if (isResizable == null) {\n              isResizable = this.isEventDefGenerallyEditable(eventDef);\n            }\n          }\n\n          return isResizable;\n        }; // Event Mutation / Constraints\n        // ---------------------------------------------------------------------------------------------------------------\n        // Diffs the two dates, returning a duration, based on granularity of the grid\n        // TODO: port isTimeScale into this system?\n\n\n        InteractiveDateComponent.prototype.diffDates = function (a, b) {\n          if (this.largeUnit) {\n            return util_1.diffByUnit(a, b, this.largeUnit);\n          } else {\n            return util_1.diffDayTime(a, b);\n          }\n        }; // is it allowed, in relation to the view's validRange?\n        // NOTE: very similar to isExternalInstanceGroupAllowed\n\n\n        InteractiveDateComponent.prototype.isEventInstanceGroupAllowed = function (eventInstanceGroup) {\n          var view = this._getView();\n\n          var dateProfile = this.dateProfile;\n          var eventFootprints = this.eventRangesToEventFootprints(eventInstanceGroup.getAllEventRanges());\n          var i;\n\n          for (i = 0; i < eventFootprints.length; i++) {\n            // TODO: just use getAllEventRanges directly\n            if (!dateProfile.validUnzonedRange.containsRange(eventFootprints[i].componentFootprint.unzonedRange)) {\n              return false;\n            }\n          }\n\n          return view.calendar.constraints.isEventInstanceGroupAllowed(eventInstanceGroup);\n        }; // NOTE: very similar to isEventInstanceGroupAllowed\n        // when it's a completely anonymous external drag, no event.\n\n\n        InteractiveDateComponent.prototype.isExternalInstanceGroupAllowed = function (eventInstanceGroup) {\n          var view = this._getView();\n\n          var dateProfile = this.dateProfile;\n          var eventFootprints = this.eventRangesToEventFootprints(eventInstanceGroup.getAllEventRanges());\n          var i;\n\n          for (i = 0; i < eventFootprints.length; i++) {\n            if (!dateProfile.validUnzonedRange.containsRange(eventFootprints[i].componentFootprint.unzonedRange)) {\n              return false;\n            }\n          }\n\n          for (i = 0; i < eventFootprints.length; i++) {\n            // treat it as a selection\n            // TODO: pass in eventInstanceGroup instead\n            //  because we don't want calendar's constraint system to depend on a component's\n            //  determination of footprints.\n            if (!view.calendar.constraints.isSelectionFootprintAllowed(eventFootprints[i].componentFootprint)) {\n              return false;\n            }\n          }\n\n          return true;\n        };\n\n        return InteractiveDateComponent;\n      }(DateComponent_1[\"default\"]);\n\n      exports[\"default\"] = InteractiveDateComponent;\n      /***/\n    },\n    /* 43 */\n\n    /***/\n    function (module, exports, __webpack_require__) {\n      Object.defineProperty(exports, \"__esModule\", {\n        value: true\n      });\n\n      var tslib_1 = __webpack_require__(2);\n\n      var $ = __webpack_require__(3);\n\n      var moment = __webpack_require__(0);\n\n      var util_1 = __webpack_require__(4);\n\n      var RenderQueue_1 = __webpack_require__(229);\n\n      var DateProfileGenerator_1 = __webpack_require__(55);\n\n      var InteractiveDateComponent_1 = __webpack_require__(42);\n\n      var GlobalEmitter_1 = __webpack_require__(23);\n\n      var UnzonedRange_1 = __webpack_require__(5);\n      /* An abstract class from which other views inherit from\r\n      ----------------------------------------------------------------------------------------------------------------------*/\n\n\n      var View =\n      /** @class */\n      function (_super) {\n        tslib_1.__extends(View, _super);\n\n        function View(calendar, viewSpec) {\n          var _this = _super.call(this, null, viewSpec.options) || this;\n\n          _this.batchRenderDepth = 0;\n          _this.isSelected = false; // boolean whether a range of time is user-selected or not\n\n          _this.calendar = calendar;\n          _this.viewSpec = viewSpec; // shortcuts\n\n          _this.type = viewSpec.type; // .name is deprecated\n\n          _this.name = _this.type;\n\n          _this.initRenderQueue();\n\n          _this.initHiddenDays();\n\n          _this.dateProfileGenerator = new _this.dateProfileGeneratorClass(_this);\n\n          _this.bindBaseRenderHandlers();\n\n          _this.eventOrderSpecs = util_1.parseFieldSpecs(_this.opt('eventOrder')); // legacy\n\n          if (_this['initialize']) {\n            _this['initialize']();\n          }\n\n          return _this;\n        }\n\n        View.prototype._getView = function () {\n          return this;\n        }; // Retrieves an option with the given name\n\n\n        View.prototype.opt = function (name) {\n          return this.options[name];\n        };\n        /* Render Queue\r\n        ------------------------------------------------------------------------------------------------------------------*/\n\n\n        View.prototype.initRenderQueue = function () {\n          this.renderQueue = new RenderQueue_1[\"default\"]({\n            event: this.opt('eventRenderWait')\n          });\n          this.renderQueue.on('start', this.onRenderQueueStart.bind(this));\n          this.renderQueue.on('stop', this.onRenderQueueStop.bind(this));\n          this.on('before:change', this.startBatchRender);\n          this.on('change', this.stopBatchRender);\n        };\n\n        View.prototype.onRenderQueueStart = function () {\n          this.calendar.freezeContentHeight();\n          this.addScroll(this.queryScroll());\n        };\n\n        View.prototype.onRenderQueueStop = function () {\n          if (this.calendar.updateViewSize()) {\n            // success?\n            this.popScroll();\n          }\n\n          this.calendar.thawContentHeight();\n        };\n\n        View.prototype.startBatchRender = function () {\n          if (!this.batchRenderDepth++) {\n            this.renderQueue.pause();\n          }\n        };\n\n        View.prototype.stopBatchRender = function () {\n          if (! --this.batchRenderDepth) {\n            this.renderQueue.resume();\n          }\n        };\n\n        View.prototype.requestRender = function (func, namespace, actionType) {\n          this.renderQueue.queue(func, namespace, actionType);\n        }; // given func will auto-bind to `this`\n\n\n        View.prototype.whenSizeUpdated = function (func) {\n          if (this.renderQueue.isRunning) {\n            this.renderQueue.one('stop', func.bind(this));\n          } else {\n            func.call(this);\n          }\n        };\n        /* Title and Date Formatting\r\n        ------------------------------------------------------------------------------------------------------------------*/\n        // Computes what the title at the top of the calendar should be for this view\n\n\n        View.prototype.computeTitle = function (dateProfile) {\n          var unzonedRange; // for views that span a large unit of time, show the proper interval, ignoring stray days before and after\n\n          if (/^(year|month)$/.test(dateProfile.currentRangeUnit)) {\n            unzonedRange = dateProfile.currentUnzonedRange;\n          } else {\n            // for day units or smaller, use the actual day range\n            unzonedRange = dateProfile.activeUnzonedRange;\n          }\n\n          return this.formatRange({\n            start: this.calendar.msToMoment(unzonedRange.startMs, dateProfile.isRangeAllDay),\n            end: this.calendar.msToMoment(unzonedRange.endMs, dateProfile.isRangeAllDay)\n          }, dateProfile.isRangeAllDay, this.opt('titleFormat') || this.computeTitleFormat(dateProfile), this.opt('titleRangeSeparator'));\n        }; // Generates the format string that should be used to generate the title for the current date range.\n        // Attempts to compute the most appropriate format if not explicitly specified with `titleFormat`.\n\n\n        View.prototype.computeTitleFormat = function (dateProfile) {\n          var currentRangeUnit = dateProfile.currentRangeUnit;\n\n          if (currentRangeUnit === 'year') {\n            return 'YYYY';\n          } else if (currentRangeUnit === 'month') {\n            return this.opt('monthYearFormat'); // like \"September 2014\"\n          } else if (dateProfile.currentUnzonedRange.as('days') > 1) {\n            return 'll'; // multi-day range. shorter, like \"Sep 9 - 10 2014\"\n          } else {\n            return 'LL'; // one day. longer, like \"September 9 2014\"\n          }\n        }; // Date Setting/Unsetting\n        // -----------------------------------------------------------------------------------------------------------------\n\n\n        View.prototype.setDate = function (date) {\n          var currentDateProfile = this.get('dateProfile');\n          var newDateProfile = this.dateProfileGenerator.build(date, undefined, true); // forceToValid=true\n\n          if (!currentDateProfile || !currentDateProfile.activeUnzonedRange.equals(newDateProfile.activeUnzonedRange)) {\n            this.set('dateProfile', newDateProfile);\n          }\n        };\n\n        View.prototype.unsetDate = function () {\n          this.unset('dateProfile');\n        }; // Event Data\n        // -----------------------------------------------------------------------------------------------------------------\n\n\n        View.prototype.fetchInitialEvents = function (dateProfile) {\n          var calendar = this.calendar;\n          var forceAllDay = dateProfile.isRangeAllDay && !this.usesMinMaxTime;\n          return calendar.requestEvents(calendar.msToMoment(dateProfile.activeUnzonedRange.startMs, forceAllDay), calendar.msToMoment(dateProfile.activeUnzonedRange.endMs, forceAllDay));\n        };\n\n        View.prototype.bindEventChanges = function () {\n          this.listenTo(this.calendar, 'eventsReset', this.resetEvents); // TODO: make this a real event\n        };\n\n        View.prototype.unbindEventChanges = function () {\n          this.stopListeningTo(this.calendar, 'eventsReset');\n        };\n\n        View.prototype.setEvents = function (eventsPayload) {\n          this.set('currentEvents', eventsPayload);\n          this.set('hasEvents', true);\n        };\n\n        View.prototype.unsetEvents = function () {\n          this.unset('currentEvents');\n          this.unset('hasEvents');\n        };\n\n        View.prototype.resetEvents = function (eventsPayload) {\n          this.startBatchRender();\n          this.unsetEvents();\n          this.setEvents(eventsPayload);\n          this.stopBatchRender();\n        }; // Date High-level Rendering\n        // -----------------------------------------------------------------------------------------------------------------\n\n\n        View.prototype.requestDateRender = function (dateProfile) {\n          var _this = this;\n\n          this.requestRender(function () {\n            _this.executeDateRender(dateProfile);\n          }, 'date', 'init');\n        };\n\n        View.prototype.requestDateUnrender = function () {\n          var _this = this;\n\n          this.requestRender(function () {\n            _this.executeDateUnrender();\n          }, 'date', 'destroy');\n        }; // if dateProfile not specified, uses current\n\n\n        View.prototype.executeDateRender = function (dateProfile) {\n          _super.prototype.executeDateRender.call(this, dateProfile);\n\n          if (this['render']) {\n            this['render'](); // TODO: deprecate\n          }\n\n          this.trigger('datesRendered');\n          this.addScroll({\n            isDateInit: true\n          });\n          this.startNowIndicator(); // shouldn't render yet because updateSize will be called soon\n        };\n\n        View.prototype.executeDateUnrender = function () {\n          this.unselect();\n          this.stopNowIndicator();\n          this.trigger('before:datesUnrendered');\n\n          if (this['destroy']) {\n            this['destroy'](); // TODO: deprecate\n          }\n\n          _super.prototype.executeDateUnrender.call(this);\n        }; // \"Base\" rendering\n        // -----------------------------------------------------------------------------------------------------------------\n\n\n        View.prototype.bindBaseRenderHandlers = function () {\n          var _this = this;\n\n          this.on('datesRendered', function () {\n            _this.whenSizeUpdated(_this.triggerViewRender);\n          });\n          this.on('before:datesUnrendered', function () {\n            _this.triggerViewDestroy();\n          });\n        };\n\n        View.prototype.triggerViewRender = function () {\n          this.publiclyTrigger('viewRender', {\n            context: this,\n            args: [this, this.el]\n          });\n        };\n\n        View.prototype.triggerViewDestroy = function () {\n          this.publiclyTrigger('viewDestroy', {\n            context: this,\n            args: [this, this.el]\n          });\n        }; // Event High-level Rendering\n        // -----------------------------------------------------------------------------------------------------------------\n\n\n        View.prototype.requestEventsRender = function (eventsPayload) {\n          var _this = this;\n\n          this.requestRender(function () {\n            _this.executeEventRender(eventsPayload);\n\n            _this.whenSizeUpdated(_this.triggerAfterEventsRendered);\n          }, 'event', 'init');\n        };\n\n        View.prototype.requestEventsUnrender = function () {\n          var _this = this;\n\n          this.requestRender(function () {\n            _this.triggerBeforeEventsDestroyed();\n\n            _this.executeEventUnrender();\n          }, 'event', 'destroy');\n        }; // Business Hour High-level Rendering\n        // -----------------------------------------------------------------------------------------------------------------\n\n\n        View.prototype.requestBusinessHoursRender = function (businessHourGenerator) {\n          var _this = this;\n\n          this.requestRender(function () {\n            _this.renderBusinessHours(businessHourGenerator);\n          }, 'businessHours', 'init');\n        };\n\n        View.prototype.requestBusinessHoursUnrender = function () {\n          var _this = this;\n\n          this.requestRender(function () {\n            _this.unrenderBusinessHours();\n          }, 'businessHours', 'destroy');\n        }; // Misc view rendering utils\n        // -----------------------------------------------------------------------------------------------------------------\n        // Binds DOM handlers to elements that reside outside the view container, such as the document\n\n\n        View.prototype.bindGlobalHandlers = function () {\n          _super.prototype.bindGlobalHandlers.call(this);\n\n          this.listenTo(GlobalEmitter_1[\"default\"].get(), {\n            touchstart: this.processUnselect,\n            mousedown: this.handleDocumentMousedown\n          });\n        }; // Unbinds DOM handlers from elements that reside outside the view container\n\n\n        View.prototype.unbindGlobalHandlers = function () {\n          _super.prototype.unbindGlobalHandlers.call(this);\n\n          this.stopListeningTo(GlobalEmitter_1[\"default\"].get());\n        };\n        /* Now Indicator\r\n        ------------------------------------------------------------------------------------------------------------------*/\n        // Immediately render the current time indicator and begins re-rendering it at an interval,\n        // which is defined by this.getNowIndicatorUnit().\n        // TODO: somehow do this for the current whole day's background too\n\n\n        View.prototype.startNowIndicator = function () {\n          var _this = this;\n\n          var unit;\n          var update;\n          var delay; // ms wait value\n\n          if (this.opt('nowIndicator')) {\n            unit = this.getNowIndicatorUnit();\n\n            if (unit) {\n              update = util_1.proxy(this, 'updateNowIndicator'); // bind to `this`\n\n              this.initialNowDate = this.calendar.getNow();\n              this.initialNowQueriedMs = new Date().valueOf(); // wait until the beginning of the next interval\n\n              delay = this.initialNowDate.clone().startOf(unit).add(1, unit).valueOf() - this.initialNowDate.valueOf();\n              this.nowIndicatorTimeoutID = setTimeout(function () {\n                _this.nowIndicatorTimeoutID = null;\n                update();\n                delay = +moment.duration(1, unit);\n                delay = Math.max(100, delay); // prevent too frequent\n\n                _this.nowIndicatorIntervalID = setInterval(update, delay); // update every interval\n              }, delay);\n            } // rendering will be initiated in updateSize\n\n          }\n        }; // rerenders the now indicator, computing the new current time from the amount of time that has passed\n        // since the initial getNow call.\n\n\n        View.prototype.updateNowIndicator = function () {\n          if (this.isDatesRendered && this.initialNowDate // activated before?\n          ) {\n              this.unrenderNowIndicator(); // won't unrender if unnecessary\n\n              this.renderNowIndicator(this.initialNowDate.clone().add(new Date().valueOf() - this.initialNowQueriedMs) // add ms\n              );\n              this.isNowIndicatorRendered = true;\n            }\n        }; // Immediately unrenders the view's current time indicator and stops any re-rendering timers.\n        // Won't cause side effects if indicator isn't rendered.\n\n\n        View.prototype.stopNowIndicator = function () {\n          if (this.isNowIndicatorRendered) {\n            if (this.nowIndicatorTimeoutID) {\n              clearTimeout(this.nowIndicatorTimeoutID);\n              this.nowIndicatorTimeoutID = null;\n            }\n\n            if (this.nowIndicatorIntervalID) {\n              clearInterval(this.nowIndicatorIntervalID);\n              this.nowIndicatorIntervalID = null;\n            }\n\n            this.unrenderNowIndicator();\n            this.isNowIndicatorRendered = false;\n          }\n        };\n        /* Dimensions\r\n        ------------------------------------------------------------------------------------------------------------------*/\n\n\n        View.prototype.updateSize = function (totalHeight, isAuto, isResize) {\n          if (this['setHeight']) {\n            // for legacy API\n            this['setHeight'](totalHeight, isAuto);\n          } else {\n            _super.prototype.updateSize.call(this, totalHeight, isAuto, isResize);\n          }\n\n          this.updateNowIndicator();\n        };\n        /* Scroller\r\n        ------------------------------------------------------------------------------------------------------------------*/\n\n\n        View.prototype.addScroll = function (scroll) {\n          var queuedScroll = this.queuedScroll || (this.queuedScroll = {});\n          $.extend(queuedScroll, scroll);\n        };\n\n        View.prototype.popScroll = function () {\n          this.applyQueuedScroll();\n          this.queuedScroll = null;\n        };\n\n        View.prototype.applyQueuedScroll = function () {\n          if (this.queuedScroll) {\n            this.applyScroll(this.queuedScroll);\n          }\n        };\n\n        View.prototype.queryScroll = function () {\n          var scroll = {};\n\n          if (this.isDatesRendered) {\n            $.extend(scroll, this.queryDateScroll());\n          }\n\n          return scroll;\n        };\n\n        View.prototype.applyScroll = function (scroll) {\n          if (scroll.isDateInit && this.isDatesRendered) {\n            $.extend(scroll, this.computeInitialDateScroll());\n          }\n\n          if (this.isDatesRendered) {\n            this.applyDateScroll(scroll);\n          }\n        };\n\n        View.prototype.computeInitialDateScroll = function () {\n          return {}; // subclasses must implement\n        };\n\n        View.prototype.queryDateScroll = function () {\n          return {}; // subclasses must implement\n        };\n\n        View.prototype.applyDateScroll = function (scroll) {// subclasses must implement\n        };\n        /* Event Drag-n-Drop\r\n        ------------------------------------------------------------------------------------------------------------------*/\n\n\n        View.prototype.reportEventDrop = function (eventInstance, eventMutation, el, ev) {\n          var eventManager = this.calendar.eventManager;\n          var undoFunc = eventManager.mutateEventsWithId(eventInstance.def.id, eventMutation);\n          var dateMutation = eventMutation.dateMutation; // update the EventInstance, for handlers\n\n          if (dateMutation) {\n            eventInstance.dateProfile = dateMutation.buildNewDateProfile(eventInstance.dateProfile, this.calendar);\n          }\n\n          this.triggerEventDrop(eventInstance, // a drop doesn't necessarily mean a date mutation (ex: resource change)\n          dateMutation && dateMutation.dateDelta || moment.duration(), undoFunc, el, ev);\n        }; // Triggers event-drop handlers that have subscribed via the API\n\n\n        View.prototype.triggerEventDrop = function (eventInstance, dateDelta, undoFunc, el, ev) {\n          this.publiclyTrigger('eventDrop', {\n            context: el[0],\n            args: [eventInstance.toLegacy(), dateDelta, undoFunc, ev, {}, this]\n          });\n        };\n        /* External Element Drag-n-Drop\r\n        ------------------------------------------------------------------------------------------------------------------*/\n        // Must be called when an external element, via jQuery UI, has been dropped onto the calendar.\n        // `meta` is the parsed data that has been embedded into the dragging event.\n        // `dropLocation` is an object that contains the new zoned start/end/allDay values for the event.\n\n\n        View.prototype.reportExternalDrop = function (singleEventDef, isEvent, isSticky, el, ev, ui) {\n          if (isEvent) {\n            this.calendar.eventManager.addEventDef(singleEventDef, isSticky);\n          }\n\n          this.triggerExternalDrop(singleEventDef, isEvent, el, ev, ui);\n        }; // Triggers external-drop handlers that have subscribed via the API\n\n\n        View.prototype.triggerExternalDrop = function (singleEventDef, isEvent, el, ev, ui) {\n          // trigger 'drop' regardless of whether element represents an event\n          this.publiclyTrigger('drop', {\n            context: el[0],\n            args: [singleEventDef.dateProfile.start.clone(), ev, ui, this]\n          });\n\n          if (isEvent) {\n            // signal an external event landed\n            this.publiclyTrigger('eventReceive', {\n              context: this,\n              args: [singleEventDef.buildInstance().toLegacy(), this]\n            });\n          }\n        };\n        /* Event Resizing\r\n        ------------------------------------------------------------------------------------------------------------------*/\n        // Must be called when an event in the view has been resized to a new length\n\n\n        View.prototype.reportEventResize = function (eventInstance, eventMutation, el, ev) {\n          var eventManager = this.calendar.eventManager;\n          var undoFunc = eventManager.mutateEventsWithId(eventInstance.def.id, eventMutation); // update the EventInstance, for handlers\n\n          eventInstance.dateProfile = eventMutation.dateMutation.buildNewDateProfile(eventInstance.dateProfile, this.calendar);\n          var resizeDelta = eventMutation.dateMutation.endDelta || eventMutation.dateMutation.startDelta;\n          this.triggerEventResize(eventInstance, resizeDelta, undoFunc, el, ev);\n        }; // Triggers event-resize handlers that have subscribed via the API\n\n\n        View.prototype.triggerEventResize = function (eventInstance, resizeDelta, undoFunc, el, ev) {\n          this.publiclyTrigger('eventResize', {\n            context: el[0],\n            args: [eventInstance.toLegacy(), resizeDelta, undoFunc, ev, {}, this]\n          });\n        };\n        /* Selection (time range)\r\n        ------------------------------------------------------------------------------------------------------------------*/\n        // Selects a date span on the view. `start` and `end` are both Moments.\n        // `ev` is the native mouse event that begin the interaction.\n\n\n        View.prototype.select = function (footprint, ev) {\n          this.unselect(ev);\n          this.renderSelectionFootprint(footprint);\n          this.reportSelection(footprint, ev);\n        };\n\n        View.prototype.renderSelectionFootprint = function (footprint) {\n          if (this['renderSelection']) {\n            // legacy method in custom view classes\n            this['renderSelection'](footprint.toLegacy(this.calendar));\n          } else {\n            _super.prototype.renderSelectionFootprint.call(this, footprint);\n          }\n        }; // Called when a new selection is made. Updates internal state and triggers handlers.\n\n\n        View.prototype.reportSelection = function (footprint, ev) {\n          this.isSelected = true;\n          this.triggerSelect(footprint, ev);\n        }; // Triggers handlers to 'select'\n\n\n        View.prototype.triggerSelect = function (footprint, ev) {\n          var dateProfile = this.calendar.footprintToDateProfile(footprint); // abuse of \"Event\"DateProfile?\n\n          this.publiclyTrigger('select', {\n            context: this,\n            args: [dateProfile.start, dateProfile.end, ev, this]\n          });\n        }; // Undoes a selection. updates in the internal state and triggers handlers.\n        // `ev` is the native mouse event that began the interaction.\n\n\n        View.prototype.unselect = function (ev) {\n          if (this.isSelected) {\n            this.isSelected = false;\n\n            if (this['destroySelection']) {\n              this['destroySelection'](); // TODO: deprecate\n            }\n\n            this.unrenderSelection();\n            this.publiclyTrigger('unselect', {\n              context: this,\n              args: [ev, this]\n            });\n          }\n        };\n        /* Event Selection\r\n        ------------------------------------------------------------------------------------------------------------------*/\n\n\n        View.prototype.selectEventInstance = function (eventInstance) {\n          if (!this.selectedEventInstance || this.selectedEventInstance !== eventInstance) {\n            this.unselectEventInstance();\n            this.getEventSegs().forEach(function (seg) {\n              if (seg.footprint.eventInstance === eventInstance && seg.el // necessary?\n              ) {\n                  seg.el.addClass('fc-selected');\n                }\n            });\n            this.selectedEventInstance = eventInstance;\n          }\n        };\n\n        View.prototype.unselectEventInstance = function () {\n          if (this.selectedEventInstance) {\n            this.getEventSegs().forEach(function (seg) {\n              if (seg.el) {\n                // necessary?\n                seg.el.removeClass('fc-selected');\n              }\n            });\n            this.selectedEventInstance = null;\n          }\n        };\n\n        View.prototype.isEventDefSelected = function (eventDef) {\n          // event references might change on refetchEvents(), while selectedEventInstance doesn't,\n          // so compare IDs\n          return this.selectedEventInstance && this.selectedEventInstance.def.id === eventDef.id;\n        };\n        /* Mouse / Touch Unselecting (time range & event unselection)\r\n        ------------------------------------------------------------------------------------------------------------------*/\n        // TODO: move consistently to down/start or up/end?\n        // TODO: don't kill previous selection if touch scrolling\n\n\n        View.prototype.handleDocumentMousedown = function (ev) {\n          if (util_1.isPrimaryMouseButton(ev)) {\n            this.processUnselect(ev);\n          }\n        };\n\n        View.prototype.processUnselect = function (ev) {\n          this.processRangeUnselect(ev);\n          this.processEventUnselect(ev);\n        };\n\n        View.prototype.processRangeUnselect = function (ev) {\n          var ignore; // is there a time-range selection?\n\n          if (this.isSelected && this.opt('unselectAuto')) {\n            // only unselect if the clicked element is not identical to or inside of an 'unselectCancel' element\n            ignore = this.opt('unselectCancel');\n\n            if (!ignore || !$(ev.target).closest(ignore).length) {\n              this.unselect(ev);\n            }\n          }\n        };\n\n        View.prototype.processEventUnselect = function (ev) {\n          if (this.selectedEventInstance) {\n            if (!$(ev.target).closest('.fc-selected').length) {\n              this.unselectEventInstance();\n            }\n          }\n        };\n        /* Triggers\r\n        ------------------------------------------------------------------------------------------------------------------*/\n\n\n        View.prototype.triggerBaseRendered = function () {\n          this.publiclyTrigger('viewRender', {\n            context: this,\n            args: [this, this.el]\n          });\n        };\n\n        View.prototype.triggerBaseUnrendered = function () {\n          this.publiclyTrigger('viewDestroy', {\n            context: this,\n            args: [this, this.el]\n          });\n        }; // Triggers handlers to 'dayClick'\n        // Span has start/end of the clicked area. Only the start is useful.\n\n\n        View.prototype.triggerDayClick = function (footprint, dayEl, ev) {\n          var dateProfile = this.calendar.footprintToDateProfile(footprint); // abuse of \"Event\"DateProfile?\n\n          this.publiclyTrigger('dayClick', {\n            context: dayEl,\n            args: [dateProfile.start, ev, this]\n          });\n        };\n        /* Date Utils\r\n        ------------------------------------------------------------------------------------------------------------------*/\n        // For DateComponent::getDayClasses\n\n\n        View.prototype.isDateInOtherMonth = function (date, dateProfile) {\n          return false;\n        }; // Arguments after name will be forwarded to a hypothetical function value\n        // WARNING: passed-in arguments will be given to generator functions as-is and can cause side-effects.\n        // Always clone your objects if you fear mutation.\n\n\n        View.prototype.getUnzonedRangeOption = function (name) {\n          var val = this.opt(name);\n\n          if (typeof val === 'function') {\n            val = val.apply(null, Array.prototype.slice.call(arguments, 1));\n          }\n\n          if (val) {\n            return this.calendar.parseUnzonedRange(val);\n          }\n        };\n        /* Hidden Days\r\n        ------------------------------------------------------------------------------------------------------------------*/\n        // Initializes internal variables related to calculating hidden days-of-week\n\n\n        View.prototype.initHiddenDays = function () {\n          var hiddenDays = this.opt('hiddenDays') || []; // array of day-of-week indices that are hidden\n\n          var isHiddenDayHash = []; // is the day-of-week hidden? (hash with day-of-week-index -> bool)\n\n          var dayCnt = 0;\n          var i;\n\n          if (this.opt('weekends') === false) {\n            hiddenDays.push(0, 6); // 0=sunday, 6=saturday\n          }\n\n          for (i = 0; i < 7; i++) {\n            if (!(isHiddenDayHash[i] = $.inArray(i, hiddenDays) !== -1)) {\n              dayCnt++;\n            }\n          }\n\n          if (!dayCnt) {\n            throw new Error('invalid hiddenDays'); // all days were hidden? bad.\n          }\n\n          this.isHiddenDayHash = isHiddenDayHash;\n        }; // Remove days from the beginning and end of the range that are computed as hidden.\n        // If the whole range is trimmed off, returns null\n\n\n        View.prototype.trimHiddenDays = function (inputUnzonedRange) {\n          var start = inputUnzonedRange.getStart();\n          var end = inputUnzonedRange.getEnd();\n\n          if (start) {\n            start = this.skipHiddenDays(start);\n          }\n\n          if (end) {\n            end = this.skipHiddenDays(end, -1, true);\n          }\n\n          if (start === null || end === null || start < end) {\n            return new UnzonedRange_1[\"default\"](start, end);\n          }\n\n          return null;\n        }; // Is the current day hidden?\n        // `day` is a day-of-week index (0-6), or a Moment\n\n\n        View.prototype.isHiddenDay = function (day) {\n          if (moment.isMoment(day)) {\n            day = day.day();\n          }\n\n          return this.isHiddenDayHash[day];\n        }; // Incrementing the current day until it is no longer a hidden day, returning a copy.\n        // DOES NOT CONSIDER validUnzonedRange!\n        // If the initial value of `date` is not a hidden day, don't do anything.\n        // Pass `isExclusive` as `true` if you are dealing with an end date.\n        // `inc` defaults to `1` (increment one day forward each time)\n\n\n        View.prototype.skipHiddenDays = function (date, inc, isExclusive) {\n          if (inc === void 0) {\n            inc = 1;\n          }\n\n          if (isExclusive === void 0) {\n            isExclusive = false;\n          }\n\n          var out = date.clone();\n\n          while (this.isHiddenDayHash[(out.day() + (isExclusive ? inc : 0) + 7) % 7]) {\n            out.add(inc, 'days');\n          }\n\n          return out;\n        };\n\n        return View;\n      }(InteractiveDateComponent_1[\"default\"]);\n\n      exports[\"default\"] = View;\n      View.prototype.usesMinMaxTime = false;\n      View.prototype.dateProfileGeneratorClass = DateProfileGenerator_1[\"default\"];\n      View.watch('displayingDates', ['isInDom', 'dateProfile'], function (deps) {\n        this.requestDateRender(deps.dateProfile);\n      }, function () {\n        this.requestDateUnrender();\n      });\n      View.watch('displayingBusinessHours', ['displayingDates', 'businessHourGenerator'], function (deps) {\n        this.requestBusinessHoursRender(deps.businessHourGenerator);\n      }, function () {\n        this.requestBusinessHoursUnrender();\n      });\n      View.watch('initialEvents', ['dateProfile'], function (deps) {\n        return this.fetchInitialEvents(deps.dateProfile);\n      });\n      View.watch('bindingEvents', ['initialEvents'], function (deps) {\n        this.setEvents(deps.initialEvents);\n        this.bindEventChanges();\n      }, function () {\n        this.unbindEventChanges();\n        this.unsetEvents();\n      });\n      View.watch('displayingEvents', ['displayingDates', 'hasEvents'], function () {\n        this.requestEventsRender(this.get('currentEvents'));\n      }, function () {\n        this.requestEventsUnrender();\n      });\n      View.watch('title', ['dateProfile'], function (deps) {\n        return this.title = this.computeTitle(deps.dateProfile); // assign to View for legacy reasons\n      });\n      View.watch('legacyDateProps', ['dateProfile'], function (deps) {\n        var calendar = this.calendar;\n        var dateProfile = deps.dateProfile; // DEPRECATED, but we need to keep it updated...\n\n        this.start = calendar.msToMoment(dateProfile.activeUnzonedRange.startMs, dateProfile.isRangeAllDay);\n        this.end = calendar.msToMoment(dateProfile.activeUnzonedRange.endMs, dateProfile.isRangeAllDay);\n        this.intervalStart = calendar.msToMoment(dateProfile.currentUnzonedRange.startMs, dateProfile.isRangeAllDay);\n        this.intervalEnd = calendar.msToMoment(dateProfile.currentUnzonedRange.endMs, dateProfile.isRangeAllDay);\n      });\n      /***/\n    },\n    /* 44 */\n\n    /***/\n    function (module, exports, __webpack_require__) {\n      Object.defineProperty(exports, \"__esModule\", {\n        value: true\n      });\n\n      var $ = __webpack_require__(3);\n\n      var util_1 = __webpack_require__(4);\n\n      var EventRenderer =\n      /** @class */\n      function () {\n        function EventRenderer(component, fillRenderer) {\n          this.view = component._getView();\n          this.component = component;\n          this.fillRenderer = fillRenderer;\n        }\n\n        EventRenderer.prototype.opt = function (name) {\n          return this.view.opt(name);\n        }; // Updates values that rely on options and also relate to range\n\n\n        EventRenderer.prototype.rangeUpdated = function () {\n          var displayEventTime;\n          var displayEventEnd;\n          this.eventTimeFormat = this.opt('eventTimeFormat') || this.opt('timeFormat') || // deprecated\n          this.computeEventTimeFormat();\n          displayEventTime = this.opt('displayEventTime');\n\n          if (displayEventTime == null) {\n            displayEventTime = this.computeDisplayEventTime(); // might be based off of range\n          }\n\n          displayEventEnd = this.opt('displayEventEnd');\n\n          if (displayEventEnd == null) {\n            displayEventEnd = this.computeDisplayEventEnd(); // might be based off of range\n          }\n\n          this.displayEventTime = displayEventTime;\n          this.displayEventEnd = displayEventEnd;\n        };\n\n        EventRenderer.prototype.render = function (eventsPayload) {\n          var dateProfile = this.component._getDateProfile();\n\n          var eventDefId;\n          var instanceGroup;\n          var eventRanges;\n          var bgRanges = [];\n          var fgRanges = [];\n\n          for (eventDefId in eventsPayload) {\n            instanceGroup = eventsPayload[eventDefId];\n            eventRanges = instanceGroup.sliceRenderRanges(dateProfile.activeUnzonedRange);\n\n            if (instanceGroup.getEventDef().hasBgRendering()) {\n              bgRanges.push.apply(bgRanges, eventRanges);\n            } else {\n              fgRanges.push.apply(fgRanges, eventRanges);\n            }\n          }\n\n          this.renderBgRanges(bgRanges);\n          this.renderFgRanges(fgRanges);\n        };\n\n        EventRenderer.prototype.unrender = function () {\n          this.unrenderBgRanges();\n          this.unrenderFgRanges();\n        };\n\n        EventRenderer.prototype.renderFgRanges = function (eventRanges) {\n          var eventFootprints = this.component.eventRangesToEventFootprints(eventRanges);\n          var segs = this.component.eventFootprintsToSegs(eventFootprints); // render an `.el` on each seg\n          // returns a subset of the segs. segs that were actually rendered\n\n          segs = this.renderFgSegEls(segs);\n\n          if (this.renderFgSegs(segs) !== false) {\n            // no failure?\n            this.fgSegs = segs;\n          }\n        };\n\n        EventRenderer.prototype.unrenderFgRanges = function () {\n          this.unrenderFgSegs(this.fgSegs || []);\n          this.fgSegs = null;\n        };\n\n        EventRenderer.prototype.renderBgRanges = function (eventRanges) {\n          var eventFootprints = this.component.eventRangesToEventFootprints(eventRanges);\n          var segs = this.component.eventFootprintsToSegs(eventFootprints);\n\n          if (this.renderBgSegs(segs) !== false) {\n            // no failure?\n            this.bgSegs = segs;\n          }\n        };\n\n        EventRenderer.prototype.unrenderBgRanges = function () {\n          this.unrenderBgSegs();\n          this.bgSegs = null;\n        };\n\n        EventRenderer.prototype.getSegs = function () {\n          return (this.bgSegs || []).concat(this.fgSegs || []);\n        }; // Renders foreground event segments onto the grid\n\n\n        EventRenderer.prototype.renderFgSegs = function (segs) {\n          // subclasses must implement\n          // segs already has rendered els, and has been filtered.\n          return false; // signal failure if not implemented\n        }; // Unrenders all currently rendered foreground segments\n\n\n        EventRenderer.prototype.unrenderFgSegs = function (segs) {// subclasses must implement\n        };\n\n        EventRenderer.prototype.renderBgSegs = function (segs) {\n          var _this = this;\n\n          if (this.fillRenderer) {\n            this.fillRenderer.renderSegs('bgEvent', segs, {\n              getClasses: function getClasses(seg) {\n                return _this.getBgClasses(seg.footprint.eventDef);\n              },\n              getCss: function getCss(seg) {\n                return {\n                  'background-color': _this.getBgColor(seg.footprint.eventDef)\n                };\n              },\n              filterEl: function filterEl(seg, el) {\n                return _this.filterEventRenderEl(seg.footprint, el);\n              }\n            });\n          } else {\n            return false; // signal failure if no fillRenderer\n          }\n        };\n\n        EventRenderer.prototype.unrenderBgSegs = function () {\n          if (this.fillRenderer) {\n            this.fillRenderer.unrender('bgEvent');\n          }\n        }; // Renders and assigns an `el` property for each foreground event segment.\n        // Only returns segments that successfully rendered.\n\n\n        EventRenderer.prototype.renderFgSegEls = function (segs, disableResizing) {\n          var _this = this;\n\n          if (disableResizing === void 0) {\n            disableResizing = false;\n          }\n\n          var hasEventRenderHandlers = this.view.hasPublicHandlers('eventRender');\n          var html = '';\n          var renderedSegs = [];\n          var i;\n\n          if (segs.length) {\n            // don't build an empty html string\n            // build a large concatenation of event segment HTML\n            for (i = 0; i < segs.length; i++) {\n              this.beforeFgSegHtml(segs[i]);\n              html += this.fgSegHtml(segs[i], disableResizing);\n            } // Grab individual elements from the combined HTML string. Use each as the default rendering.\n            // Then, compute the 'el' for each segment. An el might be null if the eventRender callback returned false.\n\n\n            $(html).each(function (i, node) {\n              var seg = segs[i];\n              var el = $(node);\n\n              if (hasEventRenderHandlers) {\n                // optimization\n                el = _this.filterEventRenderEl(seg.footprint, el);\n              }\n\n              if (el) {\n                el.data('fc-seg', seg); // used by handlers\n\n                seg.el = el;\n                renderedSegs.push(seg);\n              }\n            });\n          }\n\n          return renderedSegs;\n        };\n\n        EventRenderer.prototype.beforeFgSegHtml = function (seg) {}; // Generates the HTML for the default rendering of a foreground event segment. Used by renderFgSegEls()\n\n\n        EventRenderer.prototype.fgSegHtml = function (seg, disableResizing) {// subclasses should implement\n        }; // Generic utility for generating the HTML classNames for an event segment's element\n\n\n        EventRenderer.prototype.getSegClasses = function (seg, isDraggable, isResizable) {\n          var classes = ['fc-event', seg.isStart ? 'fc-start' : 'fc-not-start', seg.isEnd ? 'fc-end' : 'fc-not-end'].concat(this.getClasses(seg.footprint.eventDef));\n\n          if (isDraggable) {\n            classes.push('fc-draggable');\n          }\n\n          if (isResizable) {\n            classes.push('fc-resizable');\n          } // event is currently selected? attach a className.\n\n\n          if (this.view.isEventDefSelected(seg.footprint.eventDef)) {\n            classes.push('fc-selected');\n          }\n\n          return classes;\n        }; // Given an event and the default element used for rendering, returns the element that should actually be used.\n        // Basically runs events and elements through the eventRender hook.\n\n\n        EventRenderer.prototype.filterEventRenderEl = function (eventFootprint, el) {\n          var legacy = eventFootprint.getEventLegacy();\n          var custom = this.view.publiclyTrigger('eventRender', {\n            context: legacy,\n            args: [legacy, el, this.view]\n          });\n\n          if (custom === false) {\n            // means don't render at all\n            el = null;\n          } else if (custom && custom !== true) {\n            el = $(custom);\n          }\n\n          return el;\n        }; // Compute the text that should be displayed on an event's element.\n        // `range` can be the Event object itself, or something range-like, with at least a `start`.\n        // If event times are disabled, or the event has no time, will return a blank string.\n        // If not specified, formatStr will default to the eventTimeFormat setting,\n        // and displayEnd will default to the displayEventEnd setting.\n\n\n        EventRenderer.prototype.getTimeText = function (eventFootprint, formatStr, displayEnd) {\n          return this._getTimeText(eventFootprint.eventInstance.dateProfile.start, eventFootprint.eventInstance.dateProfile.end, eventFootprint.componentFootprint.isAllDay, formatStr, displayEnd);\n        };\n\n        EventRenderer.prototype._getTimeText = function (start, end, isAllDay, formatStr, displayEnd) {\n          if (formatStr == null) {\n            formatStr = this.eventTimeFormat;\n          }\n\n          if (displayEnd == null) {\n            displayEnd = this.displayEventEnd;\n          }\n\n          if (this.displayEventTime && !isAllDay) {\n            if (displayEnd && end) {\n              return this.view.formatRange({\n                start: start,\n                end: end\n              }, false, // allDay\n              formatStr);\n            } else {\n              return start.format(formatStr);\n            }\n          }\n\n          return '';\n        };\n\n        EventRenderer.prototype.computeEventTimeFormat = function () {\n          return this.opt('smallTimeFormat');\n        };\n\n        EventRenderer.prototype.computeDisplayEventTime = function () {\n          return true;\n        };\n\n        EventRenderer.prototype.computeDisplayEventEnd = function () {\n          return true;\n        };\n\n        EventRenderer.prototype.getBgClasses = function (eventDef) {\n          var classNames = this.getClasses(eventDef);\n          classNames.push('fc-bgevent');\n          return classNames;\n        };\n\n        EventRenderer.prototype.getClasses = function (eventDef) {\n          var objs = this.getStylingObjs(eventDef);\n          var i;\n          var classNames = [];\n\n          for (i = 0; i < objs.length; i++) {\n            classNames.push.apply( // append\n            classNames, objs[i].eventClassName || objs[i].className || []);\n          }\n\n          return classNames;\n        }; // Utility for generating event skin-related CSS properties\n\n\n        EventRenderer.prototype.getSkinCss = function (eventDef) {\n          return {\n            'background-color': this.getBgColor(eventDef),\n            'border-color': this.getBorderColor(eventDef),\n            color: this.getTextColor(eventDef)\n          };\n        }; // Queries for caller-specified color, then falls back to default\n\n\n        EventRenderer.prototype.getBgColor = function (eventDef) {\n          var objs = this.getStylingObjs(eventDef);\n          var i;\n          var val;\n\n          for (i = 0; i < objs.length && !val; i++) {\n            val = objs[i].eventBackgroundColor || objs[i].eventColor || objs[i].backgroundColor || objs[i].color;\n          }\n\n          if (!val) {\n            val = this.opt('eventBackgroundColor') || this.opt('eventColor');\n          }\n\n          return val;\n        }; // Queries for caller-specified color, then falls back to default\n\n\n        EventRenderer.prototype.getBorderColor = function (eventDef) {\n          var objs = this.getStylingObjs(eventDef);\n          var i;\n          var val;\n\n          for (i = 0; i < objs.length && !val; i++) {\n            val = objs[i].eventBorderColor || objs[i].eventColor || objs[i].borderColor || objs[i].color;\n          }\n\n          if (!val) {\n            val = this.opt('eventBorderColor') || this.opt('eventColor');\n          }\n\n          return val;\n        }; // Queries for caller-specified color, then falls back to default\n\n\n        EventRenderer.prototype.getTextColor = function (eventDef) {\n          var objs = this.getStylingObjs(eventDef);\n          var i;\n          var val;\n\n          for (i = 0; i < objs.length && !val; i++) {\n            val = objs[i].eventTextColor || objs[i].textColor;\n          }\n\n          if (!val) {\n            val = this.opt('eventTextColor');\n          }\n\n          return val;\n        };\n\n        EventRenderer.prototype.getStylingObjs = function (eventDef) {\n          var objs = this.getFallbackStylingObjs(eventDef);\n          objs.unshift(eventDef);\n          return objs;\n        };\n\n        EventRenderer.prototype.getFallbackStylingObjs = function (eventDef) {\n          return [eventDef.source];\n        };\n\n        EventRenderer.prototype.sortEventSegs = function (segs) {\n          segs.sort(util_1.proxy(this, 'compareEventSegs'));\n        }; // A cmp function for determining which segments should take visual priority\n\n\n        EventRenderer.prototype.compareEventSegs = function (seg1, seg2) {\n          var f1 = seg1.footprint;\n          var f2 = seg2.footprint;\n          var cf1 = f1.componentFootprint;\n          var cf2 = f2.componentFootprint;\n          var r1 = cf1.unzonedRange;\n          var r2 = cf2.unzonedRange;\n          return r1.startMs - r2.startMs || // earlier events go first\n          r2.endMs - r2.startMs - (r1.endMs - r1.startMs) || // tie? longer events go first\n          cf2.isAllDay - cf1.isAllDay || // tie? put all-day events first (booleans cast to 0/1)\n          util_1.compareByFieldSpecs(f1.eventDef, f2.eventDef, this.view.eventOrderSpecs, f1.eventDef.miscProps, f2.eventDef.miscProps);\n        };\n\n        return EventRenderer;\n      }();\n\n      exports[\"default\"] = EventRenderer;\n      /***/\n    },,,,,\n    /* 45 */\n\n    /* 46 */\n\n    /* 47 */\n\n    /* 48 */\n\n    /* 49 */\n\n    /***/\n    function (module, exports, __webpack_require__) {\n      Object.defineProperty(exports, \"__esModule\", {\n        value: true\n      });\n\n      var moment_ext_1 = __webpack_require__(11); // Plugin\n      // -------------------------------------------------------------------------------------------------\n\n\n      moment_ext_1.newMomentProto.format = function () {\n        if (this._fullCalendar && arguments[0]) {\n          // an enhanced moment? and a format string provided?\n          return formatDate(this, arguments[0]); // our extended formatting\n        }\n\n        if (this._ambigTime) {\n          return moment_ext_1.oldMomentFormat(englishMoment(this), 'YYYY-MM-DD');\n        }\n\n        if (this._ambigZone) {\n          return moment_ext_1.oldMomentFormat(englishMoment(this), 'YYYY-MM-DD[T]HH:mm:ss');\n        }\n\n        if (this._fullCalendar) {\n          // enhanced non-ambig moment?\n          // moment.format() doesn't ensure english, but we want to.\n          return moment_ext_1.oldMomentFormat(englishMoment(this));\n        }\n\n        return moment_ext_1.oldMomentProto.format.apply(this, arguments);\n      };\n\n      moment_ext_1.newMomentProto.toISOString = function () {\n        if (this._ambigTime) {\n          return moment_ext_1.oldMomentFormat(englishMoment(this), 'YYYY-MM-DD');\n        }\n\n        if (this._ambigZone) {\n          return moment_ext_1.oldMomentFormat(englishMoment(this), 'YYYY-MM-DD[T]HH:mm:ss');\n        }\n\n        if (this._fullCalendar) {\n          // enhanced non-ambig moment?\n          // depending on browser, moment might not output english. ensure english.\n          // https://github.com/moment/moment/blob/2.18.1/src/lib/moment/format.js#L22\n          return moment_ext_1.oldMomentProto.toISOString.apply(englishMoment(this), arguments);\n        }\n\n        return moment_ext_1.oldMomentProto.toISOString.apply(this, arguments);\n      };\n\n      function englishMoment(mom) {\n        if (mom.locale() !== 'en') {\n          return mom.clone().locale('en');\n        }\n\n        return mom;\n      } // Config\n      // ---------------------------------------------------------------------------------------------------------------------\n\n      /*\r\n      Inserted between chunks in the fake (\"intermediate\") formatting string.\r\n      Important that it passes as whitespace (\\s) because moment often identifies non-standalone months\r\n      via a regexp with an \\s.\r\n      */\n\n\n      var PART_SEPARATOR = \"\\x0B\"; // vertical tab\n\n      /*\r\n      Inserted as the first character of a literal-text chunk to indicate that the literal text is not actually literal text,\r\n      but rather, a \"special\" token that has custom rendering (see specialTokens map).\r\n      */\n\n      var SPECIAL_TOKEN_MARKER = \"\\x1F\"; // information separator 1\n\n      /*\r\n      Inserted at the beginning and end of a span of text that must have non-zero numeric characters.\r\n      Handling of these markers is done in a post-processing step at the very end of text rendering.\r\n      */\n\n      var MAYBE_MARKER = \"\\x1E\"; // information separator 2\n\n      var MAYBE_REGEXP = new RegExp(MAYBE_MARKER + '([^' + MAYBE_MARKER + ']*)' + MAYBE_MARKER, 'g'); // must be global\n\n      /*\r\n      Addition formatting tokens we want recognized\r\n      */\n\n      var specialTokens = {\n        t: function t(date) {\n          return moment_ext_1.oldMomentFormat(date, 'a').charAt(0);\n        },\n        T: function T(date) {\n          return moment_ext_1.oldMomentFormat(date, 'A').charAt(0);\n        }\n      };\n      /*\r\n      The first characters of formatting tokens for units that are 1 day or larger.\r\n      `value` is for ranking relative size (lower means bigger).\r\n      `unit` is a normalized unit, used for comparing moments.\r\n      */\n\n      var largeTokenMap = {\n        Y: {\n          value: 1,\n          unit: 'year'\n        },\n        M: {\n          value: 2,\n          unit: 'month'\n        },\n        W: {\n          value: 3,\n          unit: 'week'\n        },\n        w: {\n          value: 3,\n          unit: 'week'\n        },\n        D: {\n          value: 4,\n          unit: 'day'\n        },\n        d: {\n          value: 4,\n          unit: 'day' // day of week\n\n        }\n      }; // Single Date Formatting\n      // ---------------------------------------------------------------------------------------------------------------------\n\n      /*\r\n      Formats `date` with a Moment formatting string, but allow our non-zero areas and special token\r\n      */\n\n      function formatDate(date, formatStr) {\n        return renderFakeFormatString(getParsedFormatString(formatStr).fakeFormatString, date);\n      }\n\n      exports.formatDate = formatDate; // Date Range Formatting\n      // -------------------------------------------------------------------------------------------------\n      // TODO: make it work with timezone offset\n\n      /*\r\n      Using a formatting string meant for a single date, generate a range string, like\r\n      \"Sep 2 - 9 2013\", that intelligently inserts a separator where the dates differ.\r\n      If the dates are the same as far as the format string is concerned, just return a single\r\n      rendering of one date, without any separator.\r\n      */\n\n      function formatRange(date1, date2, formatStr, separator, isRTL) {\n        var localeData;\n        date1 = moment_ext_1[\"default\"].parseZone(date1);\n        date2 = moment_ext_1[\"default\"].parseZone(date2);\n        localeData = date1.localeData(); // Expand localized format strings, like \"LL\" -> \"MMMM D YYYY\".\n        // BTW, this is not important for `formatDate` because it is impossible to put custom tokens\n        // or non-zero areas in Moment's localized format strings.\n\n        formatStr = localeData.longDateFormat(formatStr) || formatStr;\n        return renderParsedFormat(getParsedFormatString(formatStr), date1, date2, separator || ' - ', isRTL);\n      }\n\n      exports.formatRange = formatRange;\n      /*\r\n      Renders a range with an already-parsed format string.\r\n      */\n\n      function renderParsedFormat(parsedFormat, date1, date2, separator, isRTL) {\n        var sameUnits = parsedFormat.sameUnits;\n        var unzonedDate1 = date1.clone().stripZone(); // for same-unit comparisons\n\n        var unzonedDate2 = date2.clone().stripZone(); // \"\n\n        var renderedParts1 = renderFakeFormatStringParts(parsedFormat.fakeFormatString, date1);\n        var renderedParts2 = renderFakeFormatStringParts(parsedFormat.fakeFormatString, date2);\n        var leftI;\n        var leftStr = '';\n        var rightI;\n        var rightStr = '';\n        var middleI;\n        var middleStr1 = '';\n        var middleStr2 = '';\n        var middleStr = ''; // Start at the leftmost side of the formatting string and continue until you hit a token\n        // that is not the same between dates.\n\n        for (leftI = 0; leftI < sameUnits.length && (!sameUnits[leftI] || unzonedDate1.isSame(unzonedDate2, sameUnits[leftI])); leftI++) {\n          leftStr += renderedParts1[leftI];\n        } // Similarly, start at the rightmost side of the formatting string and move left\n\n\n        for (rightI = sameUnits.length - 1; rightI > leftI && (!sameUnits[rightI] || unzonedDate1.isSame(unzonedDate2, sameUnits[rightI])); rightI--) {\n          // If current chunk is on the boundary of unique date-content, and is a special-case\n          // date-formatting postfix character, then don't consume it. Consider it unique date-content.\n          // TODO: make configurable\n          if (rightI - 1 === leftI && renderedParts1[rightI] === '.') {\n            break;\n          }\n\n          rightStr = renderedParts1[rightI] + rightStr;\n        } // The area in the middle is different for both of the dates.\n        // Collect them distinctly so we can jam them together later.\n\n\n        for (middleI = leftI; middleI <= rightI; middleI++) {\n          middleStr1 += renderedParts1[middleI];\n          middleStr2 += renderedParts2[middleI];\n        }\n\n        if (middleStr1 || middleStr2) {\n          if (isRTL) {\n            middleStr = middleStr2 + separator + middleStr1;\n          } else {\n            middleStr = middleStr1 + separator + middleStr2;\n          }\n        }\n\n        return processMaybeMarkers(leftStr + middleStr + rightStr);\n      } // Format String Parsing\n      // ---------------------------------------------------------------------------------------------------------------------\n\n\n      var parsedFormatStrCache = {};\n      /*\r\n      Returns a parsed format string, leveraging a cache.\r\n      */\n\n      function getParsedFormatString(formatStr) {\n        return parsedFormatStrCache[formatStr] || (parsedFormatStrCache[formatStr] = parseFormatString(formatStr));\n      }\n      /*\r\n      Parses a format string into the following:\r\n      - fakeFormatString: a momentJS formatting string, littered with special control characters that get post-processed.\r\n      - sameUnits: for every part in fakeFormatString, if the part is a token, the value will be a unit string (like \"day\"),\r\n        that indicates how similar a range's start & end must be in order to share the same formatted text.\r\n        If not a token, then the value is null.\r\n        Always a flat array (not nested liked \"chunks\").\r\n      */\n\n\n      function parseFormatString(formatStr) {\n        var chunks = chunkFormatString(formatStr);\n        return {\n          fakeFormatString: buildFakeFormatString(chunks),\n          sameUnits: buildSameUnits(chunks)\n        };\n      }\n      /*\r\n      Break the formatting string into an array of chunks.\r\n      A 'maybe' chunk will have nested chunks.\r\n      */\n\n\n      function chunkFormatString(formatStr) {\n        var chunks = [];\n        var match; // TODO: more descrimination\n        // \\4 is a backreference to the first character of a multi-character set.\n\n        var chunker = /\\[([^\\]]*)\\]|\\(([^\\)]*)\\)|(LTS|LT|(\\w)\\4*o?)|([^\\w\\[\\(]+)/g;\n\n        while (match = chunker.exec(formatStr)) {\n          if (match[1]) {\n            // a literal string inside [ ... ]\n            chunks.push.apply(chunks, // append\n            splitStringLiteral(match[1]));\n          } else if (match[2]) {\n            // non-zero formatting inside ( ... )\n            chunks.push({\n              maybe: chunkFormatString(match[2])\n            });\n          } else if (match[3]) {\n            // a formatting token\n            chunks.push({\n              token: match[3]\n            });\n          } else if (match[5]) {\n            // an unenclosed literal string\n            chunks.push.apply(chunks, // append\n            splitStringLiteral(match[5]));\n          }\n        }\n\n        return chunks;\n      }\n      /*\r\n      Potentially splits a literal-text string into multiple parts. For special cases.\r\n      */\n\n\n      function splitStringLiteral(s) {\n        if (s === '. ') {\n          return ['.', ' ']; // for locales with periods bound to the end of each year/month/date\n        } else {\n          return [s];\n        }\n      }\n      /*\r\n      Given chunks parsed from a real format string, generate a fake (aka \"intermediate\") format string with special control\r\n      characters that will eventually be given to moment for formatting, and then post-processed.\r\n      */\n\n\n      function buildFakeFormatString(chunks) {\n        var parts = [];\n        var i;\n        var chunk;\n\n        for (i = 0; i < chunks.length; i++) {\n          chunk = chunks[i];\n\n          if (typeof chunk === 'string') {\n            parts.push('[' + chunk + ']');\n          } else if (chunk.token) {\n            if (chunk.token in specialTokens) {\n              parts.push(SPECIAL_TOKEN_MARKER + // useful during post-processing\n              '[' + chunk.token + ']' // preserve as literal text\n              );\n            } else {\n              parts.push(chunk.token); // unprotected text implies a format string\n            }\n          } else if (chunk.maybe) {\n            parts.push(MAYBE_MARKER + // useful during post-processing\n            buildFakeFormatString(chunk.maybe) + MAYBE_MARKER);\n          }\n        }\n\n        return parts.join(PART_SEPARATOR);\n      }\n      /*\r\n      Given parsed chunks from a real formatting string, generates an array of unit strings (like \"day\") that indicate\r\n      in which regard two dates must be similar in order to share range formatting text.\r\n      The `chunks` can be nested (because of \"maybe\" chunks), however, the returned array will be flat.\r\n      */\n\n\n      function buildSameUnits(chunks) {\n        var units = [];\n        var i;\n        var chunk;\n        var tokenInfo;\n\n        for (i = 0; i < chunks.length; i++) {\n          chunk = chunks[i];\n\n          if (chunk.token) {\n            tokenInfo = largeTokenMap[chunk.token.charAt(0)];\n            units.push(tokenInfo ? tokenInfo.unit : 'second'); // default to a very strict same-second\n          } else if (chunk.maybe) {\n            units.push.apply(units, // append\n            buildSameUnits(chunk.maybe));\n          } else {\n            units.push(null);\n          }\n        }\n\n        return units;\n      } // Rendering to text\n      // ---------------------------------------------------------------------------------------------------------------------\n\n      /*\r\n      Formats a date with a fake format string, post-processes the control characters, then returns.\r\n      */\n\n\n      function renderFakeFormatString(fakeFormatString, date) {\n        return processMaybeMarkers(renderFakeFormatStringParts(fakeFormatString, date).join(''));\n      }\n      /*\r\n      Formats a date into parts that will have been post-processed, EXCEPT for the \"maybe\" markers.\r\n      */\n\n\n      function renderFakeFormatStringParts(fakeFormatString, date) {\n        var parts = [];\n        var fakeRender = moment_ext_1.oldMomentFormat(date, fakeFormatString);\n        var fakeParts = fakeRender.split(PART_SEPARATOR);\n        var i;\n        var fakePart;\n\n        for (i = 0; i < fakeParts.length; i++) {\n          fakePart = fakeParts[i];\n\n          if (fakePart.charAt(0) === SPECIAL_TOKEN_MARKER) {\n            parts.push( // the literal string IS the token's name.\n            // call special token's registered function.\n            specialTokens[fakePart.substring(1)](date));\n          } else {\n            parts.push(fakePart);\n          }\n        }\n\n        return parts;\n      }\n      /*\r\n      Accepts an almost-finally-formatted string and processes the \"maybe\" control characters, returning a new string.\r\n      */\n\n\n      function processMaybeMarkers(s) {\n        return s.replace(MAYBE_REGEXP, function (m0, m1) {\n          if (m1.match(/[1-9]/)) {\n            // any non-zero numeric characters?\n            return m1;\n          } else {\n            return '';\n          }\n        });\n      } // Misc Utils\n      // -------------------------------------------------------------------------------------------------\n\n      /*\r\n      Returns a unit string, either 'year', 'month', 'day', or null for the most granular formatting token in the string.\r\n      */\n\n\n      function queryMostGranularFormatUnit(formatStr) {\n        var chunks = chunkFormatString(formatStr);\n        var i;\n        var chunk;\n        var candidate;\n        var best;\n\n        for (i = 0; i < chunks.length; i++) {\n          chunk = chunks[i];\n\n          if (chunk.token) {\n            candidate = largeTokenMap[chunk.token.charAt(0)];\n\n            if (candidate) {\n              if (!best || candidate.value > best.value) {\n                best = candidate;\n              }\n            }\n          }\n        }\n\n        if (best) {\n          return best.unit;\n        }\n\n        return null;\n      }\n\n      exports.queryMostGranularFormatUnit = queryMostGranularFormatUnit;\n      /***/\n    },\n    /* 50 */\n\n    /***/\n    function (module, exports) {\n      Object.defineProperty(exports, \"__esModule\", {\n        value: true\n      });\n\n      var EventRange =\n      /** @class */\n      function () {\n        function EventRange(unzonedRange, eventDef, eventInstance) {\n          this.unzonedRange = unzonedRange;\n          this.eventDef = eventDef;\n\n          if (eventInstance) {\n            this.eventInstance = eventInstance;\n          }\n        }\n\n        return EventRange;\n      }();\n\n      exports[\"default\"] = EventRange;\n      /***/\n    },\n    /* 51 */\n\n    /***/\n    function (module, exports, __webpack_require__) {\n      Object.defineProperty(exports, \"__esModule\", {\n        value: true\n      });\n\n      var tslib_1 = __webpack_require__(2);\n\n      var Class_1 = __webpack_require__(35);\n\n      var EmitterMixin_1 = __webpack_require__(13);\n\n      var ListenerMixin_1 = __webpack_require__(7);\n\n      var Model =\n      /** @class */\n      function (_super) {\n        tslib_1.__extends(Model, _super);\n\n        function Model() {\n          var _this = _super.call(this) || this;\n\n          _this._watchers = {};\n          _this._props = {};\n\n          _this.applyGlobalWatchers();\n\n          _this.constructed();\n\n          return _this;\n        }\n\n        Model.watch = function (name) {\n          var args = [];\n\n          for (var _i = 1; _i < arguments.length; _i++) {\n            args[_i - 1] = arguments[_i];\n          } // subclasses should make a masked-copy of the superclass's map\n          // TODO: write test\n\n\n          if (!this.prototype.hasOwnProperty('_globalWatchArgs')) {\n            this.prototype._globalWatchArgs = Object.create(this.prototype._globalWatchArgs);\n          }\n\n          this.prototype._globalWatchArgs[name] = args;\n        };\n\n        Model.prototype.constructed = function () {// useful for monkeypatching. TODO: BaseClass?\n        };\n\n        Model.prototype.applyGlobalWatchers = function () {\n          var map = this._globalWatchArgs;\n          var name;\n\n          for (name in map) {\n            this.watch.apply(this, [name].concat(map[name]));\n          }\n        };\n\n        Model.prototype.has = function (name) {\n          return name in this._props;\n        };\n\n        Model.prototype.get = function (name) {\n          if (name === undefined) {\n            return this._props;\n          }\n\n          return this._props[name];\n        };\n\n        Model.prototype.set = function (name, val) {\n          var newProps;\n\n          if (typeof name === 'string') {\n            newProps = {};\n            newProps[name] = val === undefined ? null : val;\n          } else {\n            newProps = name;\n          }\n\n          this.setProps(newProps);\n        };\n\n        Model.prototype.reset = function (newProps) {\n          var oldProps = this._props;\n          var changeset = {}; // will have undefined's to signal unsets\n\n          var name;\n\n          for (name in oldProps) {\n            changeset[name] = undefined;\n          }\n\n          for (name in newProps) {\n            changeset[name] = newProps[name];\n          }\n\n          this.setProps(changeset);\n        };\n\n        Model.prototype.unset = function (name) {\n          var newProps = {};\n          var names;\n          var i;\n\n          if (typeof name === 'string') {\n            names = [name];\n          } else {\n            names = name;\n          }\n\n          for (i = 0; i < names.length; i++) {\n            newProps[names[i]] = undefined;\n          }\n\n          this.setProps(newProps);\n        };\n\n        Model.prototype.setProps = function (newProps) {\n          var changedProps = {};\n          var changedCnt = 0;\n          var name;\n          var val;\n\n          for (name in newProps) {\n            val = newProps[name]; // a change in value?\n            // if an object, don't check equality, because might have been mutated internally.\n            // TODO: eventually enforce immutability.\n\n            if (_typeof(val) === 'object' || val !== this._props[name]) {\n              changedProps[name] = val;\n              changedCnt++;\n            }\n          }\n\n          if (changedCnt) {\n            this.trigger('before:batchChange', changedProps);\n\n            for (name in changedProps) {\n              val = changedProps[name];\n              this.trigger('before:change', name, val);\n              this.trigger('before:change:' + name, val);\n            }\n\n            for (name in changedProps) {\n              val = changedProps[name];\n\n              if (val === undefined) {\n                delete this._props[name];\n              } else {\n                this._props[name] = val;\n              }\n\n              this.trigger('change:' + name, val);\n              this.trigger('change', name, val);\n            }\n\n            this.trigger('batchChange', changedProps);\n          }\n        };\n\n        Model.prototype.watch = function (name, depList, startFunc, stopFunc) {\n          var _this = this;\n\n          this.unwatch(name);\n          this._watchers[name] = this._watchDeps(depList, function (deps) {\n            var res = startFunc.call(_this, deps);\n\n            if (res && res.then) {\n              _this.unset(name); // put in an unset state while resolving\n\n\n              res.then(function (val) {\n                _this.set(name, val);\n              });\n            } else {\n              _this.set(name, res);\n            }\n          }, function (deps) {\n            _this.unset(name);\n\n            if (stopFunc) {\n              stopFunc.call(_this, deps);\n            }\n          });\n        };\n\n        Model.prototype.unwatch = function (name) {\n          var watcher = this._watchers[name];\n\n          if (watcher) {\n            delete this._watchers[name];\n            watcher.teardown();\n          }\n        };\n\n        Model.prototype._watchDeps = function (depList, startFunc, stopFunc) {\n          var _this = this;\n\n          var queuedChangeCnt = 0;\n          var depCnt = depList.length;\n          var satisfyCnt = 0;\n          var values = {}; // what's passed as the `deps` arguments\n\n          var bindTuples = []; // array of [ eventName, handlerFunc ] arrays\n\n          var isCallingStop = false;\n\n          var onBeforeDepChange = function onBeforeDepChange(depName, val, isOptional) {\n            queuedChangeCnt++;\n\n            if (queuedChangeCnt === 1) {\n              // first change to cause a \"stop\" ?\n              if (satisfyCnt === depCnt) {\n                // all deps previously satisfied?\n                isCallingStop = true;\n                stopFunc(values);\n                isCallingStop = false;\n              }\n            }\n          };\n\n          var onDepChange = function onDepChange(depName, val, isOptional) {\n            if (val === undefined) {\n              // unsetting a value?\n              // required dependency that was previously set?\n              if (!isOptional && values[depName] !== undefined) {\n                satisfyCnt--;\n              }\n\n              delete values[depName];\n            } else {\n              // setting a value?\n              // required dependency that was previously unset?\n              if (!isOptional && values[depName] === undefined) {\n                satisfyCnt++;\n              }\n\n              values[depName] = val;\n            }\n\n            queuedChangeCnt--;\n\n            if (!queuedChangeCnt) {\n              // last change to cause a \"start\"?\n              // now finally satisfied or satisfied all along?\n              if (satisfyCnt === depCnt) {\n                // if the stopFunc initiated another value change, ignore it.\n                // it will be processed by another change event anyway.\n                if (!isCallingStop) {\n                  startFunc(values);\n                }\n              }\n            }\n          }; // intercept for .on() that remembers handlers\n\n\n          var bind = function bind(eventName, handler) {\n            _this.on(eventName, handler);\n\n            bindTuples.push([eventName, handler]);\n          }; // listen to dependency changes\n\n\n          depList.forEach(function (depName) {\n            var isOptional = false;\n\n            if (depName.charAt(0) === '?') {\n              // TODO: more DRY\n              depName = depName.substring(1);\n              isOptional = true;\n            }\n\n            bind('before:change:' + depName, function (val) {\n              onBeforeDepChange(depName, val, isOptional);\n            });\n            bind('change:' + depName, function (val) {\n              onDepChange(depName, val, isOptional);\n            });\n          }); // process current dependency values\n\n          depList.forEach(function (depName) {\n            var isOptional = false;\n\n            if (depName.charAt(0) === '?') {\n              // TODO: more DRY\n              depName = depName.substring(1);\n              isOptional = true;\n            }\n\n            if (_this.has(depName)) {\n              values[depName] = _this.get(depName);\n              satisfyCnt++;\n            } else if (isOptional) {\n              satisfyCnt++;\n            }\n          }); // initially satisfied\n\n          if (satisfyCnt === depCnt) {\n            startFunc(values);\n          }\n\n          return {\n            teardown: function teardown() {\n              // remove all handlers\n              for (var i = 0; i < bindTuples.length; i++) {\n                _this.off(bindTuples[i][0], bindTuples[i][1]);\n              }\n\n              bindTuples = null; // was satisfied, so call stopFunc\n\n              if (satisfyCnt === depCnt) {\n                stopFunc();\n              }\n            },\n            flash: function flash() {\n              if (satisfyCnt === depCnt) {\n                stopFunc();\n                startFunc(values);\n              }\n            }\n          };\n        };\n\n        Model.prototype.flash = function (name) {\n          var watcher = this._watchers[name];\n\n          if (watcher) {\n            watcher.flash();\n          }\n        };\n\n        return Model;\n      }(Class_1[\"default\"]);\n\n      exports[\"default\"] = Model;\n      Model.prototype._globalWatchArgs = {}; // mutation protection in Model.watch\n\n      EmitterMixin_1[\"default\"].mixInto(Model);\n      ListenerMixin_1[\"default\"].mixInto(Model);\n      /***/\n    },\n    /* 52 */\n\n    /***/\n    function (module, exports, __webpack_require__) {\n      /*\r\n      USAGE:\r\n        import { default as ParsableModelMixin, ParsableModelInterface } from './ParsableModelMixin'\r\n      in class:\r\n        applyProps: ParsableModelInterface['applyProps']\r\n        applyManualStandardProps: ParsableModelInterface['applyManualStandardProps']\r\n        applyMiscProps: ParsableModelInterface['applyMiscProps']\r\n        isStandardProp: ParsableModelInterface['isStandardProp']\r\n        static defineStandardProps = ParsableModelMixin.defineStandardProps\r\n        static copyVerbatimStandardProps = ParsableModelMixin.copyVerbatimStandardProps\r\n      after class:\r\n        ParsableModelMixin.mixInto(TheClass)\r\n      */\n      Object.defineProperty(exports, \"__esModule\", {\n        value: true\n      });\n\n      var tslib_1 = __webpack_require__(2);\n\n      var util_1 = __webpack_require__(4);\n\n      var Mixin_1 = __webpack_require__(15);\n\n      var ParsableModelMixin =\n      /** @class */\n      function (_super) {\n        tslib_1.__extends(ParsableModelMixin, _super);\n\n        function ParsableModelMixin() {\n          return _super !== null && _super.apply(this, arguments) || this;\n        }\n\n        ParsableModelMixin.defineStandardProps = function (propDefs) {\n          var proto = this.prototype;\n\n          if (!proto.hasOwnProperty('standardPropMap')) {\n            proto.standardPropMap = Object.create(proto.standardPropMap);\n          }\n\n          util_1.copyOwnProps(propDefs, proto.standardPropMap);\n        };\n\n        ParsableModelMixin.copyVerbatimStandardProps = function (src, dest) {\n          var map = this.prototype.standardPropMap;\n          var propName;\n\n          for (propName in map) {\n            if (src[propName] != null && // in the src object?\n            map[propName] === true // false means \"copy verbatim\"\n            ) {\n                dest[propName] = src[propName];\n              }\n          }\n        };\n        /*\r\n        Returns true/false for success.\r\n        Meant to be only called ONCE, at object creation.\r\n        */\n\n\n        ParsableModelMixin.prototype.applyProps = function (rawProps) {\n          var standardPropMap = this.standardPropMap;\n          var manualProps = {};\n          var miscProps = {};\n          var propName;\n\n          for (propName in rawProps) {\n            if (standardPropMap[propName] === true) {\n              // copy verbatim\n              this[propName] = rawProps[propName];\n            } else if (standardPropMap[propName] === false) {\n              manualProps[propName] = rawProps[propName];\n            } else {\n              miscProps[propName] = rawProps[propName];\n            }\n          }\n\n          this.applyMiscProps(miscProps);\n          return this.applyManualStandardProps(manualProps);\n        };\n        /*\r\n        If subclasses override, they must call this supermethod and return the boolean response.\r\n        Meant to be only called ONCE, at object creation.\r\n        */\n\n\n        ParsableModelMixin.prototype.applyManualStandardProps = function (rawProps) {\n          return true;\n        };\n        /*\r\n        Can be called even after initial object creation.\r\n        */\n\n\n        ParsableModelMixin.prototype.applyMiscProps = function (rawProps) {// subclasses can implement\n        };\n        /*\r\n        TODO: why is this a method when defineStandardProps is static\r\n        */\n\n\n        ParsableModelMixin.prototype.isStandardProp = function (propName) {\n          return propName in this.standardPropMap;\n        };\n\n        return ParsableModelMixin;\n      }(Mixin_1[\"default\"]);\n\n      exports[\"default\"] = ParsableModelMixin;\n      ParsableModelMixin.prototype.standardPropMap = {}; // will be cloned by defineStandardProps\n\n      /***/\n    },\n    /* 53 */\n\n    /***/\n    function (module, exports) {\n      Object.defineProperty(exports, \"__esModule\", {\n        value: true\n      });\n\n      var EventInstance =\n      /** @class */\n      function () {\n        function EventInstance(def, dateProfile) {\n          this.def = def;\n          this.dateProfile = dateProfile;\n        }\n\n        EventInstance.prototype.toLegacy = function () {\n          var dateProfile = this.dateProfile;\n          var obj = this.def.toLegacy();\n          obj.start = dateProfile.start.clone();\n          obj.end = dateProfile.end ? dateProfile.end.clone() : null;\n          return obj;\n        };\n\n        return EventInstance;\n      }();\n\n      exports[\"default\"] = EventInstance;\n      /***/\n    },\n    /* 54 */\n\n    /***/\n    function (module, exports, __webpack_require__) {\n      Object.defineProperty(exports, \"__esModule\", {\n        value: true\n      });\n\n      var tslib_1 = __webpack_require__(2);\n\n      var $ = __webpack_require__(3);\n\n      var moment = __webpack_require__(0);\n\n      var EventDef_1 = __webpack_require__(37);\n\n      var EventInstance_1 = __webpack_require__(53);\n\n      var EventDateProfile_1 = __webpack_require__(16);\n\n      var RecurringEventDef =\n      /** @class */\n      function (_super) {\n        tslib_1.__extends(RecurringEventDef, _super);\n\n        function RecurringEventDef() {\n          return _super !== null && _super.apply(this, arguments) || this;\n        }\n\n        RecurringEventDef.prototype.isAllDay = function () {\n          return !this.startTime && !this.endTime;\n        };\n\n        RecurringEventDef.prototype.buildInstances = function (unzonedRange) {\n          var calendar = this.source.calendar;\n          var unzonedDate = unzonedRange.getStart();\n          var unzonedEnd = unzonedRange.getEnd();\n          var zonedDayStart;\n          var instanceStart;\n          var instanceEnd;\n          var instances = [];\n\n          while (unzonedDate.isBefore(unzonedEnd)) {\n            // if everyday, or this particular day-of-week\n            if (!this.dowHash || this.dowHash[unzonedDate.day()]) {\n              zonedDayStart = calendar.applyTimezone(unzonedDate);\n              instanceStart = zonedDayStart.clone();\n              instanceEnd = null;\n\n              if (this.startTime) {\n                instanceStart.time(this.startTime);\n              } else {\n                instanceStart.stripTime();\n              }\n\n              if (this.endTime) {\n                instanceEnd = zonedDayStart.clone().time(this.endTime);\n              }\n\n              instances.push(new EventInstance_1[\"default\"](this, // definition\n              new EventDateProfile_1[\"default\"](instanceStart, instanceEnd, calendar)));\n            }\n\n            unzonedDate.add(1, 'days');\n          }\n\n          return instances;\n        };\n\n        RecurringEventDef.prototype.setDow = function (dowNumbers) {\n          if (!this.dowHash) {\n            this.dowHash = {};\n          }\n\n          for (var i = 0; i < dowNumbers.length; i++) {\n            this.dowHash[dowNumbers[i]] = true;\n          }\n        };\n\n        RecurringEventDef.prototype.clone = function () {\n          var def = _super.prototype.clone.call(this);\n\n          if (def.startTime) {\n            def.startTime = moment.duration(this.startTime);\n          }\n\n          if (def.endTime) {\n            def.endTime = moment.duration(this.endTime);\n          }\n\n          if (this.dowHash) {\n            def.dowHash = $.extend({}, this.dowHash);\n          }\n\n          return def;\n        };\n\n        return RecurringEventDef;\n      }(EventDef_1[\"default\"]);\n\n      exports[\"default\"] = RecurringEventDef;\n      /*\r\n      HACK to work with TypeScript mixins\r\n      NOTE: if super-method fails, should still attempt to apply\r\n      */\n\n      RecurringEventDef.prototype.applyProps = function (rawProps) {\n        var superSuccess = EventDef_1[\"default\"].prototype.applyProps.call(this, rawProps);\n\n        if (rawProps.start) {\n          this.startTime = moment.duration(rawProps.start);\n        }\n\n        if (rawProps.end) {\n          this.endTime = moment.duration(rawProps.end);\n        }\n\n        if (rawProps.dow) {\n          this.setDow(rawProps.dow);\n        }\n\n        return superSuccess;\n      }; // Parsing\n      // ---------------------------------------------------------------------------------------------------------------------\n\n\n      RecurringEventDef.defineStandardProps({\n        start: false,\n        end: false,\n        dow: false\n      });\n      /***/\n    },\n    /* 55 */\n\n    /***/\n    function (module, exports, __webpack_require__) {\n      Object.defineProperty(exports, \"__esModule\", {\n        value: true\n      });\n\n      var moment = __webpack_require__(0);\n\n      var util_1 = __webpack_require__(4);\n\n      var UnzonedRange_1 = __webpack_require__(5);\n\n      var DateProfileGenerator =\n      /** @class */\n      function () {\n        function DateProfileGenerator(_view) {\n          this._view = _view;\n        }\n\n        DateProfileGenerator.prototype.opt = function (name) {\n          return this._view.opt(name);\n        };\n\n        DateProfileGenerator.prototype.trimHiddenDays = function (unzonedRange) {\n          return this._view.trimHiddenDays(unzonedRange);\n        };\n\n        DateProfileGenerator.prototype.msToUtcMoment = function (ms, forceAllDay) {\n          return this._view.calendar.msToUtcMoment(ms, forceAllDay);\n        };\n        /* Date Range Computation\r\n        ------------------------------------------------------------------------------------------------------------------*/\n        // Builds a structure with info about what the dates/ranges will be for the \"prev\" view.\n\n\n        DateProfileGenerator.prototype.buildPrev = function (currentDateProfile) {\n          var prevDate = currentDateProfile.date.clone().startOf(currentDateProfile.currentRangeUnit).subtract(currentDateProfile.dateIncrement);\n          return this.build(prevDate, -1);\n        }; // Builds a structure with info about what the dates/ranges will be for the \"next\" view.\n\n\n        DateProfileGenerator.prototype.buildNext = function (currentDateProfile) {\n          var nextDate = currentDateProfile.date.clone().startOf(currentDateProfile.currentRangeUnit).add(currentDateProfile.dateIncrement);\n          return this.build(nextDate, 1);\n        }; // Builds a structure holding dates/ranges for rendering around the given date.\n        // Optional direction param indicates whether the date is being incremented/decremented\n        // from its previous value. decremented = -1, incremented = 1 (default).\n\n\n        DateProfileGenerator.prototype.build = function (date, direction, forceToValid) {\n          if (forceToValid === void 0) {\n            forceToValid = false;\n          }\n\n          var isDateAllDay = !date.hasTime();\n          var validUnzonedRange;\n          var minTime = null;\n          var maxTime = null;\n          var currentInfo;\n          var isRangeAllDay;\n          var renderUnzonedRange;\n          var activeUnzonedRange;\n          var isValid;\n          validUnzonedRange = this.buildValidRange();\n          validUnzonedRange = this.trimHiddenDays(validUnzonedRange);\n\n          if (forceToValid) {\n            date = this.msToUtcMoment(validUnzonedRange.constrainDate(date), // returns MS\n            isDateAllDay);\n          }\n\n          currentInfo = this.buildCurrentRangeInfo(date, direction);\n          isRangeAllDay = /^(year|month|week|day)$/.test(currentInfo.unit);\n          renderUnzonedRange = this.buildRenderRange(this.trimHiddenDays(currentInfo.unzonedRange), currentInfo.unit, isRangeAllDay);\n          renderUnzonedRange = this.trimHiddenDays(renderUnzonedRange);\n          activeUnzonedRange = renderUnzonedRange.clone();\n\n          if (!this.opt('showNonCurrentDates')) {\n            activeUnzonedRange = activeUnzonedRange.intersect(currentInfo.unzonedRange);\n          }\n\n          minTime = moment.duration(this.opt('minTime'));\n          maxTime = moment.duration(this.opt('maxTime'));\n          activeUnzonedRange = this.adjustActiveRange(activeUnzonedRange, minTime, maxTime);\n          activeUnzonedRange = activeUnzonedRange.intersect(validUnzonedRange); // might return null\n\n          if (activeUnzonedRange) {\n            date = this.msToUtcMoment(activeUnzonedRange.constrainDate(date), // returns MS\n            isDateAllDay);\n          } // it's invalid if the originally requested date is not contained,\n          // or if the range is completely outside of the valid range.\n\n\n          isValid = currentInfo.unzonedRange.intersectsWith(validUnzonedRange);\n          return {\n            // constraint for where prev/next operations can go and where events can be dragged/resized to.\n            // an object with optional start and end properties.\n            validUnzonedRange: validUnzonedRange,\n            // range the view is formally responsible for.\n            // for example, a month view might have 1st-31st, excluding padded dates\n            currentUnzonedRange: currentInfo.unzonedRange,\n            // name of largest unit being displayed, like \"month\" or \"week\"\n            currentRangeUnit: currentInfo.unit,\n            isRangeAllDay: isRangeAllDay,\n            // dates that display events and accept drag-n-drop\n            // will be `null` if no dates accept events\n            activeUnzonedRange: activeUnzonedRange,\n            // date range with a rendered skeleton\n            // includes not-active days that need some sort of DOM\n            renderUnzonedRange: renderUnzonedRange,\n            // Duration object that denotes the first visible time of any given day\n            minTime: minTime,\n            // Duration object that denotes the exclusive visible end time of any given day\n            maxTime: maxTime,\n            isValid: isValid,\n            date: date,\n            // how far the current date will move for a prev/next operation\n            dateIncrement: this.buildDateIncrement(currentInfo.duration) // pass a fallback (might be null) ^\n\n          };\n        }; // Builds an object with optional start/end properties.\n        // Indicates the minimum/maximum dates to display.\n        // not responsible for trimming hidden days.\n\n\n        DateProfileGenerator.prototype.buildValidRange = function () {\n          return this._view.getUnzonedRangeOption('validRange', this._view.calendar.getNow()) || new UnzonedRange_1[\"default\"](); // completely open-ended\n        }; // Builds a structure with info about the \"current\" range, the range that is\n        // highlighted as being the current month for example.\n        // See build() for a description of `direction`.\n        // Guaranteed to have `range` and `unit` properties. `duration` is optional.\n        // TODO: accept a MS-time instead of a moment `date`?\n\n\n        DateProfileGenerator.prototype.buildCurrentRangeInfo = function (date, direction) {\n          var viewSpec = this._view.viewSpec;\n          var duration = null;\n          var unit = null;\n          var unzonedRange = null;\n          var dayCount;\n\n          if (viewSpec.duration) {\n            duration = viewSpec.duration;\n            unit = viewSpec.durationUnit;\n            unzonedRange = this.buildRangeFromDuration(date, direction, duration, unit);\n          } else if (dayCount = this.opt('dayCount')) {\n            unit = 'day';\n            unzonedRange = this.buildRangeFromDayCount(date, direction, dayCount);\n          } else if (unzonedRange = this.buildCustomVisibleRange(date)) {\n            unit = util_1.computeGreatestUnit(unzonedRange.getStart(), unzonedRange.getEnd());\n          } else {\n            duration = this.getFallbackDuration();\n            unit = util_1.computeGreatestUnit(duration);\n            unzonedRange = this.buildRangeFromDuration(date, direction, duration, unit);\n          }\n\n          return {\n            duration: duration,\n            unit: unit,\n            unzonedRange: unzonedRange\n          };\n        };\n\n        DateProfileGenerator.prototype.getFallbackDuration = function () {\n          return moment.duration({\n            days: 1\n          });\n        }; // Returns a new activeUnzonedRange to have time values (un-ambiguate)\n        // minTime or maxTime causes the range to expand.\n\n\n        DateProfileGenerator.prototype.adjustActiveRange = function (unzonedRange, minTime, maxTime) {\n          var start = unzonedRange.getStart();\n          var end = unzonedRange.getEnd();\n\n          if (this._view.usesMinMaxTime) {\n            if (minTime < 0) {\n              start.time(0).add(minTime);\n            }\n\n            if (maxTime > 24 * 60 * 60 * 1000) {\n              // beyond 24 hours?\n              end.time(maxTime - 24 * 60 * 60 * 1000);\n            }\n          }\n\n          return new UnzonedRange_1[\"default\"](start, end);\n        }; // Builds the \"current\" range when it is specified as an explicit duration.\n        // `unit` is the already-computed computeGreatestUnit value of duration.\n        // TODO: accept a MS-time instead of a moment `date`?\n\n\n        DateProfileGenerator.prototype.buildRangeFromDuration = function (date, direction, duration, unit) {\n          var alignment = this.opt('dateAlignment');\n          var dateIncrementInput;\n          var dateIncrementDuration;\n          var start;\n          var end;\n          var res; // compute what the alignment should be\n\n          if (!alignment) {\n            dateIncrementInput = this.opt('dateIncrement');\n\n            if (dateIncrementInput) {\n              dateIncrementDuration = moment.duration(dateIncrementInput); // use the smaller of the two units\n\n              if (dateIncrementDuration < duration) {\n                alignment = util_1.computeDurationGreatestUnit(dateIncrementDuration, dateIncrementInput);\n              } else {\n                alignment = unit;\n              }\n            } else {\n              alignment = unit;\n            }\n          } // if the view displays a single day or smaller\n\n\n          if (duration.as('days') <= 1) {\n            if (this._view.isHiddenDay(start)) {\n              start = this._view.skipHiddenDays(start, direction);\n              start.startOf('day');\n            }\n          }\n\n          function computeRes() {\n            start = date.clone().startOf(alignment);\n            end = start.clone().add(duration);\n            res = new UnzonedRange_1[\"default\"](start, end);\n          }\n\n          computeRes(); // if range is completely enveloped by hidden days, go past the hidden days\n\n          if (!this.trimHiddenDays(res)) {\n            date = this._view.skipHiddenDays(date, direction);\n            computeRes();\n          }\n\n          return res;\n        }; // Builds the \"current\" range when a dayCount is specified.\n        // TODO: accept a MS-time instead of a moment `date`?\n\n\n        DateProfileGenerator.prototype.buildRangeFromDayCount = function (date, direction, dayCount) {\n          var customAlignment = this.opt('dateAlignment');\n          var runningCount = 0;\n          var start;\n          var end;\n\n          if (customAlignment || direction !== -1) {\n            start = date.clone();\n\n            if (customAlignment) {\n              start.startOf(customAlignment);\n            }\n\n            start.startOf('day');\n            start = this._view.skipHiddenDays(start);\n            end = start.clone();\n\n            do {\n              end.add(1, 'day');\n\n              if (!this._view.isHiddenDay(end)) {\n                runningCount++;\n              }\n            } while (runningCount < dayCount);\n          } else {\n            end = date.clone().startOf('day').add(1, 'day');\n            end = this._view.skipHiddenDays(end, -1, true);\n            start = end.clone();\n\n            do {\n              start.add(-1, 'day');\n\n              if (!this._view.isHiddenDay(start)) {\n                runningCount++;\n              }\n            } while (runningCount < dayCount);\n          }\n\n          return new UnzonedRange_1[\"default\"](start, end);\n        }; // Builds a normalized range object for the \"visible\" range,\n        // which is a way to define the currentUnzonedRange and activeUnzonedRange at the same time.\n        // TODO: accept a MS-time instead of a moment `date`?\n\n\n        DateProfileGenerator.prototype.buildCustomVisibleRange = function (date) {\n          var visibleUnzonedRange = this._view.getUnzonedRangeOption('visibleRange', this._view.calendar.applyTimezone(date) // correct zone. also generates new obj that avoids mutations\n          );\n\n          if (visibleUnzonedRange && (visibleUnzonedRange.startMs == null || visibleUnzonedRange.endMs == null)) {\n            return null;\n          }\n\n          return visibleUnzonedRange;\n        }; // Computes the range that will represent the element/cells for *rendering*,\n        // but which may have voided days/times.\n        // not responsible for trimming hidden days.\n\n\n        DateProfileGenerator.prototype.buildRenderRange = function (currentUnzonedRange, currentRangeUnit, isRangeAllDay) {\n          return currentUnzonedRange.clone();\n        }; // Compute the duration value that should be added/substracted to the current date\n        // when a prev/next operation happens.\n\n\n        DateProfileGenerator.prototype.buildDateIncrement = function (fallback) {\n          var dateIncrementInput = this.opt('dateIncrement');\n          var customAlignment;\n\n          if (dateIncrementInput) {\n            return moment.duration(dateIncrementInput);\n          } else if (customAlignment = this.opt('dateAlignment')) {\n            return moment.duration(1, customAlignment);\n          } else if (fallback) {\n            return fallback;\n          } else {\n            return moment.duration({\n              days: 1\n            });\n          }\n        };\n\n        return DateProfileGenerator;\n      }();\n\n      exports[\"default\"] = DateProfileGenerator;\n      /***/\n    },\n    /* 56 */\n\n    /***/\n    function (module, exports, __webpack_require__) {\n      Object.defineProperty(exports, \"__esModule\", {\n        value: true\n      });\n\n      var tslib_1 = __webpack_require__(2);\n\n      var $ = __webpack_require__(3);\n\n      var util_1 = __webpack_require__(4);\n\n      var Promise_1 = __webpack_require__(21);\n\n      var EventSource_1 = __webpack_require__(6);\n\n      var SingleEventDef_1 = __webpack_require__(9);\n\n      var ArrayEventSource =\n      /** @class */\n      function (_super) {\n        tslib_1.__extends(ArrayEventSource, _super);\n\n        function ArrayEventSource(calendar) {\n          var _this = _super.call(this, calendar) || this;\n\n          _this.eventDefs = []; // for if setRawEventDefs is never called\n\n          return _this;\n        }\n\n        ArrayEventSource.parse = function (rawInput, calendar) {\n          var rawProps; // normalize raw input\n\n          if ($.isArray(rawInput.events)) {\n            // extended form\n            rawProps = rawInput;\n          } else if ($.isArray(rawInput)) {\n            // short form\n            rawProps = {\n              events: rawInput\n            };\n          }\n\n          if (rawProps) {\n            return EventSource_1[\"default\"].parse.call(this, rawProps, calendar);\n          }\n\n          return false;\n        };\n\n        ArrayEventSource.prototype.setRawEventDefs = function (rawEventDefs) {\n          this.rawEventDefs = rawEventDefs;\n          this.eventDefs = this.parseEventDefs(rawEventDefs);\n        };\n\n        ArrayEventSource.prototype.fetch = function (start, end, timezone) {\n          var eventDefs = this.eventDefs;\n          var i;\n\n          if (this.currentTimezone != null && this.currentTimezone !== timezone) {\n            for (i = 0; i < eventDefs.length; i++) {\n              if (eventDefs[i] instanceof SingleEventDef_1[\"default\"]) {\n                eventDefs[i].rezone();\n              }\n            }\n          }\n\n          this.currentTimezone = timezone;\n          return Promise_1[\"default\"].resolve(eventDefs);\n        };\n\n        ArrayEventSource.prototype.addEventDef = function (eventDef) {\n          this.eventDefs.push(eventDef);\n        };\n        /*\r\n        eventDefId already normalized to a string\r\n        */\n\n\n        ArrayEventSource.prototype.removeEventDefsById = function (eventDefId) {\n          return util_1.removeMatching(this.eventDefs, function (eventDef) {\n            return eventDef.id === eventDefId;\n          });\n        };\n\n        ArrayEventSource.prototype.removeAllEventDefs = function () {\n          this.eventDefs = [];\n        };\n\n        ArrayEventSource.prototype.getPrimitive = function () {\n          return this.rawEventDefs;\n        };\n\n        ArrayEventSource.prototype.applyManualStandardProps = function (rawProps) {\n          var superSuccess = _super.prototype.applyManualStandardProps.call(this, rawProps);\n\n          this.setRawEventDefs(rawProps.events);\n          return superSuccess;\n        };\n\n        return ArrayEventSource;\n      }(EventSource_1[\"default\"]);\n\n      exports[\"default\"] = ArrayEventSource;\n      ArrayEventSource.defineStandardProps({\n        events: false // don't automatically transfer\n\n      });\n      /***/\n    },\n    /* 57 */\n\n    /***/\n    function (module, exports, __webpack_require__) {\n      Object.defineProperty(exports, \"__esModule\", {\n        value: true\n      });\n\n      var StandardTheme_1 = __webpack_require__(221);\n\n      var JqueryUiTheme_1 = __webpack_require__(222);\n\n      var themeClassHash = {};\n\n      function defineThemeSystem(themeName, themeClass) {\n        themeClassHash[themeName] = themeClass;\n      }\n\n      exports.defineThemeSystem = defineThemeSystem;\n\n      function getThemeSystemClass(themeSetting) {\n        if (!themeSetting) {\n          return StandardTheme_1[\"default\"];\n        } else if (themeSetting === true) {\n          return JqueryUiTheme_1[\"default\"];\n        } else {\n          return themeClassHash[themeSetting];\n        }\n      }\n\n      exports.getThemeSystemClass = getThemeSystemClass;\n      /***/\n    },\n    /* 58 */\n\n    /***/\n    function (module, exports, __webpack_require__) {\n      Object.defineProperty(exports, \"__esModule\", {\n        value: true\n      });\n\n      var $ = __webpack_require__(3);\n\n      var util_1 = __webpack_require__(4);\n      /*\r\n      A cache for the left/right/top/bottom/width/height values for one or more elements.\r\n      Works with both offset (from topleft document) and position (from offsetParent).\r\n      \n      options:\r\n      - els\r\n      - isHorizontal\r\n      - isVertical\r\n      */\n\n\n      var CoordCache =\n      /** @class */\n      function () {\n        function CoordCache(options) {\n          this.isHorizontal = false; // whether to query for left/right/width\n\n          this.isVertical = false; // whether to query for top/bottom/height\n\n          this.els = $(options.els);\n          this.isHorizontal = options.isHorizontal;\n          this.isVertical = options.isVertical;\n          this.forcedOffsetParentEl = options.offsetParent ? $(options.offsetParent) : null;\n        } // Queries the els for coordinates and stores them.\n        // Call this method before using and of the get* methods below.\n\n\n        CoordCache.prototype.build = function () {\n          var offsetParentEl = this.forcedOffsetParentEl;\n\n          if (!offsetParentEl && this.els.length > 0) {\n            offsetParentEl = this.els.eq(0).offsetParent();\n          }\n\n          this.origin = offsetParentEl ? offsetParentEl.offset() : null;\n          this.boundingRect = this.queryBoundingRect();\n\n          if (this.isHorizontal) {\n            this.buildElHorizontals();\n          }\n\n          if (this.isVertical) {\n            this.buildElVerticals();\n          }\n        }; // Destroys all internal data about coordinates, freeing memory\n\n\n        CoordCache.prototype.clear = function () {\n          this.origin = null;\n          this.boundingRect = null;\n          this.lefts = null;\n          this.rights = null;\n          this.tops = null;\n          this.bottoms = null;\n        }; // When called, if coord caches aren't built, builds them\n\n\n        CoordCache.prototype.ensureBuilt = function () {\n          if (!this.origin) {\n            this.build();\n          }\n        }; // Populates the left/right internal coordinate arrays\n\n\n        CoordCache.prototype.buildElHorizontals = function () {\n          var lefts = [];\n          var rights = [];\n          this.els.each(function (i, node) {\n            var el = $(node);\n            var left = el.offset().left;\n            var width = el.outerWidth();\n            lefts.push(left);\n            rights.push(left + width);\n          });\n          this.lefts = lefts;\n          this.rights = rights;\n        }; // Populates the top/bottom internal coordinate arrays\n\n\n        CoordCache.prototype.buildElVerticals = function () {\n          var tops = [];\n          var bottoms = [];\n          this.els.each(function (i, node) {\n            var el = $(node);\n            var top = el.offset().top;\n            var height = el.outerHeight();\n            tops.push(top);\n            bottoms.push(top + height);\n          });\n          this.tops = tops;\n          this.bottoms = bottoms;\n        }; // Given a left offset (from document left), returns the index of the el that it horizontally intersects.\n        // If no intersection is made, returns undefined.\n\n\n        CoordCache.prototype.getHorizontalIndex = function (leftOffset) {\n          this.ensureBuilt();\n          var lefts = this.lefts;\n          var rights = this.rights;\n          var len = lefts.length;\n          var i;\n\n          for (i = 0; i < len; i++) {\n            if (leftOffset >= lefts[i] && leftOffset < rights[i]) {\n              return i;\n            }\n          }\n        }; // Given a top offset (from document top), returns the index of the el that it vertically intersects.\n        // If no intersection is made, returns undefined.\n\n\n        CoordCache.prototype.getVerticalIndex = function (topOffset) {\n          this.ensureBuilt();\n          var tops = this.tops;\n          var bottoms = this.bottoms;\n          var len = tops.length;\n          var i;\n\n          for (i = 0; i < len; i++) {\n            if (topOffset >= tops[i] && topOffset < bottoms[i]) {\n              return i;\n            }\n          }\n        }; // Gets the left offset (from document left) of the element at the given index\n\n\n        CoordCache.prototype.getLeftOffset = function (leftIndex) {\n          this.ensureBuilt();\n          return this.lefts[leftIndex];\n        }; // Gets the left position (from offsetParent left) of the element at the given index\n\n\n        CoordCache.prototype.getLeftPosition = function (leftIndex) {\n          this.ensureBuilt();\n          return this.lefts[leftIndex] - this.origin.left;\n        }; // Gets the right offset (from document left) of the element at the given index.\n        // This value is NOT relative to the document's right edge, like the CSS concept of \"right\" would be.\n\n\n        CoordCache.prototype.getRightOffset = function (leftIndex) {\n          this.ensureBuilt();\n          return this.rights[leftIndex];\n        }; // Gets the right position (from offsetParent left) of the element at the given index.\n        // This value is NOT relative to the offsetParent's right edge, like the CSS concept of \"right\" would be.\n\n\n        CoordCache.prototype.getRightPosition = function (leftIndex) {\n          this.ensureBuilt();\n          return this.rights[leftIndex] - this.origin.left;\n        }; // Gets the width of the element at the given index\n\n\n        CoordCache.prototype.getWidth = function (leftIndex) {\n          this.ensureBuilt();\n          return this.rights[leftIndex] - this.lefts[leftIndex];\n        }; // Gets the top offset (from document top) of the element at the given index\n\n\n        CoordCache.prototype.getTopOffset = function (topIndex) {\n          this.ensureBuilt();\n          return this.tops[topIndex];\n        }; // Gets the top position (from offsetParent top) of the element at the given position\n\n\n        CoordCache.prototype.getTopPosition = function (topIndex) {\n          this.ensureBuilt();\n          return this.tops[topIndex] - this.origin.top;\n        }; // Gets the bottom offset (from the document top) of the element at the given index.\n        // This value is NOT relative to the offsetParent's bottom edge, like the CSS concept of \"bottom\" would be.\n\n\n        CoordCache.prototype.getBottomOffset = function (topIndex) {\n          this.ensureBuilt();\n          return this.bottoms[topIndex];\n        }; // Gets the bottom position (from the offsetParent top) of the element at the given index.\n        // This value is NOT relative to the offsetParent's bottom edge, like the CSS concept of \"bottom\" would be.\n\n\n        CoordCache.prototype.getBottomPosition = function (topIndex) {\n          this.ensureBuilt();\n          return this.bottoms[topIndex] - this.origin.top;\n        }; // Gets the height of the element at the given index\n\n\n        CoordCache.prototype.getHeight = function (topIndex) {\n          this.ensureBuilt();\n          return this.bottoms[topIndex] - this.tops[topIndex];\n        }; // Bounding Rect\n        // TODO: decouple this from CoordCache\n        // Compute and return what the elements' bounding rectangle is, from the user's perspective.\n        // Right now, only returns a rectangle if constrained by an overflow:scroll element.\n        // Returns null if there are no elements\n\n\n        CoordCache.prototype.queryBoundingRect = function () {\n          var scrollParentEl;\n\n          if (this.els.length > 0) {\n            scrollParentEl = util_1.getScrollParent(this.els.eq(0));\n\n            if (!scrollParentEl.is(document) && !scrollParentEl.is('html,body') // don't consider these bounding rects. solves issue 3615\n            ) {\n                return util_1.getClientRect(scrollParentEl);\n              }\n          }\n\n          return null;\n        };\n\n        CoordCache.prototype.isPointInBounds = function (leftOffset, topOffset) {\n          return this.isLeftInBounds(leftOffset) && this.isTopInBounds(topOffset);\n        };\n\n        CoordCache.prototype.isLeftInBounds = function (leftOffset) {\n          return !this.boundingRect || leftOffset >= this.boundingRect.left && leftOffset < this.boundingRect.right;\n        };\n\n        CoordCache.prototype.isTopInBounds = function (topOffset) {\n          return !this.boundingRect || topOffset >= this.boundingRect.top && topOffset < this.boundingRect.bottom;\n        };\n\n        return CoordCache;\n      }();\n\n      exports[\"default\"] = CoordCache;\n      /***/\n    },\n    /* 59 */\n\n    /***/\n    function (module, exports, __webpack_require__) {\n      Object.defineProperty(exports, \"__esModule\", {\n        value: true\n      });\n\n      var $ = __webpack_require__(3);\n\n      var util_1 = __webpack_require__(4);\n\n      var ListenerMixin_1 = __webpack_require__(7);\n\n      var GlobalEmitter_1 = __webpack_require__(23);\n      /* Tracks a drag's mouse movement, firing various handlers\r\n      ----------------------------------------------------------------------------------------------------------------------*/\n      // TODO: use Emitter\n\n\n      var DragListener =\n      /** @class */\n      function () {\n        function DragListener(options) {\n          this.isInteracting = false;\n          this.isDistanceSurpassed = false;\n          this.isDelayEnded = false;\n          this.isDragging = false;\n          this.isTouch = false;\n          this.isGeneric = false; // initiated by 'dragstart' (jqui)\n\n          this.shouldCancelTouchScroll = true;\n          this.scrollAlwaysKills = false;\n          this.isAutoScroll = false; // defaults\n\n          this.scrollSensitivity = 30; // pixels from edge for scrolling to start\n\n          this.scrollSpeed = 200; // pixels per second, at maximum speed\n\n          this.scrollIntervalMs = 50; // millisecond wait between scroll increment\n\n          this.options = options || {};\n        } // Interaction (high-level)\n        // -----------------------------------------------------------------------------------------------------------------\n\n\n        DragListener.prototype.startInteraction = function (ev, extraOptions) {\n          if (extraOptions === void 0) {\n            extraOptions = {};\n          }\n\n          if (ev.type === 'mousedown') {\n            if (GlobalEmitter_1[\"default\"].get().shouldIgnoreMouse()) {\n              return;\n            } else if (!util_1.isPrimaryMouseButton(ev)) {\n              return;\n            } else {\n              ev.preventDefault(); // prevents native selection in most browsers\n            }\n          }\n\n          if (!this.isInteracting) {\n            // process options\n            this.delay = util_1.firstDefined(extraOptions.delay, this.options.delay, 0);\n            this.minDistance = util_1.firstDefined(extraOptions.distance, this.options.distance, 0);\n            this.subjectEl = this.options.subjectEl;\n            util_1.preventSelection($('body'));\n            this.isInteracting = true;\n            this.isTouch = util_1.getEvIsTouch(ev);\n            this.isGeneric = ev.type === 'dragstart';\n            this.isDelayEnded = false;\n            this.isDistanceSurpassed = false;\n            this.originX = util_1.getEvX(ev);\n            this.originY = util_1.getEvY(ev);\n            this.scrollEl = util_1.getScrollParent($(ev.target));\n            this.bindHandlers();\n            this.initAutoScroll();\n            this.handleInteractionStart(ev);\n            this.startDelay(ev);\n\n            if (!this.minDistance) {\n              this.handleDistanceSurpassed(ev);\n            }\n          }\n        };\n\n        DragListener.prototype.handleInteractionStart = function (ev) {\n          this.trigger('interactionStart', ev);\n        };\n\n        DragListener.prototype.endInteraction = function (ev, isCancelled) {\n          if (this.isInteracting) {\n            this.endDrag(ev);\n\n            if (this.delayTimeoutId) {\n              clearTimeout(this.delayTimeoutId);\n              this.delayTimeoutId = null;\n            }\n\n            this.destroyAutoScroll();\n            this.unbindHandlers();\n            this.isInteracting = false;\n            this.handleInteractionEnd(ev, isCancelled);\n            util_1.allowSelection($('body'));\n          }\n        };\n\n        DragListener.prototype.handleInteractionEnd = function (ev, isCancelled) {\n          this.trigger('interactionEnd', ev, isCancelled || false);\n        }; // Binding To DOM\n        // -----------------------------------------------------------------------------------------------------------------\n\n\n        DragListener.prototype.bindHandlers = function () {\n          // some browsers (Safari in iOS 10) don't allow preventDefault on touch events that are bound after touchstart,\n          // so listen to the GlobalEmitter singleton, which is always bound, instead of the document directly.\n          var globalEmitter = GlobalEmitter_1[\"default\"].get();\n\n          if (this.isGeneric) {\n            this.listenTo($(document), {\n              drag: this.handleMove,\n              dragstop: this.endInteraction\n            });\n          } else if (this.isTouch) {\n            this.listenTo(globalEmitter, {\n              touchmove: this.handleTouchMove,\n              touchend: this.endInteraction,\n              scroll: this.handleTouchScroll\n            });\n          } else {\n            this.listenTo(globalEmitter, {\n              mousemove: this.handleMouseMove,\n              mouseup: this.endInteraction\n            });\n          }\n\n          this.listenTo(globalEmitter, {\n            selectstart: util_1.preventDefault,\n            contextmenu: util_1.preventDefault // long taps would open menu on Chrome dev tools\n\n          });\n        };\n\n        DragListener.prototype.unbindHandlers = function () {\n          this.stopListeningTo(GlobalEmitter_1[\"default\"].get());\n          this.stopListeningTo($(document)); // for isGeneric\n        }; // Drag (high-level)\n        // -----------------------------------------------------------------------------------------------------------------\n        // extraOptions ignored if drag already started\n\n\n        DragListener.prototype.startDrag = function (ev, extraOptions) {\n          this.startInteraction(ev, extraOptions); // ensure interaction began\n\n          if (!this.isDragging) {\n            this.isDragging = true;\n            this.handleDragStart(ev);\n          }\n        };\n\n        DragListener.prototype.handleDragStart = function (ev) {\n          this.trigger('dragStart', ev);\n        };\n\n        DragListener.prototype.handleMove = function (ev) {\n          var dx = util_1.getEvX(ev) - this.originX;\n          var dy = util_1.getEvY(ev) - this.originY;\n          var minDistance = this.minDistance;\n          var distanceSq; // current distance from the origin, squared\n\n          if (!this.isDistanceSurpassed) {\n            distanceSq = dx * dx + dy * dy;\n\n            if (distanceSq >= minDistance * minDistance) {\n              // use pythagorean theorem\n              this.handleDistanceSurpassed(ev);\n            }\n          }\n\n          if (this.isDragging) {\n            this.handleDrag(dx, dy, ev);\n          }\n        }; // Called while the mouse is being moved and when we know a legitimate drag is taking place\n\n\n        DragListener.prototype.handleDrag = function (dx, dy, ev) {\n          this.trigger('drag', dx, dy, ev);\n          this.updateAutoScroll(ev); // will possibly cause scrolling\n        };\n\n        DragListener.prototype.endDrag = function (ev) {\n          if (this.isDragging) {\n            this.isDragging = false;\n            this.handleDragEnd(ev);\n          }\n        };\n\n        DragListener.prototype.handleDragEnd = function (ev) {\n          this.trigger('dragEnd', ev);\n        }; // Delay\n        // -----------------------------------------------------------------------------------------------------------------\n\n\n        DragListener.prototype.startDelay = function (initialEv) {\n          var _this = this;\n\n          if (this.delay) {\n            this.delayTimeoutId = setTimeout(function () {\n              _this.handleDelayEnd(initialEv);\n            }, this.delay);\n          } else {\n            this.handleDelayEnd(initialEv);\n          }\n        };\n\n        DragListener.prototype.handleDelayEnd = function (initialEv) {\n          this.isDelayEnded = true;\n\n          if (this.isDistanceSurpassed) {\n            this.startDrag(initialEv);\n          }\n        }; // Distance\n        // -----------------------------------------------------------------------------------------------------------------\n\n\n        DragListener.prototype.handleDistanceSurpassed = function (ev) {\n          this.isDistanceSurpassed = true;\n\n          if (this.isDelayEnded) {\n            this.startDrag(ev);\n          }\n        }; // Mouse / Touch\n        // -----------------------------------------------------------------------------------------------------------------\n\n\n        DragListener.prototype.handleTouchMove = function (ev) {\n          // prevent inertia and touchmove-scrolling while dragging\n          if (this.isDragging && this.shouldCancelTouchScroll) {\n            ev.preventDefault();\n          }\n\n          this.handleMove(ev);\n        };\n\n        DragListener.prototype.handleMouseMove = function (ev) {\n          this.handleMove(ev);\n        }; // Scrolling (unrelated to auto-scroll)\n        // -----------------------------------------------------------------------------------------------------------------\n\n\n        DragListener.prototype.handleTouchScroll = function (ev) {\n          // if the drag is being initiated by touch, but a scroll happens before\n          // the drag-initiating delay is over, cancel the drag\n          if (!this.isDragging || this.scrollAlwaysKills) {\n            this.endInteraction(ev, true); // isCancelled=true\n          }\n        }; // Utils\n        // -----------------------------------------------------------------------------------------------------------------\n        // Triggers a callback. Calls a function in the option hash of the same name.\n        // Arguments beyond the first `name` are forwarded on.\n\n\n        DragListener.prototype.trigger = function (name) {\n          var args = [];\n\n          for (var _i = 1; _i < arguments.length; _i++) {\n            args[_i - 1] = arguments[_i];\n          }\n\n          if (this.options[name]) {\n            this.options[name].apply(this, args);\n          } // makes _methods callable by event name. TODO: kill this\n\n\n          if (this['_' + name]) {\n            this['_' + name].apply(this, args);\n          }\n        }; // Auto-scroll\n        // -----------------------------------------------------------------------------------------------------------------\n\n\n        DragListener.prototype.initAutoScroll = function () {\n          var scrollEl = this.scrollEl;\n          this.isAutoScroll = this.options.scroll && scrollEl && !scrollEl.is(window) && !scrollEl.is(document);\n\n          if (this.isAutoScroll) {\n            // debounce makes sure rapid calls don't happen\n            this.listenTo(scrollEl, 'scroll', util_1.debounce(this.handleDebouncedScroll, 100));\n          }\n        };\n\n        DragListener.prototype.destroyAutoScroll = function () {\n          this.endAutoScroll(); // kill any animation loop\n          // remove the scroll handler if there is a scrollEl\n\n          if (this.isAutoScroll) {\n            this.stopListeningTo(this.scrollEl, 'scroll'); // will probably get removed by unbindHandlers too :(\n          }\n        }; // Computes and stores the bounding rectangle of scrollEl\n\n\n        DragListener.prototype.computeScrollBounds = function () {\n          if (this.isAutoScroll) {\n            this.scrollBounds = util_1.getOuterRect(this.scrollEl); // TODO: use getClientRect in future. but prevents auto scrolling when on top of scrollbars\n          }\n        }; // Called when the dragging is in progress and scrolling should be updated\n\n\n        DragListener.prototype.updateAutoScroll = function (ev) {\n          var sensitivity = this.scrollSensitivity;\n          var bounds = this.scrollBounds;\n          var topCloseness;\n          var bottomCloseness;\n          var leftCloseness;\n          var rightCloseness;\n          var topVel = 0;\n          var leftVel = 0;\n\n          if (bounds) {\n            // only scroll if scrollEl exists\n            // compute closeness to edges. valid range is from 0.0 - 1.0\n            topCloseness = (sensitivity - (util_1.getEvY(ev) - bounds.top)) / sensitivity;\n            bottomCloseness = (sensitivity - (bounds.bottom - util_1.getEvY(ev))) / sensitivity;\n            leftCloseness = (sensitivity - (util_1.getEvX(ev) - bounds.left)) / sensitivity;\n            rightCloseness = (sensitivity - (bounds.right - util_1.getEvX(ev))) / sensitivity; // translate vertical closeness into velocity.\n            // mouse must be completely in bounds for velocity to happen.\n\n            if (topCloseness >= 0 && topCloseness <= 1) {\n              topVel = topCloseness * this.scrollSpeed * -1; // negative. for scrolling up\n            } else if (bottomCloseness >= 0 && bottomCloseness <= 1) {\n              topVel = bottomCloseness * this.scrollSpeed;\n            } // translate horizontal closeness into velocity\n\n\n            if (leftCloseness >= 0 && leftCloseness <= 1) {\n              leftVel = leftCloseness * this.scrollSpeed * -1; // negative. for scrolling left\n            } else if (rightCloseness >= 0 && rightCloseness <= 1) {\n              leftVel = rightCloseness * this.scrollSpeed;\n            }\n          }\n\n          this.setScrollVel(topVel, leftVel);\n        }; // Sets the speed-of-scrolling for the scrollEl\n\n\n        DragListener.prototype.setScrollVel = function (topVel, leftVel) {\n          this.scrollTopVel = topVel;\n          this.scrollLeftVel = leftVel;\n          this.constrainScrollVel(); // massages into realistic values\n          // if there is non-zero velocity, and an animation loop hasn't already started, then START\n\n          if ((this.scrollTopVel || this.scrollLeftVel) && !this.scrollIntervalId) {\n            this.scrollIntervalId = setInterval(util_1.proxy(this, 'scrollIntervalFunc'), // scope to `this`\n            this.scrollIntervalMs);\n          }\n        }; // Forces scrollTopVel and scrollLeftVel to be zero if scrolling has already gone all the way\n\n\n        DragListener.prototype.constrainScrollVel = function () {\n          var el = this.scrollEl;\n\n          if (this.scrollTopVel < 0) {\n            // scrolling up?\n            if (el.scrollTop() <= 0) {\n              // already scrolled all the way up?\n              this.scrollTopVel = 0;\n            }\n          } else if (this.scrollTopVel > 0) {\n            // scrolling down?\n            if (el.scrollTop() + el[0].clientHeight >= el[0].scrollHeight) {\n              // already scrolled all the way down?\n              this.scrollTopVel = 0;\n            }\n          }\n\n          if (this.scrollLeftVel < 0) {\n            // scrolling left?\n            if (el.scrollLeft() <= 0) {\n              // already scrolled all the left?\n              this.scrollLeftVel = 0;\n            }\n          } else if (this.scrollLeftVel > 0) {\n            // scrolling right?\n            if (el.scrollLeft() + el[0].clientWidth >= el[0].scrollWidth) {\n              // already scrolled all the way right?\n              this.scrollLeftVel = 0;\n            }\n          }\n        }; // This function gets called during every iteration of the scrolling animation loop\n\n\n        DragListener.prototype.scrollIntervalFunc = function () {\n          var el = this.scrollEl;\n          var frac = this.scrollIntervalMs / 1000; // considering animation frequency, what the vel should be mult'd by\n          // change the value of scrollEl's scroll\n\n          if (this.scrollTopVel) {\n            el.scrollTop(el.scrollTop() + this.scrollTopVel * frac);\n          }\n\n          if (this.scrollLeftVel) {\n            el.scrollLeft(el.scrollLeft() + this.scrollLeftVel * frac);\n          }\n\n          this.constrainScrollVel(); // since the scroll values changed, recompute the velocities\n          // if scrolled all the way, which causes the vels to be zero, stop the animation loop\n\n          if (!this.scrollTopVel && !this.scrollLeftVel) {\n            this.endAutoScroll();\n          }\n        }; // Kills any existing scrolling animation loop\n\n\n        DragListener.prototype.endAutoScroll = function () {\n          if (this.scrollIntervalId) {\n            clearInterval(this.scrollIntervalId);\n            this.scrollIntervalId = null;\n            this.handleScrollEnd();\n          }\n        }; // Get called when the scrollEl is scrolled (NOTE: this is delayed via debounce)\n\n\n        DragListener.prototype.handleDebouncedScroll = function () {\n          // recompute all coordinates, but *only* if this is *not* part of our scrolling animation\n          if (!this.scrollIntervalId) {\n            this.handleScrollEnd();\n          }\n        };\n\n        DragListener.prototype.handleScrollEnd = function () {// Called when scrolling has stopped, whether through auto scroll, or the user scrolling\n        };\n\n        return DragListener;\n      }();\n\n      exports[\"default\"] = DragListener;\n      ListenerMixin_1[\"default\"].mixInto(DragListener);\n      /***/\n    },\n    /* 60 */\n\n    /***/\n    function (module, exports, __webpack_require__) {\n      Object.defineProperty(exports, \"__esModule\", {\n        value: true\n      });\n\n      var tslib_1 = __webpack_require__(2);\n\n      var util_1 = __webpack_require__(4);\n\n      var Mixin_1 = __webpack_require__(15);\n      /*\r\n      A set of rendering and date-related methods for a visual component comprised of one or more rows of day columns.\r\n      Prerequisite: the object being mixed into needs to be a *Grid*\r\n      */\n\n\n      var DayTableMixin =\n      /** @class */\n      function (_super) {\n        tslib_1.__extends(DayTableMixin, _super);\n\n        function DayTableMixin() {\n          return _super !== null && _super.apply(this, arguments) || this;\n        } // Populates internal variables used for date calculation and rendering\n\n\n        DayTableMixin.prototype.updateDayTable = function () {\n          var t = this;\n          var view = t.view;\n          var calendar = view.calendar;\n          var date = calendar.msToUtcMoment(t.dateProfile.renderUnzonedRange.startMs, true);\n          var end = calendar.msToUtcMoment(t.dateProfile.renderUnzonedRange.endMs, true);\n          var dayIndex = -1;\n          var dayIndices = [];\n          var dayDates = [];\n          var daysPerRow;\n          var firstDay;\n          var rowCnt;\n\n          while (date.isBefore(end)) {\n            // loop each day from start to end\n            if (view.isHiddenDay(date)) {\n              dayIndices.push(dayIndex + 0.5); // mark that it's between indices\n            } else {\n              dayIndex++;\n              dayIndices.push(dayIndex);\n              dayDates.push(date.clone());\n            }\n\n            date.add(1, 'days');\n          }\n\n          if (this.breakOnWeeks) {\n            // count columns until the day-of-week repeats\n            firstDay = dayDates[0].day();\n\n            for (daysPerRow = 1; daysPerRow < dayDates.length; daysPerRow++) {\n              if (dayDates[daysPerRow].day() === firstDay) {\n                break;\n              }\n            }\n\n            rowCnt = Math.ceil(dayDates.length / daysPerRow);\n          } else {\n            rowCnt = 1;\n            daysPerRow = dayDates.length;\n          }\n\n          this.dayDates = dayDates;\n          this.dayIndices = dayIndices;\n          this.daysPerRow = daysPerRow;\n          this.rowCnt = rowCnt;\n          this.updateDayTableCols();\n        }; // Computes and assigned the colCnt property and updates any options that may be computed from it\n\n\n        DayTableMixin.prototype.updateDayTableCols = function () {\n          this.colCnt = this.computeColCnt();\n          this.colHeadFormat = this.opt('columnHeaderFormat') || this.opt('columnFormat') || // deprecated\n          this.computeColHeadFormat();\n        }; // Determines how many columns there should be in the table\n\n\n        DayTableMixin.prototype.computeColCnt = function () {\n          return this.daysPerRow;\n        }; // Computes the ambiguously-timed moment for the given cell\n\n\n        DayTableMixin.prototype.getCellDate = function (row, col) {\n          return this.dayDates[this.getCellDayIndex(row, col)].clone();\n        }; // Computes the ambiguously-timed date range for the given cell\n\n\n        DayTableMixin.prototype.getCellRange = function (row, col) {\n          var start = this.getCellDate(row, col);\n          var end = start.clone().add(1, 'days');\n          return {\n            start: start,\n            end: end\n          };\n        }; // Returns the number of day cells, chronologically, from the first of the grid (0-based)\n\n\n        DayTableMixin.prototype.getCellDayIndex = function (row, col) {\n          return row * this.daysPerRow + this.getColDayIndex(col);\n        }; // Returns the numner of day cells, chronologically, from the first cell in *any given row*\n\n\n        DayTableMixin.prototype.getColDayIndex = function (col) {\n          if (this.isRTL) {\n            return this.colCnt - 1 - col;\n          } else {\n            return col;\n          }\n        }; // Given a date, returns its chronolocial cell-index from the first cell of the grid.\n        // If the date lies between cells (because of hiddenDays), returns a floating-point value between offsets.\n        // If before the first offset, returns a negative number.\n        // If after the last offset, returns an offset past the last cell offset.\n        // Only works for *start* dates of cells. Will not work for exclusive end dates for cells.\n\n\n        DayTableMixin.prototype.getDateDayIndex = function (date) {\n          var dayIndices = this.dayIndices;\n          var dayOffset = date.diff(this.dayDates[0], 'days');\n\n          if (dayOffset < 0) {\n            return dayIndices[0] - 1;\n          } else if (dayOffset >= dayIndices.length) {\n            return dayIndices[dayIndices.length - 1] + 1;\n          } else {\n            return dayIndices[dayOffset];\n          }\n        };\n        /* Options\r\n        ------------------------------------------------------------------------------------------------------------------*/\n        // Computes a default column header formatting string if `colFormat` is not explicitly defined\n\n\n        DayTableMixin.prototype.computeColHeadFormat = function () {\n          // if more than one week row, or if there are a lot of columns with not much space,\n          // put just the day numbers will be in each cell\n          if (this.rowCnt > 1 || this.colCnt > 10) {\n            return 'ddd'; // \"Sat\"\n          } else if (this.colCnt > 1) {\n            return this.opt('dayOfMonthFormat'); // \"Sat 12/10\"\n          } else {\n            return 'dddd'; // \"Saturday\"\n          }\n        };\n        /* Slicing\r\n        ------------------------------------------------------------------------------------------------------------------*/\n        // Slices up a date range into a segment for every week-row it intersects with\n\n\n        DayTableMixin.prototype.sliceRangeByRow = function (unzonedRange) {\n          var daysPerRow = this.daysPerRow;\n          var normalRange = this.view.computeDayRange(unzonedRange); // make whole-day range, considering nextDayThreshold\n\n          var rangeFirst = this.getDateDayIndex(normalRange.start); // inclusive first index\n\n          var rangeLast = this.getDateDayIndex(normalRange.end.clone().subtract(1, 'days')); // inclusive last index\n\n          var segs = [];\n          var row;\n          var rowFirst;\n          var rowLast; // inclusive day-index range for current row\n\n          var segFirst;\n          var segLast; // inclusive day-index range for segment\n\n          for (row = 0; row < this.rowCnt; row++) {\n            rowFirst = row * daysPerRow;\n            rowLast = rowFirst + daysPerRow - 1; // intersect segment's offset range with the row's\n\n            segFirst = Math.max(rangeFirst, rowFirst);\n            segLast = Math.min(rangeLast, rowLast); // deal with in-between indices\n\n            segFirst = Math.ceil(segFirst); // in-between starts round to next cell\n\n            segLast = Math.floor(segLast); // in-between ends round to prev cell\n\n            if (segFirst <= segLast) {\n              // was there any intersection with the current row?\n              segs.push({\n                row: row,\n                // normalize to start of row\n                firstRowDayIndex: segFirst - rowFirst,\n                lastRowDayIndex: segLast - rowFirst,\n                // must be matching integers to be the segment's start/end\n                isStart: segFirst === rangeFirst,\n                isEnd: segLast === rangeLast\n              });\n            }\n          }\n\n          return segs;\n        }; // Slices up a date range into a segment for every day-cell it intersects with.\n        // TODO: make more DRY with sliceRangeByRow somehow.\n\n\n        DayTableMixin.prototype.sliceRangeByDay = function (unzonedRange) {\n          var daysPerRow = this.daysPerRow;\n          var normalRange = this.view.computeDayRange(unzonedRange); // make whole-day range, considering nextDayThreshold\n\n          var rangeFirst = this.getDateDayIndex(normalRange.start); // inclusive first index\n\n          var rangeLast = this.getDateDayIndex(normalRange.end.clone().subtract(1, 'days')); // inclusive last index\n\n          var segs = [];\n          var row;\n          var rowFirst;\n          var rowLast; // inclusive day-index range for current row\n\n          var i;\n          var segFirst;\n          var segLast; // inclusive day-index range for segment\n\n          for (row = 0; row < this.rowCnt; row++) {\n            rowFirst = row * daysPerRow;\n            rowLast = rowFirst + daysPerRow - 1;\n\n            for (i = rowFirst; i <= rowLast; i++) {\n              // intersect segment's offset range with the row's\n              segFirst = Math.max(rangeFirst, i);\n              segLast = Math.min(rangeLast, i); // deal with in-between indices\n\n              segFirst = Math.ceil(segFirst); // in-between starts round to next cell\n\n              segLast = Math.floor(segLast); // in-between ends round to prev cell\n\n              if (segFirst <= segLast) {\n                // was there any intersection with the current row?\n                segs.push({\n                  row: row,\n                  // normalize to start of row\n                  firstRowDayIndex: segFirst - rowFirst,\n                  lastRowDayIndex: segLast - rowFirst,\n                  // must be matching integers to be the segment's start/end\n                  isStart: segFirst === rangeFirst,\n                  isEnd: segLast === rangeLast\n                });\n              }\n            }\n          }\n\n          return segs;\n        };\n        /* Header Rendering\r\n        ------------------------------------------------------------------------------------------------------------------*/\n\n\n        DayTableMixin.prototype.renderHeadHtml = function () {\n          var theme = this.view.calendar.theme;\n          return '' + '<div class=\"fc-row ' + theme.getClass('headerRow') + '\">' + '<table class=\"' + theme.getClass('tableGrid') + '\">' + '<thead>' + this.renderHeadTrHtml() + '</thead>' + '</table>' + '</div>';\n        };\n\n        DayTableMixin.prototype.renderHeadIntroHtml = function () {\n          return this.renderIntroHtml(); // fall back to generic\n        };\n\n        DayTableMixin.prototype.renderHeadTrHtml = function () {\n          return '' + '<tr>' + (this.isRTL ? '' : this.renderHeadIntroHtml()) + this.renderHeadDateCellsHtml() + (this.isRTL ? this.renderHeadIntroHtml() : '') + '</tr>';\n        };\n\n        DayTableMixin.prototype.renderHeadDateCellsHtml = function () {\n          var htmls = [];\n          var col;\n          var date;\n\n          for (col = 0; col < this.colCnt; col++) {\n            date = this.getCellDate(0, col);\n            htmls.push(this.renderHeadDateCellHtml(date));\n          }\n\n          return htmls.join('');\n        }; // TODO: when internalApiVersion, accept an object for HTML attributes\n        // (colspan should be no different)\n\n\n        DayTableMixin.prototype.renderHeadDateCellHtml = function (date, colspan, otherAttrs) {\n          var t = this;\n          var view = t.view;\n          var isDateValid = t.dateProfile.activeUnzonedRange.containsDate(date); // TODO: called too frequently. cache somehow.\n\n          var classNames = ['fc-day-header', view.calendar.theme.getClass('widgetHeader')];\n          var innerHtml;\n\n          if (typeof t.opt('columnHeaderHtml') === 'function') {\n            innerHtml = t.opt('columnHeaderHtml')(date);\n          } else if (typeof t.opt('columnHeaderText') === 'function') {\n            innerHtml = util_1.htmlEscape(t.opt('columnHeaderText')(date));\n          } else {\n            innerHtml = util_1.htmlEscape(date.format(t.colHeadFormat));\n          } // if only one row of days, the classNames on the header can represent the specific days beneath\n\n\n          if (t.rowCnt === 1) {\n            classNames = classNames.concat( // includes the day-of-week class\n            // noThemeHighlight=true (don't highlight the header)\n            t.getDayClasses(date, true));\n          } else {\n            classNames.push('fc-' + util_1.dayIDs[date.day()]); // only add the day-of-week class\n          }\n\n          return '' + '<th class=\"' + classNames.join(' ') + '\"' + ((isDateValid && t.rowCnt) === 1 ? ' data-date=\"' + date.format('YYYY-MM-DD') + '\"' : '') + (colspan > 1 ? ' colspan=\"' + colspan + '\"' : '') + (otherAttrs ? ' ' + otherAttrs : '') + '>' + (isDateValid ? // don't make a link if the heading could represent multiple days, or if there's only one day (forceOff)\n          view.buildGotoAnchorHtml({\n            date: date,\n            forceOff: t.rowCnt > 1 || t.colCnt === 1\n          }, innerHtml) : // if not valid, display text, but no link\n          innerHtml) + '</th>';\n        };\n        /* Background Rendering\r\n        ------------------------------------------------------------------------------------------------------------------*/\n\n\n        DayTableMixin.prototype.renderBgTrHtml = function (row) {\n          return '' + '<tr>' + (this.isRTL ? '' : this.renderBgIntroHtml(row)) + this.renderBgCellsHtml(row) + (this.isRTL ? this.renderBgIntroHtml(row) : '') + '</tr>';\n        };\n\n        DayTableMixin.prototype.renderBgIntroHtml = function (row) {\n          return this.renderIntroHtml(); // fall back to generic\n        };\n\n        DayTableMixin.prototype.renderBgCellsHtml = function (row) {\n          var htmls = [];\n          var col;\n          var date;\n\n          for (col = 0; col < this.colCnt; col++) {\n            date = this.getCellDate(row, col);\n            htmls.push(this.renderBgCellHtml(date));\n          }\n\n          return htmls.join('');\n        };\n\n        DayTableMixin.prototype.renderBgCellHtml = function (date, otherAttrs) {\n          var t = this;\n          var view = t.view;\n          var isDateValid = t.dateProfile.activeUnzonedRange.containsDate(date); // TODO: called too frequently. cache somehow.\n\n          var classes = t.getDayClasses(date);\n          classes.unshift('fc-day', view.calendar.theme.getClass('widgetContent'));\n          return '<td class=\"' + classes.join(' ') + '\"' + (isDateValid ? ' data-date=\"' + date.format('YYYY-MM-DD') + '\"' : // if date has a time, won't format it\n          '') + (otherAttrs ? ' ' + otherAttrs : '') + '></td>';\n        };\n        /* Generic\r\n        ------------------------------------------------------------------------------------------------------------------*/\n\n\n        DayTableMixin.prototype.renderIntroHtml = function () {// Generates the default HTML intro for any row. User classes should override\n        }; // TODO: a generic method for dealing with <tr>, RTL, intro\n        // when increment internalApiVersion\n        // wrapTr (scheduler)\n\n        /* Utils\r\n        ------------------------------------------------------------------------------------------------------------------*/\n        // Applies the generic \"intro\" and \"outro\" HTML to the given cells.\n        // Intro means the leftmost cell when the calendar is LTR and the rightmost cell when RTL. Vice-versa for outro.\n\n\n        DayTableMixin.prototype.bookendCells = function (trEl) {\n          var introHtml = this.renderIntroHtml();\n\n          if (introHtml) {\n            if (this.isRTL) {\n              trEl.append(introHtml);\n            } else {\n              trEl.prepend(introHtml);\n            }\n          }\n        };\n\n        return DayTableMixin;\n      }(Mixin_1[\"default\"]);\n\n      exports[\"default\"] = DayTableMixin;\n      /***/\n    },\n    /* 61 */\n\n    /***/\n    function (module, exports) {\n      Object.defineProperty(exports, \"__esModule\", {\n        value: true\n      });\n\n      var BusinessHourRenderer =\n      /** @class */\n      function () {\n        /*\r\n        component implements:\r\n          - eventRangesToEventFootprints\r\n          - eventFootprintsToSegs\r\n        */\n        function BusinessHourRenderer(component, fillRenderer) {\n          this.component = component;\n          this.fillRenderer = fillRenderer;\n        }\n\n        BusinessHourRenderer.prototype.render = function (businessHourGenerator) {\n          var component = this.component;\n\n          var unzonedRange = component._getDateProfile().activeUnzonedRange;\n\n          var eventInstanceGroup = businessHourGenerator.buildEventInstanceGroup(component.hasAllDayBusinessHours, unzonedRange);\n          var eventFootprints = eventInstanceGroup ? component.eventRangesToEventFootprints(eventInstanceGroup.sliceRenderRanges(unzonedRange)) : [];\n          this.renderEventFootprints(eventFootprints);\n        };\n\n        BusinessHourRenderer.prototype.renderEventFootprints = function (eventFootprints) {\n          var segs = this.component.eventFootprintsToSegs(eventFootprints);\n          this.renderSegs(segs);\n          this.segs = segs;\n        };\n\n        BusinessHourRenderer.prototype.renderSegs = function (segs) {\n          if (this.fillRenderer) {\n            this.fillRenderer.renderSegs('businessHours', segs, {\n              getClasses: function getClasses(seg) {\n                return ['fc-nonbusiness', 'fc-bgevent'];\n              }\n            });\n          }\n        };\n\n        BusinessHourRenderer.prototype.unrender = function () {\n          if (this.fillRenderer) {\n            this.fillRenderer.unrender('businessHours');\n          }\n\n          this.segs = null;\n        };\n\n        BusinessHourRenderer.prototype.getSegs = function () {\n          return this.segs || [];\n        };\n\n        return BusinessHourRenderer;\n      }();\n\n      exports[\"default\"] = BusinessHourRenderer;\n      /***/\n    },\n    /* 62 */\n\n    /***/\n    function (module, exports, __webpack_require__) {\n      Object.defineProperty(exports, \"__esModule\", {\n        value: true\n      });\n\n      var $ = __webpack_require__(3);\n\n      var util_1 = __webpack_require__(4);\n\n      var FillRenderer =\n      /** @class */\n      function () {\n        function FillRenderer(component) {\n          this.fillSegTag = 'div';\n          this.component = component;\n          this.elsByFill = {};\n        }\n\n        FillRenderer.prototype.renderFootprint = function (type, componentFootprint, props) {\n          this.renderSegs(type, this.component.componentFootprintToSegs(componentFootprint), props);\n        };\n\n        FillRenderer.prototype.renderSegs = function (type, segs, props) {\n          var els;\n          segs = this.buildSegEls(type, segs, props); // assignes `.el` to each seg. returns successfully rendered segs\n\n          els = this.attachSegEls(type, segs);\n\n          if (els) {\n            this.reportEls(type, els);\n          }\n\n          return segs;\n        }; // Unrenders a specific type of fill that is currently rendered on the grid\n\n\n        FillRenderer.prototype.unrender = function (type) {\n          var el = this.elsByFill[type];\n\n          if (el) {\n            el.remove();\n            delete this.elsByFill[type];\n          }\n        }; // Renders and assigns an `el` property for each fill segment. Generic enough to work with different types.\n        // Only returns segments that successfully rendered.\n\n\n        FillRenderer.prototype.buildSegEls = function (type, segs, props) {\n          var _this = this;\n\n          var html = '';\n          var renderedSegs = [];\n          var i;\n\n          if (segs.length) {\n            // build a large concatenation of segment HTML\n            for (i = 0; i < segs.length; i++) {\n              html += this.buildSegHtml(type, segs[i], props);\n            } // Grab individual elements from the combined HTML string. Use each as the default rendering.\n            // Then, compute the 'el' for each segment.\n\n\n            $(html).each(function (i, node) {\n              var seg = segs[i];\n              var el = $(node); // allow custom filter methods per-type\n\n              if (props.filterEl) {\n                el = props.filterEl(seg, el);\n              }\n\n              if (el) {\n                // custom filters did not cancel the render\n                el = $(el); // allow custom filter to return raw DOM node\n                // correct element type? (would be bad if a non-TD were inserted into a table for example)\n\n                if (el.is(_this.fillSegTag)) {\n                  seg.el = el;\n                  renderedSegs.push(seg);\n                }\n              }\n            });\n          }\n\n          return renderedSegs;\n        }; // Builds the HTML needed for one fill segment. Generic enough to work with different types.\n\n\n        FillRenderer.prototype.buildSegHtml = function (type, seg, props) {\n          // custom hooks per-type\n          var classes = props.getClasses ? props.getClasses(seg) : [];\n          var css = util_1.cssToStr(props.getCss ? props.getCss(seg) : {});\n          return '<' + this.fillSegTag + (classes.length ? ' class=\"' + classes.join(' ') + '\"' : '') + (css ? ' style=\"' + css + '\"' : '') + ' />';\n        }; // Should return wrapping DOM structure\n\n\n        FillRenderer.prototype.attachSegEls = function (type, segs) {// subclasses must implement\n        };\n\n        FillRenderer.prototype.reportEls = function (type, nodes) {\n          if (this.elsByFill[type]) {\n            this.elsByFill[type] = this.elsByFill[type].add(nodes);\n          } else {\n            this.elsByFill[type] = $(nodes);\n          }\n        };\n\n        return FillRenderer;\n      }();\n\n      exports[\"default\"] = FillRenderer;\n      /***/\n    },\n    /* 63 */\n\n    /***/\n    function (module, exports, __webpack_require__) {\n      Object.defineProperty(exports, \"__esModule\", {\n        value: true\n      });\n\n      var SingleEventDef_1 = __webpack_require__(9);\n\n      var EventFootprint_1 = __webpack_require__(34);\n\n      var EventSource_1 = __webpack_require__(6);\n\n      var HelperRenderer =\n      /** @class */\n      function () {\n        function HelperRenderer(component, eventRenderer) {\n          this.view = component._getView();\n          this.component = component;\n          this.eventRenderer = eventRenderer;\n        }\n\n        HelperRenderer.prototype.renderComponentFootprint = function (componentFootprint) {\n          this.renderEventFootprints([this.fabricateEventFootprint(componentFootprint)]);\n        };\n\n        HelperRenderer.prototype.renderEventDraggingFootprints = function (eventFootprints, sourceSeg, isTouch) {\n          this.renderEventFootprints(eventFootprints, sourceSeg, 'fc-dragging', isTouch ? null : this.view.opt('dragOpacity'));\n        };\n\n        HelperRenderer.prototype.renderEventResizingFootprints = function (eventFootprints, sourceSeg, isTouch) {\n          this.renderEventFootprints(eventFootprints, sourceSeg, 'fc-resizing');\n        };\n\n        HelperRenderer.prototype.renderEventFootprints = function (eventFootprints, sourceSeg, extraClassNames, opacity) {\n          var segs = this.component.eventFootprintsToSegs(eventFootprints);\n          var classNames = 'fc-helper ' + (extraClassNames || '');\n          var i; // assigns each seg's el and returns a subset of segs that were rendered\n\n          segs = this.eventRenderer.renderFgSegEls(segs);\n\n          for (i = 0; i < segs.length; i++) {\n            segs[i].el.addClass(classNames);\n          }\n\n          if (opacity != null) {\n            for (i = 0; i < segs.length; i++) {\n              segs[i].el.css('opacity', opacity);\n            }\n          }\n\n          this.helperEls = this.renderSegs(segs, sourceSeg);\n        };\n        /*\r\n        Must return all mock event elements\r\n        */\n\n\n        HelperRenderer.prototype.renderSegs = function (segs, sourceSeg) {// Subclasses must implement\n        };\n\n        HelperRenderer.prototype.unrender = function () {\n          if (this.helperEls) {\n            this.helperEls.remove();\n            this.helperEls = null;\n          }\n        };\n\n        HelperRenderer.prototype.fabricateEventFootprint = function (componentFootprint) {\n          var calendar = this.view.calendar;\n          var eventDateProfile = calendar.footprintToDateProfile(componentFootprint);\n          var dummyEvent = new SingleEventDef_1[\"default\"](new EventSource_1[\"default\"](calendar));\n          var dummyInstance;\n          dummyEvent.dateProfile = eventDateProfile;\n          dummyInstance = dummyEvent.buildInstance();\n          return new EventFootprint_1[\"default\"](componentFootprint, dummyEvent, dummyInstance);\n        };\n\n        return HelperRenderer;\n      }();\n\n      exports[\"default\"] = HelperRenderer;\n      /***/\n    },\n    /* 64 */\n\n    /***/\n    function (module, exports, __webpack_require__) {\n      Object.defineProperty(exports, \"__esModule\", {\n        value: true\n      });\n\n      var tslib_1 = __webpack_require__(2);\n\n      var GlobalEmitter_1 = __webpack_require__(23);\n\n      var Interaction_1 = __webpack_require__(14);\n\n      var EventPointing =\n      /** @class */\n      function (_super) {\n        tslib_1.__extends(EventPointing, _super);\n\n        function EventPointing() {\n          return _super !== null && _super.apply(this, arguments) || this;\n        }\n        /*\r\n        component must implement:\r\n          - publiclyTrigger\r\n        */\n\n\n        EventPointing.prototype.bindToEl = function (el) {\n          var component = this.component;\n          component.bindSegHandlerToEl(el, 'click', this.handleClick.bind(this));\n          component.bindSegHandlerToEl(el, 'mouseenter', this.handleMouseover.bind(this));\n          component.bindSegHandlerToEl(el, 'mouseleave', this.handleMouseout.bind(this));\n        };\n\n        EventPointing.prototype.handleClick = function (seg, ev) {\n          var res = this.component.publiclyTrigger('eventClick', {\n            context: seg.el[0],\n            args: [seg.footprint.getEventLegacy(), ev, this.view]\n          });\n\n          if (res === false) {\n            ev.preventDefault();\n          }\n        }; // Updates internal state and triggers handlers for when an event element is moused over\n\n\n        EventPointing.prototype.handleMouseover = function (seg, ev) {\n          if (!GlobalEmitter_1[\"default\"].get().shouldIgnoreMouse() && !this.mousedOverSeg) {\n            this.mousedOverSeg = seg; // TODO: move to EventSelecting's responsibility\n\n            if (this.view.isEventDefResizable(seg.footprint.eventDef)) {\n              seg.el.addClass('fc-allow-mouse-resize');\n            }\n\n            this.component.publiclyTrigger('eventMouseover', {\n              context: seg.el[0],\n              args: [seg.footprint.getEventLegacy(), ev, this.view]\n            });\n          }\n        }; // Updates internal state and triggers handlers for when an event element is moused out.\n        // Can be given no arguments, in which case it will mouseout the segment that was previously moused over.\n\n\n        EventPointing.prototype.handleMouseout = function (seg, ev) {\n          if (this.mousedOverSeg) {\n            this.mousedOverSeg = null; // TODO: move to EventSelecting's responsibility\n\n            if (this.view.isEventDefResizable(seg.footprint.eventDef)) {\n              seg.el.removeClass('fc-allow-mouse-resize');\n            }\n\n            this.component.publiclyTrigger('eventMouseout', {\n              context: seg.el[0],\n              args: [seg.footprint.getEventLegacy(), ev || {}, this.view]\n            });\n          }\n        };\n\n        EventPointing.prototype.end = function () {\n          if (this.mousedOverSeg) {\n            this.handleMouseout(this.mousedOverSeg);\n          }\n        };\n\n        return EventPointing;\n      }(Interaction_1[\"default\"]);\n\n      exports[\"default\"] = EventPointing;\n      /***/\n    },\n    /* 65 */\n\n    /***/\n    function (module, exports, __webpack_require__) {\n      Object.defineProperty(exports, \"__esModule\", {\n        value: true\n      });\n\n      var tslib_1 = __webpack_require__(2);\n\n      var Mixin_1 = __webpack_require__(15);\n\n      var DateClicking_1 = __webpack_require__(237);\n\n      var DateSelecting_1 = __webpack_require__(236);\n\n      var EventPointing_1 = __webpack_require__(64);\n\n      var EventDragging_1 = __webpack_require__(235);\n\n      var EventResizing_1 = __webpack_require__(234);\n\n      var ExternalDropping_1 = __webpack_require__(233);\n\n      var StandardInteractionsMixin =\n      /** @class */\n      function (_super) {\n        tslib_1.__extends(StandardInteractionsMixin, _super);\n\n        function StandardInteractionsMixin() {\n          return _super !== null && _super.apply(this, arguments) || this;\n        }\n\n        return StandardInteractionsMixin;\n      }(Mixin_1[\"default\"]);\n\n      exports[\"default\"] = StandardInteractionsMixin;\n      StandardInteractionsMixin.prototype.dateClickingClass = DateClicking_1[\"default\"];\n      StandardInteractionsMixin.prototype.dateSelectingClass = DateSelecting_1[\"default\"];\n      StandardInteractionsMixin.prototype.eventPointingClass = EventPointing_1[\"default\"];\n      StandardInteractionsMixin.prototype.eventDraggingClass = EventDragging_1[\"default\"];\n      StandardInteractionsMixin.prototype.eventResizingClass = EventResizing_1[\"default\"];\n      StandardInteractionsMixin.prototype.externalDroppingClass = ExternalDropping_1[\"default\"];\n      /***/\n    },\n    /* 66 */\n\n    /***/\n    function (module, exports, __webpack_require__) {\n      Object.defineProperty(exports, \"__esModule\", {\n        value: true\n      });\n\n      var tslib_1 = __webpack_require__(2);\n\n      var $ = __webpack_require__(3);\n\n      var util_1 = __webpack_require__(4);\n\n      var CoordCache_1 = __webpack_require__(58);\n\n      var Popover_1 = __webpack_require__(227);\n\n      var UnzonedRange_1 = __webpack_require__(5);\n\n      var ComponentFootprint_1 = __webpack_require__(12);\n\n      var EventFootprint_1 = __webpack_require__(34);\n\n      var BusinessHourRenderer_1 = __webpack_require__(61);\n\n      var StandardInteractionsMixin_1 = __webpack_require__(65);\n\n      var InteractiveDateComponent_1 = __webpack_require__(42);\n\n      var DayTableMixin_1 = __webpack_require__(60);\n\n      var DayGridEventRenderer_1 = __webpack_require__(243);\n\n      var DayGridHelperRenderer_1 = __webpack_require__(244);\n\n      var DayGridFillRenderer_1 = __webpack_require__(245);\n      /* A component that renders a grid of whole-days that runs horizontally. There can be multiple rows, one per week.\r\n      ----------------------------------------------------------------------------------------------------------------------*/\n\n\n      var DayGrid =\n      /** @class */\n      function (_super) {\n        tslib_1.__extends(DayGrid, _super);\n\n        function DayGrid(view) {\n          var _this = _super.call(this, view) || this;\n\n          _this.cellWeekNumbersVisible = false; // display week numbers in day cell?\n\n          _this.bottomCoordPadding = 0; // hack for extending the hit area for the last row of the coordinate grid\n          // isRigid determines whether the individual rows should ignore the contents and be a constant height.\n          // Relies on the view's colCnt and rowCnt. In the future, this component should probably be self-sufficient.\n\n          _this.isRigid = false;\n          _this.hasAllDayBusinessHours = true;\n          return _this;\n        } // Slices up the given span (unzoned start/end with other misc data) into an array of segments\n\n\n        DayGrid.prototype.componentFootprintToSegs = function (componentFootprint) {\n          var segs = this.sliceRangeByRow(componentFootprint.unzonedRange);\n          var i;\n          var seg;\n\n          for (i = 0; i < segs.length; i++) {\n            seg = segs[i];\n\n            if (this.isRTL) {\n              seg.leftCol = this.daysPerRow - 1 - seg.lastRowDayIndex;\n              seg.rightCol = this.daysPerRow - 1 - seg.firstRowDayIndex;\n            } else {\n              seg.leftCol = seg.firstRowDayIndex;\n              seg.rightCol = seg.lastRowDayIndex;\n            }\n          }\n\n          return segs;\n        };\n        /* Date Rendering\r\n        ------------------------------------------------------------------------------------------------------------------*/\n\n\n        DayGrid.prototype.renderDates = function (dateProfile) {\n          this.dateProfile = dateProfile;\n          this.updateDayTable();\n          this.renderGrid();\n        };\n\n        DayGrid.prototype.unrenderDates = function () {\n          this.removeSegPopover();\n        }; // Renders the rows and columns into the component's `this.el`, which should already be assigned.\n\n\n        DayGrid.prototype.renderGrid = function () {\n          var view = this.view;\n          var rowCnt = this.rowCnt;\n          var colCnt = this.colCnt;\n          var html = '';\n          var row;\n          var col;\n\n          if (this.headContainerEl) {\n            this.headContainerEl.html(this.renderHeadHtml());\n          }\n\n          for (row = 0; row < rowCnt; row++) {\n            html += this.renderDayRowHtml(row, this.isRigid);\n          }\n\n          this.el.html(html);\n          this.rowEls = this.el.find('.fc-row');\n          this.cellEls = this.el.find('.fc-day, .fc-disabled-day');\n          this.rowCoordCache = new CoordCache_1[\"default\"]({\n            els: this.rowEls,\n            isVertical: true\n          });\n          this.colCoordCache = new CoordCache_1[\"default\"]({\n            els: this.cellEls.slice(0, this.colCnt),\n            isHorizontal: true\n          }); // trigger dayRender with each cell's element\n\n          for (row = 0; row < rowCnt; row++) {\n            for (col = 0; col < colCnt; col++) {\n              this.publiclyTrigger('dayRender', {\n                context: view,\n                args: [this.getCellDate(row, col), this.getCellEl(row, col), view]\n              });\n            }\n          }\n        }; // Generates the HTML for a single row, which is a div that wraps a table.\n        // `row` is the row number.\n\n\n        DayGrid.prototype.renderDayRowHtml = function (row, isRigid) {\n          var theme = this.view.calendar.theme;\n          var classes = ['fc-row', 'fc-week', theme.getClass('dayRow')];\n\n          if (isRigid) {\n            classes.push('fc-rigid');\n          }\n\n          return '' + '<div class=\"' + classes.join(' ') + '\">' + '<div class=\"fc-bg\">' + '<table class=\"' + theme.getClass('tableGrid') + '\">' + this.renderBgTrHtml(row) + '</table>' + '</div>' + '<div class=\"fc-content-skeleton\">' + '<table>' + (this.getIsNumbersVisible() ? '<thead>' + this.renderNumberTrHtml(row) + '</thead>' : '') + '</table>' + '</div>' + '</div>';\n        };\n\n        DayGrid.prototype.getIsNumbersVisible = function () {\n          return this.getIsDayNumbersVisible() || this.cellWeekNumbersVisible;\n        };\n\n        DayGrid.prototype.getIsDayNumbersVisible = function () {\n          return this.rowCnt > 1;\n        };\n        /* Grid Number Rendering\r\n        ------------------------------------------------------------------------------------------------------------------*/\n\n\n        DayGrid.prototype.renderNumberTrHtml = function (row) {\n          return '' + '<tr>' + (this.isRTL ? '' : this.renderNumberIntroHtml(row)) + this.renderNumberCellsHtml(row) + (this.isRTL ? this.renderNumberIntroHtml(row) : '') + '</tr>';\n        };\n\n        DayGrid.prototype.renderNumberIntroHtml = function (row) {\n          return this.renderIntroHtml();\n        };\n\n        DayGrid.prototype.renderNumberCellsHtml = function (row) {\n          var htmls = [];\n          var col;\n          var date;\n\n          for (col = 0; col < this.colCnt; col++) {\n            date = this.getCellDate(row, col);\n            htmls.push(this.renderNumberCellHtml(date));\n          }\n\n          return htmls.join('');\n        }; // Generates the HTML for the <td>s of the \"number\" row in the DayGrid's content skeleton.\n        // The number row will only exist if either day numbers or week numbers are turned on.\n\n\n        DayGrid.prototype.renderNumberCellHtml = function (date) {\n          var view = this.view;\n          var html = '';\n          var isDateValid = this.dateProfile.activeUnzonedRange.containsDate(date); // TODO: called too frequently. cache somehow.\n\n          var isDayNumberVisible = this.getIsDayNumbersVisible() && isDateValid;\n          var classes;\n          var weekCalcFirstDoW;\n\n          if (!isDayNumberVisible && !this.cellWeekNumbersVisible) {\n            // no numbers in day cell (week number must be along the side)\n            return '<td/>'; //  will create an empty space above events :(\n          }\n\n          classes = this.getDayClasses(date);\n          classes.unshift('fc-day-top');\n\n          if (this.cellWeekNumbersVisible) {\n            // To determine the day of week number change under ISO, we cannot\n            // rely on moment.js methods such as firstDayOfWeek() or weekday(),\n            // because they rely on the locale's dow (possibly overridden by\n            // our firstDay option), which may not be Monday. We cannot change\n            // dow, because that would affect the calendar start day as well.\n            if (date._locale._fullCalendar_weekCalc === 'ISO') {\n              weekCalcFirstDoW = 1; // Monday by ISO 8601 definition\n            } else {\n              weekCalcFirstDoW = date._locale.firstDayOfWeek();\n            }\n          }\n\n          html += '<td class=\"' + classes.join(' ') + '\"' + (isDateValid ? ' data-date=\"' + date.format() + '\"' : '') + '>';\n\n          if (this.cellWeekNumbersVisible && date.day() === weekCalcFirstDoW) {\n            html += view.buildGotoAnchorHtml({\n              date: date,\n              type: 'week'\n            }, {\n              'class': 'fc-week-number'\n            }, date.format('w') // inner HTML\n            );\n          }\n\n          if (isDayNumberVisible) {\n            html += view.buildGotoAnchorHtml(date, {\n              'class': 'fc-day-number'\n            }, date.format('D') // inner HTML\n            );\n          }\n\n          html += '</td>';\n          return html;\n        };\n        /* Hit System\r\n        ------------------------------------------------------------------------------------------------------------------*/\n\n\n        DayGrid.prototype.prepareHits = function () {\n          this.colCoordCache.build();\n          this.rowCoordCache.build();\n          this.rowCoordCache.bottoms[this.rowCnt - 1] += this.bottomCoordPadding; // hack\n        };\n\n        DayGrid.prototype.releaseHits = function () {\n          this.colCoordCache.clear();\n          this.rowCoordCache.clear();\n        };\n\n        DayGrid.prototype.queryHit = function (leftOffset, topOffset) {\n          if (this.colCoordCache.isLeftInBounds(leftOffset) && this.rowCoordCache.isTopInBounds(topOffset)) {\n            var col = this.colCoordCache.getHorizontalIndex(leftOffset);\n            var row = this.rowCoordCache.getVerticalIndex(topOffset);\n\n            if (row != null && col != null) {\n              return this.getCellHit(row, col);\n            }\n          }\n        };\n\n        DayGrid.prototype.getHitFootprint = function (hit) {\n          var range = this.getCellRange(hit.row, hit.col);\n          return new ComponentFootprint_1[\"default\"](new UnzonedRange_1[\"default\"](range.start, range.end), true // all-day?\n          );\n        };\n\n        DayGrid.prototype.getHitEl = function (hit) {\n          return this.getCellEl(hit.row, hit.col);\n        };\n        /* Cell System\r\n        ------------------------------------------------------------------------------------------------------------------*/\n        // FYI: the first column is the leftmost column, regardless of date\n\n\n        DayGrid.prototype.getCellHit = function (row, col) {\n          return {\n            row: row,\n            col: col,\n            component: this,\n            left: this.colCoordCache.getLeftOffset(col),\n            right: this.colCoordCache.getRightOffset(col),\n            top: this.rowCoordCache.getTopOffset(row),\n            bottom: this.rowCoordCache.getBottomOffset(row)\n          };\n        };\n\n        DayGrid.prototype.getCellEl = function (row, col) {\n          return this.cellEls.eq(row * this.colCnt + col);\n        };\n        /* Event Rendering\r\n        ------------------------------------------------------------------------------------------------------------------*/\n        // Unrenders all events currently rendered on the grid\n\n\n        DayGrid.prototype.executeEventUnrender = function () {\n          this.removeSegPopover(); // removes the \"more..\" events popover\n\n          _super.prototype.executeEventUnrender.call(this);\n        }; // Retrieves all rendered segment objects currently rendered on the grid\n\n\n        DayGrid.prototype.getOwnEventSegs = function () {\n          // append the segments from the \"more...\" popover\n          return _super.prototype.getOwnEventSegs.call(this).concat(this.popoverSegs || []);\n        };\n        /* Event Drag Visualization\r\n        ------------------------------------------------------------------------------------------------------------------*/\n        // Renders a visual indication of an event or external element being dragged.\n        // `eventLocation` has zoned start and end (optional)\n\n\n        DayGrid.prototype.renderDrag = function (eventFootprints, seg, isTouch) {\n          var i;\n\n          for (i = 0; i < eventFootprints.length; i++) {\n            this.renderHighlight(eventFootprints[i].componentFootprint);\n          } // render drags from OTHER components as helpers\n\n\n          if (eventFootprints.length && seg && seg.component !== this) {\n            this.helperRenderer.renderEventDraggingFootprints(eventFootprints, seg, isTouch);\n            return true; // signal helpers rendered\n          }\n        }; // Unrenders any visual indication of a hovering event\n\n\n        DayGrid.prototype.unrenderDrag = function () {\n          this.unrenderHighlight();\n          this.helperRenderer.unrender();\n        };\n        /* Event Resize Visualization\r\n        ------------------------------------------------------------------------------------------------------------------*/\n        // Renders a visual indication of an event being resized\n\n\n        DayGrid.prototype.renderEventResize = function (eventFootprints, seg, isTouch) {\n          var i;\n\n          for (i = 0; i < eventFootprints.length; i++) {\n            this.renderHighlight(eventFootprints[i].componentFootprint);\n          }\n\n          this.helperRenderer.renderEventResizingFootprints(eventFootprints, seg, isTouch);\n        }; // Unrenders a visual indication of an event being resized\n\n\n        DayGrid.prototype.unrenderEventResize = function () {\n          this.unrenderHighlight();\n          this.helperRenderer.unrender();\n        };\n        /* More+ Link Popover\r\n        ------------------------------------------------------------------------------------------------------------------*/\n\n\n        DayGrid.prototype.removeSegPopover = function () {\n          if (this.segPopover) {\n            this.segPopover.hide(); // in handler, will call segPopover's removeElement\n          }\n        }; // Limits the number of \"levels\" (vertically stacking layers of events) for each row of the grid.\n        // `levelLimit` can be false (don't limit), a number, or true (should be computed).\n\n\n        DayGrid.prototype.limitRows = function (levelLimit) {\n          var rowStructs = this.eventRenderer.rowStructs || [];\n          var row; // row #\n\n          var rowLevelLimit;\n\n          for (row = 0; row < rowStructs.length; row++) {\n            this.unlimitRow(row);\n\n            if (!levelLimit) {\n              rowLevelLimit = false;\n            } else if (typeof levelLimit === 'number') {\n              rowLevelLimit = levelLimit;\n            } else {\n              rowLevelLimit = this.computeRowLevelLimit(row);\n            }\n\n            if (rowLevelLimit !== false) {\n              this.limitRow(row, rowLevelLimit);\n            }\n          }\n        }; // Computes the number of levels a row will accomodate without going outside its bounds.\n        // Assumes the row is \"rigid\" (maintains a constant height regardless of what is inside).\n        // `row` is the row number.\n\n\n        DayGrid.prototype.computeRowLevelLimit = function (row) {\n          var rowEl = this.rowEls.eq(row); // the containing \"fake\" row div\n\n          var rowHeight = rowEl.height(); // TODO: cache somehow?\n\n          var trEls = this.eventRenderer.rowStructs[row].tbodyEl.children();\n          var i;\n          var trEl;\n          var trHeight;\n\n          function iterInnerHeights(i, childNode) {\n            trHeight = Math.max(trHeight, $(childNode).outerHeight());\n          } // Reveal one level <tr> at a time and stop when we find one out of bounds\n\n\n          for (i = 0; i < trEls.length; i++) {\n            trEl = trEls.eq(i).removeClass('fc-limited'); // reset to original state (reveal)\n            // with rowspans>1 and IE8, trEl.outerHeight() would return the height of the largest cell,\n            // so instead, find the tallest inner content element.\n\n            trHeight = 0;\n            trEl.find('> td > :first-child').each(iterInnerHeights);\n\n            if (trEl.position().top + trHeight > rowHeight) {\n              return i;\n            }\n          }\n\n          return false; // should not limit at all\n        }; // Limits the given grid row to the maximum number of levels and injects \"more\" links if necessary.\n        // `row` is the row number.\n        // `levelLimit` is a number for the maximum (inclusive) number of levels allowed.\n\n\n        DayGrid.prototype.limitRow = function (row, levelLimit) {\n          var _this = this;\n\n          var rowStruct = this.eventRenderer.rowStructs[row];\n          var moreNodes = []; // array of \"more\" <a> links and <td> DOM nodes\n\n          var col = 0; // col #, left-to-right (not chronologically)\n\n          var levelSegs; // array of segment objects in the last allowable level, ordered left-to-right\n\n          var cellMatrix; // a matrix (by level, then column) of all <td> jQuery elements in the row\n\n          var limitedNodes; // array of temporarily hidden level <tr> and segment <td> DOM nodes\n\n          var i;\n          var seg;\n          var segsBelow; // array of segment objects below `seg` in the current `col`\n\n          var totalSegsBelow; // total number of segments below `seg` in any of the columns `seg` occupies\n\n          var colSegsBelow; // array of segment arrays, below seg, one for each column (offset from segs's first column)\n\n          var td;\n          var rowspan;\n          var segMoreNodes; // array of \"more\" <td> cells that will stand-in for the current seg's cell\n\n          var j;\n          var moreTd;\n          var moreWrap;\n          var moreLink; // Iterates through empty level cells and places \"more\" links inside if need be\n\n          var emptyCellsUntil = function emptyCellsUntil(endCol) {\n            while (col < endCol) {\n              segsBelow = _this.getCellSegs(row, col, levelLimit);\n\n              if (segsBelow.length) {\n                td = cellMatrix[levelLimit - 1][col];\n                moreLink = _this.renderMoreLink(row, col, segsBelow);\n                moreWrap = $('<div/>').append(moreLink);\n                td.append(moreWrap);\n                moreNodes.push(moreWrap[0]);\n              }\n\n              col++;\n            }\n          };\n\n          if (levelLimit && levelLimit < rowStruct.segLevels.length) {\n            // is it actually over the limit?\n            levelSegs = rowStruct.segLevels[levelLimit - 1];\n            cellMatrix = rowStruct.cellMatrix;\n            limitedNodes = rowStruct.tbodyEl.children().slice(levelLimit) // get level <tr> elements past the limit\n            .addClass('fc-limited').get(); // hide elements and get a simple DOM-nodes array\n            // iterate though segments in the last allowable level\n\n            for (i = 0; i < levelSegs.length; i++) {\n              seg = levelSegs[i];\n              emptyCellsUntil(seg.leftCol); // process empty cells before the segment\n              // determine *all* segments below `seg` that occupy the same columns\n\n              colSegsBelow = [];\n              totalSegsBelow = 0;\n\n              while (col <= seg.rightCol) {\n                segsBelow = this.getCellSegs(row, col, levelLimit);\n                colSegsBelow.push(segsBelow);\n                totalSegsBelow += segsBelow.length;\n                col++;\n              }\n\n              if (totalSegsBelow) {\n                // do we need to replace this segment with one or many \"more\" links?\n                td = cellMatrix[levelLimit - 1][seg.leftCol]; // the segment's parent cell\n\n                rowspan = td.attr('rowspan') || 1;\n                segMoreNodes = []; // make a replacement <td> for each column the segment occupies. will be one for each colspan\n\n                for (j = 0; j < colSegsBelow.length; j++) {\n                  moreTd = $('<td class=\"fc-more-cell\"/>').attr('rowspan', rowspan);\n                  segsBelow = colSegsBelow[j];\n                  moreLink = this.renderMoreLink(row, seg.leftCol + j, [seg].concat(segsBelow) // count seg as hidden too\n                  );\n                  moreWrap = $('<div/>').append(moreLink);\n                  moreTd.append(moreWrap);\n                  segMoreNodes.push(moreTd[0]);\n                  moreNodes.push(moreTd[0]);\n                }\n\n                td.addClass('fc-limited').after($(segMoreNodes)); // hide original <td> and inject replacements\n\n                limitedNodes.push(td[0]);\n              }\n            }\n\n            emptyCellsUntil(this.colCnt); // finish off the level\n\n            rowStruct.moreEls = $(moreNodes); // for easy undoing later\n\n            rowStruct.limitedEls = $(limitedNodes); // for easy undoing later\n          }\n        }; // Reveals all levels and removes all \"more\"-related elements for a grid's row.\n        // `row` is a row number.\n\n\n        DayGrid.prototype.unlimitRow = function (row) {\n          var rowStruct = this.eventRenderer.rowStructs[row];\n\n          if (rowStruct.moreEls) {\n            rowStruct.moreEls.remove();\n            rowStruct.moreEls = null;\n          }\n\n          if (rowStruct.limitedEls) {\n            rowStruct.limitedEls.removeClass('fc-limited');\n            rowStruct.limitedEls = null;\n          }\n        }; // Renders an <a> element that represents hidden event element for a cell.\n        // Responsible for attaching click handler as well.\n\n\n        DayGrid.prototype.renderMoreLink = function (row, col, hiddenSegs) {\n          var _this = this;\n\n          var view = this.view;\n          return $('<a class=\"fc-more\"/>').text(this.getMoreLinkText(hiddenSegs.length)).on('click', function (ev) {\n            var clickOption = _this.opt('eventLimitClick');\n\n            var date = _this.getCellDate(row, col);\n\n            var moreEl = $(ev.currentTarget);\n\n            var dayEl = _this.getCellEl(row, col);\n\n            var allSegs = _this.getCellSegs(row, col); // rescope the segments to be within the cell's date\n\n\n            var reslicedAllSegs = _this.resliceDaySegs(allSegs, date);\n\n            var reslicedHiddenSegs = _this.resliceDaySegs(hiddenSegs, date);\n\n            if (typeof clickOption === 'function') {\n              // the returned value can be an atomic option\n              clickOption = _this.publiclyTrigger('eventLimitClick', {\n                context: view,\n                args: [{\n                  date: date.clone(),\n                  dayEl: dayEl,\n                  moreEl: moreEl,\n                  segs: reslicedAllSegs,\n                  hiddenSegs: reslicedHiddenSegs\n                }, ev, view]\n              });\n            }\n\n            if (clickOption === 'popover') {\n              _this.showSegPopover(row, col, moreEl, reslicedAllSegs);\n            } else if (typeof clickOption === 'string') {\n              // a view name\n              view.calendar.zoomTo(date, clickOption);\n            }\n          });\n        }; // Reveals the popover that displays all events within a cell\n\n\n        DayGrid.prototype.showSegPopover = function (row, col, moreLink, segs) {\n          var _this = this;\n\n          var view = this.view;\n          var moreWrap = moreLink.parent(); // the <div> wrapper around the <a>\n\n          var topEl; // the element we want to match the top coordinate of\n\n          var options;\n\n          if (this.rowCnt === 1) {\n            topEl = view.el; // will cause the popover to cover any sort of header\n          } else {\n            topEl = this.rowEls.eq(row); // will align with top of row\n          }\n\n          options = {\n            className: 'fc-more-popover ' + view.calendar.theme.getClass('popover'),\n            content: this.renderSegPopoverContent(row, col, segs),\n            parentEl: view.el,\n            top: topEl.offset().top,\n            autoHide: true,\n            viewportConstrain: this.opt('popoverViewportConstrain'),\n            hide: function hide() {\n              // kill everything when the popover is hidden\n              // notify events to be removed\n              if (_this.popoverSegs) {\n                _this.triggerBeforeEventSegsDestroyed(_this.popoverSegs);\n              }\n\n              _this.segPopover.removeElement();\n\n              _this.segPopover = null;\n              _this.popoverSegs = null;\n            }\n          }; // Determine horizontal coordinate.\n          // We use the moreWrap instead of the <td> to avoid border confusion.\n\n          if (this.isRTL) {\n            options.right = moreWrap.offset().left + moreWrap.outerWidth() + 1; // +1 to be over cell border\n          } else {\n            options.left = moreWrap.offset().left - 1; // -1 to be over cell border\n          }\n\n          this.segPopover = new Popover_1[\"default\"](options);\n          this.segPopover.show(); // the popover doesn't live within the grid's container element, and thus won't get the event\n          // delegated-handlers for free. attach event-related handlers to the popover.\n\n          this.bindAllSegHandlersToEl(this.segPopover.el);\n          this.triggerAfterEventSegsRendered(segs);\n        }; // Builds the inner DOM contents of the segment popover\n\n\n        DayGrid.prototype.renderSegPopoverContent = function (row, col, segs) {\n          var view = this.view;\n          var theme = view.calendar.theme;\n          var title = this.getCellDate(row, col).format(this.opt('dayPopoverFormat'));\n          var content = $('<div class=\"fc-header ' + theme.getClass('popoverHeader') + '\">' + '<span class=\"fc-close ' + theme.getIconClass('close') + '\"></span>' + '<span class=\"fc-title\">' + util_1.htmlEscape(title) + '</span>' + '<div class=\"fc-clear\"/>' + '</div>' + '<div class=\"fc-body ' + theme.getClass('popoverContent') + '\">' + '<div class=\"fc-event-container\"></div>' + '</div>');\n          var segContainer = content.find('.fc-event-container');\n          var i; // render each seg's `el` and only return the visible segs\n\n          segs = this.eventRenderer.renderFgSegEls(segs, true); // disableResizing=true\n\n          this.popoverSegs = segs;\n\n          for (i = 0; i < segs.length; i++) {\n            // because segments in the popover are not part of a grid coordinate system, provide a hint to any\n            // grids that want to do drag-n-drop about which cell it came from\n            this.hitsNeeded();\n            segs[i].hit = this.getCellHit(row, col);\n            this.hitsNotNeeded();\n            segContainer.append(segs[i].el);\n          }\n\n          return content;\n        }; // Given the events within an array of segment objects, reslice them to be in a single day\n\n\n        DayGrid.prototype.resliceDaySegs = function (segs, dayDate) {\n          var dayStart = dayDate.clone();\n          var dayEnd = dayStart.clone().add(1, 'days');\n          var dayRange = new UnzonedRange_1[\"default\"](dayStart, dayEnd);\n          var newSegs = [];\n          var i;\n          var seg;\n          var slicedRange;\n\n          for (i = 0; i < segs.length; i++) {\n            seg = segs[i];\n            slicedRange = seg.footprint.componentFootprint.unzonedRange.intersect(dayRange);\n\n            if (slicedRange) {\n              newSegs.push($.extend({}, seg, {\n                footprint: new EventFootprint_1[\"default\"](new ComponentFootprint_1[\"default\"](slicedRange, seg.footprint.componentFootprint.isAllDay), seg.footprint.eventDef, seg.footprint.eventInstance),\n                isStart: seg.isStart && slicedRange.isStart,\n                isEnd: seg.isEnd && slicedRange.isEnd\n              }));\n            }\n          } // force an order because eventsToSegs doesn't guarantee one\n          // TODO: research if still needed\n\n\n          this.eventRenderer.sortEventSegs(newSegs);\n          return newSegs;\n        }; // Generates the text that should be inside a \"more\" link, given the number of events it represents\n\n\n        DayGrid.prototype.getMoreLinkText = function (num) {\n          var opt = this.opt('eventLimitText');\n\n          if (typeof opt === 'function') {\n            return opt(num);\n          } else {\n            return '+' + num + ' ' + opt;\n          }\n        }; // Returns segments within a given cell.\n        // If `startLevel` is specified, returns only events including and below that level. Otherwise returns all segs.\n\n\n        DayGrid.prototype.getCellSegs = function (row, col, startLevel) {\n          var segMatrix = this.eventRenderer.rowStructs[row].segMatrix;\n          var level = startLevel || 0;\n          var segs = [];\n          var seg;\n\n          while (level < segMatrix.length) {\n            seg = segMatrix[level][col];\n\n            if (seg) {\n              segs.push(seg);\n            }\n\n            level++;\n          }\n\n          return segs;\n        };\n\n        return DayGrid;\n      }(InteractiveDateComponent_1[\"default\"]);\n\n      exports[\"default\"] = DayGrid;\n      DayGrid.prototype.eventRendererClass = DayGridEventRenderer_1[\"default\"];\n      DayGrid.prototype.businessHourRendererClass = BusinessHourRenderer_1[\"default\"];\n      DayGrid.prototype.helperRendererClass = DayGridHelperRenderer_1[\"default\"];\n      DayGrid.prototype.fillRendererClass = DayGridFillRenderer_1[\"default\"];\n      StandardInteractionsMixin_1[\"default\"].mixInto(DayGrid);\n      DayTableMixin_1[\"default\"].mixInto(DayGrid);\n      /***/\n    },\n    /* 67 */\n\n    /***/\n    function (module, exports, __webpack_require__) {\n      Object.defineProperty(exports, \"__esModule\", {\n        value: true\n      });\n\n      var tslib_1 = __webpack_require__(2);\n\n      var $ = __webpack_require__(3);\n\n      var util_1 = __webpack_require__(4);\n\n      var Scroller_1 = __webpack_require__(41);\n\n      var View_1 = __webpack_require__(43);\n\n      var BasicViewDateProfileGenerator_1 = __webpack_require__(68);\n\n      var DayGrid_1 = __webpack_require__(66);\n      /* An abstract class for the \"basic\" views, as well as month view. Renders one or more rows of day cells.\r\n      ----------------------------------------------------------------------------------------------------------------------*/\n      // It is a manager for a DayGrid subcomponent, which does most of the heavy lifting.\n      // It is responsible for managing width/height.\n\n\n      var BasicView =\n      /** @class */\n      function (_super) {\n        tslib_1.__extends(BasicView, _super);\n\n        function BasicView(calendar, viewSpec) {\n          var _this = _super.call(this, calendar, viewSpec) || this;\n\n          _this.dayGrid = _this.instantiateDayGrid();\n          _this.dayGrid.isRigid = _this.hasRigidRows();\n\n          if (_this.opt('weekNumbers')) {\n            if (_this.opt('weekNumbersWithinDays')) {\n              _this.dayGrid.cellWeekNumbersVisible = true;\n              _this.dayGrid.colWeekNumbersVisible = false;\n            } else {\n              _this.dayGrid.cellWeekNumbersVisible = false;\n              _this.dayGrid.colWeekNumbersVisible = true;\n            }\n          }\n\n          _this.addChild(_this.dayGrid);\n\n          _this.scroller = new Scroller_1[\"default\"]({\n            overflowX: 'hidden',\n            overflowY: 'auto'\n          });\n          return _this;\n        } // Generates the DayGrid object this view needs. Draws from this.dayGridClass\n\n\n        BasicView.prototype.instantiateDayGrid = function () {\n          // generate a subclass on the fly with BasicView-specific behavior\n          // TODO: cache this subclass\n          var subclass = makeDayGridSubclass(this.dayGridClass);\n          return new subclass(this);\n        };\n\n        BasicView.prototype.executeDateRender = function (dateProfile) {\n          this.dayGrid.breakOnWeeks = /year|month|week/.test(dateProfile.currentRangeUnit);\n\n          _super.prototype.executeDateRender.call(this, dateProfile);\n        };\n\n        BasicView.prototype.renderSkeleton = function () {\n          var dayGridContainerEl;\n          var dayGridEl;\n          this.el.addClass('fc-basic-view').html(this.renderSkeletonHtml());\n          this.scroller.render();\n          dayGridContainerEl = this.scroller.el.addClass('fc-day-grid-container');\n          dayGridEl = $('<div class=\"fc-day-grid\" />').appendTo(dayGridContainerEl);\n          this.el.find('.fc-body > tr > td').append(dayGridContainerEl);\n          this.dayGrid.headContainerEl = this.el.find('.fc-head-container');\n          this.dayGrid.setElement(dayGridEl);\n        };\n\n        BasicView.prototype.unrenderSkeleton = function () {\n          this.dayGrid.removeElement();\n          this.scroller.destroy();\n        }; // Builds the HTML skeleton for the view.\n        // The day-grid component will render inside of a container defined by this HTML.\n\n\n        BasicView.prototype.renderSkeletonHtml = function () {\n          var theme = this.calendar.theme;\n          return '' + '<table class=\"' + theme.getClass('tableGrid') + '\">' + (this.opt('columnHeader') ? '<thead class=\"fc-head\">' + '<tr>' + '<td class=\"fc-head-container ' + theme.getClass('widgetHeader') + '\">&nbsp;</td>' + '</tr>' + '</thead>' : '') + '<tbody class=\"fc-body\">' + '<tr>' + '<td class=\"' + theme.getClass('widgetContent') + '\"></td>' + '</tr>' + '</tbody>' + '</table>';\n        }; // Generates an HTML attribute string for setting the width of the week number column, if it is known\n\n\n        BasicView.prototype.weekNumberStyleAttr = function () {\n          if (this.weekNumberWidth != null) {\n            return 'style=\"width:' + this.weekNumberWidth + 'px\"';\n          }\n\n          return '';\n        }; // Determines whether each row should have a constant height\n\n\n        BasicView.prototype.hasRigidRows = function () {\n          var eventLimit = this.opt('eventLimit');\n          return eventLimit && typeof eventLimit !== 'number';\n        };\n        /* Dimensions\r\n        ------------------------------------------------------------------------------------------------------------------*/\n        // Refreshes the horizontal dimensions of the view\n\n\n        BasicView.prototype.updateSize = function (totalHeight, isAuto, isResize) {\n          var eventLimit = this.opt('eventLimit');\n          var headRowEl = this.dayGrid.headContainerEl.find('.fc-row');\n          var scrollerHeight;\n          var scrollbarWidths; // hack to give the view some height prior to dayGrid's columns being rendered\n          // TODO: separate setting height from scroller VS dayGrid.\n\n          if (!this.dayGrid.rowEls) {\n            if (!isAuto) {\n              scrollerHeight = this.computeScrollerHeight(totalHeight);\n              this.scroller.setHeight(scrollerHeight);\n            }\n\n            return;\n          }\n\n          _super.prototype.updateSize.call(this, totalHeight, isAuto, isResize);\n\n          if (this.dayGrid.colWeekNumbersVisible) {\n            // Make sure all week number cells running down the side have the same width.\n            // Record the width for cells created later.\n            this.weekNumberWidth = util_1.matchCellWidths(this.el.find('.fc-week-number'));\n          } // reset all heights to be natural\n\n\n          this.scroller.clear();\n          util_1.uncompensateScroll(headRowEl);\n          this.dayGrid.removeSegPopover(); // kill the \"more\" popover if displayed\n          // is the event limit a constant level number?\n\n          if (eventLimit && typeof eventLimit === 'number') {\n            this.dayGrid.limitRows(eventLimit); // limit the levels first so the height can redistribute after\n          } // distribute the height to the rows\n          // (totalHeight is a \"recommended\" value if isAuto)\n\n\n          scrollerHeight = this.computeScrollerHeight(totalHeight);\n          this.setGridHeight(scrollerHeight, isAuto); // is the event limit dynamically calculated?\n\n          if (eventLimit && typeof eventLimit !== 'number') {\n            this.dayGrid.limitRows(eventLimit); // limit the levels after the grid's row heights have been set\n          }\n\n          if (!isAuto) {\n            // should we force dimensions of the scroll container?\n            this.scroller.setHeight(scrollerHeight);\n            scrollbarWidths = this.scroller.getScrollbarWidths();\n\n            if (scrollbarWidths.left || scrollbarWidths.right) {\n              // using scrollbars?\n              util_1.compensateScroll(headRowEl, scrollbarWidths); // doing the scrollbar compensation might have created text overflow which created more height. redo\n\n              scrollerHeight = this.computeScrollerHeight(totalHeight);\n              this.scroller.setHeight(scrollerHeight);\n            } // guarantees the same scrollbar widths\n\n\n            this.scroller.lockOverflow(scrollbarWidths);\n          }\n        }; // given a desired total height of the view, returns what the height of the scroller should be\n\n\n        BasicView.prototype.computeScrollerHeight = function (totalHeight) {\n          return totalHeight - util_1.subtractInnerElHeight(this.el, this.scroller.el); // everything that's NOT the scroller\n        }; // Sets the height of just the DayGrid component in this view\n\n\n        BasicView.prototype.setGridHeight = function (height, isAuto) {\n          if (isAuto) {\n            util_1.undistributeHeight(this.dayGrid.rowEls); // let the rows be their natural height with no expanding\n          } else {\n            util_1.distributeHeight(this.dayGrid.rowEls, height, true); // true = compensate for height-hogging rows\n          }\n        };\n        /* Scroll\r\n        ------------------------------------------------------------------------------------------------------------------*/\n\n\n        BasicView.prototype.computeInitialDateScroll = function () {\n          return {\n            top: 0\n          };\n        };\n\n        BasicView.prototype.queryDateScroll = function () {\n          return {\n            top: this.scroller.getScrollTop()\n          };\n        };\n\n        BasicView.prototype.applyDateScroll = function (scroll) {\n          if (scroll.top !== undefined) {\n            this.scroller.setScrollTop(scroll.top);\n          }\n        };\n\n        return BasicView;\n      }(View_1[\"default\"]);\n\n      exports[\"default\"] = BasicView;\n      BasicView.prototype.dateProfileGeneratorClass = BasicViewDateProfileGenerator_1[\"default\"];\n      BasicView.prototype.dayGridClass = DayGrid_1[\"default\"]; // customize the rendering behavior of BasicView's dayGrid\n\n      function makeDayGridSubclass(SuperClass) {\n        return (\n          /** @class */\n          function (_super) {\n            tslib_1.__extends(SubClass, _super);\n\n            function SubClass() {\n              var _this = _super !== null && _super.apply(this, arguments) || this;\n\n              _this.colWeekNumbersVisible = false; // display week numbers along the side?\n\n              return _this;\n            } // Generates the HTML that will go before the day-of week header cells\n\n\n            SubClass.prototype.renderHeadIntroHtml = function () {\n              var view = this.view;\n\n              if (this.colWeekNumbersVisible) {\n                return '' + '<th class=\"fc-week-number ' + view.calendar.theme.getClass('widgetHeader') + '\" ' + view.weekNumberStyleAttr() + '>' + '<span>' + // needed for matchCellWidths\n                util_1.htmlEscape(this.opt('weekNumberTitle')) + '</span>' + '</th>';\n              }\n\n              return '';\n            }; // Generates the HTML that will go before content-skeleton cells that display the day/week numbers\n\n\n            SubClass.prototype.renderNumberIntroHtml = function (row) {\n              var view = this.view;\n              var weekStart = this.getCellDate(row, 0);\n\n              if (this.colWeekNumbersVisible) {\n                return '' + '<td class=\"fc-week-number\" ' + view.weekNumberStyleAttr() + '>' + view.buildGotoAnchorHtml( // aside from link, important for matchCellWidths\n                {\n                  date: weekStart,\n                  type: 'week',\n                  forceOff: this.colCnt === 1\n                }, weekStart.format('w') // inner HTML\n                ) + '</td>';\n              }\n\n              return '';\n            }; // Generates the HTML that goes before the day bg cells for each day-row\n\n\n            SubClass.prototype.renderBgIntroHtml = function () {\n              var view = this.view;\n\n              if (this.colWeekNumbersVisible) {\n                return '<td class=\"fc-week-number ' + view.calendar.theme.getClass('widgetContent') + '\" ' + view.weekNumberStyleAttr() + '></td>';\n              }\n\n              return '';\n            }; // Generates the HTML that goes before every other type of row generated by DayGrid.\n            // Affects helper-skeleton and highlight-skeleton rows.\n\n\n            SubClass.prototype.renderIntroHtml = function () {\n              var view = this.view;\n\n              if (this.colWeekNumbersVisible) {\n                return '<td class=\"fc-week-number\" ' + view.weekNumberStyleAttr() + '></td>';\n              }\n\n              return '';\n            };\n\n            SubClass.prototype.getIsNumbersVisible = function () {\n              return DayGrid_1[\"default\"].prototype.getIsNumbersVisible.apply(this, arguments) || this.colWeekNumbersVisible;\n            };\n\n            return SubClass;\n          }(SuperClass)\n        );\n      }\n      /***/\n\n    },\n    /* 68 */\n\n    /***/\n    function (module, exports, __webpack_require__) {\n      Object.defineProperty(exports, \"__esModule\", {\n        value: true\n      });\n\n      var tslib_1 = __webpack_require__(2);\n\n      var UnzonedRange_1 = __webpack_require__(5);\n\n      var DateProfileGenerator_1 = __webpack_require__(55);\n\n      var BasicViewDateProfileGenerator =\n      /** @class */\n      function (_super) {\n        tslib_1.__extends(BasicViewDateProfileGenerator, _super);\n\n        function BasicViewDateProfileGenerator() {\n          return _super !== null && _super.apply(this, arguments) || this;\n        } // Computes the date range that will be rendered.\n\n\n        BasicViewDateProfileGenerator.prototype.buildRenderRange = function (currentUnzonedRange, currentRangeUnit, isRangeAllDay) {\n          var renderUnzonedRange = _super.prototype.buildRenderRange.call(this, currentUnzonedRange, currentRangeUnit, isRangeAllDay); // an UnzonedRange\n\n\n          var start = this.msToUtcMoment(renderUnzonedRange.startMs, isRangeAllDay);\n          var end = this.msToUtcMoment(renderUnzonedRange.endMs, isRangeAllDay); // year and month views should be aligned with weeks. this is already done for week\n\n          if (/^(year|month)$/.test(currentRangeUnit)) {\n            start.startOf('week'); // make end-of-week if not already\n\n            if (end.weekday()) {\n              end.add(1, 'week').startOf('week'); // exclusively move backwards\n            }\n          }\n\n          return new UnzonedRange_1[\"default\"](start, end);\n        };\n\n        return BasicViewDateProfileGenerator;\n      }(DateProfileGenerator_1[\"default\"]);\n\n      exports[\"default\"] = BasicViewDateProfileGenerator;\n      /***/\n    },,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,\n    /* 69 */\n\n    /* 70 */\n\n    /* 71 */\n\n    /* 72 */\n\n    /* 73 */\n\n    /* 74 */\n\n    /* 75 */\n\n    /* 76 */\n\n    /* 77 */\n\n    /* 78 */\n\n    /* 79 */\n\n    /* 80 */\n\n    /* 81 */\n\n    /* 82 */\n\n    /* 83 */\n\n    /* 84 */\n\n    /* 85 */\n\n    /* 86 */\n\n    /* 87 */\n\n    /* 88 */\n\n    /* 89 */\n\n    /* 90 */\n\n    /* 91 */\n\n    /* 92 */\n\n    /* 93 */\n\n    /* 94 */\n\n    /* 95 */\n\n    /* 96 */\n\n    /* 97 */\n\n    /* 98 */\n\n    /* 99 */\n\n    /* 100 */\n\n    /* 101 */\n\n    /* 102 */\n\n    /* 103 */\n\n    /* 104 */\n\n    /* 105 */\n\n    /* 106 */\n\n    /* 107 */\n\n    /* 108 */\n\n    /* 109 */\n\n    /* 110 */\n\n    /* 111 */\n\n    /* 112 */\n\n    /* 113 */\n\n    /* 114 */\n\n    /* 115 */\n\n    /* 116 */\n\n    /* 117 */\n\n    /* 118 */\n\n    /* 119 */\n\n    /* 120 */\n\n    /* 121 */\n\n    /* 122 */\n\n    /* 123 */\n\n    /* 124 */\n\n    /* 125 */\n\n    /* 126 */\n\n    /* 127 */\n\n    /* 128 */\n\n    /* 129 */\n\n    /* 130 */\n\n    /* 131 */\n\n    /* 132 */\n\n    /* 133 */\n\n    /* 134 */\n\n    /* 135 */\n\n    /* 136 */\n\n    /* 137 */\n\n    /* 138 */\n\n    /* 139 */\n\n    /* 140 */\n\n    /* 141 */\n\n    /* 142 */\n\n    /* 143 */\n\n    /* 144 */\n\n    /* 145 */\n\n    /* 146 */\n\n    /* 147 */\n\n    /* 148 */\n\n    /* 149 */\n\n    /* 150 */\n\n    /* 151 */\n\n    /* 152 */\n\n    /* 153 */\n\n    /* 154 */\n\n    /* 155 */\n\n    /* 156 */\n\n    /* 157 */\n\n    /* 158 */\n\n    /* 159 */\n\n    /* 160 */\n\n    /* 161 */\n\n    /* 162 */\n\n    /* 163 */\n\n    /* 164 */\n\n    /* 165 */\n\n    /* 166 */\n\n    /* 167 */\n\n    /* 168 */\n\n    /* 169 */\n\n    /* 170 */\n\n    /* 171 */\n\n    /* 172 */\n\n    /* 173 */\n\n    /* 174 */\n\n    /* 175 */\n\n    /* 176 */\n\n    /* 177 */\n\n    /* 178 */\n\n    /* 179 */\n\n    /* 180 */\n\n    /* 181 */\n\n    /* 182 */\n\n    /* 183 */\n\n    /* 184 */\n\n    /* 185 */\n\n    /* 186 */\n\n    /* 187 */\n\n    /* 188 */\n\n    /* 189 */\n\n    /* 190 */\n\n    /* 191 */\n\n    /* 192 */\n\n    /* 193 */\n\n    /* 194 */\n\n    /* 195 */\n\n    /* 196 */\n\n    /* 197 */\n\n    /* 198 */\n\n    /* 199 */\n\n    /* 200 */\n\n    /* 201 */\n\n    /* 202 */\n\n    /* 203 */\n\n    /* 204 */\n\n    /* 205 */\n\n    /* 206 */\n\n    /* 207 */\n\n    /* 208 */\n\n    /* 209 */\n\n    /* 210 */\n\n    /* 211 */\n\n    /* 212 */\n\n    /* 213 */\n\n    /* 214 */\n\n    /* 215 */\n\n    /* 216 */\n\n    /* 217 */\n\n    /***/\n    function (module, exports, __webpack_require__) {\n      Object.defineProperty(exports, \"__esModule\", {\n        value: true\n      });\n\n      var UnzonedRange_1 = __webpack_require__(5);\n\n      var ComponentFootprint_1 = __webpack_require__(12);\n\n      var EventDefParser_1 = __webpack_require__(36);\n\n      var EventSource_1 = __webpack_require__(6);\n\n      var util_1 = __webpack_require__(19);\n\n      var Constraints =\n      /** @class */\n      function () {\n        function Constraints(eventManager, _calendar) {\n          this.eventManager = eventManager;\n          this._calendar = _calendar;\n        }\n\n        Constraints.prototype.opt = function (name) {\n          return this._calendar.opt(name);\n        };\n        /*\r\n        determines if eventInstanceGroup is allowed,\r\n        in relation to other EVENTS and business hours.\r\n        */\n\n\n        Constraints.prototype.isEventInstanceGroupAllowed = function (eventInstanceGroup) {\n          var eventDef = eventInstanceGroup.getEventDef();\n          var eventFootprints = this.eventRangesToEventFootprints(eventInstanceGroup.getAllEventRanges());\n          var i;\n          var peerEventInstances = this.getPeerEventInstances(eventDef);\n          var peerEventRanges = peerEventInstances.map(util_1.eventInstanceToEventRange);\n          var peerEventFootprints = this.eventRangesToEventFootprints(peerEventRanges);\n          var constraintVal = eventDef.getConstraint();\n          var overlapVal = eventDef.getOverlap();\n          var eventAllowFunc = this.opt('eventAllow');\n\n          for (i = 0; i < eventFootprints.length; i++) {\n            if (!this.isFootprintAllowed(eventFootprints[i].componentFootprint, peerEventFootprints, constraintVal, overlapVal, eventFootprints[i].eventInstance)) {\n              return false;\n            }\n          }\n\n          if (eventAllowFunc) {\n            for (i = 0; i < eventFootprints.length; i++) {\n              if (eventAllowFunc(eventFootprints[i].componentFootprint.toLegacy(this._calendar), eventFootprints[i].getEventLegacy()) === false) {\n                return false;\n              }\n            }\n          }\n\n          return true;\n        };\n\n        Constraints.prototype.getPeerEventInstances = function (eventDef) {\n          return this.eventManager.getEventInstancesWithoutId(eventDef.id);\n        };\n\n        Constraints.prototype.isSelectionFootprintAllowed = function (componentFootprint) {\n          var peerEventInstances = this.eventManager.getEventInstances();\n          var peerEventRanges = peerEventInstances.map(util_1.eventInstanceToEventRange);\n          var peerEventFootprints = this.eventRangesToEventFootprints(peerEventRanges);\n          var selectAllowFunc;\n\n          if (this.isFootprintAllowed(componentFootprint, peerEventFootprints, this.opt('selectConstraint'), this.opt('selectOverlap'))) {\n            selectAllowFunc = this.opt('selectAllow');\n\n            if (selectAllowFunc) {\n              return selectAllowFunc(componentFootprint.toLegacy(this._calendar)) !== false;\n            } else {\n              return true;\n            }\n          }\n\n          return false;\n        };\n\n        Constraints.prototype.isFootprintAllowed = function (componentFootprint, peerEventFootprints, constraintVal, overlapVal, subjectEventInstance // optional\n        ) {\n          var constraintFootprints; // ComponentFootprint[]\n\n          var overlapEventFootprints; // EventFootprint[]\n\n          if (constraintVal != null) {\n            constraintFootprints = this.constraintValToFootprints(constraintVal, componentFootprint.isAllDay);\n\n            if (!this.isFootprintWithinConstraints(componentFootprint, constraintFootprints)) {\n              return false;\n            }\n          }\n\n          overlapEventFootprints = this.collectOverlapEventFootprints(peerEventFootprints, componentFootprint);\n\n          if (overlapVal === false) {\n            if (overlapEventFootprints.length) {\n              return false;\n            }\n          } else if (typeof overlapVal === 'function') {\n            if (!isOverlapsAllowedByFunc(overlapEventFootprints, overlapVal, subjectEventInstance)) {\n              return false;\n            }\n          }\n\n          if (subjectEventInstance) {\n            if (!isOverlapEventInstancesAllowed(overlapEventFootprints, subjectEventInstance)) {\n              return false;\n            }\n          }\n\n          return true;\n        }; // Constraint\n        // ------------------------------------------------------------------------------------------------\n\n\n        Constraints.prototype.isFootprintWithinConstraints = function (componentFootprint, constraintFootprints) {\n          var i;\n\n          for (i = 0; i < constraintFootprints.length; i++) {\n            if (this.footprintContainsFootprint(constraintFootprints[i], componentFootprint)) {\n              return true;\n            }\n          }\n\n          return false;\n        };\n\n        Constraints.prototype.constraintValToFootprints = function (constraintVal, isAllDay) {\n          var eventInstances;\n\n          if (constraintVal === 'businessHours') {\n            return this.buildCurrentBusinessFootprints(isAllDay);\n          } else if (_typeof(constraintVal) === 'object') {\n            eventInstances = this.parseEventDefToInstances(constraintVal); // handles recurring events\n\n            if (!eventInstances) {\n              // invalid input. fallback to parsing footprint directly\n              return this.parseFootprints(constraintVal);\n            } else {\n              return this.eventInstancesToFootprints(eventInstances);\n            }\n          } else if (constraintVal != null) {\n            // an ID\n            eventInstances = this.eventManager.getEventInstancesWithId(constraintVal);\n            return this.eventInstancesToFootprints(eventInstances);\n          }\n        }; // returns ComponentFootprint[]\n        // uses current view's range\n\n\n        Constraints.prototype.buildCurrentBusinessFootprints = function (isAllDay) {\n          var view = this._calendar.view;\n          var businessHourGenerator = view.get('businessHourGenerator');\n          var unzonedRange = view.dateProfile.activeUnzonedRange;\n          var eventInstanceGroup = businessHourGenerator.buildEventInstanceGroup(isAllDay, unzonedRange);\n\n          if (eventInstanceGroup) {\n            return this.eventInstancesToFootprints(eventInstanceGroup.eventInstances);\n          } else {\n            return [];\n          }\n        }; // conversion util\n\n\n        Constraints.prototype.eventInstancesToFootprints = function (eventInstances) {\n          var eventRanges = eventInstances.map(util_1.eventInstanceToEventRange);\n          var eventFootprints = this.eventRangesToEventFootprints(eventRanges);\n          return eventFootprints.map(util_1.eventFootprintToComponentFootprint);\n        }; // Overlap\n        // ------------------------------------------------------------------------------------------------\n\n\n        Constraints.prototype.collectOverlapEventFootprints = function (peerEventFootprints, targetFootprint) {\n          var overlapEventFootprints = [];\n          var i;\n\n          for (i = 0; i < peerEventFootprints.length; i++) {\n            if (this.footprintsIntersect(targetFootprint, peerEventFootprints[i].componentFootprint)) {\n              overlapEventFootprints.push(peerEventFootprints[i]);\n            }\n          }\n\n          return overlapEventFootprints;\n        }; // Conversion: eventDefs -> eventInstances -> eventRanges -> eventFootprints -> componentFootprints\n        // ------------------------------------------------------------------------------------------------\n        // NOTE: this might seem like repetitive code with the Grid class, however, this code is related to\n        // constraints whereas the Grid code is related to rendering. Each approach might want to convert\n        // eventRanges -> eventFootprints in a different way. Regardless, there are opportunities to make\n        // this more DRY.\n\n        /*\r\n        Returns false on invalid input.\r\n        */\n\n\n        Constraints.prototype.parseEventDefToInstances = function (eventInput) {\n          var eventManager = this.eventManager;\n          var eventDef = EventDefParser_1[\"default\"].parse(eventInput, new EventSource_1[\"default\"](this._calendar));\n\n          if (!eventDef) {\n            // invalid\n            return false;\n          }\n\n          return eventDef.buildInstances(eventManager.currentPeriod.unzonedRange);\n        };\n\n        Constraints.prototype.eventRangesToEventFootprints = function (eventRanges) {\n          var i;\n          var eventFootprints = [];\n\n          for (i = 0; i < eventRanges.length; i++) {\n            eventFootprints.push.apply( // footprints\n            eventFootprints, this.eventRangeToEventFootprints(eventRanges[i]));\n          }\n\n          return eventFootprints;\n        };\n\n        Constraints.prototype.eventRangeToEventFootprints = function (eventRange) {\n          return [util_1.eventRangeToEventFootprint(eventRange)];\n        };\n        /*\r\n        Parses footprints directly.\r\n        Very similar to EventDateProfile::parse :(\r\n        */\n\n\n        Constraints.prototype.parseFootprints = function (rawInput) {\n          var start;\n          var end;\n\n          if (rawInput.start) {\n            start = this._calendar.moment(rawInput.start);\n\n            if (!start.isValid()) {\n              start = null;\n            }\n          }\n\n          if (rawInput.end) {\n            end = this._calendar.moment(rawInput.end);\n\n            if (!end.isValid()) {\n              end = null;\n            }\n          }\n\n          return [new ComponentFootprint_1[\"default\"](new UnzonedRange_1[\"default\"](start, end), start && !start.hasTime() || end && !end.hasTime() // isAllDay\n          )];\n        }; // Footprint Utils\n        // ----------------------------------------------------------------------------------------\n\n\n        Constraints.prototype.footprintContainsFootprint = function (outerFootprint, innerFootprint) {\n          return outerFootprint.unzonedRange.containsRange(innerFootprint.unzonedRange);\n        };\n\n        Constraints.prototype.footprintsIntersect = function (footprint0, footprint1) {\n          return footprint0.unzonedRange.intersectsWith(footprint1.unzonedRange);\n        };\n\n        return Constraints;\n      }();\n\n      exports[\"default\"] = Constraints; // optional subjectEventInstance\n\n      function isOverlapsAllowedByFunc(overlapEventFootprints, overlapFunc, subjectEventInstance) {\n        var i;\n\n        for (i = 0; i < overlapEventFootprints.length; i++) {\n          if (!overlapFunc(overlapEventFootprints[i].eventInstance.toLegacy(), subjectEventInstance ? subjectEventInstance.toLegacy() : null)) {\n            return false;\n          }\n        }\n\n        return true;\n      }\n\n      function isOverlapEventInstancesAllowed(overlapEventFootprints, subjectEventInstance) {\n        var subjectLegacyInstance = subjectEventInstance.toLegacy();\n        var i;\n        var overlapEventInstance;\n        var overlapEventDef;\n        var overlapVal;\n\n        for (i = 0; i < overlapEventFootprints.length; i++) {\n          overlapEventInstance = overlapEventFootprints[i].eventInstance;\n          overlapEventDef = overlapEventInstance.def; // don't need to pass in calendar, because don't want to consider global eventOverlap property,\n          // because we already considered that earlier in the process.\n\n          overlapVal = overlapEventDef.getOverlap();\n\n          if (overlapVal === false) {\n            return false;\n          } else if (typeof overlapVal === 'function') {\n            if (!overlapVal(overlapEventInstance.toLegacy(), subjectLegacyInstance)) {\n              return false;\n            }\n          }\n        }\n\n        return true;\n      }\n      /***/\n\n    },\n    /* 218 */\n\n    /***/\n    function (module, exports, __webpack_require__) {\n      Object.defineProperty(exports, \"__esModule\", {\n        value: true\n      });\n\n      var $ = __webpack_require__(3);\n\n      var util_1 = __webpack_require__(19);\n\n      var EventInstanceGroup_1 = __webpack_require__(20);\n\n      var RecurringEventDef_1 = __webpack_require__(54);\n\n      var EventSource_1 = __webpack_require__(6);\n\n      var BUSINESS_HOUR_EVENT_DEFAULTS = {\n        start: '09:00',\n        end: '17:00',\n        dow: [1, 2, 3, 4, 5],\n        rendering: 'inverse-background' // classNames are defined in businessHoursSegClasses\n\n      };\n\n      var BusinessHourGenerator =\n      /** @class */\n      function () {\n        function BusinessHourGenerator(rawComplexDef, calendar) {\n          this.rawComplexDef = rawComplexDef;\n          this.calendar = calendar;\n        }\n\n        BusinessHourGenerator.prototype.buildEventInstanceGroup = function (isAllDay, unzonedRange) {\n          var eventDefs = this.buildEventDefs(isAllDay);\n          var eventInstanceGroup;\n\n          if (eventDefs.length) {\n            eventInstanceGroup = new EventInstanceGroup_1[\"default\"](util_1.eventDefsToEventInstances(eventDefs, unzonedRange)); // so that inverse-background rendering can happen even when no eventRanges in view\n\n            eventInstanceGroup.explicitEventDef = eventDefs[0];\n            return eventInstanceGroup;\n          }\n        };\n\n        BusinessHourGenerator.prototype.buildEventDefs = function (isAllDay) {\n          var rawComplexDef = this.rawComplexDef;\n          var rawDefs = [];\n          var requireDow = false;\n          var i;\n          var defs = [];\n\n          if (rawComplexDef === true) {\n            rawDefs = [{}]; // will get BUSINESS_HOUR_EVENT_DEFAULTS verbatim\n          } else if ($.isPlainObject(rawComplexDef)) {\n            rawDefs = [rawComplexDef];\n          } else if ($.isArray(rawComplexDef)) {\n            rawDefs = rawComplexDef;\n            requireDow = true; // every sub-definition NEEDS a day-of-week\n          }\n\n          for (i = 0; i < rawDefs.length; i++) {\n            if (!requireDow || rawDefs[i].dow) {\n              defs.push(this.buildEventDef(isAllDay, rawDefs[i]));\n            }\n          }\n\n          return defs;\n        };\n\n        BusinessHourGenerator.prototype.buildEventDef = function (isAllDay, rawDef) {\n          var fullRawDef = $.extend({}, BUSINESS_HOUR_EVENT_DEFAULTS, rawDef);\n\n          if (isAllDay) {\n            fullRawDef.start = null;\n            fullRawDef.end = null;\n          }\n\n          return RecurringEventDef_1[\"default\"].parse(fullRawDef, new EventSource_1[\"default\"](this.calendar) // dummy source\n          );\n        };\n\n        return BusinessHourGenerator;\n      }();\n\n      exports[\"default\"] = BusinessHourGenerator;\n      /***/\n    },\n    /* 219 */\n\n    /***/\n    function (module, exports, __webpack_require__) {\n      Object.defineProperty(exports, \"__esModule\", {\n        value: true\n      });\n\n      var $ = __webpack_require__(3);\n\n      var util_1 = __webpack_require__(4);\n\n      var Promise_1 = __webpack_require__(21);\n\n      var EmitterMixin_1 = __webpack_require__(13);\n\n      var UnzonedRange_1 = __webpack_require__(5);\n\n      var EventInstanceGroup_1 = __webpack_require__(20);\n\n      var EventPeriod =\n      /** @class */\n      function () {\n        function EventPeriod(start, end, timezone) {\n          this.pendingCnt = 0;\n          this.freezeDepth = 0;\n          this.stuntedReleaseCnt = 0;\n          this.releaseCnt = 0;\n          this.start = start;\n          this.end = end;\n          this.timezone = timezone;\n          this.unzonedRange = new UnzonedRange_1[\"default\"](start.clone().stripZone(), end.clone().stripZone());\n          this.requestsByUid = {};\n          this.eventDefsByUid = {};\n          this.eventDefsById = {};\n          this.eventInstanceGroupsById = {};\n        }\n\n        EventPeriod.prototype.isWithinRange = function (start, end) {\n          // TODO: use a range util function?\n          return !start.isBefore(this.start) && !end.isAfter(this.end);\n        }; // Requesting and Purging\n        // -----------------------------------------------------------------------------------------------------------------\n\n\n        EventPeriod.prototype.requestSources = function (sources) {\n          this.freeze();\n\n          for (var i = 0; i < sources.length; i++) {\n            this.requestSource(sources[i]);\n          }\n\n          this.thaw();\n        };\n\n        EventPeriod.prototype.requestSource = function (source) {\n          var _this = this;\n\n          var request = {\n            source: source,\n            status: 'pending',\n            eventDefs: null\n          };\n          this.requestsByUid[source.uid] = request;\n          this.pendingCnt += 1;\n          source.fetch(this.start, this.end, this.timezone).then(function (eventDefs) {\n            if (request.status !== 'cancelled') {\n              request.status = 'completed';\n              request.eventDefs = eventDefs;\n\n              _this.addEventDefs(eventDefs);\n\n              _this.pendingCnt--;\n\n              _this.tryRelease();\n            }\n          }, function () {\n            if (request.status !== 'cancelled') {\n              request.status = 'failed';\n              _this.pendingCnt--;\n\n              _this.tryRelease();\n            }\n          });\n        };\n\n        EventPeriod.prototype.purgeSource = function (source) {\n          var request = this.requestsByUid[source.uid];\n\n          if (request) {\n            delete this.requestsByUid[source.uid];\n\n            if (request.status === 'pending') {\n              request.status = 'cancelled';\n              this.pendingCnt--;\n              this.tryRelease();\n            } else if (request.status === 'completed') {\n              request.eventDefs.forEach(this.removeEventDef.bind(this));\n            }\n          }\n        };\n\n        EventPeriod.prototype.purgeAllSources = function () {\n          var requestsByUid = this.requestsByUid;\n          var uid;\n          var request;\n          var completedCnt = 0;\n\n          for (uid in requestsByUid) {\n            request = requestsByUid[uid];\n\n            if (request.status === 'pending') {\n              request.status = 'cancelled';\n            } else if (request.status === 'completed') {\n              completedCnt++;\n            }\n          }\n\n          this.requestsByUid = {};\n          this.pendingCnt = 0;\n\n          if (completedCnt) {\n            this.removeAllEventDefs(); // might release\n          }\n        }; // Event Definitions\n        // -----------------------------------------------------------------------------------------------------------------\n\n\n        EventPeriod.prototype.getEventDefByUid = function (eventDefUid) {\n          return this.eventDefsByUid[eventDefUid];\n        };\n\n        EventPeriod.prototype.getEventDefsById = function (eventDefId) {\n          var a = this.eventDefsById[eventDefId];\n\n          if (a) {\n            return a.slice(); // clone\n          }\n\n          return [];\n        };\n\n        EventPeriod.prototype.addEventDefs = function (eventDefs) {\n          for (var i = 0; i < eventDefs.length; i++) {\n            this.addEventDef(eventDefs[i]);\n          }\n        };\n\n        EventPeriod.prototype.addEventDef = function (eventDef) {\n          var eventDefsById = this.eventDefsById;\n          var eventDefId = eventDef.id;\n          var eventDefs = eventDefsById[eventDefId] || (eventDefsById[eventDefId] = []);\n          var eventInstances = eventDef.buildInstances(this.unzonedRange);\n          var i;\n          eventDefs.push(eventDef);\n          this.eventDefsByUid[eventDef.uid] = eventDef;\n\n          for (i = 0; i < eventInstances.length; i++) {\n            this.addEventInstance(eventInstances[i], eventDefId);\n          }\n        };\n\n        EventPeriod.prototype.removeEventDefsById = function (eventDefId) {\n          var _this = this;\n\n          this.getEventDefsById(eventDefId).forEach(function (eventDef) {\n            _this.removeEventDef(eventDef);\n          });\n        };\n\n        EventPeriod.prototype.removeAllEventDefs = function () {\n          var isEmpty = $.isEmptyObject(this.eventDefsByUid);\n          this.eventDefsByUid = {};\n          this.eventDefsById = {};\n          this.eventInstanceGroupsById = {};\n\n          if (!isEmpty) {\n            this.tryRelease();\n          }\n        };\n\n        EventPeriod.prototype.removeEventDef = function (eventDef) {\n          var eventDefsById = this.eventDefsById;\n          var eventDefs = eventDefsById[eventDef.id];\n          delete this.eventDefsByUid[eventDef.uid];\n\n          if (eventDefs) {\n            util_1.removeExact(eventDefs, eventDef);\n\n            if (!eventDefs.length) {\n              delete eventDefsById[eventDef.id];\n            }\n\n            this.removeEventInstancesForDef(eventDef);\n          }\n        }; // Event Instances\n        // -----------------------------------------------------------------------------------------------------------------\n\n\n        EventPeriod.prototype.getEventInstances = function () {\n          var eventInstanceGroupsById = this.eventInstanceGroupsById;\n          var eventInstances = [];\n          var id;\n\n          for (id in eventInstanceGroupsById) {\n            eventInstances.push.apply(eventInstances, // append\n            eventInstanceGroupsById[id].eventInstances);\n          }\n\n          return eventInstances;\n        };\n\n        EventPeriod.prototype.getEventInstancesWithId = function (eventDefId) {\n          var eventInstanceGroup = this.eventInstanceGroupsById[eventDefId];\n\n          if (eventInstanceGroup) {\n            return eventInstanceGroup.eventInstances.slice(); // clone\n          }\n\n          return [];\n        };\n\n        EventPeriod.prototype.getEventInstancesWithoutId = function (eventDefId) {\n          var eventInstanceGroupsById = this.eventInstanceGroupsById;\n          var matchingInstances = [];\n          var id;\n\n          for (id in eventInstanceGroupsById) {\n            if (id !== eventDefId) {\n              matchingInstances.push.apply(matchingInstances, // append\n              eventInstanceGroupsById[id].eventInstances);\n            }\n          }\n\n          return matchingInstances;\n        };\n\n        EventPeriod.prototype.addEventInstance = function (eventInstance, eventDefId) {\n          var eventInstanceGroupsById = this.eventInstanceGroupsById;\n          var eventInstanceGroup = eventInstanceGroupsById[eventDefId] || (eventInstanceGroupsById[eventDefId] = new EventInstanceGroup_1[\"default\"]());\n          eventInstanceGroup.eventInstances.push(eventInstance);\n          this.tryRelease();\n        };\n\n        EventPeriod.prototype.removeEventInstancesForDef = function (eventDef) {\n          var eventInstanceGroupsById = this.eventInstanceGroupsById;\n          var eventInstanceGroup = eventInstanceGroupsById[eventDef.id];\n          var removeCnt;\n\n          if (eventInstanceGroup) {\n            removeCnt = util_1.removeMatching(eventInstanceGroup.eventInstances, function (currentEventInstance) {\n              return currentEventInstance.def === eventDef;\n            });\n\n            if (!eventInstanceGroup.eventInstances.length) {\n              delete eventInstanceGroupsById[eventDef.id];\n            }\n\n            if (removeCnt) {\n              this.tryRelease();\n            }\n          }\n        }; // Releasing and Freezing\n        // -----------------------------------------------------------------------------------------------------------------\n\n\n        EventPeriod.prototype.tryRelease = function () {\n          if (!this.pendingCnt) {\n            if (!this.freezeDepth) {\n              this.release();\n            } else {\n              this.stuntedReleaseCnt++;\n            }\n          }\n        };\n\n        EventPeriod.prototype.release = function () {\n          this.releaseCnt++;\n          this.trigger('release', this.eventInstanceGroupsById);\n        };\n\n        EventPeriod.prototype.whenReleased = function () {\n          var _this = this;\n\n          if (this.releaseCnt) {\n            return Promise_1[\"default\"].resolve(this.eventInstanceGroupsById);\n          } else {\n            return Promise_1[\"default\"].construct(function (onResolve) {\n              _this.one('release', onResolve);\n            });\n          }\n        };\n\n        EventPeriod.prototype.freeze = function () {\n          if (!this.freezeDepth++) {\n            this.stuntedReleaseCnt = 0;\n          }\n        };\n\n        EventPeriod.prototype.thaw = function () {\n          if (! --this.freezeDepth && this.stuntedReleaseCnt && !this.pendingCnt) {\n            this.release();\n          }\n        };\n\n        return EventPeriod;\n      }();\n\n      exports[\"default\"] = EventPeriod;\n      EmitterMixin_1[\"default\"].mixInto(EventPeriod);\n      /***/\n    },\n    /* 220 */\n\n    /***/\n    function (module, exports, __webpack_require__) {\n      Object.defineProperty(exports, \"__esModule\", {\n        value: true\n      });\n\n      var $ = __webpack_require__(3);\n\n      var util_1 = __webpack_require__(4);\n\n      var EventPeriod_1 = __webpack_require__(219);\n\n      var ArrayEventSource_1 = __webpack_require__(56);\n\n      var EventSource_1 = __webpack_require__(6);\n\n      var EventSourceParser_1 = __webpack_require__(38);\n\n      var SingleEventDef_1 = __webpack_require__(9);\n\n      var EventInstanceGroup_1 = __webpack_require__(20);\n\n      var EmitterMixin_1 = __webpack_require__(13);\n\n      var ListenerMixin_1 = __webpack_require__(7);\n\n      var EventManager =\n      /** @class */\n      function () {\n        function EventManager(calendar) {\n          this.calendar = calendar;\n          this.stickySource = new ArrayEventSource_1[\"default\"](calendar);\n          this.otherSources = [];\n        }\n\n        EventManager.prototype.requestEvents = function (start, end, timezone, force) {\n          if (force || !this.currentPeriod || !this.currentPeriod.isWithinRange(start, end) || timezone !== this.currentPeriod.timezone) {\n            this.setPeriod( // will change this.currentPeriod\n            new EventPeriod_1[\"default\"](start, end, timezone));\n          }\n\n          return this.currentPeriod.whenReleased();\n        }; // Source Adding/Removing\n        // -----------------------------------------------------------------------------------------------------------------\n\n\n        EventManager.prototype.addSource = function (eventSource) {\n          this.otherSources.push(eventSource);\n\n          if (this.currentPeriod) {\n            this.currentPeriod.requestSource(eventSource); // might release\n          }\n        };\n\n        EventManager.prototype.removeSource = function (doomedSource) {\n          util_1.removeExact(this.otherSources, doomedSource);\n\n          if (this.currentPeriod) {\n            this.currentPeriod.purgeSource(doomedSource); // might release\n          }\n        };\n\n        EventManager.prototype.removeAllSources = function () {\n          this.otherSources = [];\n\n          if (this.currentPeriod) {\n            this.currentPeriod.purgeAllSources(); // might release\n          }\n        }; // Source Refetching\n        // -----------------------------------------------------------------------------------------------------------------\n\n\n        EventManager.prototype.refetchSource = function (eventSource) {\n          var currentPeriod = this.currentPeriod;\n\n          if (currentPeriod) {\n            currentPeriod.freeze();\n            currentPeriod.purgeSource(eventSource);\n            currentPeriod.requestSource(eventSource);\n            currentPeriod.thaw();\n          }\n        };\n\n        EventManager.prototype.refetchAllSources = function () {\n          var currentPeriod = this.currentPeriod;\n\n          if (currentPeriod) {\n            currentPeriod.freeze();\n            currentPeriod.purgeAllSources();\n            currentPeriod.requestSources(this.getSources());\n            currentPeriod.thaw();\n          }\n        }; // Source Querying\n        // -----------------------------------------------------------------------------------------------------------------\n\n\n        EventManager.prototype.getSources = function () {\n          return [this.stickySource].concat(this.otherSources);\n        }; // like querySources, but accepts multple match criteria (like multiple IDs)\n\n\n        EventManager.prototype.multiQuerySources = function (matchInputs) {\n          // coerce into an array\n          if (!matchInputs) {\n            matchInputs = [];\n          } else if (!$.isArray(matchInputs)) {\n            matchInputs = [matchInputs];\n          }\n\n          var matchingSources = [];\n          var i; // resolve raw inputs to real event source objects\n\n          for (i = 0; i < matchInputs.length; i++) {\n            matchingSources.push.apply( // append\n            matchingSources, this.querySources(matchInputs[i]));\n          }\n\n          return matchingSources;\n        }; // matchInput can either by a real event source object, an ID, or the function/URL for the source.\n        // returns an array of matching source objects.\n\n\n        EventManager.prototype.querySources = function (matchInput) {\n          var sources = this.otherSources;\n          var i;\n          var source; // given a proper event source object\n\n          for (i = 0; i < sources.length; i++) {\n            source = sources[i];\n\n            if (source === matchInput) {\n              return [source];\n            }\n          } // an ID match\n\n\n          source = this.getSourceById(EventSource_1[\"default\"].normalizeId(matchInput));\n\n          if (source) {\n            return [source];\n          } // parse as an event source\n\n\n          matchInput = EventSourceParser_1[\"default\"].parse(matchInput, this.calendar);\n\n          if (matchInput) {\n            return $.grep(sources, function (source) {\n              return isSourcesEquivalent(matchInput, source);\n            });\n          }\n        };\n        /*\r\n        ID assumed to already be normalized\r\n        */\n\n\n        EventManager.prototype.getSourceById = function (id) {\n          return $.grep(this.otherSources, function (source) {\n            return source.id && source.id === id;\n          })[0];\n        }; // Event-Period\n        // -----------------------------------------------------------------------------------------------------------------\n\n\n        EventManager.prototype.setPeriod = function (eventPeriod) {\n          if (this.currentPeriod) {\n            this.unbindPeriod(this.currentPeriod);\n            this.currentPeriod = null;\n          }\n\n          this.currentPeriod = eventPeriod;\n          this.bindPeriod(eventPeriod);\n          eventPeriod.requestSources(this.getSources());\n        };\n\n        EventManager.prototype.bindPeriod = function (eventPeriod) {\n          this.listenTo(eventPeriod, 'release', function (eventsPayload) {\n            this.trigger('release', eventsPayload);\n          });\n        };\n\n        EventManager.prototype.unbindPeriod = function (eventPeriod) {\n          this.stopListeningTo(eventPeriod);\n        }; // Event Getting/Adding/Removing\n        // -----------------------------------------------------------------------------------------------------------------\n\n\n        EventManager.prototype.getEventDefByUid = function (uid) {\n          if (this.currentPeriod) {\n            return this.currentPeriod.getEventDefByUid(uid);\n          }\n        };\n\n        EventManager.prototype.addEventDef = function (eventDef, isSticky) {\n          if (isSticky) {\n            this.stickySource.addEventDef(eventDef);\n          }\n\n          if (this.currentPeriod) {\n            this.currentPeriod.addEventDef(eventDef); // might release\n          }\n        };\n\n        EventManager.prototype.removeEventDefsById = function (eventId) {\n          this.getSources().forEach(function (eventSource) {\n            eventSource.removeEventDefsById(eventId);\n          });\n\n          if (this.currentPeriod) {\n            this.currentPeriod.removeEventDefsById(eventId); // might release\n          }\n        };\n\n        EventManager.prototype.removeAllEventDefs = function () {\n          this.getSources().forEach(function (eventSource) {\n            eventSource.removeAllEventDefs();\n          });\n\n          if (this.currentPeriod) {\n            this.currentPeriod.removeAllEventDefs();\n          }\n        }; // Event Mutating\n        // -----------------------------------------------------------------------------------------------------------------\n\n        /*\r\n        Returns an undo function.\r\n        */\n\n\n        EventManager.prototype.mutateEventsWithId = function (eventDefId, eventDefMutation) {\n          var currentPeriod = this.currentPeriod;\n          var eventDefs;\n          var undoFuncs = [];\n\n          if (currentPeriod) {\n            currentPeriod.freeze();\n            eventDefs = currentPeriod.getEventDefsById(eventDefId);\n            eventDefs.forEach(function (eventDef) {\n              // add/remove esp because id might change\n              currentPeriod.removeEventDef(eventDef);\n              undoFuncs.push(eventDefMutation.mutateSingle(eventDef));\n              currentPeriod.addEventDef(eventDef);\n            });\n            currentPeriod.thaw();\n            return function () {\n              currentPeriod.freeze();\n\n              for (var i = 0; i < eventDefs.length; i++) {\n                currentPeriod.removeEventDef(eventDefs[i]);\n                undoFuncs[i]();\n                currentPeriod.addEventDef(eventDefs[i]);\n              }\n\n              currentPeriod.thaw();\n            };\n          }\n\n          return function () {};\n        };\n        /*\r\n        copies and then mutates\r\n        */\n\n\n        EventManager.prototype.buildMutatedEventInstanceGroup = function (eventDefId, eventDefMutation) {\n          var eventDefs = this.getEventDefsById(eventDefId);\n          var i;\n          var defCopy;\n          var allInstances = [];\n\n          for (i = 0; i < eventDefs.length; i++) {\n            defCopy = eventDefs[i].clone();\n\n            if (defCopy instanceof SingleEventDef_1[\"default\"]) {\n              eventDefMutation.mutateSingle(defCopy);\n              allInstances.push.apply(allInstances, // append\n              defCopy.buildInstances());\n            }\n          }\n\n          return new EventInstanceGroup_1[\"default\"](allInstances);\n        }; // Freezing\n        // -----------------------------------------------------------------------------------------------------------------\n\n\n        EventManager.prototype.freeze = function () {\n          if (this.currentPeriod) {\n            this.currentPeriod.freeze();\n          }\n        };\n\n        EventManager.prototype.thaw = function () {\n          if (this.currentPeriod) {\n            this.currentPeriod.thaw();\n          }\n        }; // methods that simply forward to EventPeriod\n\n\n        EventManager.prototype.getEventDefsById = function (eventDefId) {\n          return this.currentPeriod.getEventDefsById(eventDefId);\n        };\n\n        EventManager.prototype.getEventInstances = function () {\n          return this.currentPeriod.getEventInstances();\n        };\n\n        EventManager.prototype.getEventInstancesWithId = function (eventDefId) {\n          return this.currentPeriod.getEventInstancesWithId(eventDefId);\n        };\n\n        EventManager.prototype.getEventInstancesWithoutId = function (eventDefId) {\n          return this.currentPeriod.getEventInstancesWithoutId(eventDefId);\n        };\n\n        return EventManager;\n      }();\n\n      exports[\"default\"] = EventManager;\n      EmitterMixin_1[\"default\"].mixInto(EventManager);\n      ListenerMixin_1[\"default\"].mixInto(EventManager);\n\n      function isSourcesEquivalent(source0, source1) {\n        return source0.getPrimitive() === source1.getPrimitive();\n      }\n      /***/\n\n    },\n    /* 221 */\n\n    /***/\n    function (module, exports, __webpack_require__) {\n      Object.defineProperty(exports, \"__esModule\", {\n        value: true\n      });\n\n      var tslib_1 = __webpack_require__(2);\n\n      var Theme_1 = __webpack_require__(22);\n\n      var StandardTheme =\n      /** @class */\n      function (_super) {\n        tslib_1.__extends(StandardTheme, _super);\n\n        function StandardTheme() {\n          return _super !== null && _super.apply(this, arguments) || this;\n        }\n\n        return StandardTheme;\n      }(Theme_1[\"default\"]);\n\n      exports[\"default\"] = StandardTheme;\n      StandardTheme.prototype.classes = {\n        widget: 'fc-unthemed',\n        widgetHeader: 'fc-widget-header',\n        widgetContent: 'fc-widget-content',\n        buttonGroup: 'fc-button-group',\n        button: 'fc-button',\n        cornerLeft: 'fc-corner-left',\n        cornerRight: 'fc-corner-right',\n        stateDefault: 'fc-state-default',\n        stateActive: 'fc-state-active',\n        stateDisabled: 'fc-state-disabled',\n        stateHover: 'fc-state-hover',\n        stateDown: 'fc-state-down',\n        popoverHeader: 'fc-widget-header',\n        popoverContent: 'fc-widget-content',\n        // day grid\n        headerRow: 'fc-widget-header',\n        dayRow: 'fc-widget-content',\n        // list view\n        listView: 'fc-widget-content'\n      };\n      StandardTheme.prototype.baseIconClass = 'fc-icon';\n      StandardTheme.prototype.iconClasses = {\n        close: 'fc-icon-x',\n        prev: 'fc-icon-left-single-arrow',\n        next: 'fc-icon-right-single-arrow',\n        prevYear: 'fc-icon-left-double-arrow',\n        nextYear: 'fc-icon-right-double-arrow'\n      };\n      StandardTheme.prototype.iconOverrideOption = 'buttonIcons';\n      StandardTheme.prototype.iconOverrideCustomButtonOption = 'icon';\n      StandardTheme.prototype.iconOverridePrefix = 'fc-icon-';\n      /***/\n    },\n    /* 222 */\n\n    /***/\n    function (module, exports, __webpack_require__) {\n      Object.defineProperty(exports, \"__esModule\", {\n        value: true\n      });\n\n      var tslib_1 = __webpack_require__(2);\n\n      var Theme_1 = __webpack_require__(22);\n\n      var JqueryUiTheme =\n      /** @class */\n      function (_super) {\n        tslib_1.__extends(JqueryUiTheme, _super);\n\n        function JqueryUiTheme() {\n          return _super !== null && _super.apply(this, arguments) || this;\n        }\n\n        return JqueryUiTheme;\n      }(Theme_1[\"default\"]);\n\n      exports[\"default\"] = JqueryUiTheme;\n      JqueryUiTheme.prototype.classes = {\n        widget: 'ui-widget',\n        widgetHeader: 'ui-widget-header',\n        widgetContent: 'ui-widget-content',\n        buttonGroup: 'fc-button-group',\n        button: 'ui-button',\n        cornerLeft: 'ui-corner-left',\n        cornerRight: 'ui-corner-right',\n        stateDefault: 'ui-state-default',\n        stateActive: 'ui-state-active',\n        stateDisabled: 'ui-state-disabled',\n        stateHover: 'ui-state-hover',\n        stateDown: 'ui-state-down',\n        today: 'ui-state-highlight',\n        popoverHeader: 'ui-widget-header',\n        popoverContent: 'ui-widget-content',\n        // day grid\n        headerRow: 'ui-widget-header',\n        dayRow: 'ui-widget-content',\n        // list view\n        listView: 'ui-widget-content'\n      };\n      JqueryUiTheme.prototype.baseIconClass = 'ui-icon';\n      JqueryUiTheme.prototype.iconClasses = {\n        close: 'ui-icon-closethick',\n        prev: 'ui-icon-circle-triangle-w',\n        next: 'ui-icon-circle-triangle-e',\n        prevYear: 'ui-icon-seek-prev',\n        nextYear: 'ui-icon-seek-next'\n      };\n      JqueryUiTheme.prototype.iconOverrideOption = 'themeButtonIcons';\n      JqueryUiTheme.prototype.iconOverrideCustomButtonOption = 'themeIcon';\n      JqueryUiTheme.prototype.iconOverridePrefix = 'ui-icon-';\n      /***/\n    },\n    /* 223 */\n\n    /***/\n    function (module, exports, __webpack_require__) {\n      Object.defineProperty(exports, \"__esModule\", {\n        value: true\n      });\n\n      var tslib_1 = __webpack_require__(2);\n\n      var $ = __webpack_require__(3);\n\n      var Promise_1 = __webpack_require__(21);\n\n      var EventSource_1 = __webpack_require__(6);\n\n      var FuncEventSource =\n      /** @class */\n      function (_super) {\n        tslib_1.__extends(FuncEventSource, _super);\n\n        function FuncEventSource() {\n          return _super !== null && _super.apply(this, arguments) || this;\n        }\n\n        FuncEventSource.parse = function (rawInput, calendar) {\n          var rawProps; // normalize raw input\n\n          if ($.isFunction(rawInput.events)) {\n            // extended form\n            rawProps = rawInput;\n          } else if ($.isFunction(rawInput)) {\n            // short form\n            rawProps = {\n              events: rawInput\n            };\n          }\n\n          if (rawProps) {\n            return EventSource_1[\"default\"].parse.call(this, rawProps, calendar);\n          }\n\n          return false;\n        };\n\n        FuncEventSource.prototype.fetch = function (start, end, timezone) {\n          var _this = this;\n\n          this.calendar.pushLoading();\n          return Promise_1[\"default\"].construct(function (onResolve) {\n            _this.func.call(_this.calendar, start.clone(), end.clone(), timezone, function (rawEventDefs) {\n              _this.calendar.popLoading();\n\n              onResolve(_this.parseEventDefs(rawEventDefs));\n            });\n          });\n        };\n\n        FuncEventSource.prototype.getPrimitive = function () {\n          return this.func;\n        };\n\n        FuncEventSource.prototype.applyManualStandardProps = function (rawProps) {\n          var superSuccess = _super.prototype.applyManualStandardProps.call(this, rawProps);\n\n          this.func = rawProps.events;\n          return superSuccess;\n        };\n\n        return FuncEventSource;\n      }(EventSource_1[\"default\"]);\n\n      exports[\"default\"] = FuncEventSource;\n      FuncEventSource.defineStandardProps({\n        events: false // don't automatically transfer\n\n      });\n      /***/\n    },\n    /* 224 */\n\n    /***/\n    function (module, exports, __webpack_require__) {\n      Object.defineProperty(exports, \"__esModule\", {\n        value: true\n      });\n\n      var tslib_1 = __webpack_require__(2);\n\n      var $ = __webpack_require__(3);\n\n      var util_1 = __webpack_require__(4);\n\n      var Promise_1 = __webpack_require__(21);\n\n      var EventSource_1 = __webpack_require__(6);\n\n      var JsonFeedEventSource =\n      /** @class */\n      function (_super) {\n        tslib_1.__extends(JsonFeedEventSource, _super);\n\n        function JsonFeedEventSource() {\n          return _super !== null && _super.apply(this, arguments) || this;\n        }\n\n        JsonFeedEventSource.parse = function (rawInput, calendar) {\n          var rawProps; // normalize raw input\n\n          if (typeof rawInput.url === 'string') {\n            // extended form\n            rawProps = rawInput;\n          } else if (typeof rawInput === 'string') {\n            // short form\n            rawProps = {\n              url: rawInput\n            };\n          }\n\n          if (rawProps) {\n            return EventSource_1[\"default\"].parse.call(this, rawProps, calendar);\n          }\n\n          return false;\n        };\n\n        JsonFeedEventSource.prototype.fetch = function (start, end, timezone) {\n          var _this = this;\n\n          var ajaxSettings = this.ajaxSettings;\n          var onSuccess = ajaxSettings.success;\n          var onError = ajaxSettings.error;\n          var requestParams = this.buildRequestParams(start, end, timezone); // todo: eventually handle the promise's then,\n          // don't intercept success/error\n          // tho will be a breaking API change\n\n          this.calendar.pushLoading();\n          return Promise_1[\"default\"].construct(function (onResolve, onReject) {\n            $.ajax($.extend({}, // destination\n            JsonFeedEventSource.AJAX_DEFAULTS, ajaxSettings, {\n              url: _this.url,\n              data: requestParams,\n              success: function success(rawEventDefs, status, xhr) {\n                var callbackRes;\n\n                _this.calendar.popLoading();\n\n                if (rawEventDefs) {\n                  callbackRes = util_1.applyAll(onSuccess, _this, [rawEventDefs, status, xhr]); // redirect `this`\n\n                  if ($.isArray(callbackRes)) {\n                    rawEventDefs = callbackRes;\n                  }\n\n                  onResolve(_this.parseEventDefs(rawEventDefs));\n                } else {\n                  onReject();\n                }\n              },\n              error: function error(xhr, statusText, errorThrown) {\n                _this.calendar.popLoading();\n\n                util_1.applyAll(onError, _this, [xhr, statusText, errorThrown]); // redirect `this`\n\n                onReject();\n              }\n            }));\n          });\n        };\n\n        JsonFeedEventSource.prototype.buildRequestParams = function (start, end, timezone) {\n          var calendar = this.calendar;\n          var ajaxSettings = this.ajaxSettings;\n          var startParam;\n          var endParam;\n          var timezoneParam;\n          var customRequestParams;\n          var params = {};\n          startParam = this.startParam;\n\n          if (startParam == null) {\n            startParam = calendar.opt('startParam');\n          }\n\n          endParam = this.endParam;\n\n          if (endParam == null) {\n            endParam = calendar.opt('endParam');\n          }\n\n          timezoneParam = this.timezoneParam;\n\n          if (timezoneParam == null) {\n            timezoneParam = calendar.opt('timezoneParam');\n          } // retrieve any outbound GET/POST $.ajax data from the options\n\n\n          if ($.isFunction(ajaxSettings.data)) {\n            // supplied as a function that returns a key/value object\n            customRequestParams = ajaxSettings.data();\n          } else {\n            // probably supplied as a straight key/value object\n            customRequestParams = ajaxSettings.data || {};\n          }\n\n          $.extend(params, customRequestParams);\n          params[startParam] = start.format();\n          params[endParam] = end.format();\n\n          if (timezone && timezone !== 'local') {\n            params[timezoneParam] = timezone;\n          }\n\n          return params;\n        };\n\n        JsonFeedEventSource.prototype.getPrimitive = function () {\n          return this.url;\n        };\n\n        JsonFeedEventSource.prototype.applyMiscProps = function (rawProps) {\n          this.ajaxSettings = rawProps;\n        };\n\n        JsonFeedEventSource.AJAX_DEFAULTS = {\n          dataType: 'json',\n          cache: false\n        };\n        return JsonFeedEventSource;\n      }(EventSource_1[\"default\"]);\n\n      exports[\"default\"] = JsonFeedEventSource;\n      JsonFeedEventSource.defineStandardProps({\n        // automatically transfer (true)...\n        url: true,\n        startParam: true,\n        endParam: true,\n        timezoneParam: true\n      });\n      /***/\n    },\n    /* 225 */\n\n    /***/\n    function (module, exports) {\n      Object.defineProperty(exports, \"__esModule\", {\n        value: true\n      });\n\n      var Iterator =\n      /** @class */\n      function () {\n        function Iterator(items) {\n          this.items = items || [];\n        }\n        /* Calls a method on every item passing the arguments through */\n\n\n        Iterator.prototype.proxyCall = function (methodName) {\n          var args = [];\n\n          for (var _i = 1; _i < arguments.length; _i++) {\n            args[_i - 1] = arguments[_i];\n          }\n\n          var results = [];\n          this.items.forEach(function (item) {\n            results.push(item[methodName].apply(item, args));\n          });\n          return results;\n        };\n\n        return Iterator;\n      }();\n\n      exports[\"default\"] = Iterator;\n      /***/\n    },\n    /* 226 */\n\n    /***/\n    function (module, exports, __webpack_require__) {\n      Object.defineProperty(exports, \"__esModule\", {\n        value: true\n      });\n\n      var $ = __webpack_require__(3);\n\n      var util_1 = __webpack_require__(4);\n\n      var ListenerMixin_1 = __webpack_require__(7);\n      /* Creates a clone of an element and lets it track the mouse as it moves\r\n      ----------------------------------------------------------------------------------------------------------------------*/\n\n\n      var MouseFollower =\n      /** @class */\n      function () {\n        function MouseFollower(sourceEl, options) {\n          this.isFollowing = false;\n          this.isHidden = false;\n          this.isAnimating = false; // doing the revert animation?\n\n          this.options = options = options || {};\n          this.sourceEl = sourceEl;\n          this.parentEl = options.parentEl ? $(options.parentEl) : sourceEl.parent(); // default to sourceEl's parent\n        } // Causes the element to start following the mouse\n\n\n        MouseFollower.prototype.start = function (ev) {\n          if (!this.isFollowing) {\n            this.isFollowing = true;\n            this.y0 = util_1.getEvY(ev);\n            this.x0 = util_1.getEvX(ev);\n            this.topDelta = 0;\n            this.leftDelta = 0;\n\n            if (!this.isHidden) {\n              this.updatePosition();\n            }\n\n            if (util_1.getEvIsTouch(ev)) {\n              this.listenTo($(document), 'touchmove', this.handleMove);\n            } else {\n              this.listenTo($(document), 'mousemove', this.handleMove);\n            }\n          }\n        }; // Causes the element to stop following the mouse. If shouldRevert is true, will animate back to original position.\n        // `callback` gets invoked when the animation is complete. If no animation, it is invoked immediately.\n\n\n        MouseFollower.prototype.stop = function (shouldRevert, callback) {\n          var _this = this;\n\n          var revertDuration = this.options.revertDuration;\n\n          var complete = function complete() {\n            _this.isAnimating = false;\n\n            _this.removeElement();\n\n            _this.top0 = _this.left0 = null; // reset state for future updatePosition calls\n\n            if (callback) {\n              callback();\n            }\n          };\n\n          if (this.isFollowing && !this.isAnimating) {\n            // disallow more than one stop animation at a time\n            this.isFollowing = false;\n            this.stopListeningTo($(document));\n\n            if (shouldRevert && revertDuration && !this.isHidden) {\n              // do a revert animation?\n              this.isAnimating = true;\n              this.el.animate({\n                top: this.top0,\n                left: this.left0\n              }, {\n                duration: revertDuration,\n                complete: complete\n              });\n            } else {\n              complete();\n            }\n          }\n        }; // Gets the tracking element. Create it if necessary\n\n\n        MouseFollower.prototype.getEl = function () {\n          var el = this.el;\n\n          if (!el) {\n            el = this.el = this.sourceEl.clone().addClass(this.options.additionalClass || '').css({\n              position: 'absolute',\n              visibility: '',\n              display: this.isHidden ? 'none' : '',\n              margin: 0,\n              right: 'auto',\n              bottom: 'auto',\n              width: this.sourceEl.width(),\n              height: this.sourceEl.height(),\n              opacity: this.options.opacity || '',\n              zIndex: this.options.zIndex\n            }); // we don't want long taps or any mouse interaction causing selection/menus.\n            // would use preventSelection(), but that prevents selectstart, causing problems.\n\n            el.addClass('fc-unselectable');\n            el.appendTo(this.parentEl);\n          }\n\n          return el;\n        }; // Removes the tracking element if it has already been created\n\n\n        MouseFollower.prototype.removeElement = function () {\n          if (this.el) {\n            this.el.remove();\n            this.el = null;\n          }\n        }; // Update the CSS position of the tracking element\n\n\n        MouseFollower.prototype.updatePosition = function () {\n          var sourceOffset;\n          var origin;\n          this.getEl(); // ensure this.el\n          // make sure origin info was computed\n\n          if (this.top0 == null) {\n            sourceOffset = this.sourceEl.offset();\n            origin = this.el.offsetParent().offset();\n            this.top0 = sourceOffset.top - origin.top;\n            this.left0 = sourceOffset.left - origin.left;\n          }\n\n          this.el.css({\n            top: this.top0 + this.topDelta,\n            left: this.left0 + this.leftDelta\n          });\n        }; // Gets called when the user moves the mouse\n\n\n        MouseFollower.prototype.handleMove = function (ev) {\n          this.topDelta = util_1.getEvY(ev) - this.y0;\n          this.leftDelta = util_1.getEvX(ev) - this.x0;\n\n          if (!this.isHidden) {\n            this.updatePosition();\n          }\n        }; // Temporarily makes the tracking element invisible. Can be called before following starts\n\n\n        MouseFollower.prototype.hide = function () {\n          if (!this.isHidden) {\n            this.isHidden = true;\n\n            if (this.el) {\n              this.el.hide();\n            }\n          }\n        }; // Show the tracking element after it has been temporarily hidden\n\n\n        MouseFollower.prototype.show = function () {\n          if (this.isHidden) {\n            this.isHidden = false;\n            this.updatePosition();\n            this.getEl().show();\n          }\n        };\n\n        return MouseFollower;\n      }();\n\n      exports[\"default\"] = MouseFollower;\n      ListenerMixin_1[\"default\"].mixInto(MouseFollower);\n      /***/\n    },\n    /* 227 */\n\n    /***/\n    function (module, exports, __webpack_require__) {\n      /* A rectangular panel that is absolutely positioned over other content\r\n      ------------------------------------------------------------------------------------------------------------------------\r\n      Options:\r\n        - className (string)\r\n        - content (HTML string or jQuery element set)\r\n        - parentEl\r\n        - top\r\n        - left\r\n        - right (the x coord of where the right edge should be. not a \"CSS\" right)\r\n        - autoHide (boolean)\r\n        - show (callback)\r\n        - hide (callback)\r\n      */\n      Object.defineProperty(exports, \"__esModule\", {\n        value: true\n      });\n\n      var $ = __webpack_require__(3);\n\n      var util_1 = __webpack_require__(4);\n\n      var ListenerMixin_1 = __webpack_require__(7);\n\n      var Popover =\n      /** @class */\n      function () {\n        function Popover(options) {\n          this.isHidden = true;\n          this.margin = 10; // the space required between the popover and the edges of the scroll container\n\n          this.options = options || {};\n        } // Shows the popover on the specified position. Renders it if not already\n\n\n        Popover.prototype.show = function () {\n          if (this.isHidden) {\n            if (!this.el) {\n              this.render();\n            }\n\n            this.el.show();\n            this.position();\n            this.isHidden = false;\n            this.trigger('show');\n          }\n        }; // Hides the popover, through CSS, but does not remove it from the DOM\n\n\n        Popover.prototype.hide = function () {\n          if (!this.isHidden) {\n            this.el.hide();\n            this.isHidden = true;\n            this.trigger('hide');\n          }\n        }; // Creates `this.el` and renders content inside of it\n\n\n        Popover.prototype.render = function () {\n          var _this = this;\n\n          var options = this.options;\n          this.el = $('<div class=\"fc-popover\"/>').addClass(options.className || '').css({\n            // position initially to the top left to avoid creating scrollbars\n            top: 0,\n            left: 0\n          }).append(options.content).appendTo(options.parentEl); // when a click happens on anything inside with a 'fc-close' className, hide the popover\n\n          this.el.on('click', '.fc-close', function () {\n            _this.hide();\n          });\n\n          if (options.autoHide) {\n            this.listenTo($(document), 'mousedown', this.documentMousedown);\n          }\n        }; // Triggered when the user clicks *anywhere* in the document, for the autoHide feature\n\n\n        Popover.prototype.documentMousedown = function (ev) {\n          // only hide the popover if the click happened outside the popover\n          if (this.el && !$(ev.target).closest(this.el).length) {\n            this.hide();\n          }\n        }; // Hides and unregisters any handlers\n\n\n        Popover.prototype.removeElement = function () {\n          this.hide();\n\n          if (this.el) {\n            this.el.remove();\n            this.el = null;\n          }\n\n          this.stopListeningTo($(document), 'mousedown');\n        }; // Positions the popover optimally, using the top/left/right options\n\n\n        Popover.prototype.position = function () {\n          var options = this.options;\n          var origin = this.el.offsetParent().offset();\n          var width = this.el.outerWidth();\n          var height = this.el.outerHeight();\n          var windowEl = $(window);\n          var viewportEl = util_1.getScrollParent(this.el);\n          var viewportTop;\n          var viewportLeft;\n          var viewportOffset;\n          var top; // the \"position\" (not \"offset\") values for the popover\n\n          var left; //\n          // compute top and left\n\n          top = options.top || 0;\n\n          if (options.left !== undefined) {\n            left = options.left;\n          } else if (options.right !== undefined) {\n            left = options.right - width; // derive the left value from the right value\n          } else {\n            left = 0;\n          }\n\n          if (viewportEl.is(window) || viewportEl.is(document)) {\n            // normalize getScrollParent's result\n            viewportEl = windowEl;\n            viewportTop = 0; // the window is always at the top left\n\n            viewportLeft = 0; // (and .offset() won't work if called here)\n          } else {\n            viewportOffset = viewportEl.offset();\n            viewportTop = viewportOffset.top;\n            viewportLeft = viewportOffset.left;\n          } // if the window is scrolled, it causes the visible area to be further down\n\n\n          viewportTop += windowEl.scrollTop();\n          viewportLeft += windowEl.scrollLeft(); // constrain to the view port. if constrained by two edges, give precedence to top/left\n\n          if (options.viewportConstrain !== false) {\n            top = Math.min(top, viewportTop + viewportEl.outerHeight() - height - this.margin);\n            top = Math.max(top, viewportTop + this.margin);\n            left = Math.min(left, viewportLeft + viewportEl.outerWidth() - width - this.margin);\n            left = Math.max(left, viewportLeft + this.margin);\n          }\n\n          this.el.css({\n            top: top - origin.top,\n            left: left - origin.left\n          });\n        }; // Triggers a callback. Calls a function in the option hash of the same name.\n        // Arguments beyond the first `name` are forwarded on.\n        // TODO: better code reuse for this. Repeat code\n\n\n        Popover.prototype.trigger = function (name) {\n          if (this.options[name]) {\n            this.options[name].apply(this, Array.prototype.slice.call(arguments, 1));\n          }\n        };\n\n        return Popover;\n      }();\n\n      exports[\"default\"] = Popover;\n      ListenerMixin_1[\"default\"].mixInto(Popover);\n      /***/\n    },\n    /* 228 */\n\n    /***/\n    function (module, exports, __webpack_require__) {\n      Object.defineProperty(exports, \"__esModule\", {\n        value: true\n      });\n\n      var EmitterMixin_1 = __webpack_require__(13);\n\n      var TaskQueue =\n      /** @class */\n      function () {\n        function TaskQueue() {\n          this.q = [];\n          this.isPaused = false;\n          this.isRunning = false;\n        }\n\n        TaskQueue.prototype.queue = function () {\n          var args = [];\n\n          for (var _i = 0; _i < arguments.length; _i++) {\n            args[_i] = arguments[_i];\n          }\n\n          this.q.push.apply(this.q, args); // append\n\n          this.tryStart();\n        };\n\n        TaskQueue.prototype.pause = function () {\n          this.isPaused = true;\n        };\n\n        TaskQueue.prototype.resume = function () {\n          this.isPaused = false;\n          this.tryStart();\n        };\n\n        TaskQueue.prototype.getIsIdle = function () {\n          return !this.isRunning && !this.isPaused;\n        };\n\n        TaskQueue.prototype.tryStart = function () {\n          if (!this.isRunning && this.canRunNext()) {\n            this.isRunning = true;\n            this.trigger('start');\n            this.runRemaining();\n          }\n        };\n\n        TaskQueue.prototype.canRunNext = function () {\n          return !this.isPaused && this.q.length;\n        };\n\n        TaskQueue.prototype.runRemaining = function () {\n          var _this = this;\n\n          var task;\n          var res;\n\n          do {\n            task = this.q.shift(); // always freshly reference q. might have been reassigned.\n\n            res = this.runTask(task);\n\n            if (res && res.then) {\n              res.then(function () {\n                if (_this.canRunNext()) {\n                  _this.runRemaining();\n                }\n              });\n              return; // prevent marking as stopped\n            }\n          } while (this.canRunNext());\n\n          this.trigger('stop'); // not really a 'stop' ... more of a 'drained'\n\n          this.isRunning = false; // if 'stop' handler added more tasks.... TODO: write test for this\n\n          this.tryStart();\n        };\n\n        TaskQueue.prototype.runTask = function (task) {\n          return task(); // task *is* the function, but subclasses can change the format of a task\n        };\n\n        return TaskQueue;\n      }();\n\n      exports[\"default\"] = TaskQueue;\n      EmitterMixin_1[\"default\"].mixInto(TaskQueue);\n      /***/\n    },\n    /* 229 */\n\n    /***/\n    function (module, exports, __webpack_require__) {\n      Object.defineProperty(exports, \"__esModule\", {\n        value: true\n      });\n\n      var tslib_1 = __webpack_require__(2);\n\n      var TaskQueue_1 = __webpack_require__(228);\n\n      var RenderQueue =\n      /** @class */\n      function (_super) {\n        tslib_1.__extends(RenderQueue, _super);\n\n        function RenderQueue(waitsByNamespace) {\n          var _this = _super.call(this) || this;\n\n          _this.waitsByNamespace = waitsByNamespace || {};\n          return _this;\n        }\n\n        RenderQueue.prototype.queue = function (taskFunc, namespace, type) {\n          var task = {\n            func: taskFunc,\n            namespace: namespace,\n            type: type\n          };\n          var waitMs;\n\n          if (namespace) {\n            waitMs = this.waitsByNamespace[namespace];\n          }\n\n          if (this.waitNamespace) {\n            if (namespace === this.waitNamespace && waitMs != null) {\n              this.delayWait(waitMs);\n            } else {\n              this.clearWait();\n              this.tryStart();\n            }\n          }\n\n          if (this.compoundTask(task)) {\n            // appended to queue?\n            if (!this.waitNamespace && waitMs != null) {\n              this.startWait(namespace, waitMs);\n            } else {\n              this.tryStart();\n            }\n          }\n        };\n\n        RenderQueue.prototype.startWait = function (namespace, waitMs) {\n          this.waitNamespace = namespace;\n          this.spawnWait(waitMs);\n        };\n\n        RenderQueue.prototype.delayWait = function (waitMs) {\n          clearTimeout(this.waitId);\n          this.spawnWait(waitMs);\n        };\n\n        RenderQueue.prototype.spawnWait = function (waitMs) {\n          var _this = this;\n\n          this.waitId = setTimeout(function () {\n            _this.waitNamespace = null;\n\n            _this.tryStart();\n          }, waitMs);\n        };\n\n        RenderQueue.prototype.clearWait = function () {\n          if (this.waitNamespace) {\n            clearTimeout(this.waitId);\n            this.waitId = null;\n            this.waitNamespace = null;\n          }\n        };\n\n        RenderQueue.prototype.canRunNext = function () {\n          if (!_super.prototype.canRunNext.call(this)) {\n            return false;\n          } // waiting for a certain namespace to stop receiving tasks?\n\n\n          if (this.waitNamespace) {\n            var q = this.q; // if there was a different namespace task in the meantime,\n            // that forces all previously-waiting tasks to suddenly execute.\n            // TODO: find a way to do this in constant time.\n\n            for (var i = 0; i < q.length; i++) {\n              if (q[i].namespace !== this.waitNamespace) {\n                return true; // allow execution\n              }\n            }\n\n            return false;\n          }\n\n          return true;\n        };\n\n        RenderQueue.prototype.runTask = function (task) {\n          task.func();\n        };\n\n        RenderQueue.prototype.compoundTask = function (newTask) {\n          var q = this.q;\n          var shouldAppend = true;\n          var i;\n          var task;\n\n          if (newTask.namespace && newTask.type === 'destroy') {\n            // remove all init/add/remove ops with same namespace, regardless of order\n            for (i = q.length - 1; i >= 0; i--) {\n              task = q[i];\n\n              if (task.namespace === newTask.namespace) {\n                switch (task.type) {\n                  case 'init':\n                    shouldAppend = false;\n                  // the latest destroy is cancelled out by not doing the init\n\n                  /* falls through */\n\n                  case 'add':\n                  /* falls through */\n\n                  case 'remove':\n                    q.splice(i, 1);\n                  // remove task\n                }\n              }\n            }\n          }\n\n          if (shouldAppend) {\n            q.push(newTask);\n          }\n\n          return shouldAppend;\n        };\n\n        return RenderQueue;\n      }(TaskQueue_1[\"default\"]);\n\n      exports[\"default\"] = RenderQueue;\n      /***/\n    },\n    /* 230 */\n\n    /***/\n    function (module, exports, __webpack_require__) {\n      Object.defineProperty(exports, \"__esModule\", {\n        value: true\n      });\n\n      var tslib_1 = __webpack_require__(2);\n\n      var Model_1 = __webpack_require__(51);\n\n      var Component =\n      /** @class */\n      function (_super) {\n        tslib_1.__extends(Component, _super);\n\n        function Component() {\n          return _super !== null && _super.apply(this, arguments) || this;\n        }\n\n        Component.prototype.setElement = function (el) {\n          this.el = el;\n          this.bindGlobalHandlers();\n          this.renderSkeleton();\n          this.set('isInDom', true);\n        };\n\n        Component.prototype.removeElement = function () {\n          this.unset('isInDom');\n          this.unrenderSkeleton();\n          this.unbindGlobalHandlers();\n          this.el.remove(); // NOTE: don't null-out this.el in case the View was destroyed within an API callback.\n          // We don't null-out the View's other jQuery element references upon destroy,\n          //  so we shouldn't kill this.el either.\n        };\n\n        Component.prototype.bindGlobalHandlers = function () {// subclasses can override\n        };\n\n        Component.prototype.unbindGlobalHandlers = function () {// subclasses can override\n        };\n        /*\r\n        NOTE: Can't have a `render` method. Read the deprecation notice in View::executeDateRender\r\n        */\n        // Renders the basic structure of the view before any content is rendered\n\n\n        Component.prototype.renderSkeleton = function () {// subclasses should implement\n        }; // Unrenders the basic structure of the view\n\n\n        Component.prototype.unrenderSkeleton = function () {// subclasses should implement\n        };\n\n        return Component;\n      }(Model_1[\"default\"]);\n\n      exports[\"default\"] = Component;\n      /***/\n    },\n    /* 231 */\n\n    /***/\n    function (module, exports, __webpack_require__) {\n      Object.defineProperty(exports, \"__esModule\", {\n        value: true\n      });\n\n      var tslib_1 = __webpack_require__(2);\n\n      var $ = __webpack_require__(3);\n\n      var moment = __webpack_require__(0);\n\n      var util_1 = __webpack_require__(4);\n\n      var moment_ext_1 = __webpack_require__(11);\n\n      var date_formatting_1 = __webpack_require__(49);\n\n      var Component_1 = __webpack_require__(230);\n\n      var util_2 = __webpack_require__(19);\n\n      var DateComponent =\n      /** @class */\n      function (_super) {\n        tslib_1.__extends(DateComponent, _super);\n\n        function DateComponent(_view, _options) {\n          var _this = _super.call(this) || this;\n\n          _this.isRTL = false; // frequently accessed options\n\n          _this.hitsNeededDepth = 0; // necessary because multiple callers might need the same hits\n\n          _this.hasAllDayBusinessHours = false; // TODO: unify with largeUnit and isTimeScale?\n\n          _this.isDatesRendered = false; // hack to set options prior to the this.opt calls\n\n          if (_view) {\n            _this['view'] = _view;\n          }\n\n          if (_options) {\n            _this['options'] = _options;\n          }\n\n          _this.uid = String(DateComponent.guid++);\n          _this.childrenByUid = {};\n          _this.nextDayThreshold = moment.duration(_this.opt('nextDayThreshold'));\n          _this.isRTL = _this.opt('isRTL');\n\n          if (_this.fillRendererClass) {\n            _this.fillRenderer = new _this.fillRendererClass(_this);\n          }\n\n          if (_this.eventRendererClass) {\n            // fillRenderer is optional -----v\n            _this.eventRenderer = new _this.eventRendererClass(_this, _this.fillRenderer);\n          }\n\n          if (_this.helperRendererClass && _this.eventRenderer) {\n            _this.helperRenderer = new _this.helperRendererClass(_this, _this.eventRenderer);\n          }\n\n          if (_this.businessHourRendererClass && _this.fillRenderer) {\n            _this.businessHourRenderer = new _this.businessHourRendererClass(_this, _this.fillRenderer);\n          }\n\n          return _this;\n        }\n\n        DateComponent.prototype.addChild = function (child) {\n          if (!this.childrenByUid[child.uid]) {\n            this.childrenByUid[child.uid] = child;\n            return true;\n          }\n\n          return false;\n        };\n\n        DateComponent.prototype.removeChild = function (child) {\n          if (this.childrenByUid[child.uid]) {\n            delete this.childrenByUid[child.uid];\n            return true;\n          }\n\n          return false;\n        }; // TODO: only do if isInDom?\n        // TODO: make part of Component, along with children/batch-render system?\n\n\n        DateComponent.prototype.updateSize = function (totalHeight, isAuto, isResize) {\n          this.callChildren('updateSize', arguments);\n        }; // Options\n        // -----------------------------------------------------------------------------------------------------------------\n\n\n        DateComponent.prototype.opt = function (name) {\n          return this._getView().opt(name); // default implementation\n        };\n\n        DateComponent.prototype.publiclyTrigger = function () {\n          var args = [];\n\n          for (var _i = 0; _i < arguments.length; _i++) {\n            args[_i] = arguments[_i];\n          }\n\n          var calendar = this._getCalendar();\n\n          return calendar.publiclyTrigger.apply(calendar, args);\n        };\n\n        DateComponent.prototype.hasPublicHandlers = function () {\n          var args = [];\n\n          for (var _i = 0; _i < arguments.length; _i++) {\n            args[_i] = arguments[_i];\n          }\n\n          var calendar = this._getCalendar();\n\n          return calendar.hasPublicHandlers.apply(calendar, args);\n        }; // Date\n        // -----------------------------------------------------------------------------------------------------------------\n\n\n        DateComponent.prototype.executeDateRender = function (dateProfile) {\n          this.dateProfile = dateProfile; // for rendering\n\n          this.renderDates(dateProfile);\n          this.isDatesRendered = true;\n          this.callChildren('executeDateRender', arguments);\n        };\n\n        DateComponent.prototype.executeDateUnrender = function () {\n          this.callChildren('executeDateUnrender', arguments);\n          this.dateProfile = null;\n          this.unrenderDates();\n          this.isDatesRendered = false;\n        }; // date-cell content only\n\n\n        DateComponent.prototype.renderDates = function (dateProfile) {// subclasses should implement\n        }; // date-cell content only\n\n\n        DateComponent.prototype.unrenderDates = function () {// subclasses should override\n        }; // Now-Indicator\n        // -----------------------------------------------------------------------------------------------------------------\n        // Returns a string unit, like 'second' or 'minute' that defined how often the current time indicator\n        // should be refreshed. If something falsy is returned, no time indicator is rendered at all.\n\n\n        DateComponent.prototype.getNowIndicatorUnit = function () {// subclasses should implement\n        }; // Renders a current time indicator at the given datetime\n\n\n        DateComponent.prototype.renderNowIndicator = function (date) {\n          this.callChildren('renderNowIndicator', arguments);\n        }; // Undoes the rendering actions from renderNowIndicator\n\n\n        DateComponent.prototype.unrenderNowIndicator = function () {\n          this.callChildren('unrenderNowIndicator', arguments);\n        }; // Business Hours\n        // ---------------------------------------------------------------------------------------------------------------\n\n\n        DateComponent.prototype.renderBusinessHours = function (businessHourGenerator) {\n          if (this.businessHourRenderer) {\n            this.businessHourRenderer.render(businessHourGenerator);\n          }\n\n          this.callChildren('renderBusinessHours', arguments);\n        }; // Unrenders previously-rendered business-hours\n\n\n        DateComponent.prototype.unrenderBusinessHours = function () {\n          this.callChildren('unrenderBusinessHours', arguments);\n\n          if (this.businessHourRenderer) {\n            this.businessHourRenderer.unrender();\n          }\n        }; // Event Displaying\n        // -----------------------------------------------------------------------------------------------------------------\n\n\n        DateComponent.prototype.executeEventRender = function (eventsPayload) {\n          if (this.eventRenderer) {\n            this.eventRenderer.rangeUpdated(); // poorly named now\n\n            this.eventRenderer.render(eventsPayload);\n          } else if (this['renderEvents']) {\n            // legacy\n            this['renderEvents'](convertEventsPayloadToLegacyArray(eventsPayload));\n          }\n\n          this.callChildren('executeEventRender', arguments);\n        };\n\n        DateComponent.prototype.executeEventUnrender = function () {\n          this.callChildren('executeEventUnrender', arguments);\n\n          if (this.eventRenderer) {\n            this.eventRenderer.unrender();\n          } else if (this['destroyEvents']) {\n            // legacy\n            this['destroyEvents']();\n          }\n        };\n\n        DateComponent.prototype.getBusinessHourSegs = function () {\n          var segs = this.getOwnBusinessHourSegs();\n          this.iterChildren(function (child) {\n            segs.push.apply(segs, child.getBusinessHourSegs());\n          });\n          return segs;\n        };\n\n        DateComponent.prototype.getOwnBusinessHourSegs = function () {\n          if (this.businessHourRenderer) {\n            return this.businessHourRenderer.getSegs();\n          }\n\n          return [];\n        };\n\n        DateComponent.prototype.getEventSegs = function () {\n          var segs = this.getOwnEventSegs();\n          this.iterChildren(function (child) {\n            segs.push.apply(segs, child.getEventSegs());\n          });\n          return segs;\n        };\n\n        DateComponent.prototype.getOwnEventSegs = function () {\n          if (this.eventRenderer) {\n            return this.eventRenderer.getSegs();\n          }\n\n          return [];\n        }; // Event Rendering Triggering\n        // -----------------------------------------------------------------------------------------------------------------\n\n\n        DateComponent.prototype.triggerAfterEventsRendered = function () {\n          this.triggerAfterEventSegsRendered(this.getEventSegs());\n          this.publiclyTrigger('eventAfterAllRender', {\n            context: this,\n            args: [this]\n          });\n        };\n\n        DateComponent.prototype.triggerAfterEventSegsRendered = function (segs) {\n          var _this = this; // an optimization, because getEventLegacy is expensive\n\n\n          if (this.hasPublicHandlers('eventAfterRender')) {\n            segs.forEach(function (seg) {\n              var legacy;\n\n              if (seg.el) {\n                // necessary?\n                legacy = seg.footprint.getEventLegacy();\n\n                _this.publiclyTrigger('eventAfterRender', {\n                  context: legacy,\n                  args: [legacy, seg.el, _this]\n                });\n              }\n            });\n          }\n        };\n\n        DateComponent.prototype.triggerBeforeEventsDestroyed = function () {\n          this.triggerBeforeEventSegsDestroyed(this.getEventSegs());\n        };\n\n        DateComponent.prototype.triggerBeforeEventSegsDestroyed = function (segs) {\n          var _this = this;\n\n          if (this.hasPublicHandlers('eventDestroy')) {\n            segs.forEach(function (seg) {\n              var legacy;\n\n              if (seg.el) {\n                // necessary?\n                legacy = seg.footprint.getEventLegacy();\n\n                _this.publiclyTrigger('eventDestroy', {\n                  context: legacy,\n                  args: [legacy, seg.el, _this]\n                });\n              }\n            });\n          }\n        }; // Event Rendering Utils\n        // -----------------------------------------------------------------------------------------------------------------\n        // Hides all rendered event segments linked to the given event\n        // RECURSIVE with subcomponents\n\n\n        DateComponent.prototype.showEventsWithId = function (eventDefId) {\n          this.getEventSegs().forEach(function (seg) {\n            if (seg.footprint.eventDef.id === eventDefId && seg.el // necessary?\n            ) {\n                seg.el.css('visibility', '');\n              }\n          });\n          this.callChildren('showEventsWithId', arguments);\n        }; // Shows all rendered event segments linked to the given event\n        // RECURSIVE with subcomponents\n\n\n        DateComponent.prototype.hideEventsWithId = function (eventDefId) {\n          this.getEventSegs().forEach(function (seg) {\n            if (seg.footprint.eventDef.id === eventDefId && seg.el // necessary?\n            ) {\n                seg.el.css('visibility', 'hidden');\n              }\n          });\n          this.callChildren('hideEventsWithId', arguments);\n        }; // Drag-n-Drop Rendering (for both events and external elements)\n        // ---------------------------------------------------------------------------------------------------------------\n        // Renders a visual indication of a event or external-element drag over the given drop zone.\n        // If an external-element, seg will be `null`.\n        // Must return elements used for any mock events.\n\n\n        DateComponent.prototype.renderDrag = function (eventFootprints, seg, isTouch) {\n          var renderedHelper = false;\n          this.iterChildren(function (child) {\n            if (child.renderDrag(eventFootprints, seg, isTouch)) {\n              renderedHelper = true;\n            }\n          });\n          return renderedHelper;\n        }; // Unrenders a visual indication of an event or external-element being dragged.\n\n\n        DateComponent.prototype.unrenderDrag = function () {\n          this.callChildren('unrenderDrag', arguments);\n        }; // Event Resizing\n        // ---------------------------------------------------------------------------------------------------------------\n        // Renders a visual indication of an event being resized.\n\n\n        DateComponent.prototype.renderEventResize = function (eventFootprints, seg, isTouch) {\n          this.callChildren('renderEventResize', arguments);\n        }; // Unrenders a visual indication of an event being resized.\n\n\n        DateComponent.prototype.unrenderEventResize = function () {\n          this.callChildren('unrenderEventResize', arguments);\n        }; // Selection\n        // ---------------------------------------------------------------------------------------------------------------\n        // Renders a visual indication of the selection\n        // TODO: rename to `renderSelection` after legacy is gone\n\n\n        DateComponent.prototype.renderSelectionFootprint = function (componentFootprint) {\n          this.renderHighlight(componentFootprint);\n          this.callChildren('renderSelectionFootprint', arguments);\n        }; // Unrenders a visual indication of selection\n\n\n        DateComponent.prototype.unrenderSelection = function () {\n          this.unrenderHighlight();\n          this.callChildren('unrenderSelection', arguments);\n        }; // Highlight\n        // ---------------------------------------------------------------------------------------------------------------\n        // Renders an emphasis on the given date range. Given a span (unzoned start/end and other misc data)\n\n\n        DateComponent.prototype.renderHighlight = function (componentFootprint) {\n          if (this.fillRenderer) {\n            this.fillRenderer.renderFootprint('highlight', componentFootprint, {\n              getClasses: function getClasses() {\n                return ['fc-highlight'];\n              }\n            });\n          }\n\n          this.callChildren('renderHighlight', arguments);\n        }; // Unrenders the emphasis on a date range\n\n\n        DateComponent.prototype.unrenderHighlight = function () {\n          if (this.fillRenderer) {\n            this.fillRenderer.unrender('highlight');\n          }\n\n          this.callChildren('unrenderHighlight', arguments);\n        }; // Hit Areas\n        // ---------------------------------------------------------------------------------------------------------------\n        // just because all DateComponents support this interface\n        // doesn't mean they need to have their own internal coord system. they can defer to sub-components.\n\n\n        DateComponent.prototype.hitsNeeded = function () {\n          if (!this.hitsNeededDepth++) {\n            this.prepareHits();\n          }\n\n          this.callChildren('hitsNeeded', arguments);\n        };\n\n        DateComponent.prototype.hitsNotNeeded = function () {\n          if (this.hitsNeededDepth && ! --this.hitsNeededDepth) {\n            this.releaseHits();\n          }\n\n          this.callChildren('hitsNotNeeded', arguments);\n        };\n\n        DateComponent.prototype.prepareHits = function () {// subclasses can implement\n        };\n\n        DateComponent.prototype.releaseHits = function () {// subclasses can implement\n        }; // Given coordinates from the topleft of the document, return data about the date-related area underneath.\n        // Can return an object with arbitrary properties (although top/right/left/bottom are encouraged).\n        // Must have a `grid` property, a reference to this current grid. TODO: avoid this\n        // The returned object will be processed by getHitFootprint and getHitEl.\n\n\n        DateComponent.prototype.queryHit = function (leftOffset, topOffset) {\n          var childrenByUid = this.childrenByUid;\n          var uid;\n          var hit;\n\n          for (uid in childrenByUid) {\n            hit = childrenByUid[uid].queryHit(leftOffset, topOffset);\n\n            if (hit) {\n              break;\n            }\n          }\n\n          return hit;\n        };\n\n        DateComponent.prototype.getSafeHitFootprint = function (hit) {\n          var footprint = this.getHitFootprint(hit);\n\n          if (!this.dateProfile.activeUnzonedRange.containsRange(footprint.unzonedRange)) {\n            return null;\n          }\n\n          return footprint;\n        };\n\n        DateComponent.prototype.getHitFootprint = function (hit) {// what about being abstract!?\n        }; // Given position-level information about a date-related area within the grid,\n        // should return a jQuery element that best represents it. passed to dayClick callback.\n\n\n        DateComponent.prototype.getHitEl = function (hit) {// what about being abstract!?\n        };\n        /* Converting eventRange -> eventFootprint\r\n        ------------------------------------------------------------------------------------------------------------------*/\n\n\n        DateComponent.prototype.eventRangesToEventFootprints = function (eventRanges) {\n          var eventFootprints = [];\n          var i;\n\n          for (i = 0; i < eventRanges.length; i++) {\n            eventFootprints.push.apply( // append\n            eventFootprints, this.eventRangeToEventFootprints(eventRanges[i]));\n          }\n\n          return eventFootprints;\n        };\n\n        DateComponent.prototype.eventRangeToEventFootprints = function (eventRange) {\n          return [util_2.eventRangeToEventFootprint(eventRange)];\n        };\n        /* Converting componentFootprint/eventFootprint -> segs\r\n        ------------------------------------------------------------------------------------------------------------------*/\n\n\n        DateComponent.prototype.eventFootprintsToSegs = function (eventFootprints) {\n          var segs = [];\n          var i;\n\n          for (i = 0; i < eventFootprints.length; i++) {\n            segs.push.apply(segs, this.eventFootprintToSegs(eventFootprints[i]));\n          }\n\n          return segs;\n        }; // Given an event's span (unzoned start/end and other misc data), and the event itself,\n        // slices into segments and attaches event-derived properties to them.\n        // eventSpan - { start, end, isStart, isEnd, otherthings... }\n\n\n        DateComponent.prototype.eventFootprintToSegs = function (eventFootprint) {\n          var unzonedRange = eventFootprint.componentFootprint.unzonedRange;\n          var segs;\n          var i;\n          var seg;\n          segs = this.componentFootprintToSegs(eventFootprint.componentFootprint);\n\n          for (i = 0; i < segs.length; i++) {\n            seg = segs[i];\n\n            if (!unzonedRange.isStart) {\n              seg.isStart = false;\n            }\n\n            if (!unzonedRange.isEnd) {\n              seg.isEnd = false;\n            }\n\n            seg.footprint = eventFootprint; // TODO: rename to seg.eventFootprint\n          }\n\n          return segs;\n        };\n\n        DateComponent.prototype.componentFootprintToSegs = function (componentFootprint) {\n          return [];\n        }; // Utils\n        // ---------------------------------------------------------------------------------------------------------------\n\n\n        DateComponent.prototype.callChildren = function (methodName, args) {\n          this.iterChildren(function (child) {\n            child[methodName].apply(child, args);\n          });\n        };\n\n        DateComponent.prototype.iterChildren = function (func) {\n          var childrenByUid = this.childrenByUid;\n          var uid;\n\n          for (uid in childrenByUid) {\n            func(childrenByUid[uid]);\n          }\n        };\n\n        DateComponent.prototype._getCalendar = function () {\n          var t = this;\n          return t.calendar || t.view.calendar;\n        };\n\n        DateComponent.prototype._getView = function () {\n          return this.view;\n        };\n\n        DateComponent.prototype._getDateProfile = function () {\n          return this._getView().get('dateProfile');\n        }; // Generates HTML for an anchor to another view into the calendar.\n        // Will either generate an <a> tag or a non-clickable <span> tag, depending on enabled settings.\n        // `gotoOptions` can either be a moment input, or an object with the form:\n        // { date, type, forceOff }\n        // `type` is a view-type like \"day\" or \"week\". default value is \"day\".\n        // `attrs` and `innerHtml` are use to generate the rest of the HTML tag.\n\n\n        DateComponent.prototype.buildGotoAnchorHtml = function (gotoOptions, attrs, innerHtml) {\n          var date;\n          var type;\n          var forceOff;\n          var finalOptions;\n\n          if ($.isPlainObject(gotoOptions)) {\n            date = gotoOptions.date;\n            type = gotoOptions.type;\n            forceOff = gotoOptions.forceOff;\n          } else {\n            date = gotoOptions; // a single moment input\n          }\n\n          date = moment_ext_1[\"default\"](date); // if a string, parse it\n\n          finalOptions = {\n            date: date.format('YYYY-MM-DD'),\n            type: type || 'day'\n          };\n\n          if (typeof attrs === 'string') {\n            innerHtml = attrs;\n            attrs = null;\n          }\n\n          attrs = attrs ? ' ' + util_1.attrsToStr(attrs) : ''; // will have a leading space\n\n          innerHtml = innerHtml || '';\n\n          if (!forceOff && this.opt('navLinks')) {\n            return '<a' + attrs + ' data-goto=\"' + util_1.htmlEscape(JSON.stringify(finalOptions)) + '\">' + innerHtml + '</a>';\n          } else {\n            return '<span' + attrs + '>' + innerHtml + '</span>';\n          }\n        };\n\n        DateComponent.prototype.getAllDayHtml = function () {\n          return this.opt('allDayHtml') || util_1.htmlEscape(this.opt('allDayText'));\n        }; // Computes HTML classNames for a single-day element\n\n\n        DateComponent.prototype.getDayClasses = function (date, noThemeHighlight) {\n          var view = this._getView();\n\n          var classes = [];\n          var today;\n\n          if (!this.dateProfile.activeUnzonedRange.containsDate(date)) {\n            classes.push('fc-disabled-day'); // TODO: jQuery UI theme?\n          } else {\n            classes.push('fc-' + util_1.dayIDs[date.day()]);\n\n            if (view.isDateInOtherMonth(date, this.dateProfile)) {\n              // TODO: use DateComponent subclass somehow\n              classes.push('fc-other-month');\n            }\n\n            today = view.calendar.getNow();\n\n            if (date.isSame(today, 'day')) {\n              classes.push('fc-today');\n\n              if (noThemeHighlight !== true) {\n                classes.push(view.calendar.theme.getClass('today'));\n              }\n            } else if (date < today) {\n              classes.push('fc-past');\n            } else {\n              classes.push('fc-future');\n            }\n          }\n\n          return classes;\n        }; // Utility for formatting a range. Accepts a range object, formatting string, and optional separator.\n        // Displays all-day ranges naturally, with an inclusive end. Takes the current isRTL into account.\n        // The timezones of the dates within `range` will be respected.\n\n\n        DateComponent.prototype.formatRange = function (range, isAllDay, formatStr, separator) {\n          var end = range.end;\n\n          if (isAllDay) {\n            end = end.clone().subtract(1); // convert to inclusive. last ms of previous day\n          }\n\n          return date_formatting_1.formatRange(range.start, end, formatStr, separator, this.isRTL);\n        }; // Compute the number of the give units in the \"current\" range.\n        // Will return a floating-point number. Won't round.\n\n\n        DateComponent.prototype.currentRangeAs = function (unit) {\n          return this._getDateProfile().currentUnzonedRange.as(unit);\n        }; // Returns the date range of the full days the given range visually appears to occupy.\n        // Returns a plain object with start/end, NOT an UnzonedRange!\n\n\n        DateComponent.prototype.computeDayRange = function (unzonedRange) {\n          var calendar = this._getCalendar();\n\n          var startDay = calendar.msToUtcMoment(unzonedRange.startMs, true); // the beginning of the day the range starts\n\n          var end = calendar.msToUtcMoment(unzonedRange.endMs);\n          var endTimeMS = +end.time(); // # of milliseconds into `endDay`\n\n          var endDay = end.clone().stripTime(); // the beginning of the day the range exclusively ends\n          // If the end time is actually inclusively part of the next day and is equal to or\n          // beyond the next day threshold, adjust the end to be the exclusive end of `endDay`.\n          // Otherwise, leaving it as inclusive will cause it to exclude `endDay`.\n\n          if (endTimeMS && endTimeMS >= this.nextDayThreshold) {\n            endDay.add(1, 'days');\n          } // If end is within `startDay` but not past nextDayThreshold, assign the default duration of one day.\n\n\n          if (endDay <= startDay) {\n            endDay = startDay.clone().add(1, 'days');\n          }\n\n          return {\n            start: startDay,\n            end: endDay\n          };\n        }; // Does the given range visually appear to occupy more than one day?\n\n\n        DateComponent.prototype.isMultiDayRange = function (unzonedRange) {\n          var dayRange = this.computeDayRange(unzonedRange);\n          return dayRange.end.diff(dayRange.start, 'days') > 1;\n        };\n\n        DateComponent.guid = 0; // TODO: better system for this?\n\n        return DateComponent;\n      }(Component_1[\"default\"]);\n\n      exports[\"default\"] = DateComponent; // legacy\n\n      function convertEventsPayloadToLegacyArray(eventsPayload) {\n        var eventDefId;\n        var eventInstances;\n        var legacyEvents = [];\n        var i;\n\n        for (eventDefId in eventsPayload) {\n          eventInstances = eventsPayload[eventDefId].eventInstances;\n\n          for (i = 0; i < eventInstances.length; i++) {\n            legacyEvents.push(eventInstances[i].toLegacy());\n          }\n        }\n\n        return legacyEvents;\n      }\n      /***/\n\n    },\n    /* 232 */\n\n    /***/\n    function (module, exports, __webpack_require__) {\n      Object.defineProperty(exports, \"__esModule\", {\n        value: true\n      });\n\n      var $ = __webpack_require__(3);\n\n      var moment = __webpack_require__(0);\n\n      var util_1 = __webpack_require__(4);\n\n      var options_1 = __webpack_require__(33);\n\n      var Iterator_1 = __webpack_require__(225);\n\n      var GlobalEmitter_1 = __webpack_require__(23);\n\n      var EmitterMixin_1 = __webpack_require__(13);\n\n      var ListenerMixin_1 = __webpack_require__(7);\n\n      var Toolbar_1 = __webpack_require__(257);\n\n      var OptionsManager_1 = __webpack_require__(258);\n\n      var ViewSpecManager_1 = __webpack_require__(259);\n\n      var Constraints_1 = __webpack_require__(217);\n\n      var locale_1 = __webpack_require__(32);\n\n      var moment_ext_1 = __webpack_require__(11);\n\n      var UnzonedRange_1 = __webpack_require__(5);\n\n      var ComponentFootprint_1 = __webpack_require__(12);\n\n      var EventDateProfile_1 = __webpack_require__(16);\n\n      var EventManager_1 = __webpack_require__(220);\n\n      var BusinessHourGenerator_1 = __webpack_require__(218);\n\n      var EventSourceParser_1 = __webpack_require__(38);\n\n      var EventDefParser_1 = __webpack_require__(36);\n\n      var SingleEventDef_1 = __webpack_require__(9);\n\n      var EventDefMutation_1 = __webpack_require__(39);\n\n      var EventSource_1 = __webpack_require__(6);\n\n      var ThemeRegistry_1 = __webpack_require__(57);\n\n      var Calendar =\n      /** @class */\n      function () {\n        function Calendar(el, overrides) {\n          this.loadingLevel = 0; // number of simultaneous loading tasks\n\n          this.ignoreUpdateViewSize = 0;\n          this.freezeContentHeightDepth = 0; // declare the current calendar instance relies on GlobalEmitter. needed for garbage collection.\n          // unneeded() is called in destroy.\n\n          GlobalEmitter_1[\"default\"].needed();\n          this.el = el;\n          this.viewsByType = {};\n          this.optionsManager = new OptionsManager_1[\"default\"](this, overrides);\n          this.viewSpecManager = new ViewSpecManager_1[\"default\"](this.optionsManager, this);\n          this.initMomentInternals(); // needs to happen after options hash initialized\n\n          this.initCurrentDate();\n          this.initEventManager();\n          this.constraints = new Constraints_1[\"default\"](this.eventManager, this);\n          this.constructed();\n        }\n\n        Calendar.prototype.constructed = function () {// useful for monkeypatching. used?\n        };\n\n        Calendar.prototype.getView = function () {\n          return this.view;\n        };\n\n        Calendar.prototype.publiclyTrigger = function (name, triggerInfo) {\n          var optHandler = this.opt(name);\n          var context;\n          var args;\n\n          if ($.isPlainObject(triggerInfo)) {\n            context = triggerInfo.context;\n            args = triggerInfo.args;\n          } else if ($.isArray(triggerInfo)) {\n            args = triggerInfo;\n          }\n\n          if (context == null) {\n            context = this.el[0]; // fallback context\n          }\n\n          if (!args) {\n            args = [];\n          }\n\n          this.triggerWith(name, context, args); // Emitter's method\n\n          if (optHandler) {\n            return optHandler.apply(context, args);\n          }\n        };\n\n        Calendar.prototype.hasPublicHandlers = function (name) {\n          return this.hasHandlers(name) || this.opt(name); // handler specified in options\n        }; // Options Public API\n        // -----------------------------------------------------------------------------------------------------------------\n        // public getter/setter\n\n\n        Calendar.prototype.option = function (name, value) {\n          var newOptionHash;\n\n          if (typeof name === 'string') {\n            if (value === undefined) {\n              // getter\n              return this.optionsManager.get(name);\n            } else {\n              // setter for individual option\n              newOptionHash = {};\n              newOptionHash[name] = value;\n              this.optionsManager.add(newOptionHash);\n            }\n          } else if (_typeof(name) === 'object') {\n            // compound setter with object input\n            this.optionsManager.add(name);\n          }\n        }; // private getter\n\n\n        Calendar.prototype.opt = function (name) {\n          return this.optionsManager.get(name);\n        }; // View\n        // -----------------------------------------------------------------------------------------------------------------\n        // Given a view name for a custom view or a standard view, creates a ready-to-go View object\n\n\n        Calendar.prototype.instantiateView = function (viewType) {\n          var spec = this.viewSpecManager.getViewSpec(viewType);\n\n          if (!spec) {\n            throw new Error(\"View type \\\"\" + viewType + \"\\\" is not valid\");\n          }\n\n          return new spec['class'](this, spec);\n        }; // Returns a boolean about whether the view is okay to instantiate at some point\n\n\n        Calendar.prototype.isValidViewType = function (viewType) {\n          return Boolean(this.viewSpecManager.getViewSpec(viewType));\n        };\n\n        Calendar.prototype.changeView = function (viewName, dateOrRange) {\n          if (dateOrRange) {\n            if (dateOrRange.start && dateOrRange.end) {\n              // a range\n              this.optionsManager.recordOverrides({\n                visibleRange: dateOrRange\n              });\n            } else {\n              // a date\n              this.currentDate = this.moment(dateOrRange).stripZone(); // just like gotoDate\n            }\n          }\n\n          this.renderView(viewName);\n        }; // Forces navigation to a view for the given date.\n        // `viewType` can be a specific view name or a generic one like \"week\" or \"day\".\n\n\n        Calendar.prototype.zoomTo = function (newDate, viewType) {\n          var spec;\n          viewType = viewType || 'day'; // day is default zoom\n\n          spec = this.viewSpecManager.getViewSpec(viewType) || this.viewSpecManager.getUnitViewSpec(viewType);\n          this.currentDate = newDate.clone();\n          this.renderView(spec ? spec.type : null);\n        }; // Current Date\n        // -----------------------------------------------------------------------------------------------------------------\n\n\n        Calendar.prototype.initCurrentDate = function () {\n          var defaultDateInput = this.opt('defaultDate'); // compute the initial ambig-timezone date\n\n          if (defaultDateInput != null) {\n            this.currentDate = this.moment(defaultDateInput).stripZone();\n          } else {\n            this.currentDate = this.getNow(); // getNow already returns unzoned\n          }\n        };\n\n        Calendar.prototype.prev = function () {\n          var view = this.view;\n          var prevInfo = view.dateProfileGenerator.buildPrev(view.get('dateProfile'));\n\n          if (prevInfo.isValid) {\n            this.currentDate = prevInfo.date;\n            this.renderView();\n          }\n        };\n\n        Calendar.prototype.next = function () {\n          var view = this.view;\n          var nextInfo = view.dateProfileGenerator.buildNext(view.get('dateProfile'));\n\n          if (nextInfo.isValid) {\n            this.currentDate = nextInfo.date;\n            this.renderView();\n          }\n        };\n\n        Calendar.prototype.prevYear = function () {\n          this.currentDate.add(-1, 'years');\n          this.renderView();\n        };\n\n        Calendar.prototype.nextYear = function () {\n          this.currentDate.add(1, 'years');\n          this.renderView();\n        };\n\n        Calendar.prototype.today = function () {\n          this.currentDate = this.getNow(); // should deny like prev/next?\n\n          this.renderView();\n        };\n\n        Calendar.prototype.gotoDate = function (zonedDateInput) {\n          this.currentDate = this.moment(zonedDateInput).stripZone();\n          this.renderView();\n        };\n\n        Calendar.prototype.incrementDate = function (delta) {\n          this.currentDate.add(moment.duration(delta));\n          this.renderView();\n        }; // for external API\n\n\n        Calendar.prototype.getDate = function () {\n          return this.applyTimezone(this.currentDate); // infuse the calendar's timezone\n        }; // Loading Triggering\n        // -----------------------------------------------------------------------------------------------------------------\n        // Should be called when any type of async data fetching begins\n\n\n        Calendar.prototype.pushLoading = function () {\n          if (!this.loadingLevel++) {\n            this.publiclyTrigger('loading', [true, this.view]);\n          }\n        }; // Should be called when any type of async data fetching completes\n\n\n        Calendar.prototype.popLoading = function () {\n          if (! --this.loadingLevel) {\n            this.publiclyTrigger('loading', [false, this.view]);\n          }\n        }; // High-level Rendering\n        // -----------------------------------------------------------------------------------\n\n\n        Calendar.prototype.render = function () {\n          if (!this.contentEl) {\n            this.initialRender();\n          } else if (this.elementVisible()) {\n            // mainly for the public API\n            this.calcSize();\n            this.updateViewSize();\n          }\n        };\n\n        Calendar.prototype.initialRender = function () {\n          var _this = this;\n\n          var el = this.el;\n          el.addClass('fc'); // event delegation for nav links\n\n          el.on('click.fc', 'a[data-goto]', function (ev) {\n            var anchorEl = $(ev.currentTarget);\n            var gotoOptions = anchorEl.data('goto'); // will automatically parse JSON\n\n            var date = _this.moment(gotoOptions.date);\n\n            var viewType = gotoOptions.type; // property like \"navLinkDayClick\". might be a string or a function\n\n            var customAction = _this.view.opt('navLink' + util_1.capitaliseFirstLetter(viewType) + 'Click');\n\n            if (typeof customAction === 'function') {\n              customAction(date, ev);\n            } else {\n              if (typeof customAction === 'string') {\n                viewType = customAction;\n              }\n\n              _this.zoomTo(date, viewType);\n            }\n          }); // called immediately, and upon option change\n\n          this.optionsManager.watch('settingTheme', ['?theme', '?themeSystem'], function (opts) {\n            var themeClass = ThemeRegistry_1.getThemeSystemClass(opts.themeSystem || opts.theme);\n            var theme = new themeClass(_this.optionsManager);\n            var widgetClass = theme.getClass('widget');\n            _this.theme = theme;\n\n            if (widgetClass) {\n              el.addClass(widgetClass);\n            }\n          }, function () {\n            var widgetClass = _this.theme.getClass('widget');\n\n            _this.theme = null;\n\n            if (widgetClass) {\n              el.removeClass(widgetClass);\n            }\n          });\n          this.optionsManager.watch('settingBusinessHourGenerator', ['?businessHours'], function (deps) {\n            _this.businessHourGenerator = new BusinessHourGenerator_1[\"default\"](deps.businessHours, _this);\n\n            if (_this.view) {\n              _this.view.set('businessHourGenerator', _this.businessHourGenerator);\n            }\n          }, function () {\n            _this.businessHourGenerator = null;\n          }); // called immediately, and upon option change.\n          // HACK: locale often affects isRTL, so we explicitly listen to that too.\n\n          this.optionsManager.watch('applyingDirClasses', ['?isRTL', '?locale'], function (opts) {\n            el.toggleClass('fc-ltr', !opts.isRTL);\n            el.toggleClass('fc-rtl', opts.isRTL);\n          });\n          this.contentEl = $(\"<div class='fc-view-container'/>\").prependTo(el);\n          this.initToolbars();\n          this.renderHeader();\n          this.renderFooter();\n          this.renderView(this.opt('defaultView'));\n\n          if (this.opt('handleWindowResize')) {\n            $(window).resize(this.windowResizeProxy = util_1.debounce( // prevents rapid calls\n            this.windowResize.bind(this), this.opt('windowResizeDelay')));\n          }\n        };\n\n        Calendar.prototype.destroy = function () {\n          if (this.view) {\n            this.clearView();\n          }\n\n          this.toolbarsManager.proxyCall('removeElement');\n          this.contentEl.remove();\n          this.el.removeClass('fc fc-ltr fc-rtl'); // removes theme-related root className\n\n          this.optionsManager.unwatch('settingTheme');\n          this.optionsManager.unwatch('settingBusinessHourGenerator');\n          this.el.off('.fc'); // unbind nav link handlers\n\n          if (this.windowResizeProxy) {\n            $(window).unbind('resize', this.windowResizeProxy);\n            this.windowResizeProxy = null;\n          }\n\n          GlobalEmitter_1[\"default\"].unneeded();\n        };\n\n        Calendar.prototype.elementVisible = function () {\n          return this.el.is(':visible');\n        }; // Render Queue\n        // -----------------------------------------------------------------------------------------------------------------\n\n\n        Calendar.prototype.bindViewHandlers = function (view) {\n          var _this = this;\n\n          view.watch('titleForCalendar', ['title'], function (deps) {\n            if (view === _this.view) {\n              // hack\n              _this.setToolbarsTitle(deps.title);\n            }\n          });\n          view.watch('dateProfileForCalendar', ['dateProfile'], function (deps) {\n            if (view === _this.view) {\n              // hack\n              _this.currentDate = deps.dateProfile.date; // might have been constrained by view dates\n\n              _this.updateToolbarButtons(deps.dateProfile);\n            }\n          });\n        };\n\n        Calendar.prototype.unbindViewHandlers = function (view) {\n          view.unwatch('titleForCalendar');\n          view.unwatch('dateProfileForCalendar');\n        }; // View Rendering\n        // -----------------------------------------------------------------------------------\n        // Renders a view because of a date change, view-type change, or for the first time.\n        // If not given a viewType, keep the current view but render different dates.\n        // Accepts an optional scroll state to restore to.\n\n\n        Calendar.prototype.renderView = function (viewType) {\n          var oldView = this.view;\n          var newView;\n          this.freezeContentHeight();\n\n          if (oldView && viewType && oldView.type !== viewType) {\n            this.clearView();\n          } // if viewType changed, or the view was never created, create a fresh view\n\n\n          if (!this.view && viewType) {\n            newView = this.view = this.viewsByType[viewType] || (this.viewsByType[viewType] = this.instantiateView(viewType));\n            this.bindViewHandlers(newView);\n            newView.startBatchRender(); // so that setElement+setDate rendering are joined\n\n            newView.setElement($(\"<div class='fc-view fc-\" + viewType + \"-view' />\").appendTo(this.contentEl));\n            this.toolbarsManager.proxyCall('activateButton', viewType);\n          }\n\n          if (this.view) {\n            // prevent unnecessary change firing\n            if (this.view.get('businessHourGenerator') !== this.businessHourGenerator) {\n              this.view.set('businessHourGenerator', this.businessHourGenerator);\n            }\n\n            this.view.setDate(this.currentDate);\n\n            if (newView) {\n              newView.stopBatchRender();\n            }\n          }\n\n          this.thawContentHeight();\n        }; // Unrenders the current view and reflects this change in the Header.\n        // Unregsiters the `view`, but does not remove from viewByType hash.\n\n\n        Calendar.prototype.clearView = function () {\n          var currentView = this.view;\n          this.toolbarsManager.proxyCall('deactivateButton', currentView.type);\n          this.unbindViewHandlers(currentView);\n          currentView.removeElement();\n          currentView.unsetDate(); // so bindViewHandlers doesn't fire with old values next time\n\n          this.view = null;\n        }; // Destroys the view, including the view object. Then, re-instantiates it and renders it.\n        // Maintains the same scroll state.\n        // TODO: maintain any other user-manipulated state.\n\n\n        Calendar.prototype.reinitView = function () {\n          var oldView = this.view;\n          var scroll = oldView.queryScroll(); // wouldn't be so complicated if Calendar owned the scroll\n\n          this.freezeContentHeight();\n          this.clearView();\n          this.calcSize();\n          this.renderView(oldView.type); // needs the type to freshly render\n\n          this.view.applyScroll(scroll);\n          this.thawContentHeight();\n        }; // Resizing\n        // -----------------------------------------------------------------------------------\n\n\n        Calendar.prototype.getSuggestedViewHeight = function () {\n          if (this.suggestedViewHeight == null) {\n            this.calcSize();\n          }\n\n          return this.suggestedViewHeight;\n        };\n\n        Calendar.prototype.isHeightAuto = function () {\n          return this.opt('contentHeight') === 'auto' || this.opt('height') === 'auto';\n        };\n\n        Calendar.prototype.updateViewSize = function (isResize) {\n          if (isResize === void 0) {\n            isResize = false;\n          }\n\n          var view = this.view;\n          var scroll;\n\n          if (!this.ignoreUpdateViewSize && view) {\n            if (isResize) {\n              this.calcSize();\n              scroll = view.queryScroll();\n            }\n\n            this.ignoreUpdateViewSize++;\n            view.updateSize(this.getSuggestedViewHeight(), this.isHeightAuto(), isResize);\n            this.ignoreUpdateViewSize--;\n\n            if (isResize) {\n              view.applyScroll(scroll);\n            }\n\n            return true; // signal success\n          }\n        };\n\n        Calendar.prototype.calcSize = function () {\n          if (this.elementVisible()) {\n            this._calcSize();\n          }\n        };\n\n        Calendar.prototype._calcSize = function () {\n          var contentHeightInput = this.opt('contentHeight');\n          var heightInput = this.opt('height');\n\n          if (typeof contentHeightInput === 'number') {\n            // exists and not 'auto'\n            this.suggestedViewHeight = contentHeightInput;\n          } else if (typeof contentHeightInput === 'function') {\n            // exists and is a function\n            this.suggestedViewHeight = contentHeightInput();\n          } else if (typeof heightInput === 'number') {\n            // exists and not 'auto'\n            this.suggestedViewHeight = heightInput - this.queryToolbarsHeight();\n          } else if (typeof heightInput === 'function') {\n            // exists and is a function\n            this.suggestedViewHeight = heightInput() - this.queryToolbarsHeight();\n          } else if (heightInput === 'parent') {\n            // set to height of parent element\n            this.suggestedViewHeight = this.el.parent().height() - this.queryToolbarsHeight();\n          } else {\n            this.suggestedViewHeight = Math.round(this.contentEl.width() / Math.max(this.opt('aspectRatio'), .5));\n          }\n        };\n\n        Calendar.prototype.windowResize = function (ev) {\n          if ( // the purpose: so we don't process jqui \"resize\" events that have bubbled up\n          // cast to any because .target, which is Element, can't be compared to window for some reason.\n          ev.target === window && this.view && this.view.isDatesRendered) {\n            if (this.updateViewSize(true)) {\n              // isResize=true, returns true on success\n              this.publiclyTrigger('windowResize', [this.view]);\n            }\n          }\n        };\n        /* Height \"Freezing\"\r\n        -----------------------------------------------------------------------------*/\n\n\n        Calendar.prototype.freezeContentHeight = function () {\n          if (!this.freezeContentHeightDepth++) {\n            this.forceFreezeContentHeight();\n          }\n        };\n\n        Calendar.prototype.forceFreezeContentHeight = function () {\n          this.contentEl.css({\n            width: '100%',\n            height: this.contentEl.height(),\n            overflow: 'hidden'\n          });\n        };\n\n        Calendar.prototype.thawContentHeight = function () {\n          this.freezeContentHeightDepth--; // always bring back to natural height\n\n          this.contentEl.css({\n            width: '',\n            height: '',\n            overflow: ''\n          }); // but if there are future thaws, re-freeze\n\n          if (this.freezeContentHeightDepth) {\n            this.forceFreezeContentHeight();\n          }\n        }; // Toolbar\n        // -----------------------------------------------------------------------------------------------------------------\n\n\n        Calendar.prototype.initToolbars = function () {\n          this.header = new Toolbar_1[\"default\"](this, this.computeHeaderOptions());\n          this.footer = new Toolbar_1[\"default\"](this, this.computeFooterOptions());\n          this.toolbarsManager = new Iterator_1[\"default\"]([this.header, this.footer]);\n        };\n\n        Calendar.prototype.computeHeaderOptions = function () {\n          return {\n            extraClasses: 'fc-header-toolbar',\n            layout: this.opt('header')\n          };\n        };\n\n        Calendar.prototype.computeFooterOptions = function () {\n          return {\n            extraClasses: 'fc-footer-toolbar',\n            layout: this.opt('footer')\n          };\n        }; // can be called repeatedly and Header will rerender\n\n\n        Calendar.prototype.renderHeader = function () {\n          var header = this.header;\n          header.setToolbarOptions(this.computeHeaderOptions());\n          header.render();\n\n          if (header.el) {\n            this.el.prepend(header.el);\n          }\n        }; // can be called repeatedly and Footer will rerender\n\n\n        Calendar.prototype.renderFooter = function () {\n          var footer = this.footer;\n          footer.setToolbarOptions(this.computeFooterOptions());\n          footer.render();\n\n          if (footer.el) {\n            this.el.append(footer.el);\n          }\n        };\n\n        Calendar.prototype.setToolbarsTitle = function (title) {\n          this.toolbarsManager.proxyCall('updateTitle', title);\n        };\n\n        Calendar.prototype.updateToolbarButtons = function (dateProfile) {\n          var now = this.getNow();\n          var view = this.view;\n          var todayInfo = view.dateProfileGenerator.build(now);\n          var prevInfo = view.dateProfileGenerator.buildPrev(view.get('dateProfile'));\n          var nextInfo = view.dateProfileGenerator.buildNext(view.get('dateProfile'));\n          this.toolbarsManager.proxyCall(todayInfo.isValid && !dateProfile.currentUnzonedRange.containsDate(now) ? 'enableButton' : 'disableButton', 'today');\n          this.toolbarsManager.proxyCall(prevInfo.isValid ? 'enableButton' : 'disableButton', 'prev');\n          this.toolbarsManager.proxyCall(nextInfo.isValid ? 'enableButton' : 'disableButton', 'next');\n        };\n\n        Calendar.prototype.queryToolbarsHeight = function () {\n          return this.toolbarsManager.items.reduce(function (accumulator, toolbar) {\n            var toolbarHeight = toolbar.el ? toolbar.el.outerHeight(true) : 0; // includes margin\n\n            return accumulator + toolbarHeight;\n          }, 0);\n        }; // Selection\n        // -----------------------------------------------------------------------------------------------------------------\n        // this public method receives start/end dates in any format, with any timezone\n\n\n        Calendar.prototype.select = function (zonedStartInput, zonedEndInput) {\n          this.view.select(this.buildSelectFootprint.apply(this, arguments));\n        };\n\n        Calendar.prototype.unselect = function () {\n          if (this.view) {\n            this.view.unselect();\n          }\n        }; // Given arguments to the select method in the API, returns a span (unzoned start/end and other info)\n\n\n        Calendar.prototype.buildSelectFootprint = function (zonedStartInput, zonedEndInput) {\n          var start = this.moment(zonedStartInput).stripZone();\n          var end;\n\n          if (zonedEndInput) {\n            end = this.moment(zonedEndInput).stripZone();\n          } else if (start.hasTime()) {\n            end = start.clone().add(this.defaultTimedEventDuration);\n          } else {\n            end = start.clone().add(this.defaultAllDayEventDuration);\n          }\n\n          return new ComponentFootprint_1[\"default\"](new UnzonedRange_1[\"default\"](start, end), !start.hasTime());\n        }; // Date Utils\n        // -----------------------------------------------------------------------------------------------------------------\n\n\n        Calendar.prototype.initMomentInternals = function () {\n          var _this = this;\n\n          this.defaultAllDayEventDuration = moment.duration(this.opt('defaultAllDayEventDuration'));\n          this.defaultTimedEventDuration = moment.duration(this.opt('defaultTimedEventDuration')); // Called immediately, and when any of the options change.\n          // Happens before any internal objects rebuild or rerender, because this is very core.\n\n          this.optionsManager.watch('buildingMomentLocale', ['?locale', '?monthNames', '?monthNamesShort', '?dayNames', '?dayNamesShort', '?firstDay', '?weekNumberCalculation'], function (opts) {\n            var weekNumberCalculation = opts.weekNumberCalculation;\n            var firstDay = opts.firstDay;\n\n            var _week; // normalize\n\n\n            if (weekNumberCalculation === 'iso') {\n              weekNumberCalculation = 'ISO'; // normalize\n            }\n\n            var localeData = Object.create( // make a cheap copy\n            locale_1.getMomentLocaleData(opts.locale) // will fall back to en\n            );\n\n            if (opts.monthNames) {\n              localeData._months = opts.monthNames;\n            }\n\n            if (opts.monthNamesShort) {\n              localeData._monthsShort = opts.monthNamesShort;\n            }\n\n            if (opts.dayNames) {\n              localeData._weekdays = opts.dayNames;\n            }\n\n            if (opts.dayNamesShort) {\n              localeData._weekdaysShort = opts.dayNamesShort;\n            }\n\n            if (firstDay == null && weekNumberCalculation === 'ISO') {\n              firstDay = 1;\n            }\n\n            if (firstDay != null) {\n              _week = Object.create(localeData._week); // _week: { dow: # }\n\n              _week.dow = firstDay;\n              localeData._week = _week;\n            }\n\n            if ( // whitelist certain kinds of input\n            weekNumberCalculation === 'ISO' || weekNumberCalculation === 'local' || typeof weekNumberCalculation === 'function') {\n              localeData._fullCalendar_weekCalc = weekNumberCalculation; // moment-ext will know what to do with it\n            }\n\n            _this.localeData = localeData; // If the internal current date object already exists, move to new locale.\n            // We do NOT need to do this technique for event dates, because this happens when converting to \"segments\".\n\n            if (_this.currentDate) {\n              _this.localizeMoment(_this.currentDate); // sets to localeData\n\n            }\n          });\n        }; // Builds a moment using the settings of the current calendar: timezone and locale.\n        // Accepts anything the vanilla moment() constructor accepts.\n\n\n        Calendar.prototype.moment = function () {\n          var args = [];\n\n          for (var _i = 0; _i < arguments.length; _i++) {\n            args[_i] = arguments[_i];\n          }\n\n          var mom;\n\n          if (this.opt('timezone') === 'local') {\n            mom = moment_ext_1[\"default\"].apply(null, args); // Force the moment to be local, because momentExt doesn't guarantee it.\n\n            if (mom.hasTime()) {\n              // don't give ambiguously-timed moments a local zone\n              mom.local();\n            }\n          } else if (this.opt('timezone') === 'UTC') {\n            mom = moment_ext_1[\"default\"].utc.apply(null, args); // process as UTC\n          } else {\n            mom = moment_ext_1[\"default\"].parseZone.apply(null, args); // let the input decide the zone\n          }\n\n          this.localizeMoment(mom); // TODO\n\n          return mom;\n        };\n\n        Calendar.prototype.msToMoment = function (ms, forceAllDay) {\n          var mom = moment_ext_1[\"default\"].utc(ms); // TODO: optimize by using Date.UTC\n\n          if (forceAllDay) {\n            mom.stripTime();\n          } else {\n            mom = this.applyTimezone(mom); // may or may not apply locale\n          }\n\n          this.localizeMoment(mom);\n          return mom;\n        };\n\n        Calendar.prototype.msToUtcMoment = function (ms, forceAllDay) {\n          var mom = moment_ext_1[\"default\"].utc(ms); // TODO: optimize by using Date.UTC\n\n          if (forceAllDay) {\n            mom.stripTime();\n          }\n\n          this.localizeMoment(mom);\n          return mom;\n        }; // Updates the given moment's locale settings to the current calendar locale settings.\n\n\n        Calendar.prototype.localizeMoment = function (mom) {\n          mom._locale = this.localeData;\n        }; // Returns a boolean about whether or not the calendar knows how to calculate\n        // the timezone offset of arbitrary dates in the current timezone.\n\n\n        Calendar.prototype.getIsAmbigTimezone = function () {\n          return this.opt('timezone') !== 'local' && this.opt('timezone') !== 'UTC';\n        }; // Returns a copy of the given date in the current timezone. Has no effect on dates without times.\n\n\n        Calendar.prototype.applyTimezone = function (date) {\n          if (!date.hasTime()) {\n            return date.clone();\n          }\n\n          var zonedDate = this.moment(date.toArray());\n          var timeAdjust = date.time().asMilliseconds() - zonedDate.time().asMilliseconds();\n          var adjustedZonedDate; // Safari sometimes has problems with this coersion when near DST. Adjust if necessary. (bug #2396)\n\n          if (timeAdjust) {\n            // is the time result different than expected?\n            adjustedZonedDate = zonedDate.clone().add(timeAdjust); // add milliseconds\n\n            if (date.time().asMilliseconds() - adjustedZonedDate.time().asMilliseconds() === 0) {\n              // does it match perfectly now?\n              zonedDate = adjustedZonedDate;\n            }\n          }\n\n          return zonedDate;\n        };\n        /*\r\n        Assumes the footprint is non-open-ended.\r\n        */\n\n\n        Calendar.prototype.footprintToDateProfile = function (componentFootprint, ignoreEnd) {\n          if (ignoreEnd === void 0) {\n            ignoreEnd = false;\n          }\n\n          var start = moment_ext_1[\"default\"].utc(componentFootprint.unzonedRange.startMs);\n          var end;\n\n          if (!ignoreEnd) {\n            end = moment_ext_1[\"default\"].utc(componentFootprint.unzonedRange.endMs);\n          }\n\n          if (componentFootprint.isAllDay) {\n            start.stripTime();\n\n            if (end) {\n              end.stripTime();\n            }\n          } else {\n            start = this.applyTimezone(start);\n\n            if (end) {\n              end = this.applyTimezone(end);\n            }\n          }\n\n          this.localizeMoment(start);\n\n          if (end) {\n            this.localizeMoment(end);\n          }\n\n          return new EventDateProfile_1[\"default\"](start, end, this);\n        }; // Returns a moment for the current date, as defined by the client's computer or from the `now` option.\n        // Will return an moment with an ambiguous timezone.\n\n\n        Calendar.prototype.getNow = function () {\n          var now = this.opt('now');\n\n          if (typeof now === 'function') {\n            now = now();\n          }\n\n          return this.moment(now).stripZone();\n        }; // Produces a human-readable string for the given duration.\n        // Side-effect: changes the locale of the given duration.\n\n\n        Calendar.prototype.humanizeDuration = function (duration) {\n          return duration.locale(this.opt('locale')).humanize();\n        }; // will return `null` if invalid range\n\n\n        Calendar.prototype.parseUnzonedRange = function (rangeInput) {\n          var start = null;\n          var end = null;\n\n          if (rangeInput.start) {\n            start = this.moment(rangeInput.start).stripZone();\n          }\n\n          if (rangeInput.end) {\n            end = this.moment(rangeInput.end).stripZone();\n          }\n\n          if (!start && !end) {\n            return null;\n          }\n\n          if (start && end && end.isBefore(start)) {\n            return null;\n          }\n\n          return new UnzonedRange_1[\"default\"](start, end);\n        }; // Event-Date Utilities\n        // -----------------------------------------------------------------------------------------------------------------\n\n\n        Calendar.prototype.initEventManager = function () {\n          var _this = this;\n\n          var eventManager = new EventManager_1[\"default\"](this);\n          var rawSources = this.opt('eventSources') || [];\n          var singleRawSource = this.opt('events');\n          this.eventManager = eventManager;\n\n          if (singleRawSource) {\n            rawSources.unshift(singleRawSource);\n          }\n\n          eventManager.on('release', function (eventsPayload) {\n            _this.trigger('eventsReset', eventsPayload);\n          });\n          eventManager.freeze();\n          rawSources.forEach(function (rawSource) {\n            var source = EventSourceParser_1[\"default\"].parse(rawSource, _this);\n\n            if (source) {\n              eventManager.addSource(source);\n            }\n          });\n          eventManager.thaw();\n        };\n\n        Calendar.prototype.requestEvents = function (start, end) {\n          return this.eventManager.requestEvents(start, end, this.opt('timezone'), !this.opt('lazyFetching'));\n        }; // Get an event's normalized end date. If not present, calculate it from the defaults.\n\n\n        Calendar.prototype.getEventEnd = function (event) {\n          if (event.end) {\n            return event.end.clone();\n          } else {\n            return this.getDefaultEventEnd(event.allDay, event.start);\n          }\n        }; // Given an event's allDay status and start date, return what its fallback end date should be.\n        // TODO: rename to computeDefaultEventEnd\n\n\n        Calendar.prototype.getDefaultEventEnd = function (allDay, zonedStart) {\n          var end = zonedStart.clone();\n\n          if (allDay) {\n            end.stripTime().add(this.defaultAllDayEventDuration);\n          } else {\n            end.add(this.defaultTimedEventDuration);\n          }\n\n          if (this.getIsAmbigTimezone()) {\n            end.stripZone(); // we don't know what the tzo should be\n          }\n\n          return end;\n        }; // Public Events API\n        // -----------------------------------------------------------------------------------------------------------------\n\n\n        Calendar.prototype.rerenderEvents = function () {\n          this.view.flash('displayingEvents');\n        };\n\n        Calendar.prototype.refetchEvents = function () {\n          this.eventManager.refetchAllSources();\n        };\n\n        Calendar.prototype.renderEvents = function (eventInputs, isSticky) {\n          this.eventManager.freeze();\n\n          for (var i = 0; i < eventInputs.length; i++) {\n            this.renderEvent(eventInputs[i], isSticky);\n          }\n\n          this.eventManager.thaw();\n        };\n\n        Calendar.prototype.renderEvent = function (eventInput, isSticky) {\n          if (isSticky === void 0) {\n            isSticky = false;\n          }\n\n          var eventManager = this.eventManager;\n          var eventDef = EventDefParser_1[\"default\"].parse(eventInput, eventInput.source || eventManager.stickySource);\n\n          if (eventDef) {\n            eventManager.addEventDef(eventDef, isSticky);\n          }\n        }; // legacyQuery operates on legacy event instance objects\n\n\n        Calendar.prototype.removeEvents = function (legacyQuery) {\n          var eventManager = this.eventManager;\n          var legacyInstances = [];\n          var idMap = {};\n          var eventDef;\n          var i;\n\n          if (legacyQuery == null) {\n            // shortcut for removing all\n            eventManager.removeAllEventDefs(); // persist=true\n          } else {\n            eventManager.getEventInstances().forEach(function (eventInstance) {\n              legacyInstances.push(eventInstance.toLegacy());\n            });\n            legacyInstances = filterLegacyEventInstances(legacyInstances, legacyQuery); // compute unique IDs\n\n            for (i = 0; i < legacyInstances.length; i++) {\n              eventDef = this.eventManager.getEventDefByUid(legacyInstances[i]._id);\n              idMap[eventDef.id] = true;\n            }\n\n            eventManager.freeze();\n\n            for (i in idMap) {\n              // reuse `i` as an \"id\"\n              eventManager.removeEventDefsById(i); // persist=true\n            }\n\n            eventManager.thaw();\n          }\n        }; // legacyQuery operates on legacy event instance objects\n\n\n        Calendar.prototype.clientEvents = function (legacyQuery) {\n          var legacyEventInstances = [];\n          this.eventManager.getEventInstances().forEach(function (eventInstance) {\n            legacyEventInstances.push(eventInstance.toLegacy());\n          });\n          return filterLegacyEventInstances(legacyEventInstances, legacyQuery);\n        };\n\n        Calendar.prototype.updateEvents = function (eventPropsArray) {\n          this.eventManager.freeze();\n\n          for (var i = 0; i < eventPropsArray.length; i++) {\n            this.updateEvent(eventPropsArray[i]);\n          }\n\n          this.eventManager.thaw();\n        };\n\n        Calendar.prototype.updateEvent = function (eventProps) {\n          var eventDef = this.eventManager.getEventDefByUid(eventProps._id);\n          var eventInstance;\n          var eventDefMutation;\n\n          if (eventDef instanceof SingleEventDef_1[\"default\"]) {\n            eventInstance = eventDef.buildInstance();\n            eventDefMutation = EventDefMutation_1[\"default\"].createFromRawProps(eventInstance, eventProps, // raw props\n            null // largeUnit -- who uses it?\n            );\n            this.eventManager.mutateEventsWithId(eventDef.id, eventDefMutation); // will release\n          }\n        }; // Public Event Sources API\n        // ------------------------------------------------------------------------------------\n\n\n        Calendar.prototype.getEventSources = function () {\n          return this.eventManager.otherSources.slice(); // clone\n        };\n\n        Calendar.prototype.getEventSourceById = function (id) {\n          return this.eventManager.getSourceById(EventSource_1[\"default\"].normalizeId(id));\n        };\n\n        Calendar.prototype.addEventSource = function (sourceInput) {\n          var source = EventSourceParser_1[\"default\"].parse(sourceInput, this);\n\n          if (source) {\n            this.eventManager.addSource(source);\n          }\n        };\n\n        Calendar.prototype.removeEventSources = function (sourceMultiQuery) {\n          var eventManager = this.eventManager;\n          var sources;\n          var i;\n\n          if (sourceMultiQuery == null) {\n            this.eventManager.removeAllSources();\n          } else {\n            sources = eventManager.multiQuerySources(sourceMultiQuery);\n            eventManager.freeze();\n\n            for (i = 0; i < sources.length; i++) {\n              eventManager.removeSource(sources[i]);\n            }\n\n            eventManager.thaw();\n          }\n        };\n\n        Calendar.prototype.removeEventSource = function (sourceQuery) {\n          var eventManager = this.eventManager;\n          var sources = eventManager.querySources(sourceQuery);\n          var i;\n          eventManager.freeze();\n\n          for (i = 0; i < sources.length; i++) {\n            eventManager.removeSource(sources[i]);\n          }\n\n          eventManager.thaw();\n        };\n\n        Calendar.prototype.refetchEventSources = function (sourceMultiQuery) {\n          var eventManager = this.eventManager;\n          var sources = eventManager.multiQuerySources(sourceMultiQuery);\n          var i;\n          eventManager.freeze();\n\n          for (i = 0; i < sources.length; i++) {\n            eventManager.refetchSource(sources[i]);\n          }\n\n          eventManager.thaw();\n        }; // not for internal use. use options module directly instead.\n\n\n        Calendar.defaults = options_1.globalDefaults;\n        Calendar.englishDefaults = options_1.englishDefaults;\n        Calendar.rtlDefaults = options_1.rtlDefaults;\n        return Calendar;\n      }();\n\n      exports[\"default\"] = Calendar;\n      EmitterMixin_1[\"default\"].mixInto(Calendar);\n      ListenerMixin_1[\"default\"].mixInto(Calendar);\n\n      function filterLegacyEventInstances(legacyEventInstances, legacyQuery) {\n        if (legacyQuery == null) {\n          return legacyEventInstances;\n        } else if ($.isFunction(legacyQuery)) {\n          return legacyEventInstances.filter(legacyQuery);\n        } else {\n          // an event ID\n          legacyQuery += ''; // normalize to string\n\n          return legacyEventInstances.filter(function (legacyEventInstance) {\n            // soft comparison because id not be normalized to string\n            // tslint:disable-next-line\n            return legacyEventInstance.id == legacyQuery || legacyEventInstance._id === legacyQuery; // can specify internal id, but must exactly match\n          });\n        }\n      }\n      /***/\n\n    },\n    /* 233 */\n\n    /***/\n    function (module, exports, __webpack_require__) {\n      Object.defineProperty(exports, \"__esModule\", {\n        value: true\n      });\n\n      var tslib_1 = __webpack_require__(2);\n\n      var $ = __webpack_require__(3);\n\n      var moment = __webpack_require__(0);\n\n      var exportHooks = __webpack_require__(18);\n\n      var util_1 = __webpack_require__(4);\n\n      var moment_ext_1 = __webpack_require__(11);\n\n      var ListenerMixin_1 = __webpack_require__(7);\n\n      var HitDragListener_1 = __webpack_require__(17);\n\n      var SingleEventDef_1 = __webpack_require__(9);\n\n      var EventInstanceGroup_1 = __webpack_require__(20);\n\n      var EventSource_1 = __webpack_require__(6);\n\n      var Interaction_1 = __webpack_require__(14);\n\n      var ExternalDropping =\n      /** @class */\n      function (_super) {\n        tslib_1.__extends(ExternalDropping, _super);\n\n        function ExternalDropping() {\n          var _this = _super !== null && _super.apply(this, arguments) || this;\n\n          _this.isDragging = false; // jqui-dragging an external element? boolean\n\n          return _this;\n        }\n        /*\r\n        component impements:\r\n          - eventRangesToEventFootprints\r\n          - isEventInstanceGroupAllowed\r\n          - isExternalInstanceGroupAllowed\r\n          - renderDrag\r\n          - unrenderDrag\r\n        */\n\n\n        ExternalDropping.prototype.end = function () {\n          if (this.dragListener) {\n            this.dragListener.endInteraction();\n          }\n        };\n\n        ExternalDropping.prototype.bindToDocument = function () {\n          this.listenTo($(document), {\n            dragstart: this.handleDragStart,\n            sortstart: this.handleDragStart // jqui\n\n          });\n        };\n\n        ExternalDropping.prototype.unbindFromDocument = function () {\n          this.stopListeningTo($(document));\n        }; // Called when a jQuery UI drag is initiated anywhere in the DOM\n\n\n        ExternalDropping.prototype.handleDragStart = function (ev, ui) {\n          var el;\n          var accept;\n\n          if (this.opt('droppable')) {\n            // only listen if this setting is on\n            el = $((ui ? ui.item : null) || ev.target); // Test that the dragged element passes the dropAccept selector or filter function.\n            // FYI, the default is \"*\" (matches all)\n\n            accept = this.opt('dropAccept');\n\n            if ($.isFunction(accept) ? accept.call(el[0], el) : el.is(accept)) {\n              if (!this.isDragging) {\n                // prevent double-listening if fired twice\n                this.listenToExternalDrag(el, ev, ui);\n              }\n            }\n          }\n        }; // Called when a jQuery UI drag starts and it needs to be monitored for dropping\n\n\n        ExternalDropping.prototype.listenToExternalDrag = function (el, ev, ui) {\n          var _this = this;\n\n          var component = this.component;\n          var view = this.view;\n          var meta = getDraggedElMeta(el); // extra data about event drop, including possible event to create\n\n          var singleEventDef; // a null value signals an unsuccessful drag\n          // listener that tracks mouse movement over date-associated pixel regions\n\n          var dragListener = this.dragListener = new HitDragListener_1[\"default\"](component, {\n            interactionStart: function interactionStart() {\n              _this.isDragging = true;\n            },\n            hitOver: function hitOver(hit) {\n              var isAllowed = true;\n              var hitFootprint = hit.component.getSafeHitFootprint(hit); // hit might not belong to this grid\n\n              var mutatedEventInstanceGroup;\n\n              if (hitFootprint) {\n                singleEventDef = _this.computeExternalDrop(hitFootprint, meta);\n\n                if (singleEventDef) {\n                  mutatedEventInstanceGroup = new EventInstanceGroup_1[\"default\"](singleEventDef.buildInstances());\n                  isAllowed = meta.eventProps ? // isEvent?\n                  component.isEventInstanceGroupAllowed(mutatedEventInstanceGroup) : component.isExternalInstanceGroupAllowed(mutatedEventInstanceGroup);\n                } else {\n                  isAllowed = false;\n                }\n              } else {\n                isAllowed = false;\n              }\n\n              if (!isAllowed) {\n                singleEventDef = null;\n                util_1.disableCursor();\n              }\n\n              if (singleEventDef) {\n                component.renderDrag( // called without a seg parameter\n                component.eventRangesToEventFootprints(mutatedEventInstanceGroup.sliceRenderRanges(component.dateProfile.renderUnzonedRange, view.calendar)));\n              }\n            },\n            hitOut: function hitOut() {\n              singleEventDef = null; // signal unsuccessful\n            },\n            hitDone: function hitDone() {\n              util_1.enableCursor();\n              component.unrenderDrag();\n            },\n            interactionEnd: function interactionEnd(ev) {\n              if (singleEventDef) {\n                // element was dropped on a valid hit\n                view.reportExternalDrop(singleEventDef, Boolean(meta.eventProps), // isEvent\n                Boolean(meta.stick), // isSticky\n                el, ev, ui);\n              }\n\n              _this.isDragging = false;\n              _this.dragListener = null;\n            }\n          });\n          dragListener.startDrag(ev); // start listening immediately\n        }; // Given a hit to be dropped upon, and misc data associated with the jqui drag (guaranteed to be a plain object),\n        // returns the zoned start/end dates for the event that would result from the hypothetical drop. end might be null.\n        // Returning a null value signals an invalid drop hit.\n        // DOES NOT consider overlap/constraint.\n        // Assumes both footprints are non-open-ended.\n\n\n        ExternalDropping.prototype.computeExternalDrop = function (componentFootprint, meta) {\n          var calendar = this.view.calendar;\n          var start = moment_ext_1[\"default\"].utc(componentFootprint.unzonedRange.startMs).stripZone();\n          var end;\n          var eventDef;\n\n          if (componentFootprint.isAllDay) {\n            // if dropped on an all-day span, and element's metadata specified a time, set it\n            if (meta.startTime) {\n              start.time(meta.startTime);\n            } else {\n              start.stripTime();\n            }\n          }\n\n          if (meta.duration) {\n            end = start.clone().add(meta.duration);\n          }\n\n          start = calendar.applyTimezone(start);\n\n          if (end) {\n            end = calendar.applyTimezone(end);\n          }\n\n          eventDef = SingleEventDef_1[\"default\"].parse($.extend({}, meta.eventProps, {\n            start: start,\n            end: end\n          }), new EventSource_1[\"default\"](calendar));\n          return eventDef;\n        };\n\n        return ExternalDropping;\n      }(Interaction_1[\"default\"]);\n\n      exports[\"default\"] = ExternalDropping;\n      ListenerMixin_1[\"default\"].mixInto(ExternalDropping);\n      /* External-Dragging-Element Data\r\n      ----------------------------------------------------------------------------------------------------------------------*/\n      // Require all HTML5 data-* attributes used by FullCalendar to have this prefix.\n      // A value of '' will query attributes like data-event. A value of 'fc' will query attributes like data-fc-event.\n\n      exportHooks.dataAttrPrefix = ''; // Given a jQuery element that might represent a dragged FullCalendar event, returns an intermediate data structure\n      // to be used for Event Object creation.\n      // A defined `.eventProps`, even when empty, indicates that an event should be created.\n\n      function getDraggedElMeta(el) {\n        var prefix = exportHooks.dataAttrPrefix;\n        var eventProps; // properties for creating the event, not related to date/time\n\n        var startTime; // a Duration\n\n        var duration;\n        var stick;\n\n        if (prefix) {\n          prefix += '-';\n        }\n\n        eventProps = el.data(prefix + 'event') || null;\n\n        if (eventProps) {\n          if (_typeof(eventProps) === 'object') {\n            eventProps = $.extend({}, eventProps); // make a copy\n          } else {\n            // something like 1 or true. still signal event creation\n            eventProps = {};\n          } // pluck special-cased date/time properties\n\n\n          startTime = eventProps.start;\n\n          if (startTime == null) {\n            startTime = eventProps.time;\n          } // accept 'time' as well\n\n\n          duration = eventProps.duration;\n          stick = eventProps.stick;\n          delete eventProps.start;\n          delete eventProps.time;\n          delete eventProps.duration;\n          delete eventProps.stick;\n        } // fallback to standalone attribute values for each of the date/time properties\n\n\n        if (startTime == null) {\n          startTime = el.data(prefix + 'start');\n        }\n\n        if (startTime == null) {\n          startTime = el.data(prefix + 'time');\n        } // accept 'time' as well\n\n\n        if (duration == null) {\n          duration = el.data(prefix + 'duration');\n        }\n\n        if (stick == null) {\n          stick = el.data(prefix + 'stick');\n        } // massage into correct data types\n\n\n        startTime = startTime != null ? moment.duration(startTime) : null;\n        duration = duration != null ? moment.duration(duration) : null;\n        stick = Boolean(stick);\n        return {\n          eventProps: eventProps,\n          startTime: startTime,\n          duration: duration,\n          stick: stick\n        };\n      }\n      /***/\n\n    },\n    /* 234 */\n\n    /***/\n    function (module, exports, __webpack_require__) {\n      Object.defineProperty(exports, \"__esModule\", {\n        value: true\n      });\n\n      var tslib_1 = __webpack_require__(2);\n\n      var $ = __webpack_require__(3);\n\n      var util_1 = __webpack_require__(4);\n\n      var EventDefMutation_1 = __webpack_require__(39);\n\n      var EventDefDateMutation_1 = __webpack_require__(40);\n\n      var HitDragListener_1 = __webpack_require__(17);\n\n      var Interaction_1 = __webpack_require__(14);\n\n      var EventResizing =\n      /** @class */\n      function (_super) {\n        tslib_1.__extends(EventResizing, _super);\n        /*\r\n        component impements:\r\n          - bindSegHandlerToEl\r\n          - publiclyTrigger\r\n          - diffDates\r\n          - eventRangesToEventFootprints\r\n          - isEventInstanceGroupAllowed\r\n          - getSafeHitFootprint\r\n        */\n\n\n        function EventResizing(component, eventPointing) {\n          var _this = _super.call(this, component) || this;\n\n          _this.isResizing = false;\n          _this.eventPointing = eventPointing;\n          return _this;\n        }\n\n        EventResizing.prototype.end = function () {\n          if (this.dragListener) {\n            this.dragListener.endInteraction();\n          }\n        };\n\n        EventResizing.prototype.bindToEl = function (el) {\n          var component = this.component;\n          component.bindSegHandlerToEl(el, 'mousedown', this.handleMouseDown.bind(this));\n          component.bindSegHandlerToEl(el, 'touchstart', this.handleTouchStart.bind(this));\n        };\n\n        EventResizing.prototype.handleMouseDown = function (seg, ev) {\n          if (this.component.canStartResize(seg, ev)) {\n            this.buildDragListener(seg, $(ev.target).is('.fc-start-resizer')).startInteraction(ev, {\n              distance: 5\n            });\n          }\n        };\n\n        EventResizing.prototype.handleTouchStart = function (seg, ev) {\n          if (this.component.canStartResize(seg, ev)) {\n            this.buildDragListener(seg, $(ev.target).is('.fc-start-resizer')).startInteraction(ev);\n          }\n        }; // Creates a listener that tracks the user as they resize an event segment.\n        // Generic enough to work with any type of Grid.\n\n\n        EventResizing.prototype.buildDragListener = function (seg, isStart) {\n          var _this = this;\n\n          var component = this.component;\n          var view = this.view;\n          var calendar = view.calendar;\n          var eventManager = calendar.eventManager;\n          var el = seg.el;\n          var eventDef = seg.footprint.eventDef;\n          var eventInstance = seg.footprint.eventInstance;\n          var isDragging;\n          var resizeMutation; // zoned event date properties. falsy if invalid resize\n          // Tracks mouse movement over the *grid's* coordinate map\n\n          var dragListener = this.dragListener = new HitDragListener_1[\"default\"](component, {\n            scroll: this.opt('dragScroll'),\n            subjectEl: el,\n            interactionStart: function interactionStart() {\n              isDragging = false;\n            },\n            dragStart: function dragStart(ev) {\n              isDragging = true; // ensure a mouseout on the manipulated event has been reported\n\n              _this.eventPointing.handleMouseout(seg, ev);\n\n              _this.segResizeStart(seg, ev);\n            },\n            hitOver: function hitOver(hit, isOrig, origHit) {\n              var isAllowed = true;\n              var origHitFootprint = component.getSafeHitFootprint(origHit);\n              var hitFootprint = component.getSafeHitFootprint(hit);\n              var mutatedEventInstanceGroup;\n\n              if (origHitFootprint && hitFootprint) {\n                resizeMutation = isStart ? _this.computeEventStartResizeMutation(origHitFootprint, hitFootprint, seg.footprint) : _this.computeEventEndResizeMutation(origHitFootprint, hitFootprint, seg.footprint);\n\n                if (resizeMutation) {\n                  mutatedEventInstanceGroup = eventManager.buildMutatedEventInstanceGroup(eventDef.id, resizeMutation);\n                  isAllowed = component.isEventInstanceGroupAllowed(mutatedEventInstanceGroup);\n                } else {\n                  isAllowed = false;\n                }\n              } else {\n                isAllowed = false;\n              }\n\n              if (!isAllowed) {\n                resizeMutation = null;\n                util_1.disableCursor();\n              } else if (resizeMutation.isEmpty()) {\n                // no change. (FYI, event dates might have zones)\n                resizeMutation = null;\n              }\n\n              if (resizeMutation) {\n                view.hideEventsWithId(seg.footprint.eventDef.id);\n                view.renderEventResize(component.eventRangesToEventFootprints(mutatedEventInstanceGroup.sliceRenderRanges(component.dateProfile.renderUnzonedRange, calendar)), seg);\n              }\n            },\n            hitOut: function hitOut() {\n              resizeMutation = null;\n            },\n            hitDone: function hitDone() {\n              view.unrenderEventResize(seg);\n              view.showEventsWithId(seg.footprint.eventDef.id);\n              util_1.enableCursor();\n            },\n            interactionEnd: function interactionEnd(ev) {\n              if (isDragging) {\n                _this.segResizeStop(seg, ev);\n              }\n\n              if (resizeMutation) {\n                // valid date to resize to?\n                // no need to re-show original, will rerender all anyways. esp important if eventRenderWait\n                view.reportEventResize(eventInstance, resizeMutation, el, ev);\n              }\n\n              _this.dragListener = null;\n            }\n          });\n          return dragListener;\n        }; // Called before event segment resizing starts\n\n\n        EventResizing.prototype.segResizeStart = function (seg, ev) {\n          this.isResizing = true;\n          this.component.publiclyTrigger('eventResizeStart', {\n            context: seg.el[0],\n            args: [seg.footprint.getEventLegacy(), ev, {}, this.view]\n          });\n        }; // Called after event segment resizing stops\n\n\n        EventResizing.prototype.segResizeStop = function (seg, ev) {\n          this.isResizing = false;\n          this.component.publiclyTrigger('eventResizeStop', {\n            context: seg.el[0],\n            args: [seg.footprint.getEventLegacy(), ev, {}, this.view]\n          });\n        }; // Returns new date-information for an event segment being resized from its start\n\n\n        EventResizing.prototype.computeEventStartResizeMutation = function (startFootprint, endFootprint, origEventFootprint) {\n          var origRange = origEventFootprint.componentFootprint.unzonedRange;\n          var startDelta = this.component.diffDates(endFootprint.unzonedRange.getStart(), startFootprint.unzonedRange.getStart());\n          var dateMutation;\n          var eventDefMutation;\n\n          if (origRange.getStart().add(startDelta) < origRange.getEnd()) {\n            dateMutation = new EventDefDateMutation_1[\"default\"]();\n            dateMutation.setStartDelta(startDelta);\n            eventDefMutation = new EventDefMutation_1[\"default\"]();\n            eventDefMutation.setDateMutation(dateMutation);\n            return eventDefMutation;\n          }\n\n          return false;\n        }; // Returns new date-information for an event segment being resized from its end\n\n\n        EventResizing.prototype.computeEventEndResizeMutation = function (startFootprint, endFootprint, origEventFootprint) {\n          var origRange = origEventFootprint.componentFootprint.unzonedRange;\n          var endDelta = this.component.diffDates(endFootprint.unzonedRange.getEnd(), startFootprint.unzonedRange.getEnd());\n          var dateMutation;\n          var eventDefMutation;\n\n          if (origRange.getEnd().add(endDelta) > origRange.getStart()) {\n            dateMutation = new EventDefDateMutation_1[\"default\"]();\n            dateMutation.setEndDelta(endDelta);\n            eventDefMutation = new EventDefMutation_1[\"default\"]();\n            eventDefMutation.setDateMutation(dateMutation);\n            return eventDefMutation;\n          }\n\n          return false;\n        };\n\n        return EventResizing;\n      }(Interaction_1[\"default\"]);\n\n      exports[\"default\"] = EventResizing;\n      /***/\n    },\n    /* 235 */\n\n    /***/\n    function (module, exports, __webpack_require__) {\n      Object.defineProperty(exports, \"__esModule\", {\n        value: true\n      });\n\n      var tslib_1 = __webpack_require__(2);\n\n      var util_1 = __webpack_require__(4);\n\n      var EventDefMutation_1 = __webpack_require__(39);\n\n      var EventDefDateMutation_1 = __webpack_require__(40);\n\n      var DragListener_1 = __webpack_require__(59);\n\n      var HitDragListener_1 = __webpack_require__(17);\n\n      var MouseFollower_1 = __webpack_require__(226);\n\n      var Interaction_1 = __webpack_require__(14);\n\n      var EventDragging =\n      /** @class */\n      function (_super) {\n        tslib_1.__extends(EventDragging, _super);\n        /*\r\n        component implements:\r\n          - bindSegHandlerToEl\r\n          - publiclyTrigger\r\n          - diffDates\r\n          - eventRangesToEventFootprints\r\n          - isEventInstanceGroupAllowed\r\n        */\n\n\n        function EventDragging(component, eventPointing) {\n          var _this = _super.call(this, component) || this;\n\n          _this.isDragging = false;\n          _this.eventPointing = eventPointing;\n          return _this;\n        }\n\n        EventDragging.prototype.end = function () {\n          if (this.dragListener) {\n            this.dragListener.endInteraction();\n          }\n        };\n\n        EventDragging.prototype.getSelectionDelay = function () {\n          var delay = this.opt('eventLongPressDelay');\n\n          if (delay == null) {\n            delay = this.opt('longPressDelay'); // fallback\n          }\n\n          return delay;\n        };\n\n        EventDragging.prototype.bindToEl = function (el) {\n          var component = this.component;\n          component.bindSegHandlerToEl(el, 'mousedown', this.handleMousedown.bind(this));\n          component.bindSegHandlerToEl(el, 'touchstart', this.handleTouchStart.bind(this));\n        };\n\n        EventDragging.prototype.handleMousedown = function (seg, ev) {\n          if (!this.component.shouldIgnoreMouse() && this.component.canStartDrag(seg, ev)) {\n            this.buildDragListener(seg).startInteraction(ev, {\n              distance: 5\n            });\n          }\n        };\n\n        EventDragging.prototype.handleTouchStart = function (seg, ev) {\n          var component = this.component;\n          var settings = {\n            delay: this.view.isEventDefSelected(seg.footprint.eventDef) ? // already selected?\n            0 : this.getSelectionDelay()\n          };\n\n          if (component.canStartDrag(seg, ev)) {\n            this.buildDragListener(seg).startInteraction(ev, settings);\n          } else if (component.canStartSelection(seg, ev)) {\n            this.buildSelectListener(seg).startInteraction(ev, settings);\n          }\n        }; // seg isn't draggable, but let's use a generic DragListener\n        // simply for the delay, so it can be selected.\n        // Has side effect of setting/unsetting `dragListener`\n\n\n        EventDragging.prototype.buildSelectListener = function (seg) {\n          var _this = this;\n\n          var view = this.view;\n          var eventDef = seg.footprint.eventDef;\n          var eventInstance = seg.footprint.eventInstance; // null for inverse-background events\n\n          if (this.dragListener) {\n            return this.dragListener;\n          }\n\n          var dragListener = this.dragListener = new DragListener_1[\"default\"]({\n            dragStart: function dragStart(ev) {\n              if (dragListener.isTouch && !view.isEventDefSelected(eventDef) && eventInstance) {\n                // if not previously selected, will fire after a delay. then, select the event\n                view.selectEventInstance(eventInstance);\n              }\n            },\n            interactionEnd: function interactionEnd(ev) {\n              _this.dragListener = null;\n            }\n          });\n          return dragListener;\n        }; // Builds a listener that will track user-dragging on an event segment.\n        // Generic enough to work with any type of Grid.\n        // Has side effect of setting/unsetting `dragListener`\n\n\n        EventDragging.prototype.buildDragListener = function (seg) {\n          var _this = this;\n\n          var component = this.component;\n          var view = this.view;\n          var calendar = view.calendar;\n          var eventManager = calendar.eventManager;\n          var el = seg.el;\n          var eventDef = seg.footprint.eventDef;\n          var eventInstance = seg.footprint.eventInstance; // null for inverse-background events\n\n          var isDragging;\n          var mouseFollower; // A clone of the original element that will move with the mouse\n\n          var eventDefMutation;\n\n          if (this.dragListener) {\n            return this.dragListener;\n          } // Tracks mouse movement over the *view's* coordinate map. Allows dragging and dropping between subcomponents\n          // of the view.\n\n\n          var dragListener = this.dragListener = new HitDragListener_1[\"default\"](view, {\n            scroll: this.opt('dragScroll'),\n            subjectEl: el,\n            subjectCenter: true,\n            interactionStart: function interactionStart(ev) {\n              seg.component = component; // for renderDrag\n\n              isDragging = false;\n              mouseFollower = new MouseFollower_1[\"default\"](seg.el, {\n                additionalClass: 'fc-dragging',\n                parentEl: view.el,\n                opacity: dragListener.isTouch ? null : _this.opt('dragOpacity'),\n                revertDuration: _this.opt('dragRevertDuration'),\n                zIndex: 2 // one above the .fc-view\n\n              });\n              mouseFollower.hide(); // don't show until we know this is a real drag\n\n              mouseFollower.start(ev);\n            },\n            dragStart: function dragStart(ev) {\n              if (dragListener.isTouch && !view.isEventDefSelected(eventDef) && eventInstance) {\n                // if not previously selected, will fire after a delay. then, select the event\n                view.selectEventInstance(eventInstance);\n              }\n\n              isDragging = true; // ensure a mouseout on the manipulated event has been reported\n\n              _this.eventPointing.handleMouseout(seg, ev);\n\n              _this.segDragStart(seg, ev);\n\n              view.hideEventsWithId(seg.footprint.eventDef.id);\n            },\n            hitOver: function hitOver(hit, isOrig, origHit) {\n              var isAllowed = true;\n              var origFootprint;\n              var footprint;\n              var mutatedEventInstanceGroup; // starting hit could be forced (DayGrid.limit)\n\n              if (seg.hit) {\n                origHit = seg.hit;\n              } // hit might not belong to this grid, so query origin grid\n\n\n              origFootprint = origHit.component.getSafeHitFootprint(origHit);\n              footprint = hit.component.getSafeHitFootprint(hit);\n\n              if (origFootprint && footprint) {\n                eventDefMutation = _this.computeEventDropMutation(origFootprint, footprint, eventDef);\n\n                if (eventDefMutation) {\n                  mutatedEventInstanceGroup = eventManager.buildMutatedEventInstanceGroup(eventDef.id, eventDefMutation);\n                  isAllowed = component.isEventInstanceGroupAllowed(mutatedEventInstanceGroup);\n                } else {\n                  isAllowed = false;\n                }\n              } else {\n                isAllowed = false;\n              }\n\n              if (!isAllowed) {\n                eventDefMutation = null;\n                util_1.disableCursor();\n              } // if a valid drop location, have the subclass render a visual indication\n\n\n              if (eventDefMutation && view.renderDrag( // truthy if rendered something\n              component.eventRangesToEventFootprints(mutatedEventInstanceGroup.sliceRenderRanges(component.dateProfile.renderUnzonedRange, calendar)), seg, dragListener.isTouch)) {\n                mouseFollower.hide(); // if the subclass is already using a mock event \"helper\", hide our own\n              } else {\n                mouseFollower.show(); // otherwise, have the helper follow the mouse (no snapping)\n              }\n\n              if (isOrig) {\n                // needs to have moved hits to be a valid drop\n                eventDefMutation = null;\n              }\n            },\n            hitOut: function hitOut() {\n              view.unrenderDrag(seg); // unrender whatever was done in renderDrag\n\n              mouseFollower.show(); // show in case we are moving out of all hits\n\n              eventDefMutation = null;\n            },\n            hitDone: function hitDone() {\n              util_1.enableCursor();\n            },\n            interactionEnd: function interactionEnd(ev) {\n              delete seg.component; // prevent side effects\n              // do revert animation if hasn't changed. calls a callback when finished (whether animation or not)\n\n              mouseFollower.stop(!eventDefMutation, function () {\n                if (isDragging) {\n                  view.unrenderDrag(seg);\n\n                  _this.segDragStop(seg, ev);\n                }\n\n                view.showEventsWithId(seg.footprint.eventDef.id);\n\n                if (eventDefMutation) {\n                  // no need to re-show original, will rerender all anyways. esp important if eventRenderWait\n                  view.reportEventDrop(eventInstance, eventDefMutation, el, ev);\n                }\n              });\n              _this.dragListener = null;\n            }\n          });\n          return dragListener;\n        }; // Called before event segment dragging starts\n\n\n        EventDragging.prototype.segDragStart = function (seg, ev) {\n          this.isDragging = true;\n          this.component.publiclyTrigger('eventDragStart', {\n            context: seg.el[0],\n            args: [seg.footprint.getEventLegacy(), ev, {}, this.view]\n          });\n        }; // Called after event segment dragging stops\n\n\n        EventDragging.prototype.segDragStop = function (seg, ev) {\n          this.isDragging = false;\n          this.component.publiclyTrigger('eventDragStop', {\n            context: seg.el[0],\n            args: [seg.footprint.getEventLegacy(), ev, {}, this.view]\n          });\n        }; // DOES NOT consider overlap/constraint\n\n\n        EventDragging.prototype.computeEventDropMutation = function (startFootprint, endFootprint, eventDef) {\n          var eventDefMutation = new EventDefMutation_1[\"default\"]();\n          eventDefMutation.setDateMutation(this.computeEventDateMutation(startFootprint, endFootprint));\n          return eventDefMutation;\n        };\n\n        EventDragging.prototype.computeEventDateMutation = function (startFootprint, endFootprint) {\n          var date0 = startFootprint.unzonedRange.getStart();\n          var date1 = endFootprint.unzonedRange.getStart();\n          var clearEnd = false;\n          var forceTimed = false;\n          var forceAllDay = false;\n          var dateDelta;\n          var dateMutation;\n\n          if (startFootprint.isAllDay !== endFootprint.isAllDay) {\n            clearEnd = true;\n\n            if (endFootprint.isAllDay) {\n              forceAllDay = true;\n              date0.stripTime();\n            } else {\n              forceTimed = true;\n            }\n          }\n\n          dateDelta = this.component.diffDates(date1, date0);\n          dateMutation = new EventDefDateMutation_1[\"default\"]();\n          dateMutation.clearEnd = clearEnd;\n          dateMutation.forceTimed = forceTimed;\n          dateMutation.forceAllDay = forceAllDay;\n          dateMutation.setDateDelta(dateDelta);\n          return dateMutation;\n        };\n\n        return EventDragging;\n      }(Interaction_1[\"default\"]);\n\n      exports[\"default\"] = EventDragging;\n      /***/\n    },\n    /* 236 */\n\n    /***/\n    function (module, exports, __webpack_require__) {\n      Object.defineProperty(exports, \"__esModule\", {\n        value: true\n      });\n\n      var tslib_1 = __webpack_require__(2);\n\n      var util_1 = __webpack_require__(4);\n\n      var HitDragListener_1 = __webpack_require__(17);\n\n      var ComponentFootprint_1 = __webpack_require__(12);\n\n      var UnzonedRange_1 = __webpack_require__(5);\n\n      var Interaction_1 = __webpack_require__(14);\n\n      var DateSelecting =\n      /** @class */\n      function (_super) {\n        tslib_1.__extends(DateSelecting, _super);\n        /*\r\n        component must implement:\r\n          - bindDateHandlerToEl\r\n          - getSafeHitFootprint\r\n          - renderHighlight\r\n          - unrenderHighlight\r\n        */\n\n\n        function DateSelecting(component) {\n          var _this = _super.call(this, component) || this;\n\n          _this.dragListener = _this.buildDragListener();\n          return _this;\n        }\n\n        DateSelecting.prototype.end = function () {\n          this.dragListener.endInteraction();\n        };\n\n        DateSelecting.prototype.getDelay = function () {\n          var delay = this.opt('selectLongPressDelay');\n\n          if (delay == null) {\n            delay = this.opt('longPressDelay'); // fallback\n          }\n\n          return delay;\n        };\n\n        DateSelecting.prototype.bindToEl = function (el) {\n          var _this = this;\n\n          var component = this.component;\n          var dragListener = this.dragListener;\n          component.bindDateHandlerToEl(el, 'mousedown', function (ev) {\n            if (_this.opt('selectable') && !component.shouldIgnoreMouse()) {\n              dragListener.startInteraction(ev, {\n                distance: _this.opt('selectMinDistance')\n              });\n            }\n          });\n          component.bindDateHandlerToEl(el, 'touchstart', function (ev) {\n            if (_this.opt('selectable') && !component.shouldIgnoreTouch()) {\n              dragListener.startInteraction(ev, {\n                delay: _this.getDelay()\n              });\n            }\n          });\n          util_1.preventSelection(el);\n        }; // Creates a listener that tracks the user's drag across day elements, for day selecting.\n\n\n        DateSelecting.prototype.buildDragListener = function () {\n          var _this = this;\n\n          var component = this.component;\n          var selectionFootprint; // null if invalid selection\n\n          var dragListener = new HitDragListener_1[\"default\"](component, {\n            scroll: this.opt('dragScroll'),\n            interactionStart: function interactionStart() {\n              selectionFootprint = null;\n            },\n            dragStart: function dragStart(ev) {\n              _this.view.unselect(ev); // since we could be rendering a new selection, we want to clear any old one\n\n            },\n            hitOver: function hitOver(hit, isOrig, origHit) {\n              var origHitFootprint;\n              var hitFootprint;\n\n              if (origHit) {\n                // click needs to have started on a hit\n                origHitFootprint = component.getSafeHitFootprint(origHit);\n                hitFootprint = component.getSafeHitFootprint(hit);\n\n                if (origHitFootprint && hitFootprint) {\n                  selectionFootprint = _this.computeSelection(origHitFootprint, hitFootprint);\n                } else {\n                  selectionFootprint = null;\n                }\n\n                if (selectionFootprint) {\n                  component.renderSelectionFootprint(selectionFootprint);\n                } else if (selectionFootprint === false) {\n                  util_1.disableCursor();\n                }\n              }\n            },\n            hitOut: function hitOut() {\n              selectionFootprint = null;\n              component.unrenderSelection();\n            },\n            hitDone: function hitDone() {\n              util_1.enableCursor();\n            },\n            interactionEnd: function interactionEnd(ev, isCancelled) {\n              if (!isCancelled && selectionFootprint) {\n                // the selection will already have been rendered. just report it\n                _this.view.reportSelection(selectionFootprint, ev);\n              }\n            }\n          });\n          return dragListener;\n        }; // Given the first and last date-spans of a selection, returns another date-span object.\n        // Subclasses can override and provide additional data in the span object. Will be passed to renderSelectionFootprint().\n        // Will return false if the selection is invalid and this should be indicated to the user.\n        // Will return null/undefined if a selection invalid but no error should be reported.\n\n\n        DateSelecting.prototype.computeSelection = function (footprint0, footprint1) {\n          var wholeFootprint = this.computeSelectionFootprint(footprint0, footprint1);\n\n          if (wholeFootprint && !this.isSelectionFootprintAllowed(wholeFootprint)) {\n            return false;\n          }\n\n          return wholeFootprint;\n        }; // Given two spans, must return the combination of the two.\n        // TODO: do this separation of concerns (combining VS validation) for event dnd/resize too.\n        // Assumes both footprints are non-open-ended.\n\n\n        DateSelecting.prototype.computeSelectionFootprint = function (footprint0, footprint1) {\n          var ms = [footprint0.unzonedRange.startMs, footprint0.unzonedRange.endMs, footprint1.unzonedRange.startMs, footprint1.unzonedRange.endMs];\n          ms.sort(util_1.compareNumbers);\n          return new ComponentFootprint_1[\"default\"](new UnzonedRange_1[\"default\"](ms[0], ms[3]), footprint0.isAllDay);\n        };\n\n        DateSelecting.prototype.isSelectionFootprintAllowed = function (componentFootprint) {\n          return this.component.dateProfile.validUnzonedRange.containsRange(componentFootprint.unzonedRange) && this.view.calendar.constraints.isSelectionFootprintAllowed(componentFootprint);\n        };\n\n        return DateSelecting;\n      }(Interaction_1[\"default\"]);\n\n      exports[\"default\"] = DateSelecting;\n      /***/\n    },\n    /* 237 */\n\n    /***/\n    function (module, exports, __webpack_require__) {\n      Object.defineProperty(exports, \"__esModule\", {\n        value: true\n      });\n\n      var tslib_1 = __webpack_require__(2);\n\n      var HitDragListener_1 = __webpack_require__(17);\n\n      var Interaction_1 = __webpack_require__(14);\n\n      var DateClicking =\n      /** @class */\n      function (_super) {\n        tslib_1.__extends(DateClicking, _super);\n        /*\r\n        component must implement:\r\n          - bindDateHandlerToEl\r\n          - getSafeHitFootprint\r\n          - getHitEl\r\n        */\n\n\n        function DateClicking(component) {\n          var _this = _super.call(this, component) || this;\n\n          _this.dragListener = _this.buildDragListener();\n          return _this;\n        }\n\n        DateClicking.prototype.end = function () {\n          this.dragListener.endInteraction();\n        };\n\n        DateClicking.prototype.bindToEl = function (el) {\n          var component = this.component;\n          var dragListener = this.dragListener;\n          component.bindDateHandlerToEl(el, 'mousedown', function (ev) {\n            if (!component.shouldIgnoreMouse()) {\n              dragListener.startInteraction(ev);\n            }\n          });\n          component.bindDateHandlerToEl(el, 'touchstart', function (ev) {\n            if (!component.shouldIgnoreTouch()) {\n              dragListener.startInteraction(ev);\n            }\n          });\n        }; // Creates a listener that tracks the user's drag across day elements, for day clicking.\n\n\n        DateClicking.prototype.buildDragListener = function () {\n          var _this = this;\n\n          var component = this.component;\n          var dayClickHit; // null if invalid dayClick\n\n          var dragListener = new HitDragListener_1[\"default\"](component, {\n            scroll: this.opt('dragScroll'),\n            interactionStart: function interactionStart() {\n              dayClickHit = dragListener.origHit;\n            },\n            hitOver: function hitOver(hit, isOrig, origHit) {\n              // if user dragged to another cell at any point, it can no longer be a dayClick\n              if (!isOrig) {\n                dayClickHit = null;\n              }\n            },\n            hitOut: function hitOut() {\n              dayClickHit = null;\n            },\n            interactionEnd: function interactionEnd(ev, isCancelled) {\n              var componentFootprint;\n\n              if (!isCancelled && dayClickHit) {\n                componentFootprint = component.getSafeHitFootprint(dayClickHit);\n\n                if (componentFootprint) {\n                  _this.view.triggerDayClick(componentFootprint, component.getHitEl(dayClickHit), ev);\n                }\n              }\n            }\n          }); // because dragListener won't be called with any time delay, \"dragging\" will begin immediately,\n          // which will kill any touchmoving/scrolling. Prevent this.\n\n          dragListener.shouldCancelTouchScroll = false;\n          dragListener.scrollAlwaysKills = true;\n          return dragListener;\n        };\n\n        return DateClicking;\n      }(Interaction_1[\"default\"]);\n\n      exports[\"default\"] = DateClicking;\n      /***/\n    },\n    /* 238 */\n\n    /***/\n    function (module, exports, __webpack_require__) {\n      Object.defineProperty(exports, \"__esModule\", {\n        value: true\n      });\n\n      var tslib_1 = __webpack_require__(2);\n\n      var moment = __webpack_require__(0);\n\n      var $ = __webpack_require__(3);\n\n      var util_1 = __webpack_require__(4);\n\n      var Scroller_1 = __webpack_require__(41);\n\n      var View_1 = __webpack_require__(43);\n\n      var TimeGrid_1 = __webpack_require__(239);\n\n      var DayGrid_1 = __webpack_require__(66);\n\n      var AGENDA_ALL_DAY_EVENT_LIMIT = 5;\n      var agendaTimeGridMethods;\n      var agendaDayGridMethods;\n      /* An abstract class for all agenda-related views. Displays one more columns with time slots running vertically.\r\n      ----------------------------------------------------------------------------------------------------------------------*/\n      // Is a manager for the TimeGrid subcomponent and possibly the DayGrid subcomponent (if allDaySlot is on).\n      // Responsible for managing width/height.\n\n      var AgendaView =\n      /** @class */\n      function (_super) {\n        tslib_1.__extends(AgendaView, _super);\n\n        function AgendaView(calendar, viewSpec) {\n          var _this = _super.call(this, calendar, viewSpec) || this;\n\n          _this.usesMinMaxTime = true; // indicates that minTime/maxTime affects rendering\n\n          _this.timeGrid = _this.instantiateTimeGrid();\n\n          _this.addChild(_this.timeGrid);\n\n          if (_this.opt('allDaySlot')) {\n            // should we display the \"all-day\" area?\n            _this.dayGrid = _this.instantiateDayGrid(); // the all-day subcomponent of this view\n\n            _this.addChild(_this.dayGrid);\n          }\n\n          _this.scroller = new Scroller_1[\"default\"]({\n            overflowX: 'hidden',\n            overflowY: 'auto'\n          });\n          return _this;\n        } // Instantiates the TimeGrid object this view needs. Draws from this.timeGridClass\n\n\n        AgendaView.prototype.instantiateTimeGrid = function () {\n          var timeGrid = new this.timeGridClass(this);\n          util_1.copyOwnProps(agendaTimeGridMethods, timeGrid);\n          return timeGrid;\n        }; // Instantiates the DayGrid object this view might need. Draws from this.dayGridClass\n\n\n        AgendaView.prototype.instantiateDayGrid = function () {\n          var dayGrid = new this.dayGridClass(this);\n          util_1.copyOwnProps(agendaDayGridMethods, dayGrid);\n          return dayGrid;\n        };\n        /* Rendering\r\n        ------------------------------------------------------------------------------------------------------------------*/\n\n\n        AgendaView.prototype.renderSkeleton = function () {\n          var timeGridWrapEl;\n          var timeGridEl;\n          this.el.addClass('fc-agenda-view').html(this.renderSkeletonHtml());\n          this.scroller.render();\n          timeGridWrapEl = this.scroller.el.addClass('fc-time-grid-container');\n          timeGridEl = $('<div class=\"fc-time-grid\" />').appendTo(timeGridWrapEl);\n          this.el.find('.fc-body > tr > td').append(timeGridWrapEl);\n          this.timeGrid.headContainerEl = this.el.find('.fc-head-container');\n          this.timeGrid.setElement(timeGridEl);\n\n          if (this.dayGrid) {\n            this.dayGrid.setElement(this.el.find('.fc-day-grid')); // have the day-grid extend it's coordinate area over the <hr> dividing the two grids\n\n            this.dayGrid.bottomCoordPadding = this.dayGrid.el.next('hr').outerHeight();\n          }\n        };\n\n        AgendaView.prototype.unrenderSkeleton = function () {\n          this.timeGrid.removeElement();\n\n          if (this.dayGrid) {\n            this.dayGrid.removeElement();\n          }\n\n          this.scroller.destroy();\n        }; // Builds the HTML skeleton for the view.\n        // The day-grid and time-grid components will render inside containers defined by this HTML.\n\n\n        AgendaView.prototype.renderSkeletonHtml = function () {\n          var theme = this.calendar.theme;\n          return '' + '<table class=\"' + theme.getClass('tableGrid') + '\">' + (this.opt('columnHeader') ? '<thead class=\"fc-head\">' + '<tr>' + '<td class=\"fc-head-container ' + theme.getClass('widgetHeader') + '\">&nbsp;</td>' + '</tr>' + '</thead>' : '') + '<tbody class=\"fc-body\">' + '<tr>' + '<td class=\"' + theme.getClass('widgetContent') + '\">' + (this.dayGrid ? '<div class=\"fc-day-grid\"/>' + '<hr class=\"fc-divider ' + theme.getClass('widgetHeader') + '\"/>' : '') + '</td>' + '</tr>' + '</tbody>' + '</table>';\n        }; // Generates an HTML attribute string for setting the width of the axis, if it is known\n\n\n        AgendaView.prototype.axisStyleAttr = function () {\n          if (this.axisWidth != null) {\n            return 'style=\"width:' + this.axisWidth + 'px\"';\n          }\n\n          return '';\n        };\n        /* Now Indicator\r\n        ------------------------------------------------------------------------------------------------------------------*/\n\n\n        AgendaView.prototype.getNowIndicatorUnit = function () {\n          return this.timeGrid.getNowIndicatorUnit();\n        };\n        /* Dimensions\r\n        ------------------------------------------------------------------------------------------------------------------*/\n        // Adjusts the vertical dimensions of the view to the specified values\n\n\n        AgendaView.prototype.updateSize = function (totalHeight, isAuto, isResize) {\n          var eventLimit;\n          var scrollerHeight;\n          var scrollbarWidths;\n\n          _super.prototype.updateSize.call(this, totalHeight, isAuto, isResize); // make all axis cells line up, and record the width so newly created axis cells will have it\n\n\n          this.axisWidth = util_1.matchCellWidths(this.el.find('.fc-axis')); // hack to give the view some height prior to timeGrid's columns being rendered\n          // TODO: separate setting height from scroller VS timeGrid.\n\n          if (!this.timeGrid.colEls) {\n            if (!isAuto) {\n              scrollerHeight = this.computeScrollerHeight(totalHeight);\n              this.scroller.setHeight(scrollerHeight);\n            }\n\n            return;\n          } // set of fake row elements that must compensate when scroller has scrollbars\n\n\n          var noScrollRowEls = this.el.find('.fc-row:not(.fc-scroller *)'); // reset all dimensions back to the original state\n\n          this.timeGrid.bottomRuleEl.hide(); // .show() will be called later if this <hr> is necessary\n\n          this.scroller.clear(); // sets height to 'auto' and clears overflow\n\n          util_1.uncompensateScroll(noScrollRowEls); // limit number of events in the all-day area\n\n          if (this.dayGrid) {\n            this.dayGrid.removeSegPopover(); // kill the \"more\" popover if displayed\n\n            eventLimit = this.opt('eventLimit');\n\n            if (eventLimit && typeof eventLimit !== 'number') {\n              eventLimit = AGENDA_ALL_DAY_EVENT_LIMIT; // make sure \"auto\" goes to a real number\n            }\n\n            if (eventLimit) {\n              this.dayGrid.limitRows(eventLimit);\n            }\n          }\n\n          if (!isAuto) {\n            // should we force dimensions of the scroll container?\n            scrollerHeight = this.computeScrollerHeight(totalHeight);\n            this.scroller.setHeight(scrollerHeight);\n            scrollbarWidths = this.scroller.getScrollbarWidths();\n\n            if (scrollbarWidths.left || scrollbarWidths.right) {\n              // using scrollbars?\n              // make the all-day and header rows lines up\n              util_1.compensateScroll(noScrollRowEls, scrollbarWidths); // the scrollbar compensation might have changed text flow, which might affect height, so recalculate\n              // and reapply the desired height to the scroller.\n\n              scrollerHeight = this.computeScrollerHeight(totalHeight);\n              this.scroller.setHeight(scrollerHeight);\n            } // guarantees the same scrollbar widths\n\n\n            this.scroller.lockOverflow(scrollbarWidths); // if there's any space below the slats, show the horizontal rule.\n            // this won't cause any new overflow, because lockOverflow already called.\n\n            if (this.timeGrid.getTotalSlatHeight() < scrollerHeight) {\n              this.timeGrid.bottomRuleEl.show();\n            }\n          }\n        }; // given a desired total height of the view, returns what the height of the scroller should be\n\n\n        AgendaView.prototype.computeScrollerHeight = function (totalHeight) {\n          return totalHeight - util_1.subtractInnerElHeight(this.el, this.scroller.el); // everything that's NOT the scroller\n        };\n        /* Scroll\r\n        ------------------------------------------------------------------------------------------------------------------*/\n        // Computes the initial pre-configured scroll state prior to allowing the user to change it\n\n\n        AgendaView.prototype.computeInitialDateScroll = function () {\n          var scrollTime = moment.duration(this.opt('scrollTime'));\n          var top = this.timeGrid.computeTimeTop(scrollTime); // zoom can give weird floating-point values. rather scroll a little bit further\n\n          top = Math.ceil(top);\n\n          if (top) {\n            top++; // to overcome top border that slots beyond the first have. looks better\n          }\n\n          return {\n            top: top\n          };\n        };\n\n        AgendaView.prototype.queryDateScroll = function () {\n          return {\n            top: this.scroller.getScrollTop()\n          };\n        };\n\n        AgendaView.prototype.applyDateScroll = function (scroll) {\n          if (scroll.top !== undefined) {\n            this.scroller.setScrollTop(scroll.top);\n          }\n        };\n        /* Hit Areas\r\n        ------------------------------------------------------------------------------------------------------------------*/\n        // forward all hit-related method calls to the grids (dayGrid might not be defined)\n\n\n        AgendaView.prototype.getHitFootprint = function (hit) {\n          // TODO: hit.component is set as a hack to identify where the hit came from\n          return hit.component.getHitFootprint(hit);\n        };\n\n        AgendaView.prototype.getHitEl = function (hit) {\n          // TODO: hit.component is set as a hack to identify where the hit came from\n          return hit.component.getHitEl(hit);\n        };\n        /* Event Rendering\r\n        ------------------------------------------------------------------------------------------------------------------*/\n\n\n        AgendaView.prototype.executeEventRender = function (eventsPayload) {\n          var dayEventsPayload = {};\n          var timedEventsPayload = {};\n          var id;\n          var eventInstanceGroup; // separate the events into all-day and timed\n\n          for (id in eventsPayload) {\n            eventInstanceGroup = eventsPayload[id];\n\n            if (eventInstanceGroup.getEventDef().isAllDay()) {\n              dayEventsPayload[id] = eventInstanceGroup;\n            } else {\n              timedEventsPayload[id] = eventInstanceGroup;\n            }\n          }\n\n          this.timeGrid.executeEventRender(timedEventsPayload);\n\n          if (this.dayGrid) {\n            this.dayGrid.executeEventRender(dayEventsPayload);\n          }\n        };\n        /* Dragging/Resizing Routing\r\n        ------------------------------------------------------------------------------------------------------------------*/\n        // A returned value of `true` signals that a mock \"helper\" event has been rendered.\n\n\n        AgendaView.prototype.renderDrag = function (eventFootprints, seg, isTouch) {\n          var groups = groupEventFootprintsByAllDay(eventFootprints);\n          var renderedHelper = false;\n          renderedHelper = this.timeGrid.renderDrag(groups.timed, seg, isTouch);\n\n          if (this.dayGrid) {\n            renderedHelper = this.dayGrid.renderDrag(groups.allDay, seg, isTouch) || renderedHelper;\n          }\n\n          return renderedHelper;\n        };\n\n        AgendaView.prototype.renderEventResize = function (eventFootprints, seg, isTouch) {\n          var groups = groupEventFootprintsByAllDay(eventFootprints);\n          this.timeGrid.renderEventResize(groups.timed, seg, isTouch);\n\n          if (this.dayGrid) {\n            this.dayGrid.renderEventResize(groups.allDay, seg, isTouch);\n          }\n        };\n        /* Selection\r\n        ------------------------------------------------------------------------------------------------------------------*/\n        // Renders a visual indication of a selection\n\n\n        AgendaView.prototype.renderSelectionFootprint = function (componentFootprint) {\n          if (!componentFootprint.isAllDay) {\n            this.timeGrid.renderSelectionFootprint(componentFootprint);\n          } else if (this.dayGrid) {\n            this.dayGrid.renderSelectionFootprint(componentFootprint);\n          }\n        };\n\n        return AgendaView;\n      }(View_1[\"default\"]);\n\n      exports[\"default\"] = AgendaView;\n      AgendaView.prototype.timeGridClass = TimeGrid_1[\"default\"];\n      AgendaView.prototype.dayGridClass = DayGrid_1[\"default\"]; // Will customize the rendering behavior of the AgendaView's timeGrid\n\n      agendaTimeGridMethods = {\n        // Generates the HTML that will go before the day-of week header cells\n        renderHeadIntroHtml: function renderHeadIntroHtml() {\n          var view = this.view;\n          var calendar = view.calendar;\n          var weekStart = calendar.msToUtcMoment(this.dateProfile.renderUnzonedRange.startMs, true);\n          var weekText;\n\n          if (this.opt('weekNumbers')) {\n            weekText = weekStart.format(this.opt('smallWeekFormat'));\n            return '' + '<th class=\"fc-axis fc-week-number ' + calendar.theme.getClass('widgetHeader') + '\" ' + view.axisStyleAttr() + '>' + view.buildGotoAnchorHtml( // aside from link, important for matchCellWidths\n            {\n              date: weekStart,\n              type: 'week',\n              forceOff: this.colCnt > 1\n            }, util_1.htmlEscape(weekText) // inner HTML\n            ) + '</th>';\n          } else {\n            return '<th class=\"fc-axis ' + calendar.theme.getClass('widgetHeader') + '\" ' + view.axisStyleAttr() + '></th>';\n          }\n        },\n        // Generates the HTML that goes before the bg of the TimeGrid slot area. Long vertical column.\n        renderBgIntroHtml: function renderBgIntroHtml() {\n          var view = this.view;\n          return '<td class=\"fc-axis ' + view.calendar.theme.getClass('widgetContent') + '\" ' + view.axisStyleAttr() + '></td>';\n        },\n        // Generates the HTML that goes before all other types of cells.\n        // Affects content-skeleton, helper-skeleton, highlight-skeleton for both the time-grid and day-grid.\n        renderIntroHtml: function renderIntroHtml() {\n          var view = this.view;\n          return '<td class=\"fc-axis\" ' + view.axisStyleAttr() + '></td>';\n        }\n      }; // Will customize the rendering behavior of the AgendaView's dayGrid\n\n      agendaDayGridMethods = {\n        // Generates the HTML that goes before the all-day cells\n        renderBgIntroHtml: function renderBgIntroHtml() {\n          var view = this.view;\n          return '' + '<td class=\"fc-axis ' + view.calendar.theme.getClass('widgetContent') + '\" ' + view.axisStyleAttr() + '>' + '<span>' + // needed for matchCellWidths\n          view.getAllDayHtml() + '</span>' + '</td>';\n        },\n        // Generates the HTML that goes before all other types of cells.\n        // Affects content-skeleton, helper-skeleton, highlight-skeleton for both the time-grid and day-grid.\n        renderIntroHtml: function renderIntroHtml() {\n          var view = this.view;\n          return '<td class=\"fc-axis\" ' + view.axisStyleAttr() + '></td>';\n        }\n      };\n\n      function groupEventFootprintsByAllDay(eventFootprints) {\n        var allDay = [];\n        var timed = [];\n        var i;\n\n        for (i = 0; i < eventFootprints.length; i++) {\n          if (eventFootprints[i].componentFootprint.isAllDay) {\n            allDay.push(eventFootprints[i]);\n          } else {\n            timed.push(eventFootprints[i]);\n          }\n        }\n\n        return {\n          allDay: allDay,\n          timed: timed\n        };\n      }\n      /***/\n\n    },\n    /* 239 */\n\n    /***/\n    function (module, exports, __webpack_require__) {\n      Object.defineProperty(exports, \"__esModule\", {\n        value: true\n      });\n\n      var tslib_1 = __webpack_require__(2);\n\n      var $ = __webpack_require__(3);\n\n      var moment = __webpack_require__(0);\n\n      var util_1 = __webpack_require__(4);\n\n      var InteractiveDateComponent_1 = __webpack_require__(42);\n\n      var BusinessHourRenderer_1 = __webpack_require__(61);\n\n      var StandardInteractionsMixin_1 = __webpack_require__(65);\n\n      var DayTableMixin_1 = __webpack_require__(60);\n\n      var CoordCache_1 = __webpack_require__(58);\n\n      var UnzonedRange_1 = __webpack_require__(5);\n\n      var ComponentFootprint_1 = __webpack_require__(12);\n\n      var TimeGridEventRenderer_1 = __webpack_require__(240);\n\n      var TimeGridHelperRenderer_1 = __webpack_require__(241);\n\n      var TimeGridFillRenderer_1 = __webpack_require__(242);\n      /* A component that renders one or more columns of vertical time slots\r\n      ----------------------------------------------------------------------------------------------------------------------*/\n      // We mixin DayTable, even though there is only a single row of days\n      // potential nice values for the slot-duration and interval-duration\n      // from largest to smallest\n\n\n      var AGENDA_STOCK_SUB_DURATIONS = [{\n        hours: 1\n      }, {\n        minutes: 30\n      }, {\n        minutes: 15\n      }, {\n        seconds: 30\n      }, {\n        seconds: 15\n      }];\n\n      var TimeGrid =\n      /** @class */\n      function (_super) {\n        tslib_1.__extends(TimeGrid, _super);\n\n        function TimeGrid(view) {\n          var _this = _super.call(this, view) || this;\n\n          _this.processOptions();\n\n          return _this;\n        } // Slices up the given span (unzoned start/end with other misc data) into an array of segments\n\n\n        TimeGrid.prototype.componentFootprintToSegs = function (componentFootprint) {\n          var segs = this.sliceRangeByTimes(componentFootprint.unzonedRange);\n          var i;\n\n          for (i = 0; i < segs.length; i++) {\n            if (this.isRTL) {\n              segs[i].col = this.daysPerRow - 1 - segs[i].dayIndex;\n            } else {\n              segs[i].col = segs[i].dayIndex;\n            }\n          }\n\n          return segs;\n        };\n        /* Date Handling\r\n        ------------------------------------------------------------------------------------------------------------------*/\n\n\n        TimeGrid.prototype.sliceRangeByTimes = function (unzonedRange) {\n          var segs = [];\n          var segRange;\n          var dayIndex;\n\n          for (dayIndex = 0; dayIndex < this.daysPerRow; dayIndex++) {\n            segRange = unzonedRange.intersect(this.dayRanges[dayIndex]);\n\n            if (segRange) {\n              segs.push({\n                startMs: segRange.startMs,\n                endMs: segRange.endMs,\n                isStart: segRange.isStart,\n                isEnd: segRange.isEnd,\n                dayIndex: dayIndex\n              });\n            }\n          }\n\n          return segs;\n        };\n        /* Options\r\n        ------------------------------------------------------------------------------------------------------------------*/\n        // Parses various options into properties of this object\n\n\n        TimeGrid.prototype.processOptions = function () {\n          var slotDuration = this.opt('slotDuration');\n          var snapDuration = this.opt('snapDuration');\n          var input;\n          slotDuration = moment.duration(slotDuration);\n          snapDuration = snapDuration ? moment.duration(snapDuration) : slotDuration;\n          this.slotDuration = slotDuration;\n          this.snapDuration = snapDuration;\n          this.snapsPerSlot = slotDuration / snapDuration; // TODO: ensure an integer multiple?\n          // might be an array value (for TimelineView).\n          // if so, getting the most granular entry (the last one probably).\n\n          input = this.opt('slotLabelFormat');\n\n          if ($.isArray(input)) {\n            input = input[input.length - 1];\n          }\n\n          this.labelFormat = input || this.opt('smallTimeFormat'); // the computed default\n\n          input = this.opt('slotLabelInterval');\n          this.labelInterval = input ? moment.duration(input) : this.computeLabelInterval(slotDuration);\n        }; // Computes an automatic value for slotLabelInterval\n\n\n        TimeGrid.prototype.computeLabelInterval = function (slotDuration) {\n          var i;\n          var labelInterval;\n          var slotsPerLabel; // find the smallest stock label interval that results in more than one slots-per-label\n\n          for (i = AGENDA_STOCK_SUB_DURATIONS.length - 1; i >= 0; i--) {\n            labelInterval = moment.duration(AGENDA_STOCK_SUB_DURATIONS[i]);\n            slotsPerLabel = util_1.divideDurationByDuration(labelInterval, slotDuration);\n\n            if (util_1.isInt(slotsPerLabel) && slotsPerLabel > 1) {\n              return labelInterval;\n            }\n          }\n\n          return moment.duration(slotDuration); // fall back. clone\n        };\n        /* Date Rendering\r\n        ------------------------------------------------------------------------------------------------------------------*/\n\n\n        TimeGrid.prototype.renderDates = function (dateProfile) {\n          this.dateProfile = dateProfile;\n          this.updateDayTable();\n          this.renderSlats();\n          this.renderColumns();\n        };\n\n        TimeGrid.prototype.unrenderDates = function () {\n          // this.unrenderSlats(); // don't need this because repeated .html() calls clear\n          this.unrenderColumns();\n        };\n\n        TimeGrid.prototype.renderSkeleton = function () {\n          var theme = this.view.calendar.theme;\n          this.el.html('<div class=\"fc-bg\"></div>' + '<div class=\"fc-slats\"></div>' + '<hr class=\"fc-divider ' + theme.getClass('widgetHeader') + '\" style=\"display:none\" />');\n          this.bottomRuleEl = this.el.find('hr');\n        };\n\n        TimeGrid.prototype.renderSlats = function () {\n          var theme = this.view.calendar.theme;\n          this.slatContainerEl = this.el.find('> .fc-slats').html( // avoids needing ::unrenderSlats()\n          '<table class=\"' + theme.getClass('tableGrid') + '\">' + this.renderSlatRowHtml() + '</table>');\n          this.slatEls = this.slatContainerEl.find('tr');\n          this.slatCoordCache = new CoordCache_1[\"default\"]({\n            els: this.slatEls,\n            isVertical: true\n          });\n        }; // Generates the HTML for the horizontal \"slats\" that run width-wise. Has a time axis on a side. Depends on RTL.\n\n\n        TimeGrid.prototype.renderSlatRowHtml = function () {\n          var view = this.view;\n          var calendar = view.calendar;\n          var theme = calendar.theme;\n          var isRTL = this.isRTL;\n          var dateProfile = this.dateProfile;\n          var html = '';\n          var slotTime = moment.duration(+dateProfile.minTime); // wish there was .clone() for durations\n\n          var slotIterator = moment.duration(0);\n          var slotDate; // will be on the view's first day, but we only care about its time\n\n          var isLabeled;\n          var axisHtml; // Calculate the time for each slot\n\n          while (slotTime < dateProfile.maxTime) {\n            slotDate = calendar.msToUtcMoment(dateProfile.renderUnzonedRange.startMs).time(slotTime);\n            isLabeled = util_1.isInt(util_1.divideDurationByDuration(slotIterator, this.labelInterval));\n            axisHtml = '<td class=\"fc-axis fc-time ' + theme.getClass('widgetContent') + '\" ' + view.axisStyleAttr() + '>' + (isLabeled ? '<span>' + // for matchCellWidths\n            util_1.htmlEscape(slotDate.format(this.labelFormat)) + '</span>' : '') + '</td>';\n            html += '<tr data-time=\"' + slotDate.format('HH:mm:ss') + '\"' + (isLabeled ? '' : ' class=\"fc-minor\"') + '>' + (!isRTL ? axisHtml : '') + '<td class=\"' + theme.getClass('widgetContent') + '\"/>' + (isRTL ? axisHtml : '') + '</tr>';\n            slotTime.add(this.slotDuration);\n            slotIterator.add(this.slotDuration);\n          }\n\n          return html;\n        };\n\n        TimeGrid.prototype.renderColumns = function () {\n          var dateProfile = this.dateProfile;\n          var theme = this.view.calendar.theme;\n          this.dayRanges = this.dayDates.map(function (dayDate) {\n            return new UnzonedRange_1[\"default\"](dayDate.clone().add(dateProfile.minTime), dayDate.clone().add(dateProfile.maxTime));\n          });\n\n          if (this.headContainerEl) {\n            this.headContainerEl.html(this.renderHeadHtml());\n          }\n\n          this.el.find('> .fc-bg').html('<table class=\"' + theme.getClass('tableGrid') + '\">' + this.renderBgTrHtml(0) + // row=0\n          '</table>');\n          this.colEls = this.el.find('.fc-day, .fc-disabled-day');\n          this.colCoordCache = new CoordCache_1[\"default\"]({\n            els: this.colEls,\n            isHorizontal: true\n          });\n          this.renderContentSkeleton();\n        };\n\n        TimeGrid.prototype.unrenderColumns = function () {\n          this.unrenderContentSkeleton();\n        };\n        /* Content Skeleton\r\n        ------------------------------------------------------------------------------------------------------------------*/\n        // Renders the DOM that the view's content will live in\n\n\n        TimeGrid.prototype.renderContentSkeleton = function () {\n          var cellHtml = '';\n          var i;\n          var skeletonEl;\n\n          for (i = 0; i < this.colCnt; i++) {\n            cellHtml += '<td>' + '<div class=\"fc-content-col\">' + '<div class=\"fc-event-container fc-helper-container\"></div>' + '<div class=\"fc-event-container\"></div>' + '<div class=\"fc-highlight-container\"></div>' + '<div class=\"fc-bgevent-container\"></div>' + '<div class=\"fc-business-container\"></div>' + '</div>' + '</td>';\n          }\n\n          skeletonEl = this.contentSkeletonEl = $('<div class=\"fc-content-skeleton\">' + '<table>' + '<tr>' + cellHtml + '</tr>' + '</table>' + '</div>');\n          this.colContainerEls = skeletonEl.find('.fc-content-col');\n          this.helperContainerEls = skeletonEl.find('.fc-helper-container');\n          this.fgContainerEls = skeletonEl.find('.fc-event-container:not(.fc-helper-container)');\n          this.bgContainerEls = skeletonEl.find('.fc-bgevent-container');\n          this.highlightContainerEls = skeletonEl.find('.fc-highlight-container');\n          this.businessContainerEls = skeletonEl.find('.fc-business-container');\n          this.bookendCells(skeletonEl.find('tr')); // TODO: do this on string level\n\n          this.el.append(skeletonEl);\n        };\n\n        TimeGrid.prototype.unrenderContentSkeleton = function () {\n          if (this.contentSkeletonEl) {\n            // defensive :(\n            this.contentSkeletonEl.remove();\n            this.contentSkeletonEl = null;\n            this.colContainerEls = null;\n            this.helperContainerEls = null;\n            this.fgContainerEls = null;\n            this.bgContainerEls = null;\n            this.highlightContainerEls = null;\n            this.businessContainerEls = null;\n          }\n        }; // Given a flat array of segments, return an array of sub-arrays, grouped by each segment's col\n\n\n        TimeGrid.prototype.groupSegsByCol = function (segs) {\n          var segsByCol = [];\n          var i;\n\n          for (i = 0; i < this.colCnt; i++) {\n            segsByCol.push([]);\n          }\n\n          for (i = 0; i < segs.length; i++) {\n            segsByCol[segs[i].col].push(segs[i]);\n          }\n\n          return segsByCol;\n        }; // Given segments grouped by column, insert the segments' elements into a parallel array of container\n        // elements, each living within a column.\n\n\n        TimeGrid.prototype.attachSegsByCol = function (segsByCol, containerEls) {\n          var col;\n          var segs;\n          var i;\n\n          for (col = 0; col < this.colCnt; col++) {\n            // iterate each column grouping\n            segs = segsByCol[col];\n\n            for (i = 0; i < segs.length; i++) {\n              containerEls.eq(col).append(segs[i].el);\n            }\n          }\n        };\n        /* Now Indicator\r\n        ------------------------------------------------------------------------------------------------------------------*/\n\n\n        TimeGrid.prototype.getNowIndicatorUnit = function () {\n          return 'minute'; // will refresh on the minute\n        };\n\n        TimeGrid.prototype.renderNowIndicator = function (date) {\n          // HACK: if date columns not ready for some reason (scheduler)\n          if (!this.colContainerEls) {\n            return;\n          } // seg system might be overkill, but it handles scenario where line needs to be rendered\n          //  more than once because of columns with the same date (resources columns for example)\n\n\n          var segs = this.componentFootprintToSegs(new ComponentFootprint_1[\"default\"](new UnzonedRange_1[\"default\"](date, date.valueOf() + 1), // protect against null range\n          false // all-day\n          ));\n          var top = this.computeDateTop(date, date);\n          var nodes = [];\n          var i; // render lines within the columns\n\n          for (i = 0; i < segs.length; i++) {\n            nodes.push($('<div class=\"fc-now-indicator fc-now-indicator-line\"></div>').css('top', top).appendTo(this.colContainerEls.eq(segs[i].col))[0]);\n          } // render an arrow over the axis\n\n\n          if (segs.length > 0) {\n            // is the current time in view?\n            nodes.push($('<div class=\"fc-now-indicator fc-now-indicator-arrow\"></div>').css('top', top).appendTo(this.el.find('.fc-content-skeleton'))[0]);\n          }\n\n          this.nowIndicatorEls = $(nodes);\n        };\n\n        TimeGrid.prototype.unrenderNowIndicator = function () {\n          if (this.nowIndicatorEls) {\n            this.nowIndicatorEls.remove();\n            this.nowIndicatorEls = null;\n          }\n        };\n        /* Coordinates\r\n        ------------------------------------------------------------------------------------------------------------------*/\n\n\n        TimeGrid.prototype.updateSize = function (totalHeight, isAuto, isResize) {\n          _super.prototype.updateSize.call(this, totalHeight, isAuto, isResize);\n\n          this.slatCoordCache.build();\n\n          if (isResize) {\n            this.updateSegVerticals([].concat(this.eventRenderer.getSegs(), this.businessSegs || []));\n          }\n        };\n\n        TimeGrid.prototype.getTotalSlatHeight = function () {\n          return this.slatContainerEl.outerHeight();\n        }; // Computes the top coordinate, relative to the bounds of the grid, of the given date.\n        // `ms` can be a millisecond UTC time OR a UTC moment.\n        // A `startOfDayDate` must be given for avoiding ambiguity over how to treat midnight.\n\n\n        TimeGrid.prototype.computeDateTop = function (ms, startOfDayDate) {\n          return this.computeTimeTop(moment.duration(ms - startOfDayDate.clone().stripTime()));\n        }; // Computes the top coordinate, relative to the bounds of the grid, of the given time (a Duration).\n\n\n        TimeGrid.prototype.computeTimeTop = function (time) {\n          var len = this.slatEls.length;\n          var dateProfile = this.dateProfile;\n          var slatCoverage = (time - dateProfile.minTime) / this.slotDuration; // floating-point value of # of slots covered\n\n          var slatIndex;\n          var slatRemainder; // compute a floating-point number for how many slats should be progressed through.\n          // from 0 to number of slats (inclusive)\n          // constrained because minTime/maxTime might be customized.\n\n          slatCoverage = Math.max(0, slatCoverage);\n          slatCoverage = Math.min(len, slatCoverage); // an integer index of the furthest whole slat\n          // from 0 to number slats (*exclusive*, so len-1)\n\n          slatIndex = Math.floor(slatCoverage);\n          slatIndex = Math.min(slatIndex, len - 1); // how much further through the slatIndex slat (from 0.0-1.0) must be covered in addition.\n          // could be 1.0 if slatCoverage is covering *all* the slots\n\n          slatRemainder = slatCoverage - slatIndex;\n          return this.slatCoordCache.getTopPosition(slatIndex) + this.slatCoordCache.getHeight(slatIndex) * slatRemainder;\n        }; // Refreshes the CSS top/bottom coordinates for each segment element.\n        // Works when called after initial render, after a window resize/zoom for example.\n\n\n        TimeGrid.prototype.updateSegVerticals = function (segs) {\n          this.computeSegVerticals(segs);\n          this.assignSegVerticals(segs);\n        }; // For each segment in an array, computes and assigns its top and bottom properties\n\n\n        TimeGrid.prototype.computeSegVerticals = function (segs) {\n          var eventMinHeight = this.opt('agendaEventMinHeight');\n          var i;\n          var seg;\n          var dayDate;\n\n          for (i = 0; i < segs.length; i++) {\n            seg = segs[i];\n            dayDate = this.dayDates[seg.dayIndex];\n            seg.top = this.computeDateTop(seg.startMs, dayDate);\n            seg.bottom = Math.max(seg.top + eventMinHeight, this.computeDateTop(seg.endMs, dayDate));\n          }\n        }; // Given segments that already have their top/bottom properties computed, applies those values to\n        // the segments' elements.\n\n\n        TimeGrid.prototype.assignSegVerticals = function (segs) {\n          var i;\n          var seg;\n\n          for (i = 0; i < segs.length; i++) {\n            seg = segs[i];\n            seg.el.css(this.generateSegVerticalCss(seg));\n          }\n        }; // Generates an object with CSS properties for the top/bottom coordinates of a segment element\n\n\n        TimeGrid.prototype.generateSegVerticalCss = function (seg) {\n          return {\n            top: seg.top,\n            bottom: -seg.bottom // flipped because needs to be space beyond bottom edge of event container\n\n          };\n        };\n        /* Hit System\r\n        ------------------------------------------------------------------------------------------------------------------*/\n\n\n        TimeGrid.prototype.prepareHits = function () {\n          this.colCoordCache.build();\n          this.slatCoordCache.build();\n        };\n\n        TimeGrid.prototype.releaseHits = function () {\n          this.colCoordCache.clear(); // NOTE: don't clear slatCoordCache because we rely on it for computeTimeTop\n        };\n\n        TimeGrid.prototype.queryHit = function (leftOffset, topOffset) {\n          var snapsPerSlot = this.snapsPerSlot;\n          var colCoordCache = this.colCoordCache;\n          var slatCoordCache = this.slatCoordCache;\n\n          if (colCoordCache.isLeftInBounds(leftOffset) && slatCoordCache.isTopInBounds(topOffset)) {\n            var colIndex = colCoordCache.getHorizontalIndex(leftOffset);\n            var slatIndex = slatCoordCache.getVerticalIndex(topOffset);\n\n            if (colIndex != null && slatIndex != null) {\n              var slatTop = slatCoordCache.getTopOffset(slatIndex);\n              var slatHeight = slatCoordCache.getHeight(slatIndex);\n              var partial = (topOffset - slatTop) / slatHeight; // floating point number between 0 and 1\n\n              var localSnapIndex = Math.floor(partial * snapsPerSlot); // the snap # relative to start of slat\n\n              var snapIndex = slatIndex * snapsPerSlot + localSnapIndex;\n              var snapTop = slatTop + localSnapIndex / snapsPerSlot * slatHeight;\n              var snapBottom = slatTop + (localSnapIndex + 1) / snapsPerSlot * slatHeight;\n              return {\n                col: colIndex,\n                snap: snapIndex,\n                component: this,\n                left: colCoordCache.getLeftOffset(colIndex),\n                right: colCoordCache.getRightOffset(colIndex),\n                top: snapTop,\n                bottom: snapBottom\n              };\n            }\n          }\n        };\n\n        TimeGrid.prototype.getHitFootprint = function (hit) {\n          var start = this.getCellDate(0, hit.col); // row=0\n\n          var time = this.computeSnapTime(hit.snap); // pass in the snap-index\n\n          var end;\n          start.time(time);\n          end = start.clone().add(this.snapDuration);\n          return new ComponentFootprint_1[\"default\"](new UnzonedRange_1[\"default\"](start, end), false // all-day?\n          );\n        }; // Given a row number of the grid, representing a \"snap\", returns a time (Duration) from its start-of-day\n\n\n        TimeGrid.prototype.computeSnapTime = function (snapIndex) {\n          return moment.duration(this.dateProfile.minTime + this.snapDuration * snapIndex);\n        };\n\n        TimeGrid.prototype.getHitEl = function (hit) {\n          return this.colEls.eq(hit.col);\n        };\n        /* Event Drag Visualization\r\n        ------------------------------------------------------------------------------------------------------------------*/\n        // Renders a visual indication of an event being dragged over the specified date(s).\n        // A returned value of `true` signals that a mock \"helper\" event has been rendered.\n\n\n        TimeGrid.prototype.renderDrag = function (eventFootprints, seg, isTouch) {\n          var i;\n\n          if (seg) {\n            // if there is event information for this drag, render a helper event\n            if (eventFootprints.length) {\n              this.helperRenderer.renderEventDraggingFootprints(eventFootprints, seg, isTouch); // signal that a helper has been rendered\n\n              return true;\n            }\n          } else {\n            // otherwise, just render a highlight\n            for (i = 0; i < eventFootprints.length; i++) {\n              this.renderHighlight(eventFootprints[i].componentFootprint);\n            }\n          }\n        }; // Unrenders any visual indication of an event being dragged\n\n\n        TimeGrid.prototype.unrenderDrag = function () {\n          this.unrenderHighlight();\n          this.helperRenderer.unrender();\n        };\n        /* Event Resize Visualization\r\n        ------------------------------------------------------------------------------------------------------------------*/\n        // Renders a visual indication of an event being resized\n\n\n        TimeGrid.prototype.renderEventResize = function (eventFootprints, seg, isTouch) {\n          this.helperRenderer.renderEventResizingFootprints(eventFootprints, seg, isTouch);\n        }; // Unrenders any visual indication of an event being resized\n\n\n        TimeGrid.prototype.unrenderEventResize = function () {\n          this.helperRenderer.unrender();\n        };\n        /* Selection\r\n        ------------------------------------------------------------------------------------------------------------------*/\n        // Renders a visual indication of a selection. Overrides the default, which was to simply render a highlight.\n\n\n        TimeGrid.prototype.renderSelectionFootprint = function (componentFootprint) {\n          if (this.opt('selectHelper')) {\n            // this setting signals that a mock helper event should be rendered\n            this.helperRenderer.renderComponentFootprint(componentFootprint);\n          } else {\n            this.renderHighlight(componentFootprint);\n          }\n        }; // Unrenders any visual indication of a selection\n\n\n        TimeGrid.prototype.unrenderSelection = function () {\n          this.helperRenderer.unrender();\n          this.unrenderHighlight();\n        };\n\n        return TimeGrid;\n      }(InteractiveDateComponent_1[\"default\"]);\n\n      exports[\"default\"] = TimeGrid;\n      TimeGrid.prototype.eventRendererClass = TimeGridEventRenderer_1[\"default\"];\n      TimeGrid.prototype.businessHourRendererClass = BusinessHourRenderer_1[\"default\"];\n      TimeGrid.prototype.helperRendererClass = TimeGridHelperRenderer_1[\"default\"];\n      TimeGrid.prototype.fillRendererClass = TimeGridFillRenderer_1[\"default\"];\n      StandardInteractionsMixin_1[\"default\"].mixInto(TimeGrid);\n      DayTableMixin_1[\"default\"].mixInto(TimeGrid);\n      /***/\n    },\n    /* 240 */\n\n    /***/\n    function (module, exports, __webpack_require__) {\n      Object.defineProperty(exports, \"__esModule\", {\n        value: true\n      });\n\n      var tslib_1 = __webpack_require__(2);\n\n      var util_1 = __webpack_require__(4);\n\n      var EventRenderer_1 = __webpack_require__(44);\n      /*\r\n      Only handles foreground segs.\r\n      Does not own rendering. Use for low-level util methods by TimeGrid.\r\n      */\n\n\n      var TimeGridEventRenderer =\n      /** @class */\n      function (_super) {\n        tslib_1.__extends(TimeGridEventRenderer, _super);\n\n        function TimeGridEventRenderer(timeGrid, fillRenderer) {\n          var _this = _super.call(this, timeGrid, fillRenderer) || this;\n\n          _this.timeGrid = timeGrid;\n          return _this;\n        }\n\n        TimeGridEventRenderer.prototype.renderFgSegs = function (segs) {\n          this.renderFgSegsIntoContainers(segs, this.timeGrid.fgContainerEls);\n        }; // Given an array of foreground segments, render a DOM element for each, computes position,\n        // and attaches to the column inner-container elements.\n\n\n        TimeGridEventRenderer.prototype.renderFgSegsIntoContainers = function (segs, containerEls) {\n          var segsByCol;\n          var col;\n          segsByCol = this.timeGrid.groupSegsByCol(segs);\n\n          for (col = 0; col < this.timeGrid.colCnt; col++) {\n            this.updateFgSegCoords(segsByCol[col]);\n          }\n\n          this.timeGrid.attachSegsByCol(segsByCol, containerEls);\n        };\n\n        TimeGridEventRenderer.prototype.unrenderFgSegs = function () {\n          if (this.fgSegs) {\n            // hack\n            this.fgSegs.forEach(function (seg) {\n              seg.el.remove();\n            });\n          }\n        }; // Computes a default event time formatting string if `timeFormat` is not explicitly defined\n\n\n        TimeGridEventRenderer.prototype.computeEventTimeFormat = function () {\n          return this.opt('noMeridiemTimeFormat'); // like \"6:30\" (no AM/PM)\n        }; // Computes a default `displayEventEnd` value if one is not expliclty defined\n\n\n        TimeGridEventRenderer.prototype.computeDisplayEventEnd = function () {\n          return true;\n        }; // Renders the HTML for a single event segment's default rendering\n\n\n        TimeGridEventRenderer.prototype.fgSegHtml = function (seg, disableResizing) {\n          var view = this.view;\n          var calendar = view.calendar;\n          var componentFootprint = seg.footprint.componentFootprint;\n          var isAllDay = componentFootprint.isAllDay;\n          var eventDef = seg.footprint.eventDef;\n          var isDraggable = view.isEventDefDraggable(eventDef);\n          var isResizableFromStart = !disableResizing && seg.isStart && view.isEventDefResizableFromStart(eventDef);\n          var isResizableFromEnd = !disableResizing && seg.isEnd && view.isEventDefResizableFromEnd(eventDef);\n          var classes = this.getSegClasses(seg, isDraggable, isResizableFromStart || isResizableFromEnd);\n          var skinCss = util_1.cssToStr(this.getSkinCss(eventDef));\n          var timeText;\n          var fullTimeText; // more verbose time text. for the print stylesheet\n\n          var startTimeText; // just the start time text\n\n          classes.unshift('fc-time-grid-event', 'fc-v-event'); // if the event appears to span more than one day...\n\n          if (view.isMultiDayRange(componentFootprint.unzonedRange)) {\n            // Don't display time text on segments that run entirely through a day.\n            // That would appear as midnight-midnight and would look dumb.\n            // Otherwise, display the time text for the *segment's* times (like 6pm-midnight or midnight-10am)\n            if (seg.isStart || seg.isEnd) {\n              var zonedStart = calendar.msToMoment(seg.startMs);\n              var zonedEnd = calendar.msToMoment(seg.endMs);\n              timeText = this._getTimeText(zonedStart, zonedEnd, isAllDay);\n              fullTimeText = this._getTimeText(zonedStart, zonedEnd, isAllDay, 'LT');\n              startTimeText = this._getTimeText(zonedStart, zonedEnd, isAllDay, null, false); // displayEnd=false\n            }\n          } else {\n            // Display the normal time text for the *event's* times\n            timeText = this.getTimeText(seg.footprint);\n            fullTimeText = this.getTimeText(seg.footprint, 'LT');\n            startTimeText = this.getTimeText(seg.footprint, null, false); // displayEnd=false\n          }\n\n          return '<a class=\"' + classes.join(' ') + '\"' + (eventDef.url ? ' href=\"' + util_1.htmlEscape(eventDef.url) + '\"' : '') + (skinCss ? ' style=\"' + skinCss + '\"' : '') + '>' + '<div class=\"fc-content\">' + (timeText ? '<div class=\"fc-time\"' + ' data-start=\"' + util_1.htmlEscape(startTimeText) + '\"' + ' data-full=\"' + util_1.htmlEscape(fullTimeText) + '\"' + '>' + '<span>' + util_1.htmlEscape(timeText) + '</span>' + '</div>' : '') + (eventDef.title ? '<div class=\"fc-title\">' + util_1.htmlEscape(eventDef.title) + '</div>' : '') + '</div>' + '<div class=\"fc-bg\"/>' + (\n          /* TODO: write CSS for this\r\n          (isResizableFromStart ?\r\n            '<div class=\"fc-resizer fc-start-resizer\" />' :\r\n            ''\r\n            ) +\r\n          */\n          isResizableFromEnd ? '<div class=\"fc-resizer fc-end-resizer\" />' : '') + '</a>';\n        }; // Given segments that are assumed to all live in the *same column*,\n        // compute their verical/horizontal coordinates and assign to their elements.\n\n\n        TimeGridEventRenderer.prototype.updateFgSegCoords = function (segs) {\n          this.timeGrid.computeSegVerticals(segs); // horizontals relies on this\n\n          this.computeFgSegHorizontals(segs); // compute horizontal coordinates, z-index's, and reorder the array\n\n          this.timeGrid.assignSegVerticals(segs);\n          this.assignFgSegHorizontals(segs);\n        }; // Given an array of segments that are all in the same column, sets the backwardCoord and forwardCoord on each.\n        // NOTE: Also reorders the given array by date!\n\n\n        TimeGridEventRenderer.prototype.computeFgSegHorizontals = function (segs) {\n          var levels;\n          var level0;\n          var i;\n          this.sortEventSegs(segs); // order by certain criteria\n\n          levels = buildSlotSegLevels(segs);\n          computeForwardSlotSegs(levels);\n\n          if (level0 = levels[0]) {\n            for (i = 0; i < level0.length; i++) {\n              computeSlotSegPressures(level0[i]);\n            }\n\n            for (i = 0; i < level0.length; i++) {\n              this.computeFgSegForwardBack(level0[i], 0, 0);\n            }\n          }\n        }; // Calculate seg.forwardCoord and seg.backwardCoord for the segment, where both values range\n        // from 0 to 1. If the calendar is left-to-right, the seg.backwardCoord maps to \"left\" and\n        // seg.forwardCoord maps to \"right\" (via percentage). Vice-versa if the calendar is right-to-left.\n        //\n        // The segment might be part of a \"series\", which means consecutive segments with the same pressure\n        // who's width is unknown until an edge has been hit. `seriesBackwardPressure` is the number of\n        // segments behind this one in the current series, and `seriesBackwardCoord` is the starting\n        // coordinate of the first segment in the series.\n\n\n        TimeGridEventRenderer.prototype.computeFgSegForwardBack = function (seg, seriesBackwardPressure, seriesBackwardCoord) {\n          var forwardSegs = seg.forwardSegs;\n          var i;\n\n          if (seg.forwardCoord === undefined) {\n            // not already computed\n            if (!forwardSegs.length) {\n              // if there are no forward segments, this segment should butt up against the edge\n              seg.forwardCoord = 1;\n            } else {\n              // sort highest pressure first\n              this.sortForwardSegs(forwardSegs); // this segment's forwardCoord will be calculated from the backwardCoord of the\n              // highest-pressure forward segment.\n\n              this.computeFgSegForwardBack(forwardSegs[0], seriesBackwardPressure + 1, seriesBackwardCoord);\n              seg.forwardCoord = forwardSegs[0].backwardCoord;\n            } // calculate the backwardCoord from the forwardCoord. consider the series\n\n\n            seg.backwardCoord = seg.forwardCoord - (seg.forwardCoord - seriesBackwardCoord) / ( // available width for series\n            seriesBackwardPressure + 1); // # of segments in the series\n            // use this segment's coordinates to computed the coordinates of the less-pressurized\n            // forward segments\n\n            for (i = 0; i < forwardSegs.length; i++) {\n              this.computeFgSegForwardBack(forwardSegs[i], 0, seg.forwardCoord);\n            }\n          }\n        };\n\n        TimeGridEventRenderer.prototype.sortForwardSegs = function (forwardSegs) {\n          forwardSegs.sort(util_1.proxy(this, 'compareForwardSegs'));\n        }; // A cmp function for determining which forward segment to rely on more when computing coordinates.\n\n\n        TimeGridEventRenderer.prototype.compareForwardSegs = function (seg1, seg2) {\n          // put higher-pressure first\n          return seg2.forwardPressure - seg1.forwardPressure || // put segments that are closer to initial edge first (and favor ones with no coords yet)\n          (seg1.backwardCoord || 0) - (seg2.backwardCoord || 0) || // do normal sorting...\n          this.compareEventSegs(seg1, seg2);\n        }; // Given foreground event segments that have already had their position coordinates computed,\n        // assigns position-related CSS values to their elements.\n\n\n        TimeGridEventRenderer.prototype.assignFgSegHorizontals = function (segs) {\n          var i;\n          var seg;\n\n          for (i = 0; i < segs.length; i++) {\n            seg = segs[i];\n            seg.el.css(this.generateFgSegHorizontalCss(seg)); // if the event is short that the title will be cut off,\n            // attach a className that condenses the title into the time area.\n\n            if (seg.footprint.eventDef.title && seg.bottom - seg.top < 30) {\n              seg.el.addClass('fc-short'); // TODO: \"condensed\" is a better name\n            }\n          }\n        }; // Generates an object with CSS properties/values that should be applied to an event segment element.\n        // Contains important positioning-related properties that should be applied to any event element, customized or not.\n\n\n        TimeGridEventRenderer.prototype.generateFgSegHorizontalCss = function (seg) {\n          var shouldOverlap = this.opt('slotEventOverlap');\n          var backwardCoord = seg.backwardCoord; // the left side if LTR. the right side if RTL. floating-point\n\n          var forwardCoord = seg.forwardCoord; // the right side if LTR. the left side if RTL. floating-point\n\n          var props = this.timeGrid.generateSegVerticalCss(seg); // get top/bottom first\n\n          var isRTL = this.timeGrid.isRTL;\n          var left; // amount of space from left edge, a fraction of the total width\n\n          var right; // amount of space from right edge, a fraction of the total width\n\n          if (shouldOverlap) {\n            // double the width, but don't go beyond the maximum forward coordinate (1.0)\n            forwardCoord = Math.min(1, backwardCoord + (forwardCoord - backwardCoord) * 2);\n          }\n\n          if (isRTL) {\n            left = 1 - forwardCoord;\n            right = backwardCoord;\n          } else {\n            left = backwardCoord;\n            right = 1 - forwardCoord;\n          }\n\n          props.zIndex = seg.level + 1; // convert from 0-base to 1-based\n\n          props.left = left * 100 + '%';\n          props.right = right * 100 + '%';\n\n          if (shouldOverlap && seg.forwardPressure) {\n            // add padding to the edge so that forward stacked events don't cover the resizer's icon\n            props[isRTL ? 'marginLeft' : 'marginRight'] = 10 * 2; // 10 is a guesstimate of the icon's width\n          }\n\n          return props;\n        };\n\n        return TimeGridEventRenderer;\n      }(EventRenderer_1[\"default\"]);\n\n      exports[\"default\"] = TimeGridEventRenderer; // Builds an array of segments \"levels\". The first level will be the leftmost tier of segments if the calendar is\n      // left-to-right, or the rightmost if the calendar is right-to-left. Assumes the segments are already ordered by date.\n\n      function buildSlotSegLevels(segs) {\n        var levels = [];\n        var i;\n        var seg;\n        var j;\n\n        for (i = 0; i < segs.length; i++) {\n          seg = segs[i]; // go through all the levels and stop on the first level where there are no collisions\n\n          for (j = 0; j < levels.length; j++) {\n            if (!computeSlotSegCollisions(seg, levels[j]).length) {\n              break;\n            }\n          }\n\n          seg.level = j;\n          (levels[j] || (levels[j] = [])).push(seg);\n        }\n\n        return levels;\n      } // For every segment, figure out the other segments that are in subsequent\n      // levels that also occupy the same vertical space. Accumulate in seg.forwardSegs\n\n\n      function computeForwardSlotSegs(levels) {\n        var i;\n        var level;\n        var j;\n        var seg;\n        var k;\n\n        for (i = 0; i < levels.length; i++) {\n          level = levels[i];\n\n          for (j = 0; j < level.length; j++) {\n            seg = level[j];\n            seg.forwardSegs = [];\n\n            for (k = i + 1; k < levels.length; k++) {\n              computeSlotSegCollisions(seg, levels[k], seg.forwardSegs);\n            }\n          }\n        }\n      } // Figure out which path forward (via seg.forwardSegs) results in the longest path until\n      // the furthest edge is reached. The number of segments in this path will be seg.forwardPressure\n\n\n      function computeSlotSegPressures(seg) {\n        var forwardSegs = seg.forwardSegs;\n        var forwardPressure = 0;\n        var i;\n        var forwardSeg;\n\n        if (seg.forwardPressure === undefined) {\n          // not already computed\n          for (i = 0; i < forwardSegs.length; i++) {\n            forwardSeg = forwardSegs[i]; // figure out the child's maximum forward path\n\n            computeSlotSegPressures(forwardSeg); // either use the existing maximum, or use the child's forward pressure\n            // plus one (for the forwardSeg itself)\n\n            forwardPressure = Math.max(forwardPressure, 1 + forwardSeg.forwardPressure);\n          }\n\n          seg.forwardPressure = forwardPressure;\n        }\n      } // Find all the segments in `otherSegs` that vertically collide with `seg`.\n      // Append into an optionally-supplied `results` array and return.\n\n\n      function computeSlotSegCollisions(seg, otherSegs, results) {\n        if (results === void 0) {\n          results = [];\n        }\n\n        for (var i = 0; i < otherSegs.length; i++) {\n          if (isSlotSegCollision(seg, otherSegs[i])) {\n            results.push(otherSegs[i]);\n          }\n        }\n\n        return results;\n      } // Do these segments occupy the same vertical space?\n\n\n      function isSlotSegCollision(seg1, seg2) {\n        return seg1.bottom > seg2.top && seg1.top < seg2.bottom;\n      }\n      /***/\n\n    },\n    /* 241 */\n\n    /***/\n    function (module, exports, __webpack_require__) {\n      Object.defineProperty(exports, \"__esModule\", {\n        value: true\n      });\n\n      var tslib_1 = __webpack_require__(2);\n\n      var $ = __webpack_require__(3);\n\n      var HelperRenderer_1 = __webpack_require__(63);\n\n      var TimeGridHelperRenderer =\n      /** @class */\n      function (_super) {\n        tslib_1.__extends(TimeGridHelperRenderer, _super);\n\n        function TimeGridHelperRenderer() {\n          return _super !== null && _super.apply(this, arguments) || this;\n        }\n\n        TimeGridHelperRenderer.prototype.renderSegs = function (segs, sourceSeg) {\n          var helperNodes = [];\n          var i;\n          var seg;\n          var sourceEl; // TODO: not good to call eventRenderer this way\n\n          this.eventRenderer.renderFgSegsIntoContainers(segs, this.component.helperContainerEls); // Try to make the segment that is in the same row as sourceSeg look the same\n\n          for (i = 0; i < segs.length; i++) {\n            seg = segs[i];\n\n            if (sourceSeg && sourceSeg.col === seg.col) {\n              sourceEl = sourceSeg.el;\n              seg.el.css({\n                left: sourceEl.css('left'),\n                right: sourceEl.css('right'),\n                'margin-left': sourceEl.css('margin-left'),\n                'margin-right': sourceEl.css('margin-right')\n              });\n            }\n\n            helperNodes.push(seg.el[0]);\n          }\n\n          return $(helperNodes); // must return the elements rendered\n        };\n\n        return TimeGridHelperRenderer;\n      }(HelperRenderer_1[\"default\"]);\n\n      exports[\"default\"] = TimeGridHelperRenderer;\n      /***/\n    },\n    /* 242 */\n\n    /***/\n    function (module, exports, __webpack_require__) {\n      Object.defineProperty(exports, \"__esModule\", {\n        value: true\n      });\n\n      var tslib_1 = __webpack_require__(2);\n\n      var FillRenderer_1 = __webpack_require__(62);\n\n      var TimeGridFillRenderer =\n      /** @class */\n      function (_super) {\n        tslib_1.__extends(TimeGridFillRenderer, _super);\n\n        function TimeGridFillRenderer() {\n          return _super !== null && _super.apply(this, arguments) || this;\n        }\n\n        TimeGridFillRenderer.prototype.attachSegEls = function (type, segs) {\n          var timeGrid = this.component;\n          var containerEls; // TODO: more efficient lookup\n\n          if (type === 'bgEvent') {\n            containerEls = timeGrid.bgContainerEls;\n          } else if (type === 'businessHours') {\n            containerEls = timeGrid.businessContainerEls;\n          } else if (type === 'highlight') {\n            containerEls = timeGrid.highlightContainerEls;\n          }\n\n          timeGrid.updateSegVerticals(segs);\n          timeGrid.attachSegsByCol(timeGrid.groupSegsByCol(segs), containerEls);\n          return segs.map(function (seg) {\n            return seg.el[0];\n          });\n        };\n\n        return TimeGridFillRenderer;\n      }(FillRenderer_1[\"default\"]);\n\n      exports[\"default\"] = TimeGridFillRenderer;\n      /***/\n    },\n    /* 243 */\n\n    /***/\n    function (module, exports, __webpack_require__) {\n      Object.defineProperty(exports, \"__esModule\", {\n        value: true\n      });\n\n      var tslib_1 = __webpack_require__(2);\n\n      var $ = __webpack_require__(3);\n\n      var util_1 = __webpack_require__(4);\n\n      var EventRenderer_1 = __webpack_require__(44);\n      /* Event-rendering methods for the DayGrid class\r\n      ----------------------------------------------------------------------------------------------------------------------*/\n\n\n      var DayGridEventRenderer =\n      /** @class */\n      function (_super) {\n        tslib_1.__extends(DayGridEventRenderer, _super);\n\n        function DayGridEventRenderer(dayGrid, fillRenderer) {\n          var _this = _super.call(this, dayGrid, fillRenderer) || this;\n\n          _this.dayGrid = dayGrid;\n          return _this;\n        }\n\n        DayGridEventRenderer.prototype.renderBgRanges = function (eventRanges) {\n          // don't render timed background events\n          eventRanges = $.grep(eventRanges, function (eventRange) {\n            return eventRange.eventDef.isAllDay();\n          });\n\n          _super.prototype.renderBgRanges.call(this, eventRanges);\n        }; // Renders the given foreground event segments onto the grid\n\n\n        DayGridEventRenderer.prototype.renderFgSegs = function (segs) {\n          var rowStructs = this.rowStructs = this.renderSegRows(segs); // append to each row's content skeleton\n\n          this.dayGrid.rowEls.each(function (i, rowNode) {\n            $(rowNode).find('.fc-content-skeleton > table').append(rowStructs[i].tbodyEl);\n          });\n        }; // Unrenders all currently rendered foreground event segments\n\n\n        DayGridEventRenderer.prototype.unrenderFgSegs = function () {\n          var rowStructs = this.rowStructs || [];\n          var rowStruct;\n\n          while (rowStruct = rowStructs.pop()) {\n            rowStruct.tbodyEl.remove();\n          }\n\n          this.rowStructs = null;\n        }; // Uses the given events array to generate <tbody> elements that should be appended to each row's content skeleton.\n        // Returns an array of rowStruct objects (see the bottom of `renderSegRow`).\n        // PRECONDITION: each segment shoud already have a rendered and assigned `.el`\n\n\n        DayGridEventRenderer.prototype.renderSegRows = function (segs) {\n          var rowStructs = [];\n          var segRows;\n          var row;\n          segRows = this.groupSegRows(segs); // group into nested arrays\n          // iterate each row of segment groupings\n\n          for (row = 0; row < segRows.length; row++) {\n            rowStructs.push(this.renderSegRow(row, segRows[row]));\n          }\n\n          return rowStructs;\n        }; // Given a row # and an array of segments all in the same row, render a <tbody> element, a skeleton that contains\n        // the segments. Returns object with a bunch of internal data about how the render was calculated.\n        // NOTE: modifies rowSegs\n\n\n        DayGridEventRenderer.prototype.renderSegRow = function (row, rowSegs) {\n          var colCnt = this.dayGrid.colCnt;\n          var segLevels = this.buildSegLevels(rowSegs); // group into sub-arrays of levels\n\n          var levelCnt = Math.max(1, segLevels.length); // ensure at least one level\n\n          var tbody = $('<tbody/>');\n          var segMatrix = []; // lookup for which segments are rendered into which level+col cells\n\n          var cellMatrix = []; // lookup for all <td> elements of the level+col matrix\n\n          var loneCellMatrix = []; // lookup for <td> elements that only take up a single column\n\n          var i;\n          var levelSegs;\n          var col;\n          var tr;\n          var j;\n          var seg;\n          var td; // populates empty cells from the current column (`col`) to `endCol`\n\n          function emptyCellsUntil(endCol) {\n            while (col < endCol) {\n              // try to grab a cell from the level above and extend its rowspan. otherwise, create a fresh cell\n              td = (loneCellMatrix[i - 1] || [])[col];\n\n              if (td) {\n                td.attr('rowspan', parseInt(td.attr('rowspan') || 1, 10) + 1);\n              } else {\n                td = $('<td/>');\n                tr.append(td);\n              }\n\n              cellMatrix[i][col] = td;\n              loneCellMatrix[i][col] = td;\n              col++;\n            }\n          }\n\n          for (i = 0; i < levelCnt; i++) {\n            // iterate through all levels\n            levelSegs = segLevels[i];\n            col = 0;\n            tr = $('<tr/>');\n            segMatrix.push([]);\n            cellMatrix.push([]);\n            loneCellMatrix.push([]); // levelCnt might be 1 even though there are no actual levels. protect against this.\n            // this single empty row is useful for styling.\n\n            if (levelSegs) {\n              for (j = 0; j < levelSegs.length; j++) {\n                // iterate through segments in level\n                seg = levelSegs[j];\n                emptyCellsUntil(seg.leftCol); // create a container that occupies or more columns. append the event element.\n\n                td = $('<td class=\"fc-event-container\"/>').append(seg.el);\n\n                if (seg.leftCol !== seg.rightCol) {\n                  td.attr('colspan', seg.rightCol - seg.leftCol + 1);\n                } else {\n                  // a single-column segment\n                  loneCellMatrix[i][col] = td;\n                }\n\n                while (col <= seg.rightCol) {\n                  cellMatrix[i][col] = td;\n                  segMatrix[i][col] = seg;\n                  col++;\n                }\n\n                tr.append(td);\n              }\n            }\n\n            emptyCellsUntil(colCnt); // finish off the row\n\n            this.dayGrid.bookendCells(tr);\n            tbody.append(tr);\n          }\n\n          return {\n            row: row,\n            tbodyEl: tbody,\n            cellMatrix: cellMatrix,\n            segMatrix: segMatrix,\n            segLevels: segLevels,\n            segs: rowSegs\n          };\n        }; // Stacks a flat array of segments, which are all assumed to be in the same row, into subarrays of vertical levels.\n        // NOTE: modifies segs\n\n\n        DayGridEventRenderer.prototype.buildSegLevels = function (segs) {\n          var levels = [];\n          var i;\n          var seg;\n          var j; // Give preference to elements with certain criteria, so they have\n          // a chance to be closer to the top.\n\n          this.sortEventSegs(segs);\n\n          for (i = 0; i < segs.length; i++) {\n            seg = segs[i]; // loop through levels, starting with the topmost, until the segment doesn't collide with other segments\n\n            for (j = 0; j < levels.length; j++) {\n              if (!isDaySegCollision(seg, levels[j])) {\n                break;\n              }\n            } // `j` now holds the desired subrow index\n\n\n            seg.level = j; // create new level array if needed and append segment\n\n            (levels[j] || (levels[j] = [])).push(seg);\n          } // order segments left-to-right. very important if calendar is RTL\n\n\n          for (j = 0; j < levels.length; j++) {\n            levels[j].sort(compareDaySegCols);\n          }\n\n          return levels;\n        }; // Given a flat array of segments, return an array of sub-arrays, grouped by each segment's row\n\n\n        DayGridEventRenderer.prototype.groupSegRows = function (segs) {\n          var segRows = [];\n          var i;\n\n          for (i = 0; i < this.dayGrid.rowCnt; i++) {\n            segRows.push([]);\n          }\n\n          for (i = 0; i < segs.length; i++) {\n            segRows[segs[i].row].push(segs[i]);\n          }\n\n          return segRows;\n        }; // Computes a default event time formatting string if `timeFormat` is not explicitly defined\n\n\n        DayGridEventRenderer.prototype.computeEventTimeFormat = function () {\n          return this.opt('extraSmallTimeFormat'); // like \"6p\" or \"6:30p\"\n        }; // Computes a default `displayEventEnd` value if one is not expliclty defined\n\n\n        DayGridEventRenderer.prototype.computeDisplayEventEnd = function () {\n          return this.dayGrid.colCnt === 1; // we'll likely have space if there's only one day\n        }; // Builds the HTML to be used for the default element for an individual segment\n\n\n        DayGridEventRenderer.prototype.fgSegHtml = function (seg, disableResizing) {\n          var view = this.view;\n          var eventDef = seg.footprint.eventDef;\n          var isAllDay = seg.footprint.componentFootprint.isAllDay;\n          var isDraggable = view.isEventDefDraggable(eventDef);\n          var isResizableFromStart = !disableResizing && isAllDay && seg.isStart && view.isEventDefResizableFromStart(eventDef);\n          var isResizableFromEnd = !disableResizing && isAllDay && seg.isEnd && view.isEventDefResizableFromEnd(eventDef);\n          var classes = this.getSegClasses(seg, isDraggable, isResizableFromStart || isResizableFromEnd);\n          var skinCss = util_1.cssToStr(this.getSkinCss(eventDef));\n          var timeHtml = '';\n          var timeText;\n          var titleHtml;\n          classes.unshift('fc-day-grid-event', 'fc-h-event'); // Only display a timed events time if it is the starting segment\n\n          if (seg.isStart) {\n            timeText = this.getTimeText(seg.footprint);\n\n            if (timeText) {\n              timeHtml = '<span class=\"fc-time\">' + util_1.htmlEscape(timeText) + '</span>';\n            }\n          }\n\n          titleHtml = '<span class=\"fc-title\">' + (util_1.htmlEscape(eventDef.title || '') || '&nbsp;') + // we always want one line of height\n          '</span>';\n          return '<a class=\"' + classes.join(' ') + '\"' + (eventDef.url ? ' href=\"' + util_1.htmlEscape(eventDef.url) + '\"' : '') + (skinCss ? ' style=\"' + skinCss + '\"' : '') + '>' + '<div class=\"fc-content\">' + (this.dayGrid.isRTL ? titleHtml + ' ' + timeHtml : // put a natural space in between\n          timeHtml + ' ' + titleHtml //\n          ) + '</div>' + (isResizableFromStart ? '<div class=\"fc-resizer fc-start-resizer\" />' : '') + (isResizableFromEnd ? '<div class=\"fc-resizer fc-end-resizer\" />' : '') + '</a>';\n        };\n\n        return DayGridEventRenderer;\n      }(EventRenderer_1[\"default\"]);\n\n      exports[\"default\"] = DayGridEventRenderer; // Computes whether two segments' columns collide. They are assumed to be in the same row.\n\n      function isDaySegCollision(seg, otherSegs) {\n        var i;\n        var otherSeg;\n\n        for (i = 0; i < otherSegs.length; i++) {\n          otherSeg = otherSegs[i];\n\n          if (otherSeg.leftCol <= seg.rightCol && otherSeg.rightCol >= seg.leftCol) {\n            return true;\n          }\n        }\n\n        return false;\n      } // A cmp function for determining the leftmost event\n\n\n      function compareDaySegCols(a, b) {\n        return a.leftCol - b.leftCol;\n      }\n      /***/\n\n    },\n    /* 244 */\n\n    /***/\n    function (module, exports, __webpack_require__) {\n      Object.defineProperty(exports, \"__esModule\", {\n        value: true\n      });\n\n      var tslib_1 = __webpack_require__(2);\n\n      var $ = __webpack_require__(3);\n\n      var HelperRenderer_1 = __webpack_require__(63);\n\n      var DayGridHelperRenderer =\n      /** @class */\n      function (_super) {\n        tslib_1.__extends(DayGridHelperRenderer, _super);\n\n        function DayGridHelperRenderer() {\n          return _super !== null && _super.apply(this, arguments) || this;\n        } // Renders a mock \"helper\" event. `sourceSeg` is the associated internal segment object. It can be null.\n\n\n        DayGridHelperRenderer.prototype.renderSegs = function (segs, sourceSeg) {\n          var helperNodes = [];\n          var rowStructs; // TODO: not good to call eventRenderer this way\n\n          rowStructs = this.eventRenderer.renderSegRows(segs); // inject each new event skeleton into each associated row\n\n          this.component.rowEls.each(function (row, rowNode) {\n            var rowEl = $(rowNode); // the .fc-row\n\n            var skeletonEl = $('<div class=\"fc-helper-skeleton\"><table/></div>'); // will be absolutely positioned\n\n            var skeletonTopEl;\n            var skeletonTop; // If there is an original segment, match the top position. Otherwise, put it at the row's top level\n\n            if (sourceSeg && sourceSeg.row === row) {\n              skeletonTop = sourceSeg.el.position().top;\n            } else {\n              skeletonTopEl = rowEl.find('.fc-content-skeleton tbody');\n\n              if (!skeletonTopEl.length) {\n                // when no events\n                skeletonTopEl = rowEl.find('.fc-content-skeleton table');\n              }\n\n              skeletonTop = skeletonTopEl.position().top;\n            }\n\n            skeletonEl.css('top', skeletonTop).find('table').append(rowStructs[row].tbodyEl);\n            rowEl.append(skeletonEl);\n            helperNodes.push(skeletonEl[0]);\n          });\n          return $(helperNodes); // must return the elements rendered\n        };\n\n        return DayGridHelperRenderer;\n      }(HelperRenderer_1[\"default\"]);\n\n      exports[\"default\"] = DayGridHelperRenderer;\n      /***/\n    },\n    /* 245 */\n\n    /***/\n    function (module, exports, __webpack_require__) {\n      Object.defineProperty(exports, \"__esModule\", {\n        value: true\n      });\n\n      var tslib_1 = __webpack_require__(2);\n\n      var $ = __webpack_require__(3);\n\n      var FillRenderer_1 = __webpack_require__(62);\n\n      var DayGridFillRenderer =\n      /** @class */\n      function (_super) {\n        tslib_1.__extends(DayGridFillRenderer, _super);\n\n        function DayGridFillRenderer() {\n          var _this = _super !== null && _super.apply(this, arguments) || this;\n\n          _this.fillSegTag = 'td'; // override the default tag name\n\n          return _this;\n        }\n\n        DayGridFillRenderer.prototype.attachSegEls = function (type, segs) {\n          var nodes = [];\n          var i;\n          var seg;\n          var skeletonEl;\n\n          for (i = 0; i < segs.length; i++) {\n            seg = segs[i];\n            skeletonEl = this.renderFillRow(type, seg);\n            this.component.rowEls.eq(seg.row).append(skeletonEl);\n            nodes.push(skeletonEl[0]);\n          }\n\n          return nodes;\n        }; // Generates the HTML needed for one row of a fill. Requires the seg's el to be rendered.\n\n\n        DayGridFillRenderer.prototype.renderFillRow = function (type, seg) {\n          var colCnt = this.component.colCnt;\n          var startCol = seg.leftCol;\n          var endCol = seg.rightCol + 1;\n          var className;\n          var skeletonEl;\n          var trEl;\n\n          if (type === 'businessHours') {\n            className = 'bgevent';\n          } else {\n            className = type.toLowerCase();\n          }\n\n          skeletonEl = $('<div class=\"fc-' + className + '-skeleton\">' + '<table><tr/></table>' + '</div>');\n          trEl = skeletonEl.find('tr');\n\n          if (startCol > 0) {\n            trEl.append( // will create (startCol + 1) td's\n            new Array(startCol + 1).join('<td/>'));\n          }\n\n          trEl.append(seg.el.attr('colspan', endCol - startCol));\n\n          if (endCol < colCnt) {\n            trEl.append( // will create (colCnt - endCol) td's\n            new Array(colCnt - endCol + 1).join('<td/>'));\n          }\n\n          this.component.bookendCells(trEl);\n          return skeletonEl;\n        };\n\n        return DayGridFillRenderer;\n      }(FillRenderer_1[\"default\"]);\n\n      exports[\"default\"] = DayGridFillRenderer;\n      /***/\n    },\n    /* 246 */\n\n    /***/\n    function (module, exports, __webpack_require__) {\n      Object.defineProperty(exports, \"__esModule\", {\n        value: true\n      });\n\n      var tslib_1 = __webpack_require__(2);\n\n      var moment = __webpack_require__(0);\n\n      var util_1 = __webpack_require__(4);\n\n      var BasicView_1 = __webpack_require__(67);\n\n      var MonthViewDateProfileGenerator_1 = __webpack_require__(247);\n      /* A month view with day cells running in rows (one-per-week) and columns\r\n      ----------------------------------------------------------------------------------------------------------------------*/\n\n\n      var MonthView =\n      /** @class */\n      function (_super) {\n        tslib_1.__extends(MonthView, _super);\n\n        function MonthView() {\n          return _super !== null && _super.apply(this, arguments) || this;\n        } // Overrides the default BasicView behavior to have special multi-week auto-height logic\n\n\n        MonthView.prototype.setGridHeight = function (height, isAuto) {\n          // if auto, make the height of each row the height that it would be if there were 6 weeks\n          if (isAuto) {\n            height *= this.dayGrid.rowCnt / 6;\n          }\n\n          util_1.distributeHeight(this.dayGrid.rowEls, height, !isAuto); // if auto, don't compensate for height-hogging rows\n        };\n\n        MonthView.prototype.isDateInOtherMonth = function (date, dateProfile) {\n          return date.month() !== moment.utc(dateProfile.currentUnzonedRange.startMs).month(); // TODO: optimize\n        };\n\n        return MonthView;\n      }(BasicView_1[\"default\"]);\n\n      exports[\"default\"] = MonthView;\n      MonthView.prototype.dateProfileGeneratorClass = MonthViewDateProfileGenerator_1[\"default\"];\n      /***/\n    },\n    /* 247 */\n\n    /***/\n    function (module, exports, __webpack_require__) {\n      Object.defineProperty(exports, \"__esModule\", {\n        value: true\n      });\n\n      var tslib_1 = __webpack_require__(2);\n\n      var BasicViewDateProfileGenerator_1 = __webpack_require__(68);\n\n      var UnzonedRange_1 = __webpack_require__(5);\n\n      var MonthViewDateProfileGenerator =\n      /** @class */\n      function (_super) {\n        tslib_1.__extends(MonthViewDateProfileGenerator, _super);\n\n        function MonthViewDateProfileGenerator() {\n          return _super !== null && _super.apply(this, arguments) || this;\n        } // Computes the date range that will be rendered.\n\n\n        MonthViewDateProfileGenerator.prototype.buildRenderRange = function (currentUnzonedRange, currentRangeUnit, isRangeAllDay) {\n          var renderUnzonedRange = _super.prototype.buildRenderRange.call(this, currentUnzonedRange, currentRangeUnit, isRangeAllDay);\n\n          var start = this.msToUtcMoment(renderUnzonedRange.startMs, isRangeAllDay);\n          var end = this.msToUtcMoment(renderUnzonedRange.endMs, isRangeAllDay);\n          var rowCnt; // ensure 6 weeks\n\n          if (this.opt('fixedWeekCount')) {\n            rowCnt = Math.ceil( // could be partial weeks due to hiddenDays\n            end.diff(start, 'weeks', true) // dontRound=true\n            );\n            end.add(6 - rowCnt, 'weeks');\n          }\n\n          return new UnzonedRange_1[\"default\"](start, end);\n        };\n\n        return MonthViewDateProfileGenerator;\n      }(BasicViewDateProfileGenerator_1[\"default\"]);\n\n      exports[\"default\"] = MonthViewDateProfileGenerator;\n      /***/\n    },\n    /* 248 */\n\n    /***/\n    function (module, exports, __webpack_require__) {\n      Object.defineProperty(exports, \"__esModule\", {\n        value: true\n      });\n\n      var tslib_1 = __webpack_require__(2);\n\n      var $ = __webpack_require__(3);\n\n      var util_1 = __webpack_require__(4);\n\n      var UnzonedRange_1 = __webpack_require__(5);\n\n      var View_1 = __webpack_require__(43);\n\n      var Scroller_1 = __webpack_require__(41);\n\n      var ListEventRenderer_1 = __webpack_require__(249);\n\n      var ListEventPointing_1 = __webpack_require__(250);\n      /*\r\n      Responsible for the scroller, and forwarding event-related actions into the \"grid\".\r\n      */\n\n\n      var ListView =\n      /** @class */\n      function (_super) {\n        tslib_1.__extends(ListView, _super);\n\n        function ListView(calendar, viewSpec) {\n          var _this = _super.call(this, calendar, viewSpec) || this;\n\n          _this.segSelector = '.fc-list-item'; // which elements accept event actions\n\n          _this.scroller = new Scroller_1[\"default\"]({\n            overflowX: 'hidden',\n            overflowY: 'auto'\n          });\n          return _this;\n        }\n\n        ListView.prototype.renderSkeleton = function () {\n          this.el.addClass('fc-list-view ' + this.calendar.theme.getClass('listView'));\n          this.scroller.render();\n          this.scroller.el.appendTo(this.el);\n          this.contentEl = this.scroller.scrollEl; // shortcut\n        };\n\n        ListView.prototype.unrenderSkeleton = function () {\n          this.scroller.destroy(); // will remove the Grid too\n        };\n\n        ListView.prototype.updateSize = function (totalHeight, isAuto, isResize) {\n          _super.prototype.updateSize.call(this, totalHeight, isAuto, isResize);\n\n          this.scroller.clear(); // sets height to 'auto' and clears overflow\n\n          if (!isAuto) {\n            this.scroller.setHeight(this.computeScrollerHeight(totalHeight));\n          }\n        };\n\n        ListView.prototype.computeScrollerHeight = function (totalHeight) {\n          return totalHeight - util_1.subtractInnerElHeight(this.el, this.scroller.el); // everything that's NOT the scroller\n        };\n\n        ListView.prototype.renderDates = function (dateProfile) {\n          var calendar = this.calendar;\n          var dayStart = calendar.msToUtcMoment(dateProfile.renderUnzonedRange.startMs, true);\n          var viewEnd = calendar.msToUtcMoment(dateProfile.renderUnzonedRange.endMs, true);\n          var dayDates = [];\n          var dayRanges = [];\n\n          while (dayStart < viewEnd) {\n            dayDates.push(dayStart.clone());\n            dayRanges.push(new UnzonedRange_1[\"default\"](dayStart, dayStart.clone().add(1, 'day')));\n            dayStart.add(1, 'day');\n          }\n\n          this.dayDates = dayDates;\n          this.dayRanges = dayRanges; // all real rendering happens in EventRenderer\n        }; // slices by day\n\n\n        ListView.prototype.componentFootprintToSegs = function (footprint) {\n          var dayRanges = this.dayRanges;\n          var dayIndex;\n          var segRange;\n          var seg;\n          var segs = [];\n\n          for (dayIndex = 0; dayIndex < dayRanges.length; dayIndex++) {\n            segRange = footprint.unzonedRange.intersect(dayRanges[dayIndex]);\n\n            if (segRange) {\n              seg = {\n                startMs: segRange.startMs,\n                endMs: segRange.endMs,\n                isStart: segRange.isStart,\n                isEnd: segRange.isEnd,\n                dayIndex: dayIndex\n              };\n              segs.push(seg); // detect when footprint won't go fully into the next day,\n              // and mutate the latest seg to the be the end.\n\n              if (!seg.isEnd && !footprint.isAllDay && dayIndex + 1 < dayRanges.length && footprint.unzonedRange.endMs < dayRanges[dayIndex + 1].startMs + this.nextDayThreshold) {\n                seg.endMs = footprint.unzonedRange.endMs;\n                seg.isEnd = true;\n                break;\n              }\n            }\n          }\n\n          return segs;\n        };\n\n        ListView.prototype.renderEmptyMessage = function () {\n          this.contentEl.html('<div class=\"fc-list-empty-wrap2\">' + // TODO: try less wraps\n          '<div class=\"fc-list-empty-wrap1\">' + '<div class=\"fc-list-empty\">' + util_1.htmlEscape(this.opt('noEventsMessage')) + '</div>' + '</div>' + '</div>');\n        }; // render the event segments in the view\n\n\n        ListView.prototype.renderSegList = function (allSegs) {\n          var segsByDay = this.groupSegsByDay(allSegs); // sparse array\n\n          var dayIndex;\n          var daySegs;\n          var i;\n          var tableEl = $('<table class=\"fc-list-table ' + this.calendar.theme.getClass('tableList') + '\"><tbody/></table>');\n          var tbodyEl = tableEl.find('tbody');\n\n          for (dayIndex = 0; dayIndex < segsByDay.length; dayIndex++) {\n            daySegs = segsByDay[dayIndex];\n\n            if (daySegs) {\n              // sparse array, so might be undefined\n              // append a day header\n              tbodyEl.append(this.dayHeaderHtml(this.dayDates[dayIndex]));\n              this.eventRenderer.sortEventSegs(daySegs);\n\n              for (i = 0; i < daySegs.length; i++) {\n                tbodyEl.append(daySegs[i].el); // append event row\n              }\n            }\n          }\n\n          this.contentEl.empty().append(tableEl);\n        }; // Returns a sparse array of arrays, segs grouped by their dayIndex\n\n\n        ListView.prototype.groupSegsByDay = function (segs) {\n          var segsByDay = []; // sparse array\n\n          var i;\n          var seg;\n\n          for (i = 0; i < segs.length; i++) {\n            seg = segs[i];\n            (segsByDay[seg.dayIndex] || (segsByDay[seg.dayIndex] = [])).push(seg);\n          }\n\n          return segsByDay;\n        }; // generates the HTML for the day headers that live amongst the event rows\n\n\n        ListView.prototype.dayHeaderHtml = function (dayDate) {\n          var mainFormat = this.opt('listDayFormat');\n          var altFormat = this.opt('listDayAltFormat');\n          return '<tr class=\"fc-list-heading\" data-date=\"' + dayDate.format('YYYY-MM-DD') + '\">' + '<td class=\"' + (this.calendar.theme.getClass('tableListHeading') || this.calendar.theme.getClass('widgetHeader')) + '\" colspan=\"3\">' + (mainFormat ? this.buildGotoAnchorHtml(dayDate, {\n            'class': 'fc-list-heading-main'\n          }, util_1.htmlEscape(dayDate.format(mainFormat)) // inner HTML\n          ) : '') + (altFormat ? this.buildGotoAnchorHtml(dayDate, {\n            'class': 'fc-list-heading-alt'\n          }, util_1.htmlEscape(dayDate.format(altFormat)) // inner HTML\n          ) : '') + '</td>' + '</tr>';\n        };\n\n        return ListView;\n      }(View_1[\"default\"]);\n\n      exports[\"default\"] = ListView;\n      ListView.prototype.eventRendererClass = ListEventRenderer_1[\"default\"];\n      ListView.prototype.eventPointingClass = ListEventPointing_1[\"default\"];\n      /***/\n    },\n    /* 249 */\n\n    /***/\n    function (module, exports, __webpack_require__) {\n      Object.defineProperty(exports, \"__esModule\", {\n        value: true\n      });\n\n      var tslib_1 = __webpack_require__(2);\n\n      var util_1 = __webpack_require__(4);\n\n      var EventRenderer_1 = __webpack_require__(44);\n\n      var ListEventRenderer =\n      /** @class */\n      function (_super) {\n        tslib_1.__extends(ListEventRenderer, _super);\n\n        function ListEventRenderer() {\n          return _super !== null && _super.apply(this, arguments) || this;\n        }\n\n        ListEventRenderer.prototype.renderFgSegs = function (segs) {\n          if (!segs.length) {\n            this.component.renderEmptyMessage();\n          } else {\n            this.component.renderSegList(segs);\n          }\n        }; // generates the HTML for a single event row\n\n\n        ListEventRenderer.prototype.fgSegHtml = function (seg) {\n          var view = this.view;\n          var calendar = view.calendar;\n          var theme = calendar.theme;\n          var eventFootprint = seg.footprint;\n          var eventDef = eventFootprint.eventDef;\n          var componentFootprint = eventFootprint.componentFootprint;\n          var url = eventDef.url;\n          var classes = ['fc-list-item'].concat(this.getClasses(eventDef));\n          var bgColor = this.getBgColor(eventDef);\n          var timeHtml;\n\n          if (componentFootprint.isAllDay) {\n            timeHtml = view.getAllDayHtml();\n          } else if (view.isMultiDayRange(componentFootprint.unzonedRange)) {\n            if (seg.isStart || seg.isEnd) {\n              // outer segment that probably lasts part of the day\n              timeHtml = util_1.htmlEscape(this._getTimeText(calendar.msToMoment(seg.startMs), calendar.msToMoment(seg.endMs), componentFootprint.isAllDay));\n            } else {\n              // inner segment that lasts the whole day\n              timeHtml = view.getAllDayHtml();\n            }\n          } else {\n            // Display the normal time text for the *event's* times\n            timeHtml = util_1.htmlEscape(this.getTimeText(eventFootprint));\n          }\n\n          if (url) {\n            classes.push('fc-has-url');\n          }\n\n          return '<tr class=\"' + classes.join(' ') + '\">' + (this.displayEventTime ? '<td class=\"fc-list-item-time ' + theme.getClass('widgetContent') + '\">' + (timeHtml || '') + '</td>' : '') + '<td class=\"fc-list-item-marker ' + theme.getClass('widgetContent') + '\">' + '<span class=\"fc-event-dot\"' + (bgColor ? ' style=\"background-color:' + bgColor + '\"' : '') + '></span>' + '</td>' + '<td class=\"fc-list-item-title ' + theme.getClass('widgetContent') + '\">' + '<a' + (url ? ' href=\"' + util_1.htmlEscape(url) + '\"' : '') + '>' + util_1.htmlEscape(eventDef.title || '') + '</a>' + '</td>' + '</tr>';\n        }; // like \"4:00am\"\n\n\n        ListEventRenderer.prototype.computeEventTimeFormat = function () {\n          return this.opt('mediumTimeFormat');\n        };\n\n        return ListEventRenderer;\n      }(EventRenderer_1[\"default\"]);\n\n      exports[\"default\"] = ListEventRenderer;\n      /***/\n    },\n    /* 250 */\n\n    /***/\n    function (module, exports, __webpack_require__) {\n      Object.defineProperty(exports, \"__esModule\", {\n        value: true\n      });\n\n      var tslib_1 = __webpack_require__(2);\n\n      var $ = __webpack_require__(3);\n\n      var EventPointing_1 = __webpack_require__(64);\n\n      var ListEventPointing =\n      /** @class */\n      function (_super) {\n        tslib_1.__extends(ListEventPointing, _super);\n\n        function ListEventPointing() {\n          return _super !== null && _super.apply(this, arguments) || this;\n        } // for events with a url, the whole <tr> should be clickable,\n        // but it's impossible to wrap with an <a> tag. simulate this.\n\n\n        ListEventPointing.prototype.handleClick = function (seg, ev) {\n          var url;\n\n          _super.prototype.handleClick.call(this, seg, ev); // might prevent the default action\n          // not clicking on or within an <a> with an href\n\n\n          if (!$(ev.target).closest('a[href]').length) {\n            url = seg.footprint.eventDef.url;\n\n            if (url && !ev.isDefaultPrevented()) {\n              // jsEvent not cancelled in handler\n              window.location.href = url; // simulate link click\n            }\n          }\n        };\n\n        return ListEventPointing;\n      }(EventPointing_1[\"default\"]);\n\n      exports[\"default\"] = ListEventPointing;\n      /***/\n    },,,,,,\n    /* 251 */\n\n    /* 252 */\n\n    /* 253 */\n\n    /* 254 */\n\n    /* 255 */\n\n    /* 256 */\n\n    /***/\n    function (module, exports, __webpack_require__) {\n      var $ = __webpack_require__(3);\n\n      var exportHooks = __webpack_require__(18);\n\n      var util_1 = __webpack_require__(4);\n\n      var Calendar_1 = __webpack_require__(232); // for intentional side-effects\n\n\n      __webpack_require__(11);\n\n      __webpack_require__(49);\n\n      __webpack_require__(260);\n\n      __webpack_require__(261);\n\n      __webpack_require__(264);\n\n      __webpack_require__(265);\n\n      __webpack_require__(266);\n\n      __webpack_require__(267);\n\n      $.fullCalendar = exportHooks;\n\n      $.fn.fullCalendar = function (options) {\n        var args = Array.prototype.slice.call(arguments, 1); // for a possible method call\n\n        var res = this; // what this function will return (this jQuery object by default)\n\n        this.each(function (i, _element) {\n          var element = $(_element);\n          var calendar = element.data('fullCalendar'); // get the existing calendar object (if any)\n\n          var singleRes; // the returned value of this single method call\n          // a method call\n\n          if (typeof options === 'string') {\n            if (options === 'getCalendar') {\n              if (!i) {\n                // first element only\n                res = calendar;\n              }\n            } else if (options === 'destroy') {\n              // don't warn if no calendar object\n              if (calendar) {\n                calendar.destroy();\n                element.removeData('fullCalendar');\n              }\n            } else if (!calendar) {\n              util_1.warn('Attempting to call a FullCalendar method on an element with no calendar.');\n            } else if ($.isFunction(calendar[options])) {\n              singleRes = calendar[options].apply(calendar, args);\n\n              if (!i) {\n                res = singleRes; // record the first method call result\n              }\n\n              if (options === 'destroy') {\n                // for the destroy method, must remove Calendar object data\n                element.removeData('fullCalendar');\n              }\n            } else {\n              util_1.warn(\"'\" + options + \"' is an unknown FullCalendar method.\");\n            }\n          } else if (!calendar) {\n            // don't initialize twice\n            calendar = new Calendar_1[\"default\"](element, options);\n            element.data('fullCalendar', calendar);\n            calendar.render();\n          }\n        });\n        return res;\n      };\n\n      module.exports = exportHooks;\n      /***/\n    },\n    /* 257 */\n\n    /***/\n    function (module, exports, __webpack_require__) {\n      Object.defineProperty(exports, \"__esModule\", {\n        value: true\n      });\n\n      var $ = __webpack_require__(3);\n\n      var util_1 = __webpack_require__(4);\n      /* Toolbar with buttons and title\r\n      ----------------------------------------------------------------------------------------------------------------------*/\n\n\n      var Toolbar =\n      /** @class */\n      function () {\n        function Toolbar(calendar, toolbarOptions) {\n          this.el = null; // mirrors local `el`\n\n          this.viewsWithButtons = [];\n          this.calendar = calendar;\n          this.toolbarOptions = toolbarOptions;\n        } // method to update toolbar-specific options, not calendar-wide options\n\n\n        Toolbar.prototype.setToolbarOptions = function (newToolbarOptions) {\n          this.toolbarOptions = newToolbarOptions;\n        }; // can be called repeatedly and will rerender\n\n\n        Toolbar.prototype.render = function () {\n          var sections = this.toolbarOptions.layout;\n          var el = this.el;\n\n          if (sections) {\n            if (!el) {\n              el = this.el = $(\"<div class='fc-toolbar \" + this.toolbarOptions.extraClasses + \"'/>\");\n            } else {\n              el.empty();\n            }\n\n            el.append(this.renderSection('left')).append(this.renderSection('right')).append(this.renderSection('center')).append('<div class=\"fc-clear\"/>');\n          } else {\n            this.removeElement();\n          }\n        };\n\n        Toolbar.prototype.removeElement = function () {\n          if (this.el) {\n            this.el.remove();\n            this.el = null;\n          }\n        };\n\n        Toolbar.prototype.renderSection = function (position) {\n          var _this = this;\n\n          var calendar = this.calendar;\n          var theme = calendar.theme;\n          var optionsManager = calendar.optionsManager;\n          var viewSpecManager = calendar.viewSpecManager;\n          var sectionEl = $('<div class=\"fc-' + position + '\"/>');\n          var buttonStr = this.toolbarOptions.layout[position];\n          var calendarCustomButtons = optionsManager.get('customButtons') || {};\n          var calendarButtonTextOverrides = optionsManager.overrides.buttonText || {};\n          var calendarButtonText = optionsManager.get('buttonText') || {};\n\n          if (buttonStr) {\n            $.each(buttonStr.split(' '), function (i, buttonGroupStr) {\n              var groupChildren = $();\n              var isOnlyButtons = true;\n              var groupEl;\n              $.each(buttonGroupStr.split(','), function (j, buttonName) {\n                var customButtonProps;\n                var viewSpec;\n                var buttonClick;\n                var buttonIcon; // only one of these will be set\n\n                var buttonText; // \"\n\n                var buttonInnerHtml;\n                var buttonClasses;\n                var buttonEl;\n                var buttonAriaAttr;\n\n                if (buttonName === 'title') {\n                  groupChildren = groupChildren.add($('<h2>&nbsp;</h2>')); // we always want it to take up height\n\n                  isOnlyButtons = false;\n                } else {\n                  if (customButtonProps = calendarCustomButtons[buttonName]) {\n                    buttonClick = function buttonClick(ev) {\n                      if (customButtonProps.click) {\n                        customButtonProps.click.call(buttonEl[0], ev);\n                      }\n                    };\n\n                    (buttonIcon = theme.getCustomButtonIconClass(customButtonProps)) || (buttonIcon = theme.getIconClass(buttonName)) || (buttonText = customButtonProps.text);\n                  } else if (viewSpec = viewSpecManager.getViewSpec(buttonName)) {\n                    _this.viewsWithButtons.push(buttonName);\n\n                    buttonClick = function buttonClick() {\n                      calendar.changeView(buttonName);\n                    };\n\n                    (buttonText = viewSpec.buttonTextOverride) || (buttonIcon = theme.getIconClass(buttonName)) || (buttonText = viewSpec.buttonTextDefault);\n                  } else if (calendar[buttonName]) {\n                    // a calendar method\n                    buttonClick = function buttonClick() {\n                      calendar[buttonName]();\n                    };\n\n                    (buttonText = calendarButtonTextOverrides[buttonName]) || (buttonIcon = theme.getIconClass(buttonName)) || (buttonText = calendarButtonText[buttonName]); //            ^ everything else is considered default\n                  }\n\n                  if (buttonClick) {\n                    buttonClasses = ['fc-' + buttonName + '-button', theme.getClass('button'), theme.getClass('stateDefault')];\n\n                    if (buttonText) {\n                      buttonInnerHtml = util_1.htmlEscape(buttonText);\n                      buttonAriaAttr = '';\n                    } else if (buttonIcon) {\n                      buttonInnerHtml = \"<span class='\" + buttonIcon + \"'></span>\";\n                      buttonAriaAttr = ' aria-label=\"' + buttonName + '\"';\n                    }\n\n                    buttonEl = $( // type=\"button\" so that it doesn't submit a form\n                    '<button type=\"button\" class=\"' + buttonClasses.join(' ') + '\"' + buttonAriaAttr + '>' + buttonInnerHtml + '</button>').click(function (ev) {\n                      // don't process clicks for disabled buttons\n                      if (!buttonEl.hasClass(theme.getClass('stateDisabled'))) {\n                        buttonClick(ev); // after the click action, if the button becomes the \"active\" tab, or disabled,\n                        // it should never have a hover class, so remove it now.\n\n                        if (buttonEl.hasClass(theme.getClass('stateActive')) || buttonEl.hasClass(theme.getClass('stateDisabled'))) {\n                          buttonEl.removeClass(theme.getClass('stateHover'));\n                        }\n                      }\n                    }).mousedown(function () {\n                      // the *down* effect (mouse pressed in).\n                      // only on buttons that are not the \"active\" tab, or disabled\n                      buttonEl.not('.' + theme.getClass('stateActive')).not('.' + theme.getClass('stateDisabled')).addClass(theme.getClass('stateDown'));\n                    }).mouseup(function () {\n                      // undo the *down* effect\n                      buttonEl.removeClass(theme.getClass('stateDown'));\n                    }).hover(function () {\n                      // the *hover* effect.\n                      // only on buttons that are not the \"active\" tab, or disabled\n                      buttonEl.not('.' + theme.getClass('stateActive')).not('.' + theme.getClass('stateDisabled')).addClass(theme.getClass('stateHover'));\n                    }, function () {\n                      // undo the *hover* effect\n                      buttonEl.removeClass(theme.getClass('stateHover')).removeClass(theme.getClass('stateDown')); // if mouseleave happens before mouseup\n                    });\n                    groupChildren = groupChildren.add(buttonEl);\n                  }\n                }\n              });\n\n              if (isOnlyButtons) {\n                groupChildren.first().addClass(theme.getClass('cornerLeft')).end().last().addClass(theme.getClass('cornerRight')).end();\n              }\n\n              if (groupChildren.length > 1) {\n                groupEl = $('<div/>');\n\n                if (isOnlyButtons) {\n                  groupEl.addClass(theme.getClass('buttonGroup'));\n                }\n\n                groupEl.append(groupChildren);\n                sectionEl.append(groupEl);\n              } else {\n                sectionEl.append(groupChildren); // 1 or 0 children\n              }\n            });\n          }\n\n          return sectionEl;\n        };\n\n        Toolbar.prototype.updateTitle = function (text) {\n          if (this.el) {\n            this.el.find('h2').text(text);\n          }\n        };\n\n        Toolbar.prototype.activateButton = function (buttonName) {\n          if (this.el) {\n            this.el.find('.fc-' + buttonName + '-button').addClass(this.calendar.theme.getClass('stateActive'));\n          }\n        };\n\n        Toolbar.prototype.deactivateButton = function (buttonName) {\n          if (this.el) {\n            this.el.find('.fc-' + buttonName + '-button').removeClass(this.calendar.theme.getClass('stateActive'));\n          }\n        };\n\n        Toolbar.prototype.disableButton = function (buttonName) {\n          if (this.el) {\n            this.el.find('.fc-' + buttonName + '-button').prop('disabled', true).addClass(this.calendar.theme.getClass('stateDisabled'));\n          }\n        };\n\n        Toolbar.prototype.enableButton = function (buttonName) {\n          if (this.el) {\n            this.el.find('.fc-' + buttonName + '-button').prop('disabled', false).removeClass(this.calendar.theme.getClass('stateDisabled'));\n          }\n        };\n\n        Toolbar.prototype.getViewsWithButtons = function () {\n          return this.viewsWithButtons;\n        };\n\n        return Toolbar;\n      }();\n\n      exports[\"default\"] = Toolbar;\n      /***/\n    },\n    /* 258 */\n\n    /***/\n    function (module, exports, __webpack_require__) {\n      Object.defineProperty(exports, \"__esModule\", {\n        value: true\n      });\n\n      var tslib_1 = __webpack_require__(2);\n\n      var $ = __webpack_require__(3);\n\n      var util_1 = __webpack_require__(4);\n\n      var options_1 = __webpack_require__(33);\n\n      var locale_1 = __webpack_require__(32);\n\n      var Model_1 = __webpack_require__(51);\n\n      var OptionsManager =\n      /** @class */\n      function (_super) {\n        tslib_1.__extends(OptionsManager, _super);\n\n        function OptionsManager(_calendar, overrides) {\n          var _this = _super.call(this) || this;\n\n          _this._calendar = _calendar;\n          _this.overrides = $.extend({}, overrides); // make a copy\n\n          _this.dynamicOverrides = {};\n\n          _this.compute();\n\n          return _this;\n        }\n\n        OptionsManager.prototype.add = function (newOptionHash) {\n          var optionCnt = 0;\n          var optionName;\n          this.recordOverrides(newOptionHash); // will trigger this model's watchers\n\n          for (optionName in newOptionHash) {\n            optionCnt++;\n          } // special-case handling of single option change.\n          // if only one option change, `optionName` will be its name.\n\n\n          if (optionCnt === 1) {\n            if (optionName === 'height' || optionName === 'contentHeight' || optionName === 'aspectRatio') {\n              this._calendar.updateViewSize(true); // isResize=true\n\n\n              return;\n            } else if (optionName === 'defaultDate') {\n              return; // can't change date this way. use gotoDate instead\n            } else if (optionName === 'businessHours') {\n              return; // this model already reacts to this\n            } else if (/^(event|select)(Overlap|Constraint|Allow)$/.test(optionName)) {\n              return; // doesn't affect rendering. only interactions.\n            } else if (optionName === 'timezone') {\n              this._calendar.view.flash('initialEvents');\n\n              return;\n            }\n          } // catch-all. rerender the header and footer and rebuild/rerender the current view\n\n\n          this._calendar.renderHeader();\n\n          this._calendar.renderFooter(); // even non-current views will be affected by this option change. do before rerender\n          // TODO: detangle\n\n\n          this._calendar.viewsByType = {};\n\n          this._calendar.reinitView();\n        }; // Computes the flattened options hash for the calendar and assigns to `this.options`.\n        // Assumes this.overrides and this.dynamicOverrides have already been initialized.\n\n\n        OptionsManager.prototype.compute = function () {\n          var locale;\n          var localeDefaults;\n          var isRTL;\n          var dirDefaults;\n          var rawOptions;\n          locale = util_1.firstDefined( // explicit locale option given?\n          this.dynamicOverrides.locale, this.overrides.locale);\n          localeDefaults = locale_1.localeOptionHash[locale];\n\n          if (!localeDefaults) {\n            // explicit locale option not given or invalid?\n            locale = options_1.globalDefaults.locale;\n            localeDefaults = locale_1.localeOptionHash[locale] || {};\n          }\n\n          isRTL = util_1.firstDefined( // based on options computed so far, is direction RTL?\n          this.dynamicOverrides.isRTL, this.overrides.isRTL, localeDefaults.isRTL, options_1.globalDefaults.isRTL);\n          dirDefaults = isRTL ? options_1.rtlDefaults : {};\n          this.dirDefaults = dirDefaults;\n          this.localeDefaults = localeDefaults;\n          rawOptions = options_1.mergeOptions([options_1.globalDefaults, dirDefaults, localeDefaults, this.overrides, this.dynamicOverrides]);\n          locale_1.populateInstanceComputableOptions(rawOptions); // fill in gaps with computed options\n\n          this.reset(rawOptions);\n        }; // stores the new options internally, but does not rerender anything.\n\n\n        OptionsManager.prototype.recordOverrides = function (newOptionHash) {\n          var optionName;\n\n          for (optionName in newOptionHash) {\n            this.dynamicOverrides[optionName] = newOptionHash[optionName];\n          }\n\n          this._calendar.viewSpecManager.clearCache(); // the dynamic override invalidates the options in this cache, so just clear it\n\n\n          this.compute(); // this.options needs to be recomputed after the dynamic override\n        };\n\n        return OptionsManager;\n      }(Model_1[\"default\"]);\n\n      exports[\"default\"] = OptionsManager;\n      /***/\n    },\n    /* 259 */\n\n    /***/\n    function (module, exports, __webpack_require__) {\n      Object.defineProperty(exports, \"__esModule\", {\n        value: true\n      });\n\n      var moment = __webpack_require__(0);\n\n      var $ = __webpack_require__(3);\n\n      var ViewRegistry_1 = __webpack_require__(24);\n\n      var util_1 = __webpack_require__(4);\n\n      var options_1 = __webpack_require__(33);\n\n      var locale_1 = __webpack_require__(32);\n\n      var ViewSpecManager =\n      /** @class */\n      function () {\n        function ViewSpecManager(optionsManager, _calendar) {\n          this.optionsManager = optionsManager;\n          this._calendar = _calendar;\n          this.clearCache();\n        }\n\n        ViewSpecManager.prototype.clearCache = function () {\n          this.viewSpecCache = {};\n        }; // Gets information about how to create a view. Will use a cache.\n\n\n        ViewSpecManager.prototype.getViewSpec = function (viewType) {\n          var cache = this.viewSpecCache;\n          return cache[viewType] || (cache[viewType] = this.buildViewSpec(viewType));\n        }; // Given a duration singular unit, like \"week\" or \"day\", finds a matching view spec.\n        // Preference is given to views that have corresponding buttons.\n\n\n        ViewSpecManager.prototype.getUnitViewSpec = function (unit) {\n          var viewTypes;\n          var i;\n          var spec;\n\n          if ($.inArray(unit, util_1.unitsDesc) !== -1) {\n            // put views that have buttons first. there will be duplicates, but oh well\n            viewTypes = this._calendar.header.getViewsWithButtons(); // TODO: include footer as well?\n\n            $.each(ViewRegistry_1.viewHash, function (viewType) {\n              viewTypes.push(viewType);\n            });\n\n            for (i = 0; i < viewTypes.length; i++) {\n              spec = this.getViewSpec(viewTypes[i]);\n\n              if (spec) {\n                if (spec.singleUnit === unit) {\n                  return spec;\n                }\n              }\n            }\n          }\n        }; // Builds an object with information on how to create a given view\n\n\n        ViewSpecManager.prototype.buildViewSpec = function (requestedViewType) {\n          var viewOverrides = this.optionsManager.overrides.views || {};\n          var specChain = []; // for the view. lowest to highest priority\n\n          var defaultsChain = []; // for the view. lowest to highest priority\n\n          var overridesChain = []; // for the view. lowest to highest priority\n\n          var viewType = requestedViewType;\n          var spec; // for the view\n\n          var overrides; // for the view\n\n          var durationInput;\n          var duration;\n          var unit; // iterate from the specific view definition to a more general one until we hit an actual View class\n\n          while (viewType) {\n            spec = ViewRegistry_1.viewHash[viewType];\n            overrides = viewOverrides[viewType];\n            viewType = null; // clear. might repopulate for another iteration\n\n            if (typeof spec === 'function') {\n              // TODO: deprecate\n              spec = {\n                'class': spec\n              };\n            }\n\n            if (spec) {\n              specChain.unshift(spec);\n              defaultsChain.unshift(spec.defaults || {});\n              durationInput = durationInput || spec.duration;\n              viewType = viewType || spec.type;\n            }\n\n            if (overrides) {\n              overridesChain.unshift(overrides); // view-specific option hashes have options at zero-level\n\n              durationInput = durationInput || overrides.duration;\n              viewType = viewType || overrides.type;\n            }\n          }\n\n          spec = util_1.mergeProps(specChain);\n          spec.type = requestedViewType;\n\n          if (!spec['class']) {\n            return false;\n          } // fall back to top-level `duration` option\n\n\n          durationInput = durationInput || this.optionsManager.dynamicOverrides.duration || this.optionsManager.overrides.duration;\n\n          if (durationInput) {\n            duration = moment.duration(durationInput);\n\n            if (duration.valueOf()) {\n              // valid?\n              unit = util_1.computeDurationGreatestUnit(duration, durationInput);\n              spec.duration = duration;\n              spec.durationUnit = unit; // view is a single-unit duration, like \"week\" or \"day\"\n              // incorporate options for this. lowest priority\n\n              if (duration.as(unit) === 1) {\n                spec.singleUnit = unit;\n                overridesChain.unshift(viewOverrides[unit] || {});\n              }\n            }\n          }\n\n          spec.defaults = options_1.mergeOptions(defaultsChain);\n          spec.overrides = options_1.mergeOptions(overridesChain);\n          this.buildViewSpecOptions(spec);\n          this.buildViewSpecButtonText(spec, requestedViewType);\n          return spec;\n        }; // Builds and assigns a view spec's options object from its already-assigned defaults and overrides\n\n\n        ViewSpecManager.prototype.buildViewSpecOptions = function (spec) {\n          var optionsManager = this.optionsManager;\n          spec.options = options_1.mergeOptions([options_1.globalDefaults, spec.defaults, optionsManager.dirDefaults, optionsManager.localeDefaults, optionsManager.overrides, spec.overrides, optionsManager.dynamicOverrides // dynamically set via setter. highest precedence\n          ]);\n          locale_1.populateInstanceComputableOptions(spec.options);\n        }; // Computes and assigns a view spec's buttonText-related options\n\n\n        ViewSpecManager.prototype.buildViewSpecButtonText = function (spec, requestedViewType) {\n          var optionsManager = this.optionsManager; // given an options object with a possible `buttonText` hash, lookup the buttonText for the\n          // requested view, falling back to a generic unit entry like \"week\" or \"day\"\n\n          function queryButtonText(options) {\n            var buttonText = options.buttonText || {};\n            return buttonText[requestedViewType] || ( // view can decide to look up a certain key\n            spec.buttonTextKey ? buttonText[spec.buttonTextKey] : null) || ( // a key like \"month\"\n            spec.singleUnit ? buttonText[spec.singleUnit] : null);\n          } // highest to lowest priority\n\n\n          spec.buttonTextOverride = queryButtonText(optionsManager.dynamicOverrides) || queryButtonText(optionsManager.overrides) || // constructor-specified buttonText lookup hash takes precedence\n          spec.overrides.buttonText; // `buttonText` for view-specific options is a string\n          // highest to lowest priority. mirrors buildViewSpecOptions\n\n          spec.buttonTextDefault = queryButtonText(optionsManager.localeDefaults) || queryButtonText(optionsManager.dirDefaults) || spec.defaults.buttonText || // a single string. from ViewSubclass.defaults\n          queryButtonText(options_1.globalDefaults) || (spec.duration ? this._calendar.humanizeDuration(spec.duration) : null) || // like \"3 days\"\n          requestedViewType; // fall back to given view name\n        };\n\n        return ViewSpecManager;\n      }();\n\n      exports[\"default\"] = ViewSpecManager;\n      /***/\n    },\n    /* 260 */\n\n    /***/\n    function (module, exports, __webpack_require__) {\n      Object.defineProperty(exports, \"__esModule\", {\n        value: true\n      });\n\n      var EventSourceParser_1 = __webpack_require__(38);\n\n      var ArrayEventSource_1 = __webpack_require__(56);\n\n      var FuncEventSource_1 = __webpack_require__(223);\n\n      var JsonFeedEventSource_1 = __webpack_require__(224);\n\n      EventSourceParser_1[\"default\"].registerClass(ArrayEventSource_1[\"default\"]);\n      EventSourceParser_1[\"default\"].registerClass(FuncEventSource_1[\"default\"]);\n      EventSourceParser_1[\"default\"].registerClass(JsonFeedEventSource_1[\"default\"]);\n      /***/\n    },\n    /* 261 */\n\n    /***/\n    function (module, exports, __webpack_require__) {\n      Object.defineProperty(exports, \"__esModule\", {\n        value: true\n      });\n\n      var ThemeRegistry_1 = __webpack_require__(57);\n\n      var StandardTheme_1 = __webpack_require__(221);\n\n      var JqueryUiTheme_1 = __webpack_require__(222);\n\n      var Bootstrap3Theme_1 = __webpack_require__(262);\n\n      var Bootstrap4Theme_1 = __webpack_require__(263);\n\n      ThemeRegistry_1.defineThemeSystem('standard', StandardTheme_1[\"default\"]);\n      ThemeRegistry_1.defineThemeSystem('jquery-ui', JqueryUiTheme_1[\"default\"]);\n      ThemeRegistry_1.defineThemeSystem('bootstrap3', Bootstrap3Theme_1[\"default\"]);\n      ThemeRegistry_1.defineThemeSystem('bootstrap4', Bootstrap4Theme_1[\"default\"]);\n      /***/\n    },\n    /* 262 */\n\n    /***/\n    function (module, exports, __webpack_require__) {\n      Object.defineProperty(exports, \"__esModule\", {\n        value: true\n      });\n\n      var tslib_1 = __webpack_require__(2);\n\n      var Theme_1 = __webpack_require__(22);\n\n      var Bootstrap3Theme =\n      /** @class */\n      function (_super) {\n        tslib_1.__extends(Bootstrap3Theme, _super);\n\n        function Bootstrap3Theme() {\n          return _super !== null && _super.apply(this, arguments) || this;\n        }\n\n        return Bootstrap3Theme;\n      }(Theme_1[\"default\"]);\n\n      exports[\"default\"] = Bootstrap3Theme;\n      Bootstrap3Theme.prototype.classes = {\n        widget: 'fc-bootstrap3',\n        tableGrid: 'table-bordered',\n        tableList: 'table',\n        tableListHeading: 'active',\n        buttonGroup: 'btn-group',\n        button: 'btn btn-default',\n        stateActive: 'active',\n        stateDisabled: 'disabled',\n        today: 'alert alert-info',\n        popover: 'panel panel-default',\n        popoverHeader: 'panel-heading',\n        popoverContent: 'panel-body',\n        // day grid\n        // for left/right border color when border is inset from edges (all-day in agenda view)\n        // avoid `panel` class b/c don't want margins/radius. only border color.\n        headerRow: 'panel-default',\n        dayRow: 'panel-default',\n        // list view\n        listView: 'panel panel-default'\n      };\n      Bootstrap3Theme.prototype.baseIconClass = 'glyphicon';\n      Bootstrap3Theme.prototype.iconClasses = {\n        close: 'glyphicon-remove',\n        prev: 'glyphicon-chevron-left',\n        next: 'glyphicon-chevron-right',\n        prevYear: 'glyphicon-backward',\n        nextYear: 'glyphicon-forward'\n      };\n      Bootstrap3Theme.prototype.iconOverrideOption = 'bootstrapGlyphicons';\n      Bootstrap3Theme.prototype.iconOverrideCustomButtonOption = 'bootstrapGlyphicon';\n      Bootstrap3Theme.prototype.iconOverridePrefix = 'glyphicon-';\n      /***/\n    },\n    /* 263 */\n\n    /***/\n    function (module, exports, __webpack_require__) {\n      Object.defineProperty(exports, \"__esModule\", {\n        value: true\n      });\n\n      var tslib_1 = __webpack_require__(2);\n\n      var Theme_1 = __webpack_require__(22);\n\n      var Bootstrap4Theme =\n      /** @class */\n      function (_super) {\n        tslib_1.__extends(Bootstrap4Theme, _super);\n\n        function Bootstrap4Theme() {\n          return _super !== null && _super.apply(this, arguments) || this;\n        }\n\n        return Bootstrap4Theme;\n      }(Theme_1[\"default\"]);\n\n      exports[\"default\"] = Bootstrap4Theme;\n      Bootstrap4Theme.prototype.classes = {\n        widget: 'fc-bootstrap4',\n        tableGrid: 'table-bordered',\n        tableList: 'table',\n        tableListHeading: 'table-active',\n        buttonGroup: 'btn-group',\n        button: 'btn btn-primary',\n        stateActive: 'active',\n        stateDisabled: 'disabled',\n        today: 'alert alert-info',\n        popover: 'card card-primary',\n        popoverHeader: 'card-header',\n        popoverContent: 'card-body',\n        // day grid\n        // for left/right border color when border is inset from edges (all-day in agenda view)\n        // avoid `table` class b/c don't want margins/padding/structure. only border color.\n        headerRow: 'table-bordered',\n        dayRow: 'table-bordered',\n        // list view\n        listView: 'card card-primary'\n      };\n      Bootstrap4Theme.prototype.baseIconClass = 'fa';\n      Bootstrap4Theme.prototype.iconClasses = {\n        close: 'fa-times',\n        prev: 'fa-chevron-left',\n        next: 'fa-chevron-right',\n        prevYear: 'fa-angle-double-left',\n        nextYear: 'fa-angle-double-right'\n      };\n      Bootstrap4Theme.prototype.iconOverrideOption = 'bootstrapFontAwesome';\n      Bootstrap4Theme.prototype.iconOverrideCustomButtonOption = 'bootstrapFontAwesome';\n      Bootstrap4Theme.prototype.iconOverridePrefix = 'fa-';\n      /***/\n    },\n    /* 264 */\n\n    /***/\n    function (module, exports, __webpack_require__) {\n      Object.defineProperty(exports, \"__esModule\", {\n        value: true\n      });\n\n      var ViewRegistry_1 = __webpack_require__(24);\n\n      var BasicView_1 = __webpack_require__(67);\n\n      var MonthView_1 = __webpack_require__(246);\n\n      ViewRegistry_1.defineView('basic', {\n        'class': BasicView_1[\"default\"]\n      });\n      ViewRegistry_1.defineView('basicDay', {\n        type: 'basic',\n        duration: {\n          days: 1\n        }\n      });\n      ViewRegistry_1.defineView('basicWeek', {\n        type: 'basic',\n        duration: {\n          weeks: 1\n        }\n      });\n      ViewRegistry_1.defineView('month', {\n        'class': MonthView_1[\"default\"],\n        duration: {\n          months: 1\n        },\n        defaults: {\n          fixedWeekCount: true\n        }\n      });\n      /***/\n    },\n    /* 265 */\n\n    /***/\n    function (module, exports, __webpack_require__) {\n      Object.defineProperty(exports, \"__esModule\", {\n        value: true\n      });\n\n      var ViewRegistry_1 = __webpack_require__(24);\n\n      var AgendaView_1 = __webpack_require__(238);\n\n      ViewRegistry_1.defineView('agenda', {\n        'class': AgendaView_1[\"default\"],\n        defaults: {\n          allDaySlot: true,\n          slotDuration: '00:30:00',\n          slotEventOverlap: true // a bad name. confused with overlap/constraint system\n\n        }\n      });\n      ViewRegistry_1.defineView('agendaDay', {\n        type: 'agenda',\n        duration: {\n          days: 1\n        }\n      });\n      ViewRegistry_1.defineView('agendaWeek', {\n        type: 'agenda',\n        duration: {\n          weeks: 1\n        }\n      });\n      /***/\n    },\n    /* 266 */\n\n    /***/\n    function (module, exports, __webpack_require__) {\n      Object.defineProperty(exports, \"__esModule\", {\n        value: true\n      });\n\n      var ViewRegistry_1 = __webpack_require__(24);\n\n      var ListView_1 = __webpack_require__(248);\n\n      ViewRegistry_1.defineView('list', {\n        'class': ListView_1[\"default\"],\n        buttonTextKey: 'list',\n        defaults: {\n          buttonText: 'list',\n          listDayFormat: 'LL',\n          noEventsMessage: 'No events to display'\n        }\n      });\n      ViewRegistry_1.defineView('listDay', {\n        type: 'list',\n        duration: {\n          days: 1\n        },\n        defaults: {\n          listDayFormat: 'dddd' // day-of-week is all we need. full date is probably in header\n\n        }\n      });\n      ViewRegistry_1.defineView('listWeek', {\n        type: 'list',\n        duration: {\n          weeks: 1\n        },\n        defaults: {\n          listDayFormat: 'dddd',\n          listDayAltFormat: 'LL'\n        }\n      });\n      ViewRegistry_1.defineView('listMonth', {\n        type: 'list',\n        duration: {\n          month: 1\n        },\n        defaults: {\n          listDayAltFormat: 'dddd' // day-of-week is nice-to-have\n\n        }\n      });\n      ViewRegistry_1.defineView('listYear', {\n        type: 'list',\n        duration: {\n          year: 1\n        },\n        defaults: {\n          listDayAltFormat: 'dddd' // day-of-week is nice-to-have\n\n        }\n      });\n      /***/\n    },\n    /* 267 */\n\n    /***/\n    function (module, exports) {\n      Object.defineProperty(exports, \"__esModule\", {\n        value: true\n      });\n      /***/\n    }])\n  );\n});","\"use strict\";\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nvar externals = require(\"./externals\");\n\nvar Workbook = require(\"./Workbook\");\n\nvar FormulaError = require(\"./FormulaError\");\n\nvar dateConverter = require(\"./dateConverter\");\n\nvar RichText = require(\"./RichText\");\n/**\r\n * xlsx-poulate namespace.\r\n * @namespace\r\n */\n\n\nvar XlsxPopulate =\n/*#__PURE__*/\nfunction () {\n  function XlsxPopulate() {\n    _classCallCheck(this, XlsxPopulate);\n  }\n\n  _createClass(XlsxPopulate, null, [{\n    key: \"dateToNumber\",\n\n    /**\r\n     * Convert a date to a number for Excel.\r\n     * @param {Date} date - The date.\r\n     * @returns {number} The number.\r\n     */\n    value: function dateToNumber(date) {\n      return dateConverter.dateToNumber(date);\n    }\n    /**\r\n     * Create a new blank workbook.\r\n     * @returns {Promise.<Workbook>} The workbook.\r\n     */\n\n  }, {\n    key: \"fromBlankAsync\",\n    value: function fromBlankAsync() {\n      return Workbook.fromBlankAsync();\n    }\n    /**\r\n     * Loads a workbook from a data object. (Supports any supported [JSZip data types]{@link https://stuk.github.io/jszip/documentation/api_jszip/load_async.html}.)\r\n     * @param {string|Array.<number>|ArrayBuffer|Uint8Array|Buffer|Blob|Promise.<*>} data - The data to load.\r\n     * @param {{}} [opts] - Options\r\n     * @param {string} [opts.password] - The password to decrypt the workbook.\r\n     * @returns {Promise.<Workbook>} The workbook.\r\n     */\n\n  }, {\n    key: \"fromDataAsync\",\n    value: function fromDataAsync(data, opts) {\n      return Workbook.fromDataAsync(data, opts);\n    }\n    /**\r\n     * Loads a workbook from file.\r\n     * @param {string} path - The path to the workbook.\r\n     * @param {{}} [opts] - Options\r\n     * @param {string} [opts.password] - The password to decrypt the workbook.\r\n     * @returns {Promise.<Workbook>} The workbook.\r\n     */\n\n  }, {\n    key: \"fromFileAsync\",\n    value: function fromFileAsync(path, opts) {\n      return Workbook.fromFileAsync(path, opts);\n    }\n    /**\r\n     * Convert an Excel number to a date.\r\n     * @param {number} number - The number.\r\n     * @returns {Date} The date.\r\n     */\n\n  }, {\n    key: \"numberToDate\",\n    value: function numberToDate(number) {\n      return dateConverter.numberToDate(number);\n    }\n    /**\r\n     * The Promise library.\r\n     * @type {Promise}\r\n     */\n\n  }, {\n    key: \"Promise\",\n    get: function get() {\n      return externals.Promise;\n    },\n    set: function set(Promise) {\n      externals.Promise = Promise;\n    }\n  }]);\n\n  return XlsxPopulate;\n}();\n/**\r\n * The XLSX mime type.\r\n * @type {string}\r\n */\n\n\nXlsxPopulate.MIME_TYPE = Workbook.MIME_TYPE;\n/**\r\n * Formula error class.\r\n * @type {FormulaError}\r\n */\n\nXlsxPopulate.FormulaError = FormulaError;\n/**\r\n * RichTexts class\r\n * @type {RichText}\r\n */\n\nXlsxPopulate.RichText = RichText;\nmodule.exports = XlsxPopulate;","function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n/*\n * Dexie.js - a minimalistic wrapper for IndexedDB\n * ===============================================\n *\n * By David Fahlander, david.fahlander@gmail.com\n *\n * Version {version}, {date}\n *\n * http://dexie.org\n *\n * Apache License Version 2.0, January 2004, http://www.apache.org/licenses/\n */\nvar keys = Object.keys;\nvar isArray = Array.isArray;\n\nvar _global = typeof self !== 'undefined' ? self : typeof window !== 'undefined' ? window : global;\n\nfunction extend(obj, extension) {\n  if (_typeof(extension) !== 'object') return obj;\n  keys(extension).forEach(function (key) {\n    obj[key] = extension[key];\n  });\n  return obj;\n}\n\nvar getProto = Object.getPrototypeOf;\nvar _hasOwn = {}.hasOwnProperty;\n\nfunction hasOwn(obj, prop) {\n  return _hasOwn.call(obj, prop);\n}\n\nfunction props(proto, extension) {\n  if (typeof extension === 'function') extension = extension(getProto(proto));\n  keys(extension).forEach(function (key) {\n    setProp(proto, key, extension[key]);\n  });\n}\n\nvar defineProperty = Object.defineProperty;\n\nfunction setProp(obj, prop, functionOrGetSet, options) {\n  defineProperty(obj, prop, extend(functionOrGetSet && hasOwn(functionOrGetSet, \"get\") && typeof functionOrGetSet.get === 'function' ? {\n    get: functionOrGetSet.get,\n    set: functionOrGetSet.set,\n    configurable: true\n  } : {\n    value: functionOrGetSet,\n    configurable: true,\n    writable: true\n  }, options));\n}\n\nfunction derive(Child) {\n  return {\n    from: function from(Parent) {\n      Child.prototype = Object.create(Parent.prototype);\n      setProp(Child.prototype, \"constructor\", Child);\n      return {\n        extend: props.bind(null, Child.prototype)\n      };\n    }\n  };\n}\n\nvar getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;\n\nfunction getPropertyDescriptor(obj, prop) {\n  var pd = getOwnPropertyDescriptor(obj, prop),\n      proto;\n  return pd || (proto = getProto(obj)) && getPropertyDescriptor(proto, prop);\n}\n\nvar _slice = [].slice;\n\nfunction slice(args, start, end) {\n  return _slice.call(args, start, end);\n}\n\nfunction override(origFunc, overridedFactory) {\n  return overridedFactory(origFunc);\n}\n\nfunction assert(b) {\n  if (!b) throw new Error(\"Assertion Failed\");\n}\n\nfunction asap(fn) {\n  if (_global.setImmediate) setImmediate(fn);else setTimeout(fn, 0);\n}\n/** Generate an object (hash map) based on given array.\n * @param extractor Function taking an array item and its index and returning an array of 2 items ([key, value]) to\n *        instert on the resulting object for each item in the array. If this function returns a falsy value, the\n *        current item wont affect the resulting object.\n */\n\n\nfunction arrayToObject(array, extractor) {\n  return array.reduce(function (result, item, i) {\n    var nameAndValue = extractor(item, i);\n    if (nameAndValue) result[nameAndValue[0]] = nameAndValue[1];\n    return result;\n  }, {});\n}\n\nfunction trycatcher(fn, reject) {\n  return function () {\n    try {\n      fn.apply(this, arguments);\n    } catch (e) {\n      reject(e);\n    }\n  };\n}\n\nfunction tryCatch(fn, onerror, args) {\n  try {\n    fn.apply(null, args);\n  } catch (ex) {\n    onerror && onerror(ex);\n  }\n}\n\nfunction getByKeyPath(obj, keyPath) {\n  // http://www.w3.org/TR/IndexedDB/#steps-for-extracting-a-key-from-a-value-using-a-key-path\n  if (hasOwn(obj, keyPath)) return obj[keyPath]; // This line is moved from last to first for optimization purpose.\n\n  if (!keyPath) return obj;\n\n  if (typeof keyPath !== 'string') {\n    var rv = [];\n\n    for (var i = 0, l = keyPath.length; i < l; ++i) {\n      var val = getByKeyPath(obj, keyPath[i]);\n      rv.push(val);\n    }\n\n    return rv;\n  }\n\n  var period = keyPath.indexOf('.');\n\n  if (period !== -1) {\n    var innerObj = obj[keyPath.substr(0, period)];\n    return innerObj === undefined ? undefined : getByKeyPath(innerObj, keyPath.substr(period + 1));\n  }\n\n  return undefined;\n}\n\nfunction setByKeyPath(obj, keyPath, value) {\n  if (!obj || keyPath === undefined) return;\n  if ('isFrozen' in Object && Object.isFrozen(obj)) return;\n\n  if (typeof keyPath !== 'string' && 'length' in keyPath) {\n    assert(typeof value !== 'string' && 'length' in value);\n\n    for (var i = 0, l = keyPath.length; i < l; ++i) {\n      setByKeyPath(obj, keyPath[i], value[i]);\n    }\n  } else {\n    var period = keyPath.indexOf('.');\n\n    if (period !== -1) {\n      var currentKeyPath = keyPath.substr(0, period);\n      var remainingKeyPath = keyPath.substr(period + 1);\n      if (remainingKeyPath === \"\") {\n        if (value === undefined) delete obj[currentKeyPath];else obj[currentKeyPath] = value;\n      } else {\n        var innerObj = obj[currentKeyPath];\n        if (!innerObj) innerObj = obj[currentKeyPath] = {};\n        setByKeyPath(innerObj, remainingKeyPath, value);\n      }\n    } else {\n      if (value === undefined) delete obj[keyPath];else obj[keyPath] = value;\n    }\n  }\n}\n\nfunction delByKeyPath(obj, keyPath) {\n  if (typeof keyPath === 'string') setByKeyPath(obj, keyPath, undefined);else if ('length' in keyPath) [].map.call(keyPath, function (kp) {\n    setByKeyPath(obj, kp, undefined);\n  });\n}\n\nfunction shallowClone(obj) {\n  var rv = {};\n\n  for (var m in obj) {\n    if (hasOwn(obj, m)) rv[m] = obj[m];\n  }\n\n  return rv;\n}\n\nvar concat = [].concat;\n\nfunction flatten(a) {\n  return concat.apply([], a);\n} //https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API/Structured_clone_algorithm\n\n\nvar intrinsicTypes = \"Boolean,String,Date,RegExp,Blob,File,FileList,ArrayBuffer,DataView,Uint8ClampedArray,ImageData,Map,Set\".split(',').concat(flatten([8, 16, 32, 64].map(function (num) {\n  return [\"Int\", \"Uint\", \"Float\"].map(function (t) {\n    return t + num + \"Array\";\n  });\n}))).filter(function (t) {\n  return _global[t];\n}).map(function (t) {\n  return _global[t];\n});\n\nfunction deepClone(any) {\n  if (!any || _typeof(any) !== 'object') return any;\n  var rv;\n\n  if (isArray(any)) {\n    rv = [];\n\n    for (var i = 0, l = any.length; i < l; ++i) {\n      rv.push(deepClone(any[i]));\n    }\n  } else if (intrinsicTypes.indexOf(any.constructor) >= 0) {\n    rv = any;\n  } else {\n    rv = any.constructor ? Object.create(any.constructor.prototype) : {};\n\n    for (var prop in any) {\n      if (hasOwn(any, prop)) {\n        rv[prop] = deepClone(any[prop]);\n      }\n    }\n  }\n\n  return rv;\n}\n\nfunction getObjectDiff(a, b, rv, prfx) {\n  // Compares objects a and b and produces a diff object.\n  rv = rv || {};\n  prfx = prfx || '';\n  keys(a).forEach(function (prop) {\n    if (!hasOwn(b, prop)) rv[prfx + prop] = undefined; // Property removed\n    else {\n        var ap = a[prop],\n            bp = b[prop];\n        if (_typeof(ap) === 'object' && _typeof(bp) === 'object' && ap && bp && // Now compare constructors are same (not equal because wont work in Safari)\n        '' + ap.constructor === '' + bp.constructor) // Same type of object but its properties may have changed\n          getObjectDiff(ap, bp, rv, prfx + prop + \".\");else if (ap !== bp) rv[prfx + prop] = b[prop]; // Primitive value changed\n      }\n  });\n  keys(b).forEach(function (prop) {\n    if (!hasOwn(a, prop)) {\n      rv[prfx + prop] = b[prop]; // Property added\n    }\n  });\n  return rv;\n} // If first argument is iterable or array-like, return it as an array\n\n\nvar iteratorSymbol = typeof Symbol !== 'undefined' && Symbol.iterator;\nvar getIteratorOf = iteratorSymbol ? function (x) {\n  var i;\n  return x != null && (i = x[iteratorSymbol]) && i.apply(x);\n} : function () {\n  return null;\n};\nvar NO_CHAR_ARRAY = {}; // Takes one or several arguments and returns an array based on the following criteras:\n// * If several arguments provided, return arguments converted to an array in a way that\n//   still allows javascript engine to optimize the code.\n// * If single argument is an array, return a clone of it.\n// * If this-pointer equals NO_CHAR_ARRAY, don't accept strings as valid iterables as a special\n//   case to the two bullets below.\n// * If single argument is an iterable, convert it to an array and return the resulting array.\n// * If single argument is array-like (has length of type number), convert it to an array.\n\nfunction getArrayOf(arrayLike) {\n  var i, a, x, it;\n\n  if (arguments.length === 1) {\n    if (isArray(arrayLike)) return arrayLike.slice();\n    if (this === NO_CHAR_ARRAY && typeof arrayLike === 'string') return [arrayLike];\n\n    if (it = getIteratorOf(arrayLike)) {\n      a = [];\n\n      while (x = it.next(), !x.done) {\n        a.push(x.value);\n      }\n\n      return a;\n    }\n\n    if (arrayLike == null) return [arrayLike];\n    i = arrayLike.length;\n\n    if (typeof i === 'number') {\n      a = new Array(i);\n\n      while (i--) {\n        a[i] = arrayLike[i];\n      }\n\n      return a;\n    }\n\n    return [arrayLike];\n  }\n\n  i = arguments.length;\n  a = new Array(i);\n\n  while (i--) {\n    a[i] = arguments[i];\n  }\n\n  return a;\n} // By default, debug will be true only if platform is a web platform and its page is served from localhost.\n// When debug = true, error's stacks will contain asyncronic long stacks.\n\n\nvar debug = typeof location !== 'undefined' && // By default, use debug mode if served from localhost.\n/^(http|https):\\/\\/(localhost|127\\.0\\.0\\.1)/.test(location.href);\n\nfunction setDebug(value, filter) {\n  debug = value;\n  libraryFilter = filter;\n}\n\nvar libraryFilter = function libraryFilter() {\n  return true;\n};\n\nvar NEEDS_THROW_FOR_STACK = !new Error(\"\").stack;\n\nfunction getErrorWithStack() {\n  \"use strict\";\n\n  if (NEEDS_THROW_FOR_STACK) try {\n    // Doing something naughty in strict mode here to trigger a specific error\n    // that can be explicitely ignored in debugger's exception settings.\n    // If we'd just throw new Error() here, IE's debugger's exception settings\n    // will just consider it as \"exception thrown by javascript code\" which is\n    // something you wouldn't want it to ignore.\n    getErrorWithStack.arguments;\n    throw new Error(); // Fallback if above line don't throw.\n  } catch (e) {\n    return e;\n  }\n  return new Error();\n}\n\nfunction prettyStack(exception, numIgnoredFrames) {\n  var stack = exception.stack;\n  if (!stack) return \"\";\n  numIgnoredFrames = numIgnoredFrames || 0;\n  if (stack.indexOf(exception.name) === 0) numIgnoredFrames += (exception.name + exception.message).split('\\n').length;\n  return stack.split('\\n').slice(numIgnoredFrames).filter(libraryFilter).map(function (frame) {\n    return \"\\n\" + frame;\n  }).join('');\n}\n\nfunction deprecated(what, fn) {\n  return function () {\n    console.warn(what + \" is deprecated. See https://github.com/dfahlander/Dexie.js/wiki/Deprecations. \" + prettyStack(getErrorWithStack(), 1));\n    return fn.apply(this, arguments);\n  };\n}\n\nvar dexieErrorNames = ['Modify', 'Bulk', 'OpenFailed', 'VersionChange', 'Schema', 'Upgrade', 'InvalidTable', 'MissingAPI', 'NoSuchDatabase', 'InvalidArgument', 'SubTransaction', 'Unsupported', 'Internal', 'DatabaseClosed', 'PrematureCommit', 'ForeignAwait'];\nvar idbDomErrorNames = ['Unknown', 'Constraint', 'Data', 'TransactionInactive', 'ReadOnly', 'Version', 'NotFound', 'InvalidState', 'InvalidAccess', 'Abort', 'Timeout', 'QuotaExceeded', 'Syntax', 'DataClone'];\nvar errorList = dexieErrorNames.concat(idbDomErrorNames);\nvar defaultTexts = {\n  VersionChanged: \"Database version changed by other database connection\",\n  DatabaseClosed: \"Database has been closed\",\n  Abort: \"Transaction aborted\",\n  TransactionInactive: \"Transaction has already completed or failed\"\n}; //\n// DexieError - base class of all out exceptions.\n//\n\nfunction DexieError(name, msg) {\n  // Reason we don't use ES6 classes is because:\n  // 1. It bloats transpiled code and increases size of minified code.\n  // 2. It doesn't give us much in this case.\n  // 3. It would require sub classes to call super(), which\n  //    is not needed when deriving from Error.\n  this._e = getErrorWithStack();\n  this.name = name;\n  this.message = msg;\n}\n\nderive(DexieError).from(Error).extend({\n  stack: {\n    get: function get() {\n      return this._stack || (this._stack = this.name + \": \" + this.message + prettyStack(this._e, 2));\n    }\n  },\n  toString: function toString() {\n    return this.name + \": \" + this.message;\n  }\n});\n\nfunction getMultiErrorMessage(msg, failures) {\n  return msg + \". Errors: \" + failures.map(function (f) {\n    return f.toString();\n  }).filter(function (v, i, s) {\n    return s.indexOf(v) === i;\n  }) // Only unique error strings\n  .join('\\n');\n} //\n// ModifyError - thrown in Collection.modify()\n// Specific constructor because it contains members failures and failedKeys.\n//\n\n\nfunction ModifyError(msg, failures, successCount, failedKeys) {\n  this._e = getErrorWithStack();\n  this.failures = failures;\n  this.failedKeys = failedKeys;\n  this.successCount = successCount;\n}\n\nderive(ModifyError).from(DexieError);\n\nfunction BulkError(msg, failures) {\n  this._e = getErrorWithStack();\n  this.name = \"BulkError\";\n  this.failures = failures;\n  this.message = getMultiErrorMessage(msg, failures);\n}\n\nderive(BulkError).from(DexieError); //\n//\n// Dynamically generate error names and exception classes based\n// on the names in errorList.\n//\n//\n// Map of {ErrorName -> ErrorName + \"Error\"}\n\nvar errnames = errorList.reduce(function (obj, name) {\n  return obj[name] = name + \"Error\", obj;\n}, {}); // Need an alias for DexieError because we're gonna create subclasses with the same name.\n\nvar BaseException = DexieError; // Map of {ErrorName -> exception constructor}\n\nvar exceptions = errorList.reduce(function (obj, name) {\n  // Let the name be \"DexieError\" because this name may\n  // be shown in call stack and when debugging. DexieError is\n  // the most true name because it derives from DexieError,\n  // and we cannot change Function.name programatically without\n  // dynamically create a Function object, which would be considered\n  // 'eval-evil'.\n  var fullName = name + \"Error\";\n\n  function DexieError(msgOrInner, inner) {\n    this._e = getErrorWithStack();\n    this.name = fullName;\n\n    if (!msgOrInner) {\n      this.message = defaultTexts[name] || fullName;\n      this.inner = null;\n    } else if (typeof msgOrInner === 'string') {\n      this.message = msgOrInner;\n      this.inner = inner || null;\n    } else if (_typeof(msgOrInner) === 'object') {\n      this.message = msgOrInner.name + \" \" + msgOrInner.message;\n      this.inner = msgOrInner;\n    }\n  }\n\n  derive(DexieError).from(BaseException);\n  obj[name] = DexieError;\n  return obj;\n}, {}); // Use ECMASCRIPT standard exceptions where applicable:\n\nexceptions.Syntax = SyntaxError;\nexceptions.Type = TypeError;\nexceptions.Range = RangeError;\nvar exceptionMap = idbDomErrorNames.reduce(function (obj, name) {\n  obj[name + \"Error\"] = exceptions[name];\n  return obj;\n}, {});\n\nfunction mapError(domError, message) {\n  if (!domError || domError instanceof DexieError || domError instanceof TypeError || domError instanceof SyntaxError || !domError.name || !exceptionMap[domError.name]) return domError;\n  var rv = new exceptionMap[domError.name](message || domError.message, domError);\n\n  if (\"stack\" in domError) {\n    // Derive stack from inner exception if it has a stack\n    setProp(rv, \"stack\", {\n      get: function get() {\n        return this.inner.stack;\n      }\n    });\n  }\n\n  return rv;\n}\n\nvar fullNameExceptions = errorList.reduce(function (obj, name) {\n  if ([\"Syntax\", \"Type\", \"Range\"].indexOf(name) === -1) obj[name + \"Error\"] = exceptions[name];\n  return obj;\n}, {});\nfullNameExceptions.ModifyError = ModifyError;\nfullNameExceptions.DexieError = DexieError;\nfullNameExceptions.BulkError = BulkError;\n\nfunction nop() {}\n\nfunction mirror(val) {\n  return val;\n}\n\nfunction pureFunctionChain(f1, f2) {\n  // Enables chained events that takes ONE argument and returns it to the next function in chain.\n  // This pattern is used in the hook(\"reading\") event.\n  if (f1 == null || f1 === mirror) return f2;\n  return function (val) {\n    return f2(f1(val));\n  };\n}\n\nfunction callBoth(on1, on2) {\n  return function () {\n    on1.apply(this, arguments);\n    on2.apply(this, arguments);\n  };\n}\n\nfunction hookCreatingChain(f1, f2) {\n  // Enables chained events that takes several arguments and may modify first argument by making a modification and then returning the same instance.\n  // This pattern is used in the hook(\"creating\") event.\n  if (f1 === nop) return f2;\n  return function () {\n    var res = f1.apply(this, arguments);\n    if (res !== undefined) arguments[0] = res;\n    var onsuccess = this.onsuccess,\n        // In case event listener has set this.onsuccess\n    onerror = this.onerror; // In case event listener has set this.onerror\n\n    this.onsuccess = null;\n    this.onerror = null;\n    var res2 = f2.apply(this, arguments);\n    if (onsuccess) this.onsuccess = this.onsuccess ? callBoth(onsuccess, this.onsuccess) : onsuccess;\n    if (onerror) this.onerror = this.onerror ? callBoth(onerror, this.onerror) : onerror;\n    return res2 !== undefined ? res2 : res;\n  };\n}\n\nfunction hookDeletingChain(f1, f2) {\n  if (f1 === nop) return f2;\n  return function () {\n    f1.apply(this, arguments);\n    var onsuccess = this.onsuccess,\n        // In case event listener has set this.onsuccess\n    onerror = this.onerror; // In case event listener has set this.onerror\n\n    this.onsuccess = this.onerror = null;\n    f2.apply(this, arguments);\n    if (onsuccess) this.onsuccess = this.onsuccess ? callBoth(onsuccess, this.onsuccess) : onsuccess;\n    if (onerror) this.onerror = this.onerror ? callBoth(onerror, this.onerror) : onerror;\n  };\n}\n\nfunction hookUpdatingChain(f1, f2) {\n  if (f1 === nop) return f2;\n  return function (modifications) {\n    var res = f1.apply(this, arguments);\n    extend(modifications, res); // If f1 returns new modifications, extend caller's modifications with the result before calling next in chain.\n\n    var onsuccess = this.onsuccess,\n        // In case event listener has set this.onsuccess\n    onerror = this.onerror; // In case event listener has set this.onerror\n\n    this.onsuccess = null;\n    this.onerror = null;\n    var res2 = f2.apply(this, arguments);\n    if (onsuccess) this.onsuccess = this.onsuccess ? callBoth(onsuccess, this.onsuccess) : onsuccess;\n    if (onerror) this.onerror = this.onerror ? callBoth(onerror, this.onerror) : onerror;\n    return res === undefined ? res2 === undefined ? undefined : res2 : extend(res, res2);\n  };\n}\n\nfunction reverseStoppableEventChain(f1, f2) {\n  if (f1 === nop) return f2;\n  return function () {\n    if (f2.apply(this, arguments) === false) return false;\n    return f1.apply(this, arguments);\n  };\n}\n\nfunction promisableChain(f1, f2) {\n  if (f1 === nop) return f2;\n  return function () {\n    var res = f1.apply(this, arguments);\n\n    if (res && typeof res.then === 'function') {\n      var thiz = this,\n          i = arguments.length,\n          args = new Array(i);\n\n      while (i--) {\n        args[i] = arguments[i];\n      }\n\n      return res.then(function () {\n        return f2.apply(thiz, args);\n      });\n    }\n\n    return f2.apply(this, arguments);\n  };\n}\n/*\n * Copyright (c) 2014-2017 David Fahlander\n * Apache License Version 2.0, January 2004, http://www.apache.org/licenses/LICENSE-2.0\n */\n//\n// Promise and Zone (PSD) for Dexie library\n//\n// I started out writing this Promise class by copying promise-light (https://github.com/taylorhakes/promise-light) by\n// https://github.com/taylorhakes - an A+ and ECMASCRIPT 6 compliant Promise implementation.\n//\n// In previous versions this was fixed by not calling setTimeout when knowing that the resolve() or reject() came from another\n// tick. In Dexie v1.4.0, I've rewritten the Promise class entirely. Just some fragments of promise-light is left. I use\n// another strategy now that simplifies everything a lot: to always execute callbacks in a new micro-task, but have an own micro-task\n// engine that is indexedDB compliant across all browsers.\n// Promise class has also been optimized a lot with inspiration from bluebird - to avoid closures as much as possible.\n// Also with inspiration from bluebird, asyncronic stacks in debug mode.\n//\n// Specific non-standard features of this Promise class:\n// * Custom zone support (a.k.a. PSD) with ability to keep zones also when using native promises as well as\n//   native async / await.\n// * Promise.follow() method built upon the custom zone engine, that allows user to track all promises created from current stack frame\n//   and below + all promises that those promises creates or awaits.\n// * Detect any unhandled promise in a PSD-scope (PSD.onunhandled). \n//\n// David Fahlander, https://github.com/dfahlander\n//\n// Just a pointer that only this module knows about.\n// Used in Promise constructor to emulate a private constructor.\n\n\nvar INTERNAL = {}; // Async stacks (long stacks) must not grow infinitely.\n\nvar LONG_STACKS_CLIP_LIMIT = 100;\nvar MAX_LONG_STACKS = 20;\nvar ZONE_ECHO_LIMIT = 7;\n\nvar nativePromiseInstanceAndProto = function () {\n  try {\n    // Be able to patch native async functions\n    return new Function(\"let F=async ()=>{},p=F();return [p,Object.getPrototypeOf(p),Promise.resolve(),F.constructor];\")();\n  } catch (e) {\n    var P = _global.Promise;\n    return P ? [P.resolve(), P.prototype, P.resolve()] : [];\n  }\n}();\n\nvar resolvedNativePromise = nativePromiseInstanceAndProto[0];\nvar nativePromiseProto = nativePromiseInstanceAndProto[1];\nvar resolvedGlobalPromise = nativePromiseInstanceAndProto[2];\nvar nativePromiseThen = nativePromiseProto && nativePromiseProto.then;\nvar NativePromise = resolvedNativePromise && resolvedNativePromise.constructor;\nvar AsyncFunction = nativePromiseInstanceAndProto[3];\nvar patchGlobalPromise = !!resolvedGlobalPromise;\nvar stack_being_generated = false;\n/* The default function used only for the very first promise in a promise chain.\n   As soon as then promise is resolved or rejected, all next tasks will be executed in micro ticks\n   emulated in this module. For indexedDB compatibility, this means that every method needs to\n   execute at least one promise before doing an indexedDB operation. Dexie will always call\n   db.ready().then() for every operation to make sure the indexedDB event is started in an\n   indexedDB-compatible emulated micro task loop.\n*/\n\nvar schedulePhysicalTick = resolvedGlobalPromise ? function () {\n  resolvedGlobalPromise.then(physicalTick);\n} : _global.setImmediate ? // setImmediate supported. Those modern platforms also supports Function.bind().\nsetImmediate.bind(null, physicalTick) : _global.MutationObserver ? // MutationObserver supported\nfunction () {\n  var hiddenDiv = document.createElement(\"div\");\n  new MutationObserver(function () {\n    physicalTick();\n    hiddenDiv = null;\n  }).observe(hiddenDiv, {\n    attributes: true\n  });\n  hiddenDiv.setAttribute('i', '1');\n} : // No support for setImmediate or MutationObserver. No worry, setTimeout is only called\n// once time. Every tick that follows will be our emulated micro tick.\n// Could have uses setTimeout.bind(null, 0, physicalTick) if it wasnt for that FF13 and below has a bug \nfunction () {\n  setTimeout(physicalTick, 0);\n}; // Configurable through Promise.scheduler.\n// Don't export because it would be unsafe to let unknown\n// code call it unless they do try..catch within their callback.\n// This function can be retrieved through getter of Promise.scheduler though,\n// but users must not do Promise.scheduler = myFuncThatThrowsException\n\nvar asap$1 = function asap$1(callback, args) {\n  microtickQueue.push([callback, args]);\n\n  if (needsNewPhysicalTick) {\n    schedulePhysicalTick();\n    needsNewPhysicalTick = false;\n  }\n};\n\nvar isOutsideMicroTick = true;\nvar needsNewPhysicalTick = true;\nvar unhandledErrors = [];\nvar rejectingErrors = [];\nvar currentFulfiller = null;\nvar rejectionMapper = mirror; // Remove in next major when removing error mapping of DOMErrors and DOMExceptions\n\nvar globalPSD = {\n  id: 'global',\n  global: true,\n  ref: 0,\n  unhandleds: [],\n  onunhandled: globalError,\n  pgp: false,\n  env: {},\n  finalize: function finalize() {\n    this.unhandleds.forEach(function (uh) {\n      try {\n        globalError(uh[0], uh[1]);\n      } catch (e) {}\n    });\n  }\n};\nvar PSD = globalPSD;\nvar microtickQueue = []; // Callbacks to call in this or next physical tick.\n\nvar numScheduledCalls = 0; // Number of listener-calls left to do in this physical tick.\n\nvar tickFinalizers = []; // Finalizers to call when there are no more async calls scheduled within current physical tick.\n\nfunction Promise(fn) {\n  if (_typeof(this) !== 'object') throw new TypeError('Promises must be constructed via new');\n  this._listeners = [];\n  this.onuncatched = nop; // Deprecate in next major. Not needed. Better to use global error handler.\n  // A library may set `promise._lib = true;` after promise is created to make resolve() or reject()\n  // execute the microtask engine implicitely within the call to resolve() or reject().\n  // To remain A+ compliant, a library must only set `_lib=true` if it can guarantee that the stack\n  // only contains library code when calling resolve() or reject().\n  // RULE OF THUMB: ONLY set _lib = true for promises explicitely resolving/rejecting directly from\n  // global scope (event handler, timer etc)!\n\n  this._lib = false; // Current async scope\n\n  var psd = this._PSD = PSD;\n\n  if (debug) {\n    this._stackHolder = getErrorWithStack();\n    this._prev = null;\n    this._numPrev = 0; // Number of previous promises (for long stacks)\n  }\n\n  if (typeof fn !== 'function') {\n    if (fn !== INTERNAL) throw new TypeError('Not a function'); // Private constructor (INTERNAL, state, value).\n    // Used internally by Promise.resolve() and Promise.reject().\n\n    this._state = arguments[1];\n    this._value = arguments[2];\n    if (this._state === false) handleRejection(this, this._value); // Map error, set stack and addPossiblyUnhandledError().\n\n    return;\n  }\n\n  this._state = null; // null (=pending), false (=rejected) or true (=resolved)\n\n  this._value = null; // error or result\n\n  ++psd.ref; // Refcounting current scope\n\n  executePromiseTask(this, fn);\n} // Prepare a property descriptor to put onto Promise.prototype.then\n\n\nvar thenProp = {\n  get: function get() {\n    var psd = PSD,\n        microTaskId = totalEchoes;\n\n    function then(onFulfilled, onRejected) {\n      var _this = this;\n\n      var possibleAwait = !psd.global && (psd !== PSD || microTaskId !== totalEchoes);\n      if (possibleAwait) decrementExpectedAwaits();\n      var rv = new Promise(function (resolve, reject) {\n        propagateToListener(_this, new Listener(nativeAwaitCompatibleWrap(onFulfilled, psd, possibleAwait), nativeAwaitCompatibleWrap(onRejected, psd, possibleAwait), resolve, reject, psd));\n      });\n      debug && linkToPreviousPromise(rv, this);\n      return rv;\n    }\n\n    then.prototype = INTERNAL; // For idempotense, see setter below.\n\n    return then;\n  },\n  // Be idempotent and allow another framework (such as zone.js or another instance of a Dexie.Promise module) to replace Promise.prototype.then\n  // and when that framework wants to restore the original property, we must identify that and restore the original property descriptor.\n  set: function set(value) {\n    setProp(this, 'then', value && value.prototype === INTERNAL ? thenProp : // Restore to original property descriptor.\n    {\n      get: function get() {\n        return value; // Getter returning provided value (behaves like value is just changed)\n      },\n      set: thenProp.set // Keep a setter that is prepared to restore original.\n\n    });\n  }\n};\nprops(Promise.prototype, {\n  then: thenProp,\n  _then: function _then(onFulfilled, onRejected) {\n    // A little tinier version of then() that don't have to create a resulting promise.\n    propagateToListener(this, new Listener(null, null, onFulfilled, onRejected, PSD));\n  },\n  \"catch\": function _catch(onRejected) {\n    if (arguments.length === 1) return this.then(null, onRejected); // First argument is the Error type to catch\n\n    var type = arguments[0],\n        handler = arguments[1];\n    return typeof type === 'function' ? this.then(null, function (err) {\n      // Catching errors by its constructor type (similar to java / c++ / c#)\n      // Sample: promise.catch(TypeError, function (e) { ... });\n      return err instanceof type ? handler(err) : PromiseReject(err);\n    }) : this.then(null, function (err) {\n      // Catching errors by the error.name property. Makes sense for indexedDB where error type\n      // is always DOMError but where e.name tells the actual error type.\n      // Sample: promise.catch('ConstraintError', function (e) { ... });\n      return err && err.name === type ? handler(err) : PromiseReject(err);\n    });\n  },\n  \"finally\": function _finally(onFinally) {\n    return this.then(function (value) {\n      onFinally();\n      return value;\n    }, function (err) {\n      onFinally();\n      return PromiseReject(err);\n    });\n  },\n  stack: {\n    get: function get() {\n      if (this._stack) return this._stack;\n\n      try {\n        stack_being_generated = true;\n        var stacks = getStack(this, [], MAX_LONG_STACKS);\n        var stack = stacks.join(\"\\nFrom previous: \");\n        if (this._state !== null) this._stack = stack; // Stack may be updated on reject.\n\n        return stack;\n      } finally {\n        stack_being_generated = false;\n      }\n    }\n  },\n  timeout: function timeout(ms, msg) {\n    var _this = this;\n\n    return ms < Infinity ? new Promise(function (resolve, reject) {\n      var handle = setTimeout(function () {\n        return reject(new exceptions.Timeout(msg));\n      }, ms);\n\n      _this.then(resolve, reject)[\"finally\"](clearTimeout.bind(null, handle));\n    }) : this;\n  }\n});\nif (typeof Symbol !== 'undefined' && Symbol.toStringTag) setProp(Promise.prototype, Symbol.toStringTag, 'Promise'); // Now that Promise.prototype is defined, we have all it takes to set globalPSD.env.\n// Environment globals snapshotted on leaving global zone\n\nglobalPSD.env = snapShot();\n\nfunction Listener(onFulfilled, onRejected, resolve, reject, zone) {\n  this.onFulfilled = typeof onFulfilled === 'function' ? onFulfilled : null;\n  this.onRejected = typeof onRejected === 'function' ? onRejected : null;\n  this.resolve = resolve;\n  this.reject = reject;\n  this.psd = zone;\n} // Promise Static Properties\n\n\nprops(Promise, {\n  all: function all() {\n    var values = getArrayOf.apply(null, arguments) // Supports iterables, implicit arguments and array-like.\n    .map(onPossibleParallellAsync); // Handle parallell async/awaits \n\n    return new Promise(function (resolve, reject) {\n      if (values.length === 0) resolve([]);\n      var remaining = values.length;\n      values.forEach(function (a, i) {\n        return Promise.resolve(a).then(function (x) {\n          values[i] = x;\n          if (! --remaining) resolve(values);\n        }, reject);\n      });\n    });\n  },\n  resolve: function resolve(value) {\n    if (value instanceof Promise) return value;\n    if (value && typeof value.then === 'function') return new Promise(function (resolve, reject) {\n      value.then(resolve, reject);\n    });\n    var rv = new Promise(INTERNAL, true, value);\n    linkToPreviousPromise(rv, currentFulfiller);\n    return rv;\n  },\n  reject: PromiseReject,\n  race: function race() {\n    var values = getArrayOf.apply(null, arguments).map(onPossibleParallellAsync);\n    return new Promise(function (resolve, reject) {\n      values.map(function (value) {\n        return Promise.resolve(value).then(resolve, reject);\n      });\n    });\n  },\n  PSD: {\n    get: function get() {\n      return PSD;\n    },\n    set: function set(value) {\n      return PSD = value;\n    }\n  },\n  //totalEchoes: {get: ()=>totalEchoes},\n  //task: {get: ()=>task},\n  newPSD: newScope,\n  usePSD: usePSD,\n  scheduler: {\n    get: function get() {\n      return asap$1;\n    },\n    set: function set(value) {\n      asap$1 = value;\n    }\n  },\n  rejectionMapper: {\n    get: function get() {\n      return rejectionMapper;\n    },\n    set: function set(value) {\n      rejectionMapper = value;\n    } // Map reject failures\n\n  },\n  follow: function follow(fn, zoneProps) {\n    return new Promise(function (resolve, reject) {\n      return newScope(function (resolve, reject) {\n        var psd = PSD;\n        psd.unhandleds = []; // For unhandled standard- or 3rd party Promises. Checked at psd.finalize()\n\n        psd.onunhandled = reject; // Triggered directly on unhandled promises of this library.\n\n        psd.finalize = callBoth(function () {\n          var _this = this; // Unhandled standard or 3rd part promises are put in PSD.unhandleds and\n          // examined upon scope completion while unhandled rejections in this Promise\n          // will trigger directly through psd.onunhandled\n\n\n          run_at_end_of_this_or_next_physical_tick(function () {\n            _this.unhandleds.length === 0 ? resolve() : reject(_this.unhandleds[0]);\n          });\n        }, psd.finalize);\n        fn();\n      }, zoneProps, resolve, reject);\n    });\n  }\n});\n/**\n* Take a potentially misbehaving resolver function and make sure\n* onFulfilled and onRejected are only called once.\n*\n* Makes no guarantees about asynchrony.\n*/\n\nfunction executePromiseTask(promise, fn) {\n  // Promise Resolution Procedure:\n  // https://github.com/promises-aplus/promises-spec#the-promise-resolution-procedure\n  try {\n    fn(function (value) {\n      if (promise._state !== null) return; // Already settled\n\n      if (value === promise) throw new TypeError('A promise cannot be resolved with itself.');\n      var shouldExecuteTick = promise._lib && beginMicroTickScope();\n\n      if (value && typeof value.then === 'function') {\n        executePromiseTask(promise, function (resolve, reject) {\n          value instanceof Promise ? value._then(resolve, reject) : value.then(resolve, reject);\n        });\n      } else {\n        promise._state = true;\n        promise._value = value;\n        propagateAllListeners(promise);\n      }\n\n      if (shouldExecuteTick) endMicroTickScope();\n    }, handleRejection.bind(null, promise)); // If Function.bind is not supported. Exception is handled in catch below\n  } catch (ex) {\n    handleRejection(promise, ex);\n  }\n}\n\nfunction handleRejection(promise, reason) {\n  rejectingErrors.push(reason);\n  if (promise._state !== null) return;\n  var shouldExecuteTick = promise._lib && beginMicroTickScope();\n  reason = rejectionMapper(reason);\n  promise._state = false;\n  promise._value = reason;\n  debug && reason !== null && _typeof(reason) === 'object' && !reason._promise && tryCatch(function () {\n    var origProp = getPropertyDescriptor(reason, \"stack\");\n    reason._promise = promise;\n    setProp(reason, \"stack\", {\n      get: function get() {\n        return stack_being_generated ? origProp && (origProp.get ? origProp.get.apply(reason) : origProp.value) : promise.stack;\n      }\n    });\n  }); // Add the failure to a list of possibly uncaught errors\n\n  addPossiblyUnhandledError(promise);\n  propagateAllListeners(promise);\n  if (shouldExecuteTick) endMicroTickScope();\n}\n\nfunction propagateAllListeners(promise) {\n  //debug && linkToPreviousPromise(promise);\n  var listeners = promise._listeners;\n  promise._listeners = [];\n\n  for (var i = 0, len = listeners.length; i < len; ++i) {\n    propagateToListener(promise, listeners[i]);\n  }\n\n  var psd = promise._PSD;\n  --psd.ref || psd.finalize(); // if psd.ref reaches zero, call psd.finalize();\n\n  if (numScheduledCalls === 0) {\n    // If numScheduledCalls is 0, it means that our stack is not in a callback of a scheduled call,\n    // and that no deferreds where listening to this rejection or success.\n    // Since there is a risk that our stack can contain application code that may\n    // do stuff after this code is finished that may generate new calls, we cannot\n    // call finalizers here.\n    ++numScheduledCalls;\n    asap$1(function () {\n      if (--numScheduledCalls === 0) finalizePhysicalTick(); // Will detect unhandled errors\n    }, []);\n  }\n}\n\nfunction propagateToListener(promise, listener) {\n  if (promise._state === null) {\n    promise._listeners.push(listener);\n\n    return;\n  }\n\n  var cb = promise._state ? listener.onFulfilled : listener.onRejected;\n\n  if (cb === null) {\n    // This Listener doesnt have a listener for the event being triggered (onFulfilled or onReject) so lets forward the event to any eventual listeners on the Promise instance returned by then() or catch()\n    return (promise._state ? listener.resolve : listener.reject)(promise._value);\n  }\n\n  ++listener.psd.ref;\n  ++numScheduledCalls;\n  asap$1(callListener, [cb, promise, listener]);\n}\n\nfunction callListener(cb, promise, listener) {\n  try {\n    // Set static variable currentFulfiller to the promise that is being fullfilled,\n    // so that we connect the chain of promises (for long stacks support)\n    currentFulfiller = promise; // Call callback and resolve our listener with it's return value.\n\n    var ret,\n        value = promise._value;\n\n    if (promise._state) {\n      // cb is onResolved\n      ret = cb(value);\n    } else {\n      // cb is onRejected\n      if (rejectingErrors.length) rejectingErrors = [];\n      ret = cb(value);\n      if (rejectingErrors.indexOf(value) === -1) markErrorAsHandled(promise); // Callback didnt do Promise.reject(err) nor reject(err) onto another promise.\n    }\n\n    listener.resolve(ret);\n  } catch (e) {\n    // Exception thrown in callback. Reject our listener.\n    listener.reject(e);\n  } finally {\n    // Restore env and currentFulfiller.\n    currentFulfiller = null;\n    if (--numScheduledCalls === 0) finalizePhysicalTick();\n    --listener.psd.ref || listener.psd.finalize();\n  }\n}\n\nfunction getStack(promise, stacks, limit) {\n  if (stacks.length === limit) return stacks;\n  var stack = \"\";\n\n  if (promise._state === false) {\n    var failure = promise._value,\n        errorName,\n        message;\n\n    if (failure != null) {\n      errorName = failure.name || \"Error\";\n      message = failure.message || failure;\n      stack = prettyStack(failure, 0);\n    } else {\n      errorName = failure; // If error is undefined or null, show that.\n\n      message = \"\";\n    }\n\n    stacks.push(errorName + (message ? \": \" + message : \"\") + stack);\n  }\n\n  if (debug) {\n    stack = prettyStack(promise._stackHolder, 2);\n    if (stack && stacks.indexOf(stack) === -1) stacks.push(stack);\n    if (promise._prev) getStack(promise._prev, stacks, limit);\n  }\n\n  return stacks;\n}\n\nfunction linkToPreviousPromise(promise, prev) {\n  // Support long stacks by linking to previous completed promise.\n  var numPrev = prev ? prev._numPrev + 1 : 0;\n\n  if (numPrev < LONG_STACKS_CLIP_LIMIT) {\n    promise._prev = prev;\n    promise._numPrev = numPrev;\n  }\n}\n/* The callback to schedule with setImmediate() or setTimeout().\n   It runs a virtual microtick and executes any callback registered in microtickQueue.\n */\n\n\nfunction physicalTick() {\n  beginMicroTickScope() && endMicroTickScope();\n}\n\nfunction beginMicroTickScope() {\n  var wasRootExec = isOutsideMicroTick;\n  isOutsideMicroTick = false;\n  needsNewPhysicalTick = false;\n  return wasRootExec;\n}\n/* Executes micro-ticks without doing try..catch.\n   This can be possible because we only use this internally and\n   the registered functions are exception-safe (they do try..catch\n   internally before calling any external method). If registering\n   functions in the microtickQueue that are not exception-safe, this\n   would destroy the framework and make it instable. So we don't export\n   our asap method.\n*/\n\n\nfunction endMicroTickScope() {\n  var callbacks, i, l;\n\n  do {\n    while (microtickQueue.length > 0) {\n      callbacks = microtickQueue;\n      microtickQueue = [];\n      l = callbacks.length;\n\n      for (i = 0; i < l; ++i) {\n        var item = callbacks[i];\n        item[0].apply(null, item[1]);\n      }\n    }\n  } while (microtickQueue.length > 0);\n\n  isOutsideMicroTick = true;\n  needsNewPhysicalTick = true;\n}\n\nfunction finalizePhysicalTick() {\n  var unhandledErrs = unhandledErrors;\n  unhandledErrors = [];\n  unhandledErrs.forEach(function (p) {\n    p._PSD.onunhandled.call(null, p._value, p);\n  });\n  var finalizers = tickFinalizers.slice(0); // Clone first because finalizer may remove itself from list.\n\n  var i = finalizers.length;\n\n  while (i) {\n    finalizers[--i]();\n  }\n}\n\nfunction run_at_end_of_this_or_next_physical_tick(fn) {\n  function finalizer() {\n    fn();\n    tickFinalizers.splice(tickFinalizers.indexOf(finalizer), 1);\n  }\n\n  tickFinalizers.push(finalizer);\n  ++numScheduledCalls;\n  asap$1(function () {\n    if (--numScheduledCalls === 0) finalizePhysicalTick();\n  }, []);\n}\n\nfunction addPossiblyUnhandledError(promise) {\n  // Only add to unhandledErrors if not already there. The first one to add to this list\n  // will be upon the first rejection so that the root cause (first promise in the\n  // rejection chain) is the one listed.\n  if (!unhandledErrors.some(function (p) {\n    return p._value === promise._value;\n  })) unhandledErrors.push(promise);\n}\n\nfunction markErrorAsHandled(promise) {\n  // Called when a reject handled is actually being called.\n  // Search in unhandledErrors for any promise whos _value is this promise_value (list\n  // contains only rejected promises, and only one item per error)\n  var i = unhandledErrors.length;\n\n  while (i) {\n    if (unhandledErrors[--i]._value === promise._value) {\n      // Found a promise that failed with this same error object pointer,\n      // Remove that since there is a listener that actually takes care of it.\n      unhandledErrors.splice(i, 1);\n      return;\n    }\n  }\n}\n\nfunction PromiseReject(reason) {\n  return new Promise(INTERNAL, false, reason);\n}\n\nfunction wrap(fn, errorCatcher) {\n  var psd = PSD;\n  return function () {\n    var wasRootExec = beginMicroTickScope(),\n        outerScope = PSD;\n\n    try {\n      switchToZone(psd, true);\n      return fn.apply(this, arguments);\n    } catch (e) {\n      errorCatcher && errorCatcher(e);\n    } finally {\n      switchToZone(outerScope, false);\n      if (wasRootExec) endMicroTickScope();\n    }\n  };\n} //\n// variables used for native await support\n//\n\n\nvar task = {\n  awaits: 0,\n  echoes: 0,\n  id: 0\n}; // The ongoing macro-task when using zone-echoing.\n\nvar taskCounter = 0; // ID counter for macro tasks.\n\nvar zoneStack = []; // Stack of left zones to restore asynchronically.\n\nvar zoneEchoes = 0; // zoneEchoes is a must in order to persist zones between native await expressions.\n\nvar totalEchoes = 0; // ID counter for micro-tasks. Used to detect possible native await in our Promise.prototype.then.\n\nvar zone_id_counter = 0;\n\nfunction newScope(fn, props$$1, a1, a2) {\n  var parent = PSD,\n      psd = Object.create(parent);\n  psd.parent = parent;\n  psd.ref = 0;\n  psd.global = false;\n  psd.id = ++zone_id_counter; // Prepare for promise patching (done in usePSD):\n\n  var globalEnv = globalPSD.env;\n  psd.env = patchGlobalPromise ? {\n    Promise: Promise,\n    PromiseProp: {\n      value: Promise,\n      configurable: true,\n      writable: true\n    },\n    all: Promise.all,\n    race: Promise.race,\n    resolve: Promise.resolve,\n    reject: Promise.reject,\n    nthen: getPatchedPromiseThen(globalEnv.nthen, psd),\n    gthen: getPatchedPromiseThen(globalEnv.gthen, psd) // global then\n\n  } : {};\n  if (props$$1) extend(psd, props$$1); // unhandleds and onunhandled should not be specifically set here.\n  // Leave them on parent prototype.\n  // unhandleds.push(err) will push to parent's prototype\n  // onunhandled() will call parents onunhandled (with this scope's this-pointer though!)\n\n  ++parent.ref;\n\n  psd.finalize = function () {\n    --this.parent.ref || this.parent.finalize();\n  };\n\n  var rv = usePSD(psd, fn, a1, a2);\n  if (psd.ref === 0) psd.finalize();\n  return rv;\n} // Function to call if scopeFunc returns NativePromise\n// Also for each NativePromise in the arguments to Promise.all()\n\n\nfunction incrementExpectedAwaits() {\n  if (!task.id) task.id = ++taskCounter;\n  ++task.awaits;\n  task.echoes += ZONE_ECHO_LIMIT;\n  return task.id;\n} // Function to call when 'then' calls back on a native promise where onAwaitExpected() had been called.\n// Also call this when a native await calls then method on a promise. In that case, don't supply\n// sourceTaskId because we already know it refers to current task.\n\n\nfunction decrementExpectedAwaits(sourceTaskId) {\n  if (!task.awaits || sourceTaskId && sourceTaskId !== task.id) return;\n  if (--task.awaits === 0) task.id = 0;\n  task.echoes = task.awaits * ZONE_ECHO_LIMIT; // Will reset echoes to 0 if awaits is 0.\n} // Call from Promise.all() and Promise.race()\n\n\nfunction onPossibleParallellAsync(possiblePromise) {\n  if (task.echoes && possiblePromise && possiblePromise.constructor === NativePromise) {\n    incrementExpectedAwaits();\n    return possiblePromise.then(function (x) {\n      decrementExpectedAwaits();\n      return x;\n    }, function (e) {\n      decrementExpectedAwaits();\n      return rejection(e);\n    });\n  }\n\n  return possiblePromise;\n}\n\nfunction zoneEnterEcho(targetZone) {\n  ++totalEchoes;\n\n  if (!task.echoes || --task.echoes === 0) {\n    task.echoes = task.id = 0; // Cancel zone echoing.\n  }\n\n  zoneStack.push(PSD);\n  switchToZone(targetZone, true);\n}\n\nfunction zoneLeaveEcho() {\n  var zone = zoneStack[zoneStack.length - 1];\n  zoneStack.pop();\n  switchToZone(zone, false);\n}\n\nfunction switchToZone(targetZone, bEnteringZone) {\n  var currentZone = PSD;\n\n  if (bEnteringZone ? task.echoes && (!zoneEchoes++ || targetZone !== PSD) : zoneEchoes && (! --zoneEchoes || targetZone !== PSD)) {\n    // Enter or leave zone asynchronically as well, so that tasks initiated during current tick\n    // will be surrounded by the zone when they are invoked.\n    enqueueNativeMicroTask(bEnteringZone ? zoneEnterEcho.bind(null, targetZone) : zoneLeaveEcho);\n  }\n\n  if (targetZone === PSD) return;\n  PSD = targetZone; // The actual zone switch occurs at this line.\n  // Snapshot on every leave from global zone.\n\n  if (currentZone === globalPSD) globalPSD.env = snapShot();\n\n  if (patchGlobalPromise) {\n    // Let's patch the global and native Promises (may be same or may be different)\n    var GlobalPromise = globalPSD.env.Promise; // Swich environments (may be PSD-zone or the global zone. Both apply.)\n\n    var targetEnv = targetZone.env; // Change Promise.prototype.then for native and global Promise (they MAY differ on polyfilled environments, but both can be accessed)\n    // Must be done on each zone change because the patched method contains targetZone in its closure.\n\n    nativePromiseProto.then = targetEnv.nthen;\n    GlobalPromise.prototype.then = targetEnv.gthen;\n\n    if (currentZone.global || targetZone.global) {\n      // Leaving or entering global zone. It's time to patch / restore global Promise.\n      // Set this Promise to window.Promise so that transiled async functions will work on Firefox, Safari and IE, as well as with Zonejs and angular.\n      Object.defineProperty(_global, 'Promise', targetEnv.PromiseProp); // Support Promise.all() etc to work indexedDB-safe also when people are including es6-promise as a module (they might\n      // not be accessing global.Promise but a local reference to it)\n\n      GlobalPromise.all = targetEnv.all;\n      GlobalPromise.race = targetEnv.race;\n      GlobalPromise.resolve = targetEnv.resolve;\n      GlobalPromise.reject = targetEnv.reject;\n    }\n  }\n}\n\nfunction snapShot() {\n  var GlobalPromise = _global.Promise;\n  return patchGlobalPromise ? {\n    Promise: GlobalPromise,\n    PromiseProp: Object.getOwnPropertyDescriptor(_global, \"Promise\"),\n    all: GlobalPromise.all,\n    race: GlobalPromise.race,\n    resolve: GlobalPromise.resolve,\n    reject: GlobalPromise.reject,\n    nthen: nativePromiseProto.then,\n    gthen: GlobalPromise.prototype.then\n  } : {};\n}\n\nfunction usePSD(psd, fn, a1, a2, a3) {\n  var outerScope = PSD;\n\n  try {\n    switchToZone(psd, true);\n    return fn(a1, a2, a3);\n  } finally {\n    switchToZone(outerScope, false);\n  }\n}\n\nfunction enqueueNativeMicroTask(job) {\n  //\n  // Precondition: nativePromiseThen !== undefined\n  //\n  nativePromiseThen.call(resolvedNativePromise, job);\n}\n\nfunction nativeAwaitCompatibleWrap(fn, zone, possibleAwait) {\n  return typeof fn !== 'function' ? fn : function () {\n    var outerZone = PSD;\n    if (possibleAwait) incrementExpectedAwaits();\n    switchToZone(zone, true);\n\n    try {\n      return fn.apply(this, arguments);\n    } finally {\n      switchToZone(outerZone, false);\n    }\n  };\n}\n\nfunction getPatchedPromiseThen(origThen, zone) {\n  return function (onResolved, onRejected) {\n    return origThen.call(this, nativeAwaitCompatibleWrap(onResolved, zone, false), nativeAwaitCompatibleWrap(onRejected, zone, false));\n  };\n}\n\nvar UNHANDLEDREJECTION = \"unhandledrejection\";\n\nfunction globalError(err, promise) {\n  var rv;\n\n  try {\n    rv = promise.onuncatched(err);\n  } catch (e) {}\n\n  if (rv !== false) try {\n    var event,\n        eventData = {\n      promise: promise,\n      reason: err\n    };\n\n    if (_global.document && document.createEvent) {\n      event = document.createEvent('Event');\n      event.initEvent(UNHANDLEDREJECTION, true, true);\n      extend(event, eventData);\n    } else if (_global.CustomEvent) {\n      event = new CustomEvent(UNHANDLEDREJECTION, {\n        detail: eventData\n      });\n      extend(event, eventData);\n    }\n\n    if (event && _global.dispatchEvent) {\n      dispatchEvent(event);\n      if (!_global.PromiseRejectionEvent && _global.onunhandledrejection) // No native support for PromiseRejectionEvent but user has set window.onunhandledrejection. Manually call it.\n        try {\n          _global.onunhandledrejection(event);\n        } catch (_) {}\n    }\n\n    if (!event.defaultPrevented) {\n      console.warn(\"Unhandled rejection: \" + (err.stack || err));\n    }\n  } catch (e) {}\n}\n\nvar rejection = Promise.reject;\n\nfunction Events(ctx) {\n  var evs = {};\n\n  var rv = function rv(eventName, subscriber) {\n    if (subscriber) {\n      // Subscribe. If additional arguments than just the subscriber was provided, forward them as well.\n      var i = arguments.length,\n          args = new Array(i - 1);\n\n      while (--i) {\n        args[i - 1] = arguments[i];\n      }\n\n      evs[eventName].subscribe.apply(null, args);\n      return ctx;\n    } else if (typeof eventName === 'string') {\n      // Return interface allowing to fire or unsubscribe from event\n      return evs[eventName];\n    }\n  };\n\n  rv.addEventType = add;\n\n  for (var i = 1, l = arguments.length; i < l; ++i) {\n    add(arguments[i]);\n  }\n\n  return rv;\n\n  function add(eventName, chainFunction, defaultFunction) {\n    if (_typeof(eventName) === 'object') return addConfiguredEvents(eventName);\n    if (!chainFunction) chainFunction = reverseStoppableEventChain;\n    if (!defaultFunction) defaultFunction = nop;\n    var context = {\n      subscribers: [],\n      fire: defaultFunction,\n      subscribe: function subscribe(cb) {\n        if (context.subscribers.indexOf(cb) === -1) {\n          context.subscribers.push(cb);\n          context.fire = chainFunction(context.fire, cb);\n        }\n      },\n      unsubscribe: function unsubscribe(cb) {\n        context.subscribers = context.subscribers.filter(function (fn) {\n          return fn !== cb;\n        });\n        context.fire = context.subscribers.reduce(chainFunction, defaultFunction);\n      }\n    };\n    evs[eventName] = rv[eventName] = context;\n    return context;\n  }\n\n  function addConfiguredEvents(cfg) {\n    // events(this, {reading: [functionChain, nop]});\n    keys(cfg).forEach(function (eventName) {\n      var args = cfg[eventName];\n\n      if (isArray(args)) {\n        add(eventName, cfg[eventName][0], cfg[eventName][1]);\n      } else if (args === 'asap') {\n        // Rather than approaching event subscription using a functional approach, we here do it in a for-loop where subscriber is executed in its own stack\n        // enabling that any exception that occur wont disturb the initiator and also not nescessary be catched and forgotten.\n        var context = add(eventName, mirror, function fire() {\n          // Optimazation-safe cloning of arguments into args.\n          var i = arguments.length,\n              args = new Array(i);\n\n          while (i--) {\n            args[i] = arguments[i];\n          } // All each subscriber:\n\n\n          context.subscribers.forEach(function (fn) {\n            asap(function fireEvent() {\n              fn.apply(null, args);\n            });\n          });\n        });\n      } else throw new exceptions.InvalidArgument(\"Invalid event config\");\n    });\n  }\n}\n/*\n * Dexie.js - a minimalistic wrapper for IndexedDB\n * ===============================================\n *\n * Copyright (c) 2014-2017 David Fahlander\n *\n * Version {version}, {date}\n *\n * http://dexie.org\n *\n * Apache License Version 2.0, January 2004, http://www.apache.org/licenses/LICENSE-2.0\n *\n */\n\n\nvar DEXIE_VERSION = '{version}';\nvar maxString = String.fromCharCode(65535);\n\nvar maxKey = function () {\n  try {\n    IDBKeyRange.only([[]]);\n    return [[]];\n  } catch (e) {\n    return maxString;\n  }\n}();\n\nvar minKey = -Infinity;\nvar INVALID_KEY_ARGUMENT = \"Invalid key provided. Keys must be of type string, number, Date or Array<string | number | Date>.\";\nvar STRING_EXPECTED = \"String expected.\";\nvar connections = [];\nvar isIEOrEdge = typeof navigator !== 'undefined' && /(MSIE|Trident|Edge)/.test(navigator.userAgent);\nvar hasIEDeleteObjectStoreBug = isIEOrEdge;\nvar hangsOnDeleteLargeKeyRange = isIEOrEdge;\n\nvar dexieStackFrameFilter = function dexieStackFrameFilter(frame) {\n  return !/(dexie\\.js|dexie\\.min\\.js)/.test(frame);\n};\n\nvar dbNamesDB; // Global database for backing Dexie.getDatabaseNames() on browser without indexedDB.webkitGetDatabaseNames() \n// Init debug\n\nsetDebug(debug, dexieStackFrameFilter);\n\nfunction Dexie(dbName, options) {\n  /// <param name=\"options\" type=\"Object\" optional=\"true\">Specify only if you wich to control which addons that should run on this instance</param>\n  var deps = Dexie.dependencies;\n  var opts = extend({\n    // Default Options\n    addons: Dexie.addons,\n    autoOpen: true,\n    indexedDB: deps.indexedDB,\n    IDBKeyRange: deps.IDBKeyRange // Backend IDBKeyRange api. Default to browser env.\n\n  }, options);\n  var addons = opts.addons,\n      autoOpen = opts.autoOpen,\n      indexedDB = opts.indexedDB,\n      IDBKeyRange = opts.IDBKeyRange;\n  var globalSchema = this._dbSchema = {};\n  var versions = [];\n  var dbStoreNames = [];\n  var allTables = {}; ///<var type=\"IDBDatabase\" />\n\n  var idbdb = null; // Instance of IDBDatabase\n\n  var dbOpenError = null;\n  var isBeingOpened = false;\n  var onReadyBeingFired = null;\n  var openComplete = false;\n  var READONLY = \"readonly\",\n      READWRITE = \"readwrite\";\n  var db = this;\n  var dbReadyResolve,\n      dbReadyPromise = new Promise(function (resolve) {\n    dbReadyResolve = resolve;\n  }),\n      cancelOpen,\n      openCanceller = new Promise(function (_, reject) {\n    cancelOpen = reject;\n  });\n  var autoSchema = true;\n  var hasNativeGetDatabaseNames = !!getNativeGetDatabaseNamesFn(indexedDB),\n      hasGetAll;\n\n  function init() {\n    // Default subscribers to \"versionchange\" and \"blocked\".\n    // Can be overridden by custom handlers. If custom handlers return false, these default\n    // behaviours will be prevented.\n    db.on(\"versionchange\", function (ev) {\n      // Default behavior for versionchange event is to close database connection.\n      // Caller can override this behavior by doing db.on(\"versionchange\", function(){ return false; });\n      // Let's not block the other window from making it's delete() or open() call.\n      // NOTE! This event is never fired in IE,Edge or Safari.\n      if (ev.newVersion > 0) console.warn(\"Another connection wants to upgrade database '\" + db.name + \"'. Closing db now to resume the upgrade.\");else console.warn(\"Another connection wants to delete database '\" + db.name + \"'. Closing db now to resume the delete request.\");\n      db.close(); // In many web applications, it would be recommended to force window.reload()\n      // when this event occurs. To do that, subscribe to the versionchange event\n      // and call window.location.reload(true) if ev.newVersion > 0 (not a deletion)\n      // The reason for this is that your current web app obviously has old schema code that needs\n      // to be updated. Another window got a newer version of the app and needs to upgrade DB but\n      // your window is blocking it unless we close it here.\n    });\n    db.on(\"blocked\", function (ev) {\n      if (!ev.newVersion || ev.newVersion < ev.oldVersion) console.warn(\"Dexie.delete('\" + db.name + \"') was blocked\");else console.warn(\"Upgrade '\" + db.name + \"' blocked by other connection holding version \" + ev.oldVersion / 10);\n    });\n  } //\n  //\n  //\n  // ------------------------- Versioning Framework---------------------------\n  //\n  //\n  //\n\n\n  this.version = function (versionNumber) {\n    /// <param name=\"versionNumber\" type=\"Number\"></param>\n    /// <returns type=\"Version\"></returns>\n    if (idbdb || isBeingOpened) throw new exceptions.Schema(\"Cannot add version when database is open\");\n    this.verno = Math.max(this.verno, versionNumber);\n    var versionInstance = versions.filter(function (v) {\n      return v._cfg.version === versionNumber;\n    })[0];\n    if (versionInstance) return versionInstance;\n    versionInstance = new Version(versionNumber);\n    versions.push(versionInstance);\n    versions.sort(lowerVersionFirst); // Disable autoschema mode, as at least one version is specified.\n\n    autoSchema = false;\n    return versionInstance;\n  };\n\n  function Version(versionNumber) {\n    this._cfg = {\n      version: versionNumber,\n      storesSource: null,\n      dbschema: {},\n      tables: {},\n      contentUpgrade: null\n    };\n    this.stores({}); // Derive earlier schemas by default.\n  }\n\n  extend(Version.prototype, {\n    stores: function stores(_stores) {\n      /// <summary>\n      ///   Defines the schema for a particular version\n      /// </summary>\n      /// <param name=\"stores\" type=\"Object\">\n      /// Example: <br/>\n      ///   {users: \"id++,first,last,&amp;username,*email\", <br/>\n      ///   passwords: \"id++,&amp;username\"}<br/>\n      /// <br/>\n      /// Syntax: {Table: \"[primaryKey][++],[&amp;][*]index1,[&amp;][*]index2,...\"}<br/><br/>\n      /// Special characters:<br/>\n      ///  \"&amp;\"  means unique key, <br/>\n      ///  \"*\"  means value is multiEntry, <br/>\n      ///  \"++\" means auto-increment and only applicable for primary key <br/>\n      /// </param>\n      this._cfg.storesSource = this._cfg.storesSource ? extend(this._cfg.storesSource, _stores) : _stores; // Derive stores from earlier versions if they are not explicitely specified as null or a new syntax.\n\n      var storesSpec = {};\n      versions.forEach(function (version) {\n        extend(storesSpec, version._cfg.storesSource);\n      });\n      var dbschema = this._cfg.dbschema = {};\n\n      this._parseStoresSpec(storesSpec, dbschema); // Update the latest schema to this version\n      // Update API\n\n\n      globalSchema = db._dbSchema = dbschema;\n      removeTablesApi([allTables, db, Transaction.prototype]); // Keep Transaction.prototype even though it should be depr.\n\n      setApiOnPlace([allTables, db, Transaction.prototype, this._cfg.tables], keys(dbschema), dbschema);\n      dbStoreNames = keys(dbschema);\n      return this;\n    },\n    upgrade: function upgrade(upgradeFunction) {\n      this._cfg.contentUpgrade = upgradeFunction;\n      return this;\n    },\n    _parseStoresSpec: function _parseStoresSpec(stores, outSchema) {\n      keys(stores).forEach(function (tableName) {\n        if (stores[tableName] !== null) {\n          var instanceTemplate = {};\n          var indexes = parseIndexSyntax(stores[tableName]);\n          var primKey = indexes.shift();\n          if (primKey.multi) throw new exceptions.Schema(\"Primary key cannot be multi-valued\");\n          if (primKey.keyPath) setByKeyPath(instanceTemplate, primKey.keyPath, primKey.auto ? 0 : primKey.keyPath);\n          indexes.forEach(function (idx) {\n            if (idx.auto) throw new exceptions.Schema(\"Only primary key can be marked as autoIncrement (++)\");\n            if (!idx.keyPath) throw new exceptions.Schema(\"Index must have a name and cannot be an empty string\");\n            setByKeyPath(instanceTemplate, idx.keyPath, idx.compound ? idx.keyPath.map(function () {\n              return \"\";\n            }) : \"\");\n          });\n          outSchema[tableName] = new TableSchema(tableName, primKey, indexes, instanceTemplate);\n        }\n      });\n    }\n  });\n\n  function runUpgraders(oldVersion, idbtrans, reject) {\n    var trans = db._createTransaction(READWRITE, dbStoreNames, globalSchema);\n\n    trans.create(idbtrans);\n\n    trans._completion[\"catch\"](reject);\n\n    var rejectTransaction = trans._reject.bind(trans);\n\n    newScope(function () {\n      PSD.trans = trans;\n\n      if (oldVersion === 0) {\n        // Create tables:\n        keys(globalSchema).forEach(function (tableName) {\n          createTable(idbtrans, tableName, globalSchema[tableName].primKey, globalSchema[tableName].indexes);\n        });\n        Promise.follow(function () {\n          return db.on.populate.fire(trans);\n        })[\"catch\"](rejectTransaction);\n      } else updateTablesAndIndexes(oldVersion, trans, idbtrans)[\"catch\"](rejectTransaction);\n    });\n  }\n\n  function updateTablesAndIndexes(oldVersion, trans, idbtrans) {\n    // Upgrade version to version, step-by-step from oldest to newest version.\n    // Each transaction object will contain the table set that was current in that version (but also not-yet-deleted tables from its previous version)\n    var queue = [];\n    var oldVersionStruct = versions.filter(function (version) {\n      return version._cfg.version === oldVersion;\n    })[0];\n    if (!oldVersionStruct) throw new exceptions.Upgrade(\"Dexie specification of currently installed DB version is missing\");\n    globalSchema = db._dbSchema = oldVersionStruct._cfg.dbschema;\n    var anyContentUpgraderHasRun = false;\n    var versToRun = versions.filter(function (v) {\n      return v._cfg.version > oldVersion;\n    });\n    versToRun.forEach(function (version) {\n      /// <param name=\"version\" type=\"Version\"></param>\n      queue.push(function () {\n        var oldSchema = globalSchema;\n        var newSchema = version._cfg.dbschema;\n        adjustToExistingIndexNames(oldSchema, idbtrans);\n        adjustToExistingIndexNames(newSchema, idbtrans);\n        globalSchema = db._dbSchema = newSchema;\n        var diff = getSchemaDiff(oldSchema, newSchema); // Add tables           \n\n        diff.add.forEach(function (tuple) {\n          createTable(idbtrans, tuple[0], tuple[1].primKey, tuple[1].indexes);\n        }); // Change tables\n\n        diff.change.forEach(function (change) {\n          if (change.recreate) {\n            throw new exceptions.Upgrade(\"Not yet support for changing primary key\");\n          } else {\n            var store = idbtrans.objectStore(change.name); // Add indexes\n\n            change.add.forEach(function (idx) {\n              addIndex(store, idx);\n            }); // Update indexes\n\n            change.change.forEach(function (idx) {\n              store.deleteIndex(idx.name);\n              addIndex(store, idx);\n            }); // Delete indexes\n\n            change.del.forEach(function (idxName) {\n              store.deleteIndex(idxName);\n            });\n          }\n        });\n\n        if (version._cfg.contentUpgrade) {\n          anyContentUpgraderHasRun = true;\n          return Promise.follow(function () {\n            version._cfg.contentUpgrade(trans);\n          });\n        }\n      });\n      queue.push(function (idbtrans) {\n        if (!anyContentUpgraderHasRun || !hasIEDeleteObjectStoreBug) {\n          var newSchema = version._cfg.dbschema; // Delete old tables\n\n          deleteRemovedTables(newSchema, idbtrans);\n        }\n      });\n    }); // Now, create a queue execution engine\n\n    function runQueue() {\n      return queue.length ? Promise.resolve(queue.shift()(trans.idbtrans)).then(runQueue) : Promise.resolve();\n    }\n\n    return runQueue().then(function () {\n      createMissingTables(globalSchema, idbtrans); // At last, make sure to create any missing tables. (Needed by addons that add stores to DB without specifying version)\n    });\n  }\n\n  function getSchemaDiff(oldSchema, newSchema) {\n    var diff = {\n      del: [],\n      add: [],\n      change: [] // Array of {name: tableName, recreate: newDefinition, del: delIndexNames, add: newIndexDefs, change: changedIndexDefs}\n\n    };\n\n    for (var table in oldSchema) {\n      if (!newSchema[table]) diff.del.push(table);\n    }\n\n    for (table in newSchema) {\n      var oldDef = oldSchema[table],\n          newDef = newSchema[table];\n\n      if (!oldDef) {\n        diff.add.push([table, newDef]);\n      } else {\n        var change = {\n          name: table,\n          def: newDef,\n          recreate: false,\n          del: [],\n          add: [],\n          change: []\n        };\n\n        if (oldDef.primKey.src !== newDef.primKey.src) {\n          // Primary key has changed. Remove and re-add table.\n          change.recreate = true;\n          diff.change.push(change);\n        } else {\n          // Same primary key. Just find out what differs:\n          var oldIndexes = oldDef.idxByName;\n          var newIndexes = newDef.idxByName;\n\n          for (var idxName in oldIndexes) {\n            if (!newIndexes[idxName]) change.del.push(idxName);\n          }\n\n          for (idxName in newIndexes) {\n            var oldIdx = oldIndexes[idxName],\n                newIdx = newIndexes[idxName];\n            if (!oldIdx) change.add.push(newIdx);else if (oldIdx.src !== newIdx.src) change.change.push(newIdx);\n          }\n\n          if (change.del.length > 0 || change.add.length > 0 || change.change.length > 0) {\n            diff.change.push(change);\n          }\n        }\n      }\n    }\n\n    return diff;\n  }\n\n  function createTable(idbtrans, tableName, primKey, indexes) {\n    /// <param name=\"idbtrans\" type=\"IDBTransaction\"></param>\n    var store = idbtrans.db.createObjectStore(tableName, primKey.keyPath ? {\n      keyPath: primKey.keyPath,\n      autoIncrement: primKey.auto\n    } : {\n      autoIncrement: primKey.auto\n    });\n    indexes.forEach(function (idx) {\n      addIndex(store, idx);\n    });\n    return store;\n  }\n\n  function createMissingTables(newSchema, idbtrans) {\n    keys(newSchema).forEach(function (tableName) {\n      if (!idbtrans.db.objectStoreNames.contains(tableName)) {\n        createTable(idbtrans, tableName, newSchema[tableName].primKey, newSchema[tableName].indexes);\n      }\n    });\n  }\n\n  function deleteRemovedTables(newSchema, idbtrans) {\n    for (var i = 0; i < idbtrans.db.objectStoreNames.length; ++i) {\n      var storeName = idbtrans.db.objectStoreNames[i];\n\n      if (newSchema[storeName] == null) {\n        idbtrans.db.deleteObjectStore(storeName);\n      }\n    }\n  }\n\n  function addIndex(store, idx) {\n    store.createIndex(idx.name, idx.keyPath, {\n      unique: idx.unique,\n      multiEntry: idx.multi\n    });\n  } //\n  //\n  //      Dexie Protected API\n  //\n  //\n\n\n  this._allTables = allTables;\n\n  this._createTransaction = function (mode, storeNames, dbschema, parentTransaction) {\n    return new Transaction(mode, storeNames, dbschema, parentTransaction);\n  };\n  /* Generate a temporary transaction when db operations are done outside a transaction scope.\n  */\n\n\n  function tempTransaction(mode, storeNames, fn) {\n    if (!openComplete && !PSD.letThrough) {\n      if (!isBeingOpened) {\n        if (!autoOpen) return rejection(new exceptions.DatabaseClosed());\n        db.open()[\"catch\"](nop); // Open in background. If if fails, it will be catched by the final promise anyway.\n      }\n\n      return dbReadyPromise.then(function () {\n        return tempTransaction(mode, storeNames, fn);\n      });\n    } else {\n      var trans = db._createTransaction(mode, storeNames, globalSchema);\n\n      try {\n        trans.create();\n      } catch (ex) {\n        return rejection(ex);\n      }\n\n      return trans._promise(mode, function (resolve, reject) {\n        return newScope(function () {\n          PSD.trans = trans;\n          return fn(resolve, reject, trans);\n        });\n      }).then(function (result) {\n        // Instead of resolving value directly, wait with resolving it until transaction has completed.\n        // Otherwise the data would not be in the DB if requesting it in the then() operation.\n        // Specifically, to ensure that the following expression will work:\n        //\n        //   db.friends.put({name: \"Arne\"}).then(function () {\n        //       db.friends.where(\"name\").equals(\"Arne\").count(function(count) {\n        //           assert (count === 1);\n        //       });\n        //   });\n        //\n        return trans._completion.then(function () {\n          return result;\n        });\n      });\n      /*.catch(err => { // Don't do this as of now. If would affect bulk- and modify methods in a way that could be more intuitive. But wait! Maybe change in next major.\n      trans._reject(err);\n      return rejection(err);\n      });*/\n    }\n  }\n\n  this._whenReady = function (fn) {\n    return openComplete || PSD.letThrough ? fn() : new Promise(function (resolve, reject) {\n      if (!isBeingOpened) {\n        if (!autoOpen) {\n          reject(new exceptions.DatabaseClosed());\n          return;\n        }\n\n        db.open()[\"catch\"](nop); // Open in background. If if fails, it will be catched by the final promise anyway.\n      }\n\n      dbReadyPromise.then(resolve, reject);\n    }).then(fn);\n  }; //\n  //\n  //\n  //\n  //      Dexie API\n  //\n  //\n  //\n\n\n  this.verno = 0;\n\n  this.open = function () {\n    if (isBeingOpened || idbdb) return dbReadyPromise.then(function () {\n      return dbOpenError ? rejection(dbOpenError) : db;\n    });\n    debug && (openCanceller._stackHolder = getErrorWithStack()); // Let stacks point to when open() was called rather than where new Dexie() was called.\n\n    isBeingOpened = true;\n    dbOpenError = null;\n    openComplete = false; // Function pointers to call when the core opening process completes.\n\n    var resolveDbReady = dbReadyResolve,\n        // upgradeTransaction to abort on failure.\n    upgradeTransaction = null;\n    return Promise.race([openCanceller, new Promise(function (resolve, reject) {\n      // Multiply db.verno with 10 will be needed to workaround upgrading bug in IE:\n      // IE fails when deleting objectStore after reading from it.\n      // A future version of Dexie.js will stopover an intermediate version to workaround this.\n      // At that point, we want to be backward compatible. Could have been multiplied with 2, but by using 10, it is easier to map the number to the real version number.\n      // If no API, throw!\n      if (!indexedDB) throw new exceptions.MissingAPI(\"indexedDB API not found. If using IE10+, make sure to run your code on a server URL \" + \"(not locally). If using old Safari versions, make sure to include indexedDB polyfill.\");\n      var req = autoSchema ? indexedDB.open(dbName) : indexedDB.open(dbName, Math.round(db.verno * 10));\n      if (!req) throw new exceptions.MissingAPI(\"IndexedDB API not available\"); // May happen in Safari private mode, see https://github.com/dfahlander/Dexie.js/issues/134\n\n      req.onerror = eventRejectHandler(reject);\n      req.onblocked = wrap(fireOnBlocked);\n      req.onupgradeneeded = wrap(function (e) {\n        upgradeTransaction = req.transaction;\n\n        if (autoSchema && !db._allowEmptyDB) {\n          // Caller did not specify a version or schema. Doing that is only acceptable for opening alread existing databases.\n          // If onupgradeneeded is called it means database did not exist. Reject the open() promise and make sure that we\n          // do not create a new database by accident here.\n          req.onerror = preventDefault; // Prohibit onabort error from firing before we're done!\n\n          upgradeTransaction.abort(); // Abort transaction (would hope that this would make DB disappear but it doesnt.)\n          // Close database and delete it.\n\n          req.result.close();\n          var delreq = indexedDB.deleteDatabase(dbName); // The upgrade transaction is atomic, and javascript is single threaded - meaning that there is no risk that we delete someone elses database here!\n\n          delreq.onsuccess = delreq.onerror = wrap(function () {\n            reject(new exceptions.NoSuchDatabase(\"Database \" + dbName + \" doesnt exist\"));\n          });\n        } else {\n          upgradeTransaction.onerror = eventRejectHandler(reject);\n          var oldVer = e.oldVersion > Math.pow(2, 62) ? 0 : e.oldVersion; // Safari 8 fix.\n\n          runUpgraders(oldVer / 10, upgradeTransaction, reject, req);\n        }\n      }, reject);\n      req.onsuccess = wrap(function () {\n        // Core opening procedure complete. Now let's just record some stuff.\n        upgradeTransaction = null;\n        idbdb = req.result;\n        connections.push(db); // Used for emulating versionchange event on IE/Edge/Safari.\n\n        if (autoSchema) readGlobalSchema();else if (idbdb.objectStoreNames.length > 0) {\n          try {\n            adjustToExistingIndexNames(globalSchema, idbdb.transaction(safariMultiStoreFix(idbdb.objectStoreNames), READONLY));\n          } catch (e) {// Safari may bail out if > 1 store names. However, this shouldnt be a showstopper. Issue #120.\n          }\n        }\n        idbdb.onversionchange = wrap(function (ev) {\n          db._vcFired = true; // detect implementations that not support versionchange (IE/Edge/Safari)\n\n          db.on(\"versionchange\").fire(ev);\n        });\n\n        if (!hasNativeGetDatabaseNames && dbName !== '__dbnames') {\n          dbNamesDB.dbnames.put({\n            name: dbName\n          })[\"catch\"](nop);\n        }\n\n        resolve();\n      }, reject);\n    })]).then(function () {\n      // Before finally resolving the dbReadyPromise and this promise,\n      // call and await all on('ready') subscribers:\n      // Dexie.vip() makes subscribers able to use the database while being opened.\n      // This is a must since these subscribers take part of the opening procedure.\n      onReadyBeingFired = [];\n      return Promise.resolve(Dexie.vip(db.on.ready.fire)).then(function fireRemainders() {\n        if (onReadyBeingFired.length > 0) {\n          // In case additional subscribers to db.on('ready') were added during the time db.on.ready.fire was executed.\n          var remainders = onReadyBeingFired.reduce(promisableChain, nop);\n          onReadyBeingFired = [];\n          return Promise.resolve(Dexie.vip(remainders)).then(fireRemainders);\n        }\n      });\n    })[\"finally\"](function () {\n      onReadyBeingFired = null;\n    }).then(function () {\n      // Resolve the db.open() with the db instance.\n      isBeingOpened = false;\n      return db;\n    })[\"catch\"](function (err) {\n      try {\n        // Did we fail within onupgradeneeded? Make sure to abort the upgrade transaction so it doesnt commit.\n        upgradeTransaction && upgradeTransaction.abort();\n      } catch (e) {}\n\n      isBeingOpened = false; // Set before calling db.close() so that it doesnt reject openCanceller again (leads to unhandled rejection event).\n\n      db.close(); // Closes and resets idbdb, removes connections, resets dbReadyPromise and openCanceller so that a later db.open() is fresh.\n      // A call to db.close() may have made on-ready subscribers fail. Use dbOpenError if set, since err could be a follow-up error on that.\n\n      dbOpenError = err; // Record the error. It will be used to reject further promises of db operations.\n\n      return rejection(dbOpenError);\n    })[\"finally\"](function () {\n      openComplete = true;\n      resolveDbReady(); // dbReadyPromise is resolved no matter if open() rejects or resolved. It's just to wake up waiters.\n    });\n  };\n\n  this.close = function () {\n    var idx = connections.indexOf(db);\n    if (idx >= 0) connections.splice(idx, 1);\n\n    if (idbdb) {\n      try {\n        idbdb.close();\n      } catch (e) {}\n\n      idbdb = null;\n    }\n\n    autoOpen = false;\n    dbOpenError = new exceptions.DatabaseClosed();\n    if (isBeingOpened) cancelOpen(dbOpenError); // Reset dbReadyPromise promise:\n\n    dbReadyPromise = new Promise(function (resolve) {\n      dbReadyResolve = resolve;\n    });\n    openCanceller = new Promise(function (_, reject) {\n      cancelOpen = reject;\n    });\n  };\n\n  this[\"delete\"] = function () {\n    var hasArguments = arguments.length > 0;\n    return new Promise(function (resolve, reject) {\n      if (hasArguments) throw new exceptions.InvalidArgument(\"Arguments not allowed in db.delete()\");\n\n      if (isBeingOpened) {\n        dbReadyPromise.then(doDelete);\n      } else {\n        doDelete();\n      }\n\n      function doDelete() {\n        db.close();\n        var req = indexedDB.deleteDatabase(dbName);\n        req.onsuccess = wrap(function () {\n          if (!hasNativeGetDatabaseNames) {\n            dbNamesDB.dbnames[\"delete\"](dbName)[\"catch\"](nop);\n          }\n\n          resolve();\n        });\n        req.onerror = eventRejectHandler(reject);\n        req.onblocked = fireOnBlocked;\n      }\n    });\n  };\n\n  this.backendDB = function () {\n    return idbdb;\n  };\n\n  this.isOpen = function () {\n    return idbdb !== null;\n  };\n\n  this.hasBeenClosed = function () {\n    return dbOpenError && dbOpenError instanceof exceptions.DatabaseClosed;\n  };\n\n  this.hasFailed = function () {\n    return dbOpenError !== null;\n  };\n\n  this.dynamicallyOpened = function () {\n    return autoSchema;\n  }; //\n  // Properties\n  //\n\n\n  this.name = dbName; // db.tables - an array of all Table instances.\n\n  props(this, {\n    tables: {\n      get: function get() {\n        /// <returns type=\"Array\" elementType=\"Table\" />\n        return keys(allTables).map(function (name) {\n          return allTables[name];\n        });\n      }\n    }\n  }); //\n  // Events\n  //\n\n  this.on = Events(this, \"populate\", \"blocked\", \"versionchange\", {\n    ready: [promisableChain, nop]\n  });\n  this.on.ready.subscribe = override(this.on.ready.subscribe, function (subscribe) {\n    return function (subscriber, bSticky) {\n      Dexie.vip(function () {\n        if (openComplete) {\n          // Database already open. Call subscriber asap.\n          if (!dbOpenError) Promise.resolve().then(subscriber); // bSticky: Also subscribe to future open sucesses (after close / reopen) \n\n          if (bSticky) subscribe(subscriber);\n        } else if (onReadyBeingFired) {\n          // db.on('ready') subscribers are currently being executed and have not yet resolved or rejected\n          onReadyBeingFired.push(subscriber);\n          if (bSticky) subscribe(subscriber);\n        } else {\n          // Database not yet open. Subscribe to it.\n          subscribe(subscriber); // If bSticky is falsy, make sure to unsubscribe subscriber when fired once.\n\n          if (!bSticky) subscribe(function unsubscribe() {\n            db.on.ready.unsubscribe(subscriber);\n            db.on.ready.unsubscribe(unsubscribe);\n          });\n        }\n      });\n    };\n  });\n\n  this.transaction = function () {\n    /// <summary>\n    ///\n    /// </summary>\n    /// <param name=\"mode\" type=\"String\">\"r\" for readonly, or \"rw\" for readwrite</param>\n    /// <param name=\"tableInstances\">Table instance, Array of Table instances, String or String Array of object stores to include in the transaction</param>\n    /// <param name=\"scopeFunc\" type=\"Function\">Function to execute with transaction</param>\n    var args = extractTransactionArgs.apply(this, arguments);\n    return this._transaction.apply(this, args);\n  };\n\n  function extractTransactionArgs(mode, _tableArgs_, scopeFunc) {\n    // Let table arguments be all arguments between mode and last argument.\n    var i = arguments.length;\n    if (i < 2) throw new exceptions.InvalidArgument(\"Too few arguments\"); // Prevent optimzation killer (https://github.com/petkaantonov/bluebird/wiki/Optimization-killers#32-leaking-arguments)\n    // and clone arguments except the first one into local var 'args'.\n\n    var args = new Array(i - 1);\n\n    while (--i) {\n      args[i - 1] = arguments[i];\n    } // Let scopeFunc be the last argument and pop it so that args now only contain the table arguments.\n\n\n    scopeFunc = args.pop();\n    var tables = flatten(args); // Support using array as middle argument, or a mix of arrays and non-arrays.\n\n    return [mode, tables, scopeFunc];\n  }\n\n  this._transaction = function (mode, tables, scopeFunc) {\n    var parentTransaction = PSD.trans; // Check if parent transactions is bound to this db instance, and if caller wants to reuse it\n\n    if (!parentTransaction || parentTransaction.db !== db || mode.indexOf('!') !== -1) parentTransaction = null;\n    var onlyIfCompatible = mode.indexOf('?') !== -1;\n    mode = mode.replace('!', '').replace('?', ''); // Ok. Will change arguments[0] as well but we wont touch arguments henceforth.\n\n    try {\n      //\n      // Get storeNames from arguments. Either through given table instances, or through given table names.\n      //\n      var storeNames = tables.map(function (table) {\n        var storeName = table instanceof Table ? table.name : table;\n        if (typeof storeName !== 'string') throw new TypeError(\"Invalid table argument to Dexie.transaction(). Only Table or String are allowed\");\n        return storeName;\n      }); //\n      // Resolve mode. Allow shortcuts \"r\" and \"rw\".\n      //\n\n      if (mode == \"r\" || mode == READONLY) mode = READONLY;else if (mode == \"rw\" || mode == READWRITE) mode = READWRITE;else throw new exceptions.InvalidArgument(\"Invalid transaction mode: \" + mode);\n\n      if (parentTransaction) {\n        // Basic checks\n        if (parentTransaction.mode === READONLY && mode === READWRITE) {\n          if (onlyIfCompatible) {\n            // Spawn new transaction instead.\n            parentTransaction = null;\n          } else throw new exceptions.SubTransaction(\"Cannot enter a sub-transaction with READWRITE mode when parent transaction is READONLY\");\n        }\n\n        if (parentTransaction) {\n          storeNames.forEach(function (storeName) {\n            if (parentTransaction && parentTransaction.storeNames.indexOf(storeName) === -1) {\n              if (onlyIfCompatible) {\n                // Spawn new transaction instead.\n                parentTransaction = null;\n              } else throw new exceptions.SubTransaction(\"Table \" + storeName + \" not included in parent transaction.\");\n            }\n          });\n        }\n\n        if (onlyIfCompatible && parentTransaction && !parentTransaction.active) {\n          // '?' mode should not keep using an inactive transaction.\n          parentTransaction = null;\n        }\n      }\n    } catch (e) {\n      return parentTransaction ? parentTransaction._promise(null, function (_, reject) {\n        reject(e);\n      }) : rejection(e);\n    } // If this is a sub-transaction, lock the parent and then launch the sub-transaction.\n\n\n    return parentTransaction ? parentTransaction._promise(mode, enterTransactionScope, \"lock\") : PSD.trans ? // no parent transaction despite PSD.trans exists. Make sure also\n    // that the zone we create is not a sub-zone of current, because\n    // Promise.follow() should not wait for it if so.\n    usePSD(PSD.transless, function () {\n      return db._whenReady(enterTransactionScope);\n    }) : db._whenReady(enterTransactionScope);\n\n    function enterTransactionScope() {\n      return Promise.resolve().then(function () {\n        // Keep a pointer to last non-transactional PSD to use if someone calls Dexie.ignoreTransaction().\n        var transless = PSD.transless || PSD; // Our transaction.\n        //return new Promise((resolve, reject) => {\n\n        var trans = db._createTransaction(mode, storeNames, globalSchema, parentTransaction); // Let the transaction instance be part of a Promise-specific data (PSD) value.\n\n\n        var zoneProps = {\n          trans: trans,\n          transless: transless\n        };\n\n        if (parentTransaction) {\n          // Emulate transaction commit awareness for inner transaction (must 'commit' when the inner transaction has no more operations ongoing)\n          trans.idbtrans = parentTransaction.idbtrans;\n        } else {\n          trans.create(); // Create the backend transaction so that complete() or error() will trigger even if no operation is made upon it.\n        } // Support for native async await.\n\n\n        if (scopeFunc.constructor === AsyncFunction) {\n          incrementExpectedAwaits();\n        }\n\n        var returnValue;\n        var promiseFollowed = Promise.follow(function () {\n          // Finally, call the scope function with our table and transaction arguments.\n          returnValue = scopeFunc.call(trans, trans);\n\n          if (returnValue) {\n            if (returnValue.constructor === NativePromise) {\n              var decrementor = decrementExpectedAwaits.bind(null, null);\n              returnValue.then(decrementor, decrementor);\n            } else if (typeof returnValue.next === 'function' && typeof returnValue[\"throw\"] === 'function') {\n              // scopeFunc returned an iterator with throw-support. Handle yield as await.\n              returnValue = awaitIterator(returnValue);\n            }\n          }\n        }, zoneProps);\n        return (returnValue && typeof returnValue.then === 'function' ? // Promise returned. User uses promise-style transactions.\n        Promise.resolve(returnValue).then(function (x) {\n          return trans.active ? x // Transaction still active. Continue.\n          : rejection(new exceptions.PrematureCommit(\"Transaction committed too early. See http://bit.ly/2kdckMn\"));\n        }) // No promise returned. Wait for all outstanding promises before continuing. \n        : promiseFollowed.then(function () {\n          return returnValue;\n        })).then(function (x) {\n          // sub transactions don't react to idbtrans.oncomplete. We must trigger a completion:\n          if (parentTransaction) trans._resolve(); // wait for trans._completion\n          // (if root transaction, this means 'complete' event. If sub-transaction, we've just fired it ourselves)\n\n          return trans._completion.then(function () {\n            return x;\n          });\n        })[\"catch\"](function (e) {\n          trans._reject(e); // Yes, above then-handler were maybe not called because of an unhandled rejection in scopeFunc!\n\n\n          return rejection(e);\n        });\n      });\n    }\n  };\n\n  this.table = function (tableName) {\n    /// <returns type=\"Table\"></returns>\n    if (!hasOwn(allTables, tableName)) {\n      throw new exceptions.InvalidTable(\"Table \" + tableName + \" does not exist\");\n    }\n\n    return allTables[tableName];\n  }; //\n  //\n  //\n  // Table Class\n  //\n  //\n  //\n\n\n  function Table(name, tableSchema, optionalTrans) {\n    /// <param name=\"name\" type=\"String\"></param>\n    this.name = name;\n    this.schema = tableSchema;\n    this._tx = optionalTrans;\n    this.hook = allTables[name] ? allTables[name].hook : Events(null, {\n      \"creating\": [hookCreatingChain, nop],\n      \"reading\": [pureFunctionChain, mirror],\n      \"updating\": [hookUpdatingChain, nop],\n      \"deleting\": [hookDeletingChain, nop]\n    });\n  }\n\n  function BulkErrorHandlerCatchAll(errorList, done, supportHooks) {\n    return (supportHooks ? hookedEventRejectHandler : eventRejectHandler)(function (e) {\n      errorList.push(e);\n      done && done();\n    });\n  }\n\n  function _bulkDelete(idbstore, trans, keysOrTuples, hasDeleteHook, deletingHook) {\n    // If hasDeleteHook, keysOrTuples must be an array of tuples: [[key1, value2],[key2,value2],...],\n    // else keysOrTuples must be just an array of keys: [key1, key2, ...].\n    return new Promise(function (resolve, reject) {\n      var len = keysOrTuples.length,\n          lastItem = len - 1;\n      if (len === 0) return resolve();\n\n      if (!hasDeleteHook) {\n        for (var i = 0; i < len; ++i) {\n          var req = idbstore[\"delete\"](keysOrTuples[i]);\n          req.onerror = eventRejectHandler(reject);\n          if (i === lastItem) req.onsuccess = wrap(function () {\n            return resolve();\n          });\n        }\n      } else {\n        var hookCtx,\n            errorHandler = hookedEventRejectHandler(reject),\n            successHandler = hookedEventSuccessHandler(null);\n        tryCatch(function () {\n          for (var i = 0; i < len; ++i) {\n            hookCtx = {\n              onsuccess: null,\n              onerror: null\n            };\n            var tuple = keysOrTuples[i];\n            deletingHook.call(hookCtx, tuple[0], tuple[1], trans);\n            var req = idbstore[\"delete\"](tuple[0]);\n            req._hookCtx = hookCtx;\n            req.onerror = errorHandler;\n            if (i === lastItem) req.onsuccess = hookedEventSuccessHandler(resolve);else req.onsuccess = successHandler;\n          }\n        }, function (err) {\n          hookCtx.onerror && hookCtx.onerror(err);\n          throw err;\n        });\n      }\n    });\n  }\n\n  props(Table.prototype, {\n    //\n    // Table Protected Methods\n    //\n    _trans: function getTransaction(mode, fn, writeLocked) {\n      var trans = this._tx || PSD.trans;\n      return trans && trans.db === db ? trans === PSD.trans ? trans._promise(mode, fn, writeLocked) : newScope(function () {\n        return trans._promise(mode, fn, writeLocked);\n      }, {\n        trans: trans,\n        transless: PSD.transless || PSD\n      }) : tempTransaction(mode, [this.name], fn);\n    },\n    _idbstore: function getIDBObjectStore(mode, fn, writeLocked) {\n      var tableName = this.name;\n\n      function supplyIdbStore(resolve, reject, trans) {\n        if (trans.storeNames.indexOf(tableName) === -1) throw new exceptions.NotFound(\"Table\" + tableName + \" not part of transaction\");\n        return fn(resolve, reject, trans.idbtrans.objectStore(tableName), trans);\n      }\n\n      return this._trans(mode, supplyIdbStore, writeLocked);\n    },\n    //\n    // Table Public Methods\n    //\n    get: function get(keyOrCrit, cb) {\n      if (keyOrCrit && keyOrCrit.constructor === Object) return this.where(keyOrCrit).first(cb);\n      var self = this;\n      return this._idbstore(READONLY, function (resolve, reject, idbstore) {\n        var req = idbstore.get(keyOrCrit);\n        req.onerror = eventRejectHandler(reject);\n        req.onsuccess = wrap(function () {\n          resolve(self.hook.reading.fire(req.result));\n        }, reject);\n      }).then(cb);\n    },\n    where: function where(indexOrCrit) {\n      if (typeof indexOrCrit === 'string') return new WhereClause(this, indexOrCrit);\n      if (isArray(indexOrCrit)) return new WhereClause(this, \"[\" + indexOrCrit.join('+') + \"]\"); // indexOrCrit is an object map of {[keyPath]:value} \n\n      var keyPaths = keys(indexOrCrit);\n      if (keyPaths.length === 1) // Only one critera. This was the easy case:\n        return this.where(keyPaths[0]).equals(indexOrCrit[keyPaths[0]]); // Multiple criterias.\n      // Let's try finding a compound index that matches all keyPaths in\n      // arbritary order:\n\n      var compoundIndex = this.schema.indexes.concat(this.schema.primKey).filter(function (ix) {\n        return ix.compound && keyPaths.every(function (keyPath) {\n          return ix.keyPath.indexOf(keyPath) >= 0;\n        }) && ix.keyPath.every(function (keyPath) {\n          return keyPaths.indexOf(keyPath) >= 0;\n        });\n      })[0];\n      if (compoundIndex && maxKey !== maxString) // Cool! We found such compound index\n        // and this browser supports compound indexes (maxKey !== maxString)!\n        return this.where(compoundIndex.name).equals(compoundIndex.keyPath.map(function (kp) {\n          return indexOrCrit[kp];\n        }));\n      if (!compoundIndex) console.warn(\"The query \" + JSON.stringify(indexOrCrit) + \" on \" + this.name + \" would benefit of a \" + (\"compound index [\" + keyPaths.join('+') + \"]\")); // Ok, now let's fallback to finding at least one matching index\n      // and filter the rest.\n\n      var idxByName = this.schema.idxByName;\n      var simpleIndex = keyPaths.reduce(function (r, keyPath) {\n        return [r[0] || idxByName[keyPath], r[0] || !idxByName[keyPath] ? combine(r[1], function (x) {\n          return '' + getByKeyPath(x, keyPath) == '' + indexOrCrit[keyPath];\n        }) : r[1]];\n      }, [null, null]);\n      var idx = simpleIndex[0];\n      return idx ? this.where(idx.name).equals(indexOrCrit[idx.keyPath]).filter(simpleIndex[1]) : compoundIndex ? this.filter(simpleIndex[1]) : // Has compound but browser bad. Allow filter.\n      this.where(keyPaths).equals(''); // No index at all. Fail lazily.\n    },\n    count: function count(cb) {\n      return this.toCollection().count(cb);\n    },\n    offset: function offset(_offset) {\n      return this.toCollection().offset(_offset);\n    },\n    limit: function limit(numRows) {\n      return this.toCollection().limit(numRows);\n    },\n    reverse: function reverse() {\n      return this.toCollection().reverse();\n    },\n    filter: function filter(filterFunction) {\n      return this.toCollection().and(filterFunction);\n    },\n    each: function each(fn) {\n      return this.toCollection().each(fn);\n    },\n    toArray: function toArray(cb) {\n      return this.toCollection().toArray(cb);\n    },\n    orderBy: function orderBy(index) {\n      return new Collection(new WhereClause(this, isArray(index) ? \"[\" + index.join('+') + \"]\" : index));\n    },\n    toCollection: function toCollection() {\n      return new Collection(new WhereClause(this));\n    },\n    mapToClass: function mapToClass(constructor, structure) {\n      /// <summary>\n      ///     Map table to a javascript constructor function. Objects returned from the database will be instances of this class, making\n      ///     it possible to the instanceOf operator as well as extending the class using constructor.prototype.method = function(){...}.\n      /// </summary>\n      /// <param name=\"constructor\">Constructor function representing the class.</param>\n      /// <param name=\"structure\" optional=\"true\">Helps IDE code completion by knowing the members that objects contain and not just the indexes. Also\n      /// know what type each member has. Example: {name: String, emailAddresses: [String], password}</param>\n      this.schema.mappedClass = constructor;\n      var instanceTemplate = Object.create(constructor.prototype);\n\n      if (structure) {\n        // structure and instanceTemplate is for IDE code competion only while constructor.prototype is for actual inheritance.\n        applyStructure(instanceTemplate, structure);\n      }\n\n      this.schema.instanceTemplate = instanceTemplate; // Now, subscribe to the when(\"reading\") event to make all objects that come out from this table inherit from given class\n      // no matter which method to use for reading (Table.get() or Table.where(...)... )\n\n      var readHook = function readHook(obj) {\n        if (!obj) return obj; // No valid object. (Value is null). Return as is.\n        // Create a new object that derives from constructor:\n\n        var res = Object.create(constructor.prototype); // Clone members:\n\n        for (var m in obj) {\n          if (hasOwn(obj, m)) try {\n            res[m] = obj[m];\n          } catch (_) {}\n        }\n\n        return res;\n      };\n\n      if (this.schema.readHook) {\n        this.hook.reading.unsubscribe(this.schema.readHook);\n      }\n\n      this.schema.readHook = readHook;\n      this.hook(\"reading\", readHook);\n      return constructor;\n    },\n    defineClass: function defineClass(structure) {\n      /// <summary>\n      ///     Define all members of the class that represents the table. This will help code completion of when objects are read from the database\n      ///     as well as making it possible to extend the prototype of the returned constructor function.\n      /// </summary>\n      /// <param name=\"structure\">Helps IDE code completion by knowing the members that objects contain and not just the indexes. Also\n      /// know what type each member has. Example: {name: String, emailAddresses: [String], properties: {shoeSize: Number}}</param>\n      return this.mapToClass(Dexie.defineClass(structure), structure);\n    },\n    bulkDelete: function bulkDelete(keys$$1) {\n      if (this.hook.deleting.fire === nop) {\n        return this._idbstore(READWRITE, function (resolve, reject, idbstore, trans) {\n          resolve(_bulkDelete(idbstore, trans, keys$$1, false, nop));\n        });\n      } else {\n        return this.where(':id').anyOf(keys$$1)[\"delete\"]().then(function () {}); // Resolve with undefined.\n      }\n    },\n    bulkPut: function bulkPut(objects, keys$$1) {\n      var _this = this;\n\n      return this._idbstore(READWRITE, function (resolve, reject, idbstore) {\n        if (!idbstore.keyPath && !_this.schema.primKey.auto && !keys$$1) throw new exceptions.InvalidArgument(\"bulkPut() with non-inbound keys requires keys array in second argument\");\n        if (idbstore.keyPath && keys$$1) throw new exceptions.InvalidArgument(\"bulkPut(): keys argument invalid on tables with inbound keys\");\n        if (keys$$1 && keys$$1.length !== objects.length) throw new exceptions.InvalidArgument(\"Arguments objects and keys must have the same length\");\n        if (objects.length === 0) return resolve(); // Caller provided empty list.\n\n        var done = function done(result) {\n          if (errorList.length === 0) resolve(result);else reject(new BulkError(_this.name + \".bulkPut(): \" + errorList.length + \" of \" + numObjs + \" operations failed\", errorList));\n        };\n\n        var req,\n            errorList = [],\n            errorHandler,\n            numObjs = objects.length,\n            table = _this;\n\n        if (_this.hook.creating.fire === nop && _this.hook.updating.fire === nop) {\n          //\n          // Standard Bulk (no 'creating' or 'updating' hooks to care about)\n          //\n          errorHandler = BulkErrorHandlerCatchAll(errorList);\n\n          for (var i = 0, l = objects.length; i < l; ++i) {\n            req = keys$$1 ? idbstore.put(objects[i], keys$$1[i]) : idbstore.put(objects[i]);\n            req.onerror = errorHandler;\n          } // Only need to catch success or error on the last operation\n          // according to the IDB spec.\n\n\n          req.onerror = BulkErrorHandlerCatchAll(errorList, done);\n          req.onsuccess = eventSuccessHandler(done);\n        } else {\n          var effectiveKeys = keys$$1 || idbstore.keyPath && objects.map(function (o) {\n            return getByKeyPath(o, idbstore.keyPath);\n          }); // Generate map of {[key]: object}\n\n          var objectLookup = effectiveKeys && arrayToObject(effectiveKeys, function (key, i) {\n            return key != null && [key, objects[i]];\n          });\n          var promise = !effectiveKeys ? // Auto-incremented key-less objects only without any keys argument.\n          table.bulkAdd(objects) : // Keys provided. Either as inbound in provided objects, or as a keys argument.\n          // Begin with updating those that exists in DB:\n          table.where(':id').anyOf(effectiveKeys.filter(function (key) {\n            return key != null;\n          })).modify(function () {\n            this.value = objectLookup[this.primKey];\n            objectLookup[this.primKey] = null; // Mark as \"don't add this\"\n          })[\"catch\"](ModifyError, function (e) {\n            errorList = e.failures; // No need to concat here. These are the first errors added.\n          }).then(function () {\n            // Now, let's examine which items didnt exist so we can add them:\n            var objsToAdd = [],\n                keysToAdd = keys$$1 && []; // Iterate backwards. Why? Because if same key was used twice, just add the last one.\n\n            for (var i = effectiveKeys.length - 1; i >= 0; --i) {\n              var key = effectiveKeys[i];\n\n              if (key == null || objectLookup[key]) {\n                objsToAdd.push(objects[i]);\n                keys$$1 && keysToAdd.push(key);\n                if (key != null) objectLookup[key] = null; // Mark as \"dont add again\"\n              }\n            } // The items are in reverse order so reverse them before adding.\n            // Could be important in order to get auto-incremented keys the way the caller\n            // would expect. Could have used unshift instead of push()/reverse(),\n            // but: http://jsperf.com/unshift-vs-reverse\n\n\n            objsToAdd.reverse();\n            keys$$1 && keysToAdd.reverse();\n            return table.bulkAdd(objsToAdd, keysToAdd);\n          }).then(function (lastAddedKey) {\n            // Resolve with key of the last object in given arguments to bulkPut():\n            var lastEffectiveKey = effectiveKeys[effectiveKeys.length - 1]; // Key was provided.\n\n            return lastEffectiveKey != null ? lastEffectiveKey : lastAddedKey;\n          });\n          promise.then(done)[\"catch\"](BulkError, function (e) {\n            // Concat failure from ModifyError and reject using our 'done' method.\n            errorList = errorList.concat(e.failures);\n            done();\n          })[\"catch\"](reject);\n        }\n      }, \"locked\"); // If called from transaction scope, lock transaction til all steps are done.\n    },\n    bulkAdd: function bulkAdd(objects, keys$$1) {\n      var self = this,\n          creatingHook = this.hook.creating.fire;\n      return this._idbstore(READWRITE, function (resolve, reject, idbstore, trans) {\n        if (!idbstore.keyPath && !self.schema.primKey.auto && !keys$$1) throw new exceptions.InvalidArgument(\"bulkAdd() with non-inbound keys requires keys array in second argument\");\n        if (idbstore.keyPath && keys$$1) throw new exceptions.InvalidArgument(\"bulkAdd(): keys argument invalid on tables with inbound keys\");\n        if (keys$$1 && keys$$1.length !== objects.length) throw new exceptions.InvalidArgument(\"Arguments objects and keys must have the same length\");\n        if (objects.length === 0) return resolve(); // Caller provided empty list.\n\n        function done(result) {\n          if (errorList.length === 0) resolve(result);else reject(new BulkError(self.name + \".bulkAdd(): \" + errorList.length + \" of \" + numObjs + \" operations failed\", errorList));\n        }\n\n        var req,\n            errorList = [],\n            errorHandler,\n            successHandler,\n            numObjs = objects.length;\n\n        if (creatingHook !== nop) {\n          //\n          // There are subscribers to hook('creating')\n          // Must behave as documented.\n          //\n          var keyPath = idbstore.keyPath,\n              hookCtx;\n          errorHandler = BulkErrorHandlerCatchAll(errorList, null, true);\n          successHandler = hookedEventSuccessHandler(null);\n          tryCatch(function () {\n            for (var i = 0, l = objects.length; i < l; ++i) {\n              hookCtx = {\n                onerror: null,\n                onsuccess: null\n              };\n              var key = keys$$1 && keys$$1[i];\n              var obj = objects[i],\n                  effectiveKey = keys$$1 ? key : keyPath ? getByKeyPath(obj, keyPath) : undefined,\n                  keyToUse = creatingHook.call(hookCtx, effectiveKey, obj, trans);\n\n              if (effectiveKey == null && keyToUse != null) {\n                if (keyPath) {\n                  obj = deepClone(obj);\n                  setByKeyPath(obj, keyPath, keyToUse);\n                } else {\n                  key = keyToUse;\n                }\n              }\n\n              req = key != null ? idbstore.add(obj, key) : idbstore.add(obj);\n              req._hookCtx = hookCtx;\n\n              if (i < l - 1) {\n                req.onerror = errorHandler;\n                if (hookCtx.onsuccess) req.onsuccess = successHandler;\n              }\n            }\n          }, function (err) {\n            hookCtx.onerror && hookCtx.onerror(err);\n            throw err;\n          });\n          req.onerror = BulkErrorHandlerCatchAll(errorList, done, true);\n          req.onsuccess = hookedEventSuccessHandler(done);\n        } else {\n          //\n          // Standard Bulk (no 'creating' hook to care about)\n          //\n          errorHandler = BulkErrorHandlerCatchAll(errorList);\n\n          for (var i = 0, l = objects.length; i < l; ++i) {\n            req = keys$$1 ? idbstore.add(objects[i], keys$$1[i]) : idbstore.add(objects[i]);\n            req.onerror = errorHandler;\n          } // Only need to catch success or error on the last operation\n          // according to the IDB spec.\n\n\n          req.onerror = BulkErrorHandlerCatchAll(errorList, done);\n          req.onsuccess = eventSuccessHandler(done);\n        }\n      });\n    },\n    add: function add(obj, key) {\n      /// <summary>\n      ///   Add an object to the database. In case an object with same primary key already exists, the object will not be added.\n      /// </summary>\n      /// <param name=\"obj\" type=\"Object\">A javascript object to insert</param>\n      /// <param name=\"key\" optional=\"true\">Primary key</param>\n      var creatingHook = this.hook.creating.fire;\n      return this._idbstore(READWRITE, function (resolve, reject, idbstore, trans) {\n        var hookCtx = {\n          onsuccess: null,\n          onerror: null\n        };\n\n        if (creatingHook !== nop) {\n          var effectiveKey = key != null ? key : idbstore.keyPath ? getByKeyPath(obj, idbstore.keyPath) : undefined;\n          var keyToUse = creatingHook.call(hookCtx, effectiveKey, obj, trans); // Allow subscribers to when(\"creating\") to generate the key.\n\n          if (effectiveKey == null && keyToUse != null) {\n            if (idbstore.keyPath) setByKeyPath(obj, idbstore.keyPath, keyToUse);else key = keyToUse;\n          }\n        }\n\n        try {\n          var req = key != null ? idbstore.add(obj, key) : idbstore.add(obj);\n          req._hookCtx = hookCtx;\n          req.onerror = hookedEventRejectHandler(reject);\n          req.onsuccess = hookedEventSuccessHandler(function (result) {\n            // TODO: Remove these two lines in next major release (2.0?)\n            // It's no good practice to have side effects on provided parameters\n            var keyPath = idbstore.keyPath;\n            if (keyPath) setByKeyPath(obj, keyPath, result);\n            resolve(result);\n          });\n        } catch (e) {\n          if (hookCtx.onerror) hookCtx.onerror(e);\n          throw e;\n        }\n      });\n    },\n    put: function put(obj, key) {\n      var _this = this; /// <summary>\n      ///   Add an object to the database but in case an object with same primary key alread exists, the existing one will get updated.\n      /// </summary>\n      /// <param name=\"obj\" type=\"Object\">A javascript object to insert or update</param>\n      /// <param name=\"key\" optional=\"true\">Primary key</param>\n\n\n      var creatingHook = this.hook.creating.fire,\n          updatingHook = this.hook.updating.fire;\n\n      if (creatingHook !== nop || updatingHook !== nop) {\n        //\n        // People listens to when(\"creating\") or when(\"updating\") events!\n        // We must know whether the put operation results in an CREATE or UPDATE.\n        //\n        var keyPath = this.schema.primKey.keyPath;\n        var effectiveKey = key !== undefined ? key : keyPath && getByKeyPath(obj, keyPath);\n        if (effectiveKey == null) return this.add(obj); // Since key is optional, make sure we get it from obj if not provided\n        // Primary key exist. Lock transaction and try modifying existing. If nothing modified, call add().\n        // clone obj before this async call. If caller modifies obj the line after put(), the IDB spec requires that it should not affect operation.\n\n        obj = deepClone(obj);\n        return this._trans(READWRITE, function () {\n          return _this.where(\":id\").equals(effectiveKey).modify(function () {\n            // Replace extisting value with our object\n            // CRUD event firing handled in Collection.modify()\n            this.value = obj;\n          }).then(function (count) {\n            return count === 0 ? _this.add(obj, key) : effectiveKey;\n          });\n        }, \"locked\"); // Lock needed because operation is splitted into modify() and add().\n      } else {\n        // Use the standard IDB put() method.\n        return this._idbstore(READWRITE, function (resolve, reject, idbstore) {\n          var req = key !== undefined ? idbstore.put(obj, key) : idbstore.put(obj);\n          req.onerror = eventRejectHandler(reject);\n          req.onsuccess = wrap(function (ev) {\n            var keyPath = idbstore.keyPath;\n            if (keyPath) setByKeyPath(obj, keyPath, ev.target.result);\n            resolve(req.result);\n          });\n        });\n      }\n    },\n    'delete': function _delete(key) {\n      /// <param name=\"key\">Primary key of the object to delete</param>\n      if (this.hook.deleting.subscribers.length) {\n        // People listens to when(\"deleting\") event. Must implement delete using Collection.delete() that will\n        // call the CRUD event. Only Collection.delete() will know whether an object was actually deleted.\n        return this.where(\":id\").equals(key)[\"delete\"]();\n      } else {\n        // No one listens. Use standard IDB delete() method.\n        return this._idbstore(READWRITE, function (resolve, reject, idbstore) {\n          var req = idbstore[\"delete\"](key);\n          req.onerror = eventRejectHandler(reject);\n          req.onsuccess = wrap(function () {\n            resolve(req.result);\n          });\n        });\n      }\n    },\n    clear: function clear() {\n      if (this.hook.deleting.subscribers.length) {\n        // People listens to when(\"deleting\") event. Must implement delete using Collection.delete() that will\n        // call the CRUD event. Only Collection.delete() will knows which objects that are actually deleted.\n        return this.toCollection()[\"delete\"]();\n      } else {\n        return this._idbstore(READWRITE, function (resolve, reject, idbstore) {\n          var req = idbstore.clear();\n          req.onerror = eventRejectHandler(reject);\n          req.onsuccess = wrap(function () {\n            resolve(req.result);\n          });\n        });\n      }\n    },\n    update: function update(keyOrObject, modifications) {\n      if (_typeof(modifications) !== 'object' || isArray(modifications)) throw new exceptions.InvalidArgument(\"Modifications must be an object.\");\n\n      if (_typeof(keyOrObject) === 'object' && !isArray(keyOrObject)) {\n        // object to modify. Also modify given object with the modifications:\n        keys(modifications).forEach(function (keyPath) {\n          setByKeyPath(keyOrObject, keyPath, modifications[keyPath]);\n        });\n        var key = getByKeyPath(keyOrObject, this.schema.primKey.keyPath);\n        if (key === undefined) return rejection(new exceptions.InvalidArgument(\"Given object does not contain its primary key\"));\n        return this.where(\":id\").equals(key).modify(modifications);\n      } else {\n        // key to modify\n        return this.where(\":id\").equals(keyOrObject).modify(modifications);\n      }\n    }\n  }); //\n  //\n  //\n  // Transaction Class\n  //\n  //\n  //\n\n  function Transaction(mode, storeNames, dbschema, parent) {\n    var _this = this; /// <summary>\n    ///    Transaction class. Represents a database transaction. All operations on db goes through a Transaction.\n    /// </summary>\n    /// <param name=\"mode\" type=\"String\">Any of \"readwrite\" or \"readonly\"</param>\n    /// <param name=\"storeNames\" type=\"Array\">Array of table names to operate on</param>\n\n\n    this.db = db;\n    this.mode = mode;\n    this.storeNames = storeNames;\n    this.idbtrans = null;\n    this.on = Events(this, \"complete\", \"error\", \"abort\");\n    this.parent = parent || null;\n    this.active = true;\n    this._reculock = 0;\n    this._blockedFuncs = [];\n    this._resolve = null;\n    this._reject = null;\n    this._waitingFor = null;\n    this._waitingQueue = null;\n    this._spinCount = 0; // Just for debugging waitFor()\n\n    this._completion = new Promise(function (resolve, reject) {\n      _this._resolve = resolve;\n      _this._reject = reject;\n    });\n\n    this._completion.then(function () {\n      _this.active = false;\n\n      _this.on.complete.fire();\n    }, function (e) {\n      var wasActive = _this.active;\n      _this.active = false;\n\n      _this.on.error.fire(e);\n\n      _this.parent ? _this.parent._reject(e) : wasActive && _this.idbtrans && _this.idbtrans.abort();\n      return rejection(e); // Indicate we actually DO NOT catch this error.\n    });\n  }\n\n  props(Transaction.prototype, {\n    //\n    // Transaction Protected Methods (not required by API users, but needed internally and eventually by dexie extensions)\n    //\n    _lock: function _lock() {\n      assert(!PSD.global); // Locking and unlocking reuires to be within a PSD scope.\n      // Temporary set all requests into a pending queue if they are called before database is ready.\n\n      ++this._reculock; // Recursive read/write lock pattern using PSD (Promise Specific Data) instead of TLS (Thread Local Storage)\n\n      if (this._reculock === 1 && !PSD.global) PSD.lockOwnerFor = this;\n      return this;\n    },\n    _unlock: function _unlock() {\n      assert(!PSD.global); // Locking and unlocking reuires to be within a PSD scope.\n\n      if (--this._reculock === 0) {\n        if (!PSD.global) PSD.lockOwnerFor = null;\n\n        while (this._blockedFuncs.length > 0 && !this._locked()) {\n          var fnAndPSD = this._blockedFuncs.shift();\n\n          try {\n            usePSD(fnAndPSD[1], fnAndPSD[0]);\n          } catch (e) {}\n        }\n      }\n\n      return this;\n    },\n    _locked: function _locked() {\n      // Checks if any write-lock is applied on this transaction.\n      // To simplify the Dexie API for extension implementations, we support recursive locks.\n      // This is accomplished by using \"Promise Specific Data\" (PSD).\n      // PSD data is bound to a Promise and any child Promise emitted through then() or resolve( new Promise() ).\n      // PSD is local to code executing on top of the call stacks of any of any code executed by Promise():\n      //         * callback given to the Promise() constructor  (function (resolve, reject){...})\n      //         * callbacks given to then()/catch()/finally() methods (function (value){...})\n      // If creating a new independant Promise instance from within a Promise call stack, the new Promise will derive the PSD from the call stack of the parent Promise.\n      // Derivation is done so that the inner PSD __proto__ points to the outer PSD.\n      // PSD.lockOwnerFor will point to current transaction object if the currently executing PSD scope owns the lock.\n      return this._reculock && PSD.lockOwnerFor !== this;\n    },\n    create: function create(idbtrans) {\n      var _this = this;\n\n      if (!this.mode) return this;\n      assert(!this.idbtrans);\n\n      if (!idbtrans && !idbdb) {\n        switch (dbOpenError && dbOpenError.name) {\n          case \"DatabaseClosedError\":\n            // Errors where it is no difference whether it was caused by the user operation or an earlier call to db.open()\n            throw new exceptions.DatabaseClosed(dbOpenError);\n\n          case \"MissingAPIError\":\n            // Errors where it is no difference whether it was caused by the user operation or an earlier call to db.open()\n            throw new exceptions.MissingAPI(dbOpenError.message, dbOpenError);\n\n          default:\n            // Make it clear that the user operation was not what caused the error - the error had occurred earlier on db.open()!\n            throw new exceptions.OpenFailed(dbOpenError);\n        }\n      }\n\n      if (!this.active) throw new exceptions.TransactionInactive();\n      assert(this._completion._state === null);\n      idbtrans = this.idbtrans = idbtrans || idbdb.transaction(safariMultiStoreFix(this.storeNames), this.mode);\n      idbtrans.onerror = wrap(function (ev) {\n        preventDefault(ev); // Prohibit default bubbling to window.error\n\n        _this._reject(idbtrans.error);\n      });\n      idbtrans.onabort = wrap(function (ev) {\n        preventDefault(ev);\n        _this.active && _this._reject(new exceptions.Abort(idbtrans.error));\n        _this.active = false;\n\n        _this.on(\"abort\").fire(ev);\n      });\n      idbtrans.oncomplete = wrap(function () {\n        _this.active = false;\n\n        _this._resolve();\n      });\n      return this;\n    },\n    _promise: function _promise(mode, fn, bWriteLock) {\n      var _this = this;\n\n      if (mode === READWRITE && this.mode !== READWRITE) return rejection(new exceptions.ReadOnly(\"Transaction is readonly\"));\n      if (!this.active) return rejection(new exceptions.TransactionInactive());\n\n      if (this._locked()) {\n        return new Promise(function (resolve, reject) {\n          _this._blockedFuncs.push([function () {\n            _this._promise(mode, fn, bWriteLock).then(resolve, reject);\n          }, PSD]);\n        });\n      } else if (bWriteLock) {\n        return newScope(function () {\n          var p = new Promise(function (resolve, reject) {\n            _this._lock();\n\n            var rv = fn(resolve, reject, _this);\n            if (rv && rv.then) rv.then(resolve, reject);\n          });\n          p[\"finally\"](function () {\n            return _this._unlock();\n          });\n          p._lib = true;\n          return p;\n        });\n      } else {\n        var p = new Promise(function (resolve, reject) {\n          var rv = fn(resolve, reject, _this);\n          if (rv && rv.then) rv.then(resolve, reject);\n        });\n        p._lib = true;\n        return p;\n      }\n    },\n    _root: function _root() {\n      return this.parent ? this.parent._root() : this;\n    },\n    waitFor: function waitFor(promise) {\n      // Always operate on the root transaction (in case this is a sub stransaction)\n      var root = this._root(); // For stability reasons, convert parameter to promise no matter what type is passed to waitFor().\n      // (We must be able to call .then() on it.)\n\n\n      promise = Promise.resolve(promise);\n\n      if (root._waitingFor) {\n        // Already called waitFor(). Wait for both to complete.\n        root._waitingFor = root._waitingFor.then(function () {\n          return promise;\n        });\n      } else {\n        // We're not in waiting state. Start waiting state.\n        root._waitingFor = promise;\n        root._waitingQueue = []; // Start interacting with indexedDB until promise completes:\n\n        var store = root.idbtrans.objectStore(root.storeNames[0]);\n\n        (function spin() {\n          ++root._spinCount; // For debugging only\n\n          while (root._waitingQueue.length) {\n            root._waitingQueue.shift()();\n          }\n\n          if (root._waitingFor) store.get(-Infinity).onsuccess = spin;\n        })();\n      }\n\n      var currentWaitPromise = root._waitingFor;\n      return new Promise(function (resolve, reject) {\n        promise.then(function (res) {\n          return root._waitingQueue.push(wrap(resolve.bind(null, res)));\n        }, function (err) {\n          return root._waitingQueue.push(wrap(reject.bind(null, err)));\n        })[\"finally\"](function () {\n          if (root._waitingFor === currentWaitPromise) {\n            // No one added a wait after us. Safe to stop the spinning.\n            root._waitingFor = null;\n          }\n        });\n      });\n    },\n    //\n    // Transaction Public Properties and Methods\n    //\n    abort: function abort() {\n      this.active && this._reject(new exceptions.Abort());\n      this.active = false;\n    },\n    tables: {\n      get: deprecated(\"Transaction.tables\", function () {\n        return allTables;\n      })\n    },\n    table: function table(name) {\n      var table = db.table(name); // Don't check that table is part of transaction. It must fail lazily!\n\n      return new Table(name, table.schema, this);\n    }\n  }); //\n  //\n  //\n  // WhereClause\n  //\n  //\n  //\n\n  function WhereClause(table, index, orCollection) {\n    /// <param name=\"table\" type=\"Table\"></param>\n    /// <param name=\"index\" type=\"String\" optional=\"true\"></param>\n    /// <param name=\"orCollection\" type=\"Collection\" optional=\"true\"></param>\n    this._ctx = {\n      table: table,\n      index: index === \":id\" ? null : index,\n      or: orCollection\n    };\n  }\n\n  props(WhereClause.prototype, function () {\n    // WhereClause private methods\n    function fail(collectionOrWhereClause, err, T) {\n      var collection = collectionOrWhereClause instanceof WhereClause ? new Collection(collectionOrWhereClause) : collectionOrWhereClause;\n      collection._ctx.error = T ? new T(err) : new TypeError(err);\n      return collection;\n    }\n\n    function emptyCollection(whereClause) {\n      return new Collection(whereClause, function () {\n        return IDBKeyRange.only(\"\");\n      }).limit(0);\n    }\n\n    function upperFactory(dir) {\n      return dir === \"next\" ? function (s) {\n        return s.toUpperCase();\n      } : function (s) {\n        return s.toLowerCase();\n      };\n    }\n\n    function lowerFactory(dir) {\n      return dir === \"next\" ? function (s) {\n        return s.toLowerCase();\n      } : function (s) {\n        return s.toUpperCase();\n      };\n    }\n\n    function nextCasing(key, lowerKey, upperNeedle, lowerNeedle, cmp, dir) {\n      var length = Math.min(key.length, lowerNeedle.length);\n      var llp = -1;\n\n      for (var i = 0; i < length; ++i) {\n        var lwrKeyChar = lowerKey[i];\n\n        if (lwrKeyChar !== lowerNeedle[i]) {\n          if (cmp(key[i], upperNeedle[i]) < 0) return key.substr(0, i) + upperNeedle[i] + upperNeedle.substr(i + 1);\n          if (cmp(key[i], lowerNeedle[i]) < 0) return key.substr(0, i) + lowerNeedle[i] + upperNeedle.substr(i + 1);\n          if (llp >= 0) return key.substr(0, llp) + lowerKey[llp] + upperNeedle.substr(llp + 1);\n          return null;\n        }\n\n        if (cmp(key[i], lwrKeyChar) < 0) llp = i;\n      }\n\n      if (length < lowerNeedle.length && dir === \"next\") return key + upperNeedle.substr(key.length);\n      if (length < key.length && dir === \"prev\") return key.substr(0, upperNeedle.length);\n      return llp < 0 ? null : key.substr(0, llp) + lowerNeedle[llp] + upperNeedle.substr(llp + 1);\n    }\n\n    function addIgnoreCaseAlgorithm(whereClause, match, needles, suffix) {\n      /// <param name=\"needles\" type=\"Array\" elementType=\"String\"></param>\n      var upper,\n          lower,\n          compare,\n          upperNeedles,\n          lowerNeedles,\n          direction,\n          nextKeySuffix,\n          needlesLen = needles.length;\n\n      if (!needles.every(function (s) {\n        return typeof s === 'string';\n      })) {\n        return fail(whereClause, STRING_EXPECTED);\n      }\n\n      function initDirection(dir) {\n        upper = upperFactory(dir);\n        lower = lowerFactory(dir);\n        compare = dir === \"next\" ? simpleCompare : simpleCompareReverse;\n        var needleBounds = needles.map(function (needle) {\n          return {\n            lower: lower(needle),\n            upper: upper(needle)\n          };\n        }).sort(function (a, b) {\n          return compare(a.lower, b.lower);\n        });\n        upperNeedles = needleBounds.map(function (nb) {\n          return nb.upper;\n        });\n        lowerNeedles = needleBounds.map(function (nb) {\n          return nb.lower;\n        });\n        direction = dir;\n        nextKeySuffix = dir === \"next\" ? \"\" : suffix;\n      }\n\n      initDirection(\"next\");\n      var c = new Collection(whereClause, function () {\n        return IDBKeyRange.bound(upperNeedles[0], lowerNeedles[needlesLen - 1] + suffix);\n      });\n\n      c._ondirectionchange = function (direction) {\n        // This event onlys occur before filter is called the first time.\n        initDirection(direction);\n      };\n\n      var firstPossibleNeedle = 0;\n\n      c._addAlgorithm(function (cursor, advance, resolve) {\n        /// <param name=\"cursor\" type=\"IDBCursor\"></param>\n        /// <param name=\"advance\" type=\"Function\"></param>\n        /// <param name=\"resolve\" type=\"Function\"></param>\n        var key = cursor.key;\n        if (typeof key !== 'string') return false;\n        var lowerKey = lower(key);\n\n        if (match(lowerKey, lowerNeedles, firstPossibleNeedle)) {\n          return true;\n        } else {\n          var lowestPossibleCasing = null;\n\n          for (var i = firstPossibleNeedle; i < needlesLen; ++i) {\n            var casing = nextCasing(key, lowerKey, upperNeedles[i], lowerNeedles[i], compare, direction);\n            if (casing === null && lowestPossibleCasing === null) firstPossibleNeedle = i + 1;else if (lowestPossibleCasing === null || compare(lowestPossibleCasing, casing) > 0) {\n              lowestPossibleCasing = casing;\n            }\n          }\n\n          if (lowestPossibleCasing !== null) {\n            advance(function () {\n              cursor[\"continue\"](lowestPossibleCasing + nextKeySuffix);\n            });\n          } else {\n            advance(resolve);\n          }\n\n          return false;\n        }\n      });\n\n      return c;\n    } //\n    // WhereClause public methods\n    //\n\n\n    return {\n      between: function between(lower, upper, includeLower, includeUpper) {\n        /// <summary>\n        ///     Filter out records whose where-field lays between given lower and upper values. Applies to Strings, Numbers and Dates.\n        /// </summary>\n        /// <param name=\"lower\"></param>\n        /// <param name=\"upper\"></param>\n        /// <param name=\"includeLower\" optional=\"true\">Whether items that equals lower should be included. Default true.</param>\n        /// <param name=\"includeUpper\" optional=\"true\">Whether items that equals upper should be included. Default false.</param>\n        /// <returns type=\"Collection\"></returns>\n        includeLower = includeLower !== false; // Default to true\n\n        includeUpper = includeUpper === true; // Default to false\n\n        try {\n          if (cmp(lower, upper) > 0 || cmp(lower, upper) === 0 && (includeLower || includeUpper) && !(includeLower && includeUpper)) return emptyCollection(this); // Workaround for idiotic W3C Specification that DataError must be thrown if lower > upper. The natural result would be to return an empty collection.\n\n          return new Collection(this, function () {\n            return IDBKeyRange.bound(lower, upper, !includeLower, !includeUpper);\n          });\n        } catch (e) {\n          return fail(this, INVALID_KEY_ARGUMENT);\n        }\n      },\n      equals: function equals(value) {\n        return new Collection(this, function () {\n          return IDBKeyRange.only(value);\n        });\n      },\n      above: function above(value) {\n        return new Collection(this, function () {\n          return IDBKeyRange.lowerBound(value, true);\n        });\n      },\n      aboveOrEqual: function aboveOrEqual(value) {\n        return new Collection(this, function () {\n          return IDBKeyRange.lowerBound(value);\n        });\n      },\n      below: function below(value) {\n        return new Collection(this, function () {\n          return IDBKeyRange.upperBound(value, true);\n        });\n      },\n      belowOrEqual: function belowOrEqual(value) {\n        return new Collection(this, function () {\n          return IDBKeyRange.upperBound(value);\n        });\n      },\n      startsWith: function startsWith(str) {\n        /// <param name=\"str\" type=\"String\"></param>\n        if (typeof str !== 'string') return fail(this, STRING_EXPECTED);\n        return this.between(str, str + maxString, true, true);\n      },\n      startsWithIgnoreCase: function startsWithIgnoreCase(str) {\n        /// <param name=\"str\" type=\"String\"></param>\n        if (str === \"\") return this.startsWith(str);\n        return addIgnoreCaseAlgorithm(this, function (x, a) {\n          return x.indexOf(a[0]) === 0;\n        }, [str], maxString);\n      },\n      equalsIgnoreCase: function equalsIgnoreCase(str) {\n        /// <param name=\"str\" type=\"String\"></param>\n        return addIgnoreCaseAlgorithm(this, function (x, a) {\n          return x === a[0];\n        }, [str], \"\");\n      },\n      anyOfIgnoreCase: function anyOfIgnoreCase() {\n        var set = getArrayOf.apply(NO_CHAR_ARRAY, arguments);\n        if (set.length === 0) return emptyCollection(this);\n        return addIgnoreCaseAlgorithm(this, function (x, a) {\n          return a.indexOf(x) !== -1;\n        }, set, \"\");\n      },\n      startsWithAnyOfIgnoreCase: function startsWithAnyOfIgnoreCase() {\n        var set = getArrayOf.apply(NO_CHAR_ARRAY, arguments);\n        if (set.length === 0) return emptyCollection(this);\n        return addIgnoreCaseAlgorithm(this, function (x, a) {\n          return a.some(function (n) {\n            return x.indexOf(n) === 0;\n          });\n        }, set, maxString);\n      },\n      anyOf: function anyOf() {\n        var set = getArrayOf.apply(NO_CHAR_ARRAY, arguments);\n        var compare = ascending;\n\n        try {\n          set.sort(compare);\n        } catch (e) {\n          return fail(this, INVALID_KEY_ARGUMENT);\n        }\n\n        if (set.length === 0) return emptyCollection(this);\n        var c = new Collection(this, function () {\n          return IDBKeyRange.bound(set[0], set[set.length - 1]);\n        });\n\n        c._ondirectionchange = function (direction) {\n          compare = direction === \"next\" ? ascending : descending;\n          set.sort(compare);\n        };\n\n        var i = 0;\n\n        c._addAlgorithm(function (cursor, advance, resolve) {\n          var key = cursor.key;\n\n          while (compare(key, set[i]) > 0) {\n            // The cursor has passed beyond this key. Check next.\n            ++i;\n\n            if (i === set.length) {\n              // There is no next. Stop searching.\n              advance(resolve);\n              return false;\n            }\n          }\n\n          if (compare(key, set[i]) === 0) {\n            // The current cursor value should be included and we should continue a single step in case next item has the same key or possibly our next key in set.\n            return true;\n          } else {\n            // cursor.key not yet at set[i]. Forward cursor to the next key to hunt for.\n            advance(function () {\n              cursor[\"continue\"](set[i]);\n            });\n            return false;\n          }\n        });\n\n        return c;\n      },\n      notEqual: function notEqual(value) {\n        return this.inAnyRange([[minKey, value], [value, maxKey]], {\n          includeLowers: false,\n          includeUppers: false\n        });\n      },\n      noneOf: function noneOf() {\n        var set = getArrayOf.apply(NO_CHAR_ARRAY, arguments);\n        if (set.length === 0) return new Collection(this); // Return entire collection.\n\n        try {\n          set.sort(ascending);\n        } catch (e) {\n          return fail(this, INVALID_KEY_ARGUMENT);\n        } // Transform [\"a\",\"b\",\"c\"] to a set of ranges for between/above/below: [[minKey,\"a\"], [\"a\",\"b\"], [\"b\",\"c\"], [\"c\",maxKey]]\n\n\n        var ranges = set.reduce(function (res, val) {\n          return res ? res.concat([[res[res.length - 1][1], val]]) : [[minKey, val]];\n        }, null);\n        ranges.push([set[set.length - 1], maxKey]);\n        return this.inAnyRange(ranges, {\n          includeLowers: false,\n          includeUppers: false\n        });\n      },\n\n      /** Filter out values withing given set of ranges.\n      * Example, give children and elders a rebate of 50%:\n      *\n      *   db.friends.where('age').inAnyRange([[0,18],[65,Infinity]]).modify({Rebate: 1/2});\n      *\n      * @param {(string|number|Date|Array)[][]} ranges\n      * @param {{includeLowers: boolean, includeUppers: boolean}} options\n      */\n      inAnyRange: function inAnyRange(ranges, options) {\n        if (ranges.length === 0) return emptyCollection(this);\n\n        if (!ranges.every(function (range) {\n          return range[0] !== undefined && range[1] !== undefined && ascending(range[0], range[1]) <= 0;\n        })) {\n          return fail(this, \"First argument to inAnyRange() must be an Array of two-value Arrays [lower,upper] where upper must not be lower than lower\", exceptions.InvalidArgument);\n        }\n\n        var includeLowers = !options || options.includeLowers !== false; // Default to true\n\n        var includeUppers = options && options.includeUppers === true; // Default to false\n\n        function addRange(ranges, newRange) {\n          for (var i = 0, l = ranges.length; i < l; ++i) {\n            var range = ranges[i];\n\n            if (cmp(newRange[0], range[1]) < 0 && cmp(newRange[1], range[0]) > 0) {\n              range[0] = min(range[0], newRange[0]);\n              range[1] = max(range[1], newRange[1]);\n              break;\n            }\n          }\n\n          if (i === l) ranges.push(newRange);\n          return ranges;\n        }\n\n        var sortDirection = ascending;\n\n        function rangeSorter(a, b) {\n          return sortDirection(a[0], b[0]);\n        } // Join overlapping ranges\n\n\n        var set;\n\n        try {\n          set = ranges.reduce(addRange, []);\n          set.sort(rangeSorter);\n        } catch (ex) {\n          return fail(this, INVALID_KEY_ARGUMENT);\n        }\n\n        var i = 0;\n        var keyIsBeyondCurrentEntry = includeUppers ? function (key) {\n          return ascending(key, set[i][1]) > 0;\n        } : function (key) {\n          return ascending(key, set[i][1]) >= 0;\n        };\n        var keyIsBeforeCurrentEntry = includeLowers ? function (key) {\n          return descending(key, set[i][0]) > 0;\n        } : function (key) {\n          return descending(key, set[i][0]) >= 0;\n        };\n\n        function keyWithinCurrentRange(key) {\n          return !keyIsBeyondCurrentEntry(key) && !keyIsBeforeCurrentEntry(key);\n        }\n\n        var checkKey = keyIsBeyondCurrentEntry;\n        var c = new Collection(this, function () {\n          return IDBKeyRange.bound(set[0][0], set[set.length - 1][1], !includeLowers, !includeUppers);\n        });\n\n        c._ondirectionchange = function (direction) {\n          if (direction === \"next\") {\n            checkKey = keyIsBeyondCurrentEntry;\n            sortDirection = ascending;\n          } else {\n            checkKey = keyIsBeforeCurrentEntry;\n            sortDirection = descending;\n          }\n\n          set.sort(rangeSorter);\n        };\n\n        c._addAlgorithm(function (cursor, advance, resolve) {\n          var key = cursor.key;\n\n          while (checkKey(key)) {\n            // The cursor has passed beyond this key. Check next.\n            ++i;\n\n            if (i === set.length) {\n              // There is no next. Stop searching.\n              advance(resolve);\n              return false;\n            }\n          }\n\n          if (keyWithinCurrentRange(key)) {\n            // The current cursor value should be included and we should continue a single step in case next item has the same key or possibly our next key in set.\n            return true;\n          } else if (cmp(key, set[i][1]) === 0 || cmp(key, set[i][0]) === 0) {\n            // includeUpper or includeLower is false so keyWithinCurrentRange() returns false even though we are at range border.\n            // Continue to next key but don't include this one.\n            return false;\n          } else {\n            // cursor.key not yet at set[i]. Forward cursor to the next key to hunt for.\n            advance(function () {\n              if (sortDirection === ascending) cursor[\"continue\"](set[i][0]);else cursor[\"continue\"](set[i][1]);\n            });\n            return false;\n          }\n        });\n\n        return c;\n      },\n      startsWithAnyOf: function startsWithAnyOf() {\n        var set = getArrayOf.apply(NO_CHAR_ARRAY, arguments);\n\n        if (!set.every(function (s) {\n          return typeof s === 'string';\n        })) {\n          return fail(this, \"startsWithAnyOf() only works with strings\");\n        }\n\n        if (set.length === 0) return emptyCollection(this);\n        return this.inAnyRange(set.map(function (str) {\n          return [str, str + maxString];\n        }));\n      }\n    };\n  }); //\n  //\n  //\n  // Collection Class\n  //\n  //\n  //\n\n  function Collection(whereClause, keyRangeGenerator) {\n    /// <summary>\n    ///\n    /// </summary>\n    /// <param name=\"whereClause\" type=\"WhereClause\">Where clause instance</param>\n    /// <param name=\"keyRangeGenerator\" value=\"function(){ return IDBKeyRange.bound(0,1);}\" optional=\"true\"></param>\n    var keyRange = null,\n        error = null;\n    if (keyRangeGenerator) try {\n      keyRange = keyRangeGenerator();\n    } catch (ex) {\n      error = ex;\n    }\n    var whereCtx = whereClause._ctx,\n        table = whereCtx.table;\n    this._ctx = {\n      table: table,\n      index: whereCtx.index,\n      isPrimKey: !whereCtx.index || table.schema.primKey.keyPath && whereCtx.index === table.schema.primKey.name,\n      range: keyRange,\n      keysOnly: false,\n      dir: \"next\",\n      unique: \"\",\n      algorithm: null,\n      filter: null,\n      replayFilter: null,\n      justLimit: true,\n      isMatch: null,\n      offset: 0,\n      limit: Infinity,\n      error: error,\n      or: whereCtx.or,\n      valueMapper: table.hook.reading.fire\n    };\n  }\n\n  function isPlainKeyRange(ctx, ignoreLimitFilter) {\n    return !(ctx.filter || ctx.algorithm || ctx.or) && (ignoreLimitFilter ? ctx.justLimit : !ctx.replayFilter);\n  }\n\n  props(Collection.prototype, function () {\n    //\n    // Collection Private Functions\n    //\n    function addFilter(ctx, fn) {\n      ctx.filter = combine(ctx.filter, fn);\n    }\n\n    function addReplayFilter(ctx, factory, isLimitFilter) {\n      var curr = ctx.replayFilter;\n      ctx.replayFilter = curr ? function () {\n        return combine(curr(), factory());\n      } : factory;\n      ctx.justLimit = isLimitFilter && !curr;\n    }\n\n    function addMatchFilter(ctx, fn) {\n      ctx.isMatch = combine(ctx.isMatch, fn);\n    }\n    /** @param ctx {\n     *      isPrimKey: boolean,\n     *      table: Table,\n     *      index: string\n     * }\n     * @param store IDBObjectStore\n     **/\n\n\n    function getIndexOrStore(ctx, store) {\n      if (ctx.isPrimKey) return store;\n      var indexSpec = ctx.table.schema.idxByName[ctx.index];\n      if (!indexSpec) throw new exceptions.Schema(\"KeyPath \" + ctx.index + \" on object store \" + store.name + \" is not indexed\");\n      return store.index(indexSpec.name);\n    }\n    /** @param ctx {\n     *      isPrimKey: boolean,\n     *      table: Table,\n     *      index: string,\n     *      keysOnly: boolean,\n     *      range?: IDBKeyRange,\n     *      dir: \"next\" | \"prev\"\n     * }\n     */\n\n\n    function openCursor(ctx, store) {\n      var idxOrStore = getIndexOrStore(ctx, store);\n      return ctx.keysOnly && 'openKeyCursor' in idxOrStore ? idxOrStore.openKeyCursor(ctx.range || null, ctx.dir + ctx.unique) : idxOrStore.openCursor(ctx.range || null, ctx.dir + ctx.unique);\n    }\n\n    function iter(ctx, fn, resolve, reject, idbstore) {\n      var filter = ctx.replayFilter ? combine(ctx.filter, ctx.replayFilter()) : ctx.filter;\n\n      if (!ctx.or) {\n        iterate(openCursor(ctx, idbstore), combine(ctx.algorithm, filter), fn, resolve, reject, !ctx.keysOnly && ctx.valueMapper);\n      } else (function () {\n        var set = {};\n        var resolved = 0;\n\n        function resolveboth() {\n          if (++resolved === 2) resolve(); // Seems like we just support or btwn max 2 expressions, but there are no limit because we do recursion.\n        }\n\n        function union(item, cursor, advance) {\n          if (!filter || filter(cursor, advance, resolveboth, reject)) {\n            var primaryKey = cursor.primaryKey;\n            var key = '' + primaryKey;\n            if (key === '[object ArrayBuffer]') key = '' + new Uint8Array(primaryKey);\n\n            if (!hasOwn(set, key)) {\n              set[key] = true;\n              fn(item, cursor, advance);\n            }\n          }\n        }\n\n        ctx.or._iterate(union, resolveboth, reject, idbstore);\n\n        iterate(openCursor(ctx, idbstore), ctx.algorithm, union, resolveboth, reject, !ctx.keysOnly && ctx.valueMapper);\n      })();\n    }\n\n    return {\n      //\n      // Collection Protected Functions\n      //\n      _read: function _read(fn, cb) {\n        var ctx = this._ctx;\n        return ctx.error ? ctx.table._trans(null, rejection.bind(null, ctx.error)) : ctx.table._idbstore(READONLY, fn).then(cb);\n      },\n      _write: function _write(fn) {\n        var ctx = this._ctx;\n        return ctx.error ? ctx.table._trans(null, rejection.bind(null, ctx.error)) : ctx.table._idbstore(READWRITE, fn, \"locked\"); // When doing write operations on collections, always lock the operation so that upcoming operations gets queued.\n      },\n      _addAlgorithm: function _addAlgorithm(fn) {\n        var ctx = this._ctx;\n        ctx.algorithm = combine(ctx.algorithm, fn);\n      },\n      _iterate: function _iterate(fn, resolve, reject, idbstore) {\n        return iter(this._ctx, fn, resolve, reject, idbstore);\n      },\n      clone: function clone(props$$1) {\n        var rv = Object.create(this.constructor.prototype),\n            ctx = Object.create(this._ctx);\n        if (props$$1) extend(ctx, props$$1);\n        rv._ctx = ctx;\n        return rv;\n      },\n      raw: function raw() {\n        this._ctx.valueMapper = null;\n        return this;\n      },\n      //\n      // Collection Public methods\n      //\n      each: function each(fn) {\n        var ctx = this._ctx;\n        return this._read(function (resolve, reject, idbstore) {\n          iter(ctx, fn, resolve, reject, idbstore);\n        });\n      },\n      count: function count(cb) {\n        var ctx = this._ctx;\n\n        if (isPlainKeyRange(ctx, true)) {\n          // This is a plain key range. We can use the count() method if the index.\n          return this._read(function (resolve, reject, idbstore) {\n            var idx = getIndexOrStore(ctx, idbstore);\n            var req = ctx.range ? idx.count(ctx.range) : idx.count();\n            req.onerror = eventRejectHandler(reject);\n\n            req.onsuccess = function (e) {\n              resolve(Math.min(e.target.result, ctx.limit));\n            };\n          }, cb);\n        } else {\n          // Algorithms, filters or expressions are applied. Need to count manually.\n          var count = 0;\n          return this._read(function (resolve, reject, idbstore) {\n            iter(ctx, function () {\n              ++count;\n              return false;\n            }, function () {\n              resolve(count);\n            }, reject, idbstore);\n          }, cb);\n        }\n      },\n      sortBy: function sortBy(keyPath, cb) {\n        /// <param name=\"keyPath\" type=\"String\"></param>\n        var parts = keyPath.split('.').reverse(),\n            lastPart = parts[0],\n            lastIndex = parts.length - 1;\n\n        function getval(obj, i) {\n          if (i) return getval(obj[parts[i]], i - 1);\n          return obj[lastPart];\n        }\n\n        var order = this._ctx.dir === \"next\" ? 1 : -1;\n\n        function sorter(a, b) {\n          var aVal = getval(a, lastIndex),\n              bVal = getval(b, lastIndex);\n          return aVal < bVal ? -order : aVal > bVal ? order : 0;\n        }\n\n        return this.toArray(function (a) {\n          return a.sort(sorter);\n        }).then(cb);\n      },\n      toArray: function toArray(cb) {\n        var ctx = this._ctx;\n        return this._read(function (resolve, reject, idbstore) {\n          if (hasGetAll && ctx.dir === 'next' && isPlainKeyRange(ctx, true) && ctx.limit > 0) {\n            // Special optimation if we could use IDBObjectStore.getAll() or\n            // IDBKeyRange.getAll():\n            var readingHook = ctx.table.hook.reading.fire;\n            var idxOrStore = getIndexOrStore(ctx, idbstore);\n            var req = ctx.limit < Infinity ? idxOrStore.getAll(ctx.range, ctx.limit) : idxOrStore.getAll(ctx.range);\n            req.onerror = eventRejectHandler(reject);\n            req.onsuccess = readingHook === mirror ? eventSuccessHandler(resolve) : eventSuccessHandler(function (res) {\n              try {\n                resolve(res.map(readingHook));\n              } catch (e) {\n                reject(e);\n              }\n            });\n          } else {\n            // Getting array through a cursor.\n            var a = [];\n            iter(ctx, function (item) {\n              a.push(item);\n            }, function arrayComplete() {\n              resolve(a);\n            }, reject, idbstore);\n          }\n        }, cb);\n      },\n      offset: function offset(_offset2) {\n        var ctx = this._ctx;\n        if (_offset2 <= 0) return this;\n        ctx.offset += _offset2; // For count()\n\n        if (isPlainKeyRange(ctx)) {\n          addReplayFilter(ctx, function () {\n            var offsetLeft = _offset2;\n            return function (cursor, advance) {\n              if (offsetLeft === 0) return true;\n\n              if (offsetLeft === 1) {\n                --offsetLeft;\n                return false;\n              }\n\n              advance(function () {\n                cursor.advance(offsetLeft);\n                offsetLeft = 0;\n              });\n              return false;\n            };\n          });\n        } else {\n          addReplayFilter(ctx, function () {\n            var offsetLeft = _offset2;\n            return function () {\n              return --offsetLeft < 0;\n            };\n          });\n        }\n\n        return this;\n      },\n      limit: function limit(numRows) {\n        this._ctx.limit = Math.min(this._ctx.limit, numRows); // For count()\n\n        addReplayFilter(this._ctx, function () {\n          var rowsLeft = numRows;\n          return function (cursor, advance, resolve) {\n            if (--rowsLeft <= 0) advance(resolve); // Stop after this item has been included\n\n            return rowsLeft >= 0; // If numRows is already below 0, return false because then 0 was passed to numRows initially. Otherwise we wouldnt come here.\n          };\n        }, true);\n        return this;\n      },\n      until: function until(filterFunction, bIncludeStopEntry) {\n        addFilter(this._ctx, function (cursor, advance, resolve) {\n          if (filterFunction(cursor.value)) {\n            advance(resolve);\n            return bIncludeStopEntry;\n          } else {\n            return true;\n          }\n        });\n        return this;\n      },\n      first: function first(cb) {\n        return this.limit(1).toArray(function (a) {\n          return a[0];\n        }).then(cb);\n      },\n      last: function last(cb) {\n        return this.reverse().first(cb);\n      },\n      filter: function filter(filterFunction) {\n        /// <param name=\"jsFunctionFilter\" type=\"Function\">function(val){return true/false}</param>\n        addFilter(this._ctx, function (cursor) {\n          return filterFunction(cursor.value);\n        }); // match filters not used in Dexie.js but can be used by 3rd part libraries to test a\n        // collection for a match without querying DB. Used by Dexie.Observable.\n\n        addMatchFilter(this._ctx, filterFunction);\n        return this;\n      },\n      and: function and(filterFunction) {\n        return this.filter(filterFunction);\n      },\n      or: function or(indexName) {\n        return new WhereClause(this._ctx.table, indexName, this);\n      },\n      reverse: function reverse() {\n        this._ctx.dir = this._ctx.dir === \"prev\" ? \"next\" : \"prev\";\n        if (this._ondirectionchange) this._ondirectionchange(this._ctx.dir);\n        return this;\n      },\n      desc: function desc() {\n        return this.reverse();\n      },\n      eachKey: function eachKey(cb) {\n        var ctx = this._ctx;\n        ctx.keysOnly = !ctx.isMatch;\n        return this.each(function (val, cursor) {\n          cb(cursor.key, cursor);\n        });\n      },\n      eachUniqueKey: function eachUniqueKey(cb) {\n        this._ctx.unique = \"unique\";\n        return this.eachKey(cb);\n      },\n      eachPrimaryKey: function eachPrimaryKey(cb) {\n        var ctx = this._ctx;\n        ctx.keysOnly = !ctx.isMatch;\n        return this.each(function (val, cursor) {\n          cb(cursor.primaryKey, cursor);\n        });\n      },\n      keys: function keys(cb) {\n        var ctx = this._ctx;\n        ctx.keysOnly = !ctx.isMatch;\n        var a = [];\n        return this.each(function (item, cursor) {\n          a.push(cursor.key);\n        }).then(function () {\n          return a;\n        }).then(cb);\n      },\n      primaryKeys: function primaryKeys(cb) {\n        var ctx = this._ctx;\n\n        if (hasGetAll && ctx.dir === 'next' && isPlainKeyRange(ctx, true) && ctx.limit > 0) {\n          // Special optimation if we could use IDBObjectStore.getAllKeys() or\n          // IDBKeyRange.getAllKeys():\n          return this._read(function (resolve, reject, idbstore) {\n            var idxOrStore = getIndexOrStore(ctx, idbstore);\n            var req = ctx.limit < Infinity ? idxOrStore.getAllKeys(ctx.range, ctx.limit) : idxOrStore.getAllKeys(ctx.range);\n            req.onerror = eventRejectHandler(reject);\n            req.onsuccess = eventSuccessHandler(resolve);\n          }).then(cb);\n        }\n\n        ctx.keysOnly = !ctx.isMatch;\n        var a = [];\n        return this.each(function (item, cursor) {\n          a.push(cursor.primaryKey);\n        }).then(function () {\n          return a;\n        }).then(cb);\n      },\n      uniqueKeys: function uniqueKeys(cb) {\n        this._ctx.unique = \"unique\";\n        return this.keys(cb);\n      },\n      firstKey: function firstKey(cb) {\n        return this.limit(1).keys(function (a) {\n          return a[0];\n        }).then(cb);\n      },\n      lastKey: function lastKey(cb) {\n        return this.reverse().firstKey(cb);\n      },\n      distinct: function distinct() {\n        var ctx = this._ctx,\n            idx = ctx.index && ctx.table.schema.idxByName[ctx.index];\n        if (!idx || !idx.multi) return this; // distinct() only makes differencies on multiEntry indexes.\n\n        var set = {};\n        addFilter(this._ctx, function (cursor) {\n          var strKey = cursor.primaryKey.toString(); // Converts any Date to String, String to String, Number to String and Array to comma-separated string\n\n          var found = hasOwn(set, strKey);\n          set[strKey] = true;\n          return !found;\n        });\n        return this;\n      },\n      //\n      // Methods that mutate storage\n      //\n      modify: function modify(changes) {\n        var self = this,\n            ctx = this._ctx,\n            hook = ctx.table.hook,\n            updatingHook = hook.updating.fire,\n            deletingHook = hook.deleting.fire;\n        return this._write(function (resolve, reject, idbstore, trans) {\n          var modifyer;\n\n          if (typeof changes === 'function') {\n            // Changes is a function that may update, add or delete propterties or even require a deletion the object itself (delete this.item)\n            if (updatingHook === nop && deletingHook === nop) {\n              // Noone cares about what is being changed. Just let the modifier function be the given argument as is.\n              modifyer = changes;\n            } else {\n              // People want to know exactly what is being modified or deleted.\n              // Let modifyer be a proxy function that finds out what changes the caller is actually doing\n              // and call the hooks accordingly!\n              modifyer = function modifyer(item) {\n                var origItem = deepClone(item); // Clone the item first so we can compare laters.\n\n                if (changes.call(this, item, this) === false) return false; // Call the real modifyer function (If it returns false explicitely, it means it dont want to modify anyting on this object)\n\n                if (!hasOwn(this, \"value\")) {\n                  // The real modifyer function requests a deletion of the object. Inform the deletingHook that a deletion is taking place.\n                  deletingHook.call(this, this.primKey, item, trans);\n                } else {\n                  // No deletion. Check what was changed\n                  var objectDiff = getObjectDiff(origItem, this.value);\n                  var additionalChanges = updatingHook.call(this, objectDiff, this.primKey, origItem, trans);\n\n                  if (additionalChanges) {\n                    // Hook want to apply additional modifications. Make sure to fullfill the will of the hook.\n                    item = this.value;\n                    keys(additionalChanges).forEach(function (keyPath) {\n                      setByKeyPath(item, keyPath, additionalChanges[keyPath]); // Adding {keyPath: undefined} means that the keyPath should be deleted. Handled by setByKeyPath\n                    });\n                  }\n                }\n              };\n            }\n          } else if (updatingHook === nop) {\n            // changes is a set of {keyPath: value} and no one is listening to the updating hook.\n            var keyPaths = keys(changes);\n            var numKeys = keyPaths.length;\n\n            modifyer = function modifyer(item) {\n              var anythingModified = false;\n\n              for (var i = 0; i < numKeys; ++i) {\n                var keyPath = keyPaths[i],\n                    val = changes[keyPath];\n\n                if (getByKeyPath(item, keyPath) !== val) {\n                  setByKeyPath(item, keyPath, val); // Adding {keyPath: undefined} means that the keyPath should be deleted. Handled by setByKeyPath\n\n                  anythingModified = true;\n                }\n              }\n\n              return anythingModified;\n            };\n          } else {\n            // changes is a set of {keyPath: value} and people are listening to the updating hook so we need to call it and\n            // allow it to add additional modifications to make.\n            var origChanges = changes;\n            changes = shallowClone(origChanges); // Let's work with a clone of the changes keyPath/value set so that we can restore it in case a hook extends it.\n\n            modifyer = function modifyer(item) {\n              var anythingModified = false;\n              var additionalChanges = updatingHook.call(this, changes, this.primKey, deepClone(item), trans);\n              if (additionalChanges) extend(changes, additionalChanges);\n              keys(changes).forEach(function (keyPath) {\n                var val = changes[keyPath];\n\n                if (getByKeyPath(item, keyPath) !== val) {\n                  setByKeyPath(item, keyPath, val);\n                  anythingModified = true;\n                }\n              });\n              if (additionalChanges) changes = shallowClone(origChanges); // Restore original changes for next iteration\n\n              return anythingModified;\n            };\n          }\n\n          var count = 0;\n          var successCount = 0;\n          var iterationComplete = false;\n          var failures = [];\n          var failKeys = [];\n          var currentKey = null;\n\n          function modifyItem(item, cursor) {\n            currentKey = cursor.primaryKey;\n            var thisContext = {\n              primKey: cursor.primaryKey,\n              value: item,\n              onsuccess: null,\n              onerror: null\n            };\n\n            function onerror(e) {\n              failures.push(e);\n              failKeys.push(thisContext.primKey);\n              checkFinished();\n              return true; // Catch these errors and let a final rejection decide whether or not to abort entire transaction\n            }\n\n            if (modifyer.call(thisContext, item, thisContext) !== false) {\n              var bDelete = !hasOwn(thisContext, \"value\");\n              ++count;\n              tryCatch(function () {\n                var req = bDelete ? cursor[\"delete\"]() : cursor.update(thisContext.value);\n                req._hookCtx = thisContext;\n                req.onerror = hookedEventRejectHandler(onerror);\n                req.onsuccess = hookedEventSuccessHandler(function () {\n                  ++successCount;\n                  checkFinished();\n                });\n              }, onerror);\n            } else if (thisContext.onsuccess) {\n              // Hook will expect either onerror or onsuccess to always be called!\n              thisContext.onsuccess(thisContext.value);\n            }\n          }\n\n          function doReject(e) {\n            if (e) {\n              failures.push(e);\n              failKeys.push(currentKey);\n            }\n\n            return reject(new ModifyError(\"Error modifying one or more objects\", failures, successCount, failKeys));\n          }\n\n          function checkFinished() {\n            if (iterationComplete && successCount + failures.length === count) {\n              if (failures.length > 0) doReject();else resolve(successCount);\n            }\n          }\n\n          self.clone().raw()._iterate(modifyItem, function () {\n            iterationComplete = true;\n            checkFinished();\n          }, doReject, idbstore);\n        });\n      },\n      'delete': function _delete() {\n        var _this = this;\n\n        var ctx = this._ctx,\n            range = ctx.range,\n            deletingHook = ctx.table.hook.deleting.fire,\n            hasDeleteHook = deletingHook !== nop;\n\n        if (!hasDeleteHook && isPlainKeyRange(ctx) && (ctx.isPrimKey && !hangsOnDeleteLargeKeyRange || !range)) {\n          // May use IDBObjectStore.delete(IDBKeyRange) in this case (Issue #208)\n          // For chromium, this is the way most optimized version.\n          // For IE/Edge, this could hang the indexedDB engine and make operating system instable\n          // (https://gist.github.com/dfahlander/5a39328f029de18222cf2125d56c38f7)\n          return this._write(function (resolve, reject, idbstore) {\n            // Our API contract is to return a count of deleted items, so we have to count() before delete().\n            var onerror = eventRejectHandler(reject),\n                countReq = range ? idbstore.count(range) : idbstore.count();\n            countReq.onerror = onerror;\n\n            countReq.onsuccess = function () {\n              var count = countReq.result;\n              tryCatch(function () {\n                var delReq = range ? idbstore[\"delete\"](range) : idbstore.clear();\n                delReq.onerror = onerror;\n\n                delReq.onsuccess = function () {\n                  return resolve(count);\n                };\n              }, function (err) {\n                return reject(err);\n              });\n            };\n          });\n        } // Default version to use when collection is not a vanilla IDBKeyRange on the primary key.\n        // Divide into chunks to not starve RAM.\n        // If has delete hook, we will have to collect not just keys but also objects, so it will use\n        // more memory and need lower chunk size.\n\n\n        var CHUNKSIZE = hasDeleteHook ? 2000 : 10000;\n        return this._write(function (resolve, reject, idbstore, trans) {\n          var totalCount = 0; // Clone collection and change its table and set a limit of CHUNKSIZE on the cloned Collection instance.\n\n          var collection = _this.clone({\n            keysOnly: !ctx.isMatch && !hasDeleteHook\n          }) // load just keys (unless filter() or and() or deleteHook has subscribers)\n          .distinct() // In case multiEntry is used, never delete same key twice because resulting count\n          .limit(CHUNKSIZE).raw(); // Don't filter through reading-hooks (like mapped classes etc)\n\n\n          var keysOrTuples = []; // We're gonna do things on as many chunks that are needed.\n          // Use recursion of nextChunk function:\n\n          var nextChunk = function nextChunk() {\n            return collection.each(hasDeleteHook ? function (val, cursor) {\n              // Somebody subscribes to hook('deleting'). Collect all primary keys and their values,\n              // so that the hook can be called with its values in bulkDelete().\n              keysOrTuples.push([cursor.primaryKey, cursor.value]);\n            } : function (val, cursor) {\n              // No one subscribes to hook('deleting'). Collect only primary keys:\n              keysOrTuples.push(cursor.primaryKey);\n            }).then(function () {\n              // Chromium deletes faster when doing it in sort order.\n              hasDeleteHook ? keysOrTuples.sort(function (a, b) {\n                return ascending(a[0], b[0]);\n              }) : keysOrTuples.sort(ascending);\n              return _bulkDelete(idbstore, trans, keysOrTuples, hasDeleteHook, deletingHook);\n            }).then(function () {\n              var count = keysOrTuples.length;\n              totalCount += count;\n              keysOrTuples = [];\n              return count < CHUNKSIZE ? totalCount : nextChunk();\n            });\n          };\n\n          resolve(nextChunk());\n        });\n      }\n    };\n  }); //\n  //\n  //\n  // ------------------------- Help functions ---------------------------\n  //\n  //\n  //\n\n  function lowerVersionFirst(a, b) {\n    return a._cfg.version - b._cfg.version;\n  }\n\n  function setApiOnPlace(objs, tableNames, dbschema) {\n    tableNames.forEach(function (tableName) {\n      var schema = dbschema[tableName];\n      objs.forEach(function (obj) {\n        if (!(tableName in obj)) {\n          if (obj === Transaction.prototype || obj instanceof Transaction) {\n            // obj is a Transaction prototype (or prototype of a subclass to Transaction)\n            // Make the API a getter that returns this.table(tableName)\n            setProp(obj, tableName, {\n              get: function get() {\n                return this.table(tableName);\n              }\n            });\n          } else {\n            // Table will not be bound to a transaction (will use Dexie.currentTransaction)\n            obj[tableName] = new Table(tableName, schema);\n          }\n        }\n      });\n    });\n  }\n\n  function removeTablesApi(objs) {\n    objs.forEach(function (obj) {\n      for (var key in obj) {\n        if (obj[key] instanceof Table) delete obj[key];\n      }\n    });\n  }\n\n  function iterate(req, filter, fn, resolve, reject, valueMapper) {\n    // Apply valueMapper (hook('reading') or mappped class)\n    var mappedFn = valueMapper ? function (x, c, a) {\n      return fn(valueMapper(x), c, a);\n    } : fn; // Wrap fn with PSD and microtick stuff from Promise.\n\n    var wrappedFn = wrap(mappedFn, reject);\n    if (!req.onerror) req.onerror = eventRejectHandler(reject);\n\n    if (filter) {\n      req.onsuccess = trycatcher(function filter_record() {\n        var cursor = req.result;\n\n        if (cursor) {\n          var c = function c() {\n            cursor[\"continue\"]();\n          };\n\n          if (filter(cursor, function (advancer) {\n            c = advancer;\n          }, resolve, reject)) wrappedFn(cursor.value, cursor, function (advancer) {\n            c = advancer;\n          });\n          c();\n        } else {\n          resolve();\n        }\n      }, reject);\n    } else {\n      req.onsuccess = trycatcher(function filter_record() {\n        var cursor = req.result;\n\n        if (cursor) {\n          var c = function c() {\n            cursor[\"continue\"]();\n          };\n\n          wrappedFn(cursor.value, cursor, function (advancer) {\n            c = advancer;\n          });\n          c();\n        } else {\n          resolve();\n        }\n      }, reject);\n    }\n  }\n\n  function parseIndexSyntax(indexes) {\n    /// <param name=\"indexes\" type=\"String\"></param>\n    /// <returns type=\"Array\" elementType=\"IndexSpec\"></returns>\n    var rv = [];\n    indexes.split(',').forEach(function (index) {\n      index = index.trim();\n      var name = index.replace(/([&*]|\\+\\+)/g, \"\"); // Remove \"&\", \"++\" and \"*\"\n      // Let keyPath of \"[a+b]\" be [\"a\",\"b\"]:\n\n      var keyPath = /^\\[/.test(name) ? name.match(/^\\[(.*)\\]$/)[1].split('+') : name;\n      rv.push(new IndexSpec(name, keyPath || null, /\\&/.test(index), /\\*/.test(index), /\\+\\+/.test(index), isArray(keyPath), /\\./.test(index)));\n    });\n    return rv;\n  }\n\n  function cmp(key1, key2) {\n    return indexedDB.cmp(key1, key2);\n  }\n\n  function min(a, b) {\n    return cmp(a, b) < 0 ? a : b;\n  }\n\n  function max(a, b) {\n    return cmp(a, b) > 0 ? a : b;\n  }\n\n  function ascending(a, b) {\n    return indexedDB.cmp(a, b);\n  }\n\n  function descending(a, b) {\n    return indexedDB.cmp(b, a);\n  }\n\n  function simpleCompare(a, b) {\n    return a < b ? -1 : a === b ? 0 : 1;\n  }\n\n  function simpleCompareReverse(a, b) {\n    return a > b ? -1 : a === b ? 0 : 1;\n  }\n\n  function combine(filter1, filter2) {\n    return filter1 ? filter2 ? function () {\n      return filter1.apply(this, arguments) && filter2.apply(this, arguments);\n    } : filter1 : filter2;\n  }\n\n  function readGlobalSchema() {\n    db.verno = idbdb.version / 10;\n    db._dbSchema = globalSchema = {};\n    dbStoreNames = slice(idbdb.objectStoreNames, 0);\n    if (dbStoreNames.length === 0) return; // Database contains no stores.\n\n    var trans = idbdb.transaction(safariMultiStoreFix(dbStoreNames), 'readonly');\n    dbStoreNames.forEach(function (storeName) {\n      var store = trans.objectStore(storeName),\n          keyPath = store.keyPath,\n          dotted = keyPath && typeof keyPath === 'string' && keyPath.indexOf('.') !== -1;\n      var primKey = new IndexSpec(keyPath, keyPath || \"\", false, false, !!store.autoIncrement, keyPath && typeof keyPath !== 'string', dotted);\n      var indexes = [];\n\n      for (var j = 0; j < store.indexNames.length; ++j) {\n        var idbindex = store.index(store.indexNames[j]);\n        keyPath = idbindex.keyPath;\n        dotted = keyPath && typeof keyPath === 'string' && keyPath.indexOf('.') !== -1;\n        var index = new IndexSpec(idbindex.name, keyPath, !!idbindex.unique, !!idbindex.multiEntry, false, keyPath && typeof keyPath !== 'string', dotted);\n        indexes.push(index);\n      }\n\n      globalSchema[storeName] = new TableSchema(storeName, primKey, indexes, {});\n    });\n    setApiOnPlace([allTables], keys(globalSchema), globalSchema);\n  }\n\n  function adjustToExistingIndexNames(schema, idbtrans) {\n    /// <summary>\n    /// Issue #30 Problem with existing db - adjust to existing index names when migrating from non-dexie db\n    /// </summary>\n    /// <param name=\"schema\" type=\"Object\">Map between name and TableSchema</param>\n    /// <param name=\"idbtrans\" type=\"IDBTransaction\"></param>\n    var storeNames = idbtrans.db.objectStoreNames;\n\n    for (var i = 0; i < storeNames.length; ++i) {\n      var storeName = storeNames[i];\n      var store = idbtrans.objectStore(storeName);\n      hasGetAll = 'getAll' in store;\n\n      for (var j = 0; j < store.indexNames.length; ++j) {\n        var indexName = store.indexNames[j];\n        var keyPath = store.index(indexName).keyPath;\n        var dexieName = typeof keyPath === 'string' ? keyPath : \"[\" + slice(keyPath).join('+') + \"]\";\n\n        if (schema[storeName]) {\n          var indexSpec = schema[storeName].idxByName[dexieName];\n          if (indexSpec) indexSpec.name = indexName;\n        }\n      }\n    } // Bug with getAll() on Safari ver<604 on Workers only, see discussion following PR #579\n\n\n    if (/Safari/.test(navigator.userAgent) && !/(Chrome\\/|Edge\\/)/.test(navigator.userAgent) && _global.WorkerGlobalScope && _global instanceof _global.WorkerGlobalScope && [].concat(navigator.userAgent.match(/Safari\\/(\\d*)/))[1] < 604) {\n      hasGetAll = false;\n    }\n  }\n\n  function fireOnBlocked(ev) {\n    db.on(\"blocked\").fire(ev); // Workaround (not fully*) for missing \"versionchange\" event in IE,Edge and Safari:\n\n    connections.filter(function (c) {\n      return c.name === db.name && c !== db && !c._vcFired;\n    }).map(function (c) {\n      return c.on(\"versionchange\").fire(ev);\n    });\n  }\n\n  extend(this, {\n    Collection: Collection,\n    Table: Table,\n    Transaction: Transaction,\n    Version: Version,\n    WhereClause: WhereClause\n  });\n  init();\n  addons.forEach(function (fn) {\n    fn(db);\n  });\n}\n\nfunction parseType(type) {\n  if (typeof type === 'function') {\n    return new type();\n  } else if (isArray(type)) {\n    return [parseType(type[0])];\n  } else if (type && _typeof(type) === 'object') {\n    var rv = {};\n    applyStructure(rv, type);\n    return rv;\n  } else {\n    return type;\n  }\n}\n\nfunction applyStructure(obj, structure) {\n  keys(structure).forEach(function (member) {\n    var value = parseType(structure[member]);\n    obj[member] = value;\n  });\n  return obj;\n}\n\nfunction hookedEventSuccessHandler(resolve) {\n  // wrap() is needed when calling hooks because the rare scenario of:\n  //  * hook does a db operation that fails immediately (IDB throws exception)\n  //    For calling db operations on correct transaction, wrap makes sure to set PSD correctly.\n  //    wrap() will also execute in a virtual tick.\n  //  * If not wrapped in a virtual tick, direct exception will launch a new physical tick.\n  //  * If this was the last event in the bulk, the promise will resolve after a physical tick\n  //    and the transaction will have committed already.\n  // If no hook, the virtual tick will be executed in the reject()/resolve of the final promise,\n  // because it is always marked with _lib = true when created using Transaction._promise().\n  return wrap(function (event) {\n    var req = event.target,\n        ctx = req._hookCtx,\n        // Contains the hook error handler. Put here instead of closure to boost performance.\n    result = ctx.value || req.result,\n        // Pass the object value on updates. The result from IDB is the primary key.\n    hookSuccessHandler = ctx && ctx.onsuccess;\n    hookSuccessHandler && hookSuccessHandler(result);\n    resolve && resolve(result);\n  }, resolve);\n}\n\nfunction eventRejectHandler(reject) {\n  return wrap(function (event) {\n    preventDefault(event);\n    reject(event.target.error);\n    return false;\n  });\n}\n\nfunction eventSuccessHandler(resolve) {\n  return wrap(function (event) {\n    resolve(event.target.result);\n  });\n}\n\nfunction hookedEventRejectHandler(reject) {\n  return wrap(function (event) {\n    // See comment on hookedEventSuccessHandler() why wrap() is needed only when supporting hooks.\n    var req = event.target,\n        err = req.error,\n        ctx = req._hookCtx,\n        // Contains the hook error handler. Put here instead of closure to boost performance.\n    hookErrorHandler = ctx && ctx.onerror;\n    hookErrorHandler && hookErrorHandler(err);\n    preventDefault(event);\n    reject(err);\n    return false;\n  });\n}\n\nfunction preventDefault(event) {\n  if (event.stopPropagation) event.stopPropagation();\n  if (event.preventDefault) event.preventDefault();\n}\n\nfunction awaitIterator(iterator) {\n  var callNext = function callNext(result) {\n    return iterator.next(result);\n  },\n      doThrow = function doThrow(error) {\n    return iterator[\"throw\"](error);\n  },\n      onSuccess = step(callNext),\n      onError = step(doThrow);\n\n  function step(getNext) {\n    return function (val) {\n      var next = getNext(val),\n          value = next.value;\n      return next.done ? value : !value || typeof value.then !== 'function' ? isArray(value) ? Promise.all(value).then(onSuccess, onError) : onSuccess(value) : value.then(onSuccess, onError);\n    };\n  }\n\n  return step(callNext)();\n} //\n// IndexSpec struct\n//\n\n\nfunction IndexSpec(name, keyPath, unique, multi, auto, compound, dotted) {\n  /// <param name=\"name\" type=\"String\"></param>\n  /// <param name=\"keyPath\" type=\"String\"></param>\n  /// <param name=\"unique\" type=\"Boolean\"></param>\n  /// <param name=\"multi\" type=\"Boolean\"></param>\n  /// <param name=\"auto\" type=\"Boolean\"></param>\n  /// <param name=\"compound\" type=\"Boolean\"></param>\n  /// <param name=\"dotted\" type=\"Boolean\"></param>\n  this.name = name;\n  this.keyPath = keyPath;\n  this.unique = unique;\n  this.multi = multi;\n  this.auto = auto;\n  this.compound = compound;\n  this.dotted = dotted;\n  var keyPathSrc = typeof keyPath === 'string' ? keyPath : keyPath && '[' + [].join.call(keyPath, '+') + ']';\n  this.src = (unique ? '&' : '') + (multi ? '*' : '') + (auto ? \"++\" : \"\") + keyPathSrc;\n} //\n// TableSchema struct\n//\n\n\nfunction TableSchema(name, primKey, indexes, instanceTemplate) {\n  /// <param name=\"name\" type=\"String\"></param>\n  /// <param name=\"primKey\" type=\"IndexSpec\"></param>\n  /// <param name=\"indexes\" type=\"Array\" elementType=\"IndexSpec\"></param>\n  /// <param name=\"instanceTemplate\" type=\"Object\"></param>\n  this.name = name;\n  this.primKey = primKey || new IndexSpec();\n  this.indexes = indexes || [new IndexSpec()];\n  this.instanceTemplate = instanceTemplate;\n  this.mappedClass = null;\n  this.idxByName = arrayToObject(indexes, function (index) {\n    return [index.name, index];\n  });\n}\n\nfunction safariMultiStoreFix(storeNames) {\n  return storeNames.length === 1 ? storeNames[0] : storeNames;\n}\n\nfunction getNativeGetDatabaseNamesFn(indexedDB) {\n  var fn = indexedDB && (indexedDB.getDatabaseNames || indexedDB.webkitGetDatabaseNames);\n  return fn && fn.bind(indexedDB);\n} // Export Error classes\n\n\nprops(Dexie, fullNameExceptions); // Dexie.XXXError = class XXXError {...};\n//\n// Static methods and properties\n// \n\nprops(Dexie, {\n  //\n  // Static delete() method.\n  //\n  \"delete\": function _delete(databaseName) {\n    var db = new Dexie(databaseName),\n        promise = db[\"delete\"]();\n\n    promise.onblocked = function (fn) {\n      db.on(\"blocked\", fn);\n      return this;\n    };\n\n    return promise;\n  },\n  //\n  // Static exists() method.\n  //\n  exists: function exists(name) {\n    return new Dexie(name).open().then(function (db) {\n      db.close();\n      return true;\n    })[\"catch\"](Dexie.NoSuchDatabaseError, function () {\n      return false;\n    });\n  },\n  //\n  // Static method for retrieving a list of all existing databases at current host.\n  //\n  getDatabaseNames: function getDatabaseNames(cb) {\n    var getDatabaseNames = getNativeGetDatabaseNamesFn(Dexie.dependencies.indexedDB);\n    return getDatabaseNames ? new Promise(function (resolve, reject) {\n      var req = getDatabaseNames();\n\n      req.onsuccess = function (event) {\n        resolve(slice(event.target.result, 0)); // Converst DOMStringList to Array<String>\n      };\n\n      req.onerror = eventRejectHandler(reject);\n    }).then(cb) : dbNamesDB.dbnames.toCollection().primaryKeys(cb);\n  },\n  defineClass: function defineClass() {\n    // Default constructor able to copy given properties into this object.\n    function Class(properties) {\n      /// <param name=\"properties\" type=\"Object\" optional=\"true\">Properties to initialize object with.\n      /// </param>\n      if (properties) extend(this, properties);\n    }\n\n    return Class;\n  },\n  applyStructure: applyStructure,\n  ignoreTransaction: function ignoreTransaction(scopeFunc) {\n    // In case caller is within a transaction but needs to create a separate transaction.\n    // Example of usage:\n    //\n    // Let's say we have a logger function in our app. Other application-logic should be unaware of the\n    // logger function and not need to include the 'logentries' table in all transaction it performs.\n    // The logging should always be done in a separate transaction and not be dependant on the current\n    // running transaction context. Then you could use Dexie.ignoreTransaction() to run code that starts a new transaction.\n    //\n    //     Dexie.ignoreTransaction(function() {\n    //         db.logentries.add(newLogEntry);\n    //     });\n    //\n    // Unless using Dexie.ignoreTransaction(), the above example would try to reuse the current transaction\n    // in current Promise-scope.\n    //\n    // An alternative to Dexie.ignoreTransaction() would be setImmediate() or setTimeout(). The reason we still provide an\n    // API for this because\n    //  1) The intention of writing the statement could be unclear if using setImmediate() or setTimeout().\n    //  2) setTimeout() would wait unnescessary until firing. This is however not the case with setImmediate().\n    //  3) setImmediate() is not supported in the ES standard.\n    //  4) You might want to keep other PSD state that was set in a parent PSD, such as PSD.letThrough.\n    return PSD.trans ? usePSD(PSD.transless, scopeFunc) : // Use the closest parent that was non-transactional.\n    scopeFunc(); // No need to change scope because there is no ongoing transaction.\n  },\n  vip: function vip(fn) {\n    // To be used by subscribers to the on('ready') event.\n    // This will let caller through to access DB even when it is blocked while the db.ready() subscribers are firing.\n    // This would have worked automatically if we were certain that the Provider was using Dexie.Promise for all asyncronic operations. The promise PSD\n    // from the provider.connect() call would then be derived all the way to when provider would call localDatabase.applyChanges(). But since\n    // the provider more likely is using non-promise async APIs or other thenable implementations, we cannot assume that.\n    // Note that this method is only useful for on('ready') subscribers that is returning a Promise from the event. If not using vip()\n    // the database could deadlock since it wont open until the returned Promise is resolved, and any non-VIPed operation started by\n    // the caller will not resolve until database is opened.\n    return newScope(function () {\n      PSD.letThrough = true; // Make sure we are let through if still blocking db due to onready is firing.\n\n      return fn();\n    });\n  },\n  async: function async(generatorFn) {\n    return function () {\n      try {\n        var rv = awaitIterator(generatorFn.apply(this, arguments));\n        if (!rv || typeof rv.then !== 'function') return Promise.resolve(rv);\n        return rv;\n      } catch (e) {\n        return rejection(e);\n      }\n    };\n  },\n  spawn: function spawn(generatorFn, args, thiz) {\n    try {\n      var rv = awaitIterator(generatorFn.apply(thiz, args || []));\n      if (!rv || typeof rv.then !== 'function') return Promise.resolve(rv);\n      return rv;\n    } catch (e) {\n      return rejection(e);\n    }\n  },\n  // Dexie.currentTransaction property\n  currentTransaction: {\n    get: function get() {\n      return PSD.trans || null;\n    }\n  },\n  waitFor: function waitFor(promiseOrFunction, optionalTimeout) {\n    // If a function is provided, invoke it and pass the returning value to Transaction.waitFor()\n    var promise = Promise.resolve(typeof promiseOrFunction === 'function' ? Dexie.ignoreTransaction(promiseOrFunction) : promiseOrFunction).timeout(optionalTimeout || 60000); // Default the timeout to one minute. Caller may specify Infinity if required.       \n    // Run given promise on current transaction. If no current transaction, just return a Dexie promise based\n    // on given value.\n\n    return PSD.trans ? PSD.trans.waitFor(promise) : promise;\n  },\n  // Export our Promise implementation since it can be handy as a standalone Promise implementation\n  Promise: Promise,\n  // Dexie.debug proptery:\n  // Dexie.debug = false\n  // Dexie.debug = true\n  // Dexie.debug = \"dexie\" - don't hide dexie's stack frames.\n  debug: {\n    get: function get() {\n      return debug;\n    },\n    set: function set(value) {\n      setDebug(value, value === 'dexie' ? function () {\n        return true;\n      } : dexieStackFrameFilter);\n    }\n  },\n  // Export our derive/extend/override methodology\n  derive: derive,\n  extend: extend,\n  props: props,\n  override: override,\n  // Export our Events() function - can be handy as a toolkit\n  Events: Events,\n  // Utilities\n  getByKeyPath: getByKeyPath,\n  setByKeyPath: setByKeyPath,\n  delByKeyPath: delByKeyPath,\n  shallowClone: shallowClone,\n  deepClone: deepClone,\n  getObjectDiff: getObjectDiff,\n  asap: asap,\n  maxKey: maxKey,\n  minKey: minKey,\n  // Addon registry\n  addons: [],\n  // Global DB connection list\n  connections: connections,\n  MultiModifyError: exceptions.Modify,\n  errnames: errnames,\n  // Export other static classes\n  IndexSpec: IndexSpec,\n  TableSchema: TableSchema,\n  //\n  // Dependencies\n  //\n  // These will automatically work in browsers with indexedDB support, or where an indexedDB polyfill has been included.\n  //\n  // In node.js, however, these properties must be set \"manually\" before instansiating a new Dexie().\n  // For node.js, you need to require indexeddb-js or similar and then set these deps.\n  //\n  dependencies: function () {\n    try {\n      return {\n        // Required:\n        indexedDB: _global.indexedDB || _global.mozIndexedDB || _global.webkitIndexedDB || _global.msIndexedDB,\n        IDBKeyRange: _global.IDBKeyRange || _global.webkitIDBKeyRange\n      };\n    } catch (e) {\n      return {\n        indexedDB: null,\n        IDBKeyRange: null\n      };\n    }\n  }(),\n  // API Version Number: Type Number, make sure to always set a version number that can be comparable correctly. Example: 0.9, 0.91, 0.92, 1.0, 1.01, 1.1, 1.2, 1.21, etc.\n  semVer: DEXIE_VERSION,\n  version: DEXIE_VERSION.split('.').map(function (n) {\n    return parseInt(n);\n  }).reduce(function (p, c, i) {\n    return p + c / Math.pow(10, i * 2);\n  }),\n  // https://github.com/dfahlander/Dexie.js/issues/186\n  // typescript compiler tsc in mode ts-->es5 & commonJS, will expect require() to return\n  // x.default. Workaround: Set Dexie.default = Dexie.\n  \"default\": Dexie,\n  // Make it possible to import {Dexie} (non-default import)\n  // Reason 1: May switch to that in future.\n  // Reason 2: We declare it both default and named exported in d.ts to make it possible\n  // to let addons extend the Dexie interface with Typescript 2.1 (works only when explicitely\n  // exporting the symbol, not just default exporting)\n  Dexie: Dexie\n}); // Map DOMErrors and DOMExceptions to corresponding Dexie errors. May change in Dexie v2.0.\n\nPromise.rejectionMapper = mapError; // Initialize dbNamesDB (won't ever be opened on chromium browsers')\n\ndbNamesDB = new Dexie('__dbnames');\ndbNamesDB.version(1).stores({\n  dbnames: 'name'\n});\n\n(function () {\n  // Migrate from Dexie 1.x database names stored in localStorage:\n  var DBNAMES = 'Dexie.DatabaseNames';\n\n  try {\n    if ((typeof localStorage === \"undefined\" ? \"undefined\" : _typeof(localStorage)) !== undefined && _global.document !== undefined) {\n      // Have localStorage and is not executing in a worker. Lets migrate from Dexie 1.x.\n      JSON.parse(localStorage.getItem(DBNAMES) || \"[]\").forEach(function (name) {\n        return dbNamesDB.dbnames.put({\n          name: name\n        })[\"catch\"](nop);\n      });\n      localStorage.removeItem(DBNAMES);\n    }\n  } catch (_e) {}\n})();\n\nexport default Dexie;","var map = {\n\t\"./af\": 70,\n\t\"./af.js\": 70,\n\t\"./ar\": 71,\n\t\"./ar-dz\": 72,\n\t\"./ar-dz.js\": 72,\n\t\"./ar-kw\": 73,\n\t\"./ar-kw.js\": 73,\n\t\"./ar-ly\": 74,\n\t\"./ar-ly.js\": 74,\n\t\"./ar-ma\": 75,\n\t\"./ar-ma.js\": 75,\n\t\"./ar-sa\": 76,\n\t\"./ar-sa.js\": 76,\n\t\"./ar-tn\": 77,\n\t\"./ar-tn.js\": 77,\n\t\"./ar.js\": 71,\n\t\"./az\": 78,\n\t\"./az.js\": 78,\n\t\"./be\": 79,\n\t\"./be.js\": 79,\n\t\"./bg\": 80,\n\t\"./bg.js\": 80,\n\t\"./bm\": 81,\n\t\"./bm.js\": 81,\n\t\"./bn\": 82,\n\t\"./bn.js\": 82,\n\t\"./bo\": 83,\n\t\"./bo.js\": 83,\n\t\"./br\": 84,\n\t\"./br.js\": 84,\n\t\"./bs\": 85,\n\t\"./bs.js\": 85,\n\t\"./ca\": 86,\n\t\"./ca.js\": 86,\n\t\"./cs\": 87,\n\t\"./cs.js\": 87,\n\t\"./cv\": 88,\n\t\"./cv.js\": 88,\n\t\"./cy\": 89,\n\t\"./cy.js\": 89,\n\t\"./da\": 90,\n\t\"./da.js\": 90,\n\t\"./de\": 91,\n\t\"./de-at\": 92,\n\t\"./de-at.js\": 92,\n\t\"./de-ch\": 93,\n\t\"./de-ch.js\": 93,\n\t\"./de.js\": 91,\n\t\"./dv\": 94,\n\t\"./dv.js\": 94,\n\t\"./el\": 95,\n\t\"./el.js\": 95,\n\t\"./en-SG\": 96,\n\t\"./en-SG.js\": 96,\n\t\"./en-au\": 97,\n\t\"./en-au.js\": 97,\n\t\"./en-ca\": 98,\n\t\"./en-ca.js\": 98,\n\t\"./en-gb\": 99,\n\t\"./en-gb.js\": 99,\n\t\"./en-ie\": 100,\n\t\"./en-ie.js\": 100,\n\t\"./en-il\": 101,\n\t\"./en-il.js\": 101,\n\t\"./en-nz\": 102,\n\t\"./en-nz.js\": 102,\n\t\"./eo\": 103,\n\t\"./eo.js\": 103,\n\t\"./es\": 104,\n\t\"./es-do\": 105,\n\t\"./es-do.js\": 105,\n\t\"./es-us\": 106,\n\t\"./es-us.js\": 106,\n\t\"./es.js\": 104,\n\t\"./et\": 107,\n\t\"./et.js\": 107,\n\t\"./eu\": 108,\n\t\"./eu.js\": 108,\n\t\"./fa\": 109,\n\t\"./fa.js\": 109,\n\t\"./fi\": 110,\n\t\"./fi.js\": 110,\n\t\"./fo\": 111,\n\t\"./fo.js\": 111,\n\t\"./fr\": 112,\n\t\"./fr-ca\": 113,\n\t\"./fr-ca.js\": 113,\n\t\"./fr-ch\": 114,\n\t\"./fr-ch.js\": 114,\n\t\"./fr.js\": 112,\n\t\"./fy\": 115,\n\t\"./fy.js\": 115,\n\t\"./ga\": 116,\n\t\"./ga.js\": 116,\n\t\"./gd\": 117,\n\t\"./gd.js\": 117,\n\t\"./gl\": 118,\n\t\"./gl.js\": 118,\n\t\"./gom-latn\": 119,\n\t\"./gom-latn.js\": 119,\n\t\"./gu\": 120,\n\t\"./gu.js\": 120,\n\t\"./he\": 121,\n\t\"./he.js\": 121,\n\t\"./hi\": 122,\n\t\"./hi.js\": 122,\n\t\"./hr\": 123,\n\t\"./hr.js\": 123,\n\t\"./hu\": 124,\n\t\"./hu.js\": 124,\n\t\"./hy-am\": 125,\n\t\"./hy-am.js\": 125,\n\t\"./id\": 126,\n\t\"./id.js\": 126,\n\t\"./is\": 127,\n\t\"./is.js\": 127,\n\t\"./it\": 128,\n\t\"./it-ch\": 129,\n\t\"./it-ch.js\": 129,\n\t\"./it.js\": 128,\n\t\"./ja\": 66,\n\t\"./ja.js\": 66,\n\t\"./jv\": 130,\n\t\"./jv.js\": 130,\n\t\"./ka\": 131,\n\t\"./ka.js\": 131,\n\t\"./kk\": 132,\n\t\"./kk.js\": 132,\n\t\"./km\": 133,\n\t\"./km.js\": 133,\n\t\"./kn\": 134,\n\t\"./kn.js\": 134,\n\t\"./ko\": 135,\n\t\"./ko.js\": 135,\n\t\"./ku\": 136,\n\t\"./ku.js\": 136,\n\t\"./ky\": 137,\n\t\"./ky.js\": 137,\n\t\"./lb\": 138,\n\t\"./lb.js\": 138,\n\t\"./lo\": 139,\n\t\"./lo.js\": 139,\n\t\"./lt\": 140,\n\t\"./lt.js\": 140,\n\t\"./lv\": 141,\n\t\"./lv.js\": 141,\n\t\"./me\": 142,\n\t\"./me.js\": 142,\n\t\"./mi\": 143,\n\t\"./mi.js\": 143,\n\t\"./mk\": 144,\n\t\"./mk.js\": 144,\n\t\"./ml\": 145,\n\t\"./ml.js\": 145,\n\t\"./mn\": 146,\n\t\"./mn.js\": 146,\n\t\"./mr\": 147,\n\t\"./mr.js\": 147,\n\t\"./ms\": 148,\n\t\"./ms-my\": 149,\n\t\"./ms-my.js\": 149,\n\t\"./ms.js\": 148,\n\t\"./mt\": 150,\n\t\"./mt.js\": 150,\n\t\"./my\": 151,\n\t\"./my.js\": 151,\n\t\"./nb\": 152,\n\t\"./nb.js\": 152,\n\t\"./ne\": 153,\n\t\"./ne.js\": 153,\n\t\"./nl\": 154,\n\t\"./nl-be\": 155,\n\t\"./nl-be.js\": 155,\n\t\"./nl.js\": 154,\n\t\"./nn\": 156,\n\t\"./nn.js\": 156,\n\t\"./pa-in\": 157,\n\t\"./pa-in.js\": 157,\n\t\"./pl\": 158,\n\t\"./pl.js\": 158,\n\t\"./pt\": 159,\n\t\"./pt-br\": 160,\n\t\"./pt-br.js\": 160,\n\t\"./pt.js\": 159,\n\t\"./ro\": 161,\n\t\"./ro.js\": 161,\n\t\"./ru\": 162,\n\t\"./ru.js\": 162,\n\t\"./sd\": 163,\n\t\"./sd.js\": 163,\n\t\"./se\": 164,\n\t\"./se.js\": 164,\n\t\"./si\": 165,\n\t\"./si.js\": 165,\n\t\"./sk\": 166,\n\t\"./sk.js\": 166,\n\t\"./sl\": 167,\n\t\"./sl.js\": 167,\n\t\"./sq\": 168,\n\t\"./sq.js\": 168,\n\t\"./sr\": 169,\n\t\"./sr-cyrl\": 170,\n\t\"./sr-cyrl.js\": 170,\n\t\"./sr.js\": 169,\n\t\"./ss\": 171,\n\t\"./ss.js\": 171,\n\t\"./sv\": 172,\n\t\"./sv.js\": 172,\n\t\"./sw\": 173,\n\t\"./sw.js\": 173,\n\t\"./ta\": 174,\n\t\"./ta.js\": 174,\n\t\"./te\": 175,\n\t\"./te.js\": 175,\n\t\"./tet\": 176,\n\t\"./tet.js\": 176,\n\t\"./tg\": 177,\n\t\"./tg.js\": 177,\n\t\"./th\": 178,\n\t\"./th.js\": 178,\n\t\"./tl-ph\": 179,\n\t\"./tl-ph.js\": 179,\n\t\"./tlh\": 180,\n\t\"./tlh.js\": 180,\n\t\"./tr\": 181,\n\t\"./tr.js\": 181,\n\t\"./tzl\": 182,\n\t\"./tzl.js\": 182,\n\t\"./tzm\": 183,\n\t\"./tzm-latn\": 184,\n\t\"./tzm-latn.js\": 184,\n\t\"./tzm.js\": 183,\n\t\"./ug-cn\": 185,\n\t\"./ug-cn.js\": 185,\n\t\"./uk\": 186,\n\t\"./uk.js\": 186,\n\t\"./ur\": 187,\n\t\"./ur.js\": 187,\n\t\"./uz\": 188,\n\t\"./uz-latn\": 189,\n\t\"./uz-latn.js\": 189,\n\t\"./uz.js\": 188,\n\t\"./vi\": 190,\n\t\"./vi.js\": 190,\n\t\"./x-pseudo\": 191,\n\t\"./x-pseudo.js\": 191,\n\t\"./yo\": 192,\n\t\"./yo.js\": 192,\n\t\"./zh-cn\": 193,\n\t\"./zh-cn.js\": 193,\n\t\"./zh-hk\": 194,\n\t\"./zh-hk.js\": 194,\n\t\"./zh-tw\": 195,\n\t\"./zh-tw.js\": 195\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tif(!__webpack_require__.o(map, req)) {\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn map[req];\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 273;","'use strict';\n\nvar utf8 = require('./utf8');\n\nvar utils = require('./utils');\n\nvar GenericWorker = require('./stream/GenericWorker');\n\nvar StreamHelper = require('./stream/StreamHelper');\n\nvar defaults = require('./defaults');\n\nvar CompressedObject = require('./compressedObject');\n\nvar ZipObject = require('./zipObject');\n\nvar generate = require(\"./generate\");\n\nvar nodejsUtils = require(\"./nodejsUtils\");\n\nvar NodejsStreamInputAdapter = require(\"./nodejs/NodejsStreamInputAdapter\");\n/**\n * Add a file in the current folder.\n * @private\n * @param {string} name the name of the file\n * @param {String|ArrayBuffer|Uint8Array|Buffer} data the data of the file\n * @param {Object} originalOptions the options of the file\n * @return {Object} the new file.\n */\n\n\nvar fileAdd = function fileAdd(name, data, originalOptions) {\n  // be sure sub folders exist\n  var dataType = utils.getTypeOf(data),\n      parent;\n  /*\n   * Correct options.\n   */\n\n  var o = utils.extend(originalOptions || {}, defaults);\n  o.date = o.date || new Date();\n\n  if (o.compression !== null) {\n    o.compression = o.compression.toUpperCase();\n  }\n\n  if (typeof o.unixPermissions === \"string\") {\n    o.unixPermissions = parseInt(o.unixPermissions, 8);\n  } // UNX_IFDIR  0040000 see zipinfo.c\n\n\n  if (o.unixPermissions && o.unixPermissions & 0x4000) {\n    o.dir = true;\n  } // Bit 4    Directory\n\n\n  if (o.dosPermissions && o.dosPermissions & 0x0010) {\n    o.dir = true;\n  }\n\n  if (o.dir) {\n    name = forceTrailingSlash(name);\n  }\n\n  if (o.createFolders && (parent = parentFolder(name))) {\n    folderAdd.call(this, parent, true);\n  }\n\n  var isUnicodeString = dataType === \"string\" && o.binary === false && o.base64 === false;\n\n  if (!originalOptions || typeof originalOptions.binary === \"undefined\") {\n    o.binary = !isUnicodeString;\n  }\n\n  var isCompressedEmpty = data instanceof CompressedObject && data.uncompressedSize === 0;\n\n  if (isCompressedEmpty || o.dir || !data || data.length === 0) {\n    o.base64 = false;\n    o.binary = true;\n    data = \"\";\n    o.compression = \"STORE\";\n    dataType = \"string\";\n  }\n  /*\n   * Convert content to fit.\n   */\n\n\n  var zipObjectContent = null;\n\n  if (data instanceof CompressedObject || data instanceof GenericWorker) {\n    zipObjectContent = data;\n  } else if (nodejsUtils.isNode && nodejsUtils.isStream(data)) {\n    zipObjectContent = new NodejsStreamInputAdapter(name, data);\n  } else {\n    zipObjectContent = utils.prepareContent(name, data, o.binary, o.optimizedBinaryString, o.base64);\n  }\n\n  var object = new ZipObject(name, zipObjectContent, o);\n  this.files[name] = object;\n  /*\n  TODO: we can't throw an exception because we have async promises\n  (we can have a promise of a Date() for example) but returning a\n  promise is useless because file(name, data) returns the JSZip\n  object for chaining. Should we break that to allow the user\n  to catch the error ?\n   return external.Promise.resolve(zipObjectContent)\n  .then(function () {\n      return object;\n  });\n  */\n};\n/**\n * Find the parent folder of the path.\n * @private\n * @param {string} path the path to use\n * @return {string} the parent folder, or \"\"\n */\n\n\nvar parentFolder = function parentFolder(path) {\n  if (path.slice(-1) === '/') {\n    path = path.substring(0, path.length - 1);\n  }\n\n  var lastSlash = path.lastIndexOf('/');\n  return lastSlash > 0 ? path.substring(0, lastSlash) : \"\";\n};\n/**\n * Returns the path with a slash at the end.\n * @private\n * @param {String} path the path to check.\n * @return {String} the path with a trailing slash.\n */\n\n\nvar forceTrailingSlash = function forceTrailingSlash(path) {\n  // Check the name ends with a /\n  if (path.slice(-1) !== \"/\") {\n    path += \"/\"; // IE doesn't like substr(-1)\n  }\n\n  return path;\n};\n/**\n * Add a (sub) folder in the current folder.\n * @private\n * @param {string} name the folder's name\n * @param {boolean=} [createFolders] If true, automatically create sub\n *  folders. Defaults to false.\n * @return {Object} the new folder.\n */\n\n\nvar folderAdd = function folderAdd(name, createFolders) {\n  createFolders = typeof createFolders !== 'undefined' ? createFolders : defaults.createFolders;\n  name = forceTrailingSlash(name); // Does this folder already exist?\n\n  if (!this.files[name]) {\n    fileAdd.call(this, name, null, {\n      dir: true,\n      createFolders: createFolders\n    });\n  }\n\n  return this.files[name];\n};\n/**\n* Cross-window, cross-Node-context regular expression detection\n* @param  {Object}  object Anything\n* @return {Boolean}        true if the object is a regular expression,\n* false otherwise\n*/\n\n\nfunction isRegExp(object) {\n  return Object.prototype.toString.call(object) === \"[object RegExp]\";\n} // return the actual prototype of JSZip\n\n\nvar out = {\n  /**\n   * @see loadAsync\n   */\n  load: function load() {\n    throw new Error(\"This method has been removed in JSZip 3.0, please check the upgrade guide.\");\n  },\n\n  /**\n   * Call a callback function for each entry at this folder level.\n   * @param {Function} cb the callback function:\n   * function (relativePath, file) {...}\n   * It takes 2 arguments : the relative path and the file.\n   */\n  forEach: function forEach(cb) {\n    var filename, relativePath, file;\n\n    for (filename in this.files) {\n      if (!this.files.hasOwnProperty(filename)) {\n        continue;\n      }\n\n      file = this.files[filename];\n      relativePath = filename.slice(this.root.length, filename.length);\n\n      if (relativePath && filename.slice(0, this.root.length) === this.root) {\n        // the file is in the current root\n        cb(relativePath, file); // TODO reverse the parameters ? need to be clean AND consistent with the filter search fn...\n      }\n    }\n  },\n\n  /**\n   * Filter nested files/folders with the specified function.\n   * @param {Function} search the predicate to use :\n   * function (relativePath, file) {...}\n   * It takes 2 arguments : the relative path and the file.\n   * @return {Array} An array of matching elements.\n   */\n  filter: function filter(search) {\n    var result = [];\n    this.forEach(function (relativePath, entry) {\n      if (search(relativePath, entry)) {\n        // the file matches the function\n        result.push(entry);\n      }\n    });\n    return result;\n  },\n\n  /**\n   * Add a file to the zip file, or search a file.\n   * @param   {string|RegExp} name The name of the file to add (if data is defined),\n   * the name of the file to find (if no data) or a regex to match files.\n   * @param   {String|ArrayBuffer|Uint8Array|Buffer} data  The file data, either raw or base64 encoded\n   * @param   {Object} o     File options\n   * @return  {JSZip|Object|Array} this JSZip object (when adding a file),\n   * a file (when searching by string) or an array of files (when searching by regex).\n   */\n  file: function file(name, data, o) {\n    if (arguments.length === 1) {\n      if (isRegExp(name)) {\n        var regexp = name;\n        return this.filter(function (relativePath, file) {\n          return !file.dir && regexp.test(relativePath);\n        });\n      } else {\n        // text\n        var obj = this.files[this.root + name];\n\n        if (obj && !obj.dir) {\n          return obj;\n        } else {\n          return null;\n        }\n      }\n    } else {\n      // more than one argument : we have data !\n      name = this.root + name;\n      fileAdd.call(this, name, data, o);\n    }\n\n    return this;\n  },\n\n  /**\n   * Add a directory to the zip file, or search.\n   * @param   {String|RegExp} arg The name of the directory to add, or a regex to search folders.\n   * @return  {JSZip} an object with the new directory as the root, or an array containing matching folders.\n   */\n  folder: function folder(arg) {\n    if (!arg) {\n      return this;\n    }\n\n    if (isRegExp(arg)) {\n      return this.filter(function (relativePath, file) {\n        return file.dir && arg.test(relativePath);\n      });\n    } // else, name is a new folder\n\n\n    var name = this.root + arg;\n    var newFolder = folderAdd.call(this, name); // Allow chaining by returning a new object with this folder as the root\n\n    var ret = this.clone();\n    ret.root = newFolder.name;\n    return ret;\n  },\n\n  /**\n   * Delete a file, or a directory and all sub-files, from the zip\n   * @param {string} name the name of the file to delete\n   * @return {JSZip} this JSZip object\n   */\n  remove: function remove(name) {\n    name = this.root + name;\n    var file = this.files[name];\n\n    if (!file) {\n      // Look for any folders\n      if (name.slice(-1) !== \"/\") {\n        name += \"/\";\n      }\n\n      file = this.files[name];\n    }\n\n    if (file && !file.dir) {\n      // file\n      delete this.files[name];\n    } else {\n      // maybe a folder, delete recursively\n      var kids = this.filter(function (relativePath, file) {\n        return file.name.slice(0, name.length) === name;\n      });\n\n      for (var i = 0; i < kids.length; i++) {\n        delete this.files[kids[i].name];\n      }\n    }\n\n    return this;\n  },\n\n  /**\n   * Generate the complete zip file\n   * @param {Object} options the options to generate the zip file :\n   * - compression, \"STORE\" by default.\n   * - type, \"base64\" by default. Values are : string, base64, uint8array, arraybuffer, blob.\n   * @return {String|Uint8Array|ArrayBuffer|Buffer|Blob} the zip file\n   */\n  generate: function generate(options) {\n    throw new Error(\"This method has been removed in JSZip 3.0, please check the upgrade guide.\");\n  },\n\n  /**\n   * Generate the complete zip file as an internal stream.\n   * @param {Object} options the options to generate the zip file :\n   * - compression, \"STORE\" by default.\n   * - type, \"base64\" by default. Values are : string, base64, uint8array, arraybuffer, blob.\n   * @return {StreamHelper} the streamed zip file.\n   */\n  generateInternalStream: function generateInternalStream(options) {\n    var worker,\n        opts = {};\n\n    try {\n      opts = utils.extend(options || {}, {\n        streamFiles: false,\n        compression: \"STORE\",\n        compressionOptions: null,\n        type: \"\",\n        platform: \"DOS\",\n        comment: null,\n        mimeType: 'application/zip',\n        encodeFileName: utf8.utf8encode\n      });\n      opts.type = opts.type.toLowerCase();\n      opts.compression = opts.compression.toUpperCase(); // \"binarystring\" is prefered but the internals use \"string\".\n\n      if (opts.type === \"binarystring\") {\n        opts.type = \"string\";\n      }\n\n      if (!opts.type) {\n        throw new Error(\"No output type specified.\");\n      }\n\n      utils.checkSupport(opts.type); // accept nodejs `process.platform`\n\n      if (opts.platform === 'darwin' || opts.platform === 'freebsd' || opts.platform === 'linux' || opts.platform === 'sunos') {\n        opts.platform = \"UNIX\";\n      }\n\n      if (opts.platform === 'win32') {\n        opts.platform = \"DOS\";\n      }\n\n      var comment = opts.comment || this.comment || \"\";\n      worker = generate.generateWorker(this, opts, comment);\n    } catch (e) {\n      worker = new GenericWorker(\"error\");\n      worker.error(e);\n    }\n\n    return new StreamHelper(worker, opts.type || \"string\", opts.mimeType);\n  },\n\n  /**\n   * Generate the complete zip file asynchronously.\n   * @see generateInternalStream\n   */\n  generateAsync: function generateAsync(options, onUpdate) {\n    return this.generateInternalStream(options).accumulate(onUpdate);\n  },\n\n  /**\n   * Generate the complete zip file asynchronously.\n   * @see generateInternalStream\n   */\n  generateNodeStream: function generateNodeStream(options, onUpdate) {\n    options = options || {};\n\n    if (!options.type) {\n      options.type = \"nodebuffer\";\n    }\n\n    return this.generateInternalStream(options).toNodejsStream(onUpdate);\n  }\n};\nmodule.exports = out;","'use strict';\n\nexports.byteLength = byteLength;\nexports.toByteArray = toByteArray;\nexports.fromByteArray = fromByteArray;\nvar lookup = [];\nvar revLookup = [];\nvar Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array;\nvar code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\nfor (var i = 0, len = code.length; i < len; ++i) {\n  lookup[i] = code[i];\n  revLookup[code.charCodeAt(i)] = i;\n} // Support decoding URL-safe base64 strings, as Node.js does.\n// See: https://en.wikipedia.org/wiki/Base64#URL_applications\n\n\nrevLookup['-'.charCodeAt(0)] = 62;\nrevLookup['_'.charCodeAt(0)] = 63;\n\nfunction getLens(b64) {\n  var len = b64.length;\n\n  if (len % 4 > 0) {\n    throw new Error('Invalid string. Length must be a multiple of 4');\n  } // Trim off extra bytes after placeholder bytes are found\n  // See: https://github.com/beatgammit/base64-js/issues/42\n\n\n  var validLen = b64.indexOf('=');\n  if (validLen === -1) validLen = len;\n  var placeHoldersLen = validLen === len ? 0 : 4 - validLen % 4;\n  return [validLen, placeHoldersLen];\n} // base64 is 4/3 + up to two characters of the original data\n\n\nfunction byteLength(b64) {\n  var lens = getLens(b64);\n  var validLen = lens[0];\n  var placeHoldersLen = lens[1];\n  return (validLen + placeHoldersLen) * 3 / 4 - placeHoldersLen;\n}\n\nfunction _byteLength(b64, validLen, placeHoldersLen) {\n  return (validLen + placeHoldersLen) * 3 / 4 - placeHoldersLen;\n}\n\nfunction toByteArray(b64) {\n  var tmp;\n  var lens = getLens(b64);\n  var validLen = lens[0];\n  var placeHoldersLen = lens[1];\n  var arr = new Arr(_byteLength(b64, validLen, placeHoldersLen));\n  var curByte = 0; // if there are placeholders, only get up to the last complete 4 chars\n\n  var len = placeHoldersLen > 0 ? validLen - 4 : validLen;\n  var i;\n\n  for (i = 0; i < len; i += 4) {\n    tmp = revLookup[b64.charCodeAt(i)] << 18 | revLookup[b64.charCodeAt(i + 1)] << 12 | revLookup[b64.charCodeAt(i + 2)] << 6 | revLookup[b64.charCodeAt(i + 3)];\n    arr[curByte++] = tmp >> 16 & 0xFF;\n    arr[curByte++] = tmp >> 8 & 0xFF;\n    arr[curByte++] = tmp & 0xFF;\n  }\n\n  if (placeHoldersLen === 2) {\n    tmp = revLookup[b64.charCodeAt(i)] << 2 | revLookup[b64.charCodeAt(i + 1)] >> 4;\n    arr[curByte++] = tmp & 0xFF;\n  }\n\n  if (placeHoldersLen === 1) {\n    tmp = revLookup[b64.charCodeAt(i)] << 10 | revLookup[b64.charCodeAt(i + 1)] << 4 | revLookup[b64.charCodeAt(i + 2)] >> 2;\n    arr[curByte++] = tmp >> 8 & 0xFF;\n    arr[curByte++] = tmp & 0xFF;\n  }\n\n  return arr;\n}\n\nfunction tripletToBase64(num) {\n  return lookup[num >> 18 & 0x3F] + lookup[num >> 12 & 0x3F] + lookup[num >> 6 & 0x3F] + lookup[num & 0x3F];\n}\n\nfunction encodeChunk(uint8, start, end) {\n  var tmp;\n  var output = [];\n\n  for (var i = start; i < end; i += 3) {\n    tmp = (uint8[i] << 16 & 0xFF0000) + (uint8[i + 1] << 8 & 0xFF00) + (uint8[i + 2] & 0xFF);\n    output.push(tripletToBase64(tmp));\n  }\n\n  return output.join('');\n}\n\nfunction fromByteArray(uint8) {\n  var tmp;\n  var len = uint8.length;\n  var extraBytes = len % 3; // if we have 1 byte left, pad 2 bytes\n\n  var parts = [];\n  var maxChunkLength = 16383; // must be multiple of 3\n  // go through the array every three bytes, we'll deal with trailing stuff later\n\n  for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) {\n    parts.push(encodeChunk(uint8, i, i + maxChunkLength > len2 ? len2 : i + maxChunkLength));\n  } // pad the end with zeros, but make sure to not forget the extra bytes\n\n\n  if (extraBytes === 1) {\n    tmp = uint8[len - 1];\n    parts.push(lookup[tmp >> 2] + lookup[tmp << 4 & 0x3F] + '==');\n  } else if (extraBytes === 2) {\n    tmp = (uint8[len - 2] << 8) + uint8[len - 1];\n    parts.push(lookup[tmp >> 10] + lookup[tmp >> 4 & 0x3F] + lookup[tmp << 2 & 0x3F] + '=');\n  }\n\n  return parts.join('');\n}","exports.read = function (buffer, offset, isLE, mLen, nBytes) {\n  var e, m;\n  var eLen = nBytes * 8 - mLen - 1;\n  var eMax = (1 << eLen) - 1;\n  var eBias = eMax >> 1;\n  var nBits = -7;\n  var i = isLE ? nBytes - 1 : 0;\n  var d = isLE ? -1 : 1;\n  var s = buffer[offset + i];\n  i += d;\n  e = s & (1 << -nBits) - 1;\n  s >>= -nBits;\n  nBits += eLen;\n\n  for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {}\n\n  m = e & (1 << -nBits) - 1;\n  e >>= -nBits;\n  nBits += mLen;\n\n  for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {}\n\n  if (e === 0) {\n    e = 1 - eBias;\n  } else if (e === eMax) {\n    return m ? NaN : (s ? -1 : 1) * Infinity;\n  } else {\n    m = m + Math.pow(2, mLen);\n    e = e - eBias;\n  }\n\n  return (s ? -1 : 1) * m * Math.pow(2, e - mLen);\n};\n\nexports.write = function (buffer, value, offset, isLE, mLen, nBytes) {\n  var e, m, c;\n  var eLen = nBytes * 8 - mLen - 1;\n  var eMax = (1 << eLen) - 1;\n  var eBias = eMax >> 1;\n  var rt = mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0;\n  var i = isLE ? 0 : nBytes - 1;\n  var d = isLE ? 1 : -1;\n  var s = value < 0 || value === 0 && 1 / value < 0 ? 1 : 0;\n  value = Math.abs(value);\n\n  if (isNaN(value) || value === Infinity) {\n    m = isNaN(value) ? 1 : 0;\n    e = eMax;\n  } else {\n    e = Math.floor(Math.log(value) / Math.LN2);\n\n    if (value * (c = Math.pow(2, -e)) < 1) {\n      e--;\n      c *= 2;\n    }\n\n    if (e + eBias >= 1) {\n      value += rt / c;\n    } else {\n      value += rt * Math.pow(2, 1 - eBias);\n    }\n\n    if (value * c >= 2) {\n      e++;\n      c /= 2;\n    }\n\n    if (e + eBias >= eMax) {\n      m = 0;\n      e = eMax;\n    } else if (e + eBias >= 1) {\n      m = (value * c - 1) * Math.pow(2, mLen);\n      e = e + eBias;\n    } else {\n      m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen);\n      e = 0;\n    }\n  }\n\n  for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {}\n\n  e = e << mLen | m;\n  eLen += mLen;\n\n  for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {}\n\n  buffer[offset + i - d] |= s * 128;\n};","'use strict';\n\nfunction _classCallCheck(instance, Constructor) {\n  if (!(instance instanceof Constructor)) {\n    throw new TypeError(\"Cannot call a class as a function\");\n  }\n}\n\nvar Buffer = require('safe-buffer').Buffer;\n\nvar util = require('util');\n\nfunction copyBuffer(src, target, offset) {\n  src.copy(target, offset);\n}\n\nmodule.exports = function () {\n  function BufferList() {\n    _classCallCheck(this, BufferList);\n\n    this.head = null;\n    this.tail = null;\n    this.length = 0;\n  }\n\n  BufferList.prototype.push = function push(v) {\n    var entry = {\n      data: v,\n      next: null\n    };\n    if (this.length > 0) this.tail.next = entry;else this.head = entry;\n    this.tail = entry;\n    ++this.length;\n  };\n\n  BufferList.prototype.unshift = function unshift(v) {\n    var entry = {\n      data: v,\n      next: this.head\n    };\n    if (this.length === 0) this.tail = entry;\n    this.head = entry;\n    ++this.length;\n  };\n\n  BufferList.prototype.shift = function shift() {\n    if (this.length === 0) return;\n    var ret = this.head.data;\n    if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next;\n    --this.length;\n    return ret;\n  };\n\n  BufferList.prototype.clear = function clear() {\n    this.head = this.tail = null;\n    this.length = 0;\n  };\n\n  BufferList.prototype.join = function join(s) {\n    if (this.length === 0) return '';\n    var p = this.head;\n    var ret = '' + p.data;\n\n    while (p = p.next) {\n      ret += s + p.data;\n    }\n\n    return ret;\n  };\n\n  BufferList.prototype.concat = function concat(n) {\n    if (this.length === 0) return Buffer.alloc(0);\n    if (this.length === 1) return this.head.data;\n    var ret = Buffer.allocUnsafe(n >>> 0);\n    var p = this.head;\n    var i = 0;\n\n    while (p) {\n      copyBuffer(p.data, ret, i);\n      i += p.data.length;\n      p = p.next;\n    }\n\n    return ret;\n  };\n\n  return BufferList;\n}();\n\nif (util && util.inspect && util.inspect.custom) {\n  module.exports.prototype[util.inspect.custom] = function () {\n    var obj = util.inspect({\n      length: this.length\n    });\n    return this.constructor.name + ' ' + obj;\n  };\n}","/**\n * Module exports.\n */\nmodule.exports = deprecate;\n/**\n * Mark that a method should not be used.\n * Returns a modified function which warns once by default.\n *\n * If `localStorage.noDeprecation = true` is set, then it is a no-op.\n *\n * If `localStorage.throwDeprecation = true` is set, then deprecated functions\n * will throw an Error when invoked.\n *\n * If `localStorage.traceDeprecation = true` is set, then deprecated functions\n * will invoke `console.trace()` instead of `console.error()`.\n *\n * @param {Function} fn - the function to deprecate\n * @param {String} msg - the string to print to the console when `fn` is invoked\n * @returns {Function} a new \"deprecated\" version of `fn`\n * @api public\n */\n\nfunction deprecate(fn, msg) {\n  if (config('noDeprecation')) {\n    return fn;\n  }\n\n  var warned = false;\n\n  function deprecated() {\n    if (!warned) {\n      if (config('throwDeprecation')) {\n        throw new Error(msg);\n      } else if (config('traceDeprecation')) {\n        console.trace(msg);\n      } else {\n        console.warn(msg);\n      }\n\n      warned = true;\n    }\n\n    return fn.apply(this, arguments);\n  }\n\n  return deprecated;\n}\n/**\n * Checks `localStorage` for boolean values for the given `name`.\n *\n * @param {String} name\n * @returns {Boolean}\n * @api private\n */\n\n\nfunction config(name) {\n  // accessing global.localStorage can trigger a DOMException in sandboxed iframes\n  try {\n    if (!global.localStorage) return false;\n  } catch (_) {\n    return false;\n  }\n\n  var val = global.localStorage[name];\n  if (null == val) return false;\n  return String(val).toLowerCase() === 'true';\n}","// Copyright Joyent, Inc. and other Node contributors.\n//\n// Permission is hereby granted, free of charge, to any person obtaining a\n// copy of this software and associated documentation files (the\n// \"Software\"), to deal in the Software without restriction, including\n// without limitation the rights to use, copy, modify, merge, publish,\n// distribute, sublicense, and/or sell copies of the Software, and to permit\n// persons to whom the Software is furnished to do so, subject to the\n// following conditions:\n//\n// The above copyright notice and this permission notice shall be included\n// in all copies or substantial portions of the Software.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS\n// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN\n// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,\n// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR\n// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE\n// USE OR OTHER DEALINGS IN THE SOFTWARE.\n// a passthrough stream.\n// basically just the most minimal sort of Transform stream.\n// Every written chunk gets output as-is.\n'use strict';\n\nmodule.exports = PassThrough;\n\nvar Transform = require('./_stream_transform');\n/*<replacement>*/\n\n\nvar util = require('core-util-is');\n\nutil.inherits = require('inherits');\n/*</replacement>*/\n\nutil.inherits(PassThrough, Transform);\n\nfunction PassThrough(options) {\n  if (!(this instanceof PassThrough)) return new PassThrough(options);\n  Transform.call(this, options);\n}\n\nPassThrough.prototype._transform = function (chunk, encoding, cb) {\n  cb(null, chunk);\n};","module.exports = require('./lib/_stream_writable.js');","module.exports = require('./lib/_stream_duplex.js');","module.exports = require('./readable').Transform;","module.exports = require('./readable').PassThrough;","'use strict';\n\nmodule.exports = typeof setImmediate === 'function' ? setImmediate : function setImmediate() {\n  var args = [].slice.apply(arguments);\n  args.splice(1, 0, 0);\n  setTimeout.apply(null, args);\n};","'use strict';\n\nfunction _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nvar immediate = require('immediate');\n/* istanbul ignore next */\n\n\nfunction INTERNAL() {}\n\nvar handlers = {};\nvar REJECTED = ['REJECTED'];\nvar FULFILLED = ['FULFILLED'];\nvar PENDING = ['PENDING'];\nmodule.exports = Promise;\n\nfunction Promise(resolver) {\n  if (typeof resolver !== 'function') {\n    throw new TypeError('resolver must be a function');\n  }\n\n  this.state = PENDING;\n  this.queue = [];\n  this.outcome = void 0;\n\n  if (resolver !== INTERNAL) {\n    safelyResolveThenable(this, resolver);\n  }\n}\n\nPromise.prototype[\"finally\"] = function (callback) {\n  if (typeof callback !== 'function') {\n    return this;\n  }\n\n  var p = this.constructor;\n  return this.then(resolve, reject);\n\n  function resolve(value) {\n    function yes() {\n      return value;\n    }\n\n    return p.resolve(callback()).then(yes);\n  }\n\n  function reject(reason) {\n    function no() {\n      throw reason;\n    }\n\n    return p.resolve(callback()).then(no);\n  }\n};\n\nPromise.prototype[\"catch\"] = function (onRejected) {\n  return this.then(null, onRejected);\n};\n\nPromise.prototype.then = function (onFulfilled, onRejected) {\n  if (typeof onFulfilled !== 'function' && this.state === FULFILLED || typeof onRejected !== 'function' && this.state === REJECTED) {\n    return this;\n  }\n\n  var promise = new this.constructor(INTERNAL);\n\n  if (this.state !== PENDING) {\n    var resolver = this.state === FULFILLED ? onFulfilled : onRejected;\n    unwrap(promise, resolver, this.outcome);\n  } else {\n    this.queue.push(new QueueItem(promise, onFulfilled, onRejected));\n  }\n\n  return promise;\n};\n\nfunction QueueItem(promise, onFulfilled, onRejected) {\n  this.promise = promise;\n\n  if (typeof onFulfilled === 'function') {\n    this.onFulfilled = onFulfilled;\n    this.callFulfilled = this.otherCallFulfilled;\n  }\n\n  if (typeof onRejected === 'function') {\n    this.onRejected = onRejected;\n    this.callRejected = this.otherCallRejected;\n  }\n}\n\nQueueItem.prototype.callFulfilled = function (value) {\n  handlers.resolve(this.promise, value);\n};\n\nQueueItem.prototype.otherCallFulfilled = function (value) {\n  unwrap(this.promise, this.onFulfilled, value);\n};\n\nQueueItem.prototype.callRejected = function (value) {\n  handlers.reject(this.promise, value);\n};\n\nQueueItem.prototype.otherCallRejected = function (value) {\n  unwrap(this.promise, this.onRejected, value);\n};\n\nfunction unwrap(promise, func, value) {\n  immediate(function () {\n    var returnValue;\n\n    try {\n      returnValue = func(value);\n    } catch (e) {\n      return handlers.reject(promise, e);\n    }\n\n    if (returnValue === promise) {\n      handlers.reject(promise, new TypeError('Cannot resolve promise with itself'));\n    } else {\n      handlers.resolve(promise, returnValue);\n    }\n  });\n}\n\nhandlers.resolve = function (self, value) {\n  var result = tryCatch(getThen, value);\n\n  if (result.status === 'error') {\n    return handlers.reject(self, result.value);\n  }\n\n  var thenable = result.value;\n\n  if (thenable) {\n    safelyResolveThenable(self, thenable);\n  } else {\n    self.state = FULFILLED;\n    self.outcome = value;\n    var i = -1;\n    var len = self.queue.length;\n\n    while (++i < len) {\n      self.queue[i].callFulfilled(value);\n    }\n  }\n\n  return self;\n};\n\nhandlers.reject = function (self, error) {\n  self.state = REJECTED;\n  self.outcome = error;\n  var i = -1;\n  var len = self.queue.length;\n\n  while (++i < len) {\n    self.queue[i].callRejected(error);\n  }\n\n  return self;\n};\n\nfunction getThen(obj) {\n  // Make sure we only access the accessor once as required by the spec\n  var then = obj && obj.then;\n\n  if (obj && (_typeof(obj) === 'object' || typeof obj === 'function') && typeof then === 'function') {\n    return function appyThen() {\n      then.apply(obj, arguments);\n    };\n  }\n}\n\nfunction safelyResolveThenable(self, thenable) {\n  // Either fulfill, reject or reject with error\n  var called = false;\n\n  function onError(value) {\n    if (called) {\n      return;\n    }\n\n    called = true;\n    handlers.reject(self, value);\n  }\n\n  function onSuccess(value) {\n    if (called) {\n      return;\n    }\n\n    called = true;\n    handlers.resolve(self, value);\n  }\n\n  function tryToUnwrap() {\n    thenable(onSuccess, onError);\n  }\n\n  var result = tryCatch(tryToUnwrap);\n\n  if (result.status === 'error') {\n    onError(result.value);\n  }\n}\n\nfunction tryCatch(func, value) {\n  var out = {};\n\n  try {\n    out.value = func(value);\n    out.status = 'success';\n  } catch (e) {\n    out.status = 'error';\n    out.value = e;\n  }\n\n  return out;\n}\n\nPromise.resolve = resolve;\n\nfunction resolve(value) {\n  if (value instanceof this) {\n    return value;\n  }\n\n  return handlers.resolve(new this(INTERNAL), value);\n}\n\nPromise.reject = reject;\n\nfunction reject(reason) {\n  var promise = new this(INTERNAL);\n  return handlers.reject(promise, reason);\n}\n\nPromise.all = all;\n\nfunction all(iterable) {\n  var self = this;\n\n  if (Object.prototype.toString.call(iterable) !== '[object Array]') {\n    return this.reject(new TypeError('must be an array'));\n  }\n\n  var len = iterable.length;\n  var called = false;\n\n  if (!len) {\n    return this.resolve([]);\n  }\n\n  var values = new Array(len);\n  var resolved = 0;\n  var i = -1;\n  var promise = new this(INTERNAL);\n\n  while (++i < len) {\n    allResolver(iterable[i], i);\n  }\n\n  return promise;\n\n  function allResolver(value, i) {\n    self.resolve(value).then(resolveFromAll, function (error) {\n      if (!called) {\n        called = true;\n        handlers.reject(promise, error);\n      }\n    });\n\n    function resolveFromAll(outValue) {\n      values[i] = outValue;\n\n      if (++resolved === len && !called) {\n        called = true;\n        handlers.resolve(promise, values);\n      }\n    }\n  }\n}\n\nPromise.race = race;\n\nfunction race(iterable) {\n  var self = this;\n\n  if (Object.prototype.toString.call(iterable) !== '[object Array]') {\n    return this.reject(new TypeError('must be an array'));\n  }\n\n  var len = iterable.length;\n  var called = false;\n\n  if (!len) {\n    return this.resolve([]);\n  }\n\n  var i = -1;\n  var promise = new this(INTERNAL);\n\n  while (++i < len) {\n    resolver(iterable[i]);\n  }\n\n  return promise;\n\n  function resolver(value) {\n    self.resolve(value).then(function (response) {\n      if (!called) {\n        called = true;\n        handlers.resolve(promise, response);\n      }\n    }, function (error) {\n      if (!called) {\n        called = true;\n        handlers.reject(promise, error);\n      }\n    });\n  }\n}","'use strict';\n\nvar Mutation = global.MutationObserver || global.WebKitMutationObserver;\nvar scheduleDrain;\n{\n  if (Mutation) {\n    var called = 0;\n    var observer = new Mutation(nextTick);\n    var element = global.document.createTextNode('');\n    observer.observe(element, {\n      characterData: true\n    });\n\n    scheduleDrain = function scheduleDrain() {\n      element.data = called = ++called % 2;\n    };\n  } else if (!global.setImmediate && typeof global.MessageChannel !== 'undefined') {\n    var channel = new global.MessageChannel();\n    channel.port1.onmessage = nextTick;\n\n    scheduleDrain = function scheduleDrain() {\n      channel.port2.postMessage(0);\n    };\n  } else if ('document' in global && 'onreadystatechange' in global.document.createElement('script')) {\n    scheduleDrain = function scheduleDrain() {\n      // Create a <script> element; its readystatechange event will be fired asynchronously once it is inserted\n      // into the document. Do so, thus queuing up the task. Remember to clean up once it's been called.\n      var scriptEl = global.document.createElement('script');\n\n      scriptEl.onreadystatechange = function () {\n        nextTick();\n        scriptEl.onreadystatechange = null;\n        scriptEl.parentNode.removeChild(scriptEl);\n        scriptEl = null;\n      };\n\n      global.document.documentElement.appendChild(scriptEl);\n    };\n  } else {\n    scheduleDrain = function scheduleDrain() {\n      setTimeout(nextTick, 0);\n    };\n  }\n}\nvar draining;\nvar queue = []; //named nextTick for less confusing stack traces\n\nfunction nextTick() {\n  draining = true;\n  var i, oldQueue;\n  var len = queue.length;\n\n  while (len) {\n    oldQueue = queue;\n    queue = [];\n    i = -1;\n\n    while (++i < len) {\n      oldQueue[i]();\n    }\n\n    len = queue.length;\n  }\n\n  draining = false;\n}\n\nmodule.exports = immediate;\n\nfunction immediate(task) {\n  if (queue.push(task) === 1 && !draining) {\n    scheduleDrain();\n  }\n}","'use strict';\n\nvar GenericWorker = require('./GenericWorker');\n\nvar utils = require('../utils');\n/**\n * A worker which convert chunks to a specified type.\n * @constructor\n * @param {String} destType the destination type.\n */\n\n\nfunction ConvertWorker(destType) {\n  GenericWorker.call(this, \"ConvertWorker to \" + destType);\n  this.destType = destType;\n}\n\nutils.inherits(ConvertWorker, GenericWorker);\n/**\n * @see GenericWorker.processChunk\n */\n\nConvertWorker.prototype.processChunk = function (chunk) {\n  this.push({\n    data: utils.transformTo(this.destType, chunk.data),\n    meta: chunk.meta\n  });\n};\n\nmodule.exports = ConvertWorker;","'use strict';\n\nvar Readable = require('readable-stream').Readable;\n\nvar utils = require('../utils');\n\nutils.inherits(NodejsStreamOutputAdapter, Readable);\n/**\n* A nodejs stream using a worker as source.\n* @see the SourceWrapper in http://nodejs.org/api/stream.html\n* @constructor\n* @param {StreamHelper} helper the helper wrapping the worker\n* @param {Object} options the nodejs stream options\n* @param {Function} updateCb the update callback.\n*/\n\nfunction NodejsStreamOutputAdapter(helper, options, updateCb) {\n  Readable.call(this, options);\n  this._helper = helper;\n  var self = this;\n  helper.on(\"data\", function (data, meta) {\n    if (!self.push(data)) {\n      self._helper.pause();\n    }\n\n    if (updateCb) {\n      updateCb(meta);\n    }\n  }).on(\"error\", function (e) {\n    self.emit('error', e);\n  }).on(\"end\", function () {\n    self.push(null);\n  });\n}\n\nNodejsStreamOutputAdapter.prototype._read = function () {\n  this._helper.resume();\n};\n\nmodule.exports = NodejsStreamOutputAdapter;","'use strict';\n\nvar StreamHelper = require('./stream/StreamHelper');\n\nvar DataWorker = require('./stream/DataWorker');\n\nvar utf8 = require('./utf8');\n\nvar CompressedObject = require('./compressedObject');\n\nvar GenericWorker = require('./stream/GenericWorker');\n/**\n * A simple object representing a file in the zip file.\n * @constructor\n * @param {string} name the name of the file\n * @param {String|ArrayBuffer|Uint8Array|Buffer} data the data\n * @param {Object} options the options of the file\n */\n\n\nvar ZipObject = function ZipObject(name, data, options) {\n  this.name = name;\n  this.dir = options.dir;\n  this.date = options.date;\n  this.comment = options.comment;\n  this.unixPermissions = options.unixPermissions;\n  this.dosPermissions = options.dosPermissions;\n  this._data = data;\n  this._dataBinary = options.binary; // keep only the compression\n\n  this.options = {\n    compression: options.compression,\n    compressionOptions: options.compressionOptions\n  };\n};\n\nZipObject.prototype = {\n  /**\n   * Create an internal stream for the content of this object.\n   * @param {String} type the type of each chunk.\n   * @return StreamHelper the stream.\n   */\n  internalStream: function internalStream(type) {\n    var result = null,\n        outputType = \"string\";\n\n    try {\n      if (!type) {\n        throw new Error(\"No output type specified.\");\n      }\n\n      outputType = type.toLowerCase();\n      var askUnicodeString = outputType === \"string\" || outputType === \"text\";\n\n      if (outputType === \"binarystring\" || outputType === \"text\") {\n        outputType = \"string\";\n      }\n\n      result = this._decompressWorker();\n      var isUnicodeString = !this._dataBinary;\n\n      if (isUnicodeString && !askUnicodeString) {\n        result = result.pipe(new utf8.Utf8EncodeWorker());\n      }\n\n      if (!isUnicodeString && askUnicodeString) {\n        result = result.pipe(new utf8.Utf8DecodeWorker());\n      }\n    } catch (e) {\n      result = new GenericWorker(\"error\");\n      result.error(e);\n    }\n\n    return new StreamHelper(result, outputType, \"\");\n  },\n\n  /**\n   * Prepare the content in the asked type.\n   * @param {String} type the type of the result.\n   * @param {Function} onUpdate a function to call on each internal update.\n   * @return Promise the promise of the result.\n   */\n  async: function async(type, onUpdate) {\n    return this.internalStream(type).accumulate(onUpdate);\n  },\n\n  /**\n   * Prepare the content as a nodejs stream.\n   * @param {String} type the type of each chunk.\n   * @param {Function} onUpdate a function to call on each internal update.\n   * @return Stream the stream.\n   */\n  nodeStream: function nodeStream(type, onUpdate) {\n    return this.internalStream(type || \"nodebuffer\").toNodejsStream(onUpdate);\n  },\n\n  /**\n   * Return a worker for the compressed content.\n   * @private\n   * @param {Object} compression the compression object to use.\n   * @param {Object} compressionOptions the options to use when compressing.\n   * @return Worker the worker.\n   */\n  _compressWorker: function _compressWorker(compression, compressionOptions) {\n    if (this._data instanceof CompressedObject && this._data.compression.magic === compression.magic) {\n      return this._data.getCompressedWorker();\n    } else {\n      var result = this._decompressWorker();\n\n      if (!this._dataBinary) {\n        result = result.pipe(new utf8.Utf8EncodeWorker());\n      }\n\n      return CompressedObject.createWorkerFrom(result, compression, compressionOptions);\n    }\n  },\n\n  /**\n   * Return a worker for the decompressed content.\n   * @private\n   * @return Worker the worker.\n   */\n  _decompressWorker: function _decompressWorker() {\n    if (this._data instanceof CompressedObject) {\n      return this._data.getContentWorker();\n    } else if (this._data instanceof GenericWorker) {\n      return this._data;\n    } else {\n      return new DataWorker(this._data);\n    }\n  }\n};\nvar removedMethods = [\"asText\", \"asBinary\", \"asNodeBuffer\", \"asUint8Array\", \"asArrayBuffer\"];\n\nvar removedFn = function removedFn() {\n  throw new Error(\"This method has been removed in JSZip 3.0, please check the upgrade guide.\");\n};\n\nfor (var i = 0; i < removedMethods.length; i++) {\n  ZipObject.prototype[removedMethods[i]] = removedFn;\n}\n\nmodule.exports = ZipObject;","'use strict';\n\nvar compressions = require('../compressions');\n\nvar ZipFileWorker = require('./ZipFileWorker');\n/**\n * Find the compression to use.\n * @param {String} fileCompression the compression defined at the file level, if any.\n * @param {String} zipCompression the compression defined at the load() level.\n * @return {Object} the compression object to use.\n */\n\n\nvar getCompression = function getCompression(fileCompression, zipCompression) {\n  var compressionName = fileCompression || zipCompression;\n  var compression = compressions[compressionName];\n\n  if (!compression) {\n    throw new Error(compressionName + \" is not a valid compression method !\");\n  }\n\n  return compression;\n};\n/**\n * Create a worker to generate a zip file.\n * @param {JSZip} zip the JSZip instance at the right root level.\n * @param {Object} options to generate the zip file.\n * @param {String} comment the comment to use.\n */\n\n\nexports.generateWorker = function (zip, options, comment) {\n  var zipFileWorker = new ZipFileWorker(options.streamFiles, comment, options.platform, options.encodeFileName);\n  var entriesCount = 0;\n\n  try {\n    zip.forEach(function (relativePath, file) {\n      entriesCount++;\n      var compression = getCompression(file.options.compression, options.compression);\n      var compressionOptions = file.options.compressionOptions || options.compressionOptions || {};\n      var dir = file.dir,\n          date = file.date;\n\n      file._compressWorker(compression, compressionOptions).withStreamInfo(\"file\", {\n        name: relativePath,\n        dir: dir,\n        date: date,\n        comment: file.comment || \"\",\n        unixPermissions: file.unixPermissions,\n        dosPermissions: file.dosPermissions\n      }).pipe(zipFileWorker);\n    });\n    zipFileWorker.entriesCount = entriesCount;\n  } catch (e) {\n    zipFileWorker.error(e);\n  }\n\n  return zipFileWorker;\n};","'use strict';\n\nvar USE_TYPEDARRAY = typeof Uint8Array !== 'undefined' && typeof Uint16Array !== 'undefined' && typeof Uint32Array !== 'undefined';\n\nvar pako = require(\"pako\");\n\nvar utils = require(\"./utils\");\n\nvar GenericWorker = require(\"./stream/GenericWorker\");\n\nvar ARRAY_TYPE = USE_TYPEDARRAY ? \"uint8array\" : \"array\";\nexports.magic = \"\\x08\\x00\";\n/**\n * Create a worker that uses pako to inflate/deflate.\n * @constructor\n * @param {String} action the name of the pako function to call : either \"Deflate\" or \"Inflate\".\n * @param {Object} options the options to use when (de)compressing.\n */\n\nfunction FlateWorker(action, options) {\n  GenericWorker.call(this, \"FlateWorker/\" + action);\n  this._pako = null;\n  this._pakoAction = action;\n  this._pakoOptions = options; // the `meta` object from the last chunk received\n  // this allow this worker to pass around metadata\n\n  this.meta = {};\n}\n\nutils.inherits(FlateWorker, GenericWorker);\n/**\n * @see GenericWorker.processChunk\n */\n\nFlateWorker.prototype.processChunk = function (chunk) {\n  this.meta = chunk.meta;\n\n  if (this._pako === null) {\n    this._createPako();\n  }\n\n  this._pako.push(utils.transformTo(ARRAY_TYPE, chunk.data), false);\n};\n/**\n * @see GenericWorker.flush\n */\n\n\nFlateWorker.prototype.flush = function () {\n  GenericWorker.prototype.flush.call(this);\n\n  if (this._pako === null) {\n    this._createPako();\n  }\n\n  this._pako.push([], true);\n};\n/**\n * @see GenericWorker.cleanUp\n */\n\n\nFlateWorker.prototype.cleanUp = function () {\n  GenericWorker.prototype.cleanUp.call(this);\n  this._pako = null;\n};\n/**\n * Create the _pako object.\n * TODO: lazy-loading this object isn't the best solution but it's the\n * quickest. The best solution is to lazy-load the worker list. See also the\n * issue #446.\n */\n\n\nFlateWorker.prototype._createPako = function () {\n  this._pako = new pako[this._pakoAction]({\n    raw: true,\n    level: this._pakoOptions.level || -1 // default compression\n\n  });\n  var self = this;\n\n  this._pako.onData = function (data) {\n    self.push({\n      data: data,\n      meta: self.meta\n    });\n  };\n};\n\nexports.compressWorker = function (compressionOptions) {\n  return new FlateWorker(\"Deflate\", compressionOptions);\n};\n\nexports.uncompressWorker = function () {\n  return new FlateWorker(\"Inflate\", {});\n};","// Top level file is just a mixin of submodules & constants\n'use strict';\n\nvar assign = require('./lib/utils/common').assign;\n\nvar deflate = require('./lib/deflate');\n\nvar inflate = require('./lib/inflate');\n\nvar constants = require('./lib/zlib/constants');\n\nvar pako = {};\nassign(pako, deflate, inflate, constants);\nmodule.exports = pako;","'use strict';\n\nvar zlib_deflate = require('./zlib/deflate');\n\nvar utils = require('./utils/common');\n\nvar strings = require('./utils/strings');\n\nvar msg = require('./zlib/messages');\n\nvar ZStream = require('./zlib/zstream');\n\nvar toString = Object.prototype.toString;\n/* Public constants ==========================================================*/\n\n/* ===========================================================================*/\n\nvar Z_NO_FLUSH = 0;\nvar Z_FINISH = 4;\nvar Z_OK = 0;\nvar Z_STREAM_END = 1;\nvar Z_SYNC_FLUSH = 2;\nvar Z_DEFAULT_COMPRESSION = -1;\nvar Z_DEFAULT_STRATEGY = 0;\nvar Z_DEFLATED = 8;\n/* ===========================================================================*/\n\n/**\n * class Deflate\n *\n * Generic JS-style wrapper for zlib calls. If you don't need\n * streaming behaviour - use more simple functions: [[deflate]],\n * [[deflateRaw]] and [[gzip]].\n **/\n\n/* internal\n * Deflate.chunks -> Array\n *\n * Chunks of output data, if [[Deflate#onData]] not overridden.\n **/\n\n/**\n * Deflate.result -> Uint8Array|Array\n *\n * Compressed result, generated by default [[Deflate#onData]]\n * and [[Deflate#onEnd]] handlers. Filled after you push last chunk\n * (call [[Deflate#push]] with `Z_FINISH` / `true` param)  or if you\n * push a chunk with explicit flush (call [[Deflate#push]] with\n * `Z_SYNC_FLUSH` param).\n **/\n\n/**\n * Deflate.err -> Number\n *\n * Error code after deflate finished. 0 (Z_OK) on success.\n * You will not need it in real life, because deflate errors\n * are possible only on wrong options or bad `onData` / `onEnd`\n * custom handlers.\n **/\n\n/**\n * Deflate.msg -> String\n *\n * Error message, if [[Deflate.err]] != 0\n **/\n\n/**\n * new Deflate(options)\n * - options (Object): zlib deflate options.\n *\n * Creates new deflator instance with specified params. Throws exception\n * on bad params. Supported options:\n *\n * - `level`\n * - `windowBits`\n * - `memLevel`\n * - `strategy`\n * - `dictionary`\n *\n * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)\n * for more information on these.\n *\n * Additional options, for internal needs:\n *\n * - `chunkSize` - size of generated data chunks (16K by default)\n * - `raw` (Boolean) - do raw deflate\n * - `gzip` (Boolean) - create gzip wrapper\n * - `to` (String) - if equal to 'string', then result will be \"binary string\"\n *    (each char code [0..255])\n * - `header` (Object) - custom header for gzip\n *   - `text` (Boolean) - true if compressed data believed to be text\n *   - `time` (Number) - modification time, unix timestamp\n *   - `os` (Number) - operation system code\n *   - `extra` (Array) - array of bytes with extra data (max 65536)\n *   - `name` (String) - file name (binary string)\n *   - `comment` (String) - comment (binary string)\n *   - `hcrc` (Boolean) - true if header crc should be added\n *\n * ##### Example:\n *\n * ```javascript\n * var pako = require('pako')\n *   , chunk1 = Uint8Array([1,2,3,4,5,6,7,8,9])\n *   , chunk2 = Uint8Array([10,11,12,13,14,15,16,17,18,19]);\n *\n * var deflate = new pako.Deflate({ level: 3});\n *\n * deflate.push(chunk1, false);\n * deflate.push(chunk2, true);  // true -> last chunk\n *\n * if (deflate.err) { throw new Error(deflate.err); }\n *\n * console.log(deflate.result);\n * ```\n **/\n\nfunction Deflate(options) {\n  if (!(this instanceof Deflate)) return new Deflate(options);\n  this.options = utils.assign({\n    level: Z_DEFAULT_COMPRESSION,\n    method: Z_DEFLATED,\n    chunkSize: 16384,\n    windowBits: 15,\n    memLevel: 8,\n    strategy: Z_DEFAULT_STRATEGY,\n    to: ''\n  }, options || {});\n  var opt = this.options;\n\n  if (opt.raw && opt.windowBits > 0) {\n    opt.windowBits = -opt.windowBits;\n  } else if (opt.gzip && opt.windowBits > 0 && opt.windowBits < 16) {\n    opt.windowBits += 16;\n  }\n\n  this.err = 0; // error code, if happens (0 = Z_OK)\n\n  this.msg = ''; // error message\n\n  this.ended = false; // used to avoid multiple onEnd() calls\n\n  this.chunks = []; // chunks of compressed data\n\n  this.strm = new ZStream();\n  this.strm.avail_out = 0;\n  var status = zlib_deflate.deflateInit2(this.strm, opt.level, opt.method, opt.windowBits, opt.memLevel, opt.strategy);\n\n  if (status !== Z_OK) {\n    throw new Error(msg[status]);\n  }\n\n  if (opt.header) {\n    zlib_deflate.deflateSetHeader(this.strm, opt.header);\n  }\n\n  if (opt.dictionary) {\n    var dict; // Convert data if needed\n\n    if (typeof opt.dictionary === 'string') {\n      // If we need to compress text, change encoding to utf8.\n      dict = strings.string2buf(opt.dictionary);\n    } else if (toString.call(opt.dictionary) === '[object ArrayBuffer]') {\n      dict = new Uint8Array(opt.dictionary);\n    } else {\n      dict = opt.dictionary;\n    }\n\n    status = zlib_deflate.deflateSetDictionary(this.strm, dict);\n\n    if (status !== Z_OK) {\n      throw new Error(msg[status]);\n    }\n\n    this._dict_set = true;\n  }\n}\n/**\n * Deflate#push(data[, mode]) -> Boolean\n * - data (Uint8Array|Array|ArrayBuffer|String): input data. Strings will be\n *   converted to utf8 byte sequence.\n * - mode (Number|Boolean): 0..6 for corresponding Z_NO_FLUSH..Z_TREE modes.\n *   See constants. Skipped or `false` means Z_NO_FLUSH, `true` means Z_FINISH.\n *\n * Sends input data to deflate pipe, generating [[Deflate#onData]] calls with\n * new compressed chunks. Returns `true` on success. The last data block must have\n * mode Z_FINISH (or `true`). That will flush internal pending buffers and call\n * [[Deflate#onEnd]]. For interim explicit flushes (without ending the stream) you\n * can use mode Z_SYNC_FLUSH, keeping the compression context.\n *\n * On fail call [[Deflate#onEnd]] with error code and return false.\n *\n * We strongly recommend to use `Uint8Array` on input for best speed (output\n * array format is detected automatically). Also, don't skip last param and always\n * use the same type in your code (boolean or number). That will improve JS speed.\n *\n * For regular `Array`-s make sure all elements are [0..255].\n *\n * ##### Example\n *\n * ```javascript\n * push(chunk, false); // push one of data chunks\n * ...\n * push(chunk, true);  // push last chunk\n * ```\n **/\n\n\nDeflate.prototype.push = function (data, mode) {\n  var strm = this.strm;\n  var chunkSize = this.options.chunkSize;\n\n  var status, _mode;\n\n  if (this.ended) {\n    return false;\n  }\n\n  _mode = mode === ~~mode ? mode : mode === true ? Z_FINISH : Z_NO_FLUSH; // Convert data if needed\n\n  if (typeof data === 'string') {\n    // If we need to compress text, change encoding to utf8.\n    strm.input = strings.string2buf(data);\n  } else if (toString.call(data) === '[object ArrayBuffer]') {\n    strm.input = new Uint8Array(data);\n  } else {\n    strm.input = data;\n  }\n\n  strm.next_in = 0;\n  strm.avail_in = strm.input.length;\n\n  do {\n    if (strm.avail_out === 0) {\n      strm.output = new utils.Buf8(chunkSize);\n      strm.next_out = 0;\n      strm.avail_out = chunkSize;\n    }\n\n    status = zlib_deflate.deflate(strm, _mode);\n    /* no bad return value */\n\n    if (status !== Z_STREAM_END && status !== Z_OK) {\n      this.onEnd(status);\n      this.ended = true;\n      return false;\n    }\n\n    if (strm.avail_out === 0 || strm.avail_in === 0 && (_mode === Z_FINISH || _mode === Z_SYNC_FLUSH)) {\n      if (this.options.to === 'string') {\n        this.onData(strings.buf2binstring(utils.shrinkBuf(strm.output, strm.next_out)));\n      } else {\n        this.onData(utils.shrinkBuf(strm.output, strm.next_out));\n      }\n    }\n  } while ((strm.avail_in > 0 || strm.avail_out === 0) && status !== Z_STREAM_END); // Finalize on the last chunk.\n\n\n  if (_mode === Z_FINISH) {\n    status = zlib_deflate.deflateEnd(this.strm);\n    this.onEnd(status);\n    this.ended = true;\n    return status === Z_OK;\n  } // callback interim results if Z_SYNC_FLUSH.\n\n\n  if (_mode === Z_SYNC_FLUSH) {\n    this.onEnd(Z_OK);\n    strm.avail_out = 0;\n    return true;\n  }\n\n  return true;\n};\n/**\n * Deflate#onData(chunk) -> Void\n * - chunk (Uint8Array|Array|String): output data. Type of array depends\n *   on js engine support. When string output requested, each chunk\n *   will be string.\n *\n * By default, stores data blocks in `chunks[]` property and glue\n * those in `onEnd`. Override this handler, if you need another behaviour.\n **/\n\n\nDeflate.prototype.onData = function (chunk) {\n  this.chunks.push(chunk);\n};\n/**\n * Deflate#onEnd(status) -> Void\n * - status (Number): deflate status. 0 (Z_OK) on success,\n *   other if not.\n *\n * Called once after you tell deflate that the input stream is\n * complete (Z_FINISH) or should be flushed (Z_SYNC_FLUSH)\n * or if an error happened. By default - join collected chunks,\n * free memory and fill `results` / `err` properties.\n **/\n\n\nDeflate.prototype.onEnd = function (status) {\n  // On success - join\n  if (status === Z_OK) {\n    if (this.options.to === 'string') {\n      this.result = this.chunks.join('');\n    } else {\n      this.result = utils.flattenChunks(this.chunks);\n    }\n  }\n\n  this.chunks = [];\n  this.err = status;\n  this.msg = this.strm.msg;\n};\n/**\n * deflate(data[, options]) -> Uint8Array|Array|String\n * - data (Uint8Array|Array|String): input data to compress.\n * - options (Object): zlib deflate options.\n *\n * Compress `data` with deflate algorithm and `options`.\n *\n * Supported options are:\n *\n * - level\n * - windowBits\n * - memLevel\n * - strategy\n * - dictionary\n *\n * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)\n * for more information on these.\n *\n * Sugar (options):\n *\n * - `raw` (Boolean) - say that we work with raw stream, if you don't wish to specify\n *   negative windowBits implicitly.\n * - `to` (String) - if equal to 'string', then result will be \"binary string\"\n *    (each char code [0..255])\n *\n * ##### Example:\n *\n * ```javascript\n * var pako = require('pako')\n *   , data = Uint8Array([1,2,3,4,5,6,7,8,9]);\n *\n * console.log(pako.deflate(data));\n * ```\n **/\n\n\nfunction deflate(input, options) {\n  var deflator = new Deflate(options);\n  deflator.push(input, true); // That will never happens, if you don't cheat with options :)\n\n  if (deflator.err) {\n    throw deflator.msg || msg[deflator.err];\n  }\n\n  return deflator.result;\n}\n/**\n * deflateRaw(data[, options]) -> Uint8Array|Array|String\n * - data (Uint8Array|Array|String): input data to compress.\n * - options (Object): zlib deflate options.\n *\n * The same as [[deflate]], but creates raw data, without wrapper\n * (header and adler32 crc).\n **/\n\n\nfunction deflateRaw(input, options) {\n  options = options || {};\n  options.raw = true;\n  return deflate(input, options);\n}\n/**\n * gzip(data[, options]) -> Uint8Array|Array|String\n * - data (Uint8Array|Array|String): input data to compress.\n * - options (Object): zlib deflate options.\n *\n * The same as [[deflate]], but create gzip wrapper instead of\n * deflate one.\n **/\n\n\nfunction gzip(input, options) {\n  options = options || {};\n  options.gzip = true;\n  return deflate(input, options);\n}\n\nexports.Deflate = Deflate;\nexports.deflate = deflate;\nexports.deflateRaw = deflateRaw;\nexports.gzip = gzip;","'use strict'; // (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nvar utils = require('../utils/common');\n\nvar trees = require('./trees');\n\nvar adler32 = require('./adler32');\n\nvar crc32 = require('./crc32');\n\nvar msg = require('./messages');\n/* Public constants ==========================================================*/\n\n/* ===========================================================================*/\n\n/* Allowed flush values; see deflate() and inflate() below for details */\n\n\nvar Z_NO_FLUSH = 0;\nvar Z_PARTIAL_FLUSH = 1; //var Z_SYNC_FLUSH    = 2;\n\nvar Z_FULL_FLUSH = 3;\nvar Z_FINISH = 4;\nvar Z_BLOCK = 5; //var Z_TREES         = 6;\n\n/* Return codes for the compression/decompression functions. Negative values\n * are errors, positive values are used for special but normal events.\n */\n\nvar Z_OK = 0;\nvar Z_STREAM_END = 1; //var Z_NEED_DICT     = 2;\n//var Z_ERRNO         = -1;\n\nvar Z_STREAM_ERROR = -2;\nvar Z_DATA_ERROR = -3; //var Z_MEM_ERROR     = -4;\n\nvar Z_BUF_ERROR = -5; //var Z_VERSION_ERROR = -6;\n\n/* compression levels */\n//var Z_NO_COMPRESSION      = 0;\n//var Z_BEST_SPEED          = 1;\n//var Z_BEST_COMPRESSION    = 9;\n\nvar Z_DEFAULT_COMPRESSION = -1;\nvar Z_FILTERED = 1;\nvar Z_HUFFMAN_ONLY = 2;\nvar Z_RLE = 3;\nvar Z_FIXED = 4;\nvar Z_DEFAULT_STRATEGY = 0;\n/* Possible values of the data_type field (though see inflate()) */\n//var Z_BINARY              = 0;\n//var Z_TEXT                = 1;\n//var Z_ASCII               = 1; // = Z_TEXT\n\nvar Z_UNKNOWN = 2;\n/* The deflate compression method */\n\nvar Z_DEFLATED = 8;\n/*============================================================================*/\n\nvar MAX_MEM_LEVEL = 9;\n/* Maximum value for memLevel in deflateInit2 */\n\nvar MAX_WBITS = 15;\n/* 32K LZ77 window */\n\nvar DEF_MEM_LEVEL = 8;\nvar LENGTH_CODES = 29;\n/* number of length codes, not counting the special END_BLOCK code */\n\nvar LITERALS = 256;\n/* number of literal bytes 0..255 */\n\nvar L_CODES = LITERALS + 1 + LENGTH_CODES;\n/* number of Literal or Length codes, including the END_BLOCK code */\n\nvar D_CODES = 30;\n/* number of distance codes */\n\nvar BL_CODES = 19;\n/* number of codes used to transfer the bit lengths */\n\nvar HEAP_SIZE = 2 * L_CODES + 1;\n/* maximum heap size */\n\nvar MAX_BITS = 15;\n/* All codes must not exceed MAX_BITS bits */\n\nvar MIN_MATCH = 3;\nvar MAX_MATCH = 258;\nvar MIN_LOOKAHEAD = MAX_MATCH + MIN_MATCH + 1;\nvar PRESET_DICT = 0x20;\nvar INIT_STATE = 42;\nvar EXTRA_STATE = 69;\nvar NAME_STATE = 73;\nvar COMMENT_STATE = 91;\nvar HCRC_STATE = 103;\nvar BUSY_STATE = 113;\nvar FINISH_STATE = 666;\nvar BS_NEED_MORE = 1;\n/* block not completed, need more input or more output */\n\nvar BS_BLOCK_DONE = 2;\n/* block flush performed */\n\nvar BS_FINISH_STARTED = 3;\n/* finish started, need only more output at next deflate */\n\nvar BS_FINISH_DONE = 4;\n/* finish done, accept no more input or output */\n\nvar OS_CODE = 0x03; // Unix :) . Don't detect, use this default.\n\nfunction err(strm, errorCode) {\n  strm.msg = msg[errorCode];\n  return errorCode;\n}\n\nfunction rank(f) {\n  return (f << 1) - (f > 4 ? 9 : 0);\n}\n\nfunction zero(buf) {\n  var len = buf.length;\n\n  while (--len >= 0) {\n    buf[len] = 0;\n  }\n}\n/* =========================================================================\n * Flush as much pending output as possible. All deflate() output goes\n * through this function so some applications may wish to modify it\n * to avoid allocating a large strm->output buffer and copying into it.\n * (See also read_buf()).\n */\n\n\nfunction flush_pending(strm) {\n  var s = strm.state; //_tr_flush_bits(s);\n\n  var len = s.pending;\n\n  if (len > strm.avail_out) {\n    len = strm.avail_out;\n  }\n\n  if (len === 0) {\n    return;\n  }\n\n  utils.arraySet(strm.output, s.pending_buf, s.pending_out, len, strm.next_out);\n  strm.next_out += len;\n  s.pending_out += len;\n  strm.total_out += len;\n  strm.avail_out -= len;\n  s.pending -= len;\n\n  if (s.pending === 0) {\n    s.pending_out = 0;\n  }\n}\n\nfunction flush_block_only(s, last) {\n  trees._tr_flush_block(s, s.block_start >= 0 ? s.block_start : -1, s.strstart - s.block_start, last);\n\n  s.block_start = s.strstart;\n  flush_pending(s.strm);\n}\n\nfunction put_byte(s, b) {\n  s.pending_buf[s.pending++] = b;\n}\n/* =========================================================================\n * Put a short in the pending buffer. The 16-bit value is put in MSB order.\n * IN assertion: the stream state is correct and there is enough room in\n * pending_buf.\n */\n\n\nfunction putShortMSB(s, b) {\n  //  put_byte(s, (Byte)(b >> 8));\n  //  put_byte(s, (Byte)(b & 0xff));\n  s.pending_buf[s.pending++] = b >>> 8 & 0xff;\n  s.pending_buf[s.pending++] = b & 0xff;\n}\n/* ===========================================================================\n * Read a new buffer from the current input stream, update the adler32\n * and total number of bytes read.  All deflate() input goes through\n * this function so some applications may wish to modify it to avoid\n * allocating a large strm->input buffer and copying from it.\n * (See also flush_pending()).\n */\n\n\nfunction read_buf(strm, buf, start, size) {\n  var len = strm.avail_in;\n\n  if (len > size) {\n    len = size;\n  }\n\n  if (len === 0) {\n    return 0;\n  }\n\n  strm.avail_in -= len; // zmemcpy(buf, strm->next_in, len);\n\n  utils.arraySet(buf, strm.input, strm.next_in, len, start);\n\n  if (strm.state.wrap === 1) {\n    strm.adler = adler32(strm.adler, buf, len, start);\n  } else if (strm.state.wrap === 2) {\n    strm.adler = crc32(strm.adler, buf, len, start);\n  }\n\n  strm.next_in += len;\n  strm.total_in += len;\n  return len;\n}\n/* ===========================================================================\n * Set match_start to the longest match starting at the given string and\n * return its length. Matches shorter or equal to prev_length are discarded,\n * in which case the result is equal to prev_length and match_start is\n * garbage.\n * IN assertions: cur_match is the head of the hash chain for the current\n *   string (strstart) and its distance is <= MAX_DIST, and prev_length >= 1\n * OUT assertion: the match length is not greater than s->lookahead.\n */\n\n\nfunction longest_match(s, cur_match) {\n  var chain_length = s.max_chain_length;\n  /* max hash chain length */\n\n  var scan = s.strstart;\n  /* current string */\n\n  var match;\n  /* matched string */\n\n  var len;\n  /* length of current match */\n\n  var best_len = s.prev_length;\n  /* best match length so far */\n\n  var nice_match = s.nice_match;\n  /* stop if match long enough */\n\n  var limit = s.strstart > s.w_size - MIN_LOOKAHEAD ? s.strstart - (s.w_size - MIN_LOOKAHEAD) : 0\n  /*NIL*/\n  ;\n  var _win = s.window; // shortcut\n\n  var wmask = s.w_mask;\n  var prev = s.prev;\n  /* Stop when cur_match becomes <= limit. To simplify the code,\n   * we prevent matches with the string of window index 0.\n   */\n\n  var strend = s.strstart + MAX_MATCH;\n  var scan_end1 = _win[scan + best_len - 1];\n  var scan_end = _win[scan + best_len];\n  /* The code is optimized for HASH_BITS >= 8 and MAX_MATCH-2 multiple of 16.\n   * It is easy to get rid of this optimization if necessary.\n   */\n  // Assert(s->hash_bits >= 8 && MAX_MATCH == 258, \"Code too clever\");\n\n  /* Do not waste too much time if we already have a good match: */\n\n  if (s.prev_length >= s.good_match) {\n    chain_length >>= 2;\n  }\n  /* Do not look for matches beyond the end of the input. This is necessary\n   * to make deflate deterministic.\n   */\n\n\n  if (nice_match > s.lookahead) {\n    nice_match = s.lookahead;\n  } // Assert((ulg)s->strstart <= s->window_size-MIN_LOOKAHEAD, \"need lookahead\");\n\n\n  do {\n    // Assert(cur_match < s->strstart, \"no future\");\n    match = cur_match;\n    /* Skip to next match if the match length cannot increase\n     * or if the match length is less than 2.  Note that the checks below\n     * for insufficient lookahead only occur occasionally for performance\n     * reasons.  Therefore uninitialized memory will be accessed, and\n     * conditional jumps will be made that depend on those values.\n     * However the length of the match is limited to the lookahead, so\n     * the output of deflate is not affected by the uninitialized values.\n     */\n\n    if (_win[match + best_len] !== scan_end || _win[match + best_len - 1] !== scan_end1 || _win[match] !== _win[scan] || _win[++match] !== _win[scan + 1]) {\n      continue;\n    }\n    /* The check at best_len-1 can be removed because it will be made\n     * again later. (This heuristic is not always a win.)\n     * It is not necessary to compare scan[2] and match[2] since they\n     * are always equal when the other bytes match, given that\n     * the hash keys are equal and that HASH_BITS >= 8.\n     */\n\n\n    scan += 2;\n    match++; // Assert(*scan == *match, \"match[2]?\");\n\n    /* We check for insufficient lookahead only every 8th comparison;\n     * the 256th check will be made at strstart+258.\n     */\n\n    do {\n      /*jshint noempty:false*/\n    } while (_win[++scan] === _win[++match] && _win[++scan] === _win[++match] && _win[++scan] === _win[++match] && _win[++scan] === _win[++match] && _win[++scan] === _win[++match] && _win[++scan] === _win[++match] && _win[++scan] === _win[++match] && _win[++scan] === _win[++match] && scan < strend); // Assert(scan <= s->window+(unsigned)(s->window_size-1), \"wild scan\");\n\n\n    len = MAX_MATCH - (strend - scan);\n    scan = strend - MAX_MATCH;\n\n    if (len > best_len) {\n      s.match_start = cur_match;\n      best_len = len;\n\n      if (len >= nice_match) {\n        break;\n      }\n\n      scan_end1 = _win[scan + best_len - 1];\n      scan_end = _win[scan + best_len];\n    }\n  } while ((cur_match = prev[cur_match & wmask]) > limit && --chain_length !== 0);\n\n  if (best_len <= s.lookahead) {\n    return best_len;\n  }\n\n  return s.lookahead;\n}\n/* ===========================================================================\n * Fill the window when the lookahead becomes insufficient.\n * Updates strstart and lookahead.\n *\n * IN assertion: lookahead < MIN_LOOKAHEAD\n * OUT assertions: strstart <= window_size-MIN_LOOKAHEAD\n *    At least one byte has been read, or avail_in == 0; reads are\n *    performed for at least two bytes (required for the zip translate_eol\n *    option -- not supported here).\n */\n\n\nfunction fill_window(s) {\n  var _w_size = s.w_size;\n  var p, n, m, more, str; //Assert(s->lookahead < MIN_LOOKAHEAD, \"already enough lookahead\");\n\n  do {\n    more = s.window_size - s.lookahead - s.strstart; // JS ints have 32 bit, block below not needed\n\n    /* Deal with !@#$% 64K limit: */\n    //if (sizeof(int) <= 2) {\n    //    if (more == 0 && s->strstart == 0 && s->lookahead == 0) {\n    //        more = wsize;\n    //\n    //  } else if (more == (unsigned)(-1)) {\n    //        /* Very unlikely, but possible on 16 bit machine if\n    //         * strstart == 0 && lookahead == 1 (input done a byte at time)\n    //         */\n    //        more--;\n    //    }\n    //}\n\n    /* If the window is almost full and there is insufficient lookahead,\n     * move the upper half to the lower one to make room in the upper half.\n     */\n\n    if (s.strstart >= _w_size + (_w_size - MIN_LOOKAHEAD)) {\n      utils.arraySet(s.window, s.window, _w_size, _w_size, 0);\n      s.match_start -= _w_size;\n      s.strstart -= _w_size;\n      /* we now have strstart >= MAX_DIST */\n\n      s.block_start -= _w_size;\n      /* Slide the hash table (could be avoided with 32 bit values\n       at the expense of memory usage). We slide even when level == 0\n       to keep the hash table consistent if we switch back to level > 0\n       later. (Using level 0 permanently is not an optimal usage of\n       zlib, so we don't care about this pathological case.)\n       */\n\n      n = s.hash_size;\n      p = n;\n\n      do {\n        m = s.head[--p];\n        s.head[p] = m >= _w_size ? m - _w_size : 0;\n      } while (--n);\n\n      n = _w_size;\n      p = n;\n\n      do {\n        m = s.prev[--p];\n        s.prev[p] = m >= _w_size ? m - _w_size : 0;\n        /* If n is not on any hash chain, prev[n] is garbage but\n         * its value will never be used.\n         */\n      } while (--n);\n\n      more += _w_size;\n    }\n\n    if (s.strm.avail_in === 0) {\n      break;\n    }\n    /* If there was no sliding:\n     *    strstart <= WSIZE+MAX_DIST-1 && lookahead <= MIN_LOOKAHEAD - 1 &&\n     *    more == window_size - lookahead - strstart\n     * => more >= window_size - (MIN_LOOKAHEAD-1 + WSIZE + MAX_DIST-1)\n     * => more >= window_size - 2*WSIZE + 2\n     * In the BIG_MEM or MMAP case (not yet supported),\n     *   window_size == input_size + MIN_LOOKAHEAD  &&\n     *   strstart + s->lookahead <= input_size => more >= MIN_LOOKAHEAD.\n     * Otherwise, window_size == 2*WSIZE so more >= 2.\n     * If there was sliding, more >= WSIZE. So in all cases, more >= 2.\n     */\n    //Assert(more >= 2, \"more < 2\");\n\n\n    n = read_buf(s.strm, s.window, s.strstart + s.lookahead, more);\n    s.lookahead += n;\n    /* Initialize the hash value now that we have some input: */\n\n    if (s.lookahead + s.insert >= MIN_MATCH) {\n      str = s.strstart - s.insert;\n      s.ins_h = s.window[str];\n      /* UPDATE_HASH(s, s->ins_h, s->window[str + 1]); */\n\n      s.ins_h = (s.ins_h << s.hash_shift ^ s.window[str + 1]) & s.hash_mask; //#if MIN_MATCH != 3\n      //        Call update_hash() MIN_MATCH-3 more times\n      //#endif\n\n      while (s.insert) {\n        /* UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]); */\n        s.ins_h = (s.ins_h << s.hash_shift ^ s.window[str + MIN_MATCH - 1]) & s.hash_mask;\n        s.prev[str & s.w_mask] = s.head[s.ins_h];\n        s.head[s.ins_h] = str;\n        str++;\n        s.insert--;\n\n        if (s.lookahead + s.insert < MIN_MATCH) {\n          break;\n        }\n      }\n    }\n    /* If the whole input has less than MIN_MATCH bytes, ins_h is garbage,\n     * but this is not important since only literal bytes will be emitted.\n     */\n\n  } while (s.lookahead < MIN_LOOKAHEAD && s.strm.avail_in !== 0);\n  /* If the WIN_INIT bytes after the end of the current data have never been\n   * written, then zero those bytes in order to avoid memory check reports of\n   * the use of uninitialized (or uninitialised as Julian writes) bytes by\n   * the longest match routines.  Update the high water mark for the next\n   * time through here.  WIN_INIT is set to MAX_MATCH since the longest match\n   * routines allow scanning to strstart + MAX_MATCH, ignoring lookahead.\n   */\n  //  if (s.high_water < s.window_size) {\n  //    var curr = s.strstart + s.lookahead;\n  //    var init = 0;\n  //\n  //    if (s.high_water < curr) {\n  //      /* Previous high water mark below current data -- zero WIN_INIT\n  //       * bytes or up to end of window, whichever is less.\n  //       */\n  //      init = s.window_size - curr;\n  //      if (init > WIN_INIT)\n  //        init = WIN_INIT;\n  //      zmemzero(s->window + curr, (unsigned)init);\n  //      s->high_water = curr + init;\n  //    }\n  //    else if (s->high_water < (ulg)curr + WIN_INIT) {\n  //      /* High water mark at or above current data, but below current data\n  //       * plus WIN_INIT -- zero out to current data plus WIN_INIT, or up\n  //       * to end of window, whichever is less.\n  //       */\n  //      init = (ulg)curr + WIN_INIT - s->high_water;\n  //      if (init > s->window_size - s->high_water)\n  //        init = s->window_size - s->high_water;\n  //      zmemzero(s->window + s->high_water, (unsigned)init);\n  //      s->high_water += init;\n  //    }\n  //  }\n  //\n  //  Assert((ulg)s->strstart <= s->window_size - MIN_LOOKAHEAD,\n  //    \"not enough room for search\");\n\n}\n/* ===========================================================================\n * Copy without compression as much as possible from the input stream, return\n * the current block state.\n * This function does not insert new strings in the dictionary since\n * uncompressible data is probably not useful. This function is used\n * only for the level=0 compression option.\n * NOTE: this function should be optimized to avoid extra copying from\n * window to pending_buf.\n */\n\n\nfunction deflate_stored(s, flush) {\n  /* Stored blocks are limited to 0xffff bytes, pending_buf is limited\n   * to pending_buf_size, and each stored block has a 5 byte header:\n   */\n  var max_block_size = 0xffff;\n\n  if (max_block_size > s.pending_buf_size - 5) {\n    max_block_size = s.pending_buf_size - 5;\n  }\n  /* Copy as much as possible from input to output: */\n\n\n  for (;;) {\n    /* Fill the window as much as possible: */\n    if (s.lookahead <= 1) {\n      //Assert(s->strstart < s->w_size+MAX_DIST(s) ||\n      //  s->block_start >= (long)s->w_size, \"slide too late\");\n      //      if (!(s.strstart < s.w_size + (s.w_size - MIN_LOOKAHEAD) ||\n      //        s.block_start >= s.w_size)) {\n      //        throw  new Error(\"slide too late\");\n      //      }\n      fill_window(s);\n\n      if (s.lookahead === 0 && flush === Z_NO_FLUSH) {\n        return BS_NEED_MORE;\n      }\n\n      if (s.lookahead === 0) {\n        break;\n      }\n      /* flush the current block */\n\n    } //Assert(s->block_start >= 0L, \"block gone\");\n    //    if (s.block_start < 0) throw new Error(\"block gone\");\n\n\n    s.strstart += s.lookahead;\n    s.lookahead = 0;\n    /* Emit a stored block if pending_buf will be full: */\n\n    var max_start = s.block_start + max_block_size;\n\n    if (s.strstart === 0 || s.strstart >= max_start) {\n      /* strstart == 0 is possible when wraparound on 16-bit machine */\n      s.lookahead = s.strstart - max_start;\n      s.strstart = max_start;\n      /*** FLUSH_BLOCK(s, 0); ***/\n\n      flush_block_only(s, false);\n\n      if (s.strm.avail_out === 0) {\n        return BS_NEED_MORE;\n      }\n      /***/\n\n    }\n    /* Flush if we may have to slide, otherwise block_start may become\n     * negative and the data will be gone:\n     */\n\n\n    if (s.strstart - s.block_start >= s.w_size - MIN_LOOKAHEAD) {\n      /*** FLUSH_BLOCK(s, 0); ***/\n      flush_block_only(s, false);\n\n      if (s.strm.avail_out === 0) {\n        return BS_NEED_MORE;\n      }\n      /***/\n\n    }\n  }\n\n  s.insert = 0;\n\n  if (flush === Z_FINISH) {\n    /*** FLUSH_BLOCK(s, 1); ***/\n    flush_block_only(s, true);\n\n    if (s.strm.avail_out === 0) {\n      return BS_FINISH_STARTED;\n    }\n    /***/\n\n\n    return BS_FINISH_DONE;\n  }\n\n  if (s.strstart > s.block_start) {\n    /*** FLUSH_BLOCK(s, 0); ***/\n    flush_block_only(s, false);\n\n    if (s.strm.avail_out === 0) {\n      return BS_NEED_MORE;\n    }\n    /***/\n\n  }\n\n  return BS_NEED_MORE;\n}\n/* ===========================================================================\n * Compress as much as possible from the input stream, return the current\n * block state.\n * This function does not perform lazy evaluation of matches and inserts\n * new strings in the dictionary only for unmatched strings or for short\n * matches. It is used only for the fast compression options.\n */\n\n\nfunction deflate_fast(s, flush) {\n  var hash_head;\n  /* head of the hash chain */\n\n  var bflush;\n  /* set if current block must be flushed */\n\n  for (;;) {\n    /* Make sure that we always have enough lookahead, except\n     * at the end of the input file. We need MAX_MATCH bytes\n     * for the next match, plus MIN_MATCH bytes to insert the\n     * string following the next match.\n     */\n    if (s.lookahead < MIN_LOOKAHEAD) {\n      fill_window(s);\n\n      if (s.lookahead < MIN_LOOKAHEAD && flush === Z_NO_FLUSH) {\n        return BS_NEED_MORE;\n      }\n\n      if (s.lookahead === 0) {\n        break;\n        /* flush the current block */\n      }\n    }\n    /* Insert the string window[strstart .. strstart+2] in the\n     * dictionary, and set hash_head to the head of the hash chain:\n     */\n\n\n    hash_head = 0\n    /*NIL*/\n    ;\n\n    if (s.lookahead >= MIN_MATCH) {\n      /*** INSERT_STRING(s, s.strstart, hash_head); ***/\n      s.ins_h = (s.ins_h << s.hash_shift ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask;\n      hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];\n      s.head[s.ins_h] = s.strstart;\n      /***/\n    }\n    /* Find the longest match, discarding those <= prev_length.\n     * At this point we have always match_length < MIN_MATCH\n     */\n\n\n    if (hash_head !== 0\n    /*NIL*/\n    && s.strstart - hash_head <= s.w_size - MIN_LOOKAHEAD) {\n      /* To simplify the code, we prevent matches with the string\n       * of window index 0 (in particular we have to avoid a match\n       * of the string with itself at the start of the input file).\n       */\n      s.match_length = longest_match(s, hash_head);\n      /* longest_match() sets match_start */\n    }\n\n    if (s.match_length >= MIN_MATCH) {\n      // check_match(s, s.strstart, s.match_start, s.match_length); // for debug only\n\n      /*** _tr_tally_dist(s, s.strstart - s.match_start,\n                     s.match_length - MIN_MATCH, bflush); ***/\n      bflush = trees._tr_tally(s, s.strstart - s.match_start, s.match_length - MIN_MATCH);\n      s.lookahead -= s.match_length;\n      /* Insert new strings in the hash table only if the match length\n       * is not too large. This saves time but degrades compression.\n       */\n\n      if (s.match_length <= s.max_lazy_match\n      /*max_insert_length*/\n      && s.lookahead >= MIN_MATCH) {\n        s.match_length--;\n        /* string at strstart already in table */\n\n        do {\n          s.strstart++;\n          /*** INSERT_STRING(s, s.strstart, hash_head); ***/\n\n          s.ins_h = (s.ins_h << s.hash_shift ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask;\n          hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];\n          s.head[s.ins_h] = s.strstart;\n          /***/\n\n          /* strstart never exceeds WSIZE-MAX_MATCH, so there are\n           * always MIN_MATCH bytes ahead.\n           */\n        } while (--s.match_length !== 0);\n\n        s.strstart++;\n      } else {\n        s.strstart += s.match_length;\n        s.match_length = 0;\n        s.ins_h = s.window[s.strstart];\n        /* UPDATE_HASH(s, s.ins_h, s.window[s.strstart+1]); */\n\n        s.ins_h = (s.ins_h << s.hash_shift ^ s.window[s.strstart + 1]) & s.hash_mask; //#if MIN_MATCH != 3\n        //                Call UPDATE_HASH() MIN_MATCH-3 more times\n        //#endif\n\n        /* If lookahead < MIN_MATCH, ins_h is garbage, but it does not\n         * matter since it will be recomputed at next deflate call.\n         */\n      }\n    } else {\n      /* No match, output a literal byte */\n      //Tracevv((stderr,\"%c\", s.window[s.strstart]));\n\n      /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/\n      bflush = trees._tr_tally(s, 0, s.window[s.strstart]);\n      s.lookahead--;\n      s.strstart++;\n    }\n\n    if (bflush) {\n      /*** FLUSH_BLOCK(s, 0); ***/\n      flush_block_only(s, false);\n\n      if (s.strm.avail_out === 0) {\n        return BS_NEED_MORE;\n      }\n      /***/\n\n    }\n  }\n\n  s.insert = s.strstart < MIN_MATCH - 1 ? s.strstart : MIN_MATCH - 1;\n\n  if (flush === Z_FINISH) {\n    /*** FLUSH_BLOCK(s, 1); ***/\n    flush_block_only(s, true);\n\n    if (s.strm.avail_out === 0) {\n      return BS_FINISH_STARTED;\n    }\n    /***/\n\n\n    return BS_FINISH_DONE;\n  }\n\n  if (s.last_lit) {\n    /*** FLUSH_BLOCK(s, 0); ***/\n    flush_block_only(s, false);\n\n    if (s.strm.avail_out === 0) {\n      return BS_NEED_MORE;\n    }\n    /***/\n\n  }\n\n  return BS_BLOCK_DONE;\n}\n/* ===========================================================================\n * Same as above, but achieves better compression. We use a lazy\n * evaluation for matches: a match is finally adopted only if there is\n * no better match at the next window position.\n */\n\n\nfunction deflate_slow(s, flush) {\n  var hash_head;\n  /* head of hash chain */\n\n  var bflush;\n  /* set if current block must be flushed */\n\n  var max_insert;\n  /* Process the input block. */\n\n  for (;;) {\n    /* Make sure that we always have enough lookahead, except\n     * at the end of the input file. We need MAX_MATCH bytes\n     * for the next match, plus MIN_MATCH bytes to insert the\n     * string following the next match.\n     */\n    if (s.lookahead < MIN_LOOKAHEAD) {\n      fill_window(s);\n\n      if (s.lookahead < MIN_LOOKAHEAD && flush === Z_NO_FLUSH) {\n        return BS_NEED_MORE;\n      }\n\n      if (s.lookahead === 0) {\n        break;\n      }\n      /* flush the current block */\n\n    }\n    /* Insert the string window[strstart .. strstart+2] in the\n     * dictionary, and set hash_head to the head of the hash chain:\n     */\n\n\n    hash_head = 0\n    /*NIL*/\n    ;\n\n    if (s.lookahead >= MIN_MATCH) {\n      /*** INSERT_STRING(s, s.strstart, hash_head); ***/\n      s.ins_h = (s.ins_h << s.hash_shift ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask;\n      hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];\n      s.head[s.ins_h] = s.strstart;\n      /***/\n    }\n    /* Find the longest match, discarding those <= prev_length.\n     */\n\n\n    s.prev_length = s.match_length;\n    s.prev_match = s.match_start;\n    s.match_length = MIN_MATCH - 1;\n\n    if (hash_head !== 0\n    /*NIL*/\n    && s.prev_length < s.max_lazy_match && s.strstart - hash_head <= s.w_size - MIN_LOOKAHEAD\n    /*MAX_DIST(s)*/\n    ) {\n        /* To simplify the code, we prevent matches with the string\n         * of window index 0 (in particular we have to avoid a match\n         * of the string with itself at the start of the input file).\n         */\n        s.match_length = longest_match(s, hash_head);\n        /* longest_match() sets match_start */\n\n        if (s.match_length <= 5 && (s.strategy === Z_FILTERED || s.match_length === MIN_MATCH && s.strstart - s.match_start > 4096\n        /*TOO_FAR*/\n        )) {\n          /* If prev_match is also MIN_MATCH, match_start is garbage\n           * but we will ignore the current match anyway.\n           */\n          s.match_length = MIN_MATCH - 1;\n        }\n      }\n    /* If there was a match at the previous step and the current\n     * match is not better, output the previous match:\n     */\n\n\n    if (s.prev_length >= MIN_MATCH && s.match_length <= s.prev_length) {\n      max_insert = s.strstart + s.lookahead - MIN_MATCH;\n      /* Do not insert strings in hash table beyond this. */\n      //check_match(s, s.strstart-1, s.prev_match, s.prev_length);\n\n      /***_tr_tally_dist(s, s.strstart - 1 - s.prev_match,\n                     s.prev_length - MIN_MATCH, bflush);***/\n\n      bflush = trees._tr_tally(s, s.strstart - 1 - s.prev_match, s.prev_length - MIN_MATCH);\n      /* Insert in hash table all strings up to the end of the match.\n       * strstart-1 and strstart are already inserted. If there is not\n       * enough lookahead, the last two strings are not inserted in\n       * the hash table.\n       */\n\n      s.lookahead -= s.prev_length - 1;\n      s.prev_length -= 2;\n\n      do {\n        if (++s.strstart <= max_insert) {\n          /*** INSERT_STRING(s, s.strstart, hash_head); ***/\n          s.ins_h = (s.ins_h << s.hash_shift ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask;\n          hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h];\n          s.head[s.ins_h] = s.strstart;\n          /***/\n        }\n      } while (--s.prev_length !== 0);\n\n      s.match_available = 0;\n      s.match_length = MIN_MATCH - 1;\n      s.strstart++;\n\n      if (bflush) {\n        /*** FLUSH_BLOCK(s, 0); ***/\n        flush_block_only(s, false);\n\n        if (s.strm.avail_out === 0) {\n          return BS_NEED_MORE;\n        }\n        /***/\n\n      }\n    } else if (s.match_available) {\n      /* If there was no match at the previous position, output a\n       * single literal. If there was a match but the current match\n       * is longer, truncate the previous match to a single literal.\n       */\n      //Tracevv((stderr,\"%c\", s->window[s->strstart-1]));\n\n      /*** _tr_tally_lit(s, s.window[s.strstart-1], bflush); ***/\n      bflush = trees._tr_tally(s, 0, s.window[s.strstart - 1]);\n\n      if (bflush) {\n        /*** FLUSH_BLOCK_ONLY(s, 0) ***/\n        flush_block_only(s, false);\n        /***/\n      }\n\n      s.strstart++;\n      s.lookahead--;\n\n      if (s.strm.avail_out === 0) {\n        return BS_NEED_MORE;\n      }\n    } else {\n      /* There is no previous match to compare with, wait for\n       * the next step to decide.\n       */\n      s.match_available = 1;\n      s.strstart++;\n      s.lookahead--;\n    }\n  } //Assert (flush != Z_NO_FLUSH, \"no flush?\");\n\n\n  if (s.match_available) {\n    //Tracevv((stderr,\"%c\", s->window[s->strstart-1]));\n\n    /*** _tr_tally_lit(s, s.window[s.strstart-1], bflush); ***/\n    bflush = trees._tr_tally(s, 0, s.window[s.strstart - 1]);\n    s.match_available = 0;\n  }\n\n  s.insert = s.strstart < MIN_MATCH - 1 ? s.strstart : MIN_MATCH - 1;\n\n  if (flush === Z_FINISH) {\n    /*** FLUSH_BLOCK(s, 1); ***/\n    flush_block_only(s, true);\n\n    if (s.strm.avail_out === 0) {\n      return BS_FINISH_STARTED;\n    }\n    /***/\n\n\n    return BS_FINISH_DONE;\n  }\n\n  if (s.last_lit) {\n    /*** FLUSH_BLOCK(s, 0); ***/\n    flush_block_only(s, false);\n\n    if (s.strm.avail_out === 0) {\n      return BS_NEED_MORE;\n    }\n    /***/\n\n  }\n\n  return BS_BLOCK_DONE;\n}\n/* ===========================================================================\n * For Z_RLE, simply look for runs of bytes, generate matches only of distance\n * one.  Do not maintain a hash table.  (It will be regenerated if this run of\n * deflate switches away from Z_RLE.)\n */\n\n\nfunction deflate_rle(s, flush) {\n  var bflush;\n  /* set if current block must be flushed */\n\n  var prev;\n  /* byte at distance one to match */\n\n  var scan, strend;\n  /* scan goes up to strend for length of run */\n\n  var _win = s.window;\n\n  for (;;) {\n    /* Make sure that we always have enough lookahead, except\n     * at the end of the input file. We need MAX_MATCH bytes\n     * for the longest run, plus one for the unrolled loop.\n     */\n    if (s.lookahead <= MAX_MATCH) {\n      fill_window(s);\n\n      if (s.lookahead <= MAX_MATCH && flush === Z_NO_FLUSH) {\n        return BS_NEED_MORE;\n      }\n\n      if (s.lookahead === 0) {\n        break;\n      }\n      /* flush the current block */\n\n    }\n    /* See how many times the previous byte repeats */\n\n\n    s.match_length = 0;\n\n    if (s.lookahead >= MIN_MATCH && s.strstart > 0) {\n      scan = s.strstart - 1;\n      prev = _win[scan];\n\n      if (prev === _win[++scan] && prev === _win[++scan] && prev === _win[++scan]) {\n        strend = s.strstart + MAX_MATCH;\n\n        do {\n          /*jshint noempty:false*/\n        } while (prev === _win[++scan] && prev === _win[++scan] && prev === _win[++scan] && prev === _win[++scan] && prev === _win[++scan] && prev === _win[++scan] && prev === _win[++scan] && prev === _win[++scan] && scan < strend);\n\n        s.match_length = MAX_MATCH - (strend - scan);\n\n        if (s.match_length > s.lookahead) {\n          s.match_length = s.lookahead;\n        }\n      } //Assert(scan <= s->window+(uInt)(s->window_size-1), \"wild scan\");\n\n    }\n    /* Emit match if have run of MIN_MATCH or longer, else emit literal */\n\n\n    if (s.match_length >= MIN_MATCH) {\n      //check_match(s, s.strstart, s.strstart - 1, s.match_length);\n\n      /*** _tr_tally_dist(s, 1, s.match_length - MIN_MATCH, bflush); ***/\n      bflush = trees._tr_tally(s, 1, s.match_length - MIN_MATCH);\n      s.lookahead -= s.match_length;\n      s.strstart += s.match_length;\n      s.match_length = 0;\n    } else {\n      /* No match, output a literal byte */\n      //Tracevv((stderr,\"%c\", s->window[s->strstart]));\n\n      /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/\n      bflush = trees._tr_tally(s, 0, s.window[s.strstart]);\n      s.lookahead--;\n      s.strstart++;\n    }\n\n    if (bflush) {\n      /*** FLUSH_BLOCK(s, 0); ***/\n      flush_block_only(s, false);\n\n      if (s.strm.avail_out === 0) {\n        return BS_NEED_MORE;\n      }\n      /***/\n\n    }\n  }\n\n  s.insert = 0;\n\n  if (flush === Z_FINISH) {\n    /*** FLUSH_BLOCK(s, 1); ***/\n    flush_block_only(s, true);\n\n    if (s.strm.avail_out === 0) {\n      return BS_FINISH_STARTED;\n    }\n    /***/\n\n\n    return BS_FINISH_DONE;\n  }\n\n  if (s.last_lit) {\n    /*** FLUSH_BLOCK(s, 0); ***/\n    flush_block_only(s, false);\n\n    if (s.strm.avail_out === 0) {\n      return BS_NEED_MORE;\n    }\n    /***/\n\n  }\n\n  return BS_BLOCK_DONE;\n}\n/* ===========================================================================\n * For Z_HUFFMAN_ONLY, do not look for matches.  Do not maintain a hash table.\n * (It will be regenerated if this run of deflate switches away from Huffman.)\n */\n\n\nfunction deflate_huff(s, flush) {\n  var bflush;\n  /* set if current block must be flushed */\n\n  for (;;) {\n    /* Make sure that we have a literal to write. */\n    if (s.lookahead === 0) {\n      fill_window(s);\n\n      if (s.lookahead === 0) {\n        if (flush === Z_NO_FLUSH) {\n          return BS_NEED_MORE;\n        }\n\n        break;\n        /* flush the current block */\n      }\n    }\n    /* Output a literal byte */\n\n\n    s.match_length = 0; //Tracevv((stderr,\"%c\", s->window[s->strstart]));\n\n    /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/\n\n    bflush = trees._tr_tally(s, 0, s.window[s.strstart]);\n    s.lookahead--;\n    s.strstart++;\n\n    if (bflush) {\n      /*** FLUSH_BLOCK(s, 0); ***/\n      flush_block_only(s, false);\n\n      if (s.strm.avail_out === 0) {\n        return BS_NEED_MORE;\n      }\n      /***/\n\n    }\n  }\n\n  s.insert = 0;\n\n  if (flush === Z_FINISH) {\n    /*** FLUSH_BLOCK(s, 1); ***/\n    flush_block_only(s, true);\n\n    if (s.strm.avail_out === 0) {\n      return BS_FINISH_STARTED;\n    }\n    /***/\n\n\n    return BS_FINISH_DONE;\n  }\n\n  if (s.last_lit) {\n    /*** FLUSH_BLOCK(s, 0); ***/\n    flush_block_only(s, false);\n\n    if (s.strm.avail_out === 0) {\n      return BS_NEED_MORE;\n    }\n    /***/\n\n  }\n\n  return BS_BLOCK_DONE;\n}\n/* Values for max_lazy_match, good_match and max_chain_length, depending on\n * the desired pack level (0..9). The values given below have been tuned to\n * exclude worst case performance for pathological files. Better values may be\n * found for specific files.\n */\n\n\nfunction Config(good_length, max_lazy, nice_length, max_chain, func) {\n  this.good_length = good_length;\n  this.max_lazy = max_lazy;\n  this.nice_length = nice_length;\n  this.max_chain = max_chain;\n  this.func = func;\n}\n\nvar configuration_table;\nconfiguration_table = [\n/*      good lazy nice chain */\nnew Config(0, 0, 0, 0, deflate_stored),\n/* 0 store only */\nnew Config(4, 4, 8, 4, deflate_fast),\n/* 1 max speed, no lazy matches */\nnew Config(4, 5, 16, 8, deflate_fast),\n/* 2 */\nnew Config(4, 6, 32, 32, deflate_fast),\n/* 3 */\nnew Config(4, 4, 16, 16, deflate_slow),\n/* 4 lazy matches */\nnew Config(8, 16, 32, 32, deflate_slow),\n/* 5 */\nnew Config(8, 16, 128, 128, deflate_slow),\n/* 6 */\nnew Config(8, 32, 128, 256, deflate_slow),\n/* 7 */\nnew Config(32, 128, 258, 1024, deflate_slow),\n/* 8 */\nnew Config(32, 258, 258, 4096, deflate_slow)\n/* 9 max compression */\n];\n/* ===========================================================================\n * Initialize the \"longest match\" routines for a new zlib stream\n */\n\nfunction lm_init(s) {\n  s.window_size = 2 * s.w_size;\n  /*** CLEAR_HASH(s); ***/\n\n  zero(s.head); // Fill with NIL (= 0);\n\n  /* Set the default configuration parameters:\n   */\n\n  s.max_lazy_match = configuration_table[s.level].max_lazy;\n  s.good_match = configuration_table[s.level].good_length;\n  s.nice_match = configuration_table[s.level].nice_length;\n  s.max_chain_length = configuration_table[s.level].max_chain;\n  s.strstart = 0;\n  s.block_start = 0;\n  s.lookahead = 0;\n  s.insert = 0;\n  s.match_length = s.prev_length = MIN_MATCH - 1;\n  s.match_available = 0;\n  s.ins_h = 0;\n}\n\nfunction DeflateState() {\n  this.strm = null;\n  /* pointer back to this zlib stream */\n\n  this.status = 0;\n  /* as the name implies */\n\n  this.pending_buf = null;\n  /* output still pending */\n\n  this.pending_buf_size = 0;\n  /* size of pending_buf */\n\n  this.pending_out = 0;\n  /* next pending byte to output to the stream */\n\n  this.pending = 0;\n  /* nb of bytes in the pending buffer */\n\n  this.wrap = 0;\n  /* bit 0 true for zlib, bit 1 true for gzip */\n\n  this.gzhead = null;\n  /* gzip header information to write */\n\n  this.gzindex = 0;\n  /* where in extra, name, or comment */\n\n  this.method = Z_DEFLATED;\n  /* can only be DEFLATED */\n\n  this.last_flush = -1;\n  /* value of flush param for previous deflate call */\n\n  this.w_size = 0;\n  /* LZ77 window size (32K by default) */\n\n  this.w_bits = 0;\n  /* log2(w_size)  (8..16) */\n\n  this.w_mask = 0;\n  /* w_size - 1 */\n\n  this.window = null;\n  /* Sliding window. Input bytes are read into the second half of the window,\n   * and move to the first half later to keep a dictionary of at least wSize\n   * bytes. With this organization, matches are limited to a distance of\n   * wSize-MAX_MATCH bytes, but this ensures that IO is always\n   * performed with a length multiple of the block size.\n   */\n\n  this.window_size = 0;\n  /* Actual size of window: 2*wSize, except when the user input buffer\n   * is directly used as sliding window.\n   */\n\n  this.prev = null;\n  /* Link to older string with same hash index. To limit the size of this\n   * array to 64K, this link is maintained only for the last 32K strings.\n   * An index in this array is thus a window index modulo 32K.\n   */\n\n  this.head = null;\n  /* Heads of the hash chains or NIL. */\n\n  this.ins_h = 0;\n  /* hash index of string to be inserted */\n\n  this.hash_size = 0;\n  /* number of elements in hash table */\n\n  this.hash_bits = 0;\n  /* log2(hash_size) */\n\n  this.hash_mask = 0;\n  /* hash_size-1 */\n\n  this.hash_shift = 0;\n  /* Number of bits by which ins_h must be shifted at each input\n   * step. It must be such that after MIN_MATCH steps, the oldest\n   * byte no longer takes part in the hash key, that is:\n   *   hash_shift * MIN_MATCH >= hash_bits\n   */\n\n  this.block_start = 0;\n  /* Window position at the beginning of the current output block. Gets\n   * negative when the window is moved backwards.\n   */\n\n  this.match_length = 0;\n  /* length of best match */\n\n  this.prev_match = 0;\n  /* previous match */\n\n  this.match_available = 0;\n  /* set if previous match exists */\n\n  this.strstart = 0;\n  /* start of string to insert */\n\n  this.match_start = 0;\n  /* start of matching string */\n\n  this.lookahead = 0;\n  /* number of valid bytes ahead in window */\n\n  this.prev_length = 0;\n  /* Length of the best match at previous step. Matches not greater than this\n   * are discarded. This is used in the lazy match evaluation.\n   */\n\n  this.max_chain_length = 0;\n  /* To speed up deflation, hash chains are never searched beyond this\n   * length.  A higher limit improves compression ratio but degrades the\n   * speed.\n   */\n\n  this.max_lazy_match = 0;\n  /* Attempt to find a better match only when the current match is strictly\n   * smaller than this value. This mechanism is used only for compression\n   * levels >= 4.\n   */\n  // That's alias to max_lazy_match, don't use directly\n  //this.max_insert_length = 0;\n\n  /* Insert new strings in the hash table only if the match length is not\n   * greater than this length. This saves time but degrades compression.\n   * max_insert_length is used only for compression levels <= 3.\n   */\n\n  this.level = 0;\n  /* compression level (1..9) */\n\n  this.strategy = 0;\n  /* favor or force Huffman coding*/\n\n  this.good_match = 0;\n  /* Use a faster search when the previous match is longer than this */\n\n  this.nice_match = 0;\n  /* Stop searching when current match exceeds this */\n\n  /* used by trees.c: */\n\n  /* Didn't use ct_data typedef below to suppress compiler warning */\n  // struct ct_data_s dyn_ltree[HEAP_SIZE];   /* literal and length tree */\n  // struct ct_data_s dyn_dtree[2*D_CODES+1]; /* distance tree */\n  // struct ct_data_s bl_tree[2*BL_CODES+1];  /* Huffman tree for bit lengths */\n  // Use flat array of DOUBLE size, with interleaved fata,\n  // because JS does not support effective\n\n  this.dyn_ltree = new utils.Buf16(HEAP_SIZE * 2);\n  this.dyn_dtree = new utils.Buf16((2 * D_CODES + 1) * 2);\n  this.bl_tree = new utils.Buf16((2 * BL_CODES + 1) * 2);\n  zero(this.dyn_ltree);\n  zero(this.dyn_dtree);\n  zero(this.bl_tree);\n  this.l_desc = null;\n  /* desc. for literal tree */\n\n  this.d_desc = null;\n  /* desc. for distance tree */\n\n  this.bl_desc = null;\n  /* desc. for bit length tree */\n  //ush bl_count[MAX_BITS+1];\n\n  this.bl_count = new utils.Buf16(MAX_BITS + 1);\n  /* number of codes at each bit length for an optimal tree */\n  //int heap[2*L_CODES+1];      /* heap used to build the Huffman trees */\n\n  this.heap = new utils.Buf16(2 * L_CODES + 1);\n  /* heap used to build the Huffman trees */\n\n  zero(this.heap);\n  this.heap_len = 0;\n  /* number of elements in the heap */\n\n  this.heap_max = 0;\n  /* element of largest frequency */\n\n  /* The sons of heap[n] are heap[2*n] and heap[2*n+1]. heap[0] is not used.\n   * The same heap array is used to build all trees.\n   */\n\n  this.depth = new utils.Buf16(2 * L_CODES + 1); //uch depth[2*L_CODES+1];\n\n  zero(this.depth);\n  /* Depth of each subtree used as tie breaker for trees of equal frequency\n   */\n\n  this.l_buf = 0;\n  /* buffer index for literals or lengths */\n\n  this.lit_bufsize = 0;\n  /* Size of match buffer for literals/lengths.  There are 4 reasons for\n   * limiting lit_bufsize to 64K:\n   *   - frequencies can be kept in 16 bit counters\n   *   - if compression is not successful for the first block, all input\n   *     data is still in the window so we can still emit a stored block even\n   *     when input comes from standard input.  (This can also be done for\n   *     all blocks if lit_bufsize is not greater than 32K.)\n   *   - if compression is not successful for a file smaller than 64K, we can\n   *     even emit a stored file instead of a stored block (saving 5 bytes).\n   *     This is applicable only for zip (not gzip or zlib).\n   *   - creating new Huffman trees less frequently may not provide fast\n   *     adaptation to changes in the input data statistics. (Take for\n   *     example a binary file with poorly compressible code followed by\n   *     a highly compressible string table.) Smaller buffer sizes give\n   *     fast adaptation but have of course the overhead of transmitting\n   *     trees more frequently.\n   *   - I can't count above 4\n   */\n\n  this.last_lit = 0;\n  /* running index in l_buf */\n\n  this.d_buf = 0;\n  /* Buffer index for distances. To simplify the code, d_buf and l_buf have\n   * the same number of elements. To use different lengths, an extra flag\n   * array would be necessary.\n   */\n\n  this.opt_len = 0;\n  /* bit length of current block with optimal trees */\n\n  this.static_len = 0;\n  /* bit length of current block with static trees */\n\n  this.matches = 0;\n  /* number of string matches in current block */\n\n  this.insert = 0;\n  /* bytes at end of window left to insert */\n\n  this.bi_buf = 0;\n  /* Output buffer. bits are inserted starting at the bottom (least\n   * significant bits).\n   */\n\n  this.bi_valid = 0;\n  /* Number of valid bits in bi_buf.  All bits above the last valid bit\n   * are always zero.\n   */\n  // Used for window memory init. We safely ignore it for JS. That makes\n  // sense only for pointers and memory check tools.\n  //this.high_water = 0;\n\n  /* High water mark offset in window for initialized bytes -- bytes above\n   * this are set to zero in order to avoid memory check warnings when\n   * longest match routines access bytes past the input.  This is then\n   * updated to the new high water mark.\n   */\n}\n\nfunction deflateResetKeep(strm) {\n  var s;\n\n  if (!strm || !strm.state) {\n    return err(strm, Z_STREAM_ERROR);\n  }\n\n  strm.total_in = strm.total_out = 0;\n  strm.data_type = Z_UNKNOWN;\n  s = strm.state;\n  s.pending = 0;\n  s.pending_out = 0;\n\n  if (s.wrap < 0) {\n    s.wrap = -s.wrap;\n    /* was made negative by deflate(..., Z_FINISH); */\n  }\n\n  s.status = s.wrap ? INIT_STATE : BUSY_STATE;\n  strm.adler = s.wrap === 2 ? 0 // crc32(0, Z_NULL, 0)\n  : 1; // adler32(0, Z_NULL, 0)\n\n  s.last_flush = Z_NO_FLUSH;\n\n  trees._tr_init(s);\n\n  return Z_OK;\n}\n\nfunction deflateReset(strm) {\n  var ret = deflateResetKeep(strm);\n\n  if (ret === Z_OK) {\n    lm_init(strm.state);\n  }\n\n  return ret;\n}\n\nfunction deflateSetHeader(strm, head) {\n  if (!strm || !strm.state) {\n    return Z_STREAM_ERROR;\n  }\n\n  if (strm.state.wrap !== 2) {\n    return Z_STREAM_ERROR;\n  }\n\n  strm.state.gzhead = head;\n  return Z_OK;\n}\n\nfunction deflateInit2(strm, level, method, windowBits, memLevel, strategy) {\n  if (!strm) {\n    // === Z_NULL\n    return Z_STREAM_ERROR;\n  }\n\n  var wrap = 1;\n\n  if (level === Z_DEFAULT_COMPRESSION) {\n    level = 6;\n  }\n\n  if (windowBits < 0) {\n    /* suppress zlib wrapper */\n    wrap = 0;\n    windowBits = -windowBits;\n  } else if (windowBits > 15) {\n    wrap = 2;\n    /* write gzip wrapper instead */\n\n    windowBits -= 16;\n  }\n\n  if (memLevel < 1 || memLevel > MAX_MEM_LEVEL || method !== Z_DEFLATED || windowBits < 8 || windowBits > 15 || level < 0 || level > 9 || strategy < 0 || strategy > Z_FIXED) {\n    return err(strm, Z_STREAM_ERROR);\n  }\n\n  if (windowBits === 8) {\n    windowBits = 9;\n  }\n  /* until 256-byte window bug fixed */\n\n\n  var s = new DeflateState();\n  strm.state = s;\n  s.strm = strm;\n  s.wrap = wrap;\n  s.gzhead = null;\n  s.w_bits = windowBits;\n  s.w_size = 1 << s.w_bits;\n  s.w_mask = s.w_size - 1;\n  s.hash_bits = memLevel + 7;\n  s.hash_size = 1 << s.hash_bits;\n  s.hash_mask = s.hash_size - 1;\n  s.hash_shift = ~~((s.hash_bits + MIN_MATCH - 1) / MIN_MATCH);\n  s.window = new utils.Buf8(s.w_size * 2);\n  s.head = new utils.Buf16(s.hash_size);\n  s.prev = new utils.Buf16(s.w_size); // Don't need mem init magic for JS.\n  //s.high_water = 0;  /* nothing written to s->window yet */\n\n  s.lit_bufsize = 1 << memLevel + 6;\n  /* 16K elements by default */\n\n  s.pending_buf_size = s.lit_bufsize * 4; //overlay = (ushf *) ZALLOC(strm, s->lit_bufsize, sizeof(ush)+2);\n  //s->pending_buf = (uchf *) overlay;\n\n  s.pending_buf = new utils.Buf8(s.pending_buf_size); // It is offset from `s.pending_buf` (size is `s.lit_bufsize * 2`)\n  //s->d_buf = overlay + s->lit_bufsize/sizeof(ush);\n\n  s.d_buf = 1 * s.lit_bufsize; //s->l_buf = s->pending_buf + (1+sizeof(ush))*s->lit_bufsize;\n\n  s.l_buf = (1 + 2) * s.lit_bufsize;\n  s.level = level;\n  s.strategy = strategy;\n  s.method = method;\n  return deflateReset(strm);\n}\n\nfunction deflateInit(strm, level) {\n  return deflateInit2(strm, level, Z_DEFLATED, MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY);\n}\n\nfunction deflate(strm, flush) {\n  var old_flush, s;\n  var beg, val; // for gzip header write only\n\n  if (!strm || !strm.state || flush > Z_BLOCK || flush < 0) {\n    return strm ? err(strm, Z_STREAM_ERROR) : Z_STREAM_ERROR;\n  }\n\n  s = strm.state;\n\n  if (!strm.output || !strm.input && strm.avail_in !== 0 || s.status === FINISH_STATE && flush !== Z_FINISH) {\n    return err(strm, strm.avail_out === 0 ? Z_BUF_ERROR : Z_STREAM_ERROR);\n  }\n\n  s.strm = strm;\n  /* just in case */\n\n  old_flush = s.last_flush;\n  s.last_flush = flush;\n  /* Write the header */\n\n  if (s.status === INIT_STATE) {\n    if (s.wrap === 2) {\n      // GZIP header\n      strm.adler = 0; //crc32(0L, Z_NULL, 0);\n\n      put_byte(s, 31);\n      put_byte(s, 139);\n      put_byte(s, 8);\n\n      if (!s.gzhead) {\n        // s->gzhead == Z_NULL\n        put_byte(s, 0);\n        put_byte(s, 0);\n        put_byte(s, 0);\n        put_byte(s, 0);\n        put_byte(s, 0);\n        put_byte(s, s.level === 9 ? 2 : s.strategy >= Z_HUFFMAN_ONLY || s.level < 2 ? 4 : 0);\n        put_byte(s, OS_CODE);\n        s.status = BUSY_STATE;\n      } else {\n        put_byte(s, (s.gzhead.text ? 1 : 0) + (s.gzhead.hcrc ? 2 : 0) + (!s.gzhead.extra ? 0 : 4) + (!s.gzhead.name ? 0 : 8) + (!s.gzhead.comment ? 0 : 16));\n        put_byte(s, s.gzhead.time & 0xff);\n        put_byte(s, s.gzhead.time >> 8 & 0xff);\n        put_byte(s, s.gzhead.time >> 16 & 0xff);\n        put_byte(s, s.gzhead.time >> 24 & 0xff);\n        put_byte(s, s.level === 9 ? 2 : s.strategy >= Z_HUFFMAN_ONLY || s.level < 2 ? 4 : 0);\n        put_byte(s, s.gzhead.os & 0xff);\n\n        if (s.gzhead.extra && s.gzhead.extra.length) {\n          put_byte(s, s.gzhead.extra.length & 0xff);\n          put_byte(s, s.gzhead.extra.length >> 8 & 0xff);\n        }\n\n        if (s.gzhead.hcrc) {\n          strm.adler = crc32(strm.adler, s.pending_buf, s.pending, 0);\n        }\n\n        s.gzindex = 0;\n        s.status = EXTRA_STATE;\n      }\n    } else // DEFLATE header\n      {\n        var header = Z_DEFLATED + (s.w_bits - 8 << 4) << 8;\n        var level_flags = -1;\n\n        if (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2) {\n          level_flags = 0;\n        } else if (s.level < 6) {\n          level_flags = 1;\n        } else if (s.level === 6) {\n          level_flags = 2;\n        } else {\n          level_flags = 3;\n        }\n\n        header |= level_flags << 6;\n\n        if (s.strstart !== 0) {\n          header |= PRESET_DICT;\n        }\n\n        header += 31 - header % 31;\n        s.status = BUSY_STATE;\n        putShortMSB(s, header);\n        /* Save the adler32 of the preset dictionary: */\n\n        if (s.strstart !== 0) {\n          putShortMSB(s, strm.adler >>> 16);\n          putShortMSB(s, strm.adler & 0xffff);\n        }\n\n        strm.adler = 1; // adler32(0L, Z_NULL, 0);\n      }\n  } //#ifdef GZIP\n\n\n  if (s.status === EXTRA_STATE) {\n    if (s.gzhead.extra\n    /* != Z_NULL*/\n    ) {\n        beg = s.pending;\n        /* start of bytes to update crc */\n\n        while (s.gzindex < (s.gzhead.extra.length & 0xffff)) {\n          if (s.pending === s.pending_buf_size) {\n            if (s.gzhead.hcrc && s.pending > beg) {\n              strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n            }\n\n            flush_pending(strm);\n            beg = s.pending;\n\n            if (s.pending === s.pending_buf_size) {\n              break;\n            }\n          }\n\n          put_byte(s, s.gzhead.extra[s.gzindex] & 0xff);\n          s.gzindex++;\n        }\n\n        if (s.gzhead.hcrc && s.pending > beg) {\n          strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n        }\n\n        if (s.gzindex === s.gzhead.extra.length) {\n          s.gzindex = 0;\n          s.status = NAME_STATE;\n        }\n      } else {\n      s.status = NAME_STATE;\n    }\n  }\n\n  if (s.status === NAME_STATE) {\n    if (s.gzhead.name\n    /* != Z_NULL*/\n    ) {\n        beg = s.pending;\n        /* start of bytes to update crc */\n        //int val;\n\n        do {\n          if (s.pending === s.pending_buf_size) {\n            if (s.gzhead.hcrc && s.pending > beg) {\n              strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n            }\n\n            flush_pending(strm);\n            beg = s.pending;\n\n            if (s.pending === s.pending_buf_size) {\n              val = 1;\n              break;\n            }\n          } // JS specific: little magic to add zero terminator to end of string\n\n\n          if (s.gzindex < s.gzhead.name.length) {\n            val = s.gzhead.name.charCodeAt(s.gzindex++) & 0xff;\n          } else {\n            val = 0;\n          }\n\n          put_byte(s, val);\n        } while (val !== 0);\n\n        if (s.gzhead.hcrc && s.pending > beg) {\n          strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n        }\n\n        if (val === 0) {\n          s.gzindex = 0;\n          s.status = COMMENT_STATE;\n        }\n      } else {\n      s.status = COMMENT_STATE;\n    }\n  }\n\n  if (s.status === COMMENT_STATE) {\n    if (s.gzhead.comment\n    /* != Z_NULL*/\n    ) {\n        beg = s.pending;\n        /* start of bytes to update crc */\n        //int val;\n\n        do {\n          if (s.pending === s.pending_buf_size) {\n            if (s.gzhead.hcrc && s.pending > beg) {\n              strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n            }\n\n            flush_pending(strm);\n            beg = s.pending;\n\n            if (s.pending === s.pending_buf_size) {\n              val = 1;\n              break;\n            }\n          } // JS specific: little magic to add zero terminator to end of string\n\n\n          if (s.gzindex < s.gzhead.comment.length) {\n            val = s.gzhead.comment.charCodeAt(s.gzindex++) & 0xff;\n          } else {\n            val = 0;\n          }\n\n          put_byte(s, val);\n        } while (val !== 0);\n\n        if (s.gzhead.hcrc && s.pending > beg) {\n          strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg);\n        }\n\n        if (val === 0) {\n          s.status = HCRC_STATE;\n        }\n      } else {\n      s.status = HCRC_STATE;\n    }\n  }\n\n  if (s.status === HCRC_STATE) {\n    if (s.gzhead.hcrc) {\n      if (s.pending + 2 > s.pending_buf_size) {\n        flush_pending(strm);\n      }\n\n      if (s.pending + 2 <= s.pending_buf_size) {\n        put_byte(s, strm.adler & 0xff);\n        put_byte(s, strm.adler >> 8 & 0xff);\n        strm.adler = 0; //crc32(0L, Z_NULL, 0);\n\n        s.status = BUSY_STATE;\n      }\n    } else {\n      s.status = BUSY_STATE;\n    }\n  } //#endif\n\n  /* Flush as much pending output as possible */\n\n\n  if (s.pending !== 0) {\n    flush_pending(strm);\n\n    if (strm.avail_out === 0) {\n      /* Since avail_out is 0, deflate will be called again with\n       * more output space, but possibly with both pending and\n       * avail_in equal to zero. There won't be anything to do,\n       * but this is not an error situation so make sure we\n       * return OK instead of BUF_ERROR at next call of deflate:\n       */\n      s.last_flush = -1;\n      return Z_OK;\n    }\n    /* Make sure there is something to do and avoid duplicate consecutive\n     * flushes. For repeated and useless calls with Z_FINISH, we keep\n     * returning Z_STREAM_END instead of Z_BUF_ERROR.\n     */\n\n  } else if (strm.avail_in === 0 && rank(flush) <= rank(old_flush) && flush !== Z_FINISH) {\n    return err(strm, Z_BUF_ERROR);\n  }\n  /* User must not provide more input after the first FINISH: */\n\n\n  if (s.status === FINISH_STATE && strm.avail_in !== 0) {\n    return err(strm, Z_BUF_ERROR);\n  }\n  /* Start a new block or continue the current one.\n   */\n\n\n  if (strm.avail_in !== 0 || s.lookahead !== 0 || flush !== Z_NO_FLUSH && s.status !== FINISH_STATE) {\n    var bstate = s.strategy === Z_HUFFMAN_ONLY ? deflate_huff(s, flush) : s.strategy === Z_RLE ? deflate_rle(s, flush) : configuration_table[s.level].func(s, flush);\n\n    if (bstate === BS_FINISH_STARTED || bstate === BS_FINISH_DONE) {\n      s.status = FINISH_STATE;\n    }\n\n    if (bstate === BS_NEED_MORE || bstate === BS_FINISH_STARTED) {\n      if (strm.avail_out === 0) {\n        s.last_flush = -1;\n        /* avoid BUF_ERROR next call, see above */\n      }\n\n      return Z_OK;\n      /* If flush != Z_NO_FLUSH && avail_out == 0, the next call\n       * of deflate should use the same flush parameter to make sure\n       * that the flush is complete. So we don't have to output an\n       * empty block here, this will be done at next call. This also\n       * ensures that for a very small output buffer, we emit at most\n       * one empty block.\n       */\n    }\n\n    if (bstate === BS_BLOCK_DONE) {\n      if (flush === Z_PARTIAL_FLUSH) {\n        trees._tr_align(s);\n      } else if (flush !== Z_BLOCK) {\n        /* FULL_FLUSH or SYNC_FLUSH */\n        trees._tr_stored_block(s, 0, 0, false);\n        /* For a full flush, this empty block will be recognized\n         * as a special marker by inflate_sync().\n         */\n\n\n        if (flush === Z_FULL_FLUSH) {\n          /*** CLEAR_HASH(s); ***/\n\n          /* forget history */\n          zero(s.head); // Fill with NIL (= 0);\n\n          if (s.lookahead === 0) {\n            s.strstart = 0;\n            s.block_start = 0;\n            s.insert = 0;\n          }\n        }\n      }\n\n      flush_pending(strm);\n\n      if (strm.avail_out === 0) {\n        s.last_flush = -1;\n        /* avoid BUF_ERROR at next call, see above */\n\n        return Z_OK;\n      }\n    }\n  } //Assert(strm->avail_out > 0, \"bug2\");\n  //if (strm.avail_out <= 0) { throw new Error(\"bug2\");}\n\n\n  if (flush !== Z_FINISH) {\n    return Z_OK;\n  }\n\n  if (s.wrap <= 0) {\n    return Z_STREAM_END;\n  }\n  /* Write the trailer */\n\n\n  if (s.wrap === 2) {\n    put_byte(s, strm.adler & 0xff);\n    put_byte(s, strm.adler >> 8 & 0xff);\n    put_byte(s, strm.adler >> 16 & 0xff);\n    put_byte(s, strm.adler >> 24 & 0xff);\n    put_byte(s, strm.total_in & 0xff);\n    put_byte(s, strm.total_in >> 8 & 0xff);\n    put_byte(s, strm.total_in >> 16 & 0xff);\n    put_byte(s, strm.total_in >> 24 & 0xff);\n  } else {\n    putShortMSB(s, strm.adler >>> 16);\n    putShortMSB(s, strm.adler & 0xffff);\n  }\n\n  flush_pending(strm);\n  /* If avail_out is zero, the application will call deflate again\n   * to flush the rest.\n   */\n\n  if (s.wrap > 0) {\n    s.wrap = -s.wrap;\n  }\n  /* write the trailer only once! */\n\n\n  return s.pending !== 0 ? Z_OK : Z_STREAM_END;\n}\n\nfunction deflateEnd(strm) {\n  var status;\n\n  if (!strm\n  /*== Z_NULL*/\n  || !strm.state\n  /*== Z_NULL*/\n  ) {\n      return Z_STREAM_ERROR;\n    }\n\n  status = strm.state.status;\n\n  if (status !== INIT_STATE && status !== EXTRA_STATE && status !== NAME_STATE && status !== COMMENT_STATE && status !== HCRC_STATE && status !== BUSY_STATE && status !== FINISH_STATE) {\n    return err(strm, Z_STREAM_ERROR);\n  }\n\n  strm.state = null;\n  return status === BUSY_STATE ? err(strm, Z_DATA_ERROR) : Z_OK;\n}\n/* =========================================================================\n * Initializes the compression dictionary from the given byte\n * sequence without producing any compressed output.\n */\n\n\nfunction deflateSetDictionary(strm, dictionary) {\n  var dictLength = dictionary.length;\n  var s;\n  var str, n;\n  var wrap;\n  var avail;\n  var next;\n  var input;\n  var tmpDict;\n\n  if (!strm\n  /*== Z_NULL*/\n  || !strm.state\n  /*== Z_NULL*/\n  ) {\n      return Z_STREAM_ERROR;\n    }\n\n  s = strm.state;\n  wrap = s.wrap;\n\n  if (wrap === 2 || wrap === 1 && s.status !== INIT_STATE || s.lookahead) {\n    return Z_STREAM_ERROR;\n  }\n  /* when using zlib wrappers, compute Adler-32 for provided dictionary */\n\n\n  if (wrap === 1) {\n    /* adler32(strm->adler, dictionary, dictLength); */\n    strm.adler = adler32(strm.adler, dictionary, dictLength, 0);\n  }\n\n  s.wrap = 0;\n  /* avoid computing Adler-32 in read_buf */\n\n  /* if dictionary would fill window, just replace the history */\n\n  if (dictLength >= s.w_size) {\n    if (wrap === 0) {\n      /* already empty otherwise */\n\n      /*** CLEAR_HASH(s); ***/\n      zero(s.head); // Fill with NIL (= 0);\n\n      s.strstart = 0;\n      s.block_start = 0;\n      s.insert = 0;\n    }\n    /* use the tail */\n    // dictionary = dictionary.slice(dictLength - s.w_size);\n\n\n    tmpDict = new utils.Buf8(s.w_size);\n    utils.arraySet(tmpDict, dictionary, dictLength - s.w_size, s.w_size, 0);\n    dictionary = tmpDict;\n    dictLength = s.w_size;\n  }\n  /* insert dictionary into window and hash */\n\n\n  avail = strm.avail_in;\n  next = strm.next_in;\n  input = strm.input;\n  strm.avail_in = dictLength;\n  strm.next_in = 0;\n  strm.input = dictionary;\n  fill_window(s);\n\n  while (s.lookahead >= MIN_MATCH) {\n    str = s.strstart;\n    n = s.lookahead - (MIN_MATCH - 1);\n\n    do {\n      /* UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]); */\n      s.ins_h = (s.ins_h << s.hash_shift ^ s.window[str + MIN_MATCH - 1]) & s.hash_mask;\n      s.prev[str & s.w_mask] = s.head[s.ins_h];\n      s.head[s.ins_h] = str;\n      str++;\n    } while (--n);\n\n    s.strstart = str;\n    s.lookahead = MIN_MATCH - 1;\n    fill_window(s);\n  }\n\n  s.strstart += s.lookahead;\n  s.block_start = s.strstart;\n  s.insert = s.lookahead;\n  s.lookahead = 0;\n  s.match_length = s.prev_length = MIN_MATCH - 1;\n  s.match_available = 0;\n  strm.next_in = next;\n  strm.input = input;\n  strm.avail_in = avail;\n  s.wrap = wrap;\n  return Z_OK;\n}\n\nexports.deflateInit = deflateInit;\nexports.deflateInit2 = deflateInit2;\nexports.deflateReset = deflateReset;\nexports.deflateResetKeep = deflateResetKeep;\nexports.deflateSetHeader = deflateSetHeader;\nexports.deflate = deflate;\nexports.deflateEnd = deflateEnd;\nexports.deflateSetDictionary = deflateSetDictionary;\nexports.deflateInfo = 'pako deflate (from Nodeca project)';\n/* Not implemented\nexports.deflateBound = deflateBound;\nexports.deflateCopy = deflateCopy;\nexports.deflateParams = deflateParams;\nexports.deflatePending = deflatePending;\nexports.deflatePrime = deflatePrime;\nexports.deflateTune = deflateTune;\n*/","'use strict'; // (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\n/* eslint-disable space-unary-ops */\n\nvar utils = require('../utils/common');\n/* Public constants ==========================================================*/\n\n/* ===========================================================================*/\n//var Z_FILTERED          = 1;\n//var Z_HUFFMAN_ONLY      = 2;\n//var Z_RLE               = 3;\n\n\nvar Z_FIXED = 4; //var Z_DEFAULT_STRATEGY  = 0;\n\n/* Possible values of the data_type field (though see inflate()) */\n\nvar Z_BINARY = 0;\nvar Z_TEXT = 1; //var Z_ASCII             = 1; // = Z_TEXT\n\nvar Z_UNKNOWN = 2;\n/*============================================================================*/\n\nfunction zero(buf) {\n  var len = buf.length;\n\n  while (--len >= 0) {\n    buf[len] = 0;\n  }\n} // From zutil.h\n\n\nvar STORED_BLOCK = 0;\nvar STATIC_TREES = 1;\nvar DYN_TREES = 2;\n/* The three kinds of block type */\n\nvar MIN_MATCH = 3;\nvar MAX_MATCH = 258;\n/* The minimum and maximum match lengths */\n// From deflate.h\n\n/* ===========================================================================\n * Internal compression state.\n */\n\nvar LENGTH_CODES = 29;\n/* number of length codes, not counting the special END_BLOCK code */\n\nvar LITERALS = 256;\n/* number of literal bytes 0..255 */\n\nvar L_CODES = LITERALS + 1 + LENGTH_CODES;\n/* number of Literal or Length codes, including the END_BLOCK code */\n\nvar D_CODES = 30;\n/* number of distance codes */\n\nvar BL_CODES = 19;\n/* number of codes used to transfer the bit lengths */\n\nvar HEAP_SIZE = 2 * L_CODES + 1;\n/* maximum heap size */\n\nvar MAX_BITS = 15;\n/* All codes must not exceed MAX_BITS bits */\n\nvar Buf_size = 16;\n/* size of bit buffer in bi_buf */\n\n/* ===========================================================================\n * Constants\n */\n\nvar MAX_BL_BITS = 7;\n/* Bit length codes must not exceed MAX_BL_BITS bits */\n\nvar END_BLOCK = 256;\n/* end of block literal code */\n\nvar REP_3_6 = 16;\n/* repeat previous bit length 3-6 times (2 bits of repeat count) */\n\nvar REPZ_3_10 = 17;\n/* repeat a zero length 3-10 times  (3 bits of repeat count) */\n\nvar REPZ_11_138 = 18;\n/* repeat a zero length 11-138 times  (7 bits of repeat count) */\n\n/* eslint-disable comma-spacing,array-bracket-spacing */\n\nvar extra_lbits =\n/* extra bits for each length code */\n[0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0];\nvar extra_dbits =\n/* extra bits for each distance code */\n[0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13];\nvar extra_blbits =\n/* extra bits for each bit length code */\n[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2, 3, 7];\nvar bl_order = [16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15];\n/* eslint-enable comma-spacing,array-bracket-spacing */\n\n/* The lengths of the bit length codes are sent in order of decreasing\n * probability, to avoid transmitting the lengths for unused bit length codes.\n */\n\n/* ===========================================================================\n * Local data. These are initialized only once.\n */\n// We pre-fill arrays with 0 to avoid uninitialized gaps\n\nvar DIST_CODE_LEN = 512;\n/* see definition of array dist_code below */\n// !!!! Use flat array instead of structure, Freq = i*2, Len = i*2+1\n\nvar static_ltree = new Array((L_CODES + 2) * 2);\nzero(static_ltree);\n/* The static literal tree. Since the bit lengths are imposed, there is no\n * need for the L_CODES extra codes used during heap construction. However\n * The codes 286 and 287 are needed to build a canonical tree (see _tr_init\n * below).\n */\n\nvar static_dtree = new Array(D_CODES * 2);\nzero(static_dtree);\n/* The static distance tree. (Actually a trivial tree since all codes use\n * 5 bits.)\n */\n\nvar _dist_code = new Array(DIST_CODE_LEN);\n\nzero(_dist_code);\n/* Distance codes. The first 256 values correspond to the distances\n * 3 .. 258, the last 256 values correspond to the top 8 bits of\n * the 15 bit distances.\n */\n\nvar _length_code = new Array(MAX_MATCH - MIN_MATCH + 1);\n\nzero(_length_code);\n/* length code for each normalized match length (0 == MIN_MATCH) */\n\nvar base_length = new Array(LENGTH_CODES);\nzero(base_length);\n/* First normalized length for each code (0 = MIN_MATCH) */\n\nvar base_dist = new Array(D_CODES);\nzero(base_dist);\n/* First normalized distance for each code (0 = distance of 1) */\n\nfunction StaticTreeDesc(static_tree, extra_bits, extra_base, elems, max_length) {\n  this.static_tree = static_tree;\n  /* static tree or NULL */\n\n  this.extra_bits = extra_bits;\n  /* extra bits for each code or NULL */\n\n  this.extra_base = extra_base;\n  /* base index for extra_bits */\n\n  this.elems = elems;\n  /* max number of elements in the tree */\n\n  this.max_length = max_length;\n  /* max bit length for the codes */\n  // show if `static_tree` has data or dummy - needed for monomorphic objects\n\n  this.has_stree = static_tree && static_tree.length;\n}\n\nvar static_l_desc;\nvar static_d_desc;\nvar static_bl_desc;\n\nfunction TreeDesc(dyn_tree, stat_desc) {\n  this.dyn_tree = dyn_tree;\n  /* the dynamic tree */\n\n  this.max_code = 0;\n  /* largest code with non zero frequency */\n\n  this.stat_desc = stat_desc;\n  /* the corresponding static tree */\n}\n\nfunction d_code(dist) {\n  return dist < 256 ? _dist_code[dist] : _dist_code[256 + (dist >>> 7)];\n}\n/* ===========================================================================\n * Output a short LSB first on the stream.\n * IN assertion: there is enough room in pendingBuf.\n */\n\n\nfunction put_short(s, w) {\n  //    put_byte(s, (uch)((w) & 0xff));\n  //    put_byte(s, (uch)((ush)(w) >> 8));\n  s.pending_buf[s.pending++] = w & 0xff;\n  s.pending_buf[s.pending++] = w >>> 8 & 0xff;\n}\n/* ===========================================================================\n * Send a value on a given number of bits.\n * IN assertion: length <= 16 and value fits in length bits.\n */\n\n\nfunction send_bits(s, value, length) {\n  if (s.bi_valid > Buf_size - length) {\n    s.bi_buf |= value << s.bi_valid & 0xffff;\n    put_short(s, s.bi_buf);\n    s.bi_buf = value >> Buf_size - s.bi_valid;\n    s.bi_valid += length - Buf_size;\n  } else {\n    s.bi_buf |= value << s.bi_valid & 0xffff;\n    s.bi_valid += length;\n  }\n}\n\nfunction send_code(s, c, tree) {\n  send_bits(s, tree[c * 2]\n  /*.Code*/\n  , tree[c * 2 + 1]\n  /*.Len*/\n  );\n}\n/* ===========================================================================\n * Reverse the first len bits of a code, using straightforward code (a faster\n * method would use a table)\n * IN assertion: 1 <= len <= 15\n */\n\n\nfunction bi_reverse(code, len) {\n  var res = 0;\n\n  do {\n    res |= code & 1;\n    code >>>= 1;\n    res <<= 1;\n  } while (--len > 0);\n\n  return res >>> 1;\n}\n/* ===========================================================================\n * Flush the bit buffer, keeping at most 7 bits in it.\n */\n\n\nfunction bi_flush(s) {\n  if (s.bi_valid === 16) {\n    put_short(s, s.bi_buf);\n    s.bi_buf = 0;\n    s.bi_valid = 0;\n  } else if (s.bi_valid >= 8) {\n    s.pending_buf[s.pending++] = s.bi_buf & 0xff;\n    s.bi_buf >>= 8;\n    s.bi_valid -= 8;\n  }\n}\n/* ===========================================================================\n * Compute the optimal bit lengths for a tree and update the total bit length\n * for the current block.\n * IN assertion: the fields freq and dad are set, heap[heap_max] and\n *    above are the tree nodes sorted by increasing frequency.\n * OUT assertions: the field len is set to the optimal bit length, the\n *     array bl_count contains the frequencies for each bit length.\n *     The length opt_len is updated; static_len is also updated if stree is\n *     not null.\n */\n\n\nfunction gen_bitlen(s, desc) //    deflate_state *s;\n//    tree_desc *desc;    /* the tree descriptor */\n{\n  var tree = desc.dyn_tree;\n  var max_code = desc.max_code;\n  var stree = desc.stat_desc.static_tree;\n  var has_stree = desc.stat_desc.has_stree;\n  var extra = desc.stat_desc.extra_bits;\n  var base = desc.stat_desc.extra_base;\n  var max_length = desc.stat_desc.max_length;\n  var h;\n  /* heap index */\n\n  var n, m;\n  /* iterate over the tree elements */\n\n  var bits;\n  /* bit length */\n\n  var xbits;\n  /* extra bits */\n\n  var f;\n  /* frequency */\n\n  var overflow = 0;\n  /* number of elements with bit length too large */\n\n  for (bits = 0; bits <= MAX_BITS; bits++) {\n    s.bl_count[bits] = 0;\n  }\n  /* In a first pass, compute the optimal bit lengths (which may\n   * overflow in the case of the bit length tree).\n   */\n\n\n  tree[s.heap[s.heap_max] * 2 + 1]\n  /*.Len*/\n  = 0;\n  /* root of the heap */\n\n  for (h = s.heap_max + 1; h < HEAP_SIZE; h++) {\n    n = s.heap[h];\n    bits = tree[tree[n * 2 + 1]\n    /*.Dad*/\n    * 2 + 1]\n    /*.Len*/\n    + 1;\n\n    if (bits > max_length) {\n      bits = max_length;\n      overflow++;\n    }\n\n    tree[n * 2 + 1]\n    /*.Len*/\n    = bits;\n    /* We overwrite tree[n].Dad which is no longer needed */\n\n    if (n > max_code) {\n      continue;\n    }\n    /* not a leaf node */\n\n\n    s.bl_count[bits]++;\n    xbits = 0;\n\n    if (n >= base) {\n      xbits = extra[n - base];\n    }\n\n    f = tree[n * 2]\n    /*.Freq*/\n    ;\n    s.opt_len += f * (bits + xbits);\n\n    if (has_stree) {\n      s.static_len += f * (stree[n * 2 + 1]\n      /*.Len*/\n      + xbits);\n    }\n  }\n\n  if (overflow === 0) {\n    return;\n  } // Trace((stderr,\"\\nbit length overflow\\n\"));\n\n  /* This happens for example on obj2 and pic of the Calgary corpus */\n\n  /* Find the first bit length which could increase: */\n\n\n  do {\n    bits = max_length - 1;\n\n    while (s.bl_count[bits] === 0) {\n      bits--;\n    }\n\n    s.bl_count[bits]--;\n    /* move one leaf down the tree */\n\n    s.bl_count[bits + 1] += 2;\n    /* move one overflow item as its brother */\n\n    s.bl_count[max_length]--;\n    /* The brother of the overflow item also moves one step up,\n     * but this does not affect bl_count[max_length]\n     */\n\n    overflow -= 2;\n  } while (overflow > 0);\n  /* Now recompute all bit lengths, scanning in increasing frequency.\n   * h is still equal to HEAP_SIZE. (It is simpler to reconstruct all\n   * lengths instead of fixing only the wrong ones. This idea is taken\n   * from 'ar' written by Haruhiko Okumura.)\n   */\n\n\n  for (bits = max_length; bits !== 0; bits--) {\n    n = s.bl_count[bits];\n\n    while (n !== 0) {\n      m = s.heap[--h];\n\n      if (m > max_code) {\n        continue;\n      }\n\n      if (tree[m * 2 + 1]\n      /*.Len*/\n      !== bits) {\n        // Trace((stderr,\"code %d bits %d->%d\\n\", m, tree[m].Len, bits));\n        s.opt_len += (bits - tree[m * 2 + 1]\n        /*.Len*/\n        ) * tree[m * 2]\n        /*.Freq*/\n        ;\n        tree[m * 2 + 1]\n        /*.Len*/\n        = bits;\n      }\n\n      n--;\n    }\n  }\n}\n/* ===========================================================================\n * Generate the codes for a given tree and bit counts (which need not be\n * optimal).\n * IN assertion: the array bl_count contains the bit length statistics for\n * the given tree and the field len is set for all tree elements.\n * OUT assertion: the field code is set for all tree elements of non\n *     zero code length.\n */\n\n\nfunction gen_codes(tree, max_code, bl_count) //    ct_data *tree;             /* the tree to decorate */\n//    int max_code;              /* largest code with non zero frequency */\n//    ushf *bl_count;            /* number of codes at each bit length */\n{\n  var next_code = new Array(MAX_BITS + 1);\n  /* next code value for each bit length */\n\n  var code = 0;\n  /* running code value */\n\n  var bits;\n  /* bit index */\n\n  var n;\n  /* code index */\n\n  /* The distribution counts are first used to generate the code values\n   * without bit reversal.\n   */\n\n  for (bits = 1; bits <= MAX_BITS; bits++) {\n    next_code[bits] = code = code + bl_count[bits - 1] << 1;\n  }\n  /* Check that the bit counts in bl_count are consistent. The last code\n   * must be all ones.\n   */\n  //Assert (code + bl_count[MAX_BITS]-1 == (1<<MAX_BITS)-1,\n  //        \"inconsistent bit counts\");\n  //Tracev((stderr,\"\\ngen_codes: max_code %d \", max_code));\n\n\n  for (n = 0; n <= max_code; n++) {\n    var len = tree[n * 2 + 1]\n    /*.Len*/\n    ;\n\n    if (len === 0) {\n      continue;\n    }\n    /* Now reverse the bits */\n\n\n    tree[n * 2]\n    /*.Code*/\n    = bi_reverse(next_code[len]++, len); //Tracecv(tree != static_ltree, (stderr,\"\\nn %3d %c l %2d c %4x (%x) \",\n    //     n, (isgraph(n) ? n : ' '), len, tree[n].Code, next_code[len]-1));\n  }\n}\n/* ===========================================================================\n * Initialize the various 'constant' tables.\n */\n\n\nfunction tr_static_init() {\n  var n;\n  /* iterates over tree elements */\n\n  var bits;\n  /* bit counter */\n\n  var length;\n  /* length value */\n\n  var code;\n  /* code value */\n\n  var dist;\n  /* distance index */\n\n  var bl_count = new Array(MAX_BITS + 1);\n  /* number of codes at each bit length for an optimal tree */\n  // do check in _tr_init()\n  //if (static_init_done) return;\n\n  /* For some embedded targets, global variables are not initialized: */\n\n  /*#ifdef NO_INIT_GLOBAL_POINTERS\n    static_l_desc.static_tree = static_ltree;\n    static_l_desc.extra_bits = extra_lbits;\n    static_d_desc.static_tree = static_dtree;\n    static_d_desc.extra_bits = extra_dbits;\n    static_bl_desc.extra_bits = extra_blbits;\n  #endif*/\n\n  /* Initialize the mapping length (0..255) -> length code (0..28) */\n\n  length = 0;\n\n  for (code = 0; code < LENGTH_CODES - 1; code++) {\n    base_length[code] = length;\n\n    for (n = 0; n < 1 << extra_lbits[code]; n++) {\n      _length_code[length++] = code;\n    }\n  } //Assert (length == 256, \"tr_static_init: length != 256\");\n\n  /* Note that the length 255 (match length 258) can be represented\n   * in two different ways: code 284 + 5 bits or code 285, so we\n   * overwrite length_code[255] to use the best encoding:\n   */\n\n\n  _length_code[length - 1] = code;\n  /* Initialize the mapping dist (0..32K) -> dist code (0..29) */\n\n  dist = 0;\n\n  for (code = 0; code < 16; code++) {\n    base_dist[code] = dist;\n\n    for (n = 0; n < 1 << extra_dbits[code]; n++) {\n      _dist_code[dist++] = code;\n    }\n  } //Assert (dist == 256, \"tr_static_init: dist != 256\");\n\n\n  dist >>= 7;\n  /* from now on, all distances are divided by 128 */\n\n  for (; code < D_CODES; code++) {\n    base_dist[code] = dist << 7;\n\n    for (n = 0; n < 1 << extra_dbits[code] - 7; n++) {\n      _dist_code[256 + dist++] = code;\n    }\n  } //Assert (dist == 256, \"tr_static_init: 256+dist != 512\");\n\n  /* Construct the codes of the static literal tree */\n\n\n  for (bits = 0; bits <= MAX_BITS; bits++) {\n    bl_count[bits] = 0;\n  }\n\n  n = 0;\n\n  while (n <= 143) {\n    static_ltree[n * 2 + 1]\n    /*.Len*/\n    = 8;\n    n++;\n    bl_count[8]++;\n  }\n\n  while (n <= 255) {\n    static_ltree[n * 2 + 1]\n    /*.Len*/\n    = 9;\n    n++;\n    bl_count[9]++;\n  }\n\n  while (n <= 279) {\n    static_ltree[n * 2 + 1]\n    /*.Len*/\n    = 7;\n    n++;\n    bl_count[7]++;\n  }\n\n  while (n <= 287) {\n    static_ltree[n * 2 + 1]\n    /*.Len*/\n    = 8;\n    n++;\n    bl_count[8]++;\n  }\n  /* Codes 286 and 287 do not exist, but we must include them in the\n   * tree construction to get a canonical Huffman tree (longest code\n   * all ones)\n   */\n\n\n  gen_codes(static_ltree, L_CODES + 1, bl_count);\n  /* The static distance tree is trivial: */\n\n  for (n = 0; n < D_CODES; n++) {\n    static_dtree[n * 2 + 1]\n    /*.Len*/\n    = 5;\n    static_dtree[n * 2]\n    /*.Code*/\n    = bi_reverse(n, 5);\n  } // Now data ready and we can init static trees\n\n\n  static_l_desc = new StaticTreeDesc(static_ltree, extra_lbits, LITERALS + 1, L_CODES, MAX_BITS);\n  static_d_desc = new StaticTreeDesc(static_dtree, extra_dbits, 0, D_CODES, MAX_BITS);\n  static_bl_desc = new StaticTreeDesc(new Array(0), extra_blbits, 0, BL_CODES, MAX_BL_BITS); //static_init_done = true;\n}\n/* ===========================================================================\n * Initialize a new block.\n */\n\n\nfunction init_block(s) {\n  var n;\n  /* iterates over tree elements */\n\n  /* Initialize the trees. */\n\n  for (n = 0; n < L_CODES; n++) {\n    s.dyn_ltree[n * 2]\n    /*.Freq*/\n    = 0;\n  }\n\n  for (n = 0; n < D_CODES; n++) {\n    s.dyn_dtree[n * 2]\n    /*.Freq*/\n    = 0;\n  }\n\n  for (n = 0; n < BL_CODES; n++) {\n    s.bl_tree[n * 2]\n    /*.Freq*/\n    = 0;\n  }\n\n  s.dyn_ltree[END_BLOCK * 2]\n  /*.Freq*/\n  = 1;\n  s.opt_len = s.static_len = 0;\n  s.last_lit = s.matches = 0;\n}\n/* ===========================================================================\n * Flush the bit buffer and align the output on a byte boundary\n */\n\n\nfunction bi_windup(s) {\n  if (s.bi_valid > 8) {\n    put_short(s, s.bi_buf);\n  } else if (s.bi_valid > 0) {\n    //put_byte(s, (Byte)s->bi_buf);\n    s.pending_buf[s.pending++] = s.bi_buf;\n  }\n\n  s.bi_buf = 0;\n  s.bi_valid = 0;\n}\n/* ===========================================================================\n * Copy a stored block, storing first the length and its\n * one's complement if requested.\n */\n\n\nfunction copy_block(s, buf, len, header) //DeflateState *s;\n//charf    *buf;    /* the input data */\n//unsigned len;     /* its length */\n//int      header;  /* true if block header must be written */\n{\n  bi_windup(s);\n  /* align on byte boundary */\n\n  if (header) {\n    put_short(s, len);\n    put_short(s, ~len);\n  } //  while (len--) {\n  //    put_byte(s, *buf++);\n  //  }\n\n\n  utils.arraySet(s.pending_buf, s.window, buf, len, s.pending);\n  s.pending += len;\n}\n/* ===========================================================================\n * Compares to subtrees, using the tree depth as tie breaker when\n * the subtrees have equal frequency. This minimizes the worst case length.\n */\n\n\nfunction smaller(tree, n, m, depth) {\n  var _n2 = n * 2;\n\n  var _m2 = m * 2;\n\n  return tree[_n2]\n  /*.Freq*/\n  < tree[_m2]\n  /*.Freq*/\n  || tree[_n2]\n  /*.Freq*/\n  === tree[_m2]\n  /*.Freq*/\n  && depth[n] <= depth[m];\n}\n/* ===========================================================================\n * Restore the heap property by moving down the tree starting at node k,\n * exchanging a node with the smallest of its two sons if necessary, stopping\n * when the heap property is re-established (each father smaller than its\n * two sons).\n */\n\n\nfunction pqdownheap(s, tree, k) //    deflate_state *s;\n//    ct_data *tree;  /* the tree to restore */\n//    int k;               /* node to move down */\n{\n  var v = s.heap[k];\n  var j = k << 1;\n  /* left son of k */\n\n  while (j <= s.heap_len) {\n    /* Set j to the smallest of the two sons: */\n    if (j < s.heap_len && smaller(tree, s.heap[j + 1], s.heap[j], s.depth)) {\n      j++;\n    }\n    /* Exit if v is smaller than both sons */\n\n\n    if (smaller(tree, v, s.heap[j], s.depth)) {\n      break;\n    }\n    /* Exchange v with the smallest son */\n\n\n    s.heap[k] = s.heap[j];\n    k = j;\n    /* And continue down the tree, setting j to the left son of k */\n\n    j <<= 1;\n  }\n\n  s.heap[k] = v;\n} // inlined manually\n// var SMALLEST = 1;\n\n/* ===========================================================================\n * Send the block data compressed using the given Huffman trees\n */\n\n\nfunction compress_block(s, ltree, dtree) //    deflate_state *s;\n//    const ct_data *ltree; /* literal tree */\n//    const ct_data *dtree; /* distance tree */\n{\n  var dist;\n  /* distance of matched string */\n\n  var lc;\n  /* match length or unmatched char (if dist == 0) */\n\n  var lx = 0;\n  /* running index in l_buf */\n\n  var code;\n  /* the code to send */\n\n  var extra;\n  /* number of extra bits to send */\n\n  if (s.last_lit !== 0) {\n    do {\n      dist = s.pending_buf[s.d_buf + lx * 2] << 8 | s.pending_buf[s.d_buf + lx * 2 + 1];\n      lc = s.pending_buf[s.l_buf + lx];\n      lx++;\n\n      if (dist === 0) {\n        send_code(s, lc, ltree);\n        /* send a literal byte */\n        //Tracecv(isgraph(lc), (stderr,\" '%c' \", lc));\n      } else {\n        /* Here, lc is the match length - MIN_MATCH */\n        code = _length_code[lc];\n        send_code(s, code + LITERALS + 1, ltree);\n        /* send the length code */\n\n        extra = extra_lbits[code];\n\n        if (extra !== 0) {\n          lc -= base_length[code];\n          send_bits(s, lc, extra);\n          /* send the extra length bits */\n        }\n\n        dist--;\n        /* dist is now the match distance - 1 */\n\n        code = d_code(dist); //Assert (code < D_CODES, \"bad d_code\");\n\n        send_code(s, code, dtree);\n        /* send the distance code */\n\n        extra = extra_dbits[code];\n\n        if (extra !== 0) {\n          dist -= base_dist[code];\n          send_bits(s, dist, extra);\n          /* send the extra distance bits */\n        }\n      }\n      /* literal or match pair ? */\n\n      /* Check that the overlay between pending_buf and d_buf+l_buf is ok: */\n      //Assert((uInt)(s->pending) < s->lit_bufsize + 2*lx,\n      //       \"pendingBuf overflow\");\n\n    } while (lx < s.last_lit);\n  }\n\n  send_code(s, END_BLOCK, ltree);\n}\n/* ===========================================================================\n * Construct one Huffman tree and assigns the code bit strings and lengths.\n * Update the total bit length for the current block.\n * IN assertion: the field freq is set for all tree elements.\n * OUT assertions: the fields len and code are set to the optimal bit length\n *     and corresponding code. The length opt_len is updated; static_len is\n *     also updated if stree is not null. The field max_code is set.\n */\n\n\nfunction build_tree(s, desc) //    deflate_state *s;\n//    tree_desc *desc; /* the tree descriptor */\n{\n  var tree = desc.dyn_tree;\n  var stree = desc.stat_desc.static_tree;\n  var has_stree = desc.stat_desc.has_stree;\n  var elems = desc.stat_desc.elems;\n  var n, m;\n  /* iterate over heap elements */\n\n  var max_code = -1;\n  /* largest code with non zero frequency */\n\n  var node;\n  /* new node being created */\n\n  /* Construct the initial heap, with least frequent element in\n   * heap[SMALLEST]. The sons of heap[n] are heap[2*n] and heap[2*n+1].\n   * heap[0] is not used.\n   */\n\n  s.heap_len = 0;\n  s.heap_max = HEAP_SIZE;\n\n  for (n = 0; n < elems; n++) {\n    if (tree[n * 2]\n    /*.Freq*/\n    !== 0) {\n      s.heap[++s.heap_len] = max_code = n;\n      s.depth[n] = 0;\n    } else {\n      tree[n * 2 + 1]\n      /*.Len*/\n      = 0;\n    }\n  }\n  /* The pkzip format requires that at least one distance code exists,\n   * and that at least one bit should be sent even if there is only one\n   * possible code. So to avoid special checks later on we force at least\n   * two codes of non zero frequency.\n   */\n\n\n  while (s.heap_len < 2) {\n    node = s.heap[++s.heap_len] = max_code < 2 ? ++max_code : 0;\n    tree[node * 2]\n    /*.Freq*/\n    = 1;\n    s.depth[node] = 0;\n    s.opt_len--;\n\n    if (has_stree) {\n      s.static_len -= stree[node * 2 + 1]\n      /*.Len*/\n      ;\n    }\n    /* node is 0 or 1 so it does not have extra bits */\n\n  }\n\n  desc.max_code = max_code;\n  /* The elements heap[heap_len/2+1 .. heap_len] are leaves of the tree,\n   * establish sub-heaps of increasing lengths:\n   */\n\n  for (n = s.heap_len >> 1\n  /*int /2*/\n  ; n >= 1; n--) {\n    pqdownheap(s, tree, n);\n  }\n  /* Construct the Huffman tree by repeatedly combining the least two\n   * frequent nodes.\n   */\n\n\n  node = elems;\n  /* next internal node of the tree */\n\n  do {\n    //pqremove(s, tree, n);  /* n = node of least frequency */\n\n    /*** pqremove ***/\n    n = s.heap[1\n    /*SMALLEST*/\n    ];\n    s.heap[1\n    /*SMALLEST*/\n    ] = s.heap[s.heap_len--];\n    pqdownheap(s, tree, 1\n    /*SMALLEST*/\n    );\n    /***/\n\n    m = s.heap[1\n    /*SMALLEST*/\n    ];\n    /* m = node of next least frequency */\n\n    s.heap[--s.heap_max] = n;\n    /* keep the nodes sorted by frequency */\n\n    s.heap[--s.heap_max] = m;\n    /* Create a new node father of n and m */\n\n    tree[node * 2]\n    /*.Freq*/\n    = tree[n * 2]\n    /*.Freq*/\n    + tree[m * 2]\n    /*.Freq*/\n    ;\n    s.depth[node] = (s.depth[n] >= s.depth[m] ? s.depth[n] : s.depth[m]) + 1;\n    tree[n * 2 + 1]\n    /*.Dad*/\n    = tree[m * 2 + 1]\n    /*.Dad*/\n    = node;\n    /* and insert the new node in the heap */\n\n    s.heap[1\n    /*SMALLEST*/\n    ] = node++;\n    pqdownheap(s, tree, 1\n    /*SMALLEST*/\n    );\n  } while (s.heap_len >= 2);\n\n  s.heap[--s.heap_max] = s.heap[1\n  /*SMALLEST*/\n  ];\n  /* At this point, the fields freq and dad are set. We can now\n   * generate the bit lengths.\n   */\n\n  gen_bitlen(s, desc);\n  /* The field len is now set, we can generate the bit codes */\n\n  gen_codes(tree, max_code, s.bl_count);\n}\n/* ===========================================================================\n * Scan a literal or distance tree to determine the frequencies of the codes\n * in the bit length tree.\n */\n\n\nfunction scan_tree(s, tree, max_code) //    deflate_state *s;\n//    ct_data *tree;   /* the tree to be scanned */\n//    int max_code;    /* and its largest code of non zero frequency */\n{\n  var n;\n  /* iterates over all tree elements */\n\n  var prevlen = -1;\n  /* last emitted length */\n\n  var curlen;\n  /* length of current code */\n\n  var nextlen = tree[0 * 2 + 1]\n  /*.Len*/\n  ;\n  /* length of next code */\n\n  var count = 0;\n  /* repeat count of the current code */\n\n  var max_count = 7;\n  /* max repeat count */\n\n  var min_count = 4;\n  /* min repeat count */\n\n  if (nextlen === 0) {\n    max_count = 138;\n    min_count = 3;\n  }\n\n  tree[(max_code + 1) * 2 + 1]\n  /*.Len*/\n  = 0xffff;\n  /* guard */\n\n  for (n = 0; n <= max_code; n++) {\n    curlen = nextlen;\n    nextlen = tree[(n + 1) * 2 + 1]\n    /*.Len*/\n    ;\n\n    if (++count < max_count && curlen === nextlen) {\n      continue;\n    } else if (count < min_count) {\n      s.bl_tree[curlen * 2]\n      /*.Freq*/\n      += count;\n    } else if (curlen !== 0) {\n      if (curlen !== prevlen) {\n        s.bl_tree[curlen * 2] /*.Freq*/++;\n      }\n\n      s.bl_tree[REP_3_6 * 2] /*.Freq*/++;\n    } else if (count <= 10) {\n      s.bl_tree[REPZ_3_10 * 2] /*.Freq*/++;\n    } else {\n      s.bl_tree[REPZ_11_138 * 2] /*.Freq*/++;\n    }\n\n    count = 0;\n    prevlen = curlen;\n\n    if (nextlen === 0) {\n      max_count = 138;\n      min_count = 3;\n    } else if (curlen === nextlen) {\n      max_count = 6;\n      min_count = 3;\n    } else {\n      max_count = 7;\n      min_count = 4;\n    }\n  }\n}\n/* ===========================================================================\n * Send a literal or distance tree in compressed form, using the codes in\n * bl_tree.\n */\n\n\nfunction send_tree(s, tree, max_code) //    deflate_state *s;\n//    ct_data *tree; /* the tree to be scanned */\n//    int max_code;       /* and its largest code of non zero frequency */\n{\n  var n;\n  /* iterates over all tree elements */\n\n  var prevlen = -1;\n  /* last emitted length */\n\n  var curlen;\n  /* length of current code */\n\n  var nextlen = tree[0 * 2 + 1]\n  /*.Len*/\n  ;\n  /* length of next code */\n\n  var count = 0;\n  /* repeat count of the current code */\n\n  var max_count = 7;\n  /* max repeat count */\n\n  var min_count = 4;\n  /* min repeat count */\n\n  /* tree[max_code+1].Len = -1; */\n\n  /* guard already set */\n\n  if (nextlen === 0) {\n    max_count = 138;\n    min_count = 3;\n  }\n\n  for (n = 0; n <= max_code; n++) {\n    curlen = nextlen;\n    nextlen = tree[(n + 1) * 2 + 1]\n    /*.Len*/\n    ;\n\n    if (++count < max_count && curlen === nextlen) {\n      continue;\n    } else if (count < min_count) {\n      do {\n        send_code(s, curlen, s.bl_tree);\n      } while (--count !== 0);\n    } else if (curlen !== 0) {\n      if (curlen !== prevlen) {\n        send_code(s, curlen, s.bl_tree);\n        count--;\n      } //Assert(count >= 3 && count <= 6, \" 3_6?\");\n\n\n      send_code(s, REP_3_6, s.bl_tree);\n      send_bits(s, count - 3, 2);\n    } else if (count <= 10) {\n      send_code(s, REPZ_3_10, s.bl_tree);\n      send_bits(s, count - 3, 3);\n    } else {\n      send_code(s, REPZ_11_138, s.bl_tree);\n      send_bits(s, count - 11, 7);\n    }\n\n    count = 0;\n    prevlen = curlen;\n\n    if (nextlen === 0) {\n      max_count = 138;\n      min_count = 3;\n    } else if (curlen === nextlen) {\n      max_count = 6;\n      min_count = 3;\n    } else {\n      max_count = 7;\n      min_count = 4;\n    }\n  }\n}\n/* ===========================================================================\n * Construct the Huffman tree for the bit lengths and return the index in\n * bl_order of the last bit length code to send.\n */\n\n\nfunction build_bl_tree(s) {\n  var max_blindex;\n  /* index of last bit length code of non zero freq */\n\n  /* Determine the bit length frequencies for literal and distance trees */\n\n  scan_tree(s, s.dyn_ltree, s.l_desc.max_code);\n  scan_tree(s, s.dyn_dtree, s.d_desc.max_code);\n  /* Build the bit length tree: */\n\n  build_tree(s, s.bl_desc);\n  /* opt_len now includes the length of the tree representations, except\n   * the lengths of the bit lengths codes and the 5+5+4 bits for the counts.\n   */\n\n  /* Determine the number of bit length codes to send. The pkzip format\n   * requires that at least 4 bit length codes be sent. (appnote.txt says\n   * 3 but the actual value used is 4.)\n   */\n\n  for (max_blindex = BL_CODES - 1; max_blindex >= 3; max_blindex--) {\n    if (s.bl_tree[bl_order[max_blindex] * 2 + 1]\n    /*.Len*/\n    !== 0) {\n      break;\n    }\n  }\n  /* Update opt_len to include the bit length tree and counts */\n\n\n  s.opt_len += 3 * (max_blindex + 1) + 5 + 5 + 4; //Tracev((stderr, \"\\ndyn trees: dyn %ld, stat %ld\",\n  //        s->opt_len, s->static_len));\n\n  return max_blindex;\n}\n/* ===========================================================================\n * Send the header for a block using dynamic Huffman trees: the counts, the\n * lengths of the bit length codes, the literal tree and the distance tree.\n * IN assertion: lcodes >= 257, dcodes >= 1, blcodes >= 4.\n */\n\n\nfunction send_all_trees(s, lcodes, dcodes, blcodes) //    deflate_state *s;\n//    int lcodes, dcodes, blcodes; /* number of codes for each tree */\n{\n  var rank;\n  /* index in bl_order */\n  //Assert (lcodes >= 257 && dcodes >= 1 && blcodes >= 4, \"not enough codes\");\n  //Assert (lcodes <= L_CODES && dcodes <= D_CODES && blcodes <= BL_CODES,\n  //        \"too many codes\");\n  //Tracev((stderr, \"\\nbl counts: \"));\n\n  send_bits(s, lcodes - 257, 5);\n  /* not +255 as stated in appnote.txt */\n\n  send_bits(s, dcodes - 1, 5);\n  send_bits(s, blcodes - 4, 4);\n  /* not -3 as stated in appnote.txt */\n\n  for (rank = 0; rank < blcodes; rank++) {\n    //Tracev((stderr, \"\\nbl code %2d \", bl_order[rank]));\n    send_bits(s, s.bl_tree[bl_order[rank] * 2 + 1]\n    /*.Len*/\n    , 3);\n  } //Tracev((stderr, \"\\nbl tree: sent %ld\", s->bits_sent));\n\n\n  send_tree(s, s.dyn_ltree, lcodes - 1);\n  /* literal tree */\n  //Tracev((stderr, \"\\nlit tree: sent %ld\", s->bits_sent));\n\n  send_tree(s, s.dyn_dtree, dcodes - 1);\n  /* distance tree */\n  //Tracev((stderr, \"\\ndist tree: sent %ld\", s->bits_sent));\n}\n/* ===========================================================================\n * Check if the data type is TEXT or BINARY, using the following algorithm:\n * - TEXT if the two conditions below are satisfied:\n *    a) There are no non-portable control characters belonging to the\n *       \"black list\" (0..6, 14..25, 28..31).\n *    b) There is at least one printable character belonging to the\n *       \"white list\" (9 {TAB}, 10 {LF}, 13 {CR}, 32..255).\n * - BINARY otherwise.\n * - The following partially-portable control characters form a\n *   \"gray list\" that is ignored in this detection algorithm:\n *   (7 {BEL}, 8 {BS}, 11 {VT}, 12 {FF}, 26 {SUB}, 27 {ESC}).\n * IN assertion: the fields Freq of dyn_ltree are set.\n */\n\n\nfunction detect_data_type(s) {\n  /* black_mask is the bit mask of black-listed bytes\n   * set bits 0..6, 14..25, and 28..31\n   * 0xf3ffc07f = binary 11110011111111111100000001111111\n   */\n  var black_mask = 0xf3ffc07f;\n  var n;\n  /* Check for non-textual (\"black-listed\") bytes. */\n\n  for (n = 0; n <= 31; n++, black_mask >>>= 1) {\n    if (black_mask & 1 && s.dyn_ltree[n * 2]\n    /*.Freq*/\n    !== 0) {\n      return Z_BINARY;\n    }\n  }\n  /* Check for textual (\"white-listed\") bytes. */\n\n\n  if (s.dyn_ltree[9 * 2]\n  /*.Freq*/\n  !== 0 || s.dyn_ltree[10 * 2]\n  /*.Freq*/\n  !== 0 || s.dyn_ltree[13 * 2]\n  /*.Freq*/\n  !== 0) {\n    return Z_TEXT;\n  }\n\n  for (n = 32; n < LITERALS; n++) {\n    if (s.dyn_ltree[n * 2]\n    /*.Freq*/\n    !== 0) {\n      return Z_TEXT;\n    }\n  }\n  /* There are no \"black-listed\" or \"white-listed\" bytes:\n   * this stream either is empty or has tolerated (\"gray-listed\") bytes only.\n   */\n\n\n  return Z_BINARY;\n}\n\nvar static_init_done = false;\n/* ===========================================================================\n * Initialize the tree data structures for a new zlib stream.\n */\n\nfunction _tr_init(s) {\n  if (!static_init_done) {\n    tr_static_init();\n    static_init_done = true;\n  }\n\n  s.l_desc = new TreeDesc(s.dyn_ltree, static_l_desc);\n  s.d_desc = new TreeDesc(s.dyn_dtree, static_d_desc);\n  s.bl_desc = new TreeDesc(s.bl_tree, static_bl_desc);\n  s.bi_buf = 0;\n  s.bi_valid = 0;\n  /* Initialize the first block of the first file: */\n\n  init_block(s);\n}\n/* ===========================================================================\n * Send a stored block\n */\n\n\nfunction _tr_stored_block(s, buf, stored_len, last) //DeflateState *s;\n//charf *buf;       /* input block */\n//ulg stored_len;   /* length of input block */\n//int last;         /* one if this is the last block for a file */\n{\n  send_bits(s, (STORED_BLOCK << 1) + (last ? 1 : 0), 3);\n  /* send block type */\n\n  copy_block(s, buf, stored_len, true);\n  /* with header */\n}\n/* ===========================================================================\n * Send one empty static block to give enough lookahead for inflate.\n * This takes 10 bits, of which 7 may remain in the bit buffer.\n */\n\n\nfunction _tr_align(s) {\n  send_bits(s, STATIC_TREES << 1, 3);\n  send_code(s, END_BLOCK, static_ltree);\n  bi_flush(s);\n}\n/* ===========================================================================\n * Determine the best encoding for the current block: dynamic trees, static\n * trees or store, and output the encoded block to the zip file.\n */\n\n\nfunction _tr_flush_block(s, buf, stored_len, last) //DeflateState *s;\n//charf *buf;       /* input block, or NULL if too old */\n//ulg stored_len;   /* length of input block */\n//int last;         /* one if this is the last block for a file */\n{\n  var opt_lenb, static_lenb;\n  /* opt_len and static_len in bytes */\n\n  var max_blindex = 0;\n  /* index of last bit length code of non zero freq */\n\n  /* Build the Huffman trees unless a stored block is forced */\n\n  if (s.level > 0) {\n    /* Check if the file is binary or text */\n    if (s.strm.data_type === Z_UNKNOWN) {\n      s.strm.data_type = detect_data_type(s);\n    }\n    /* Construct the literal and distance trees */\n\n\n    build_tree(s, s.l_desc); // Tracev((stderr, \"\\nlit data: dyn %ld, stat %ld\", s->opt_len,\n    //        s->static_len));\n\n    build_tree(s, s.d_desc); // Tracev((stderr, \"\\ndist data: dyn %ld, stat %ld\", s->opt_len,\n    //        s->static_len));\n\n    /* At this point, opt_len and static_len are the total bit lengths of\n     * the compressed block data, excluding the tree representations.\n     */\n\n    /* Build the bit length tree for the above two trees, and get the index\n     * in bl_order of the last bit length code to send.\n     */\n\n    max_blindex = build_bl_tree(s);\n    /* Determine the best encoding. Compute the block lengths in bytes. */\n\n    opt_lenb = s.opt_len + 3 + 7 >>> 3;\n    static_lenb = s.static_len + 3 + 7 >>> 3; // Tracev((stderr, \"\\nopt %lu(%lu) stat %lu(%lu) stored %lu lit %u \",\n    //        opt_lenb, s->opt_len, static_lenb, s->static_len, stored_len,\n    //        s->last_lit));\n\n    if (static_lenb <= opt_lenb) {\n      opt_lenb = static_lenb;\n    }\n  } else {\n    // Assert(buf != (char*)0, \"lost buf\");\n    opt_lenb = static_lenb = stored_len + 5;\n    /* force a stored block */\n  }\n\n  if (stored_len + 4 <= opt_lenb && buf !== -1) {\n    /* 4: two words for the lengths */\n\n    /* The test buf != NULL is only necessary if LIT_BUFSIZE > WSIZE.\n     * Otherwise we can't have processed more than WSIZE input bytes since\n     * the last block flush, because compression would have been\n     * successful. If LIT_BUFSIZE <= WSIZE, it is never too late to\n     * transform a block into a stored block.\n     */\n    _tr_stored_block(s, buf, stored_len, last);\n  } else if (s.strategy === Z_FIXED || static_lenb === opt_lenb) {\n    send_bits(s, (STATIC_TREES << 1) + (last ? 1 : 0), 3);\n    compress_block(s, static_ltree, static_dtree);\n  } else {\n    send_bits(s, (DYN_TREES << 1) + (last ? 1 : 0), 3);\n    send_all_trees(s, s.l_desc.max_code + 1, s.d_desc.max_code + 1, max_blindex + 1);\n    compress_block(s, s.dyn_ltree, s.dyn_dtree);\n  } // Assert (s->compressed_len == s->bits_sent, \"bad compressed size\");\n\n  /* The above check is made mod 2^32, for files larger than 512 MB\n   * and uLong implemented on 32 bits.\n   */\n\n\n  init_block(s);\n\n  if (last) {\n    bi_windup(s);\n  } // Tracev((stderr,\"\\ncomprlen %lu(%lu) \", s->compressed_len>>3,\n  //       s->compressed_len-7*last));\n\n}\n/* ===========================================================================\n * Save the match info and tally the frequency counts. Return true if\n * the current block must be flushed.\n */\n\n\nfunction _tr_tally(s, dist, lc) //    deflate_state *s;\n//    unsigned dist;  /* distance of matched string */\n//    unsigned lc;    /* match length-MIN_MATCH or unmatched char (if dist==0) */\n{\n  //var out_length, in_length, dcode;\n  s.pending_buf[s.d_buf + s.last_lit * 2] = dist >>> 8 & 0xff;\n  s.pending_buf[s.d_buf + s.last_lit * 2 + 1] = dist & 0xff;\n  s.pending_buf[s.l_buf + s.last_lit] = lc & 0xff;\n  s.last_lit++;\n\n  if (dist === 0) {\n    /* lc is the unmatched char */\n    s.dyn_ltree[lc * 2] /*.Freq*/++;\n  } else {\n    s.matches++;\n    /* Here, lc is the match length - MIN_MATCH */\n\n    dist--;\n    /* dist = match distance - 1 */\n    //Assert((ush)dist < (ush)MAX_DIST(s) &&\n    //       (ush)lc <= (ush)(MAX_MATCH-MIN_MATCH) &&\n    //       (ush)d_code(dist) < (ush)D_CODES,  \"_tr_tally: bad match\");\n\n    s.dyn_ltree[(_length_code[lc] + LITERALS + 1) * 2] /*.Freq*/++;\n    s.dyn_dtree[d_code(dist) * 2] /*.Freq*/++;\n  } // (!) This block is disabled in zlib defaults,\n  // don't enable it for binary compatibility\n  //#ifdef TRUNCATE_BLOCK\n  //  /* Try to guess if it is profitable to stop the current block here */\n  //  if ((s.last_lit & 0x1fff) === 0 && s.level > 2) {\n  //    /* Compute an upper bound for the compressed length */\n  //    out_length = s.last_lit*8;\n  //    in_length = s.strstart - s.block_start;\n  //\n  //    for (dcode = 0; dcode < D_CODES; dcode++) {\n  //      out_length += s.dyn_dtree[dcode*2]/*.Freq*/ * (5 + extra_dbits[dcode]);\n  //    }\n  //    out_length >>>= 3;\n  //    //Tracev((stderr,\"\\nlast_lit %u, in %ld, out ~%ld(%ld%%) \",\n  //    //       s->last_lit, in_length, out_length,\n  //    //       100L - out_length*100L/in_length));\n  //    if (s.matches < (s.last_lit>>1)/*int /2*/ && out_length < (in_length>>1)/*int /2*/) {\n  //      return true;\n  //    }\n  //  }\n  //#endif\n\n\n  return s.last_lit === s.lit_bufsize - 1;\n  /* We avoid equality with lit_bufsize because of wraparound at 64K\n   * on 16 bit machines and because stored blocks are restricted to\n   * 64K-1 bytes.\n   */\n}\n\nexports._tr_init = _tr_init;\nexports._tr_stored_block = _tr_stored_block;\nexports._tr_flush_block = _tr_flush_block;\nexports._tr_tally = _tr_tally;\nexports._tr_align = _tr_align;","'use strict';\n\nvar zlib_inflate = require('./zlib/inflate');\n\nvar utils = require('./utils/common');\n\nvar strings = require('./utils/strings');\n\nvar c = require('./zlib/constants');\n\nvar msg = require('./zlib/messages');\n\nvar ZStream = require('./zlib/zstream');\n\nvar GZheader = require('./zlib/gzheader');\n\nvar toString = Object.prototype.toString;\n/**\n * class Inflate\n *\n * Generic JS-style wrapper for zlib calls. If you don't need\n * streaming behaviour - use more simple functions: [[inflate]]\n * and [[inflateRaw]].\n **/\n\n/* internal\n * inflate.chunks -> Array\n *\n * Chunks of output data, if [[Inflate#onData]] not overridden.\n **/\n\n/**\n * Inflate.result -> Uint8Array|Array|String\n *\n * Uncompressed result, generated by default [[Inflate#onData]]\n * and [[Inflate#onEnd]] handlers. Filled after you push last chunk\n * (call [[Inflate#push]] with `Z_FINISH` / `true` param) or if you\n * push a chunk with explicit flush (call [[Inflate#push]] with\n * `Z_SYNC_FLUSH` param).\n **/\n\n/**\n * Inflate.err -> Number\n *\n * Error code after inflate finished. 0 (Z_OK) on success.\n * Should be checked if broken data possible.\n **/\n\n/**\n * Inflate.msg -> String\n *\n * Error message, if [[Inflate.err]] != 0\n **/\n\n/**\n * new Inflate(options)\n * - options (Object): zlib inflate options.\n *\n * Creates new inflator instance with specified params. Throws exception\n * on bad params. Supported options:\n *\n * - `windowBits`\n * - `dictionary`\n *\n * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)\n * for more information on these.\n *\n * Additional options, for internal needs:\n *\n * - `chunkSize` - size of generated data chunks (16K by default)\n * - `raw` (Boolean) - do raw inflate\n * - `to` (String) - if equal to 'string', then result will be converted\n *   from utf8 to utf16 (javascript) string. When string output requested,\n *   chunk length can differ from `chunkSize`, depending on content.\n *\n * By default, when no options set, autodetect deflate/gzip data format via\n * wrapper header.\n *\n * ##### Example:\n *\n * ```javascript\n * var pako = require('pako')\n *   , chunk1 = Uint8Array([1,2,3,4,5,6,7,8,9])\n *   , chunk2 = Uint8Array([10,11,12,13,14,15,16,17,18,19]);\n *\n * var inflate = new pako.Inflate({ level: 3});\n *\n * inflate.push(chunk1, false);\n * inflate.push(chunk2, true);  // true -> last chunk\n *\n * if (inflate.err) { throw new Error(inflate.err); }\n *\n * console.log(inflate.result);\n * ```\n **/\n\nfunction Inflate(options) {\n  if (!(this instanceof Inflate)) return new Inflate(options);\n  this.options = utils.assign({\n    chunkSize: 16384,\n    windowBits: 0,\n    to: ''\n  }, options || {});\n  var opt = this.options; // Force window size for `raw` data, if not set directly,\n  // because we have no header for autodetect.\n\n  if (opt.raw && opt.windowBits >= 0 && opt.windowBits < 16) {\n    opt.windowBits = -opt.windowBits;\n\n    if (opt.windowBits === 0) {\n      opt.windowBits = -15;\n    }\n  } // If `windowBits` not defined (and mode not raw) - set autodetect flag for gzip/deflate\n\n\n  if (opt.windowBits >= 0 && opt.windowBits < 16 && !(options && options.windowBits)) {\n    opt.windowBits += 32;\n  } // Gzip header has no info about windows size, we can do autodetect only\n  // for deflate. So, if window size not set, force it to max when gzip possible\n\n\n  if (opt.windowBits > 15 && opt.windowBits < 48) {\n    // bit 3 (16) -> gzipped data\n    // bit 4 (32) -> autodetect gzip/deflate\n    if ((opt.windowBits & 15) === 0) {\n      opt.windowBits |= 15;\n    }\n  }\n\n  this.err = 0; // error code, if happens (0 = Z_OK)\n\n  this.msg = ''; // error message\n\n  this.ended = false; // used to avoid multiple onEnd() calls\n\n  this.chunks = []; // chunks of compressed data\n\n  this.strm = new ZStream();\n  this.strm.avail_out = 0;\n  var status = zlib_inflate.inflateInit2(this.strm, opt.windowBits);\n\n  if (status !== c.Z_OK) {\n    throw new Error(msg[status]);\n  }\n\n  this.header = new GZheader();\n  zlib_inflate.inflateGetHeader(this.strm, this.header); // Setup dictionary\n\n  if (opt.dictionary) {\n    // Convert data if needed\n    if (typeof opt.dictionary === 'string') {\n      opt.dictionary = strings.string2buf(opt.dictionary);\n    } else if (toString.call(opt.dictionary) === '[object ArrayBuffer]') {\n      opt.dictionary = new Uint8Array(opt.dictionary);\n    }\n\n    if (opt.raw) {\n      //In raw mode we need to set the dictionary early\n      status = zlib_inflate.inflateSetDictionary(this.strm, opt.dictionary);\n\n      if (status !== c.Z_OK) {\n        throw new Error(msg[status]);\n      }\n    }\n  }\n}\n/**\n * Inflate#push(data[, mode]) -> Boolean\n * - data (Uint8Array|Array|ArrayBuffer|String): input data\n * - mode (Number|Boolean): 0..6 for corresponding Z_NO_FLUSH..Z_TREE modes.\n *   See constants. Skipped or `false` means Z_NO_FLUSH, `true` means Z_FINISH.\n *\n * Sends input data to inflate pipe, generating [[Inflate#onData]] calls with\n * new output chunks. Returns `true` on success. The last data block must have\n * mode Z_FINISH (or `true`). That will flush internal pending buffers and call\n * [[Inflate#onEnd]]. For interim explicit flushes (without ending the stream) you\n * can use mode Z_SYNC_FLUSH, keeping the decompression context.\n *\n * On fail call [[Inflate#onEnd]] with error code and return false.\n *\n * We strongly recommend to use `Uint8Array` on input for best speed (output\n * format is detected automatically). Also, don't skip last param and always\n * use the same type in your code (boolean or number). That will improve JS speed.\n *\n * For regular `Array`-s make sure all elements are [0..255].\n *\n * ##### Example\n *\n * ```javascript\n * push(chunk, false); // push one of data chunks\n * ...\n * push(chunk, true);  // push last chunk\n * ```\n **/\n\n\nInflate.prototype.push = function (data, mode) {\n  var strm = this.strm;\n  var chunkSize = this.options.chunkSize;\n  var dictionary = this.options.dictionary;\n\n  var status, _mode;\n\n  var next_out_utf8, tail, utf8str; // Flag to properly process Z_BUF_ERROR on testing inflate call\n  // when we check that all output data was flushed.\n\n  var allowBufError = false;\n\n  if (this.ended) {\n    return false;\n  }\n\n  _mode = mode === ~~mode ? mode : mode === true ? c.Z_FINISH : c.Z_NO_FLUSH; // Convert data if needed\n\n  if (typeof data === 'string') {\n    // Only binary strings can be decompressed on practice\n    strm.input = strings.binstring2buf(data);\n  } else if (toString.call(data) === '[object ArrayBuffer]') {\n    strm.input = new Uint8Array(data);\n  } else {\n    strm.input = data;\n  }\n\n  strm.next_in = 0;\n  strm.avail_in = strm.input.length;\n\n  do {\n    if (strm.avail_out === 0) {\n      strm.output = new utils.Buf8(chunkSize);\n      strm.next_out = 0;\n      strm.avail_out = chunkSize;\n    }\n\n    status = zlib_inflate.inflate(strm, c.Z_NO_FLUSH);\n    /* no bad return value */\n\n    if (status === c.Z_NEED_DICT && dictionary) {\n      status = zlib_inflate.inflateSetDictionary(this.strm, dictionary);\n    }\n\n    if (status === c.Z_BUF_ERROR && allowBufError === true) {\n      status = c.Z_OK;\n      allowBufError = false;\n    }\n\n    if (status !== c.Z_STREAM_END && status !== c.Z_OK) {\n      this.onEnd(status);\n      this.ended = true;\n      return false;\n    }\n\n    if (strm.next_out) {\n      if (strm.avail_out === 0 || status === c.Z_STREAM_END || strm.avail_in === 0 && (_mode === c.Z_FINISH || _mode === c.Z_SYNC_FLUSH)) {\n        if (this.options.to === 'string') {\n          next_out_utf8 = strings.utf8border(strm.output, strm.next_out);\n          tail = strm.next_out - next_out_utf8;\n          utf8str = strings.buf2string(strm.output, next_out_utf8); // move tail\n\n          strm.next_out = tail;\n          strm.avail_out = chunkSize - tail;\n\n          if (tail) {\n            utils.arraySet(strm.output, strm.output, next_out_utf8, tail, 0);\n          }\n\n          this.onData(utf8str);\n        } else {\n          this.onData(utils.shrinkBuf(strm.output, strm.next_out));\n        }\n      }\n    } // When no more input data, we should check that internal inflate buffers\n    // are flushed. The only way to do it when avail_out = 0 - run one more\n    // inflate pass. But if output data not exists, inflate return Z_BUF_ERROR.\n    // Here we set flag to process this error properly.\n    //\n    // NOTE. Deflate does not return error in this case and does not needs such\n    // logic.\n\n\n    if (strm.avail_in === 0 && strm.avail_out === 0) {\n      allowBufError = true;\n    }\n  } while ((strm.avail_in > 0 || strm.avail_out === 0) && status !== c.Z_STREAM_END);\n\n  if (status === c.Z_STREAM_END) {\n    _mode = c.Z_FINISH;\n  } // Finalize on the last chunk.\n\n\n  if (_mode === c.Z_FINISH) {\n    status = zlib_inflate.inflateEnd(this.strm);\n    this.onEnd(status);\n    this.ended = true;\n    return status === c.Z_OK;\n  } // callback interim results if Z_SYNC_FLUSH.\n\n\n  if (_mode === c.Z_SYNC_FLUSH) {\n    this.onEnd(c.Z_OK);\n    strm.avail_out = 0;\n    return true;\n  }\n\n  return true;\n};\n/**\n * Inflate#onData(chunk) -> Void\n * - chunk (Uint8Array|Array|String): output data. Type of array depends\n *   on js engine support. When string output requested, each chunk\n *   will be string.\n *\n * By default, stores data blocks in `chunks[]` property and glue\n * those in `onEnd`. Override this handler, if you need another behaviour.\n **/\n\n\nInflate.prototype.onData = function (chunk) {\n  this.chunks.push(chunk);\n};\n/**\n * Inflate#onEnd(status) -> Void\n * - status (Number): inflate status. 0 (Z_OK) on success,\n *   other if not.\n *\n * Called either after you tell inflate that the input stream is\n * complete (Z_FINISH) or should be flushed (Z_SYNC_FLUSH)\n * or if an error happened. By default - join collected chunks,\n * free memory and fill `results` / `err` properties.\n **/\n\n\nInflate.prototype.onEnd = function (status) {\n  // On success - join\n  if (status === c.Z_OK) {\n    if (this.options.to === 'string') {\n      // Glue & convert here, until we teach pako to send\n      // utf8 aligned strings to onData\n      this.result = this.chunks.join('');\n    } else {\n      this.result = utils.flattenChunks(this.chunks);\n    }\n  }\n\n  this.chunks = [];\n  this.err = status;\n  this.msg = this.strm.msg;\n};\n/**\n * inflate(data[, options]) -> Uint8Array|Array|String\n * - data (Uint8Array|Array|String): input data to decompress.\n * - options (Object): zlib inflate options.\n *\n * Decompress `data` with inflate/ungzip and `options`. Autodetect\n * format via wrapper header by default. That's why we don't provide\n * separate `ungzip` method.\n *\n * Supported options are:\n *\n * - windowBits\n *\n * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced)\n * for more information.\n *\n * Sugar (options):\n *\n * - `raw` (Boolean) - say that we work with raw stream, if you don't wish to specify\n *   negative windowBits implicitly.\n * - `to` (String) - if equal to 'string', then result will be converted\n *   from utf8 to utf16 (javascript) string. When string output requested,\n *   chunk length can differ from `chunkSize`, depending on content.\n *\n *\n * ##### Example:\n *\n * ```javascript\n * var pako = require('pako')\n *   , input = pako.deflate([1,2,3,4,5,6,7,8,9])\n *   , output;\n *\n * try {\n *   output = pako.inflate(input);\n * } catch (err)\n *   console.log(err);\n * }\n * ```\n **/\n\n\nfunction inflate(input, options) {\n  var inflator = new Inflate(options);\n  inflator.push(input, true); // That will never happens, if you don't cheat with options :)\n\n  if (inflator.err) {\n    throw inflator.msg || msg[inflator.err];\n  }\n\n  return inflator.result;\n}\n/**\n * inflateRaw(data[, options]) -> Uint8Array|Array|String\n * - data (Uint8Array|Array|String): input data to decompress.\n * - options (Object): zlib inflate options.\n *\n * The same as [[inflate]], but creates raw data, without wrapper\n * (header and adler32 crc).\n **/\n\n\nfunction inflateRaw(input, options) {\n  options = options || {};\n  options.raw = true;\n  return inflate(input, options);\n}\n/**\n * ungzip(data[, options]) -> Uint8Array|Array|String\n * - data (Uint8Array|Array|String): input data to decompress.\n * - options (Object): zlib inflate options.\n *\n * Just shortcut to [[inflate]], because it autodetects format\n * by header.content. Done for convenience.\n **/\n\n\nexports.Inflate = Inflate;\nexports.inflate = inflate;\nexports.inflateRaw = inflateRaw;\nexports.ungzip = inflate;","'use strict'; // (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nvar utils = require('../utils/common');\n\nvar adler32 = require('./adler32');\n\nvar crc32 = require('./crc32');\n\nvar inflate_fast = require('./inffast');\n\nvar inflate_table = require('./inftrees');\n\nvar CODES = 0;\nvar LENS = 1;\nvar DISTS = 2;\n/* Public constants ==========================================================*/\n\n/* ===========================================================================*/\n\n/* Allowed flush values; see deflate() and inflate() below for details */\n//var Z_NO_FLUSH      = 0;\n//var Z_PARTIAL_FLUSH = 1;\n//var Z_SYNC_FLUSH    = 2;\n//var Z_FULL_FLUSH    = 3;\n\nvar Z_FINISH = 4;\nvar Z_BLOCK = 5;\nvar Z_TREES = 6;\n/* Return codes for the compression/decompression functions. Negative values\n * are errors, positive values are used for special but normal events.\n */\n\nvar Z_OK = 0;\nvar Z_STREAM_END = 1;\nvar Z_NEED_DICT = 2; //var Z_ERRNO         = -1;\n\nvar Z_STREAM_ERROR = -2;\nvar Z_DATA_ERROR = -3;\nvar Z_MEM_ERROR = -4;\nvar Z_BUF_ERROR = -5; //var Z_VERSION_ERROR = -6;\n\n/* The deflate compression method */\n\nvar Z_DEFLATED = 8;\n/* STATES ====================================================================*/\n\n/* ===========================================================================*/\n\nvar HEAD = 1;\n/* i: waiting for magic header */\n\nvar FLAGS = 2;\n/* i: waiting for method and flags (gzip) */\n\nvar TIME = 3;\n/* i: waiting for modification time (gzip) */\n\nvar OS = 4;\n/* i: waiting for extra flags and operating system (gzip) */\n\nvar EXLEN = 5;\n/* i: waiting for extra length (gzip) */\n\nvar EXTRA = 6;\n/* i: waiting for extra bytes (gzip) */\n\nvar NAME = 7;\n/* i: waiting for end of file name (gzip) */\n\nvar COMMENT = 8;\n/* i: waiting for end of comment (gzip) */\n\nvar HCRC = 9;\n/* i: waiting for header crc (gzip) */\n\nvar DICTID = 10;\n/* i: waiting for dictionary check value */\n\nvar DICT = 11;\n/* waiting for inflateSetDictionary() call */\n\nvar TYPE = 12;\n/* i: waiting for type bits, including last-flag bit */\n\nvar TYPEDO = 13;\n/* i: same, but skip check to exit inflate on new block */\n\nvar STORED = 14;\n/* i: waiting for stored size (length and complement) */\n\nvar COPY_ = 15;\n/* i/o: same as COPY below, but only first time in */\n\nvar COPY = 16;\n/* i/o: waiting for input or output to copy stored block */\n\nvar TABLE = 17;\n/* i: waiting for dynamic block table lengths */\n\nvar LENLENS = 18;\n/* i: waiting for code length code lengths */\n\nvar CODELENS = 19;\n/* i: waiting for length/lit and distance code lengths */\n\nvar LEN_ = 20;\n/* i: same as LEN below, but only first time in */\n\nvar LEN = 21;\n/* i: waiting for length/lit/eob code */\n\nvar LENEXT = 22;\n/* i: waiting for length extra bits */\n\nvar DIST = 23;\n/* i: waiting for distance code */\n\nvar DISTEXT = 24;\n/* i: waiting for distance extra bits */\n\nvar MATCH = 25;\n/* o: waiting for output space to copy string */\n\nvar LIT = 26;\n/* o: waiting for output space to write literal */\n\nvar CHECK = 27;\n/* i: waiting for 32-bit check value */\n\nvar LENGTH = 28;\n/* i: waiting for 32-bit length (gzip) */\n\nvar DONE = 29;\n/* finished check, done -- remain here until reset */\n\nvar BAD = 30;\n/* got a data error -- remain here until reset */\n\nvar MEM = 31;\n/* got an inflate() memory error -- remain here until reset */\n\nvar SYNC = 32;\n/* looking for synchronization bytes to restart inflate() */\n\n/* ===========================================================================*/\n\nvar ENOUGH_LENS = 852;\nvar ENOUGH_DISTS = 592; //var ENOUGH =  (ENOUGH_LENS+ENOUGH_DISTS);\n\nvar MAX_WBITS = 15;\n/* 32K LZ77 window */\n\nvar DEF_WBITS = MAX_WBITS;\n\nfunction zswap32(q) {\n  return (q >>> 24 & 0xff) + (q >>> 8 & 0xff00) + ((q & 0xff00) << 8) + ((q & 0xff) << 24);\n}\n\nfunction InflateState() {\n  this.mode = 0;\n  /* current inflate mode */\n\n  this.last = false;\n  /* true if processing last block */\n\n  this.wrap = 0;\n  /* bit 0 true for zlib, bit 1 true for gzip */\n\n  this.havedict = false;\n  /* true if dictionary provided */\n\n  this.flags = 0;\n  /* gzip header method and flags (0 if zlib) */\n\n  this.dmax = 0;\n  /* zlib header max distance (INFLATE_STRICT) */\n\n  this.check = 0;\n  /* protected copy of check value */\n\n  this.total = 0;\n  /* protected copy of output count */\n  // TODO: may be {}\n\n  this.head = null;\n  /* where to save gzip header information */\n\n  /* sliding window */\n\n  this.wbits = 0;\n  /* log base 2 of requested window size */\n\n  this.wsize = 0;\n  /* window size or zero if not using window */\n\n  this.whave = 0;\n  /* valid bytes in the window */\n\n  this.wnext = 0;\n  /* window write index */\n\n  this.window = null;\n  /* allocated sliding window, if needed */\n\n  /* bit accumulator */\n\n  this.hold = 0;\n  /* input bit accumulator */\n\n  this.bits = 0;\n  /* number of bits in \"in\" */\n\n  /* for string and stored block copying */\n\n  this.length = 0;\n  /* literal or length of data to copy */\n\n  this.offset = 0;\n  /* distance back to copy string from */\n\n  /* for table and code decoding */\n\n  this.extra = 0;\n  /* extra bits needed */\n\n  /* fixed and dynamic code tables */\n\n  this.lencode = null;\n  /* starting table for length/literal codes */\n\n  this.distcode = null;\n  /* starting table for distance codes */\n\n  this.lenbits = 0;\n  /* index bits for lencode */\n\n  this.distbits = 0;\n  /* index bits for distcode */\n\n  /* dynamic table building */\n\n  this.ncode = 0;\n  /* number of code length code lengths */\n\n  this.nlen = 0;\n  /* number of length code lengths */\n\n  this.ndist = 0;\n  /* number of distance code lengths */\n\n  this.have = 0;\n  /* number of code lengths in lens[] */\n\n  this.next = null;\n  /* next available space in codes[] */\n\n  this.lens = new utils.Buf16(320);\n  /* temporary storage for code lengths */\n\n  this.work = new utils.Buf16(288);\n  /* work area for code table building */\n\n  /*\n   because we don't have pointers in js, we use lencode and distcode directly\n   as buffers so we don't need codes\n  */\n  //this.codes = new utils.Buf32(ENOUGH);       /* space for code tables */\n\n  this.lendyn = null;\n  /* dynamic table for length/literal codes (JS specific) */\n\n  this.distdyn = null;\n  /* dynamic table for distance codes (JS specific) */\n\n  this.sane = 0;\n  /* if false, allow invalid distance too far */\n\n  this.back = 0;\n  /* bits back of last unprocessed length/lit */\n\n  this.was = 0;\n  /* initial length of match */\n}\n\nfunction inflateResetKeep(strm) {\n  var state;\n\n  if (!strm || !strm.state) {\n    return Z_STREAM_ERROR;\n  }\n\n  state = strm.state;\n  strm.total_in = strm.total_out = state.total = 0;\n  strm.msg = '';\n  /*Z_NULL*/\n\n  if (state.wrap) {\n    /* to support ill-conceived Java test suite */\n    strm.adler = state.wrap & 1;\n  }\n\n  state.mode = HEAD;\n  state.last = 0;\n  state.havedict = 0;\n  state.dmax = 32768;\n  state.head = null\n  /*Z_NULL*/\n  ;\n  state.hold = 0;\n  state.bits = 0; //state.lencode = state.distcode = state.next = state.codes;\n\n  state.lencode = state.lendyn = new utils.Buf32(ENOUGH_LENS);\n  state.distcode = state.distdyn = new utils.Buf32(ENOUGH_DISTS);\n  state.sane = 1;\n  state.back = -1; //Tracev((stderr, \"inflate: reset\\n\"));\n\n  return Z_OK;\n}\n\nfunction inflateReset(strm) {\n  var state;\n\n  if (!strm || !strm.state) {\n    return Z_STREAM_ERROR;\n  }\n\n  state = strm.state;\n  state.wsize = 0;\n  state.whave = 0;\n  state.wnext = 0;\n  return inflateResetKeep(strm);\n}\n\nfunction inflateReset2(strm, windowBits) {\n  var wrap;\n  var state;\n  /* get the state */\n\n  if (!strm || !strm.state) {\n    return Z_STREAM_ERROR;\n  }\n\n  state = strm.state;\n  /* extract wrap request from windowBits parameter */\n\n  if (windowBits < 0) {\n    wrap = 0;\n    windowBits = -windowBits;\n  } else {\n    wrap = (windowBits >> 4) + 1;\n\n    if (windowBits < 48) {\n      windowBits &= 15;\n    }\n  }\n  /* set number of window bits, free window if different */\n\n\n  if (windowBits && (windowBits < 8 || windowBits > 15)) {\n    return Z_STREAM_ERROR;\n  }\n\n  if (state.window !== null && state.wbits !== windowBits) {\n    state.window = null;\n  }\n  /* update state and reset the rest of it */\n\n\n  state.wrap = wrap;\n  state.wbits = windowBits;\n  return inflateReset(strm);\n}\n\nfunction inflateInit2(strm, windowBits) {\n  var ret;\n  var state;\n\n  if (!strm) {\n    return Z_STREAM_ERROR;\n  } //strm.msg = Z_NULL;                 /* in case we return an error */\n\n\n  state = new InflateState(); //if (state === Z_NULL) return Z_MEM_ERROR;\n  //Tracev((stderr, \"inflate: allocated\\n\"));\n\n  strm.state = state;\n  state.window = null\n  /*Z_NULL*/\n  ;\n  ret = inflateReset2(strm, windowBits);\n\n  if (ret !== Z_OK) {\n    strm.state = null\n    /*Z_NULL*/\n    ;\n  }\n\n  return ret;\n}\n\nfunction inflateInit(strm) {\n  return inflateInit2(strm, DEF_WBITS);\n}\n/*\n Return state with length and distance decoding tables and index sizes set to\n fixed code decoding.  Normally this returns fixed tables from inffixed.h.\n If BUILDFIXED is defined, then instead this routine builds the tables the\n first time it's called, and returns those tables the first time and\n thereafter.  This reduces the size of the code by about 2K bytes, in\n exchange for a little execution time.  However, BUILDFIXED should not be\n used for threaded applications, since the rewriting of the tables and virgin\n may not be thread-safe.\n */\n\n\nvar virgin = true;\nvar lenfix, distfix; // We have no pointers in JS, so keep tables separate\n\nfunction fixedtables(state) {\n  /* build fixed huffman tables if first call (may not be thread safe) */\n  if (virgin) {\n    var sym;\n    lenfix = new utils.Buf32(512);\n    distfix = new utils.Buf32(32);\n    /* literal/length table */\n\n    sym = 0;\n\n    while (sym < 144) {\n      state.lens[sym++] = 8;\n    }\n\n    while (sym < 256) {\n      state.lens[sym++] = 9;\n    }\n\n    while (sym < 280) {\n      state.lens[sym++] = 7;\n    }\n\n    while (sym < 288) {\n      state.lens[sym++] = 8;\n    }\n\n    inflate_table(LENS, state.lens, 0, 288, lenfix, 0, state.work, {\n      bits: 9\n    });\n    /* distance table */\n\n    sym = 0;\n\n    while (sym < 32) {\n      state.lens[sym++] = 5;\n    }\n\n    inflate_table(DISTS, state.lens, 0, 32, distfix, 0, state.work, {\n      bits: 5\n    });\n    /* do this just once */\n\n    virgin = false;\n  }\n\n  state.lencode = lenfix;\n  state.lenbits = 9;\n  state.distcode = distfix;\n  state.distbits = 5;\n}\n/*\n Update the window with the last wsize (normally 32K) bytes written before\n returning.  If window does not exist yet, create it.  This is only called\n when a window is already in use, or when output has been written during this\n inflate call, but the end of the deflate stream has not been reached yet.\n It is also called to create a window for dictionary data when a dictionary\n is loaded.\n\n Providing output buffers larger than 32K to inflate() should provide a speed\n advantage, since only the last 32K of output is copied to the sliding window\n upon return from inflate(), and since all distances after the first 32K of\n output will fall in the output data, making match copies simpler and faster.\n The advantage may be dependent on the size of the processor's data caches.\n */\n\n\nfunction updatewindow(strm, src, end, copy) {\n  var dist;\n  var state = strm.state;\n  /* if it hasn't been done already, allocate space for the window */\n\n  if (state.window === null) {\n    state.wsize = 1 << state.wbits;\n    state.wnext = 0;\n    state.whave = 0;\n    state.window = new utils.Buf8(state.wsize);\n  }\n  /* copy state->wsize or less output bytes into the circular window */\n\n\n  if (copy >= state.wsize) {\n    utils.arraySet(state.window, src, end - state.wsize, state.wsize, 0);\n    state.wnext = 0;\n    state.whave = state.wsize;\n  } else {\n    dist = state.wsize - state.wnext;\n\n    if (dist > copy) {\n      dist = copy;\n    } //zmemcpy(state->window + state->wnext, end - copy, dist);\n\n\n    utils.arraySet(state.window, src, end - copy, dist, state.wnext);\n    copy -= dist;\n\n    if (copy) {\n      //zmemcpy(state->window, end - copy, copy);\n      utils.arraySet(state.window, src, end - copy, copy, 0);\n      state.wnext = copy;\n      state.whave = state.wsize;\n    } else {\n      state.wnext += dist;\n\n      if (state.wnext === state.wsize) {\n        state.wnext = 0;\n      }\n\n      if (state.whave < state.wsize) {\n        state.whave += dist;\n      }\n    }\n  }\n\n  return 0;\n}\n\nfunction inflate(strm, flush) {\n  var state;\n  var input, output; // input/output buffers\n\n  var next;\n  /* next input INDEX */\n\n  var put;\n  /* next output INDEX */\n\n  var have, left;\n  /* available input and output */\n\n  var hold;\n  /* bit buffer */\n\n  var bits;\n  /* bits in bit buffer */\n\n  var _in, _out;\n  /* save starting available input and output */\n\n\n  var copy;\n  /* number of stored or match bytes to copy */\n\n  var from;\n  /* where to copy match bytes from */\n\n  var from_source;\n  var here = 0;\n  /* current decoding table entry */\n\n  var here_bits, here_op, here_val; // paked \"here\" denormalized (JS specific)\n  //var last;                   /* parent table entry */\n\n  var last_bits, last_op, last_val; // paked \"last\" denormalized (JS specific)\n\n  var len;\n  /* length to copy for repeats, bits to drop */\n\n  var ret;\n  /* return code */\n\n  var hbuf = new utils.Buf8(4);\n  /* buffer for gzip header crc calculation */\n\n  var opts;\n  var n; // temporary var for NEED_BITS\n\n  var order =\n  /* permutation of code lengths */\n  [16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15];\n\n  if (!strm || !strm.state || !strm.output || !strm.input && strm.avail_in !== 0) {\n    return Z_STREAM_ERROR;\n  }\n\n  state = strm.state;\n\n  if (state.mode === TYPE) {\n    state.mode = TYPEDO;\n  }\n  /* skip check */\n  //--- LOAD() ---\n\n\n  put = strm.next_out;\n  output = strm.output;\n  left = strm.avail_out;\n  next = strm.next_in;\n  input = strm.input;\n  have = strm.avail_in;\n  hold = state.hold;\n  bits = state.bits; //---\n\n  _in = have;\n  _out = left;\n  ret = Z_OK;\n\n  inf_leave: // goto emulation\n  for (;;) {\n    switch (state.mode) {\n      case HEAD:\n        if (state.wrap === 0) {\n          state.mode = TYPEDO;\n          break;\n        } //=== NEEDBITS(16);\n\n\n        while (bits < 16) {\n          if (have === 0) {\n            break inf_leave;\n          }\n\n          have--;\n          hold += input[next++] << bits;\n          bits += 8;\n        } //===//\n\n\n        if (state.wrap & 2 && hold === 0x8b1f) {\n          /* gzip header */\n          state.check = 0\n          /*crc32(0L, Z_NULL, 0)*/\n          ; //=== CRC2(state.check, hold);\n\n          hbuf[0] = hold & 0xff;\n          hbuf[1] = hold >>> 8 & 0xff;\n          state.check = crc32(state.check, hbuf, 2, 0); //===//\n          //=== INITBITS();\n\n          hold = 0;\n          bits = 0; //===//\n\n          state.mode = FLAGS;\n          break;\n        }\n\n        state.flags = 0;\n        /* expect zlib header */\n\n        if (state.head) {\n          state.head.done = false;\n        }\n\n        if (!(state.wrap & 1) ||\n        /* check if zlib header allowed */\n        (((hold & 0xff) <<\n        /*BITS(8)*/\n        8) + (hold >> 8)) % 31) {\n          strm.msg = 'incorrect header check';\n          state.mode = BAD;\n          break;\n        }\n\n        if ((hold & 0x0f) !==\n        /*BITS(4)*/\n        Z_DEFLATED) {\n          strm.msg = 'unknown compression method';\n          state.mode = BAD;\n          break;\n        } //--- DROPBITS(4) ---//\n\n\n        hold >>>= 4;\n        bits -= 4; //---//\n\n        len = (hold & 0x0f) +\n        /*BITS(4)*/\n        8;\n\n        if (state.wbits === 0) {\n          state.wbits = len;\n        } else if (len > state.wbits) {\n          strm.msg = 'invalid window size';\n          state.mode = BAD;\n          break;\n        }\n\n        state.dmax = 1 << len; //Tracev((stderr, \"inflate:   zlib header ok\\n\"));\n\n        strm.adler = state.check = 1\n        /*adler32(0L, Z_NULL, 0)*/\n        ;\n        state.mode = hold & 0x200 ? DICTID : TYPE; //=== INITBITS();\n\n        hold = 0;\n        bits = 0; //===//\n\n        break;\n\n      case FLAGS:\n        //=== NEEDBITS(16); */\n        while (bits < 16) {\n          if (have === 0) {\n            break inf_leave;\n          }\n\n          have--;\n          hold += input[next++] << bits;\n          bits += 8;\n        } //===//\n\n\n        state.flags = hold;\n\n        if ((state.flags & 0xff) !== Z_DEFLATED) {\n          strm.msg = 'unknown compression method';\n          state.mode = BAD;\n          break;\n        }\n\n        if (state.flags & 0xe000) {\n          strm.msg = 'unknown header flags set';\n          state.mode = BAD;\n          break;\n        }\n\n        if (state.head) {\n          state.head.text = hold >> 8 & 1;\n        }\n\n        if (state.flags & 0x0200) {\n          //=== CRC2(state.check, hold);\n          hbuf[0] = hold & 0xff;\n          hbuf[1] = hold >>> 8 & 0xff;\n          state.check = crc32(state.check, hbuf, 2, 0); //===//\n        } //=== INITBITS();\n\n\n        hold = 0;\n        bits = 0; //===//\n\n        state.mode = TIME;\n\n      /* falls through */\n\n      case TIME:\n        //=== NEEDBITS(32); */\n        while (bits < 32) {\n          if (have === 0) {\n            break inf_leave;\n          }\n\n          have--;\n          hold += input[next++] << bits;\n          bits += 8;\n        } //===//\n\n\n        if (state.head) {\n          state.head.time = hold;\n        }\n\n        if (state.flags & 0x0200) {\n          //=== CRC4(state.check, hold)\n          hbuf[0] = hold & 0xff;\n          hbuf[1] = hold >>> 8 & 0xff;\n          hbuf[2] = hold >>> 16 & 0xff;\n          hbuf[3] = hold >>> 24 & 0xff;\n          state.check = crc32(state.check, hbuf, 4, 0); //===\n        } //=== INITBITS();\n\n\n        hold = 0;\n        bits = 0; //===//\n\n        state.mode = OS;\n\n      /* falls through */\n\n      case OS:\n        //=== NEEDBITS(16); */\n        while (bits < 16) {\n          if (have === 0) {\n            break inf_leave;\n          }\n\n          have--;\n          hold += input[next++] << bits;\n          bits += 8;\n        } //===//\n\n\n        if (state.head) {\n          state.head.xflags = hold & 0xff;\n          state.head.os = hold >> 8;\n        }\n\n        if (state.flags & 0x0200) {\n          //=== CRC2(state.check, hold);\n          hbuf[0] = hold & 0xff;\n          hbuf[1] = hold >>> 8 & 0xff;\n          state.check = crc32(state.check, hbuf, 2, 0); //===//\n        } //=== INITBITS();\n\n\n        hold = 0;\n        bits = 0; //===//\n\n        state.mode = EXLEN;\n\n      /* falls through */\n\n      case EXLEN:\n        if (state.flags & 0x0400) {\n          //=== NEEDBITS(16); */\n          while (bits < 16) {\n            if (have === 0) {\n              break inf_leave;\n            }\n\n            have--;\n            hold += input[next++] << bits;\n            bits += 8;\n          } //===//\n\n\n          state.length = hold;\n\n          if (state.head) {\n            state.head.extra_len = hold;\n          }\n\n          if (state.flags & 0x0200) {\n            //=== CRC2(state.check, hold);\n            hbuf[0] = hold & 0xff;\n            hbuf[1] = hold >>> 8 & 0xff;\n            state.check = crc32(state.check, hbuf, 2, 0); //===//\n          } //=== INITBITS();\n\n\n          hold = 0;\n          bits = 0; //===//\n        } else if (state.head) {\n          state.head.extra = null\n          /*Z_NULL*/\n          ;\n        }\n\n        state.mode = EXTRA;\n\n      /* falls through */\n\n      case EXTRA:\n        if (state.flags & 0x0400) {\n          copy = state.length;\n\n          if (copy > have) {\n            copy = have;\n          }\n\n          if (copy) {\n            if (state.head) {\n              len = state.head.extra_len - state.length;\n\n              if (!state.head.extra) {\n                // Use untyped array for more convenient processing later\n                state.head.extra = new Array(state.head.extra_len);\n              }\n\n              utils.arraySet(state.head.extra, input, next, // extra field is limited to 65536 bytes\n              // - no need for additional size check\n              copy,\n              /*len + copy > state.head.extra_max - len ? state.head.extra_max : copy,*/\n              len); //zmemcpy(state.head.extra + len, next,\n              //        len + copy > state.head.extra_max ?\n              //        state.head.extra_max - len : copy);\n            }\n\n            if (state.flags & 0x0200) {\n              state.check = crc32(state.check, input, copy, next);\n            }\n\n            have -= copy;\n            next += copy;\n            state.length -= copy;\n          }\n\n          if (state.length) {\n            break inf_leave;\n          }\n        }\n\n        state.length = 0;\n        state.mode = NAME;\n\n      /* falls through */\n\n      case NAME:\n        if (state.flags & 0x0800) {\n          if (have === 0) {\n            break inf_leave;\n          }\n\n          copy = 0;\n\n          do {\n            // TODO: 2 or 1 bytes?\n            len = input[next + copy++];\n            /* use constant limit because in js we should not preallocate memory */\n\n            if (state.head && len && state.length < 65536\n            /*state.head.name_max*/\n            ) {\n              state.head.name += String.fromCharCode(len);\n            }\n          } while (len && copy < have);\n\n          if (state.flags & 0x0200) {\n            state.check = crc32(state.check, input, copy, next);\n          }\n\n          have -= copy;\n          next += copy;\n\n          if (len) {\n            break inf_leave;\n          }\n        } else if (state.head) {\n          state.head.name = null;\n        }\n\n        state.length = 0;\n        state.mode = COMMENT;\n\n      /* falls through */\n\n      case COMMENT:\n        if (state.flags & 0x1000) {\n          if (have === 0) {\n            break inf_leave;\n          }\n\n          copy = 0;\n\n          do {\n            len = input[next + copy++];\n            /* use constant limit because in js we should not preallocate memory */\n\n            if (state.head && len && state.length < 65536\n            /*state.head.comm_max*/\n            ) {\n              state.head.comment += String.fromCharCode(len);\n            }\n          } while (len && copy < have);\n\n          if (state.flags & 0x0200) {\n            state.check = crc32(state.check, input, copy, next);\n          }\n\n          have -= copy;\n          next += copy;\n\n          if (len) {\n            break inf_leave;\n          }\n        } else if (state.head) {\n          state.head.comment = null;\n        }\n\n        state.mode = HCRC;\n\n      /* falls through */\n\n      case HCRC:\n        if (state.flags & 0x0200) {\n          //=== NEEDBITS(16); */\n          while (bits < 16) {\n            if (have === 0) {\n              break inf_leave;\n            }\n\n            have--;\n            hold += input[next++] << bits;\n            bits += 8;\n          } //===//\n\n\n          if (hold !== (state.check & 0xffff)) {\n            strm.msg = 'header crc mismatch';\n            state.mode = BAD;\n            break;\n          } //=== INITBITS();\n\n\n          hold = 0;\n          bits = 0; //===//\n        }\n\n        if (state.head) {\n          state.head.hcrc = state.flags >> 9 & 1;\n          state.head.done = true;\n        }\n\n        strm.adler = state.check = 0;\n        state.mode = TYPE;\n        break;\n\n      case DICTID:\n        //=== NEEDBITS(32); */\n        while (bits < 32) {\n          if (have === 0) {\n            break inf_leave;\n          }\n\n          have--;\n          hold += input[next++] << bits;\n          bits += 8;\n        } //===//\n\n\n        strm.adler = state.check = zswap32(hold); //=== INITBITS();\n\n        hold = 0;\n        bits = 0; //===//\n\n        state.mode = DICT;\n\n      /* falls through */\n\n      case DICT:\n        if (state.havedict === 0) {\n          //--- RESTORE() ---\n          strm.next_out = put;\n          strm.avail_out = left;\n          strm.next_in = next;\n          strm.avail_in = have;\n          state.hold = hold;\n          state.bits = bits; //---\n\n          return Z_NEED_DICT;\n        }\n\n        strm.adler = state.check = 1\n        /*adler32(0L, Z_NULL, 0)*/\n        ;\n        state.mode = TYPE;\n\n      /* falls through */\n\n      case TYPE:\n        if (flush === Z_BLOCK || flush === Z_TREES) {\n          break inf_leave;\n        }\n\n      /* falls through */\n\n      case TYPEDO:\n        if (state.last) {\n          //--- BYTEBITS() ---//\n          hold >>>= bits & 7;\n          bits -= bits & 7; //---//\n\n          state.mode = CHECK;\n          break;\n        } //=== NEEDBITS(3); */\n\n\n        while (bits < 3) {\n          if (have === 0) {\n            break inf_leave;\n          }\n\n          have--;\n          hold += input[next++] << bits;\n          bits += 8;\n        } //===//\n\n\n        state.last = hold & 0x01\n        /*BITS(1)*/\n        ; //--- DROPBITS(1) ---//\n\n        hold >>>= 1;\n        bits -= 1; //---//\n\n        switch (hold & 0x03) {\n          /*BITS(2)*/\n          case 0:\n            /* stored block */\n            //Tracev((stderr, \"inflate:     stored block%s\\n\",\n            //        state.last ? \" (last)\" : \"\"));\n            state.mode = STORED;\n            break;\n\n          case 1:\n            /* fixed block */\n            fixedtables(state); //Tracev((stderr, \"inflate:     fixed codes block%s\\n\",\n            //        state.last ? \" (last)\" : \"\"));\n\n            state.mode = LEN_;\n            /* decode codes */\n\n            if (flush === Z_TREES) {\n              //--- DROPBITS(2) ---//\n              hold >>>= 2;\n              bits -= 2; //---//\n\n              break inf_leave;\n            }\n\n            break;\n\n          case 2:\n            /* dynamic block */\n            //Tracev((stderr, \"inflate:     dynamic codes block%s\\n\",\n            //        state.last ? \" (last)\" : \"\"));\n            state.mode = TABLE;\n            break;\n\n          case 3:\n            strm.msg = 'invalid block type';\n            state.mode = BAD;\n        } //--- DROPBITS(2) ---//\n\n\n        hold >>>= 2;\n        bits -= 2; //---//\n\n        break;\n\n      case STORED:\n        //--- BYTEBITS() ---// /* go to byte boundary */\n        hold >>>= bits & 7;\n        bits -= bits & 7; //---//\n        //=== NEEDBITS(32); */\n\n        while (bits < 32) {\n          if (have === 0) {\n            break inf_leave;\n          }\n\n          have--;\n          hold += input[next++] << bits;\n          bits += 8;\n        } //===//\n\n\n        if ((hold & 0xffff) !== (hold >>> 16 ^ 0xffff)) {\n          strm.msg = 'invalid stored block lengths';\n          state.mode = BAD;\n          break;\n        }\n\n        state.length = hold & 0xffff; //Tracev((stderr, \"inflate:       stored length %u\\n\",\n        //        state.length));\n        //=== INITBITS();\n\n        hold = 0;\n        bits = 0; //===//\n\n        state.mode = COPY_;\n\n        if (flush === Z_TREES) {\n          break inf_leave;\n        }\n\n      /* falls through */\n\n      case COPY_:\n        state.mode = COPY;\n\n      /* falls through */\n\n      case COPY:\n        copy = state.length;\n\n        if (copy) {\n          if (copy > have) {\n            copy = have;\n          }\n\n          if (copy > left) {\n            copy = left;\n          }\n\n          if (copy === 0) {\n            break inf_leave;\n          } //--- zmemcpy(put, next, copy); ---\n\n\n          utils.arraySet(output, input, next, copy, put); //---//\n\n          have -= copy;\n          next += copy;\n          left -= copy;\n          put += copy;\n          state.length -= copy;\n          break;\n        } //Tracev((stderr, \"inflate:       stored end\\n\"));\n\n\n        state.mode = TYPE;\n        break;\n\n      case TABLE:\n        //=== NEEDBITS(14); */\n        while (bits < 14) {\n          if (have === 0) {\n            break inf_leave;\n          }\n\n          have--;\n          hold += input[next++] << bits;\n          bits += 8;\n        } //===//\n\n\n        state.nlen = (hold & 0x1f) +\n        /*BITS(5)*/\n        257; //--- DROPBITS(5) ---//\n\n        hold >>>= 5;\n        bits -= 5; //---//\n\n        state.ndist = (hold & 0x1f) +\n        /*BITS(5)*/\n        1; //--- DROPBITS(5) ---//\n\n        hold >>>= 5;\n        bits -= 5; //---//\n\n        state.ncode = (hold & 0x0f) +\n        /*BITS(4)*/\n        4; //--- DROPBITS(4) ---//\n\n        hold >>>= 4;\n        bits -= 4; //---//\n        //#ifndef PKZIP_BUG_WORKAROUND\n\n        if (state.nlen > 286 || state.ndist > 30) {\n          strm.msg = 'too many length or distance symbols';\n          state.mode = BAD;\n          break;\n        } //#endif\n        //Tracev((stderr, \"inflate:       table sizes ok\\n\"));\n\n\n        state.have = 0;\n        state.mode = LENLENS;\n\n      /* falls through */\n\n      case LENLENS:\n        while (state.have < state.ncode) {\n          //=== NEEDBITS(3);\n          while (bits < 3) {\n            if (have === 0) {\n              break inf_leave;\n            }\n\n            have--;\n            hold += input[next++] << bits;\n            bits += 8;\n          } //===//\n\n\n          state.lens[order[state.have++]] = hold & 0x07; //BITS(3);\n          //--- DROPBITS(3) ---//\n\n          hold >>>= 3;\n          bits -= 3; //---//\n        }\n\n        while (state.have < 19) {\n          state.lens[order[state.have++]] = 0;\n        } // We have separate tables & no pointers. 2 commented lines below not needed.\n        //state.next = state.codes;\n        //state.lencode = state.next;\n        // Switch to use dynamic table\n\n\n        state.lencode = state.lendyn;\n        state.lenbits = 7;\n        opts = {\n          bits: state.lenbits\n        };\n        ret = inflate_table(CODES, state.lens, 0, 19, state.lencode, 0, state.work, opts);\n        state.lenbits = opts.bits;\n\n        if (ret) {\n          strm.msg = 'invalid code lengths set';\n          state.mode = BAD;\n          break;\n        } //Tracev((stderr, \"inflate:       code lengths ok\\n\"));\n\n\n        state.have = 0;\n        state.mode = CODELENS;\n\n      /* falls through */\n\n      case CODELENS:\n        while (state.have < state.nlen + state.ndist) {\n          for (;;) {\n            here = state.lencode[hold & (1 << state.lenbits) - 1];\n            /*BITS(state.lenbits)*/\n\n            here_bits = here >>> 24;\n            here_op = here >>> 16 & 0xff;\n            here_val = here & 0xffff;\n\n            if (here_bits <= bits) {\n              break;\n            } //--- PULLBYTE() ---//\n\n\n            if (have === 0) {\n              break inf_leave;\n            }\n\n            have--;\n            hold += input[next++] << bits;\n            bits += 8; //---//\n          }\n\n          if (here_val < 16) {\n            //--- DROPBITS(here.bits) ---//\n            hold >>>= here_bits;\n            bits -= here_bits; //---//\n\n            state.lens[state.have++] = here_val;\n          } else {\n            if (here_val === 16) {\n              //=== NEEDBITS(here.bits + 2);\n              n = here_bits + 2;\n\n              while (bits < n) {\n                if (have === 0) {\n                  break inf_leave;\n                }\n\n                have--;\n                hold += input[next++] << bits;\n                bits += 8;\n              } //===//\n              //--- DROPBITS(here.bits) ---//\n\n\n              hold >>>= here_bits;\n              bits -= here_bits; //---//\n\n              if (state.have === 0) {\n                strm.msg = 'invalid bit length repeat';\n                state.mode = BAD;\n                break;\n              }\n\n              len = state.lens[state.have - 1];\n              copy = 3 + (hold & 0x03); //BITS(2);\n              //--- DROPBITS(2) ---//\n\n              hold >>>= 2;\n              bits -= 2; //---//\n            } else if (here_val === 17) {\n              //=== NEEDBITS(here.bits + 3);\n              n = here_bits + 3;\n\n              while (bits < n) {\n                if (have === 0) {\n                  break inf_leave;\n                }\n\n                have--;\n                hold += input[next++] << bits;\n                bits += 8;\n              } //===//\n              //--- DROPBITS(here.bits) ---//\n\n\n              hold >>>= here_bits;\n              bits -= here_bits; //---//\n\n              len = 0;\n              copy = 3 + (hold & 0x07); //BITS(3);\n              //--- DROPBITS(3) ---//\n\n              hold >>>= 3;\n              bits -= 3; //---//\n            } else {\n              //=== NEEDBITS(here.bits + 7);\n              n = here_bits + 7;\n\n              while (bits < n) {\n                if (have === 0) {\n                  break inf_leave;\n                }\n\n                have--;\n                hold += input[next++] << bits;\n                bits += 8;\n              } //===//\n              //--- DROPBITS(here.bits) ---//\n\n\n              hold >>>= here_bits;\n              bits -= here_bits; //---//\n\n              len = 0;\n              copy = 11 + (hold & 0x7f); //BITS(7);\n              //--- DROPBITS(7) ---//\n\n              hold >>>= 7;\n              bits -= 7; //---//\n            }\n\n            if (state.have + copy > state.nlen + state.ndist) {\n              strm.msg = 'invalid bit length repeat';\n              state.mode = BAD;\n              break;\n            }\n\n            while (copy--) {\n              state.lens[state.have++] = len;\n            }\n          }\n        }\n        /* handle error breaks in while */\n\n\n        if (state.mode === BAD) {\n          break;\n        }\n        /* check for end-of-block code (better have one) */\n\n\n        if (state.lens[256] === 0) {\n          strm.msg = 'invalid code -- missing end-of-block';\n          state.mode = BAD;\n          break;\n        }\n        /* build code tables -- note: do not change the lenbits or distbits\n           values here (9 and 6) without reading the comments in inftrees.h\n           concerning the ENOUGH constants, which depend on those values */\n\n\n        state.lenbits = 9;\n        opts = {\n          bits: state.lenbits\n        };\n        ret = inflate_table(LENS, state.lens, 0, state.nlen, state.lencode, 0, state.work, opts); // We have separate tables & no pointers. 2 commented lines below not needed.\n        // state.next_index = opts.table_index;\n\n        state.lenbits = opts.bits; // state.lencode = state.next;\n\n        if (ret) {\n          strm.msg = 'invalid literal/lengths set';\n          state.mode = BAD;\n          break;\n        }\n\n        state.distbits = 6; //state.distcode.copy(state.codes);\n        // Switch to use dynamic table\n\n        state.distcode = state.distdyn;\n        opts = {\n          bits: state.distbits\n        };\n        ret = inflate_table(DISTS, state.lens, state.nlen, state.ndist, state.distcode, 0, state.work, opts); // We have separate tables & no pointers. 2 commented lines below not needed.\n        // state.next_index = opts.table_index;\n\n        state.distbits = opts.bits; // state.distcode = state.next;\n\n        if (ret) {\n          strm.msg = 'invalid distances set';\n          state.mode = BAD;\n          break;\n        } //Tracev((stderr, 'inflate:       codes ok\\n'));\n\n\n        state.mode = LEN_;\n\n        if (flush === Z_TREES) {\n          break inf_leave;\n        }\n\n      /* falls through */\n\n      case LEN_:\n        state.mode = LEN;\n\n      /* falls through */\n\n      case LEN:\n        if (have >= 6 && left >= 258) {\n          //--- RESTORE() ---\n          strm.next_out = put;\n          strm.avail_out = left;\n          strm.next_in = next;\n          strm.avail_in = have;\n          state.hold = hold;\n          state.bits = bits; //---\n\n          inflate_fast(strm, _out); //--- LOAD() ---\n\n          put = strm.next_out;\n          output = strm.output;\n          left = strm.avail_out;\n          next = strm.next_in;\n          input = strm.input;\n          have = strm.avail_in;\n          hold = state.hold;\n          bits = state.bits; //---\n\n          if (state.mode === TYPE) {\n            state.back = -1;\n          }\n\n          break;\n        }\n\n        state.back = 0;\n\n        for (;;) {\n          here = state.lencode[hold & (1 << state.lenbits) - 1];\n          /*BITS(state.lenbits)*/\n\n          here_bits = here >>> 24;\n          here_op = here >>> 16 & 0xff;\n          here_val = here & 0xffff;\n\n          if (here_bits <= bits) {\n            break;\n          } //--- PULLBYTE() ---//\n\n\n          if (have === 0) {\n            break inf_leave;\n          }\n\n          have--;\n          hold += input[next++] << bits;\n          bits += 8; //---//\n        }\n\n        if (here_op && (here_op & 0xf0) === 0) {\n          last_bits = here_bits;\n          last_op = here_op;\n          last_val = here_val;\n\n          for (;;) {\n            here = state.lencode[last_val + ((hold & (1 << last_bits + last_op) - 1) >>\n            /*BITS(last.bits + last.op)*/\n            last_bits)];\n            here_bits = here >>> 24;\n            here_op = here >>> 16 & 0xff;\n            here_val = here & 0xffff;\n\n            if (last_bits + here_bits <= bits) {\n              break;\n            } //--- PULLBYTE() ---//\n\n\n            if (have === 0) {\n              break inf_leave;\n            }\n\n            have--;\n            hold += input[next++] << bits;\n            bits += 8; //---//\n          } //--- DROPBITS(last.bits) ---//\n\n\n          hold >>>= last_bits;\n          bits -= last_bits; //---//\n\n          state.back += last_bits;\n        } //--- DROPBITS(here.bits) ---//\n\n\n        hold >>>= here_bits;\n        bits -= here_bits; //---//\n\n        state.back += here_bits;\n        state.length = here_val;\n\n        if (here_op === 0) {\n          //Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?\n          //        \"inflate:         literal '%c'\\n\" :\n          //        \"inflate:         literal 0x%02x\\n\", here.val));\n          state.mode = LIT;\n          break;\n        }\n\n        if (here_op & 32) {\n          //Tracevv((stderr, \"inflate:         end of block\\n\"));\n          state.back = -1;\n          state.mode = TYPE;\n          break;\n        }\n\n        if (here_op & 64) {\n          strm.msg = 'invalid literal/length code';\n          state.mode = BAD;\n          break;\n        }\n\n        state.extra = here_op & 15;\n        state.mode = LENEXT;\n\n      /* falls through */\n\n      case LENEXT:\n        if (state.extra) {\n          //=== NEEDBITS(state.extra);\n          n = state.extra;\n\n          while (bits < n) {\n            if (have === 0) {\n              break inf_leave;\n            }\n\n            have--;\n            hold += input[next++] << bits;\n            bits += 8;\n          } //===//\n\n\n          state.length += hold & (1 << state.extra) - 1\n          /*BITS(state.extra)*/\n          ; //--- DROPBITS(state.extra) ---//\n\n          hold >>>= state.extra;\n          bits -= state.extra; //---//\n\n          state.back += state.extra;\n        } //Tracevv((stderr, \"inflate:         length %u\\n\", state.length));\n\n\n        state.was = state.length;\n        state.mode = DIST;\n\n      /* falls through */\n\n      case DIST:\n        for (;;) {\n          here = state.distcode[hold & (1 << state.distbits) - 1];\n          /*BITS(state.distbits)*/\n\n          here_bits = here >>> 24;\n          here_op = here >>> 16 & 0xff;\n          here_val = here & 0xffff;\n\n          if (here_bits <= bits) {\n            break;\n          } //--- PULLBYTE() ---//\n\n\n          if (have === 0) {\n            break inf_leave;\n          }\n\n          have--;\n          hold += input[next++] << bits;\n          bits += 8; //---//\n        }\n\n        if ((here_op & 0xf0) === 0) {\n          last_bits = here_bits;\n          last_op = here_op;\n          last_val = here_val;\n\n          for (;;) {\n            here = state.distcode[last_val + ((hold & (1 << last_bits + last_op) - 1) >>\n            /*BITS(last.bits + last.op)*/\n            last_bits)];\n            here_bits = here >>> 24;\n            here_op = here >>> 16 & 0xff;\n            here_val = here & 0xffff;\n\n            if (last_bits + here_bits <= bits) {\n              break;\n            } //--- PULLBYTE() ---//\n\n\n            if (have === 0) {\n              break inf_leave;\n            }\n\n            have--;\n            hold += input[next++] << bits;\n            bits += 8; //---//\n          } //--- DROPBITS(last.bits) ---//\n\n\n          hold >>>= last_bits;\n          bits -= last_bits; //---//\n\n          state.back += last_bits;\n        } //--- DROPBITS(here.bits) ---//\n\n\n        hold >>>= here_bits;\n        bits -= here_bits; //---//\n\n        state.back += here_bits;\n\n        if (here_op & 64) {\n          strm.msg = 'invalid distance code';\n          state.mode = BAD;\n          break;\n        }\n\n        state.offset = here_val;\n        state.extra = here_op & 15;\n        state.mode = DISTEXT;\n\n      /* falls through */\n\n      case DISTEXT:\n        if (state.extra) {\n          //=== NEEDBITS(state.extra);\n          n = state.extra;\n\n          while (bits < n) {\n            if (have === 0) {\n              break inf_leave;\n            }\n\n            have--;\n            hold += input[next++] << bits;\n            bits += 8;\n          } //===//\n\n\n          state.offset += hold & (1 << state.extra) - 1\n          /*BITS(state.extra)*/\n          ; //--- DROPBITS(state.extra) ---//\n\n          hold >>>= state.extra;\n          bits -= state.extra; //---//\n\n          state.back += state.extra;\n        } //#ifdef INFLATE_STRICT\n\n\n        if (state.offset > state.dmax) {\n          strm.msg = 'invalid distance too far back';\n          state.mode = BAD;\n          break;\n        } //#endif\n        //Tracevv((stderr, \"inflate:         distance %u\\n\", state.offset));\n\n\n        state.mode = MATCH;\n\n      /* falls through */\n\n      case MATCH:\n        if (left === 0) {\n          break inf_leave;\n        }\n\n        copy = _out - left;\n\n        if (state.offset > copy) {\n          /* copy from window */\n          copy = state.offset - copy;\n\n          if (copy > state.whave) {\n            if (state.sane) {\n              strm.msg = 'invalid distance too far back';\n              state.mode = BAD;\n              break;\n            } // (!) This block is disabled in zlib defaults,\n            // don't enable it for binary compatibility\n            //#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR\n            //          Trace((stderr, \"inflate.c too far\\n\"));\n            //          copy -= state.whave;\n            //          if (copy > state.length) { copy = state.length; }\n            //          if (copy > left) { copy = left; }\n            //          left -= copy;\n            //          state.length -= copy;\n            //          do {\n            //            output[put++] = 0;\n            //          } while (--copy);\n            //          if (state.length === 0) { state.mode = LEN; }\n            //          break;\n            //#endif\n\n          }\n\n          if (copy > state.wnext) {\n            copy -= state.wnext;\n            from = state.wsize - copy;\n          } else {\n            from = state.wnext - copy;\n          }\n\n          if (copy > state.length) {\n            copy = state.length;\n          }\n\n          from_source = state.window;\n        } else {\n          /* copy from output */\n          from_source = output;\n          from = put - state.offset;\n          copy = state.length;\n        }\n\n        if (copy > left) {\n          copy = left;\n        }\n\n        left -= copy;\n        state.length -= copy;\n\n        do {\n          output[put++] = from_source[from++];\n        } while (--copy);\n\n        if (state.length === 0) {\n          state.mode = LEN;\n        }\n\n        break;\n\n      case LIT:\n        if (left === 0) {\n          break inf_leave;\n        }\n\n        output[put++] = state.length;\n        left--;\n        state.mode = LEN;\n        break;\n\n      case CHECK:\n        if (state.wrap) {\n          //=== NEEDBITS(32);\n          while (bits < 32) {\n            if (have === 0) {\n              break inf_leave;\n            }\n\n            have--; // Use '|' instead of '+' to make sure that result is signed\n\n            hold |= input[next++] << bits;\n            bits += 8;\n          } //===//\n\n\n          _out -= left;\n          strm.total_out += _out;\n          state.total += _out;\n\n          if (_out) {\n            strm.adler = state.check =\n            /*UPDATE(state.check, put - _out, _out);*/\n            state.flags ? crc32(state.check, output, _out, put - _out) : adler32(state.check, output, _out, put - _out);\n          }\n\n          _out = left; // NB: crc32 stored as signed 32-bit int, zswap32 returns signed too\n\n          if ((state.flags ? hold : zswap32(hold)) !== state.check) {\n            strm.msg = 'incorrect data check';\n            state.mode = BAD;\n            break;\n          } //=== INITBITS();\n\n\n          hold = 0;\n          bits = 0; //===//\n          //Tracev((stderr, \"inflate:   check matches trailer\\n\"));\n        }\n\n        state.mode = LENGTH;\n\n      /* falls through */\n\n      case LENGTH:\n        if (state.wrap && state.flags) {\n          //=== NEEDBITS(32);\n          while (bits < 32) {\n            if (have === 0) {\n              break inf_leave;\n            }\n\n            have--;\n            hold += input[next++] << bits;\n            bits += 8;\n          } //===//\n\n\n          if (hold !== (state.total & 0xffffffff)) {\n            strm.msg = 'incorrect length check';\n            state.mode = BAD;\n            break;\n          } //=== INITBITS();\n\n\n          hold = 0;\n          bits = 0; //===//\n          //Tracev((stderr, \"inflate:   length matches trailer\\n\"));\n        }\n\n        state.mode = DONE;\n\n      /* falls through */\n\n      case DONE:\n        ret = Z_STREAM_END;\n        break inf_leave;\n\n      case BAD:\n        ret = Z_DATA_ERROR;\n        break inf_leave;\n\n      case MEM:\n        return Z_MEM_ERROR;\n\n      case SYNC:\n      /* falls through */\n\n      default:\n        return Z_STREAM_ERROR;\n    }\n  } // inf_leave <- here is real place for \"goto inf_leave\", emulated via \"break inf_leave\"\n\n  /*\n     Return from inflate(), updating the total counts and the check value.\n     If there was no progress during the inflate() call, return a buffer\n     error.  Call updatewindow() to create and/or update the window state.\n     Note: a memory error from inflate() is non-recoverable.\n   */\n  //--- RESTORE() ---\n\n\n  strm.next_out = put;\n  strm.avail_out = left;\n  strm.next_in = next;\n  strm.avail_in = have;\n  state.hold = hold;\n  state.bits = bits; //---\n\n  if (state.wsize || _out !== strm.avail_out && state.mode < BAD && (state.mode < CHECK || flush !== Z_FINISH)) {\n    if (updatewindow(strm, strm.output, strm.next_out, _out - strm.avail_out)) {\n      state.mode = MEM;\n      return Z_MEM_ERROR;\n    }\n  }\n\n  _in -= strm.avail_in;\n  _out -= strm.avail_out;\n  strm.total_in += _in;\n  strm.total_out += _out;\n  state.total += _out;\n\n  if (state.wrap && _out) {\n    strm.adler = state.check =\n    /*UPDATE(state.check, strm.next_out - _out, _out);*/\n    state.flags ? crc32(state.check, output, _out, strm.next_out - _out) : adler32(state.check, output, _out, strm.next_out - _out);\n  }\n\n  strm.data_type = state.bits + (state.last ? 64 : 0) + (state.mode === TYPE ? 128 : 0) + (state.mode === LEN_ || state.mode === COPY_ ? 256 : 0);\n\n  if ((_in === 0 && _out === 0 || flush === Z_FINISH) && ret === Z_OK) {\n    ret = Z_BUF_ERROR;\n  }\n\n  return ret;\n}\n\nfunction inflateEnd(strm) {\n  if (!strm || !strm.state\n  /*|| strm->zfree == (free_func)0*/\n  ) {\n      return Z_STREAM_ERROR;\n    }\n\n  var state = strm.state;\n\n  if (state.window) {\n    state.window = null;\n  }\n\n  strm.state = null;\n  return Z_OK;\n}\n\nfunction inflateGetHeader(strm, head) {\n  var state;\n  /* check state */\n\n  if (!strm || !strm.state) {\n    return Z_STREAM_ERROR;\n  }\n\n  state = strm.state;\n\n  if ((state.wrap & 2) === 0) {\n    return Z_STREAM_ERROR;\n  }\n  /* save header structure */\n\n\n  state.head = head;\n  head.done = false;\n  return Z_OK;\n}\n\nfunction inflateSetDictionary(strm, dictionary) {\n  var dictLength = dictionary.length;\n  var state;\n  var dictid;\n  var ret;\n  /* check state */\n\n  if (!strm\n  /* == Z_NULL */\n  || !strm.state\n  /* == Z_NULL */\n  ) {\n      return Z_STREAM_ERROR;\n    }\n\n  state = strm.state;\n\n  if (state.wrap !== 0 && state.mode !== DICT) {\n    return Z_STREAM_ERROR;\n  }\n  /* check for correct dictionary identifier */\n\n\n  if (state.mode === DICT) {\n    dictid = 1;\n    /* adler32(0, null, 0)*/\n\n    /* dictid = adler32(dictid, dictionary, dictLength); */\n\n    dictid = adler32(dictid, dictionary, dictLength, 0);\n\n    if (dictid !== state.check) {\n      return Z_DATA_ERROR;\n    }\n  }\n  /* copy dictionary to window using updatewindow(), which will amend the\n   existing dictionary if appropriate */\n\n\n  ret = updatewindow(strm, dictionary, dictLength, dictLength);\n\n  if (ret) {\n    state.mode = MEM;\n    return Z_MEM_ERROR;\n  }\n\n  state.havedict = 1; // Tracev((stderr, \"inflate:   dictionary set\\n\"));\n\n  return Z_OK;\n}\n\nexports.inflateReset = inflateReset;\nexports.inflateReset2 = inflateReset2;\nexports.inflateResetKeep = inflateResetKeep;\nexports.inflateInit = inflateInit;\nexports.inflateInit2 = inflateInit2;\nexports.inflate = inflate;\nexports.inflateEnd = inflateEnd;\nexports.inflateGetHeader = inflateGetHeader;\nexports.inflateSetDictionary = inflateSetDictionary;\nexports.inflateInfo = 'pako inflate (from Nodeca project)';\n/* Not implemented\nexports.inflateCopy = inflateCopy;\nexports.inflateGetDictionary = inflateGetDictionary;\nexports.inflateMark = inflateMark;\nexports.inflatePrime = inflatePrime;\nexports.inflateSync = inflateSync;\nexports.inflateSyncPoint = inflateSyncPoint;\nexports.inflateUndermine = inflateUndermine;\n*/","'use strict'; // (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n// See state defs from inflate.js\n\nvar BAD = 30;\n/* got a data error -- remain here until reset */\n\nvar TYPE = 12;\n/* i: waiting for type bits, including last-flag bit */\n\n/*\n   Decode literal, length, and distance codes and write out the resulting\n   literal and match bytes until either not enough input or output is\n   available, an end-of-block is encountered, or a data error is encountered.\n   When large enough input and output buffers are supplied to inflate(), for\n   example, a 16K input buffer and a 64K output buffer, more than 95% of the\n   inflate execution time is spent in this routine.\n\n   Entry assumptions:\n\n        state.mode === LEN\n        strm.avail_in >= 6\n        strm.avail_out >= 258\n        start >= strm.avail_out\n        state.bits < 8\n\n   On return, state.mode is one of:\n\n        LEN -- ran out of enough output space or enough available input\n        TYPE -- reached end of block code, inflate() to interpret next block\n        BAD -- error in block data\n\n   Notes:\n\n    - The maximum input bits used by a length/distance pair is 15 bits for the\n      length code, 5 bits for the length extra, 15 bits for the distance code,\n      and 13 bits for the distance extra.  This totals 48 bits, or six bytes.\n      Therefore if strm.avail_in >= 6, then there is enough input to avoid\n      checking for available input while decoding.\n\n    - The maximum bytes that a single length/distance pair can output is 258\n      bytes, which is the maximum length that can be coded.  inflate_fast()\n      requires strm.avail_out >= 258 for each loop to avoid checking for\n      output space.\n */\n\nmodule.exports = function inflate_fast(strm, start) {\n  var state;\n\n  var _in;\n  /* local strm.input */\n\n\n  var last;\n  /* have enough input while in < last */\n\n  var _out;\n  /* local strm.output */\n\n\n  var beg;\n  /* inflate()'s initial strm.output */\n\n  var end;\n  /* while out < end, enough space available */\n  //#ifdef INFLATE_STRICT\n\n  var dmax;\n  /* maximum distance from zlib header */\n  //#endif\n\n  var wsize;\n  /* window size or zero if not using window */\n\n  var whave;\n  /* valid bytes in the window */\n\n  var wnext;\n  /* window write index */\n  // Use `s_window` instead `window`, avoid conflict with instrumentation tools\n\n  var s_window;\n  /* allocated sliding window, if wsize != 0 */\n\n  var hold;\n  /* local strm.hold */\n\n  var bits;\n  /* local strm.bits */\n\n  var lcode;\n  /* local strm.lencode */\n\n  var dcode;\n  /* local strm.distcode */\n\n  var lmask;\n  /* mask for first level of length codes */\n\n  var dmask;\n  /* mask for first level of distance codes */\n\n  var here;\n  /* retrieved table entry */\n\n  var op;\n  /* code bits, operation, extra bits, or */\n\n  /*  window position, window bytes to copy */\n\n  var len;\n  /* match length, unused bytes */\n\n  var dist;\n  /* match distance */\n\n  var from;\n  /* where to copy match from */\n\n  var from_source;\n  var input, output; // JS specific, because we have no pointers\n\n  /* copy state to local variables */\n\n  state = strm.state; //here = state.here;\n\n  _in = strm.next_in;\n  input = strm.input;\n  last = _in + (strm.avail_in - 5);\n  _out = strm.next_out;\n  output = strm.output;\n  beg = _out - (start - strm.avail_out);\n  end = _out + (strm.avail_out - 257); //#ifdef INFLATE_STRICT\n\n  dmax = state.dmax; //#endif\n\n  wsize = state.wsize;\n  whave = state.whave;\n  wnext = state.wnext;\n  s_window = state.window;\n  hold = state.hold;\n  bits = state.bits;\n  lcode = state.lencode;\n  dcode = state.distcode;\n  lmask = (1 << state.lenbits) - 1;\n  dmask = (1 << state.distbits) - 1;\n  /* decode literals and length/distances until end-of-block or not enough\n     input data or output space */\n\n  top: do {\n    if (bits < 15) {\n      hold += input[_in++] << bits;\n      bits += 8;\n      hold += input[_in++] << bits;\n      bits += 8;\n    }\n\n    here = lcode[hold & lmask];\n\n    dolen: for (;;) {\n      // Goto emulation\n      op = here >>> 24\n      /*here.bits*/\n      ;\n      hold >>>= op;\n      bits -= op;\n      op = here >>> 16 & 0xff\n      /*here.op*/\n      ;\n\n      if (op === 0) {\n        /* literal */\n        //Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ?\n        //        \"inflate:         literal '%c'\\n\" :\n        //        \"inflate:         literal 0x%02x\\n\", here.val));\n        output[_out++] = here & 0xffff\n        /*here.val*/\n        ;\n      } else if (op & 16) {\n        /* length base */\n        len = here & 0xffff\n        /*here.val*/\n        ;\n        op &= 15;\n        /* number of extra bits */\n\n        if (op) {\n          if (bits < op) {\n            hold += input[_in++] << bits;\n            bits += 8;\n          }\n\n          len += hold & (1 << op) - 1;\n          hold >>>= op;\n          bits -= op;\n        } //Tracevv((stderr, \"inflate:         length %u\\n\", len));\n\n\n        if (bits < 15) {\n          hold += input[_in++] << bits;\n          bits += 8;\n          hold += input[_in++] << bits;\n          bits += 8;\n        }\n\n        here = dcode[hold & dmask];\n\n        dodist: for (;;) {\n          // goto emulation\n          op = here >>> 24\n          /*here.bits*/\n          ;\n          hold >>>= op;\n          bits -= op;\n          op = here >>> 16 & 0xff\n          /*here.op*/\n          ;\n\n          if (op & 16) {\n            /* distance base */\n            dist = here & 0xffff\n            /*here.val*/\n            ;\n            op &= 15;\n            /* number of extra bits */\n\n            if (bits < op) {\n              hold += input[_in++] << bits;\n              bits += 8;\n\n              if (bits < op) {\n                hold += input[_in++] << bits;\n                bits += 8;\n              }\n            }\n\n            dist += hold & (1 << op) - 1; //#ifdef INFLATE_STRICT\n\n            if (dist > dmax) {\n              strm.msg = 'invalid distance too far back';\n              state.mode = BAD;\n              break top;\n            } //#endif\n\n\n            hold >>>= op;\n            bits -= op; //Tracevv((stderr, \"inflate:         distance %u\\n\", dist));\n\n            op = _out - beg;\n            /* max distance in output */\n\n            if (dist > op) {\n              /* see if copy from window */\n              op = dist - op;\n              /* distance back in window */\n\n              if (op > whave) {\n                if (state.sane) {\n                  strm.msg = 'invalid distance too far back';\n                  state.mode = BAD;\n                  break top;\n                } // (!) This block is disabled in zlib defaults,\n                // don't enable it for binary compatibility\n                //#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR\n                //                if (len <= op - whave) {\n                //                  do {\n                //                    output[_out++] = 0;\n                //                  } while (--len);\n                //                  continue top;\n                //                }\n                //                len -= op - whave;\n                //                do {\n                //                  output[_out++] = 0;\n                //                } while (--op > whave);\n                //                if (op === 0) {\n                //                  from = _out - dist;\n                //                  do {\n                //                    output[_out++] = output[from++];\n                //                  } while (--len);\n                //                  continue top;\n                //                }\n                //#endif\n\n              }\n\n              from = 0; // window index\n\n              from_source = s_window;\n\n              if (wnext === 0) {\n                /* very common case */\n                from += wsize - op;\n\n                if (op < len) {\n                  /* some from window */\n                  len -= op;\n\n                  do {\n                    output[_out++] = s_window[from++];\n                  } while (--op);\n\n                  from = _out - dist;\n                  /* rest from output */\n\n                  from_source = output;\n                }\n              } else if (wnext < op) {\n                /* wrap around window */\n                from += wsize + wnext - op;\n                op -= wnext;\n\n                if (op < len) {\n                  /* some from end of window */\n                  len -= op;\n\n                  do {\n                    output[_out++] = s_window[from++];\n                  } while (--op);\n\n                  from = 0;\n\n                  if (wnext < len) {\n                    /* some from start of window */\n                    op = wnext;\n                    len -= op;\n\n                    do {\n                      output[_out++] = s_window[from++];\n                    } while (--op);\n\n                    from = _out - dist;\n                    /* rest from output */\n\n                    from_source = output;\n                  }\n                }\n              } else {\n                /* contiguous in window */\n                from += wnext - op;\n\n                if (op < len) {\n                  /* some from window */\n                  len -= op;\n\n                  do {\n                    output[_out++] = s_window[from++];\n                  } while (--op);\n\n                  from = _out - dist;\n                  /* rest from output */\n\n                  from_source = output;\n                }\n              }\n\n              while (len > 2) {\n                output[_out++] = from_source[from++];\n                output[_out++] = from_source[from++];\n                output[_out++] = from_source[from++];\n                len -= 3;\n              }\n\n              if (len) {\n                output[_out++] = from_source[from++];\n\n                if (len > 1) {\n                  output[_out++] = from_source[from++];\n                }\n              }\n            } else {\n              from = _out - dist;\n              /* copy direct from output */\n\n              do {\n                /* minimum length is three */\n                output[_out++] = output[from++];\n                output[_out++] = output[from++];\n                output[_out++] = output[from++];\n                len -= 3;\n              } while (len > 2);\n\n              if (len) {\n                output[_out++] = output[from++];\n\n                if (len > 1) {\n                  output[_out++] = output[from++];\n                }\n              }\n            }\n          } else if ((op & 64) === 0) {\n            /* 2nd level distance code */\n            here = dcode[(here & 0xffff) + (\n            /*here.val*/\n            hold & (1 << op) - 1)];\n            continue dodist;\n          } else {\n            strm.msg = 'invalid distance code';\n            state.mode = BAD;\n            break top;\n          }\n\n          break; // need to emulate goto via \"continue\"\n        }\n      } else if ((op & 64) === 0) {\n        /* 2nd level length code */\n        here = lcode[(here & 0xffff) + (\n        /*here.val*/\n        hold & (1 << op) - 1)];\n        continue dolen;\n      } else if (op & 32) {\n        /* end-of-block */\n        //Tracevv((stderr, \"inflate:         end of block\\n\"));\n        state.mode = TYPE;\n        break top;\n      } else {\n        strm.msg = 'invalid literal/length code';\n        state.mode = BAD;\n        break top;\n      }\n\n      break; // need to emulate goto via \"continue\"\n    }\n  } while (_in < last && _out < end);\n  /* return unused bytes (on entry, bits < 8, so in won't go too far back) */\n\n\n  len = bits >> 3;\n  _in -= len;\n  bits -= len << 3;\n  hold &= (1 << bits) - 1;\n  /* update state and return */\n\n  strm.next_in = _in;\n  strm.next_out = _out;\n  strm.avail_in = _in < last ? 5 + (last - _in) : 5 - (_in - last);\n  strm.avail_out = _out < end ? 257 + (end - _out) : 257 - (_out - end);\n  state.hold = hold;\n  state.bits = bits;\n  return;\n};","'use strict'; // (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nvar utils = require('../utils/common');\n\nvar MAXBITS = 15;\nvar ENOUGH_LENS = 852;\nvar ENOUGH_DISTS = 592; //var ENOUGH = (ENOUGH_LENS+ENOUGH_DISTS);\n\nvar CODES = 0;\nvar LENS = 1;\nvar DISTS = 2;\nvar lbase = [\n/* Length codes 257..285 base */\n3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31, 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0];\nvar lext = [\n/* Length codes 257..285 extra */\n16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18, 19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 72, 78];\nvar dbase = [\n/* Distance codes 0..29 base */\n1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145, 8193, 12289, 16385, 24577, 0, 0];\nvar dext = [\n/* Distance codes 0..29 extra */\n16, 16, 16, 16, 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22, 23, 23, 24, 24, 25, 25, 26, 26, 27, 27, 28, 28, 29, 29, 64, 64];\n\nmodule.exports = function inflate_table(type, lens, lens_index, codes, table, table_index, work, opts) {\n  var bits = opts.bits; //here = opts.here; /* table entry for duplication */\n\n  var len = 0;\n  /* a code's length in bits */\n\n  var sym = 0;\n  /* index of code symbols */\n\n  var min = 0,\n      max = 0;\n  /* minimum and maximum code lengths */\n\n  var root = 0;\n  /* number of index bits for root table */\n\n  var curr = 0;\n  /* number of index bits for current table */\n\n  var drop = 0;\n  /* code bits to drop for sub-table */\n\n  var left = 0;\n  /* number of prefix codes available */\n\n  var used = 0;\n  /* code entries in table used */\n\n  var huff = 0;\n  /* Huffman code */\n\n  var incr;\n  /* for incrementing code, index */\n\n  var fill;\n  /* index for replicating entries */\n\n  var low;\n  /* low bits for current root entry */\n\n  var mask;\n  /* mask for low root bits */\n\n  var next;\n  /* next available space in table */\n\n  var base = null;\n  /* base value table to use */\n\n  var base_index = 0; //  var shoextra;    /* extra bits table to use */\n\n  var end;\n  /* use base and extra for symbol > end */\n\n  var count = new utils.Buf16(MAXBITS + 1); //[MAXBITS+1];    /* number of codes of each length */\n\n  var offs = new utils.Buf16(MAXBITS + 1); //[MAXBITS+1];     /* offsets in table for each length */\n\n  var extra = null;\n  var extra_index = 0;\n  var here_bits, here_op, here_val;\n  /*\n   Process a set of code lengths to create a canonical Huffman code.  The\n   code lengths are lens[0..codes-1].  Each length corresponds to the\n   symbols 0..codes-1.  The Huffman code is generated by first sorting the\n   symbols by length from short to long, and retaining the symbol order\n   for codes with equal lengths.  Then the code starts with all zero bits\n   for the first code of the shortest length, and the codes are integer\n   increments for the same length, and zeros are appended as the length\n   increases.  For the deflate format, these bits are stored backwards\n   from their more natural integer increment ordering, and so when the\n   decoding tables are built in the large loop below, the integer codes\n   are incremented backwards.\n    This routine assumes, but does not check, that all of the entries in\n   lens[] are in the range 0..MAXBITS.  The caller must assure this.\n   1..MAXBITS is interpreted as that code length.  zero means that that\n   symbol does not occur in this code.\n    The codes are sorted by computing a count of codes for each length,\n   creating from that a table of starting indices for each length in the\n   sorted table, and then entering the symbols in order in the sorted\n   table.  The sorted table is work[], with that space being provided by\n   the caller.\n    The length counts are used for other purposes as well, i.e. finding\n   the minimum and maximum length codes, determining if there are any\n   codes at all, checking for a valid set of lengths, and looking ahead\n   at length counts to determine sub-table sizes when building the\n   decoding tables.\n   */\n\n  /* accumulate lengths for codes (assumes lens[] all in 0..MAXBITS) */\n\n  for (len = 0; len <= MAXBITS; len++) {\n    count[len] = 0;\n  }\n\n  for (sym = 0; sym < codes; sym++) {\n    count[lens[lens_index + sym]]++;\n  }\n  /* bound code lengths, force root to be within code lengths */\n\n\n  root = bits;\n\n  for (max = MAXBITS; max >= 1; max--) {\n    if (count[max] !== 0) {\n      break;\n    }\n  }\n\n  if (root > max) {\n    root = max;\n  }\n\n  if (max === 0) {\n    /* no symbols to code at all */\n    //table.op[opts.table_index] = 64;  //here.op = (var char)64;    /* invalid code marker */\n    //table.bits[opts.table_index] = 1;   //here.bits = (var char)1;\n    //table.val[opts.table_index++] = 0;   //here.val = (var short)0;\n    table[table_index++] = 1 << 24 | 64 << 16 | 0; //table.op[opts.table_index] = 64;\n    //table.bits[opts.table_index] = 1;\n    //table.val[opts.table_index++] = 0;\n\n    table[table_index++] = 1 << 24 | 64 << 16 | 0;\n    opts.bits = 1;\n    return 0;\n    /* no symbols, but wait for decoding to report error */\n  }\n\n  for (min = 1; min < max; min++) {\n    if (count[min] !== 0) {\n      break;\n    }\n  }\n\n  if (root < min) {\n    root = min;\n  }\n  /* check for an over-subscribed or incomplete set of lengths */\n\n\n  left = 1;\n\n  for (len = 1; len <= MAXBITS; len++) {\n    left <<= 1;\n    left -= count[len];\n\n    if (left < 0) {\n      return -1;\n    }\n    /* over-subscribed */\n\n  }\n\n  if (left > 0 && (type === CODES || max !== 1)) {\n    return -1;\n    /* incomplete set */\n  }\n  /* generate offsets into symbol table for each length for sorting */\n\n\n  offs[1] = 0;\n\n  for (len = 1; len < MAXBITS; len++) {\n    offs[len + 1] = offs[len] + count[len];\n  }\n  /* sort symbols by length, by symbol order within each length */\n\n\n  for (sym = 0; sym < codes; sym++) {\n    if (lens[lens_index + sym] !== 0) {\n      work[offs[lens[lens_index + sym]]++] = sym;\n    }\n  }\n  /*\n   Create and fill in decoding tables.  In this loop, the table being\n   filled is at next and has curr index bits.  The code being used is huff\n   with length len.  That code is converted to an index by dropping drop\n   bits off of the bottom.  For codes where len is less than drop + curr,\n   those top drop + curr - len bits are incremented through all values to\n   fill the table with replicated entries.\n    root is the number of index bits for the root table.  When len exceeds\n   root, sub-tables are created pointed to by the root entry with an index\n   of the low root bits of huff.  This is saved in low to check for when a\n   new sub-table should be started.  drop is zero when the root table is\n   being filled, and drop is root when sub-tables are being filled.\n    When a new sub-table is needed, it is necessary to look ahead in the\n   code lengths to determine what size sub-table is needed.  The length\n   counts are used for this, and so count[] is decremented as codes are\n   entered in the tables.\n    used keeps track of how many table entries have been allocated from the\n   provided *table space.  It is checked for LENS and DIST tables against\n   the constants ENOUGH_LENS and ENOUGH_DISTS to guard against changes in\n   the initial root table size constants.  See the comments in inftrees.h\n   for more information.\n    sym increments through all symbols, and the loop terminates when\n   all codes of length max, i.e. all codes, have been processed.  This\n   routine permits incomplete codes, so another loop after this one fills\n   in the rest of the decoding tables with invalid code markers.\n   */\n\n  /* set up for code type */\n  // poor man optimization - use if-else instead of switch,\n  // to avoid deopts in old v8\n\n\n  if (type === CODES) {\n    base = extra = work;\n    /* dummy value--not used */\n\n    end = 19;\n  } else if (type === LENS) {\n    base = lbase;\n    base_index -= 257;\n    extra = lext;\n    extra_index -= 257;\n    end = 256;\n  } else {\n    /* DISTS */\n    base = dbase;\n    extra = dext;\n    end = -1;\n  }\n  /* initialize opts for loop */\n\n\n  huff = 0;\n  /* starting code */\n\n  sym = 0;\n  /* starting code symbol */\n\n  len = min;\n  /* starting code length */\n\n  next = table_index;\n  /* current table to fill in */\n\n  curr = root;\n  /* current table index bits */\n\n  drop = 0;\n  /* current bits to drop from code for index */\n\n  low = -1;\n  /* trigger new sub-table when len > root */\n\n  used = 1 << root;\n  /* use root table entries */\n\n  mask = used - 1;\n  /* mask for comparing low */\n\n  /* check available table space */\n\n  if (type === LENS && used > ENOUGH_LENS || type === DISTS && used > ENOUGH_DISTS) {\n    return 1;\n  }\n  /* process all codes and make table entries */\n\n\n  for (;;) {\n    /* create table entry */\n    here_bits = len - drop;\n\n    if (work[sym] < end) {\n      here_op = 0;\n      here_val = work[sym];\n    } else if (work[sym] > end) {\n      here_op = extra[extra_index + work[sym]];\n      here_val = base[base_index + work[sym]];\n    } else {\n      here_op = 32 + 64;\n      /* end of block */\n\n      here_val = 0;\n    }\n    /* replicate for those indices with low len bits equal to huff */\n\n\n    incr = 1 << len - drop;\n    fill = 1 << curr;\n    min = fill;\n    /* save offset to next table */\n\n    do {\n      fill -= incr;\n      table[next + (huff >> drop) + fill] = here_bits << 24 | here_op << 16 | here_val | 0;\n    } while (fill !== 0);\n    /* backwards increment the len-bit code huff */\n\n\n    incr = 1 << len - 1;\n\n    while (huff & incr) {\n      incr >>= 1;\n    }\n\n    if (incr !== 0) {\n      huff &= incr - 1;\n      huff += incr;\n    } else {\n      huff = 0;\n    }\n    /* go to next symbol, update count, len */\n\n\n    sym++;\n\n    if (--count[len] === 0) {\n      if (len === max) {\n        break;\n      }\n\n      len = lens[lens_index + work[sym]];\n    }\n    /* create new sub-table if needed */\n\n\n    if (len > root && (huff & mask) !== low) {\n      /* if first time, transition to sub-tables */\n      if (drop === 0) {\n        drop = root;\n      }\n      /* increment past last table */\n\n\n      next += min;\n      /* here min is 1 << curr */\n\n      /* determine length of next table */\n\n      curr = len - drop;\n      left = 1 << curr;\n\n      while (curr + drop < max) {\n        left -= count[curr + drop];\n\n        if (left <= 0) {\n          break;\n        }\n\n        curr++;\n        left <<= 1;\n      }\n      /* check for enough space */\n\n\n      used += 1 << curr;\n\n      if (type === LENS && used > ENOUGH_LENS || type === DISTS && used > ENOUGH_DISTS) {\n        return 1;\n      }\n      /* point entry in root table to sub-table */\n\n\n      low = huff & mask;\n      /*table.op[low] = curr;\n      table.bits[low] = root;\n      table.val[low] = next - opts.table_index;*/\n\n      table[low] = root << 24 | curr << 16 | next - table_index | 0;\n    }\n  }\n  /* fill in remaining table entry if code is incomplete (guaranteed to have\n   at most one remaining entry, since if the code is incomplete, the\n   maximum code length that was allowed to get this far is one bit) */\n\n\n  if (huff !== 0) {\n    //table.op[next + huff] = 64;            /* invalid code marker */\n    //table.bits[next + huff] = len - drop;\n    //table.val[next + huff] = 0;\n    table[next + huff] = len - drop << 24 | 64 << 16 | 0;\n  }\n  /* set return parameters */\n  //opts.table_index += used;\n\n\n  opts.bits = root;\n  return 0;\n};","'use strict'; // (C) 1995-2013 Jean-loup Gailly and Mark Adler\n// (C) 2014-2017 Vitaly Puzrin and Andrey Tupitsin\n//\n// This software is provided 'as-is', without any express or implied\n// warranty. In no event will the authors be held liable for any damages\n// arising from the use of this software.\n//\n// Permission is granted to anyone to use this software for any purpose,\n// including commercial applications, and to alter it and redistribute it\n// freely, subject to the following restrictions:\n//\n// 1. The origin of this software must not be misrepresented; you must not\n//   claim that you wrote the original software. If you use this software\n//   in a product, an acknowledgment in the product documentation would be\n//   appreciated but is not required.\n// 2. Altered source versions must be plainly marked as such, and must not be\n//   misrepresented as being the original software.\n// 3. This notice may not be removed or altered from any source distribution.\n\nfunction GZheader() {\n  /* true if compressed data believed to be text */\n  this.text = 0;\n  /* modification time */\n\n  this.time = 0;\n  /* extra flags (not used when writing a gzip file) */\n\n  this.xflags = 0;\n  /* operating system */\n\n  this.os = 0;\n  /* pointer to extra field or Z_NULL if none */\n\n  this.extra = null;\n  /* extra field length (valid if extra != Z_NULL) */\n\n  this.extra_len = 0; // Actually, we don't need it in JS,\n  // but leave for few code modifications\n  //\n  // Setup limits is not necessary because in js we should not preallocate memory\n  // for inflate use constant limit in 65536 bytes\n  //\n\n  /* space at extra (only when reading header) */\n  // this.extra_max  = 0;\n\n  /* pointer to zero-terminated file name or Z_NULL */\n\n  this.name = '';\n  /* space at name (only when reading header) */\n  // this.name_max   = 0;\n\n  /* pointer to zero-terminated comment or Z_NULL */\n\n  this.comment = '';\n  /* space at comment (only when reading header) */\n  // this.comm_max   = 0;\n\n  /* true if there was or will be a header crc */\n\n  this.hcrc = 0;\n  /* true when done reading gzip header (not used when writing a gzip file) */\n\n  this.done = false;\n}\n\nmodule.exports = GZheader;","'use strict';\n\nvar utils = require('../utils');\n\nvar GenericWorker = require('../stream/GenericWorker');\n\nvar utf8 = require('../utf8');\n\nvar crc32 = require('../crc32');\n\nvar signature = require('../signature');\n/**\n * Transform an integer into a string in hexadecimal.\n * @private\n * @param {number} dec the number to convert.\n * @param {number} bytes the number of bytes to generate.\n * @returns {string} the result.\n */\n\n\nvar decToHex = function decToHex(dec, bytes) {\n  var hex = \"\",\n      i;\n\n  for (i = 0; i < bytes; i++) {\n    hex += String.fromCharCode(dec & 0xff);\n    dec = dec >>> 8;\n  }\n\n  return hex;\n};\n/**\n * Generate the UNIX part of the external file attributes.\n * @param {Object} unixPermissions the unix permissions or null.\n * @param {Boolean} isDir true if the entry is a directory, false otherwise.\n * @return {Number} a 32 bit integer.\n *\n * adapted from http://unix.stackexchange.com/questions/14705/the-zip-formats-external-file-attribute :\n *\n * TTTTsstrwxrwxrwx0000000000ADVSHR\n * ^^^^____________________________ file type, see zipinfo.c (UNX_*)\n *     ^^^_________________________ setuid, setgid, sticky\n *        ^^^^^^^^^________________ permissions\n *                 ^^^^^^^^^^______ not used ?\n *                           ^^^^^^ DOS attribute bits : Archive, Directory, Volume label, System file, Hidden, Read only\n */\n\n\nvar generateUnixExternalFileAttr = function generateUnixExternalFileAttr(unixPermissions, isDir) {\n  var result = unixPermissions;\n\n  if (!unixPermissions) {\n    // I can't use octal values in strict mode, hence the hexa.\n    //  040775 => 0x41fd\n    // 0100664 => 0x81b4\n    result = isDir ? 0x41fd : 0x81b4;\n  }\n\n  return (result & 0xFFFF) << 16;\n};\n/**\n * Generate the DOS part of the external file attributes.\n * @param {Object} dosPermissions the dos permissions or null.\n * @param {Boolean} isDir true if the entry is a directory, false otherwise.\n * @return {Number} a 32 bit integer.\n *\n * Bit 0     Read-Only\n * Bit 1     Hidden\n * Bit 2     System\n * Bit 3     Volume Label\n * Bit 4     Directory\n * Bit 5     Archive\n */\n\n\nvar generateDosExternalFileAttr = function generateDosExternalFileAttr(dosPermissions, isDir) {\n  // the dir flag is already set for compatibility\n  return (dosPermissions || 0) & 0x3F;\n};\n/**\n * Generate the various parts used in the construction of the final zip file.\n * @param {Object} streamInfo the hash with informations about the compressed file.\n * @param {Boolean} streamedContent is the content streamed ?\n * @param {Boolean} streamingEnded is the stream finished ?\n * @param {number} offset the current offset from the start of the zip file.\n * @param {String} platform let's pretend we are this platform (change platform dependents fields)\n * @param {Function} encodeFileName the function to encode the file name / comment.\n * @return {Object} the zip parts.\n */\n\n\nvar generateZipParts = function generateZipParts(streamInfo, streamedContent, streamingEnded, offset, platform, encodeFileName) {\n  var file = streamInfo['file'],\n      compression = streamInfo['compression'],\n      useCustomEncoding = encodeFileName !== utf8.utf8encode,\n      encodedFileName = utils.transformTo(\"string\", encodeFileName(file.name)),\n      utfEncodedFileName = utils.transformTo(\"string\", utf8.utf8encode(file.name)),\n      comment = file.comment,\n      encodedComment = utils.transformTo(\"string\", encodeFileName(comment)),\n      utfEncodedComment = utils.transformTo(\"string\", utf8.utf8encode(comment)),\n      useUTF8ForFileName = utfEncodedFileName.length !== file.name.length,\n      useUTF8ForComment = utfEncodedComment.length !== comment.length,\n      dosTime,\n      dosDate,\n      extraFields = \"\",\n      unicodePathExtraField = \"\",\n      unicodeCommentExtraField = \"\",\n      dir = file.dir,\n      date = file.date;\n  var dataInfo = {\n    crc32: 0,\n    compressedSize: 0,\n    uncompressedSize: 0\n  }; // if the content is streamed, the sizes/crc32 are only available AFTER\n  // the end of the stream.\n\n  if (!streamedContent || streamingEnded) {\n    dataInfo.crc32 = streamInfo['crc32'];\n    dataInfo.compressedSize = streamInfo['compressedSize'];\n    dataInfo.uncompressedSize = streamInfo['uncompressedSize'];\n  }\n\n  var bitflag = 0;\n\n  if (streamedContent) {\n    // Bit 3: the sizes/crc32 are set to zero in the local header.\n    // The correct values are put in the data descriptor immediately\n    // following the compressed data.\n    bitflag |= 0x0008;\n  }\n\n  if (!useCustomEncoding && (useUTF8ForFileName || useUTF8ForComment)) {\n    // Bit 11: Language encoding flag (EFS).\n    bitflag |= 0x0800;\n  }\n\n  var extFileAttr = 0;\n  var versionMadeBy = 0;\n\n  if (dir) {\n    // dos or unix, we set the dos dir flag\n    extFileAttr |= 0x00010;\n  }\n\n  if (platform === \"UNIX\") {\n    versionMadeBy = 0x031E; // UNIX, version 3.0\n\n    extFileAttr |= generateUnixExternalFileAttr(file.unixPermissions, dir);\n  } else {\n    // DOS or other, fallback to DOS\n    versionMadeBy = 0x0014; // DOS, version 2.0\n\n    extFileAttr |= generateDosExternalFileAttr(file.dosPermissions, dir);\n  } // date\n  // @see http://www.delorie.com/djgpp/doc/rbinter/it/52/13.html\n  // @see http://www.delorie.com/djgpp/doc/rbinter/it/65/16.html\n  // @see http://www.delorie.com/djgpp/doc/rbinter/it/66/16.html\n\n\n  dosTime = date.getUTCHours();\n  dosTime = dosTime << 6;\n  dosTime = dosTime | date.getUTCMinutes();\n  dosTime = dosTime << 5;\n  dosTime = dosTime | date.getUTCSeconds() / 2;\n  dosDate = date.getUTCFullYear() - 1980;\n  dosDate = dosDate << 4;\n  dosDate = dosDate | date.getUTCMonth() + 1;\n  dosDate = dosDate << 5;\n  dosDate = dosDate | date.getUTCDate();\n\n  if (useUTF8ForFileName) {\n    // set the unicode path extra field. unzip needs at least one extra\n    // field to correctly handle unicode path, so using the path is as good\n    // as any other information. This could improve the situation with\n    // other archive managers too.\n    // This field is usually used without the utf8 flag, with a non\n    // unicode path in the header (winrar, winzip). This helps (a bit)\n    // with the messy Windows' default compressed folders feature but\n    // breaks on p7zip which doesn't seek the unicode path extra field.\n    // So for now, UTF-8 everywhere !\n    unicodePathExtraField = // Version\n    decToHex(1, 1) + // NameCRC32\n    decToHex(crc32(encodedFileName), 4) + // UnicodeName\n    utfEncodedFileName;\n    extraFields += // Info-ZIP Unicode Path Extra Field\n    \"\\x75\\x70\" + // size\n    decToHex(unicodePathExtraField.length, 2) + // content\n    unicodePathExtraField;\n  }\n\n  if (useUTF8ForComment) {\n    unicodeCommentExtraField = // Version\n    decToHex(1, 1) + // CommentCRC32\n    decToHex(crc32(encodedComment), 4) + // UnicodeName\n    utfEncodedComment;\n    extraFields += // Info-ZIP Unicode Path Extra Field\n    \"\\x75\\x63\" + // size\n    decToHex(unicodeCommentExtraField.length, 2) + // content\n    unicodeCommentExtraField;\n  }\n\n  var header = \"\"; // version needed to extract\n\n  header += \"\\x0A\\x00\"; // general purpose bit flag\n\n  header += decToHex(bitflag, 2); // compression method\n\n  header += compression.magic; // last mod file time\n\n  header += decToHex(dosTime, 2); // last mod file date\n\n  header += decToHex(dosDate, 2); // crc-32\n\n  header += decToHex(dataInfo.crc32, 4); // compressed size\n\n  header += decToHex(dataInfo.compressedSize, 4); // uncompressed size\n\n  header += decToHex(dataInfo.uncompressedSize, 4); // file name length\n\n  header += decToHex(encodedFileName.length, 2); // extra field length\n\n  header += decToHex(extraFields.length, 2);\n  var fileRecord = signature.LOCAL_FILE_HEADER + header + encodedFileName + extraFields;\n  var dirRecord = signature.CENTRAL_FILE_HEADER + // version made by (00: DOS)\n  decToHex(versionMadeBy, 2) + // file header (common to file and central directory)\n  header + // file comment length\n  decToHex(encodedComment.length, 2) + // disk number start\n  \"\\x00\\x00\" + // internal file attributes TODO\n  \"\\x00\\x00\" + // external file attributes\n  decToHex(extFileAttr, 4) + // relative offset of local header\n  decToHex(offset, 4) + // file name\n  encodedFileName + // extra field\n  extraFields + // file comment\n  encodedComment;\n  return {\n    fileRecord: fileRecord,\n    dirRecord: dirRecord\n  };\n};\n/**\n * Generate the EOCD record.\n * @param {Number} entriesCount the number of entries in the zip file.\n * @param {Number} centralDirLength the length (in bytes) of the central dir.\n * @param {Number} localDirLength the length (in bytes) of the local dir.\n * @param {String} comment the zip file comment as a binary string.\n * @param {Function} encodeFileName the function to encode the comment.\n * @return {String} the EOCD record.\n */\n\n\nvar generateCentralDirectoryEnd = function generateCentralDirectoryEnd(entriesCount, centralDirLength, localDirLength, comment, encodeFileName) {\n  var dirEnd = \"\";\n  var encodedComment = utils.transformTo(\"string\", encodeFileName(comment)); // end of central dir signature\n\n  dirEnd = signature.CENTRAL_DIRECTORY_END + // number of this disk\n  \"\\x00\\x00\" + // number of the disk with the start of the central directory\n  \"\\x00\\x00\" + // total number of entries in the central directory on this disk\n  decToHex(entriesCount, 2) + // total number of entries in the central directory\n  decToHex(entriesCount, 2) + // size of the central directory   4 bytes\n  decToHex(centralDirLength, 4) + // offset of start of central directory with respect to the starting disk number\n  decToHex(localDirLength, 4) + // .ZIP file comment length\n  decToHex(encodedComment.length, 2) + // .ZIP file comment\n  encodedComment;\n  return dirEnd;\n};\n/**\n * Generate data descriptors for a file entry.\n * @param {Object} streamInfo the hash generated by a worker, containing informations\n * on the file entry.\n * @return {String} the data descriptors.\n */\n\n\nvar generateDataDescriptors = function generateDataDescriptors(streamInfo) {\n  var descriptor = \"\";\n  descriptor = signature.DATA_DESCRIPTOR + // crc-32                          4 bytes\n  decToHex(streamInfo['crc32'], 4) + // compressed size                 4 bytes\n  decToHex(streamInfo['compressedSize'], 4) + // uncompressed size               4 bytes\n  decToHex(streamInfo['uncompressedSize'], 4);\n  return descriptor;\n};\n/**\n * A worker to concatenate other workers to create a zip file.\n * @param {Boolean} streamFiles `true` to stream the content of the files,\n * `false` to accumulate it.\n * @param {String} comment the comment to use.\n * @param {String} platform the platform to use, \"UNIX\" or \"DOS\".\n * @param {Function} encodeFileName the function to encode file names and comments.\n */\n\n\nfunction ZipFileWorker(streamFiles, comment, platform, encodeFileName) {\n  GenericWorker.call(this, \"ZipFileWorker\"); // The number of bytes written so far. This doesn't count accumulated chunks.\n\n  this.bytesWritten = 0; // The comment of the zip file\n\n  this.zipComment = comment; // The platform \"generating\" the zip file.\n\n  this.zipPlatform = platform; // the function to encode file names and comments.\n\n  this.encodeFileName = encodeFileName; // Should we stream the content of the files ?\n\n  this.streamFiles = streamFiles; // If `streamFiles` is false, we will need to accumulate the content of the\n  // files to calculate sizes / crc32 (and write them *before* the content).\n  // This boolean indicates if we are accumulating chunks (it will change a lot\n  // during the lifetime of this worker).\n\n  this.accumulate = false; // The buffer receiving chunks when accumulating content.\n\n  this.contentBuffer = []; // The list of generated directory records.\n\n  this.dirRecords = []; // The offset (in bytes) from the beginning of the zip file for the current source.\n\n  this.currentSourceOffset = 0; // The total number of entries in this zip file.\n\n  this.entriesCount = 0; // the name of the file currently being added, null when handling the end of the zip file.\n  // Used for the emited metadata.\n\n  this.currentFile = null;\n  this._sources = [];\n}\n\nutils.inherits(ZipFileWorker, GenericWorker);\n/**\n * @see GenericWorker.push\n */\n\nZipFileWorker.prototype.push = function (chunk) {\n  var currentFilePercent = chunk.meta.percent || 0;\n  var entriesCount = this.entriesCount;\n  var remainingFiles = this._sources.length;\n\n  if (this.accumulate) {\n    this.contentBuffer.push(chunk);\n  } else {\n    this.bytesWritten += chunk.data.length;\n    GenericWorker.prototype.push.call(this, {\n      data: chunk.data,\n      meta: {\n        currentFile: this.currentFile,\n        percent: entriesCount ? (currentFilePercent + 100 * (entriesCount - remainingFiles - 1)) / entriesCount : 100\n      }\n    });\n  }\n};\n/**\n * The worker started a new source (an other worker).\n * @param {Object} streamInfo the streamInfo object from the new source.\n */\n\n\nZipFileWorker.prototype.openedSource = function (streamInfo) {\n  this.currentSourceOffset = this.bytesWritten;\n  this.currentFile = streamInfo['file'].name;\n  var streamedContent = this.streamFiles && !streamInfo['file'].dir; // don't stream folders (because they don't have any content)\n\n  if (streamedContent) {\n    var record = generateZipParts(streamInfo, streamedContent, false, this.currentSourceOffset, this.zipPlatform, this.encodeFileName);\n    this.push({\n      data: record.fileRecord,\n      meta: {\n        percent: 0\n      }\n    });\n  } else {\n    // we need to wait for the whole file before pushing anything\n    this.accumulate = true;\n  }\n};\n/**\n * The worker finished a source (an other worker).\n * @param {Object} streamInfo the streamInfo object from the finished source.\n */\n\n\nZipFileWorker.prototype.closedSource = function (streamInfo) {\n  this.accumulate = false;\n  var streamedContent = this.streamFiles && !streamInfo['file'].dir;\n  var record = generateZipParts(streamInfo, streamedContent, true, this.currentSourceOffset, this.zipPlatform, this.encodeFileName);\n  this.dirRecords.push(record.dirRecord);\n\n  if (streamedContent) {\n    // after the streamed file, we put data descriptors\n    this.push({\n      data: generateDataDescriptors(streamInfo),\n      meta: {\n        percent: 100\n      }\n    });\n  } else {\n    // the content wasn't streamed, we need to push everything now\n    // first the file record, then the content\n    this.push({\n      data: record.fileRecord,\n      meta: {\n        percent: 0\n      }\n    });\n\n    while (this.contentBuffer.length) {\n      this.push(this.contentBuffer.shift());\n    }\n  }\n\n  this.currentFile = null;\n};\n/**\n * @see GenericWorker.flush\n */\n\n\nZipFileWorker.prototype.flush = function () {\n  var localDirLength = this.bytesWritten;\n\n  for (var i = 0; i < this.dirRecords.length; i++) {\n    this.push({\n      data: this.dirRecords[i],\n      meta: {\n        percent: 100\n      }\n    });\n  }\n\n  var centralDirLength = this.bytesWritten - localDirLength;\n  var dirEnd = generateCentralDirectoryEnd(this.dirRecords.length, centralDirLength, localDirLength, this.zipComment, this.encodeFileName);\n  this.push({\n    data: dirEnd,\n    meta: {\n      percent: 100\n    }\n  });\n};\n/**\n * Prepare the next source to be read.\n */\n\n\nZipFileWorker.prototype.prepareNextSource = function () {\n  this.previous = this._sources.shift();\n  this.openedSource(this.previous.streamInfo);\n\n  if (this.isPaused) {\n    this.previous.pause();\n  } else {\n    this.previous.resume();\n  }\n};\n/**\n * @see GenericWorker.registerPrevious\n */\n\n\nZipFileWorker.prototype.registerPrevious = function (previous) {\n  this._sources.push(previous);\n\n  var self = this;\n  previous.on('data', function (chunk) {\n    self.processChunk(chunk);\n  });\n  previous.on('end', function () {\n    self.closedSource(self.previous.streamInfo);\n\n    if (self._sources.length) {\n      self.prepareNextSource();\n    } else {\n      self.end();\n    }\n  });\n  previous.on('error', function (e) {\n    self.error(e);\n  });\n  return this;\n};\n/**\n * @see GenericWorker.resume\n */\n\n\nZipFileWorker.prototype.resume = function () {\n  if (!GenericWorker.prototype.resume.call(this)) {\n    return false;\n  }\n\n  if (!this.previous && this._sources.length) {\n    this.prepareNextSource();\n    return true;\n  }\n\n  if (!this.previous && !this._sources.length && !this.generatedError) {\n    this.end();\n    return true;\n  }\n};\n/**\n * @see GenericWorker.error\n */\n\n\nZipFileWorker.prototype.error = function (e) {\n  var sources = this._sources;\n\n  if (!GenericWorker.prototype.error.call(this, e)) {\n    return false;\n  }\n\n  for (var i = 0; i < sources.length; i++) {\n    try {\n      sources[i].error(e);\n    } catch (e) {// the `error` exploded, nothing to do\n    }\n  }\n\n  return true;\n};\n/**\n * @see GenericWorker.lock\n */\n\n\nZipFileWorker.prototype.lock = function () {\n  GenericWorker.prototype.lock.call(this);\n  var sources = this._sources;\n\n  for (var i = 0; i < sources.length; i++) {\n    sources[i].lock();\n  }\n};\n\nmodule.exports = ZipFileWorker;","\"use strict\";\n\nvar utils = require('../utils');\n\nvar GenericWorker = require('../stream/GenericWorker');\n/**\n * A worker that use a nodejs stream as source.\n * @constructor\n * @param {String} filename the name of the file entry for this stream.\n * @param {Readable} stream the nodejs stream.\n */\n\n\nfunction NodejsStreamInputAdapter(filename, stream) {\n  GenericWorker.call(this, \"Nodejs stream input adapter for \" + filename);\n  this._upstreamEnded = false;\n\n  this._bindStream(stream);\n}\n\nutils.inherits(NodejsStreamInputAdapter, GenericWorker);\n/**\n * Prepare the stream and bind the callbacks on it.\n * Do this ASAP on node 0.10 ! A lazy binding doesn't always work.\n * @param {Stream} stream the nodejs stream to use.\n */\n\nNodejsStreamInputAdapter.prototype._bindStream = function (stream) {\n  var self = this;\n  this._stream = stream;\n  stream.pause();\n  stream.on(\"data\", function (chunk) {\n    self.push({\n      data: chunk,\n      meta: {\n        percent: 0\n      }\n    });\n  }).on(\"error\", function (e) {\n    if (self.isPaused) {\n      this.generatedError = e;\n    } else {\n      self.error(e);\n    }\n  }).on(\"end\", function () {\n    if (self.isPaused) {\n      self._upstreamEnded = true;\n    } else {\n      self.end();\n    }\n  });\n};\n\nNodejsStreamInputAdapter.prototype.pause = function () {\n  if (!GenericWorker.prototype.pause.call(this)) {\n    return false;\n  }\n\n  this._stream.pause();\n\n  return true;\n};\n\nNodejsStreamInputAdapter.prototype.resume = function () {\n  if (!GenericWorker.prototype.resume.call(this)) {\n    return false;\n  }\n\n  if (this._upstreamEnded) {\n    this.end();\n  } else {\n    this._stream.resume();\n  }\n\n  return true;\n};\n\nmodule.exports = NodejsStreamInputAdapter;","'use strict';\n\nvar utils = require('./utils');\n\nvar external = require(\"./external\");\n\nvar utf8 = require('./utf8');\n\nvar utils = require('./utils');\n\nvar ZipEntries = require('./zipEntries');\n\nvar Crc32Probe = require('./stream/Crc32Probe');\n\nvar nodejsUtils = require(\"./nodejsUtils\");\n/**\n * Check the CRC32 of an entry.\n * @param {ZipEntry} zipEntry the zip entry to check.\n * @return {Promise} the result.\n */\n\n\nfunction checkEntryCRC32(zipEntry) {\n  return new external.Promise(function (resolve, reject) {\n    var worker = zipEntry.decompressed.getContentWorker().pipe(new Crc32Probe());\n    worker.on(\"error\", function (e) {\n      reject(e);\n    }).on(\"end\", function () {\n      if (worker.streamInfo.crc32 !== zipEntry.decompressed.crc32) {\n        reject(new Error(\"Corrupted zip : CRC32 mismatch\"));\n      } else {\n        resolve();\n      }\n    }).resume();\n  });\n}\n\nmodule.exports = function (data, options) {\n  var zip = this;\n  options = utils.extend(options || {}, {\n    base64: false,\n    checkCRC32: false,\n    optimizedBinaryString: false,\n    createFolders: false,\n    decodeFileName: utf8.utf8decode\n  });\n\n  if (nodejsUtils.isNode && nodejsUtils.isStream(data)) {\n    return external.Promise.reject(new Error(\"JSZip can't accept a stream when loading a zip file.\"));\n  }\n\n  return utils.prepareContent(\"the loaded zip file\", data, true, options.optimizedBinaryString, options.base64).then(function (data) {\n    var zipEntries = new ZipEntries(options);\n    zipEntries.load(data);\n    return zipEntries;\n  }).then(function checkCRC32(zipEntries) {\n    var promises = [external.Promise.resolve(zipEntries)];\n    var files = zipEntries.files;\n\n    if (options.checkCRC32) {\n      for (var i = 0; i < files.length; i++) {\n        promises.push(checkEntryCRC32(files[i]));\n      }\n    }\n\n    return external.Promise.all(promises);\n  }).then(function addFiles(results) {\n    var zipEntries = results.shift();\n    var files = zipEntries.files;\n\n    for (var i = 0; i < files.length; i++) {\n      var input = files[i];\n      zip.file(input.fileNameStr, input.decompressed, {\n        binary: true,\n        optimizedBinaryString: true,\n        date: input.date,\n        dir: input.dir,\n        comment: input.fileCommentStr.length ? input.fileCommentStr : null,\n        unixPermissions: input.unixPermissions,\n        dosPermissions: input.dosPermissions,\n        createFolders: options.createFolders\n      });\n    }\n\n    if (zipEntries.zipComment.length) {\n      zip.comment = zipEntries.zipComment;\n    }\n\n    return zip;\n  });\n};","'use strict';\n\nvar readerFor = require('./reader/readerFor');\n\nvar utils = require('./utils');\n\nvar sig = require('./signature');\n\nvar ZipEntry = require('./zipEntry');\n\nvar utf8 = require('./utf8');\n\nvar support = require('./support'); //  class ZipEntries {{{\n\n/**\n * All the entries in the zip file.\n * @constructor\n * @param {Object} loadOptions Options for loading the stream.\n */\n\n\nfunction ZipEntries(loadOptions) {\n  this.files = [];\n  this.loadOptions = loadOptions;\n}\n\nZipEntries.prototype = {\n  /**\n   * Check that the reader is on the specified signature.\n   * @param {string} expectedSignature the expected signature.\n   * @throws {Error} if it is an other signature.\n   */\n  checkSignature: function checkSignature(expectedSignature) {\n    if (!this.reader.readAndCheckSignature(expectedSignature)) {\n      this.reader.index -= 4;\n      var signature = this.reader.readString(4);\n      throw new Error(\"Corrupted zip or bug: unexpected signature \" + \"(\" + utils.pretty(signature) + \", expected \" + utils.pretty(expectedSignature) + \")\");\n    }\n  },\n\n  /**\n   * Check if the given signature is at the given index.\n   * @param {number} askedIndex the index to check.\n   * @param {string} expectedSignature the signature to expect.\n   * @return {boolean} true if the signature is here, false otherwise.\n   */\n  isSignature: function isSignature(askedIndex, expectedSignature) {\n    var currentIndex = this.reader.index;\n    this.reader.setIndex(askedIndex);\n    var signature = this.reader.readString(4);\n    var result = signature === expectedSignature;\n    this.reader.setIndex(currentIndex);\n    return result;\n  },\n\n  /**\n   * Read the end of the central directory.\n   */\n  readBlockEndOfCentral: function readBlockEndOfCentral() {\n    this.diskNumber = this.reader.readInt(2);\n    this.diskWithCentralDirStart = this.reader.readInt(2);\n    this.centralDirRecordsOnThisDisk = this.reader.readInt(2);\n    this.centralDirRecords = this.reader.readInt(2);\n    this.centralDirSize = this.reader.readInt(4);\n    this.centralDirOffset = this.reader.readInt(4);\n    this.zipCommentLength = this.reader.readInt(2); // warning : the encoding depends of the system locale\n    // On a linux machine with LANG=en_US.utf8, this field is utf8 encoded.\n    // On a windows machine, this field is encoded with the localized windows code page.\n\n    var zipComment = this.reader.readData(this.zipCommentLength);\n    var decodeParamType = support.uint8array ? \"uint8array\" : \"array\"; // To get consistent behavior with the generation part, we will assume that\n    // this is utf8 encoded unless specified otherwise.\n\n    var decodeContent = utils.transformTo(decodeParamType, zipComment);\n    this.zipComment = this.loadOptions.decodeFileName(decodeContent);\n  },\n\n  /**\n   * Read the end of the Zip 64 central directory.\n   * Not merged with the method readEndOfCentral :\n   * The end of central can coexist with its Zip64 brother,\n   * I don't want to read the wrong number of bytes !\n   */\n  readBlockZip64EndOfCentral: function readBlockZip64EndOfCentral() {\n    this.zip64EndOfCentralSize = this.reader.readInt(8);\n    this.reader.skip(4); // this.versionMadeBy = this.reader.readString(2);\n    // this.versionNeeded = this.reader.readInt(2);\n\n    this.diskNumber = this.reader.readInt(4);\n    this.diskWithCentralDirStart = this.reader.readInt(4);\n    this.centralDirRecordsOnThisDisk = this.reader.readInt(8);\n    this.centralDirRecords = this.reader.readInt(8);\n    this.centralDirSize = this.reader.readInt(8);\n    this.centralDirOffset = this.reader.readInt(8);\n    this.zip64ExtensibleData = {};\n    var extraDataSize = this.zip64EndOfCentralSize - 44,\n        index = 0,\n        extraFieldId,\n        extraFieldLength,\n        extraFieldValue;\n\n    while (index < extraDataSize) {\n      extraFieldId = this.reader.readInt(2);\n      extraFieldLength = this.reader.readInt(4);\n      extraFieldValue = this.reader.readData(extraFieldLength);\n      this.zip64ExtensibleData[extraFieldId] = {\n        id: extraFieldId,\n        length: extraFieldLength,\n        value: extraFieldValue\n      };\n    }\n  },\n\n  /**\n   * Read the end of the Zip 64 central directory locator.\n   */\n  readBlockZip64EndOfCentralLocator: function readBlockZip64EndOfCentralLocator() {\n    this.diskWithZip64CentralDirStart = this.reader.readInt(4);\n    this.relativeOffsetEndOfZip64CentralDir = this.reader.readInt(8);\n    this.disksCount = this.reader.readInt(4);\n\n    if (this.disksCount > 1) {\n      throw new Error(\"Multi-volumes zip are not supported\");\n    }\n  },\n\n  /**\n   * Read the local files, based on the offset read in the central part.\n   */\n  readLocalFiles: function readLocalFiles() {\n    var i, file;\n\n    for (i = 0; i < this.files.length; i++) {\n      file = this.files[i];\n      this.reader.setIndex(file.localHeaderOffset);\n      this.checkSignature(sig.LOCAL_FILE_HEADER);\n      file.readLocalPart(this.reader);\n      file.handleUTF8();\n      file.processAttributes();\n    }\n  },\n\n  /**\n   * Read the central directory.\n   */\n  readCentralDir: function readCentralDir() {\n    var file;\n    this.reader.setIndex(this.centralDirOffset);\n\n    while (this.reader.readAndCheckSignature(sig.CENTRAL_FILE_HEADER)) {\n      file = new ZipEntry({\n        zip64: this.zip64\n      }, this.loadOptions);\n      file.readCentralPart(this.reader);\n      this.files.push(file);\n    }\n\n    if (this.centralDirRecords !== this.files.length) {\n      if (this.centralDirRecords !== 0 && this.files.length === 0) {\n        // We expected some records but couldn't find ANY.\n        // This is really suspicious, as if something went wrong.\n        throw new Error(\"Corrupted zip or bug: expected \" + this.centralDirRecords + \" records in central dir, got \" + this.files.length);\n      } else {// We found some records but not all.\n        // Something is wrong but we got something for the user: no error here.\n        // console.warn(\"expected\", this.centralDirRecords, \"records in central dir, got\", this.files.length);\n      }\n    }\n  },\n\n  /**\n   * Read the end of central directory.\n   */\n  readEndOfCentral: function readEndOfCentral() {\n    var offset = this.reader.lastIndexOfSignature(sig.CENTRAL_DIRECTORY_END);\n\n    if (offset < 0) {\n      // Check if the content is a truncated zip or complete garbage.\n      // A \"LOCAL_FILE_HEADER\" is not required at the beginning (auto\n      // extractible zip for example) but it can give a good hint.\n      // If an ajax request was used without responseType, we will also\n      // get unreadable data.\n      var isGarbage = !this.isSignature(0, sig.LOCAL_FILE_HEADER);\n\n      if (isGarbage) {\n        throw new Error(\"Can't find end of central directory : is this a zip file ? \" + \"If it is, see https://stuk.github.io/jszip/documentation/howto/read_zip.html\");\n      } else {\n        throw new Error(\"Corrupted zip: can't find end of central directory\");\n      }\n    }\n\n    this.reader.setIndex(offset);\n    var endOfCentralDirOffset = offset;\n    this.checkSignature(sig.CENTRAL_DIRECTORY_END);\n    this.readBlockEndOfCentral();\n    /* extract from the zip spec :\n        4)  If one of the fields in the end of central directory\n            record is too small to hold required data, the field\n            should be set to -1 (0xFFFF or 0xFFFFFFFF) and the\n            ZIP64 format record should be created.\n        5)  The end of central directory record and the\n            Zip64 end of central directory locator record must\n            reside on the same disk when splitting or spanning\n            an archive.\n     */\n\n    if (this.diskNumber === utils.MAX_VALUE_16BITS || this.diskWithCentralDirStart === utils.MAX_VALUE_16BITS || this.centralDirRecordsOnThisDisk === utils.MAX_VALUE_16BITS || this.centralDirRecords === utils.MAX_VALUE_16BITS || this.centralDirSize === utils.MAX_VALUE_32BITS || this.centralDirOffset === utils.MAX_VALUE_32BITS) {\n      this.zip64 = true;\n      /*\n      Warning : the zip64 extension is supported, but ONLY if the 64bits integer read from\n      the zip file can fit into a 32bits integer. This cannot be solved : JavaScript represents\n      all numbers as 64-bit double precision IEEE 754 floating point numbers.\n      So, we have 53bits for integers and bitwise operations treat everything as 32bits.\n      see https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Operators/Bitwise_Operators\n      and http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-262.pdf section 8.5\n      */\n      // should look for a zip64 EOCD locator\n\n      offset = this.reader.lastIndexOfSignature(sig.ZIP64_CENTRAL_DIRECTORY_LOCATOR);\n\n      if (offset < 0) {\n        throw new Error(\"Corrupted zip: can't find the ZIP64 end of central directory locator\");\n      }\n\n      this.reader.setIndex(offset);\n      this.checkSignature(sig.ZIP64_CENTRAL_DIRECTORY_LOCATOR);\n      this.readBlockZip64EndOfCentralLocator(); // now the zip64 EOCD record\n\n      if (!this.isSignature(this.relativeOffsetEndOfZip64CentralDir, sig.ZIP64_CENTRAL_DIRECTORY_END)) {\n        // console.warn(\"ZIP64 end of central directory not where expected.\");\n        this.relativeOffsetEndOfZip64CentralDir = this.reader.lastIndexOfSignature(sig.ZIP64_CENTRAL_DIRECTORY_END);\n\n        if (this.relativeOffsetEndOfZip64CentralDir < 0) {\n          throw new Error(\"Corrupted zip: can't find the ZIP64 end of central directory\");\n        }\n      }\n\n      this.reader.setIndex(this.relativeOffsetEndOfZip64CentralDir);\n      this.checkSignature(sig.ZIP64_CENTRAL_DIRECTORY_END);\n      this.readBlockZip64EndOfCentral();\n    }\n\n    var expectedEndOfCentralDirOffset = this.centralDirOffset + this.centralDirSize;\n\n    if (this.zip64) {\n      expectedEndOfCentralDirOffset += 20; // end of central dir 64 locator\n\n      expectedEndOfCentralDirOffset += 12\n      /* should not include the leading 12 bytes */\n      + this.zip64EndOfCentralSize;\n    }\n\n    var extraBytes = endOfCentralDirOffset - expectedEndOfCentralDirOffset;\n\n    if (extraBytes > 0) {\n      // console.warn(extraBytes, \"extra bytes at beginning or within zipfile\");\n      if (this.isSignature(endOfCentralDirOffset, sig.CENTRAL_FILE_HEADER)) {// The offsets seem wrong, but we have something at the specified offset.\n        // So… we keep it.\n      } else {\n        // the offset is wrong, update the \"zero\" of the reader\n        // this happens if data has been prepended (crx files for example)\n        this.reader.zero = extraBytes;\n      }\n    } else if (extraBytes < 0) {\n      throw new Error(\"Corrupted zip: missing \" + Math.abs(extraBytes) + \" bytes.\");\n    }\n  },\n  prepareReader: function prepareReader(data) {\n    this.reader = readerFor(data);\n  },\n\n  /**\n   * Read a zip file and create ZipEntries.\n   * @param {String|ArrayBuffer|Uint8Array|Buffer} data the binary string representing a zip file.\n   */\n  load: function load(data) {\n    this.prepareReader(data);\n    this.readEndOfCentral();\n    this.readCentralDir();\n    this.readLocalFiles();\n  }\n}; // }}} end of ZipEntries\n\nmodule.exports = ZipEntries;","'use strict';\n\nvar DataReader = require('./DataReader');\n\nvar utils = require('../utils');\n\nfunction StringReader(data) {\n  DataReader.call(this, data);\n}\n\nutils.inherits(StringReader, DataReader);\n/**\n * @see DataReader.byteAt\n */\n\nStringReader.prototype.byteAt = function (i) {\n  return this.data.charCodeAt(this.zero + i);\n};\n/**\n * @see DataReader.lastIndexOfSignature\n */\n\n\nStringReader.prototype.lastIndexOfSignature = function (sig) {\n  return this.data.lastIndexOf(sig) - this.zero;\n};\n/**\n * @see DataReader.readAndCheckSignature\n */\n\n\nStringReader.prototype.readAndCheckSignature = function (sig) {\n  var data = this.readData(4);\n  return sig === data;\n};\n/**\n * @see DataReader.readData\n */\n\n\nStringReader.prototype.readData = function (size) {\n  this.checkOffset(size); // this will work because the constructor applied the \"& 0xff\" mask.\n\n  var result = this.data.slice(this.zero + this.index, this.zero + this.index + size);\n  this.index += size;\n  return result;\n};\n\nmodule.exports = StringReader;","'use strict';\n\nvar Uint8ArrayReader = require('./Uint8ArrayReader');\n\nvar utils = require('../utils');\n\nfunction NodeBufferReader(data) {\n  Uint8ArrayReader.call(this, data);\n}\n\nutils.inherits(NodeBufferReader, Uint8ArrayReader);\n/**\n * @see DataReader.readData\n */\n\nNodeBufferReader.prototype.readData = function (size) {\n  this.checkOffset(size);\n  var result = this.data.slice(this.zero + this.index, this.zero + this.index + size);\n  this.index += size;\n  return result;\n};\n\nmodule.exports = NodeBufferReader;","'use strict';\n\nvar readerFor = require('./reader/readerFor');\n\nvar utils = require('./utils');\n\nvar CompressedObject = require('./compressedObject');\n\nvar crc32fn = require('./crc32');\n\nvar utf8 = require('./utf8');\n\nvar compressions = require('./compressions');\n\nvar support = require('./support');\n\nvar MADE_BY_DOS = 0x00;\nvar MADE_BY_UNIX = 0x03;\n/**\n * Find a compression registered in JSZip.\n * @param {string} compressionMethod the method magic to find.\n * @return {Object|null} the JSZip compression object, null if none found.\n */\n\nvar findCompression = function findCompression(compressionMethod) {\n  for (var method in compressions) {\n    if (!compressions.hasOwnProperty(method)) {\n      continue;\n    }\n\n    if (compressions[method].magic === compressionMethod) {\n      return compressions[method];\n    }\n  }\n\n  return null;\n}; // class ZipEntry {{{\n\n/**\n * An entry in the zip file.\n * @constructor\n * @param {Object} options Options of the current file.\n * @param {Object} loadOptions Options for loading the stream.\n */\n\n\nfunction ZipEntry(options, loadOptions) {\n  this.options = options;\n  this.loadOptions = loadOptions;\n}\n\nZipEntry.prototype = {\n  /**\n   * say if the file is encrypted.\n   * @return {boolean} true if the file is encrypted, false otherwise.\n   */\n  isEncrypted: function isEncrypted() {\n    // bit 1 is set\n    return (this.bitFlag & 0x0001) === 0x0001;\n  },\n\n  /**\n   * say if the file has utf-8 filename/comment.\n   * @return {boolean} true if the filename/comment is in utf-8, false otherwise.\n   */\n  useUTF8: function useUTF8() {\n    // bit 11 is set\n    return (this.bitFlag & 0x0800) === 0x0800;\n  },\n\n  /**\n   * Read the local part of a zip file and add the info in this object.\n   * @param {DataReader} reader the reader to use.\n   */\n  readLocalPart: function readLocalPart(reader) {\n    var compression, localExtraFieldsLength; // we already know everything from the central dir !\n    // If the central dir data are false, we are doomed.\n    // On the bright side, the local part is scary  : zip64, data descriptors, both, etc.\n    // The less data we get here, the more reliable this should be.\n    // Let's skip the whole header and dash to the data !\n\n    reader.skip(22); // in some zip created on windows, the filename stored in the central dir contains \\ instead of /.\n    // Strangely, the filename here is OK.\n    // I would love to treat these zip files as corrupted (see http://www.info-zip.org/FAQ.html#backslashes\n    // or APPNOTE#4.4.17.1, \"All slashes MUST be forward slashes '/'\") but there are a lot of bad zip generators...\n    // Search \"unzip mismatching \"local\" filename continuing with \"central\" filename version\" on\n    // the internet.\n    //\n    // I think I see the logic here : the central directory is used to display\n    // content and the local directory is used to extract the files. Mixing / and \\\n    // may be used to display \\ to windows users and use / when extracting the files.\n    // Unfortunately, this lead also to some issues : http://seclists.org/fulldisclosure/2009/Sep/394\n\n    this.fileNameLength = reader.readInt(2);\n    localExtraFieldsLength = reader.readInt(2); // can't be sure this will be the same as the central dir\n    // the fileName is stored as binary data, the handleUTF8 method will take care of the encoding.\n\n    this.fileName = reader.readData(this.fileNameLength);\n    reader.skip(localExtraFieldsLength);\n\n    if (this.compressedSize === -1 || this.uncompressedSize === -1) {\n      throw new Error(\"Bug or corrupted zip : didn't get enough informations from the central directory \" + \"(compressedSize === -1 || uncompressedSize === -1)\");\n    }\n\n    compression = findCompression(this.compressionMethod);\n\n    if (compression === null) {\n      // no compression found\n      throw new Error(\"Corrupted zip : compression \" + utils.pretty(this.compressionMethod) + \" unknown (inner file : \" + utils.transformTo(\"string\", this.fileName) + \")\");\n    }\n\n    this.decompressed = new CompressedObject(this.compressedSize, this.uncompressedSize, this.crc32, compression, reader.readData(this.compressedSize));\n  },\n\n  /**\n   * Read the central part of a zip file and add the info in this object.\n   * @param {DataReader} reader the reader to use.\n   */\n  readCentralPart: function readCentralPart(reader) {\n    this.versionMadeBy = reader.readInt(2);\n    reader.skip(2); // this.versionNeeded = reader.readInt(2);\n\n    this.bitFlag = reader.readInt(2);\n    this.compressionMethod = reader.readString(2);\n    this.date = reader.readDate();\n    this.crc32 = reader.readInt(4);\n    this.compressedSize = reader.readInt(4);\n    this.uncompressedSize = reader.readInt(4);\n    var fileNameLength = reader.readInt(2);\n    this.extraFieldsLength = reader.readInt(2);\n    this.fileCommentLength = reader.readInt(2);\n    this.diskNumberStart = reader.readInt(2);\n    this.internalFileAttributes = reader.readInt(2);\n    this.externalFileAttributes = reader.readInt(4);\n    this.localHeaderOffset = reader.readInt(4);\n\n    if (this.isEncrypted()) {\n      throw new Error(\"Encrypted zip are not supported\");\n    } // will be read in the local part, see the comments there\n\n\n    reader.skip(fileNameLength);\n    this.readExtraFields(reader);\n    this.parseZIP64ExtraField(reader);\n    this.fileComment = reader.readData(this.fileCommentLength);\n  },\n\n  /**\n   * Parse the external file attributes and get the unix/dos permissions.\n   */\n  processAttributes: function processAttributes() {\n    this.unixPermissions = null;\n    this.dosPermissions = null;\n    var madeBy = this.versionMadeBy >> 8; // Check if we have the DOS directory flag set.\n    // We look for it in the DOS and UNIX permissions\n    // but some unknown platform could set it as a compatibility flag.\n\n    this.dir = this.externalFileAttributes & 0x0010 ? true : false;\n\n    if (madeBy === MADE_BY_DOS) {\n      // first 6 bits (0 to 5)\n      this.dosPermissions = this.externalFileAttributes & 0x3F;\n    }\n\n    if (madeBy === MADE_BY_UNIX) {\n      this.unixPermissions = this.externalFileAttributes >> 16 & 0xFFFF; // the octal permissions are in (this.unixPermissions & 0x01FF).toString(8);\n    } // fail safe : if the name ends with a / it probably means a folder\n\n\n    if (!this.dir && this.fileNameStr.slice(-1) === '/') {\n      this.dir = true;\n    }\n  },\n\n  /**\n   * Parse the ZIP64 extra field and merge the info in the current ZipEntry.\n   * @param {DataReader} reader the reader to use.\n   */\n  parseZIP64ExtraField: function parseZIP64ExtraField(reader) {\n    if (!this.extraFields[0x0001]) {\n      return;\n    } // should be something, preparing the extra reader\n\n\n    var extraReader = readerFor(this.extraFields[0x0001].value); // I really hope that these 64bits integer can fit in 32 bits integer, because js\n    // won't let us have more.\n\n    if (this.uncompressedSize === utils.MAX_VALUE_32BITS) {\n      this.uncompressedSize = extraReader.readInt(8);\n    }\n\n    if (this.compressedSize === utils.MAX_VALUE_32BITS) {\n      this.compressedSize = extraReader.readInt(8);\n    }\n\n    if (this.localHeaderOffset === utils.MAX_VALUE_32BITS) {\n      this.localHeaderOffset = extraReader.readInt(8);\n    }\n\n    if (this.diskNumberStart === utils.MAX_VALUE_32BITS) {\n      this.diskNumberStart = extraReader.readInt(4);\n    }\n  },\n\n  /**\n   * Read the central part of a zip file and add the info in this object.\n   * @param {DataReader} reader the reader to use.\n   */\n  readExtraFields: function readExtraFields(reader) {\n    var end = reader.index + this.extraFieldsLength,\n        extraFieldId,\n        extraFieldLength,\n        extraFieldValue;\n\n    if (!this.extraFields) {\n      this.extraFields = {};\n    }\n\n    while (reader.index < end) {\n      extraFieldId = reader.readInt(2);\n      extraFieldLength = reader.readInt(2);\n      extraFieldValue = reader.readData(extraFieldLength);\n      this.extraFields[extraFieldId] = {\n        id: extraFieldId,\n        length: extraFieldLength,\n        value: extraFieldValue\n      };\n    }\n  },\n\n  /**\n   * Apply an UTF8 transformation if needed.\n   */\n  handleUTF8: function handleUTF8() {\n    var decodeParamType = support.uint8array ? \"uint8array\" : \"array\";\n\n    if (this.useUTF8()) {\n      this.fileNameStr = utf8.utf8decode(this.fileName);\n      this.fileCommentStr = utf8.utf8decode(this.fileComment);\n    } else {\n      var upath = this.findExtraFieldUnicodePath();\n\n      if (upath !== null) {\n        this.fileNameStr = upath;\n      } else {\n        // ASCII text or unsupported code page\n        var fileNameByteArray = utils.transformTo(decodeParamType, this.fileName);\n        this.fileNameStr = this.loadOptions.decodeFileName(fileNameByteArray);\n      }\n\n      var ucomment = this.findExtraFieldUnicodeComment();\n\n      if (ucomment !== null) {\n        this.fileCommentStr = ucomment;\n      } else {\n        // ASCII text or unsupported code page\n        var commentByteArray = utils.transformTo(decodeParamType, this.fileComment);\n        this.fileCommentStr = this.loadOptions.decodeFileName(commentByteArray);\n      }\n    }\n  },\n\n  /**\n   * Find the unicode path declared in the extra field, if any.\n   * @return {String} the unicode path, null otherwise.\n   */\n  findExtraFieldUnicodePath: function findExtraFieldUnicodePath() {\n    var upathField = this.extraFields[0x7075];\n\n    if (upathField) {\n      var extraReader = readerFor(upathField.value); // wrong version\n\n      if (extraReader.readInt(1) !== 1) {\n        return null;\n      } // the crc of the filename changed, this field is out of date.\n\n\n      if (crc32fn(this.fileName) !== extraReader.readInt(4)) {\n        return null;\n      }\n\n      return utf8.utf8decode(extraReader.readData(upathField.length - 5));\n    }\n\n    return null;\n  },\n\n  /**\n   * Find the unicode comment declared in the extra field, if any.\n   * @return {String} the unicode comment, null otherwise.\n   */\n  findExtraFieldUnicodeComment: function findExtraFieldUnicodeComment() {\n    var ucommentField = this.extraFields[0x6375];\n\n    if (ucommentField) {\n      var extraReader = readerFor(ucommentField.value); // wrong version\n\n      if (extraReader.readInt(1) !== 1) {\n        return null;\n      } // the crc of the comment changed, this field is out of date.\n\n\n      if (crc32fn(this.fileComment) !== extraReader.readInt(4)) {\n        return null;\n      }\n\n      return utf8.utf8decode(extraReader.readData(ucommentField.length - 5));\n    }\n\n    return null;\n  }\n};\nmodule.exports = ZipEntry;","\"use strict\";\n\nfunction _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nvar _ = require(\"lodash\");\n\nvar fs = require(\"fs\");\n\nvar JSZip = require('jszip');\n\nvar externals = require(\"./externals\");\n\nvar regexify = require(\"./regexify\");\n\nvar blank = require(\"./blank\")();\n\nvar xmlq = require(\"./xmlq\");\n\nvar Sheet = require(\"./Sheet\");\n\nvar ContentTypes = require(\"./ContentTypes\");\n\nvar AppProperties = require(\"./AppProperties\");\n\nvar CoreProperties = require(\"./CoreProperties\");\n\nvar Relationships = require(\"./Relationships\");\n\nvar SharedStrings = require(\"./SharedStrings\");\n\nvar StyleSheet = require(\"./StyleSheet\");\n\nvar Encryptor = require(\"./Encryptor\");\n\nvar XmlParser = require(\"./XmlParser\");\n\nvar XmlBuilder = require(\"./XmlBuilder\");\n\nvar ArgHandler = require(\"./ArgHandler\");\n\nvar addressConverter = require(\"./addressConverter\"); // Options for adding files to zip. Do not create folders and use a fixed time at epoch.\n// The default JSZip behavior uses current time, which causes idential workbooks to be different each time.\n\n\nvar zipFileOpts = {\n  date: new Date(0),\n  createFolders: false\n}; // Initialize the parser and builder.\n\nvar xmlParser = new XmlParser();\nvar xmlBuilder = new XmlBuilder(); // Initialize the encryptor if present (can be excluded in browser build).\n\nvar encryptor = typeof Encryptor === \"function\" && new Encryptor(); // Characters not allowed in sheet names.\n\nvar badSheetNameChars = ['\\\\', '/', '*', '[', ']', ':', '?']; // Excel limits sheet names to 31 chars.\n\nvar maxSheetNameLength = 31; // Order of the nodes as defined by the spec.\n\nvar nodeOrder = [\"fileVersion\", \"fileSharing\", \"workbookPr\", \"workbookProtection\", \"bookViews\", \"sheets\", \"functionGroups\", \"externalReferences\", \"definedNames\", \"calcPr\", \"oleSize\", \"customWorkbookViews\", \"pivotCaches\", \"smartTagPr\", \"smartTagTypes\", \"webPublishing\", \"fileRecoveryPr\", \"webPublishObjects\", \"extLst\"];\n/**\r\n * A workbook.\r\n */\n\nvar Workbook =\n/*#__PURE__*/\nfunction () {\n  function Workbook() {\n    _classCallCheck(this, Workbook);\n  }\n\n  _createClass(Workbook, [{\n    key: \"activeSheet\",\n\n    /**\r\n     * Get the active sheet in the workbook.\r\n     * @returns {Sheet} The active sheet.\r\n     */\n\n    /**\r\n    * Set the active sheet in the workbook.\r\n    * @param {Sheet|string|number} sheet - The sheet or name of sheet or index of sheet to activate. The sheet must not be hidden.\r\n    * @returns {Workbook} The workbook.\r\n    */\n    value: function activeSheet() {\n      var _this = this;\n\n      return new ArgHandler('Workbook.activeSheet')[\"case\"](function () {\n        return _this._activeSheet;\n      })[\"case\"]('*', function (sheet) {\n        // Get the sheet from name/index if needed.\n        if (!(sheet instanceof Sheet)) sheet = _this.sheet(sheet); // Check if the sheet is hidden.\n\n        if (sheet.hidden()) throw new Error(\"You may not activate a hidden sheet.\"); // Deselect all sheets except the active one (mirroring ying Excel behavior).\n\n        _.forEach(_this._sheets, function (current) {\n          current.tabSelected(current === sheet);\n        });\n\n        _this._activeSheet = sheet;\n        return _this;\n      }).handle(arguments);\n    }\n    /**\r\n     * Add a new sheet to the workbook.\r\n     * @param {string} name - The name of the sheet. Must be unique, less than 31 characters, and may not contain the following characters: \\ / * [ ] : ?\r\n     * @param {number|string|Sheet} [indexOrBeforeSheet] The index to move the sheet to or the sheet (or name of sheet) to move this sheet before. Omit this argument to move to the end of the workbook.\r\n     * @returns {Sheet} The new sheet.\r\n     */\n\n  }, {\n    key: \"addSheet\",\n    value: function addSheet(name, indexOrBeforeSheet) {\n      return this._addSheet(name, indexOrBeforeSheet);\n    }\n    /**\r\n     * Gets a defined name scoped to the workbook.\r\n     * @param {string} name - The defined name.\r\n     * @returns {undefined|string|Cell|Range|Row|Column} What the defined name refers to or undefined if not found. Will return the string formula if not a Row, Column, Cell, or Range.\r\n     */\n\n    /**\r\n    * Set a defined name scoped to the workbook.\r\n    * @param {string} name - The defined name.\r\n    * @param {string|Cell|Range|Row|Column} refersTo - What the name refers to.\r\n    * @returns {Workbook} The workbook.\r\n    */\n\n  }, {\n    key: \"definedName\",\n    value: function definedName() {\n      var _this2 = this;\n\n      return new ArgHandler(\"Workbook.definedName\")[\"case\"]('string', function (name) {\n        return _this2.scopedDefinedName(undefined, name);\n      })[\"case\"](['string', '*'], function (name, refersTo) {\n        _this2.scopedDefinedName(undefined, name, refersTo);\n\n        return _this2;\n      }).handle(arguments);\n    }\n    /**\r\n     * Delete a sheet from the workbook.\r\n     * @param {Sheet|string|number} sheet - The sheet or name of sheet or index of sheet to move.\r\n     * @returns {Workbook} The workbook.\r\n     */\n\n  }, {\n    key: \"deleteSheet\",\n    value: function deleteSheet(sheet) {\n      // Get the sheet to move.\n      if (!(sheet instanceof Sheet)) {\n        sheet = this.sheet(sheet);\n        if (!sheet) throw new Error(\"Invalid move sheet reference.\");\n      } // Make sure we are not deleting the only visible sheet.\n\n\n      var visibleSheets = _.filter(this._sheets, function (sheet) {\n        return !sheet.hidden();\n      });\n\n      if (visibleSheets.length === 1 && visibleSheets[0] === sheet) {\n        throw new Error(\"This sheet may not be deleted as a workbook must contain at least one visible sheet.\");\n      } // Remove the sheet.\n\n\n      var index = this._sheets.indexOf(sheet);\n\n      this._sheets.splice(index, 1); // Set the new active sheet.\n\n\n      if (sheet === this.activeSheet()) {\n        if (index >= this._sheets.length) index--;\n        this.activeSheet(index);\n      }\n\n      return this;\n    }\n    /**\r\n     * Find the given pattern in the workbook and optionally replace it.\r\n     * @param {string|RegExp} pattern - The pattern to look for. Providing a string will result in a case-insensitive substring search. Use a RegExp for more sophisticated searches.\r\n     * @param {string|function} [replacement] - The text to replace or a String.replace callback function. If pattern is a string, all occurrences of the pattern in each cell will be replaced.\r\n     * @returns {boolean} A flag indicating if the pattern was found.\r\n     */\n\n  }, {\n    key: \"find\",\n    value: function find(pattern, replacement) {\n      pattern = regexify(pattern);\n      var matches = [];\n\n      this._sheets.forEach(function (sheet) {\n        matches = matches.concat(sheet.find(pattern, replacement));\n      });\n\n      return matches;\n    }\n    /**\r\n     * Move a sheet to a new position.\r\n     * @param {Sheet|string|number} sheet - The sheet or name of sheet or index of sheet to move.\r\n     * @param {number|string|Sheet} [indexOrBeforeSheet] The index to move the sheet to or the sheet (or name of sheet) to move this sheet before. Omit this argument to move to the end of the workbook.\r\n     * @returns {Workbook} The workbook.\r\n     */\n\n  }, {\n    key: \"moveSheet\",\n    value: function moveSheet(sheet, indexOrBeforeSheet) {\n      // Get the sheet to move.\n      if (!(sheet instanceof Sheet)) {\n        sheet = this.sheet(sheet);\n        if (!sheet) throw new Error(\"Invalid move sheet reference.\");\n      } // Get the to/from indexes.\n\n\n      var from = this._sheets.indexOf(sheet);\n\n      var to;\n\n      if (_.isNil(indexOrBeforeSheet)) {\n        to = this._sheets.length - 1;\n      } else if (_.isInteger(indexOrBeforeSheet)) {\n        to = indexOrBeforeSheet;\n      } else {\n        if (!(indexOrBeforeSheet instanceof Sheet)) {\n          indexOrBeforeSheet = this.sheet(indexOrBeforeSheet);\n          if (!indexOrBeforeSheet) throw new Error(\"Invalid before sheet reference.\");\n        }\n\n        to = this._sheets.indexOf(indexOrBeforeSheet);\n      } // Insert the sheet at the appropriate place.\n\n\n      this._sheets.splice(to, 0, this._sheets.splice(from, 1)[0]);\n\n      return this;\n    }\n    /**\r\n     * Generates the workbook output.\r\n     * @param {string} [type] - The type of the data to return: base64, binarystring, uint8array, arraybuffer, blob, nodebuffer. Defaults to 'nodebuffer' in Node.js and 'blob' in browsers.\r\n     * @returns {string|Uint8Array|ArrayBuffer|Blob|Buffer} The data.\r\n     */\n\n    /**\r\n    * Generates the workbook output.\r\n    * @param {{}} [opts] Options\r\n    * @param {string} [opts.type] - The type of the data to return: base64, binarystring, uint8array, arraybuffer, blob, nodebuffer. Defaults to 'nodebuffer' in Node.js and 'blob' in browsers.\r\n    * @param {string} [opts.password] - The password to use to encrypt the workbook.\r\n    * @returns {string|Uint8Array|ArrayBuffer|Blob|Buffer} The data.\r\n    */\n\n  }, {\n    key: \"outputAsync\",\n    value: function outputAsync(opts) {\n      var _this3 = this;\n\n      opts = opts || {};\n      if (typeof opts === 'string') opts = {\n        type: opts\n      };\n\n      this._setSheetRefs();\n\n      var definedNamesNode = xmlq.findChild(this._node, \"definedNames\");\n\n      this._sheets.forEach(function (sheet, i) {\n        if (!sheet._autoFilter) return;\n\n        if (!definedNamesNode) {\n          definedNamesNode = {\n            name: \"definedNames\",\n            attributes: {},\n            children: []\n          };\n          xmlq.insertInOrder(_this3._node, definedNamesNode, nodeOrder);\n        }\n\n        xmlq.appendChild(definedNamesNode, {\n          name: \"definedName\",\n          attributes: {\n            name: \"_xlnm._FilterDatabase\",\n            localSheetId: i,\n            hidden: \"1\"\n          },\n          children: [sheet._autoFilter.address({\n            includeSheetName: true,\n            anchored: true\n          })]\n        });\n      });\n\n      this._sheetsNode.children = [];\n\n      this._sheets.forEach(function (sheet, i) {\n        var sheetPath = \"xl/worksheets/sheet\".concat(i + 1, \".xml\");\n        var sheetRelsPath = \"xl/worksheets/_rels/sheet\".concat(i + 1, \".xml.rels\");\n        var sheetXmls = sheet.toXmls();\n\n        var relationship = _this3._relationships.findById(sheetXmls.id.attributes['r:id']);\n\n        relationship.attributes.Target = \"worksheets/sheet\".concat(i + 1, \".xml\");\n\n        _this3._sheetsNode.children.push(sheetXmls.id);\n\n        _this3._zip.file(sheetPath, xmlBuilder.build(sheetXmls.sheet), zipFileOpts);\n\n        var relationshipsXml = xmlBuilder.build(sheetXmls.relationships);\n\n        if (relationshipsXml) {\n          _this3._zip.file(sheetRelsPath, relationshipsXml, zipFileOpts);\n        } else {\n          _this3._zip.remove(sheetRelsPath);\n        }\n      }); // Set the app security to true if a password is set, false if not.\n      // this._appProperties.isSecure(!!opts.password);\n      // Convert the various components to XML strings and add them to the zip.\n\n\n      this._zip.file(\"[Content_Types].xml\", xmlBuilder.build(this._contentTypes), zipFileOpts);\n\n      this._zip.file(\"docProps/app.xml\", xmlBuilder.build(this._appProperties), zipFileOpts);\n\n      this._zip.file(\"docProps/core.xml\", xmlBuilder.build(this._coreProperties), zipFileOpts);\n\n      this._zip.file(\"xl/_rels/workbook.xml.rels\", xmlBuilder.build(this._relationships), zipFileOpts);\n\n      this._zip.file(\"xl/sharedStrings.xml\", xmlBuilder.build(this._sharedStrings), zipFileOpts);\n\n      this._zip.file(\"xl/styles.xml\", xmlBuilder.build(this._styleSheet), zipFileOpts);\n\n      this._zip.file(\"xl/workbook.xml\", xmlBuilder.build(this._node), zipFileOpts); // Generate the zip.\n\n\n      return this._zip.generateAsync({\n        type: \"nodebuffer\",\n        compression: \"DEFLATE\"\n      }).then(function (output) {\n        // If a password is set, encrypt the workbook.\n        if (opts.password) output = encryptor.encrypt(output, opts.password); // Convert and return\n\n        return _this3._convertBufferToOutput(output, opts.type);\n      });\n    }\n    /**\r\n     * Gets the sheet with the provided name or index (0-based).\r\n     * @param {string|number} sheetNameOrIndex - The sheet name or index.\r\n     * @returns {Sheet|undefined} The sheet or undefined if not found.\r\n     */\n\n  }, {\n    key: \"sheet\",\n    value: function sheet(sheetNameOrIndex) {\n      if (_.isInteger(sheetNameOrIndex)) return this._sheets[sheetNameOrIndex];\n      return _.find(this._sheets, function (sheet) {\n        return sheet.name() === sheetNameOrIndex;\n      });\n    }\n    /**\r\n     * Get an array of all the sheets in the workbook.\r\n     * @returns {Array.<Sheet>} The sheets.\r\n     */\n\n  }, {\n    key: \"sheets\",\n    value: function sheets() {\n      return this._sheets.slice();\n    }\n    /**\r\n     * Gets an individual property.\r\n     * @param {string} name - The name of the property.\r\n     * @returns {*} The property.\r\n     */\n\n    /**\r\n    * Gets multiple properties.\r\n    * @param {Array.<string>} names - The names of the properties.\r\n    * @returns {object.<string, *>} Object whose keys are the property names and values are the properties.\r\n    */\n\n    /**\r\n    * Sets an individual property.\r\n    * @param {string} name - The name of the property.\r\n    * @param {*} value - The value to set.\r\n    * @returns {Workbook} The workbook.\r\n    */\n\n    /**\r\n    * Sets multiple properties.\r\n    * @param {object.<string, *>} properties - Object whose keys are the property names and values are the values to set.\r\n    * @returns {Workbook} The workbook.\r\n    */\n\n  }, {\n    key: \"property\",\n    value: function property() {\n      var _this4 = this;\n\n      return new ArgHandler(\"Workbook.property\")[\"case\"]('string', function (name) {\n        // Get single value\n        return _this4._coreProperties.get(name);\n      })[\"case\"]('array', function (names) {\n        // Get list of values\n        var values = {};\n        names.forEach(function (name) {\n          values[name] = _this4._coreProperties.get(name);\n        });\n        return values;\n      })[\"case\"](['string', '*'], function (name, value) {\n        // Set a single value for all cells to a single value\n        _this4._coreProperties.set(name, value);\n\n        return _this4;\n      })[\"case\"]('object', function (nameValues) {\n        // Object of key value pairs to set\n        for (var name in nameValues) {\n          if (!nameValues.hasOwnProperty(name)) continue;\n          var value = nameValues[name];\n\n          _this4._coreProperties.set(name, value);\n        }\n\n        return _this4;\n      }).handle(arguments);\n    }\n    /**\r\n     * Get access to core properties object\r\n     * @returns {CoreProperties} The core properties.\r\n     */\n\n  }, {\n    key: \"properties\",\n    value: function properties() {\n      return this._coreProperties;\n    }\n    /**\r\n     * Write the workbook to file. (Not supported in browsers.)\r\n     * @param {string} path - The path of the file to write.\r\n     * @param {{}} [opts] - Options\r\n     * @param {string} [opts.password] - The password to encrypt the workbook.\r\n     * @returns {Promise.<undefined>} A promise.\r\n     */\n\n  }, {\n    key: \"toFileAsync\",\n    value: function toFileAsync(path, opts) {\n      if (process.browser) throw new Error(\"Workbook.toFileAsync is not supported in the browser.\");\n      return this.outputAsync(opts).then(function (data) {\n        return new externals.Promise(function (resolve, reject) {\n          fs.writeFile(path, data, function (err) {\n            if (err) return reject(err);\n            resolve();\n          });\n        });\n      });\n    }\n    /**\r\n     * Gets a scoped defined name.\r\n     * @param {Sheet} sheetScope - The sheet the name is scoped to. Use undefined for workbook scope.\r\n     * @param {string} name - The defined name.\r\n     * @returns {undefined|Cell|Range|Row|Column} What the defined name refers to.\r\n     * @ignore\r\n     */\n\n    /**\r\n    * Sets a scoped defined name.\r\n    * @param {Sheet} sheetScope - The sheet the name is scoped to. Use undefined for workbook scope.\r\n    * @param {string} name - The defined name.\r\n    * @param {undefined|Cell|Range|Row|Column} refersTo - What the defined name refers to.\r\n    * @returns {Workbook} The workbook.\r\n    * @ignore\r\n    */\n\n  }, {\n    key: \"scopedDefinedName\",\n    value: function scopedDefinedName(sheetScope, name, refersTo) {\n      var _this5 = this;\n\n      var definedNamesNode = xmlq.findChild(this._node, \"definedNames\");\n\n      var definedNameNode = definedNamesNode && _.find(definedNamesNode.children, function (node) {\n        return node.attributes.name === name && node.localSheet === sheetScope;\n      });\n\n      return new ArgHandler('Workbook.scopedDefinedName')[\"case\"](['*', 'string'], function () {\n        // Get the address from the definedNames node.\n        var refersTo = definedNameNode && definedNameNode.children[0];\n        if (!refersTo) return undefined; // Try to parse the address.\n\n        var ref = addressConverter.fromAddress(refersTo);\n        if (!ref) return refersTo; // Load the appropriate selection type.\n\n        var sheet = _this5.sheet(ref.sheetName);\n\n        if (ref.type === 'cell') return sheet.cell(ref.rowNumber, ref.columnNumber);\n        if (ref.type === 'range') return sheet.range(ref.startRowNumber, ref.startColumnNumber, ref.endRowNumber, ref.endColumnNumber);\n        if (ref.type === 'row') return sheet.row(ref.rowNumber);\n        if (ref.type === 'column') return sheet.column(ref.columnNumber);\n        return refersTo;\n      })[\"case\"](['*', 'string', 'nil'], function () {\n        if (definedNameNode) xmlq.removeChild(definedNamesNode, definedNameNode);\n        if (definedNamesNode && !definedNamesNode.children.length) xmlq.removeChild(_this5._node, definedNamesNode);\n        return _this5;\n      })[\"case\"](['*', 'string', '*'], function () {\n        if (typeof refersTo !== 'string') {\n          refersTo = refersTo.address({\n            includeSheetName: true,\n            anchored: true\n          });\n        }\n\n        if (!definedNamesNode) {\n          definedNamesNode = {\n            name: \"definedNames\",\n            attributes: {},\n            children: []\n          };\n          xmlq.insertInOrder(_this5._node, definedNamesNode, nodeOrder);\n        }\n\n        if (!definedNameNode) {\n          definedNameNode = {\n            name: \"definedName\",\n            attributes: {\n              name: name\n            },\n            children: [refersTo]\n          };\n          if (sheetScope) definedNameNode.localSheet = sheetScope;\n          xmlq.appendChild(definedNamesNode, definedNameNode);\n        }\n\n        definedNameNode.children = [refersTo];\n        return _this5;\n      }).handle(arguments);\n    }\n    /**\r\n     * Get the shared strings table.\r\n     * @returns {SharedStrings} The shared strings table.\r\n     * @ignore\r\n     */\n\n  }, {\n    key: \"sharedStrings\",\n    value: function sharedStrings() {\n      return this._sharedStrings;\n    }\n    /**\r\n     * Get the style sheet.\r\n     * @returns {StyleSheet} The style sheet.\r\n     * @ignore\r\n     */\n\n  }, {\n    key: \"styleSheet\",\n    value: function styleSheet() {\n      return this._styleSheet;\n    }\n    /**\r\n     * Add a new sheet to the workbook.\r\n     * \r\n     * **WARN:** this function has limits:  if you clone a sheet with some images or other things link outside the Sheet object, these things in the cloned sheet will be locked when you open in MS Excel app.\r\n     * @param {Sheet} from - The sheet to be cloned.\r\n     * @param {string} name - The name of the new sheet. Must be unique, less than 31 characters, and may not contain the following characters: \\ / * [ ] : ?\r\n     * @param {number|string|Sheet} [indexOrBeforeSheet] The index to move the sheet to or the sheet (or name of sheet) to move this sheet before. Omit this argument to move to the end of the workbook.\r\n     * @returns {Sheet} The new sheet.\r\n     */\n\n  }, {\n    key: \"cloneSheet\",\n    value: function cloneSheet(from, name, indexOrBeforeSheet) {\n      if (!from || !(from instanceof Sheet)) throw new Error(\"Invalid clone from.\");\n      return this._addSheet(name, indexOrBeforeSheet, function () {\n        var cloneXml = function cloneXml(node) {\n          // If the node has a toXml method, call it.\n          if (node && _.isFunction(node.toXml)) node = node.toXml();\n\n          if (_typeof(node) === 'object') {\n            if (node.name) {\n              var result = {\n                name: node.name,\n                attributes: {},\n                children: []\n              };\n\n              _.forOwn(node.attributes, function (value, name) {\n                result.attributes[name] = value;\n              });\n\n              var chld;\n\n              if (node.children) {\n                node.children.forEach(function (child) {\n                  chld = cloneXml(child);\n\n                  if (child !== null) {\n                    result.children.push(chld);\n                  }\n                });\n              }\n\n              return result;\n            }\n          } else if (node !== null) {\n            return node;\n          }\n\n          return null;\n        }; // clone SheetNode & relationshipNode from source\n\n\n        var fromXml = from.toXmls();\n        var sheetNode = cloneXml(fromXml.sheet);\n        var relationshipNode = cloneXml(fromXml.relationships);\n        return {\n          sheetNode: sheetNode,\n          relationshipNode: relationshipNode\n        };\n      });\n    }\n    /**\r\n     * Add a new sheet to the workbook.\r\n     * @param {string} name - The name of the sheet. Must be unique, less than 31 characters, and may not contain the following characters: \\ / * [ ] : ?\r\n     * @param {number|string|Sheet} [indexOrBeforeSheet] The index to move the sheet to or the sheet (or name of sheet) to move this sheet before. Omit this argument to move to the end of the workbook.\r\n     * @param {callback} [getTemplateNodes] optional callback function for template nodes\r\n     * @returns {Sheet} The new sheet.\r\n     * @private\r\n     */\n\n  }, {\n    key: \"_addSheet\",\n    value: function _addSheet(name, indexOrBeforeSheet, getTemplateNodes) {\n      // Validate the sheet name.\n      if (!name || typeof name !== \"string\") throw new Error(\"Invalid sheet name.\");\n      if (_.some(badSheetNameChars, function (_char) {\n        return name.indexOf(_char) >= 0;\n      })) throw new Error(\"Sheet name may not contain any of the following characters: \".concat(badSheetNameChars.join(\" \")));\n      if (name.length > maxSheetNameLength) throw new Error(\"Sheet name may not be greater than \".concat(maxSheetNameLength, \" characters.\"));\n      if (this.sheet(name)) throw new Error(\"Sheet with name \\\"\".concat(name, \"\\\" already exists.\")); // Get the destination index of new sheet.\n\n      var index;\n\n      if (_.isNil(indexOrBeforeSheet)) {\n        index = this._sheets.length;\n      } else if (_.isInteger(indexOrBeforeSheet)) {\n        index = indexOrBeforeSheet;\n      } else {\n        if (!(indexOrBeforeSheet instanceof Sheet)) {\n          indexOrBeforeSheet = this.sheet(indexOrBeforeSheet);\n          if (!indexOrBeforeSheet) throw new Error(\"Invalid before sheet reference.\");\n        }\n\n        index = this._sheets.indexOf(indexOrBeforeSheet);\n      } // Add a new relationship for the new sheet and create the new sheet ID node.\n\n\n      var relationship = this._relationships.add(\"worksheet\"); // Leave target blank as it will be filled later.\n\n\n      var sheetIdNode = {\n        name: \"sheet\",\n        attributes: {\n          name: name,\n          sheetId: ++this._maxSheetId,\n          'r:id': relationship.attributes.Id\n        },\n        children: []\n      }; // Create the new sheet.\n\n      var sheet;\n\n      if (getTemplateNodes) {\n        var _getTemplateNodes = getTemplateNodes(),\n            sheetNode = _getTemplateNodes.sheetNode,\n            relationshipNode = _getTemplateNodes.relationshipNode;\n\n        sheet = new Sheet(this, sheetIdNode, sheetNode, relationshipNode);\n      } else {\n        sheet = new Sheet(this, sheetIdNode);\n      } // Insert the sheet at the appropriate index.\n\n\n      this._sheets.splice(index, 0, sheet);\n\n      return sheet;\n    }\n    /**\r\n     * Initialize the workbook. (This is separated from the constructor to ease testing.)\r\n     * @param {string|ArrayBuffer|Uint8Array|Buffer|Blob} data - The data to load.\r\n     * @param {{}} [opts] - Options\r\n     * @param {boolean} [opts.base64=false] - No used unless input is a string. True if the input string is base64 encoded, false for binary.\r\n     * @returns {Promise.<Workbook>} The workbook.\r\n     * @private\r\n     */\n\n  }, {\n    key: \"_initAsync\",\n    value: function _initAsync(data, opts) {\n      var _this6 = this;\n\n      opts = opts || {};\n      this._maxSheetId = 0;\n      this._sheets = [];\n      return externals.Promise.resolve().then(function () {\n        // Make sure the input is a Buffer\n        return _this6._convertInputToBufferAsync(data, opts.base64).then(function (buffer) {\n          data = buffer;\n        });\n      }).then(function () {\n        if (!opts.password) return;\n        return encryptor.decryptAsync(data, opts.password).then(function (decrypted) {\n          data = decrypted;\n        });\n      }).then(function () {\n        return JSZip.loadAsync(data);\n      }).then(function (zip) {\n        _this6._zip = zip;\n        return _this6._parseNodesAsync([\"[Content_Types].xml\", \"docProps/app.xml\", \"docProps/core.xml\", \"xl/_rels/workbook.xml.rels\", \"xl/sharedStrings.xml\", \"xl/styles.xml\", \"xl/workbook.xml\"]);\n      }).then(function (nodes) {\n        var contentTypesNode = nodes[0];\n        var appPropertiesNode = nodes[1];\n        var corePropertiesNode = nodes[2];\n        var relationshipsNode = nodes[3];\n        var sharedStringsNode = nodes[4];\n        var styleSheetNode = nodes[5];\n        var workbookNode = nodes[6]; // Load the various components.\n\n        _this6._contentTypes = new ContentTypes(contentTypesNode);\n        _this6._appProperties = new AppProperties(appPropertiesNode);\n        _this6._coreProperties = new CoreProperties(corePropertiesNode);\n        _this6._relationships = new Relationships(relationshipsNode);\n        _this6._sharedStrings = new SharedStrings(sharedStringsNode);\n        _this6._styleSheet = new StyleSheet(styleSheetNode);\n        _this6._node = workbookNode; // Add the shared strings relationship if it doesn't exist.\n\n        if (!_this6._relationships.findByType(\"sharedStrings\")) {\n          _this6._relationships.add(\"sharedStrings\", \"sharedStrings.xml\");\n        } // Add the shared string content type if it doesn't exist.\n\n\n        if (!_this6._contentTypes.findByPartName(\"/xl/sharedStrings.xml\")) {\n          _this6._contentTypes.add(\"/xl/sharedStrings.xml\", \"application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml\");\n        } // Kill the calc chain. It's not required and the workbook will corrupt unless we keep it up to date.\n\n\n        _this6._zip.remove(\"xl/calcChain.xml\"); // Load each sheet.\n\n\n        _this6._sheetsNode = xmlq.findChild(_this6._node, \"sheets\");\n        return externals.Promise.all(_.map(_this6._sheetsNode.children, function (sheetIdNode, i) {\n          if (sheetIdNode.attributes.sheetId > _this6._maxSheetId) _this6._maxSheetId = sheetIdNode.attributes.sheetId;\n          return _this6._parseNodesAsync([\"xl/worksheets/sheet\".concat(i + 1, \".xml\"), \"xl/worksheets/_rels/sheet\".concat(i + 1, \".xml.rels\")]).then(function (nodes) {\n            var sheetNode = nodes[0];\n            var sheetRelationshipsNode = nodes[1]; // Insert at position i as the promises will resolve at different times.\n\n            _this6._sheets[i] = new Sheet(_this6, sheetIdNode, sheetNode, sheetRelationshipsNode);\n          });\n        }));\n      }).then(function () {\n        return _this6._parseSheetRefs();\n      }).then(function () {\n        return _this6;\n      });\n    }\n    /**\r\n     * Parse files out of zip into XML node objects.\r\n     * @param {Array.<string>} names - The file names to parse.\r\n     * @returns {Promise.<Array.<{}>>} An array of the parsed objects.\r\n     * @private\r\n     */\n\n  }, {\n    key: \"_parseNodesAsync\",\n    value: function _parseNodesAsync(names) {\n      var _this7 = this;\n\n      return externals.Promise.all(_.map(names, function (name) {\n        return _this7._zip.file(name);\n      })).then(function (files) {\n        return externals.Promise.all(_.map(files, function (file) {\n          return file && file.async(\"string\");\n        }));\n      }).then(function (texts) {\n        return externals.Promise.all(_.map(texts, function (text) {\n          return text && xmlParser.parseAsync(text);\n        }));\n      });\n    }\n    /**\r\n     * Parse the sheet references out so we can reorder freely.\r\n     * @returns {undefined}\r\n     * @private\r\n     */\n\n  }, {\n    key: \"_parseSheetRefs\",\n    value: function _parseSheetRefs() {\n      var _this8 = this;\n\n      // Parse the active sheet.\n      var bookViewsNode = xmlq.findChild(this._node, \"bookViews\");\n      var workbookViewNode = bookViewsNode && xmlq.findChild(bookViewsNode, \"workbookView\");\n      var activeTabId = workbookViewNode && workbookViewNode.attributes.activeTab || 0;\n      this._activeSheet = this._sheets[activeTabId]; // Set the location sheet on the defined name nodes. The defined name should point to the index of the sheet\n      // but reordering sheets messes this up. So store it on the node and we'll update the index on XML build.\n\n      var definedNamesNode = xmlq.findChild(this._node, \"definedNames\");\n\n      if (definedNamesNode) {\n        _.forEach(definedNamesNode.children, function (definedNameNode) {\n          if (definedNameNode.attributes.hasOwnProperty(\"localSheetId\")) {\n            definedNameNode.localSheet = _this8._sheets[definedNameNode.attributes.localSheetId];\n          }\n        });\n      }\n    }\n    /**\r\n     * Set the proper sheet references in the XML.\r\n     * @returns {undefined}\r\n     * @private\r\n     */\n\n  }, {\n    key: \"_setSheetRefs\",\n    value: function _setSheetRefs() {\n      var _this9 = this;\n\n      // Set the active sheet.\n      var bookViewsNode = xmlq.findChild(this._node, \"bookViews\");\n\n      if (!bookViewsNode) {\n        bookViewsNode = {\n          name: 'bookViews',\n          attributes: {},\n          children: []\n        };\n        xmlq.insertInOrder(this._node, bookViewsNode, nodeOrder);\n      }\n\n      var workbookViewNode = xmlq.findChild(bookViewsNode, \"workbookView\");\n\n      if (!workbookViewNode) {\n        workbookViewNode = {\n          name: 'workbookView',\n          attributes: {},\n          children: []\n        };\n        xmlq.appendChild(bookViewsNode, workbookViewNode);\n      }\n\n      workbookViewNode.attributes.activeTab = this._sheets.indexOf(this._activeSheet); // Set the defined names local sheet indexes.\n\n      var definedNamesNode = xmlq.findChild(this._node, \"definedNames\");\n\n      if (definedNamesNode) {\n        _.forEach(definedNamesNode.children, function (definedNameNode) {\n          if (definedNameNode.localSheet) {\n            definedNameNode.attributes.localSheetId = _this9._sheets.indexOf(definedNameNode.localSheet);\n          }\n        });\n      }\n    }\n    /**\r\n     * Convert buffer to desired output format\r\n     * @param {Buffer} buffer - The buffer\r\n     * @param {string} type - The type to convert to: buffer/nodebuffer, blob, base64, binarystring, uint8array, arraybuffer\r\n     * @returns {Buffer|Blob|string|Uint8Array|ArrayBuffer} The output\r\n     * @private\r\n     */\n\n  }, {\n    key: \"_convertBufferToOutput\",\n    value: function _convertBufferToOutput(buffer, type) {\n      if (!type) type = process.browser ? \"blob\" : \"nodebuffer\";\n      if (type === \"buffer\" || type === \"nodebuffer\") return buffer;\n      if (process.browser && type === \"blob\") return new Blob([buffer], {\n        type: Workbook.MIME_TYPE\n      });\n      if (type === \"base64\") return buffer.toString(\"base64\");\n      if (type === \"binarystring\") return buffer.toString(\"utf8\");\n      if (type === \"uint8array\") return new Uint8Array(buffer);\n      if (type === \"arraybuffer\") return new Uint8Array(buffer).buffer;\n      throw new Error(\"Output type '\".concat(type, \"' not supported.\"));\n    }\n    /**\r\n     * Convert input to buffer\r\n     * @param {Buffer|Blob|string|Uint8Array|ArrayBuffer} input - The input\r\n     * @param {boolean} [base64=false] - Only applies if input is a string. If true, the string is base64 encoded, false for binary\r\n     * @returns {Promise.<Buffer>} The buffer.\r\n     * @private\r\n     */\n\n  }, {\n    key: \"_convertInputToBufferAsync\",\n    value: function _convertInputToBufferAsync(input, base64) {\n      return externals.Promise.resolve().then(function () {\n        if (Buffer.isBuffer(input)) return input;\n\n        if (process.browser && input instanceof Blob) {\n          return new externals.Promise(function (resolve) {\n            var fileReader = new FileReader();\n\n            fileReader.onload = function (event) {\n              resolve(Buffer.from(event.target.result));\n            };\n\n            fileReader.readAsArrayBuffer(input);\n          });\n        }\n\n        if (typeof input === \"string\" && base64) return Buffer.from(input, \"base64\");\n        if (typeof input === \"string\" && !base64) return Buffer.from(input, \"utf8\");\n        if (input instanceof Uint8Array || input instanceof ArrayBuffer) return Buffer.from(input);\n        throw new Error(\"Input type unknown.\");\n      });\n    }\n  }], [{\n    key: \"fromBlankAsync\",\n\n    /**\r\n     * Create a new blank workbook.\r\n     * @returns {Promise.<Workbook>} The workbook.\r\n     * @ignore\r\n     */\n    value: function fromBlankAsync() {\n      return Workbook.fromDataAsync(blank);\n    }\n    /**\r\n     * Loads a workbook from a data object. (Supports any supported [JSZip data types]{@link https://stuk.github.io/jszip/documentation/api_jszip/load_async.html}.)\r\n     * @param {string|Array.<number>|ArrayBuffer|Uint8Array|Buffer|Blob|Promise.<*>} data - The data to load.\r\n     * @param {{}} [opts] - Options\r\n     * @returns {Promise.<Workbook>} The workbook.\r\n     * @ignore\r\n     */\n\n  }, {\n    key: \"fromDataAsync\",\n    value: function fromDataAsync(data, opts) {\n      return new Workbook()._initAsync(data, opts);\n    }\n    /**\r\n     * Loads a workbook from file.\r\n     * @param {string} path - The path to the workbook.\r\n     * @param {{}} [opts] - Options\r\n     * @returns {Promise.<Workbook>} The workbook.\r\n     * @ignore\r\n     */\n\n  }, {\n    key: \"fromFileAsync\",\n    value: function fromFileAsync(path, opts) {\n      if (process.browser) throw new Error(\"Workbook.fromFileAsync is not supported in the browser\");\n      return new externals.Promise(function (resolve, reject) {\n        fs.readFile(path, function (err, data) {\n          if (err) return reject(err);\n          resolve(data);\n        });\n      }).then(function (data) {\n        return Workbook.fromDataAsync(data, opts);\n      });\n    }\n  }]);\n\n  return Workbook;\n}();\n/**\r\n * The XLSX mime type.\r\n * @type {string}\r\n * @ignore\r\n */\n\n\nWorkbook.MIME_TYPE = \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\";\nmodule.exports = Workbook;\n/*\r\nxl/workbook.xml\r\n\r\n<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\r\n<workbook xmlns=\"http://schemas.openxmlformats.org/spreadsheetml/2006/main\" xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\" xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" mc:Ignorable=\"x15\" xmlns:x15=\"http://schemas.microsoft.com/office/spreadsheetml/2010/11/main\">\r\n\t<fileVersion appName=\"xl\" lastEdited=\"7\" lowestEdited=\"7\" rupBuild=\"16925\"/>\r\n\t<workbookPr defaultThemeVersion=\"164011\"/>\r\n\t<mc:AlternateContent xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\">\r\n\t\t<mc:Choice Requires=\"x15\">\r\n\t\t\t<x15ac:absPath url=\"\\path\\to\\file\" xmlns:x15ac=\"http://schemas.microsoft.com/office/spreadsheetml/2010/11/ac\"/>\r\n\t\t</mc:Choice>\r\n\t</mc:AlternateContent>\r\n\t<bookViews>\r\n\t\t<workbookView xWindow=\"3720\" yWindow=\"0\" windowWidth=\"27870\" windowHeight=\"12795\"/>\r\n\t</bookViews>\r\n\t<sheets>\r\n\t\t<sheet name=\"Sheet1\" sheetId=\"1\" r:id=\"rId1\"/>\r\n\t</sheets>\r\n\t<calcPr calcId=\"171027\"/>\r\n\t<extLst>\r\n\t\t<ext uri=\"{140A7094-0E35-4892-8432-C4D2E57EDEB5}\" xmlns:x15=\"http://schemas.microsoft.com/office/spreadsheetml/2010/11/main\">\r\n\t\t\t<x15:workbookPr chartTrackingRefBase=\"1\"/>\r\n\t\t</ext>\r\n\t</extLst>\r\n</workbook>\r\n// */","\"use strict\"; // Export as a function as proxyquireify has trouble with constant exports.\n\nmodule.exports = function () {\n  return Buffer.from(\"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\", \"base64\");\n};","\"use strict\";\n\nfunction _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nvar _ = require(\"lodash\");\n\nvar Cell = require(\"./Cell\");\n\nvar Row = require(\"./Row\");\n\nvar Column = require(\"./Column\");\n\nvar Range = require(\"./Range\");\n\nvar Relationships = require(\"./Relationships\");\n\nvar xmlq = require(\"./xmlq\");\n\nvar regexify = require(\"./regexify\");\n\nvar addressConverter = require(\"./addressConverter\");\n\nvar ArgHandler = require(\"./ArgHandler\");\n\nvar colorIndexes = require(\"./colorIndexes\");\n\nvar PageBreaks = require(\"./PageBreaks\"); // Order of the nodes as defined by the spec.\n\n\nvar nodeOrder = [\"sheetPr\", \"dimension\", \"sheetViews\", \"sheetFormatPr\", \"cols\", \"sheetData\", \"sheetCalcPr\", \"sheetProtection\", \"autoFilter\", \"protectedRanges\", \"scenarios\", \"autoFilter\", \"sortState\", \"dataConsolidate\", \"customSheetViews\", \"mergeCells\", \"phoneticPr\", \"conditionalFormatting\", \"dataValidations\", \"hyperlinks\", \"printOptions\", \"pageMargins\", \"pageSetup\", \"headerFooter\", \"rowBreaks\", \"colBreaks\", \"customProperties\", \"cellWatches\", \"ignoredErrors\", \"smartTags\", \"drawing\", \"drawingHF\", \"legacyDrawing\", \"legacyDrawingHF\", \"picture\", \"oleObjects\", \"controls\", \"webPublishItems\", \"tableParts\", \"extLst\"];\n/**\r\n * A worksheet.\r\n */\n\nvar Sheet =\n/*#__PURE__*/\nfunction () {\n  // /**\n  //  * Creates a new instance of Sheet.\n  //  * @param {Workbook} workbook - The parent workbook.\n  //  * @param {{}} idNode - The sheet ID node (from the parent workbook).\n  //  * @param {{}} node - The sheet node.\n  //  * @param {{}} [relationshipsNode] - The optional sheet relationships node.\n  //  */\n  function Sheet(workbook, idNode, node, relationshipsNode) {\n    _classCallCheck(this, Sheet);\n\n    this._init(workbook, idNode, node, relationshipsNode);\n  }\n  /* PUBLIC */\n\n  /**\r\n   * Gets a value indicating whether the sheet is the active sheet in the workbook.\r\n   * @returns {boolean} True if active, false otherwise.\r\n   */\n\n  /**\r\n  * Make the sheet the active sheet in the workkbok.\r\n  * @param {boolean} active - Must be set to `true`. Deactivating directly is not supported. To deactivate, you should activate a different sheet instead.\r\n  * @returns {Sheet} The sheet.\r\n  */\n\n\n  _createClass(Sheet, [{\n    key: \"active\",\n    value: function active() {\n      var _this = this;\n\n      return new ArgHandler('Sheet.active')[\"case\"](function () {\n        return _this.workbook().activeSheet() === _this;\n      })[\"case\"]('boolean', function (active) {\n        if (!active) throw new Error(\"Deactivating sheet directly not supported. Activate a different sheet instead.\");\n\n        _this.workbook().activeSheet(_this);\n\n        return _this;\n      }).handle(arguments);\n    }\n    /**\r\n     * Get the active cell in the sheet.\r\n     * @returns {Cell} The active cell.\r\n     */\n\n    /**\r\n    * Set the active cell in the workbook.\r\n    * @param {string|Cell} cell - The cell or address of cell to activate.\r\n    * @returns {Sheet} The sheet.\r\n    */\n\n    /**\r\n    * Set the active cell in the workbook by row and column.\r\n    * @param {number} rowNumber - The row number of the cell.\r\n    * @param {string|number} columnNameOrNumber - The column name or number of the cell.\r\n    * @returns {Sheet} The sheet.\r\n    */\n\n  }, {\n    key: \"activeCell\",\n    value: function activeCell() {\n      var _this2 = this;\n\n      var sheetViewNode = this._getOrCreateSheetViewNode();\n\n      var selectionNode = xmlq.findChild(sheetViewNode, \"selection\");\n      return new ArgHandler('Sheet.activeCell')[\"case\"](function () {\n        var cellAddress = selectionNode ? selectionNode.attributes.activeCell : \"A1\";\n        return _this2.cell(cellAddress);\n      })[\"case\"](['number', '*'], function (rowNumber, columnNameOrNumber) {\n        var cell = _this2.cell(rowNumber, columnNameOrNumber);\n\n        return _this2.activeCell(cell);\n      })[\"case\"]('*', function (cell) {\n        if (!selectionNode) {\n          selectionNode = {\n            name: \"selection\",\n            attributes: {},\n            children: []\n          };\n          xmlq.appendChild(sheetViewNode, selectionNode);\n        }\n\n        if (!(cell instanceof Cell)) cell = _this2.cell(cell);\n        selectionNode.attributes.activeCell = selectionNode.attributes.sqref = cell.address();\n        return _this2;\n      }).handle(arguments);\n    }\n    /**\r\n     * Gets the cell with the given address.\r\n     * @param {string} address - The address of the cell.\r\n     * @returns {Cell} The cell.\r\n     */\n\n    /**\r\n    * Gets the cell with the given row and column numbers.\r\n    * @param {number} rowNumber - The row number of the cell.\r\n    * @param {string|number} columnNameOrNumber - The column name or number of the cell.\r\n    * @returns {Cell} The cell.\r\n    */\n\n  }, {\n    key: \"cell\",\n    value: function cell() {\n      var _this3 = this;\n\n      return new ArgHandler('Sheet.cell')[\"case\"]('string', function (address) {\n        var ref = addressConverter.fromAddress(address);\n        if (ref.type !== 'cell') throw new Error('Sheet.cell: Invalid address.');\n        return _this3.row(ref.rowNumber).cell(ref.columnNumber);\n      })[\"case\"](['number', '*'], function (rowNumber, columnNameOrNumber) {\n        return _this3.row(rowNumber).cell(columnNameOrNumber);\n      }).handle(arguments);\n    }\n    /**\r\n     * Gets a column in the sheet.\r\n     * @param {string|number} columnNameOrNumber - The name or number of the column.\r\n     * @returns {Column} The column.\r\n     */\n\n  }, {\n    key: \"column\",\n    value: function column(columnNameOrNumber) {\n      var columnNumber = typeof columnNameOrNumber === \"string\" ? addressConverter.columnNameToNumber(columnNameOrNumber) : columnNameOrNumber; // If we're already created a column for this column number, return it.\n\n      if (this._columns[columnNumber]) return this._columns[columnNumber]; // We need to create a new column, which requires a backing col node. There may already exist a node whose min/max cover our column.\n      // First, see if there is an existing col node.\n\n      var existingColNode = this._colNodes[columnNumber];\n      var colNode;\n\n      if (existingColNode) {\n        // If the existing node covered earlier columns than the new one, we need to have a col node to cover the min up to our new node.\n        if (existingColNode.attributes.min < columnNumber) {\n          // Clone the node and set the max to the column before our new col.\n          var beforeColNode = _.cloneDeep(existingColNode);\n\n          beforeColNode.attributes.max = columnNumber - 1; // Update the col nodes cache.\n\n          for (var i = beforeColNode.attributes.min; i <= beforeColNode.attributes.max; i++) {\n            this._colNodes[i] = beforeColNode;\n          }\n        } // Make a clone for the new column. Set the min/max to the column number and cache it.\n\n\n        colNode = _.cloneDeep(existingColNode);\n        colNode.attributes.min = columnNumber;\n        colNode.attributes.max = columnNumber;\n        this._colNodes[columnNumber] = colNode; // If the max of the existing node is greater than the nre one, create a col node for that too.\n\n        if (existingColNode.attributes.max > columnNumber) {\n          var afterColNode = _.cloneDeep(existingColNode);\n\n          afterColNode.attributes.min = columnNumber + 1;\n\n          for (var _i = afterColNode.attributes.min; _i <= afterColNode.attributes.max; _i++) {\n            this._colNodes[_i] = afterColNode;\n          }\n        }\n      } else {\n        // The was no existing node so create a new one.\n        colNode = {\n          name: 'col',\n          attributes: {\n            min: columnNumber,\n            max: columnNumber\n          },\n          children: []\n        };\n        this._colNodes[columnNumber] = colNode;\n      } // Create the new column and cache it.\n\n\n      var column = new Column(this, colNode);\n      this._columns[columnNumber] = column;\n      return column;\n    }\n    /**\r\n     * Gets a defined name scoped to the sheet.\r\n     * @param {string} name - The defined name.\r\n     * @returns {undefined|string|Cell|Range|Row|Column} What the defined name refers to or undefined if not found. Will return the string formula if not a Row, Column, Cell, or Range.\r\n     */\n\n    /**\r\n    * Set a defined name scoped to the sheet.\r\n    * @param {string} name - The defined name.\r\n    * @param {string|Cell|Range|Row|Column} refersTo - What the name refers to.\r\n    * @returns {Workbook} The workbook.\r\n    */\n\n  }, {\n    key: \"definedName\",\n    value: function definedName() {\n      var _this4 = this;\n\n      return new ArgHandler(\"Workbook.definedName\")[\"case\"]('string', function (name) {\n        return _this4.workbook().scopedDefinedName(_this4, name);\n      })[\"case\"](['string', '*'], function (name, refersTo) {\n        _this4.workbook().scopedDefinedName(_this4, name, refersTo);\n\n        return _this4;\n      }).handle(arguments);\n    }\n    /**\r\n     * Deletes the sheet and returns the parent workbook.\r\n     * @returns {Workbook} The workbook.\r\n     */\n\n  }, {\n    key: \"delete\",\n    value: function _delete() {\n      this.workbook().deleteSheet(this);\n      return this.workbook();\n    }\n    /**\r\n     * Find the given pattern in the sheet and optionally replace it.\r\n     * @param {string|RegExp} pattern - The pattern to look for. Providing a string will result in a case-insensitive substring search. Use a RegExp for more sophisticated searches.\r\n     * @param {string|function} [replacement] - The text to replace or a String.replace callback function. If pattern is a string, all occurrences of the pattern in each cell will be replaced.\r\n     * @returns {Array.<Cell>} The matching cells.\r\n     */\n\n  }, {\n    key: \"find\",\n    value: function find(pattern, replacement) {\n      pattern = regexify(pattern);\n      var matches = [];\n\n      this._rows.forEach(function (row) {\n        if (!row) return;\n        matches = matches.concat(row.find(pattern, replacement));\n      });\n\n      return matches;\n    }\n    /**\r\n     * Gets a value indicating whether this sheet's grid lines are visible.\r\n     * @returns {boolean} True if selected, false if not.\r\n     */\n\n    /**\r\n    * Sets whether this sheet's grid lines are visible.\r\n    * @param {boolean} selected - True to make visible, false to hide.\r\n    * @returns {Sheet} The sheet.\r\n    */\n\n  }, {\n    key: \"gridLinesVisible\",\n    value: function gridLinesVisible() {\n      var _this5 = this;\n\n      var sheetViewNode = this._getOrCreateSheetViewNode();\n\n      return new ArgHandler('Sheet.gridLinesVisible')[\"case\"](function () {\n        return sheetViewNode.attributes.showGridLines === 1 || sheetViewNode.attributes.showGridLines === undefined;\n      })[\"case\"]('boolean', function (visible) {\n        sheetViewNode.attributes.showGridLines = visible ? 1 : 0;\n        return _this5;\n      }).handle(arguments);\n    }\n    /**\r\n     * Gets a value indicating if the sheet is hidden or not.\r\n     * @returns {boolean|string} True if hidden, false if visible, and 'very' if very hidden.\r\n     */\n\n    /**\r\n    * Set whether the sheet is hidden or not.\r\n    * @param {boolean|string} hidden - True to hide, false to show, and 'very' to make very hidden.\r\n    * @returns {Sheet} The sheet.\r\n    */\n\n  }, {\n    key: \"hidden\",\n    value: function hidden() {\n      var _this6 = this;\n\n      return new ArgHandler('Sheet.hidden')[\"case\"](function () {\n        if (_this6._idNode.attributes.state === 'hidden') return true;\n        if (_this6._idNode.attributes.state === 'veryHidden') return \"very\";\n        return false;\n      })[\"case\"]('*', function (hidden) {\n        if (hidden) {\n          var visibleSheets = _.filter(_this6.workbook().sheets(), function (sheet) {\n            return !sheet.hidden();\n          });\n\n          if (visibleSheets.length === 1 && visibleSheets[0] === _this6) {\n            throw new Error(\"This sheet may not be hidden as a workbook must contain at least one visible sheet.\");\n          } // If activate, activate the first other visible sheet.\n\n\n          if (_this6.active()) {\n            var activeIndex = visibleSheets[0] === _this6 ? 1 : 0;\n            visibleSheets[activeIndex].active(true);\n          }\n        }\n\n        if (hidden === 'very') _this6._idNode.attributes.state = 'veryHidden';else if (hidden) _this6._idNode.attributes.state = 'hidden';else delete _this6._idNode.attributes.state;\n        return _this6;\n      }).handle(arguments);\n    }\n    /**\r\n     * Move the sheet.\r\n     * @param {number|string|Sheet} [indexOrBeforeSheet] The index to move the sheet to or the sheet (or name of sheet) to move this sheet before. Omit this argument to move to the end of the workbook.\r\n     * @returns {Sheet} The sheet.\r\n     */\n\n  }, {\n    key: \"move\",\n    value: function move(indexOrBeforeSheet) {\n      this.workbook().moveSheet(this, indexOrBeforeSheet);\n      return this;\n    }\n    /**\r\n     * Get the name of the sheet.\r\n     * @returns {string} The sheet name.\r\n     */\n\n    /**\r\n    * Set the name of the sheet. *Note: this method does not rename references to the sheet so formulas, etc. can be broken. Use with caution!*\r\n    * @param {string} name - The name to set to the sheet.\r\n    * @returns {Sheet} The sheet.\r\n    */\n\n  }, {\n    key: \"name\",\n    value: function name() {\n      var _this7 = this;\n\n      return new ArgHandler('Sheet.name')[\"case\"](function () {\n        return \"\".concat(_this7._idNode.attributes.name);\n      })[\"case\"]('string', function (name) {\n        _this7._idNode.attributes.name = name;\n        return _this7;\n      }).handle(arguments);\n    }\n    /**\r\n     * Gets a range from the given range address.\r\n     * @param {string} address - The range address (e.g. 'A1:B3').\r\n     * @returns {Range} The range.\r\n     */\n\n    /**\r\n    * Gets a range from the given cells or cell addresses.\r\n    * @param {string|Cell} startCell - The starting cell or cell address (e.g. 'A1').\r\n    * @param {string|Cell} endCell - The ending cell or cell address (e.g. 'B3').\r\n    * @returns {Range} The range.\r\n    */\n\n    /**\r\n    * Gets a range from the given row numbers and column names or numbers.\r\n    * @param {number} startRowNumber - The starting cell row number.\r\n    * @param {string|number} startColumnNameOrNumber - The starting cell column name or number.\r\n    * @param {number} endRowNumber - The ending cell row number.\r\n    * @param {string|number} endColumnNameOrNumber - The ending cell column name or number.\r\n    * @returns {Range} The range.\r\n    */\n\n  }, {\n    key: \"range\",\n    value: function range() {\n      var _this8 = this;\n\n      return new ArgHandler('Sheet.range')[\"case\"]('string', function (address) {\n        var ref = addressConverter.fromAddress(address);\n        if (ref.type !== 'range') throw new Error('Sheet.range: Invalid address');\n        return _this8.range(ref.startRowNumber, ref.startColumnNumber, ref.endRowNumber, ref.endColumnNumber);\n      })[\"case\"](['*', '*'], function (startCell, endCell) {\n        if (typeof startCell === \"string\") startCell = _this8.cell(startCell);\n        if (typeof endCell === \"string\") endCell = _this8.cell(endCell);\n        return new Range(startCell, endCell);\n      })[\"case\"](['number', '*', 'number', '*'], function (startRowNumber, startColumnNameOrNumber, endRowNumber, endColumnNameOrNumber) {\n        return _this8.range(_this8.cell(startRowNumber, startColumnNameOrNumber), _this8.cell(endRowNumber, endColumnNameOrNumber));\n      }).handle(arguments);\n    }\n    /**\r\n     * Unsets sheet autoFilter.\r\n     * @returns {Sheet} This sheet.\r\n     */\n\n    /**\r\n    * Sets sheet autoFilter to a Range.\r\n    * @param {Range} range - The autoFilter range.\r\n    * @returns {Sheet} This sheet.\r\n    */\n\n  }, {\n    key: \"autoFilter\",\n    value: function autoFilter(range) {\n      this._autoFilter = range;\n      return this;\n    }\n    /**\r\n     * Gets the row with the given number.\r\n     * @param {number} rowNumber - The row number.\r\n     * @returns {Row} The row with the given number.\r\n     */\n\n  }, {\n    key: \"row\",\n    value: function row(rowNumber) {\n      if (rowNumber < 1) throw new RangeError(\"Invalid row number \".concat(rowNumber, \". Remember that spreadsheets use 1-based indexing.\"));\n      if (this._rows[rowNumber]) return this._rows[rowNumber];\n      var rowNode = {\n        name: 'row',\n        attributes: {\n          r: rowNumber\n        },\n        children: []\n      };\n      var row = new Row(this, rowNode);\n      this._rows[rowNumber] = row;\n      return row;\n    }\n    /**\r\n     * Get the tab color. (See style [Color](#color).)\r\n     * @returns {undefined|Color} The color or undefined if not set.\r\n     */\n\n    /**\r\n    * Sets the tab color. (See style [Color](#color).)\r\n    * @returns {Color|string|number} color - Color of the tab. If string, will set an RGB color. If number, will set a theme color.\r\n    */\n\n  }, {\n    key: \"tabColor\",\n    value: function tabColor() {\n      var _this9 = this;\n\n      return new ArgHandler(\"Sheet.tabColor\")[\"case\"](function () {\n        var tabColorNode = xmlq.findChild(_this9._sheetPrNode, \"tabColor\");\n        if (!tabColorNode) return;\n        var color = {};\n        if (tabColorNode.attributes.hasOwnProperty('rgb')) color.rgb = tabColorNode.attributes.rgb;else if (tabColorNode.attributes.hasOwnProperty('theme')) color.theme = tabColorNode.attributes.theme;else if (tabColorNode.attributes.hasOwnProperty('indexed')) color.rgb = colorIndexes[tabColorNode.attributes.indexed];\n        if (tabColorNode.attributes.hasOwnProperty('tint')) color.tint = tabColorNode.attributes.tint;\n        return color;\n      })[\"case\"](\"string\", function (rgb) {\n        return _this9.tabColor({\n          rgb: rgb\n        });\n      })[\"case\"](\"integer\", function (theme) {\n        return _this9.tabColor({\n          theme: theme\n        });\n      })[\"case\"](\"nil\", function () {\n        xmlq.removeChild(_this9._sheetPrNode, \"tabColor\");\n        return _this9;\n      })[\"case\"](\"object\", function (color) {\n        var tabColorNode = xmlq.appendChildIfNotFound(_this9._sheetPrNode, \"tabColor\");\n        xmlq.setAttributes(tabColorNode, {\n          rgb: color.rgb && color.rgb.toUpperCase(),\n          indexed: null,\n          theme: color.theme,\n          tint: color.tint\n        });\n        return _this9;\n      }).handle(arguments);\n    }\n    /**\r\n     * Gets a value indicating whether this sheet is selected.\r\n     * @returns {boolean} True if selected, false if not.\r\n     */\n\n    /**\r\n    * Sets whether this sheet is selected.\r\n    * @param {boolean} selected - True to select, false to deselected.\r\n    * @returns {Sheet} The sheet.\r\n    */\n\n  }, {\n    key: \"tabSelected\",\n    value: function tabSelected() {\n      var _this10 = this;\n\n      var sheetViewNode = this._getOrCreateSheetViewNode();\n\n      return new ArgHandler('Sheet.tabSelected')[\"case\"](function () {\n        return sheetViewNode.attributes.tabSelected === 1;\n      })[\"case\"]('boolean', function (selected) {\n        if (selected) sheetViewNode.attributes.tabSelected = 1;else delete sheetViewNode.attributes.tabSelected;\n        return _this10;\n      }).handle(arguments);\n    }\n    /**\r\n     * Get the range of cells in the sheet that have contained a value or style at any point. Useful for extracting the entire sheet contents.\r\n     * @returns {Range|undefined} The used range or undefined if no cells in the sheet are used.\r\n     */\n\n  }, {\n    key: \"usedRange\",\n    value: function usedRange() {\n      var minRowNumber = _.findIndex(this._rows);\n\n      var maxRowNumber = this._rows.length - 1;\n      var minColumnNumber = 0;\n      var maxColumnNumber = 0;\n\n      for (var i = 0; i < this._rows.length; i++) {\n        var row = this._rows[i];\n        if (!row) continue;\n        var minUsedColumnNumber = row.minUsedColumnNumber();\n        var maxUsedColumnNumber = row.maxUsedColumnNumber();\n        if (minUsedColumnNumber > 0 && (!minColumnNumber || minUsedColumnNumber < minColumnNumber)) minColumnNumber = minUsedColumnNumber;\n        if (maxUsedColumnNumber > 0 && (!maxColumnNumber || maxUsedColumnNumber > maxColumnNumber)) maxColumnNumber = maxUsedColumnNumber;\n      } // Return undefined if nothing in the sheet is used.\n\n\n      if (minRowNumber <= 0 || minColumnNumber <= 0 || maxRowNumber <= 0 || maxColumnNumber <= 0) return;\n      return this.range(minRowNumber, minColumnNumber, maxRowNumber, maxColumnNumber);\n    }\n    /**\r\n     * Gets the parent workbook.\r\n     * @returns {Workbook} The parent workbook.\r\n     */\n\n  }, {\n    key: \"workbook\",\n    value: function workbook() {\n      return this._workbook;\n    }\n    /**\r\n     * Gets all page breaks.\r\n     * @returns {{}} the object holds both vertical and horizontal PageBreaks.\r\n     */\n\n  }, {\n    key: \"pageBreaks\",\n    value: function pageBreaks() {\n      return this._pageBreaks;\n    }\n    /**\r\n     * Gets the vertical page breaks.\r\n     * @returns {PageBreaks} vertical PageBreaks.\r\n     */\n\n  }, {\n    key: \"verticalPageBreaks\",\n    value: function verticalPageBreaks() {\n      return this._pageBreaks.colBreaks;\n    }\n    /**\r\n     * Gets the horizontal page breaks.\r\n     * @returns {PageBreaks} horizontal PageBreaks.\r\n     */\n\n  }, {\n    key: \"horizontalPageBreaks\",\n    value: function horizontalPageBreaks() {\n      return this._pageBreaks.rowBreaks;\n    }\n    /* INTERNAL */\n\n    /**\r\n     * Clear cells that are using a given shared formula ID.\r\n     * @param {number} sharedFormulaId - The shared formula ID.\r\n     * @returns {undefined}\r\n     * @ignore\r\n     */\n\n  }, {\n    key: \"clearCellsUsingSharedFormula\",\n    value: function clearCellsUsingSharedFormula(sharedFormulaId) {\n      this._rows.forEach(function (row) {\n        if (!row) return;\n        row.clearCellsUsingSharedFormula(sharedFormulaId);\n      });\n    }\n    /**\r\n     * Get an existing column style ID.\r\n     * @param {number} columnNumber - The column number.\r\n     * @returns {undefined|number} The style ID.\r\n     * @ignore\r\n     */\n\n  }, {\n    key: \"existingColumnStyleId\",\n    value: function existingColumnStyleId(columnNumber) {\n      // This will work after setting Column.style because Column updates the attributes live.\n      var colNode = this._colNodes[columnNumber];\n      return colNode && colNode.attributes.style;\n    }\n    /**\r\n     * Call a callback for each column number that has a node defined for it.\r\n     * @param {Function} callback - The callback.\r\n     * @returns {undefined}\r\n     * @ignore\r\n     */\n\n  }, {\n    key: \"forEachExistingColumnNumber\",\n    value: function forEachExistingColumnNumber(callback) {\n      _.forEach(this._colNodes, function (node, columnNumber) {\n        if (!node) return;\n        callback(columnNumber);\n      });\n    }\n    /**\r\n     * Call a callback for each existing row.\r\n     * @param {Function} callback - The callback.\r\n     * @returns {undefined}\r\n     * @ignore\r\n     */\n\n  }, {\n    key: \"forEachExistingRow\",\n    value: function forEachExistingRow(callback) {\n      _.forEach(this._rows, function (row, rowNumber) {\n        if (row) callback(row, rowNumber);\n      });\n\n      return this;\n    }\n    /**\r\n     * Get the hyperlink attached to the cell with the given address.\r\n     * @param {string} address - The address of the hyperlinked cell.\r\n     * @returns {string|undefined} The hyperlink or undefined if not set.\r\n     */\n\n    /**\r\n    * Set the hyperlink on the cell with the given address.\r\n    * @param {string} address - The address of the hyperlinked cell.\r\n    * @param {string} hyperlink - The hyperlink to set or undefined to clear.\r\n    * @param {boolean} [internal] - The flag to force hyperlink to be internal. If true, then autodetect is skipped.\r\n    * @returns {Sheet} The sheet.\r\n    */\n\n    /**\r\n    * Set the hyperlink on the cell with the given address. If opts is a Cell an internal hyperlink is added.\r\n    * @param {string} address - The address of the hyperlinked cell.\r\n    * @param {object|Cell} opts - Options.\r\n    * @returns {Sheet} The sheet.\r\n    * @ignore\r\n    */\n\n    /**\r\n    * Set the hyperlink on the cell with the given address and options.\r\n    * @param {string} address - The address of the hyperlinked cell.\r\n    * @param {{}|Cell} opts - Options or Cell. If opts is a Cell then an internal hyperlink is added.\r\n    * @param {string|Cell} [opts.hyperlink] - The hyperlink to set, can be a Cell or an internal/external string.\r\n    * @param {string} [opts.tooltip] - Additional text to help the user understand more about the hyperlink.\r\n    * @param {string} [opts.email] - Email address, ignored if opts.hyperlink is set.\r\n    * @param {string} [opts.emailSubject] - Email subject, ignored if opts.hyperlink is set.\r\n    * @returns {Sheet} The sheet.\r\n    */\n\n  }, {\n    key: \"hyperlink\",\n    value: function hyperlink() {\n      var _this11 = this;\n\n      return new ArgHandler('Sheet.hyperlink')[\"case\"]('string', function (address) {\n        var hyperlinkNode = _this11._hyperlinks[address];\n        if (!hyperlinkNode) return;\n\n        var relationship = _this11._relationships.findById(hyperlinkNode.attributes['r:id']);\n\n        return relationship && relationship.attributes.Target;\n      })[\"case\"](['string', 'nil'], function (address) {\n        // TODO: delete relationship\n        delete _this11._hyperlinks[address];\n        return _this11;\n      })[\"case\"](['string', 'string'], function (address, hyperlink) {\n        return _this11.hyperlink(address, hyperlink, false);\n      })[\"case\"](['string', 'string', 'boolean'], function (address, hyperlink, internal) {\n        var isHyperlinkInternalAddress = internal || addressConverter.fromAddress(hyperlink);\n        var nodeAttributes;\n\n        if (isHyperlinkInternalAddress) {\n          nodeAttributes = {\n            ref: address,\n            location: hyperlink,\n            display: hyperlink\n          };\n        } else {\n          var relationship = _this11._relationships.add(\"hyperlink\", hyperlink, \"External\");\n\n          nodeAttributes = {\n            ref: address,\n            'r:id': relationship.attributes.Id\n          };\n        }\n\n        _this11._hyperlinks[address] = {\n          name: 'hyperlink',\n          attributes: nodeAttributes,\n          children: []\n        };\n        return _this11;\n      })[\"case\"](['string', 'object'], function (address, opts) {\n        if (opts instanceof Cell) {\n          var cell = opts;\n          var hyperlink = cell.address({\n            includeSheetName: true\n          });\n\n          _this11.hyperlink(address, hyperlink, true);\n        } else if (opts.hyperlink) {\n          _this11.hyperlink(address, opts.hyperlink);\n        } else if (opts.email) {\n          var email = opts.email;\n          var subject = opts.emailSubject || '';\n\n          _this11.hyperlink(address, encodeURI(\"mailto:\".concat(email, \"?subject=\").concat(subject)));\n        }\n\n        var hyperlinkNode = _this11._hyperlinks[address];\n\n        if (hyperlinkNode) {\n          if (opts.tooltip) {\n            hyperlinkNode.attributes.tooltip = opts.tooltip;\n          }\n        }\n\n        return _this11;\n      }).handle(arguments);\n    }\n    /**\r\n     * Increment and return the max shared formula ID.\r\n     * @returns {number} The new max shared formula ID.\r\n     * @ignore\r\n     */\n\n  }, {\n    key: \"incrementMaxSharedFormulaId\",\n    value: function incrementMaxSharedFormulaId() {\n      return ++this._maxSharedFormulaId;\n    }\n    /**\r\n     * Get a value indicating whether the cells in the given address are merged.\r\n     * @param {string} address - The address to check.\r\n     * @returns {boolean} True if merged, false if not merged.\r\n     * @ignore\r\n     */\n\n    /**\r\n    * Merge/unmerge cells by adding/removing a mergeCell entry.\r\n    * @param {string} address - The address to merge.\r\n    * @param {boolean} merged - True to merge, false to unmerge.\r\n    * @returns {Sheet} The sheet.\r\n    * @ignore\r\n    */\n\n  }, {\n    key: \"merged\",\n    value: function merged() {\n      var _this12 = this;\n\n      return new ArgHandler('Sheet.merge')[\"case\"]('string', function (address) {\n        return _this12._mergeCells.hasOwnProperty(address);\n      })[\"case\"](['string', '*'], function (address, merge) {\n        if (merge) {\n          _this12._mergeCells[address] = {\n            name: 'mergeCell',\n            attributes: {\n              ref: address\n            },\n            children: []\n          };\n        } else {\n          delete _this12._mergeCells[address];\n        }\n\n        return _this12;\n      }).handle(arguments);\n    }\n    /**\r\n     * Gets a Object or undefined of the cells in the given address.\r\n     * @param {string} address - The address to check.\r\n     * @returns {object|boolean} Object or false if not set\r\n     * @ignore\r\n     */\n\n    /**\r\n    * Removes dataValidation at the given address\r\n    * @param {string} address - The address to remove.\r\n    * @param {boolean} obj - false to delete.\r\n    * @returns {boolean} true if removed.\r\n    * @ignore\r\n    */\n\n    /**\r\n    * Add dataValidation to cells at the given address if object or string\r\n    * @param {string} address - The address to set.\r\n    * @param {object|string} obj - Object or String to set\r\n    * @returns {Sheet} The sheet.\r\n    * @ignore\r\n    */\n\n  }, {\n    key: \"dataValidation\",\n    value: function dataValidation() {\n      var _this13 = this;\n\n      return new ArgHandler('Sheet.dataValidation')[\"case\"]('string', function (address) {\n        if (_this13._dataValidations[address]) {\n          return {\n            type: _this13._dataValidations[address].attributes.type,\n            allowBlank: _this13._dataValidations[address].attributes.allowBlank,\n            showInputMessage: _this13._dataValidations[address].attributes.showInputMessage,\n            prompt: _this13._dataValidations[address].attributes.prompt,\n            promptTitle: _this13._dataValidations[address].attributes.promptTitle,\n            showErrorMessage: _this13._dataValidations[address].attributes.showErrorMessage,\n            error: _this13._dataValidations[address].attributes.error,\n            errorTitle: _this13._dataValidations[address].attributes.errorTitle,\n            operator: _this13._dataValidations[address].attributes.operator,\n            formula1: _this13._dataValidations[address].children[0].children[0],\n            formula2: _this13._dataValidations[address].children[1] ? _this13._dataValidations[address].children[1].children[0] : undefined\n          };\n        } else {\n          return false;\n        }\n      })[\"case\"](['string', 'boolean'], function (address, obj) {\n        if (_this13._dataValidations[address]) {\n          if (obj === false) return delete _this13._dataValidations[address];\n        } else {\n          return false;\n        }\n      })[\"case\"](['string', '*'], function (address, obj) {\n        if (typeof obj === 'string') {\n          _this13._dataValidations[address] = {\n            name: 'dataValidation',\n            attributes: {\n              type: 'list',\n              allowBlank: false,\n              showInputMessage: false,\n              prompt: '',\n              promptTitle: '',\n              showErrorMessage: false,\n              error: '',\n              errorTitle: '',\n              operator: '',\n              sqref: address\n            },\n            children: [{\n              name: 'formula1',\n              atrributes: {},\n              children: [obj]\n            }, {\n              name: 'formula2',\n              atrributes: {},\n              children: ['']\n            }]\n          };\n        } else if (_typeof(obj) === 'object') {\n          _this13._dataValidations[address] = {\n            name: 'dataValidation',\n            attributes: {\n              type: obj.type ? obj.type : 'list',\n              allowBlank: obj.allowBlank,\n              showInputMessage: obj.showInputMessage,\n              prompt: obj.prompt,\n              promptTitle: obj.promptTitle,\n              showErrorMessage: obj.showErrorMessage,\n              error: obj.error,\n              errorTitle: obj.errorTitle,\n              operator: obj.operator,\n              sqref: address\n            },\n            children: [{\n              name: 'formula1',\n              atrributes: {},\n              children: [obj.formula1]\n            }, {\n              name: 'formula2',\n              atrributes: {},\n              children: [obj.formula2]\n            }]\n          };\n        }\n\n        return _this13;\n      }).handle(arguments);\n    }\n    /**\r\n     * Convert the sheet to a collection of XML objects.\r\n     * @returns {{}} The XML forms.\r\n     * @ignore\r\n     */\n\n  }, {\n    key: \"toXmls\",\n    value: function toXmls() {\n      var _this14 = this;\n\n      // Shallow clone the node so we don't have to remove these children later if they don't belong.\n      var node = _.clone(this._node);\n\n      node.children = node.children.slice(); // Add the columns if needed.\n\n      this._colsNode.children = _.filter(this._colNodes, function (colNode, i) {\n        // Columns should only be present if they have attributes other than min/max.\n        return colNode && i === colNode.attributes.min && Object.keys(colNode.attributes).length > 2;\n      });\n\n      if (this._colsNode.children.length) {\n        xmlq.insertInOrder(node, this._colsNode, nodeOrder);\n      } // Add the hyperlinks if needed.\n\n\n      this._hyperlinksNode.children = _.values(this._hyperlinks);\n\n      if (this._hyperlinksNode.children.length) {\n        xmlq.insertInOrder(node, this._hyperlinksNode, nodeOrder);\n      } // Add the printOptions if needed.\n\n\n      if (this._printOptionsNode) {\n        if (Object.keys(this._printOptionsNode.attributes).length) {\n          xmlq.insertInOrder(node, this._printOptionsNode, nodeOrder);\n        }\n      } // Add the pageMargins if needed.\n\n\n      if (this._pageMarginsNode && this._pageMarginsPresetName) {\n        // Clone to preserve the current state of this sheet.\n        var childNode = _.clone(this._pageMarginsNode);\n\n        if (Object.keys(this._pageMarginsNode.attributes).length) {\n          // Fill in any missing attribute values with presets.\n          childNode.attributes = _.assign(this._pageMarginsPresets[this._pageMarginsPresetName], this._pageMarginsNode.attributes);\n        } else {\n          // No need to fill in, all attributes is currently empty, simply replace.\n          childNode.attributes = this._pageMarginsPresets[this._pageMarginsPresetName];\n        }\n\n        xmlq.insertInOrder(node, childNode, nodeOrder);\n      } // Add the merge cells if needed.\n\n\n      this._mergeCellsNode.children = _.values(this._mergeCells);\n\n      if (this._mergeCellsNode.children.length) {\n        xmlq.insertInOrder(node, this._mergeCellsNode, nodeOrder);\n      } // Add the DataValidation cells if needed.\n\n\n      this._dataValidationsNode.children = _.values(this._dataValidations);\n\n      if (this._dataValidationsNode.children.length) {\n        xmlq.insertInOrder(node, this._dataValidationsNode, nodeOrder);\n      }\n\n      if (this._autoFilter) {\n        xmlq.insertInOrder(node, {\n          name: \"autoFilter\",\n          children: [],\n          attributes: {\n            ref: this._autoFilter.address()\n          }\n        }, nodeOrder);\n      } // Add the PageBreaks nodes if needed.\n\n\n      ['colBreaks', 'rowBreaks'].forEach(function (name) {\n        var breaks = _this14[\"_\".concat(name, \"Node\")];\n\n        if (breaks.attributes.count) {\n          xmlq.insertInOrder(node, breaks, nodeOrder);\n        }\n      });\n      return {\n        id: this._idNode,\n        sheet: node,\n        relationships: this._relationships\n      };\n    }\n    /**\r\n     * Update the max shared formula ID to the given value if greater than current.\r\n     * @param {number} sharedFormulaId - The new shared formula ID.\r\n     * @returns {undefined}\r\n     * @ignore\r\n     */\n\n  }, {\n    key: \"updateMaxSharedFormulaId\",\n    value: function updateMaxSharedFormulaId(sharedFormulaId) {\n      if (sharedFormulaId > this._maxSharedFormulaId) {\n        this._maxSharedFormulaId = sharedFormulaId;\n      }\n    }\n    /**\r\n     * Get the print option given a valid print option attribute.\r\n     * @param {string} attributeName - Attribute name of the printOptions.\r\n     *   gridLines - Used in conjunction with gridLinesSet. If both gridLines and gridlinesSet are true, then grid lines shall print. Otherwise, they shall not (i.e., one or both have false values).\r\n     *   gridLinesSet - Used in conjunction with gridLines. If both gridLines and gridLinesSet are true, then grid lines shall print. Otherwise, they shall not (i.e., one or both have false values).\r\n     *   headings - Print row and column headings.\r\n     *   horizontalCentered - Center on page horizontally when printing.\r\n     *   verticalCentered - Center on page vertically when printing.\r\n     * @returns {boolean}\r\n     */\n\n    /**\r\n    * Set the print option given a valid print option attribute and a value.\r\n    * @param {string} attributeName - Attribute name of the printOptions. See get print option for list of valid attributes.\r\n    * @param {undefined|boolean} attributeEnabled - If `undefined` or `false` then the attribute is removed, otherwise the print option is enabled.\r\n    * @returns {Sheet} The sheet.\r\n    */\n\n  }, {\n    key: \"printOptions\",\n    value: function printOptions() {\n      var _this15 = this;\n\n      var supportedAttributeNames = ['gridLines', 'gridLinesSet', 'headings', 'horizontalCentered', 'verticalCentered'];\n\n      var checkAttributeName = this._getCheckAttributeNameHelper('printOptions', supportedAttributeNames);\n\n      return new ArgHandler('Sheet.printOptions')[\"case\"](['string'], function (attributeName) {\n        checkAttributeName(attributeName);\n        return _this15._printOptionsNode.attributes[attributeName] === 1;\n      })[\"case\"](['string', 'nil'], function (attributeName) {\n        checkAttributeName(attributeName);\n        delete _this15._printOptionsNode.attributes[attributeName];\n        return _this15;\n      })[\"case\"](['string', 'boolean'], function (attributeName, attributeEnabled) {\n        checkAttributeName(attributeName);\n\n        if (attributeEnabled) {\n          _this15._printOptionsNode.attributes[attributeName] = 1;\n          return _this15;\n        } else {\n          return _this15.printOptions(attributeName, undefined);\n        }\n      }).handle(arguments);\n    }\n    /**\r\n     * Get the print option for the gridLines attribute value.\r\n     * @returns {boolean}\r\n     */\n\n    /**\r\n    * Set the print option for the gridLines attribute value.\r\n    * @param {undefined|boolean} enabled - If `undefined` or `false` then attribute is removed, otherwise gridLines is enabled.\r\n    * @returns {Sheet} The sheet.\r\n    */\n\n  }, {\n    key: \"printGridLines\",\n    value: function printGridLines() {\n      var _this16 = this;\n\n      return new ArgHandler('Sheet.gridLines')[\"case\"](function () {\n        return _this16.printOptions('gridLines') && _this16.printOptions('gridLinesSet');\n      })[\"case\"](['nil'], function () {\n        _this16.printOptions('gridLines', undefined);\n\n        _this16.printOptions('gridLinesSet', undefined);\n\n        return _this16;\n      })[\"case\"](['boolean'], function (enabled) {\n        _this16.printOptions('gridLines', enabled);\n\n        _this16.printOptions('gridLinesSet', enabled);\n\n        return _this16;\n      }).handle(arguments);\n    }\n    /**\r\n     * Get the page margin given a valid attribute name.\r\n     * If the value is not yet defined, then it will return the current preset value.\r\n     * @param {string} attributeName - Attribute name of the pageMargins.\r\n     *     left - Left Page Margin in inches.\r\n     *     right - Right page margin in inches.\r\n     *     top - Top Page Margin in inches.\r\n     *     buttom - Bottom Page Margin in inches.\r\n     *     footer - Footer Page Margin in inches.\r\n     *     header - Header Page Margin in inches.\r\n     * @returns {number} the attribute value.\r\n     */\n\n    /**\r\n    * Set the page margin (or override the preset) given an attribute name and a value.\r\n    * @param {string} attributeName - Attribute name of the pageMargins. See get page margin for list of valid attributes.\r\n    * @param {undefined|number|string} attributeStringValue - If `undefined` then set back to preset value, otherwise, set the given attribute value.\r\n    * @returns {Sheet} The sheet.\r\n    */\n\n  }, {\n    key: \"pageMargins\",\n    value: function pageMargins() {\n      var _this17 = this;\n\n      if (this.pageMarginsPreset() === undefined) {\n        throw new Error('Sheet.pageMargins: preset is undefined.');\n      }\n\n      var supportedAttributeNames = ['left', 'right', 'top', 'bottom', 'header', 'footer'];\n\n      var checkAttributeName = this._getCheckAttributeNameHelper('pageMargins', supportedAttributeNames);\n\n      var checkRange = this._getCheckRangeHelper('pageMargins', 0, undefined);\n\n      return new ArgHandler('Sheet.pageMargins')[\"case\"](['string'], function (attributeName) {\n        checkAttributeName(attributeName);\n        var attributeValue = _this17._pageMarginsNode.attributes[attributeName];\n\n        if (attributeValue !== undefined) {\n          return parseFloat(attributeValue);\n        } else if (_this17._pageMarginsPresetName) {\n          return parseFloat(_this17._pageMarginsPresets[_this17._pageMarginsPresetName][attributeName]);\n        } else {\n          return undefined;\n        }\n      })[\"case\"](['string', 'nil'], function (attributeName) {\n        checkAttributeName(attributeName);\n        delete _this17._pageMarginsNode.attributes[attributeName];\n        return _this17;\n      })[\"case\"](['string', 'number'], function (attributeName, attributeNumberValue) {\n        checkAttributeName(attributeName);\n        checkRange(attributeNumberValue);\n        _this17._pageMarginsNode.attributes[attributeName] = attributeNumberValue;\n        return _this17;\n      })[\"case\"](['string', 'string'], function (attributeName, attributeStringValue) {\n        return _this17.pageMargins(attributeName, parseFloat(attributeStringValue));\n      }).handle(arguments);\n    }\n    /**\r\n     * Page margins preset is a set of page margins associated with a name.\r\n     * The page margin preset acts as a fallback when not explicitly defined by `Sheet.pageMargins`.\r\n     * If a sheet already contains page margins, it attempts to auto-detect, otherwise they are defined as the template preset.\r\n     * If no page margins exist, then the preset is undefined and will not be included in the output of `Sheet.toXmls`.\r\n     * Available presets include: normal, wide, narrow, template.\r\n     *\r\n     * Get the page margins preset name. The registered name of a predefined set of attributes.\r\n     * @returns {string} The preset name.\r\n     */\n\n    /**\r\n    * Set the page margins preset by name, clearing any existing/temporary attribute values.\r\n    * @param {undefined|string} presetName - The preset name. If `undefined`, page margins will not be included in the output of `Sheet.toXmls`.\r\n    * @returns {Sheet} The sheet.\r\n    */\n\n    /**\r\n    * Set a new page margins preset by name and attributes object.\r\n    * @param {string} presetName - The preset name.\r\n    * @param {object} presetAttributes - The preset attributes.\r\n    * @returns {Sheet} The sheet.\r\n    */\n\n  }, {\n    key: \"pageMarginsPreset\",\n    value: function pageMarginsPreset() {\n      var _this18 = this;\n\n      return new ArgHandler('Sheet.pageMarginsPreset')[\"case\"](function () {\n        return _this18._pageMarginsPresetName;\n      })[\"case\"](['nil'], function () {\n        // Remove all preset overrides and exclude from sheet\n        _this18._pageMarginsPresetName = undefined; // Remove all preset overrides\n\n        _this18._pageMarginsNode.attributes = {};\n        return _this18;\n      })[\"case\"](['string'], function (presetName) {\n        var checkPresetName = _this18._getCheckAttributeNameHelper('pageMarginsPreset', Object.keys(_this18._pageMarginsPresets));\n\n        checkPresetName(presetName); // Change to new preset\n\n        _this18._pageMarginsPresetName = presetName; // Remove all preset overrides\n\n        _this18._pageMarginsNode.attributes = {};\n        return _this18;\n      })[\"case\"](['string', 'object'], function (presetName, presetAttributes) {\n        if (_this18._pageMarginsPresets.hasOwnProperty(presetName)) {\n          throw new Error(\"Sheet.pageMarginsPreset: The preset \".concat(presetName, \" already exists!\"));\n        } // Validate preset attribute keys.\n\n\n        var pageMarginsAttributeNames = ['left', 'right', 'top', 'bottom', 'header', 'footer'];\n\n        var isValidPresetAttributeKeys = _.isEqual(_.sortBy(pageMarginsAttributeNames), _.sortBy(Object.keys(presetAttributes)));\n\n        if (isValidPresetAttributeKeys === false) {\n          throw new Error(\"Sheet.pageMarginsPreset: Invalid preset attributes for one or key(s)! - \\\"\".concat(Object.keys(presetAttributes), \"\\\"\"));\n        } // Validate preset attribute values.\n\n\n        _.forEach(function (attributeValue, attributeName) {\n          var attributeNumberValue = parseFloat(attributeValue);\n\n          if (_.isNaN(attributeNumberValue) || _.isNumber(attributeNumberValue) === false) {\n            throw new Error(\"Sheet.pageMarginsPreset: Invalid preset attribute value! - \\\"\".concat(attributeValue, \"\\\"\"));\n          }\n        }); // Change to new preset\n\n\n        _this18._pageMarginsPresetName = presetName; // Remove all preset overrides\n\n        _this18._pageMarginsNode.attributes = {}; // Register the preset\n\n        _this18._pageMarginsPresets[presetName] = presetAttributes;\n        return _this18;\n      }).handle(arguments);\n    }\n    /**\r\n     * https://docs.microsoft.com/en-us/dotnet/api/documentformat.openxml.spreadsheet.pane?view=openxml-2.8.1\r\n     * @typedef {Object} PaneOptions\r\n     * @property {string} activePane=bottomRight Active Pane. The pane that is active.\r\n     * @property {string} state Split State. Indicates whether the pane has horizontal / vertical splits,\r\n     * and whether those splits are frozen.\r\n     * @property {string} topLeftCell Top Left Visible Cell. Location of the top left visible cell in the bottom\r\n     * right pane (when in Left-To-Right mode).\r\n     * @property {number} xSplit (Horizontal Split Position) Horizontal position of the split, in 1/20th of a point;\r\n     * 0 (zero) if none. If the pane is frozen, this value indicates the number of columns visible in the top pane.\r\n     * @property {number} ySplit (Vertical Split Position) Vertical position of the split, in 1/20th of a point; 0\r\n     * (zero) if none. If the pane is frozen, this value indicates the number of rows visible in the left pane.\r\n     */\n\n    /**\r\n    * Gets sheet view pane options\r\n    * @return {PaneOptions} sheet view pane options\r\n    */\n\n    /**\r\n    * Sets sheet view pane options\r\n    * @param {PaneOptions|null|undefined} paneOptions sheet view pane options\r\n    * @return {Sheet} The sheet\r\n    */\n\n  }, {\n    key: \"panes\",\n    value: function panes() {\n      var _this19 = this;\n\n      var supportedStates = ['split', 'frozen', 'frozenSplit'];\n      var supportedActivePanes = ['bottomLeft', 'bottomRight', 'topLeft', 'topRight'];\n\n      var checkStateName = this._getCheckAttributeNameHelper('pane.state', supportedStates);\n\n      var checkActivePane = this._getCheckAttributeNameHelper('pane.activePane', supportedActivePanes);\n\n      var sheetViewNode = this._getOrCreateSheetViewNode();\n\n      var paneNode = xmlq.findChild(sheetViewNode, 'pane');\n      return new ArgHandler('Sheet.pane')[\"case\"](function () {\n        if (paneNode) {\n          var result = _.cloneDeep(paneNode.attributes);\n\n          if (!result.state) result.state = 'split';\n          return result;\n        }\n      })[\"case\"](['nil'], function () {\n        xmlq.removeChild(sheetViewNode, 'pane');\n        return _this19;\n      })[\"case\"](['object'], function (paneAttributes) {\n        var attributes = _.assign({\n          activePane: 'bottomRight'\n        }, paneAttributes);\n\n        checkStateName(attributes.state);\n        checkActivePane(attributes.activePane);\n\n        if (paneNode) {\n          paneNode.attributes = attributes;\n        } else {\n          paneNode = {\n            name: \"pane\",\n            attributes: attributes,\n            children: []\n          };\n          xmlq.appendChild(sheetViewNode, paneNode);\n        }\n\n        return _this19;\n      }).handle(arguments);\n    }\n    /**\r\n     * Freezes Panes for this sheet.\r\n     * @param {number} xSplit the number of columns visible in the top pane. 0 (zero) if none.\r\n     * @param {number} ySplit the number of rows visible in the left pane. 0 (zero) if none.\r\n     * @return {Sheet} The sheet\r\n     */\n\n    /**\r\n    * freezes Panes for this sheet.\r\n    * @param {string} topLeftCell Top Left Visible Cell. Location of the top left visible cell in the bottom\r\n    * right pane (when in Left-To-Right mode).\r\n    * @return {Sheet} The sheet\r\n    */\n\n  }, {\n    key: \"freezePanes\",\n    value: function freezePanes() {\n      var _this20 = this;\n\n      return new ArgHandler('Sheet.feezePanes')[\"case\"](['integer', 'integer'], function (xSplit, ySplit) {\n        var topLeftCell = addressConverter.columnNumberToName(xSplit + 1) + (ySplit + 1);\n        var activePane = xSplit === 0 ? 'bottomLeft' : 'bottomRight';\n        activePane = ySplit === 0 ? 'topRight' : activePane;\n        return _this20.panes({\n          state: 'frozen',\n          topLeftCell: topLeftCell,\n          xSplit: xSplit,\n          ySplit: ySplit,\n          activePane: activePane\n        });\n      })[\"case\"](['string'], function (topLeftCell) {\n        var ref = addressConverter.fromAddress(topLeftCell);\n        var xSplit = ref.columnNumber - 1,\n            ySplit = ref.rowNumber - 1;\n        var activePane = xSplit === 0 ? 'bottomLeft' : 'bottomRight';\n        activePane = ySplit === 0 ? 'topRight' : activePane;\n        return _this20.panes({\n          state: 'frozen',\n          topLeftCell: topLeftCell,\n          xSplit: xSplit,\n          ySplit: ySplit,\n          activePane: activePane\n        });\n      }).handle(arguments);\n    }\n    /**\r\n     * Splits Panes for this sheet.\r\n     * @param {number} xSplit (Horizontal Split Position) Horizontal position of the split,\r\n     * in 1/20th of a point; 0 (zero) if none.\r\n     * @param {number} ySplit (Vertical Split Position) VVertical position of the split,\r\n     * in 1/20th of a point; 0 (zero) if none.\r\n     * @return {Sheet} The sheet\r\n     */\n\n  }, {\n    key: \"splitPanes\",\n    value: function splitPanes(xSplit, ySplit) {\n      return this.panes({\n        state: 'split',\n        xSplit: xSplit,\n        ySplit: ySplit\n      });\n    }\n    /**\r\n     * resets to default sheet view panes.\r\n     * @return {Sheet} The sheet\r\n     */\n\n  }, {\n    key: \"resetPanes\",\n    value: function resetPanes() {\n      return this.panes(null);\n    }\n    /* PRIVATE */\n\n    /**\r\n     * Get a helper function to check that the attribute name provided is supported.\r\n     * @param {string} functionName - Name of the parent function.\r\n     * @param {array} supportedAttributeNames - Array of supported attribute name strings.\r\n     * @returns {function} The helper function, which takes an attribute name. If the array of supported attribute names does not contain the given attribute name, then an Error is thrown.\r\n     * @ignore\r\n     */\n\n  }, {\n    key: \"_getCheckAttributeNameHelper\",\n    value: function _getCheckAttributeNameHelper(functionName, supportedAttributeNames) {\n      return function (attributeName) {\n        if (!_.includes(supportedAttributeNames, attributeName)) {\n          throw new Error(\"Sheet.\".concat(functionName, \": \\\"\").concat(attributeName, \"\\\" is not supported.\"));\n        }\n      };\n    }\n    /**\r\n     * Get a helper function to check that the value is of the expected type.\r\n     * @param {string} functionName - Name of the parent function.\r\n     * @param {string} valueType - A string produced by typeof.\r\n     * @returns {function} The helper function, which takes a value. If the value type is not expected, a TypeError is thrown.\r\n     * @ignore\r\n     */\n\n  }, {\n    key: \"_getCheckTypeHelper\",\n    value: function _getCheckTypeHelper(functionName, valueType) {\n      return function (value) {\n        if (_typeof(value) !== valueType) {\n          throw new TypeError(\"Sheet.\".concat(functionName, \": invalid type - value must be of type \").concat(valueType, \".\"));\n        }\n      };\n    }\n    /**\r\n     * Get a helper function to check that the value is within the expected range.\r\n     * @param {string} functionName - Name of the parent function.\r\n     * @param {undefined|number} valueMin - The minimum value of the range. This value is range-inclusive.\r\n     * @param {undefined|number} valueMax - The maximum value of the range. This value is range-exclusive.\r\n     * @returns {function} The helper function, which takes a value. If the value type is not 'number', a TypeError is thrown. If the value is not within the range, a RangeError is thrown.\r\n     * @ignore\r\n     */\n\n  }, {\n    key: \"_getCheckRangeHelper\",\n    value: function _getCheckRangeHelper(functionName, valueMin, valueMax) {\n      var checkType = this._getCheckTypeHelper(functionName, 'number');\n\n      return function (value) {\n        checkType(value);\n\n        if (valueMin !== undefined) {\n          if (value < valueMin) {\n            throw new RangeError(\"Sheet.\".concat(functionName, \": value too small - value must be greater than or equal to \").concat(valueMin, \".\"));\n          }\n        }\n\n        if (valueMax !== undefined) {\n          if (valueMax <= value) {\n            throw new RangeError(\"Sheet.\".concat(functionName, \": value too large - value must be less than \").concat(valueMax, \".\"));\n          }\n        }\n      };\n    }\n    /**\r\n     * Get the sheet view node if it exists or create it if it doesn't.\r\n     * @returns {{}} The sheet view node.\r\n     * @private\r\n     */\n\n  }, {\n    key: \"_getOrCreateSheetViewNode\",\n    value: function _getOrCreateSheetViewNode() {\n      var sheetViewsNode = xmlq.findChild(this._node, \"sheetViews\");\n\n      if (!sheetViewsNode) {\n        sheetViewsNode = {\n          name: \"sheetViews\",\n          attributes: {},\n          children: [{\n            name: \"sheetView\",\n            attributes: {\n              workbookViewId: 0\n            },\n            children: []\n          }]\n        };\n        xmlq.insertInOrder(this._node, sheetViewsNode, nodeOrder);\n      }\n\n      return xmlq.findChild(sheetViewsNode, \"sheetView\");\n    }\n    /**\r\n     * Initializes the sheet.\r\n     * @param {Workbook} workbook - The parent workbook.\r\n     * @param {{}} idNode - The sheet ID node (from the parent workbook).\r\n     * @param {{}} node - The sheet node.\r\n     * @param {{}} [relationshipsNode] - The optional sheet relationships node.\r\n     * @returns {undefined}\r\n     * @private\r\n     */\n\n  }, {\n    key: \"_init\",\n    value: function _init(workbook, idNode, node, relationshipsNode) {\n      var _this21 = this;\n\n      if (!node) {\n        node = {\n          name: \"worksheet\",\n          attributes: {\n            xmlns: \"http://schemas.openxmlformats.org/spreadsheetml/2006/main\",\n            'xmlns:r': \"http://schemas.openxmlformats.org/officeDocument/2006/relationships\",\n            'xmlns:mc': \"http://schemas.openxmlformats.org/markup-compatibility/2006\",\n            'mc:Ignorable': \"x14ac\",\n            'xmlns:x14ac': \"http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac\"\n          },\n          children: [{\n            name: \"sheetData\",\n            attributes: {},\n            children: []\n          }]\n        };\n      }\n\n      this._workbook = workbook;\n      this._idNode = idNode;\n      this._node = node;\n      this._maxSharedFormulaId = -1;\n      this._mergeCells = {};\n      this._dataValidations = {};\n      this._hyperlinks = {};\n      this._autoFilter = null; // Create the relationships.\n\n      this._relationships = new Relationships(relationshipsNode); // Delete the optional dimension node\n\n      xmlq.removeChild(this._node, \"dimension\"); // Create the rows.\n\n      this._rows = [];\n      this._sheetDataNode = xmlq.findChild(this._node, \"sheetData\");\n\n      this._sheetDataNode.children.forEach(function (rowNode) {\n        var row = new Row(_this21, rowNode);\n        _this21._rows[row.rowNumber()] = row;\n      });\n\n      this._sheetDataNode.children = this._rows; // Create the columns node.\n\n      this._columns = [];\n      this._colsNode = xmlq.findChild(this._node, \"cols\");\n\n      if (this._colsNode) {\n        xmlq.removeChild(this._node, this._colsNode);\n      } else {\n        this._colsNode = {\n          name: 'cols',\n          attributes: {},\n          children: []\n        };\n      } // Cache the col nodes.\n\n\n      this._colNodes = [];\n\n      _.forEach(this._colsNode.children, function (colNode) {\n        var min = colNode.attributes.min;\n        var max = colNode.attributes.max;\n\n        for (var i = min; i <= max; i++) {\n          _this21._colNodes[i] = colNode;\n        }\n      }); // Create the sheet properties node.\n\n\n      this._sheetPrNode = xmlq.findChild(this._node, \"sheetPr\");\n\n      if (!this._sheetPrNode) {\n        this._sheetPrNode = {\n          name: 'sheetPr',\n          attributes: {},\n          children: []\n        };\n        xmlq.insertInOrder(this._node, this._sheetPrNode, nodeOrder);\n      } // Create the merge cells.\n\n\n      this._mergeCellsNode = xmlq.findChild(this._node, \"mergeCells\");\n\n      if (this._mergeCellsNode) {\n        xmlq.removeChild(this._node, this._mergeCellsNode);\n      } else {\n        this._mergeCellsNode = {\n          name: 'mergeCells',\n          attributes: {},\n          children: []\n        };\n      }\n\n      var mergeCellNodes = this._mergeCellsNode.children;\n      this._mergeCellsNode.children = [];\n      mergeCellNodes.forEach(function (mergeCellNode) {\n        _this21._mergeCells[mergeCellNode.attributes.ref] = mergeCellNode;\n      }); // Create the DataValidations.\n\n      this._dataValidationsNode = xmlq.findChild(this._node, \"dataValidations\");\n\n      if (this._dataValidationsNode) {\n        xmlq.removeChild(this._node, this._dataValidationsNode);\n      } else {\n        this._dataValidationsNode = {\n          name: 'dataValidations',\n          attributes: {},\n          children: []\n        };\n      }\n\n      var dataValidationNodes = this._dataValidationsNode.children;\n      this._dataValidationsNode.children = [];\n      dataValidationNodes.forEach(function (dataValidationNode) {\n        _this21._dataValidations[dataValidationNode.attributes.sqref] = dataValidationNode;\n      }); // Create the hyperlinks.\n\n      this._hyperlinksNode = xmlq.findChild(this._node, \"hyperlinks\");\n\n      if (this._hyperlinksNode) {\n        xmlq.removeChild(this._node, this._hyperlinksNode);\n      } else {\n        this._hyperlinksNode = {\n          name: 'hyperlinks',\n          attributes: {},\n          children: []\n        };\n      }\n\n      var hyperlinkNodes = this._hyperlinksNode.children;\n      this._hyperlinksNode.children = [];\n      hyperlinkNodes.forEach(function (hyperlinkNode) {\n        _this21._hyperlinks[hyperlinkNode.attributes.ref] = hyperlinkNode;\n      }); // Create the printOptions.\n\n      this._printOptionsNode = xmlq.findChild(this._node, \"printOptions\");\n\n      if (this._printOptionsNode) {\n        xmlq.removeChild(this._node, this._printOptionsNode);\n      } else {\n        this._printOptionsNode = {\n          name: 'printOptions',\n          attributes: {},\n          children: []\n        };\n      } // Create the pageMargins.\n\n\n      this._pageMarginsPresets = {\n        normal: {\n          left: 0.7,\n          right: 0.7,\n          top: 0.75,\n          bottom: 0.75,\n          header: 0.3,\n          footer: 0.3\n        },\n        wide: {\n          left: 1,\n          right: 1,\n          top: 1,\n          bottom: 1,\n          header: 0.5,\n          footer: 0.5\n        },\n        narrow: {\n          left: 0.25,\n          right: 0.25,\n          top: 0.75,\n          bottom: 0.75,\n          header: 0.3,\n          footer: 0.3\n        }\n      };\n      this._pageMarginsNode = xmlq.findChild(this._node, \"pageMargins\");\n\n      if (this._pageMarginsNode) {\n        // Sheet has page margins, assume preset is template.\n        this._pageMarginsPresetName = 'template'; // Search for a preset that matches existing attributes.\n\n        for (var presetName in this._pageMarginsPresets) {\n          if (_.isEqual(this._pageMarginsNode.attributes, this._pageMarginsPresets[presetName])) {\n            this._pageMarginsPresetName = presetName;\n            break;\n          }\n        } // If template preset, then register as template preset, and clear attributes.\n\n\n        if (this._pageMarginsPresetName === 'template') {\n          this._pageMarginsPresets.template = this._pageMarginsNode.attributes;\n          this._pageMarginsNode.attributes = {};\n        }\n\n        xmlq.removeChild(this._node, this._pageMarginsNode);\n      } else {\n        // Sheet has no page margins, the preset assignment is therefore undefined.\n        this._pageMarginsPresetName = undefined;\n        this._pageMarginsNode = {\n          name: 'pageMargins',\n          attributes: {},\n          children: []\n        };\n      } // Create the pageBreaks\n\n\n      ['colBreaks', 'rowBreaks'].forEach(function (name) {\n        _this21[\"_\".concat(name, \"Node\")] = xmlq.findChild(_this21._node, name);\n\n        if (_this21[\"_\".concat(name, \"Node\")]) {\n          xmlq.removeChild(_this21._node, _this21[\"_\".concat(name, \"Node\")]);\n        } else {\n          _this21[\"_\".concat(name, \"Node\")] = {\n            name: name,\n            children: [],\n            attributes: {\n              count: 0,\n              manualBreakCount: 0\n            }\n          };\n        }\n      });\n      this._pageBreaks = {\n        colBreaks: new PageBreaks(this._colBreaksNode),\n        rowBreaks: new PageBreaks(this._rowBreaksNode)\n      };\n    }\n  }]);\n\n  return Sheet;\n}();\n\nmodule.exports = Sheet;\n/*\r\nxl/workbook.xml\r\n\r\n<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\r\n<worksheet ...>\r\n    ...\r\n\r\n    <printOptions headings=\"1\" gridLines=\"1\" />\r\n    <pageMargins left=\"0.7\" right=\"0.7\" top=\"0.75\" bottom=\"0.75\" header=\"0.3\" footer=\"0.3\" />\r\n    <pageSetup orientation=\"portrait\" horizontalDpi=\"0\" verticalDpi=\"0\" />\r\n</worksheet>\r\n// */","\"use strict\";\n/* eslint camelcase:off */\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nvar ArgHandler = require(\"./ArgHandler\");\n\nvar _ = require(\"lodash\");\n\nvar xmlq = require(\"./xmlq\");\n\nvar colorIndexes = require(\"./colorIndexes\");\n/**\r\n * A Rich text fragment.\r\n */\n\n\nvar RichTextFragment =\n/*#__PURE__*/\nfunction () {\n  /**\r\n   * Creates a new instance of RichTextFragment.\r\n   * @constructor\r\n   * @param {string|Object} value - Text value or XML node\r\n   * @param {object|undefined|null} [styles] - Multiple styles.\r\n   * @param {RichText} richText - The rich text instance where this fragment belongs to.\r\n   */\n  function RichTextFragment(value, styles, richText) {\n    _classCallCheck(this, RichTextFragment);\n\n    this._richText = richText;\n\n    if (value.name === 'r') {\n      this._node = value;\n      this._fontNode = xmlq.findChild(this._node, 'rPr');\n\n      if (!this._fontNode) {\n        this._fontNode = {\n          name: 'rPr',\n          attributes: {},\n          children: []\n        };\n\n        this._node.children.unshift(this._fontNode);\n      }\n\n      this._valueNode = xmlq.findChild(this._node, 't');\n    } else {\n      this._node = {\n        name: 'r',\n        attributes: {},\n        children: [{\n          name: 'rPr',\n          attributes: {},\n          children: []\n        }, {\n          name: 't',\n          attributes: {},\n          children: []\n        }]\n      };\n      this._fontNode = xmlq.findChild(this._node, 'rPr');\n      this._valueNode = xmlq.findChild(this._node, 't');\n      this.value(value);\n\n      if (styles) {\n        this.style(styles);\n      }\n    }\n  }\n  /**\r\n   * Gets the value of this part of rich text\r\n   * @return {string} text\r\n   */\n\n  /**\r\n  * Sets the value of this part of rich text\r\n  * @param {string} text - the text to set\r\n  * @return {RichTextFragment} - RichTextFragment\r\n  */\n\n\n  _createClass(RichTextFragment, [{\n    key: \"value\",\n    value: function value() {\n      var _this = this;\n\n      return new ArgHandler(\"_RichText.value\")[\"case\"](function () {\n        return _this._valueNode.children[0];\n      })[\"case\"]('string', function (value) {\n        value = value.replace(/(?:\\r\\n|\\r|\\n)/g, '\\r\\n');\n        var hasLineSeparator = value.indexOf('\\r\\n') !== -1;\n        _this._valueNode.children[0] = value;\n        if (value.charAt(0) === ' ') xmlq.setAttributes(_this._valueNode, {\n          'xml:space': 'preserve'\n        });\n        if (_this._richText) _this._richText.removeUnsupportedNodes();\n\n        if (hasLineSeparator) {\n          // set wrapText = true if it contains line separator, excel will only display new lines if it sets.\n          if (_this._richText.cell) {\n            _this._richText.cell.style('wrapText', true);\n          }\n\n          xmlq.setAttributes(_this._valueNode, {\n            'xml:space': 'preserve'\n          });\n        }\n\n        return _this;\n      }).handle(arguments);\n    }\n    /**\r\n     * Convert the rich text to an XML object.\r\n     * @returns {{}} The XML form.\r\n     * @ignore\r\n     */\n\n  }, {\n    key: \"toXml\",\n    value: function toXml() {\n      return this._node;\n    }\n    /**\r\n     * Gets an individual style.\r\n     * @param {string} name - The name of the style.\r\n     * @returns {*} The style.\r\n     */\n\n    /**\r\n    * Gets multiple styles.\r\n    * @param {Array.<string>} names - The names of the style.\r\n    * @returns {object.<string, *>} Object whose keys are the style names and values are the styles.\r\n    */\n\n    /**\r\n    * Sets an individual style.\r\n    * @param {string} name - The name of the style.\r\n    * @param {*} value - The value to set.\r\n    * @returns {RichTextFragment} This RichTextFragment.\r\n    */\n\n    /**\r\n    * Sets multiple styles.\r\n    * @param {object.<string, *>} styles - Object whose keys are the style names and values are the styles to set.\r\n    * @returns {RichTextFragment} This RichTextFragment.\r\n    */\n\n  }, {\n    key: \"style\",\n    value: function style() {\n      var _this2 = this;\n\n      return new ArgHandler(\"_RichText.style\")[\"case\"]('string', function (name) {\n        // Get single value\n        var getterName = \"_get_\".concat(name);\n        if (!_this2[getterName]) throw new Error(\"_RichText.style: '\".concat(name, \"' is not a valid style\"));\n        return _this2[getterName]();\n      })[\"case\"]('array', function (names) {\n        // Get list of values\n        var values = {};\n        names.forEach(function (name) {\n          values[name] = _this2.style(name);\n        });\n        return values;\n      })[\"case\"](['string', '*'], function (name, value) {\n        // Set a single value\n        var setterName = \"_set_\".concat(name);\n        if (!_this2[setterName]) throw new Error(\"_RichText.style: '\".concat(name, \"' is not a valid style\"));\n        return _this2[setterName](value);\n      })[\"case\"]('object', function (nameValues) {\n        // Object of key value pairs to set\n        for (var name in nameValues) {\n          if (!nameValues.hasOwnProperty(name)) continue;\n          var value = nameValues[name];\n\n          _this2.style(name, value);\n        }\n\n        return _this2;\n      }).handle(arguments);\n    }\n  }, {\n    key: \"_getColor\",\n    value: function _getColor(node, name) {\n      var child = xmlq.findChild(node, name);\n      if (!child || !child.attributes) return;\n      var color = {};\n      if (child.attributes.hasOwnProperty('rgb')) color.rgb = child.attributes.rgb;else if (child.attributes.hasOwnProperty('theme')) color.theme = child.attributes.theme;else if (child.attributes.hasOwnProperty('indexed')) color.rgb = colorIndexes[child.attributes.indexed];\n      if (child.attributes.hasOwnProperty('tint')) color.tint = child.attributes.tint;\n      if (_.isEmpty(color)) return;\n      return color;\n    }\n  }, {\n    key: \"_setColor\",\n    value: function _setColor(node, name, color) {\n      if (typeof color === \"string\") color = {\n        rgb: color\n      };else if (typeof color === \"number\") color = {\n        theme: color\n      };\n      xmlq.setChildAttributes(node, name, {\n        rgb: color && color.rgb && color.rgb.toUpperCase(),\n        indexed: null,\n        theme: color && color.theme,\n        tint: color && color.tint\n      });\n      xmlq.removeChildIfEmpty(node, 'color');\n    }\n  }, {\n    key: \"_get_bold\",\n    value: function _get_bold() {\n      return xmlq.hasChild(this._fontNode, 'b');\n    }\n  }, {\n    key: \"_set_bold\",\n    value: function _set_bold(bold) {\n      if (bold) xmlq.appendChildIfNotFound(this._fontNode, \"b\");else xmlq.removeChild(this._fontNode, 'b');\n    }\n  }, {\n    key: \"_get_italic\",\n    value: function _get_italic() {\n      return xmlq.hasChild(this._fontNode, 'i');\n    }\n  }, {\n    key: \"_set_italic\",\n    value: function _set_italic(italic) {\n      if (italic) xmlq.appendChildIfNotFound(this._fontNode, \"i\");else xmlq.removeChild(this._fontNode, 'i');\n    }\n  }, {\n    key: \"_get_underline\",\n    value: function _get_underline() {\n      var uNode = xmlq.findChild(this._fontNode, 'u');\n      return uNode ? uNode.attributes.val || true : false;\n    }\n  }, {\n    key: \"_set_underline\",\n    value: function _set_underline(underline) {\n      if (underline) {\n        var uNode = xmlq.appendChildIfNotFound(this._fontNode, \"u\");\n        var val = typeof underline === 'string' ? underline : null;\n        xmlq.setAttributes(uNode, {\n          val: val\n        });\n      } else {\n        xmlq.removeChild(this._fontNode, 'u');\n      }\n    }\n  }, {\n    key: \"_get_strikethrough\",\n    value: function _get_strikethrough() {\n      return xmlq.hasChild(this._fontNode, 'strike');\n    }\n  }, {\n    key: \"_set_strikethrough\",\n    value: function _set_strikethrough(strikethrough) {\n      if (strikethrough) xmlq.appendChildIfNotFound(this._fontNode, \"strike\");else xmlq.removeChild(this._fontNode, 'strike');\n    }\n  }, {\n    key: \"_getFontVerticalAlignment\",\n    value: function _getFontVerticalAlignment() {\n      return xmlq.getChildAttribute(this._fontNode, 'vertAlign', \"val\");\n    }\n  }, {\n    key: \"_setFontVerticalAlignment\",\n    value: function _setFontVerticalAlignment(alignment) {\n      xmlq.setChildAttributes(this._fontNode, 'vertAlign', {\n        val: alignment\n      });\n      xmlq.removeChildIfEmpty(this._fontNode, 'vertAlign');\n    }\n  }, {\n    key: \"_get_subscript\",\n    value: function _get_subscript() {\n      return this._getFontVerticalAlignment() === \"subscript\";\n    }\n  }, {\n    key: \"_set_subscript\",\n    value: function _set_subscript(subscript) {\n      this._setFontVerticalAlignment(subscript ? \"subscript\" : null);\n    }\n  }, {\n    key: \"_get_superscript\",\n    value: function _get_superscript() {\n      return this._getFontVerticalAlignment() === \"superscript\";\n    }\n  }, {\n    key: \"_set_superscript\",\n    value: function _set_superscript(superscript) {\n      this._setFontVerticalAlignment(superscript ? \"superscript\" : null);\n    }\n  }, {\n    key: \"_get_fontSize\",\n    value: function _get_fontSize() {\n      return xmlq.getChildAttribute(this._fontNode, 'sz', \"val\");\n    }\n  }, {\n    key: \"_set_fontSize\",\n    value: function _set_fontSize(size) {\n      xmlq.setChildAttributes(this._fontNode, 'sz', {\n        val: size\n      });\n      xmlq.removeChildIfEmpty(this._fontNode, 'sz');\n    }\n  }, {\n    key: \"_get_fontFamily\",\n    value: function _get_fontFamily() {\n      return xmlq.getChildAttribute(this._fontNode, 'rFont', \"val\");\n    }\n  }, {\n    key: \"_set_fontFamily\",\n    value: function _set_fontFamily(family) {\n      xmlq.setChildAttributes(this._fontNode, 'rFont', {\n        val: family\n      });\n      xmlq.removeChildIfEmpty(this._fontNode, 'rFont');\n    }\n  }, {\n    key: \"_get_fontGenericFamily\",\n    value: function _get_fontGenericFamily() {\n      return xmlq.getChildAttribute(this._fontNode, 'family', \"val\");\n    }\n    /**\r\n     * @param {number} genericFamily - 1: Serif, 2: Sans Serif, 3: Monospace,\r\n     * @private\r\n     * @return {undefined}\r\n     */\n\n  }, {\n    key: \"_set_fontGenericFamily\",\n    value: function _set_fontGenericFamily(genericFamily) {\n      xmlq.setChildAttributes(this._fontNode, 'family', {\n        val: genericFamily\n      });\n      xmlq.removeChildIfEmpty(this._fontNode, 'family');\n    }\n  }, {\n    key: \"_get_fontColor\",\n    value: function _get_fontColor() {\n      return this._getColor(this._fontNode, \"color\");\n    }\n  }, {\n    key: \"_set_fontColor\",\n    value: function _set_fontColor(color) {\n      this._setColor(this._fontNode, \"color\", color);\n    }\n  }, {\n    key: \"_get_fontScheme\",\n    value: function _get_fontScheme() {\n      // can be 'minor', 'major', 'none'\n      return xmlq.getChildAttribute(this._fontNode, 'scheme', \"val\");\n    }\n    /**\r\n     * @param {string} scheme - 'minor'|'major'|'none'\r\n     * @private\r\n     * @return {undefined}\r\n     */\n\n  }, {\n    key: \"_set_fontScheme\",\n    value: function _set_fontScheme(scheme) {\n      xmlq.setChildAttributes(this._fontNode, 'scheme', {\n        val: scheme\n      });\n      xmlq.removeChildIfEmpty(this._fontNode, 'scheme');\n    }\n  }]);\n\n  return RichTextFragment;\n}(); // IE doesn't support function names so explicitly set it.\n\n\nif (!RichTextFragment.name) RichTextFragment.name = \"RichTextFragment\";\nmodule.exports = RichTextFragment;","\"use strict\";\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nvar _ = require(\"lodash\");\n\nvar Cell = require(\"./Cell\");\n\nvar regexify = require(\"./regexify\");\n\nvar ArgHandler = require(\"./ArgHandler\");\n\nvar addressConverter = require('./addressConverter');\n/**\r\n * A row.\r\n */\n\n\nvar Row =\n/*#__PURE__*/\nfunction () {\n  // /**\n  //  * Creates a new instance of Row.\n  //  * @param {Sheet} sheet - The parent sheet.\n  //  * @param {{}} node - The row node.\n  //  */\n  function Row(sheet, node) {\n    _classCallCheck(this, Row);\n\n    this._sheet = sheet;\n\n    this._init(node);\n  }\n  /* PUBLIC */\n\n  /**\r\n   * Get the address of the row.\r\n   * @param {{}} [opts] - Options\r\n   * @param {boolean} [opts.includeSheetName] - Include the sheet name in the address.\r\n   * @param {boolean} [opts.anchored] - Anchor the address.\r\n   * @returns {string} The address\r\n   */\n\n\n  _createClass(Row, [{\n    key: \"address\",\n    value: function address(opts) {\n      return addressConverter.toAddress({\n        type: 'row',\n        rowNumber: this.rowNumber(),\n        sheetName: opts && opts.includeSheetName && this.sheet().name(),\n        rowAnchored: opts && opts.anchored\n      });\n    }\n    /**\r\n     * Get a cell in the row.\r\n     * @param {string|number} columnNameOrNumber - The name or number of the column.\r\n     * @returns {Cell} The cell.\r\n     */\n\n  }, {\n    key: \"cell\",\n    value: function cell(columnNameOrNumber) {\n      var columnNumber = columnNameOrNumber;\n\n      if (typeof columnNameOrNumber === 'string') {\n        columnNumber = addressConverter.columnNameToNumber(columnNameOrNumber);\n      }\n\n      if (columnNumber < 1) throw new RangeError(\"Invalid column number \".concat(columnNumber, \". Remember that spreadsheets use 1-based indexing.\")); // Return an existing cell.\n\n      if (this._cells[columnNumber]) return this._cells[columnNumber]; // No cell exists for this.\n      // Check if there is an existing row/column style for the new cell.\n\n      var styleId;\n      var rowStyleId = this._node.attributes.s;\n      var columnStyleId = this.sheet().existingColumnStyleId(columnNumber); // Row style takes priority. If a cell has both row and column styles it should have created a cell entry with a cell-specific style.\n\n      if (!_.isNil(rowStyleId)) styleId = rowStyleId;else if (!_.isNil(columnStyleId)) styleId = columnStyleId; // Create the new cell.\n\n      var cell = new Cell(this, columnNumber, styleId);\n      this._cells[columnNumber] = cell;\n      return cell;\n    }\n    /**\r\n     * Gets the row height.\r\n     * @returns {undefined|number} The height (or undefined).\r\n     */\n\n    /**\r\n    * Sets the row height.\r\n    * @param {number} height - The height of the row.\r\n    * @returns {Row} The row.\r\n    */\n\n  }, {\n    key: \"height\",\n    value: function height() {\n      var _this = this;\n\n      return new ArgHandler('Row.height')[\"case\"](function () {\n        return _this._node.attributes.customHeight ? _this._node.attributes.ht : undefined;\n      })[\"case\"]('number', function (height) {\n        _this._node.attributes.ht = height;\n        _this._node.attributes.customHeight = 1;\n        return _this;\n      })[\"case\"]('nil', function () {\n        delete _this._node.attributes.ht;\n        delete _this._node.attributes.customHeight;\n        return _this;\n      }).handle(arguments);\n    }\n    /**\r\n     * Gets a value indicating whether the row is hidden.\r\n     * @returns {boolean} A flag indicating whether the row is hidden.\r\n     */\n\n    /**\r\n    * Sets whether the row is hidden.\r\n    * @param {boolean} hidden - A flag indicating whether to hide the row.\r\n    * @returns {Row} The row.\r\n    */\n\n  }, {\n    key: \"hidden\",\n    value: function hidden() {\n      var _this2 = this;\n\n      return new ArgHandler(\"Row.hidden\")[\"case\"](function () {\n        return _this2._node.attributes.hidden === 1;\n      })[\"case\"]('boolean', function (hidden) {\n        if (hidden) _this2._node.attributes.hidden = 1;else delete _this2._node.attributes.hidden;\n        return _this2;\n      }).handle(arguments);\n    }\n    /**\r\n     * Gets the row number.\r\n     * @returns {number} The row number.\r\n     */\n\n  }, {\n    key: \"rowNumber\",\n    value: function rowNumber() {\n      return this._node.attributes.r;\n    }\n    /**\r\n     * Gets the parent sheet of the row.\r\n     * @returns {Sheet} The parent sheet.\r\n     */\n\n  }, {\n    key: \"sheet\",\n    value: function sheet() {\n      return this._sheet;\n    }\n    /**\r\n     * Gets an individual style.\r\n     * @param {string} name - The name of the style.\r\n     * @returns {*} The style.\r\n     */\n\n    /**\r\n    * Gets multiple styles.\r\n    * @param {Array.<string>} names - The names of the style.\r\n    * @returns {object.<string, *>} Object whose keys are the style names and values are the styles.\r\n    */\n\n    /**\r\n    * Sets an individual style.\r\n    * @param {string} name - The name of the style.\r\n    * @param {*} value - The value to set.\r\n    * @returns {Cell} The cell.\r\n    */\n\n    /**\r\n    * Sets multiple styles.\r\n    * @param {object.<string, *>} styles - Object whose keys are the style names and values are the styles to set.\r\n    * @returns {Cell} The cell.\r\n    */\n\n    /**\r\n    * Sets to a specific style\r\n    * @param {Style} style - Style object given from stylesheet.createStyle\r\n    * @returns {Cell} The cell.\r\n    */\n\n  }, {\n    key: \"style\",\n    value: function style() {\n      var _this3 = this;\n\n      return new ArgHandler(\"Row.style\")[\"case\"]('string', function (name) {\n        // Get single value\n        _this3._createStyleIfNeeded();\n\n        return _this3._style.style(name);\n      })[\"case\"]('array', function (names) {\n        // Get list of values\n        var values = {};\n        names.forEach(function (name) {\n          values[name] = _this3.style(name);\n        });\n        return values;\n      })[\"case\"](['string', '*'], function (name, value) {\n        _this3._createCellStylesIfNeeded(); // Style each existing cell within this row. (Cells don't inherit ow/column styles.)\n\n\n        _.forEach(_this3._cells, function (cell) {\n          if (cell) cell.style(name, value);\n        }); // Set the style on the row.\n\n\n        _this3._createStyleIfNeeded();\n\n        _this3._style.style(name, value);\n\n        return _this3;\n      })[\"case\"]('object', function (nameValues) {\n        // Object of key value pairs to set\n        for (var name in nameValues) {\n          if (!nameValues.hasOwnProperty(name)) continue;\n          var value = nameValues[name];\n\n          _this3.style(name, value);\n        }\n\n        return _this3;\n      })[\"case\"]('Style', function (style) {\n        _this3._createCellStylesIfNeeded(); // Style each existing cell within this row. (Cells don't inherit ow/column styles.)\n\n\n        _.forEach(_this3._cells, function (cell) {\n          if (cell) cell.style(style);\n        });\n\n        _this3._style = style;\n        _this3._node.attributes.s = style.id();\n        _this3._node.attributes.customFormat = 1;\n        return _this3;\n      }).handle(arguments);\n    }\n    /**\r\n     * Get the parent workbook.\r\n     * @returns {Workbook} The parent workbook.\r\n     */\n\n  }, {\n    key: \"workbook\",\n    value: function workbook() {\n      return this.sheet().workbook();\n    }\n    /**\r\n     * Append horizontal page break after the row.\r\n     * @returns {Row} the row.\r\n     */\n\n  }, {\n    key: \"addPageBreak\",\n    value: function addPageBreak() {\n      this.sheet().horizontalPageBreaks().add(this.rowNumber());\n      return this;\n    }\n    /* INTERNAL */\n\n    /**\r\n     * Clear cells that are using a given shared formula ID.\r\n     * @param {number} sharedFormulaId - The shared formula ID.\r\n     * @returns {undefined}\r\n     * @ignore\r\n     */\n\n  }, {\n    key: \"clearCellsUsingSharedFormula\",\n    value: function clearCellsUsingSharedFormula(sharedFormulaId) {\n      this._cells.forEach(function (cell) {\n        if (!cell) return;\n        if (cell.sharesFormula(sharedFormulaId)) cell.clear();\n      });\n    }\n    /**\r\n     * Find a pattern in the row and optionally replace it.\r\n     * @param {string|RegExp} pattern - The search pattern.\r\n     * @param {string} [replacement] - The replacement text.\r\n     * @returns {Array.<Cell>} The matched cells.\r\n     * @ignore\r\n     */\n\n  }, {\n    key: \"find\",\n    value: function find(pattern, replacement) {\n      pattern = regexify(pattern);\n      var matches = [];\n\n      this._cells.forEach(function (cell) {\n        if (!cell) return;\n        if (cell.find(pattern, replacement)) matches.push(cell);\n      });\n\n      return matches;\n    }\n    /**\r\n     * Check if the row has a cell at the given column number.\r\n     * @param {number} columnNumber - The column number.\r\n     * @returns {boolean} True if a cell exists, false otherwise.\r\n     * @ignore\r\n     */\n\n  }, {\n    key: \"hasCell\",\n    value: function hasCell(columnNumber) {\n      if (columnNumber < 1) throw new RangeError(\"Invalid column number \".concat(columnNumber, \". Remember that spreadsheets use 1-based indexing.\"));\n      return !!this._cells[columnNumber];\n    }\n    /**\r\n     * Check if the column has a style defined.\r\n     * @returns {boolean} True if a style exists, false otherwise.\r\n     * @ignore\r\n     */\n\n  }, {\n    key: \"hasStyle\",\n    value: function hasStyle() {\n      return !_.isNil(this._node.attributes.s);\n    }\n    /**\r\n     * Returns the nax used column number.\r\n     * @returns {number} The max used column number.\r\n     * @ignore\r\n     */\n\n  }, {\n    key: \"minUsedColumnNumber\",\n    value: function minUsedColumnNumber() {\n      return _.findIndex(this._cells);\n    }\n    /**\r\n     * Returns the nax used column number.\r\n     * @returns {number} The max used column number.\r\n     * @ignore\r\n     */\n\n  }, {\n    key: \"maxUsedColumnNumber\",\n    value: function maxUsedColumnNumber() {\n      return this._cells.length - 1;\n    }\n    /**\r\n     * Convert the row to an object.\r\n     * @returns {{}} The object form.\r\n     * @ignore\r\n     */\n\n  }, {\n    key: \"toXml\",\n    value: function toXml() {\n      return this._node;\n    }\n    /* PRIVATE */\n\n    /**\r\n     * If a column node is already defined that intersects with this row and that column has a style set, we\r\n     * need to make sure that a cell node exists at the intersection so we can style it appropriately.\r\n     * Fetching the cell will force a new cell node to be created with a style matching the column.\r\n     * @returns {undefined}\r\n     * @private\r\n     */\n\n  }, {\n    key: \"_createCellStylesIfNeeded\",\n    value: function _createCellStylesIfNeeded() {\n      var _this4 = this;\n\n      this.sheet().forEachExistingColumnNumber(function (columnNumber) {\n        if (!_.isNil(_this4.sheet().existingColumnStyleId(columnNumber))) _this4.cell(columnNumber);\n      });\n    }\n    /**\r\n     * Create a style for this row if it doesn't already exist.\r\n     * @returns {undefined}\r\n     * @private\r\n     */\n\n  }, {\n    key: \"_createStyleIfNeeded\",\n    value: function _createStyleIfNeeded() {\n      if (!this._style) {\n        var styleId = this._node.attributes.s;\n        this._style = this.workbook().styleSheet().createStyle(styleId);\n        this._node.attributes.s = this._style.id();\n        this._node.attributes.customFormat = 1;\n      }\n    }\n    /**\r\n     * Initialize the row node.\r\n     * @param {{}} node - The row node.\r\n     * @returns {undefined}\r\n     * @private\r\n     */\n\n  }, {\n    key: \"_init\",\n    value: function _init(node) {\n      var _this5 = this;\n\n      this._node = node;\n      this._cells = [];\n\n      this._node.children.forEach(function (cellNode) {\n        var cell = new Cell(_this5, cellNode);\n        _this5._cells[cell.columnNumber()] = cell;\n      });\n\n      this._node.children = this._cells;\n    }\n  }]);\n\n  return Row;\n}();\n\nmodule.exports = Row;\n/*\r\n<row r=\"6\" spans=\"1:9\" x14ac:dyDescent=\"0.25\">\r\n    <c r=\"A6\" s=\"1\" t=\"s\">\r\n        <v>2</v>\r\n    </c>\r\n    <c r=\"B6\" s=\"1\"/>\r\n    <c r=\"C6\" s=\"1\"/>\r\n</row>\r\n*/","\"use strict\";\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nvar ArgHandler = require(\"./ArgHandler\");\n\nvar addressConverter = require('./addressConverter'); // Default column width.\n\n\nvar defaultColumnWidth = 9.140625;\n/**\r\n * A column.\r\n */\n\nvar Column =\n/*#__PURE__*/\nfunction () {\n  // /**\n  //  * Creates a new Column.\n  //  * @param {Sheet} sheet - The parent sheet.\n  //  * @param {{}} node - The column node.\n  //  * @constructor\n  //  * @ignore\n  //  * @private\n  //  */\n  function Column(sheet, node) {\n    _classCallCheck(this, Column);\n\n    this._sheet = sheet;\n    this._node = node;\n  }\n  /* PUBLIC */\n\n  /**\r\n   * Get the address of the column.\r\n   * @param {{}} [opts] - Options\r\n   * @param {boolean} [opts.includeSheetName] - Include the sheet name in the address.\r\n   * @param {boolean} [opts.anchored] - Anchor the address.\r\n   * @returns {string} The address\r\n   */\n\n\n  _createClass(Column, [{\n    key: \"address\",\n    value: function address(opts) {\n      return addressConverter.toAddress({\n        type: 'column',\n        columnName: this.columnName(),\n        sheetName: opts && opts.includeSheetName && this.sheet().name(),\n        columnAnchored: opts && opts.anchored\n      });\n    }\n    /**\r\n     * Get a cell within the column.\r\n     * @param {number} rowNumber - The row number.\r\n     * @returns {Cell} The cell in the column with the given row number.\r\n     */\n\n  }, {\n    key: \"cell\",\n    value: function cell(rowNumber) {\n      return this.sheet().cell(rowNumber, this.columnNumber());\n    }\n    /**\r\n     * Get the name of the column.\r\n     * @returns {string} The column name.\r\n     */\n\n  }, {\n    key: \"columnName\",\n    value: function columnName() {\n      return addressConverter.columnNumberToName(this.columnNumber());\n    }\n    /**\r\n     * Get the number of the column.\r\n     * @returns {number} The column number.\r\n     */\n\n  }, {\n    key: \"columnNumber\",\n    value: function columnNumber() {\n      return this._node.attributes.min;\n    }\n    /**\r\n     * Gets a value indicating whether the column is hidden.\r\n     * @returns {boolean} A flag indicating whether the column is hidden.\r\n     */\n\n    /**\r\n    * Sets whether the column is hidden.\r\n    * @param {boolean} hidden - A flag indicating whether to hide the column.\r\n    * @returns {Column} The column.\r\n    */\n\n  }, {\n    key: \"hidden\",\n    value: function hidden() {\n      var _this = this;\n\n      return new ArgHandler(\"Column.hidden\")[\"case\"](function () {\n        return _this._node.attributes.hidden === 1;\n      })[\"case\"]('boolean', function (hidden) {\n        if (hidden) _this._node.attributes.hidden = 1;else delete _this._node.attributes.hidden;\n        return _this;\n      }).handle(arguments);\n    }\n    /**\r\n     * Get the parent sheet.\r\n     * @returns {Sheet} The parent sheet.\r\n     */\n\n  }, {\n    key: \"sheet\",\n    value: function sheet() {\n      return this._sheet;\n    }\n    /**\r\n     * Gets an individual style.\r\n     * @param {string} name - The name of the style.\r\n     * @returns {*} The style.\r\n     */\n\n    /**\r\n    * Gets multiple styles.\r\n    * @param {Array.<string>} names - The names of the style.\r\n    * @returns {object.<string, *>} Object whose keys are the style names and values are the styles.\r\n    */\n\n    /**\r\n    * Sets an individual style.\r\n    * @param {string} name - The name of the style.\r\n    * @param {*} value - The value to set.\r\n    * @returns {Cell} The cell.\r\n    */\n\n    /**\r\n    * Sets multiple styles.\r\n    * @param {object.<string, *>} styles - Object whose keys are the style names and values are the styles to set.\r\n    * @returns {Cell} The cell.\r\n    */\n\n    /**\r\n    * Sets to a specific style\r\n    * @param {Style} style - Style object given from stylesheet.createStyle\r\n    * @returns {Cell} The cell.\r\n    */\n\n  }, {\n    key: \"style\",\n    value: function style() {\n      var _this2 = this;\n\n      return new ArgHandler(\"Column.style\")[\"case\"]('string', function (name) {\n        // Get single value\n        _this2._createStyleIfNeeded();\n\n        return _this2._style.style(name);\n      })[\"case\"]('array', function (names) {\n        // Get list of values\n        var values = {};\n        names.forEach(function (name) {\n          values[name] = _this2.style(name);\n        });\n        return values;\n      })[\"case\"](['string', '*'], function (name, value) {\n        // If a row node is already defined that intersects with this column and that row has a style set, we\n        // need to make sure that a cell node exists at the intersection so we can style it appropriately.\n        // Fetching the cell will force a new cell node to be created with a style matching the column. So we\n        // will fetch and style the cell at each row that intersects this column if it is already present or it\n        // has a style defined.\n        _this2.sheet().forEachExistingRow(function (row) {\n          if (row.hasStyle() || row.hasCell(_this2.columnNumber())) {\n            row.cell(_this2.columnNumber()).style(name, value);\n          }\n        }); // Set a single value for all cells to a single value\n\n\n        _this2._createStyleIfNeeded();\n\n        _this2._style.style(name, value);\n\n        return _this2;\n      })[\"case\"]('object', function (nameValues) {\n        // Object of key value pairs to set\n        for (var name in nameValues) {\n          if (!nameValues.hasOwnProperty(name)) continue;\n          var value = nameValues[name];\n\n          _this2.style(name, value);\n        }\n\n        return _this2;\n      })[\"case\"]('Style', function (style) {\n        // See Large Comment Above\n        _this2.sheet().forEachExistingRow(function (row) {\n          if (row.hasStyle() || row.hasCell(_this2.columnNumber())) {\n            row.cell(_this2.columnNumber()).style(style);\n          }\n        });\n\n        _this2._style = style;\n        _this2._node.attributes.style = style.id();\n        return _this2;\n      }).handle(arguments);\n    }\n    /**\r\n     * Gets the width.\r\n     * @returns {undefined|number} The width (or undefined).\r\n     */\n\n    /**\r\n    * Sets the width.\r\n    * @param {number} width - The width of the column.\r\n    * @returns {Column} The column.\r\n    */\n\n  }, {\n    key: \"width\",\n    value: function width(_width) {\n      var _this3 = this;\n\n      return new ArgHandler(\"Column.width\")[\"case\"](function () {\n        return _this3._node.attributes.customWidth ? _this3._node.attributes.width : undefined;\n      })[\"case\"]('number', function (width) {\n        _this3._node.attributes.width = width;\n        _this3._node.attributes.customWidth = 1;\n        return _this3;\n      })[\"case\"]('nil', function () {\n        delete _this3._node.attributes.width;\n        delete _this3._node.attributes.customWidth;\n        return _this3;\n      }).handle(arguments);\n    }\n    /**\r\n     * Get the parent workbook.\r\n     * @returns {Workbook} The parent workbook.\r\n     */\n\n  }, {\n    key: \"workbook\",\n    value: function workbook() {\n      return this.sheet().workbook();\n    }\n    /**\r\n     * Append vertical page break after the column.\r\n     * @returns {Column} the column.\r\n     */\n\n  }, {\n    key: \"addPageBreak\",\n    value: function addPageBreak() {\n      this.sheet().verticalPageBreaks().add(this.columnNumber());\n      return this;\n    }\n    /* INTERNAL */\n\n    /**\r\n     * Convert the column to an XML object.\r\n     * @returns {{}} The XML form.\r\n     * @ignore\r\n     */\n\n  }, {\n    key: \"toXml\",\n    value: function toXml() {\n      return this._node;\n    }\n    /* PRIVATE */\n\n    /**\r\n     * Create a style for this column if it doesn't already exist.\r\n     * @returns {undefined}\r\n     * @private\r\n     */\n\n  }, {\n    key: \"_createStyleIfNeeded\",\n    value: function _createStyleIfNeeded() {\n      if (!this._style) {\n        var styleId = this._node.attributes.style;\n        this._style = this.workbook().styleSheet().createStyle(styleId);\n        this._node.attributes.style = this._style.id();\n        if (!this.width()) this.width(defaultColumnWidth);\n      }\n    }\n  }]);\n\n  return Column;\n}();\n\nmodule.exports = Column;","\"use strict\";\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nvar ArgHandler = require(\"./ArgHandler\");\n\nvar addressConverter = require(\"./addressConverter\");\n/**\r\n * A range of cells.\r\n */\n\n\nvar Range =\n/*#__PURE__*/\nfunction () {\n  // /**\n  //  * Creates a new instance of Range.\n  //  * @param {Cell} startCell - The start cell.\n  //  * @param {Cell} endCell - The end cell.\n  //  */\n  function Range(startCell, endCell) {\n    _classCallCheck(this, Range);\n\n    this._startCell = startCell;\n    this._endCell = endCell;\n\n    this._findRangeExtent(startCell, endCell);\n  }\n  /**\r\n   * Get the address of the range.\r\n   * @param {{}} [opts] - Options\r\n   * @param {boolean} [opts.includeSheetName] - Include the sheet name in the address.\r\n   * @param {boolean} [opts.startRowAnchored] - Anchor the start row.\r\n   * @param {boolean} [opts.startColumnAnchored] - Anchor the start column.\r\n   * @param {boolean} [opts.endRowAnchored] - Anchor the end row.\r\n   * @param {boolean} [opts.endColumnAnchored] - Anchor the end column.\r\n   * @param {boolean} [opts.anchored] - Anchor all row and columns.\r\n   * @returns {string} The address.\r\n   */\n\n\n  _createClass(Range, [{\n    key: \"address\",\n    value: function address(opts) {\n      return addressConverter.toAddress({\n        type: 'range',\n        startRowNumber: this.startCell().rowNumber(),\n        startRowAnchored: opts && (opts.startRowAnchored || opts.anchored),\n        startColumnName: this.startCell().columnName(),\n        startColumnAnchored: opts && (opts.startColumnAnchored || opts.anchored),\n        endRowNumber: this.endCell().rowNumber(),\n        endRowAnchored: opts && (opts.endRowAnchored || opts.anchored),\n        endColumnName: this.endCell().columnName(),\n        endColumnAnchored: opts && (opts.endColumnAnchored || opts.anchored),\n        sheetName: opts && opts.includeSheetName && this.sheet().name()\n      });\n    }\n    /**\r\n     * Gets a cell within the range.\r\n     * @param {number} ri - Row index relative to the top-left corner of the range (0-based).\r\n     * @param {number} ci - Column index relative to the top-left corner of the range (0-based).\r\n     * @returns {Cell} The cell.\r\n     */\n\n  }, {\n    key: \"cell\",\n    value: function cell(ri, ci) {\n      return this.sheet().cell(this._minRowNumber + ri, this._minColumnNumber + ci);\n    }\n    /**\r\n     * Sets sheet autoFilter to this range.\r\n     * @returns {Range} This range.\r\n     */\n\n  }, {\n    key: \"autoFilter\",\n    value: function autoFilter() {\n      this.sheet().autoFilter(this);\n      return this;\n    }\n    /**\r\n     * Get the cells in the range as a 2D array.\r\n     * @returns {Array.<Array.<Cell>>} The cells.\r\n     */\n\n  }, {\n    key: \"cells\",\n    value: function cells() {\n      return this.map(function (cell) {\n        return cell;\n      });\n    }\n    /**\r\n     * Clear the contents of all the cells in the range.\r\n     * @returns {Range} The range.\r\n     */\n\n  }, {\n    key: \"clear\",\n    value: function clear() {\n      return this.value(undefined);\n    }\n    /**\r\n     * Get the end cell of the range.\r\n     * @returns {Cell} The end cell.\r\n     */\n\n  }, {\n    key: \"endCell\",\n    value: function endCell() {\n      return this._endCell;\n    }\n    /**\r\n     * Callback used by forEach.\r\n     * @callback Range~forEachCallback\r\n     * @param {Cell} cell - The cell.\r\n     * @param {number} ri - The relative row index.\r\n     * @param {number} ci - The relative column index.\r\n     * @param {Range} range - The range.\r\n     * @returns {undefined}\r\n     */\n\n    /**\r\n     * Call a function for each cell in the range. Goes by row then column.\r\n     * @param {Range~forEachCallback} callback - Function called for each cell in the range.\r\n     * @returns {Range} The range.\r\n     */\n\n  }, {\n    key: \"forEach\",\n    value: function forEach(callback) {\n      for (var ri = 0; ri < this._numRows; ri++) {\n        for (var ci = 0; ci < this._numColumns; ci++) {\n          callback(this.cell(ri, ci), ri, ci, this);\n        }\n      }\n\n      return this;\n    }\n    /**\r\n     * Gets the shared formula in the start cell (assuming it's the source of the shared formula).\r\n     * @returns {string|undefined} The shared formula.\r\n     */\n\n    /**\r\n    * Sets the shared formula in the range. The formula will be translated for each cell.\r\n    * @param {string} formula - The formula to set.\r\n    * @returns {Range} The range.\r\n    */\n\n  }, {\n    key: \"formula\",\n    value: function formula() {\n      var _this = this;\n\n      return new ArgHandler(\"Range.formula\")[\"case\"](function () {\n        return _this.startCell().getSharedRefFormula();\n      })[\"case\"]('string', function (formula) {\n        var sharedFormulaId = _this.sheet().incrementMaxSharedFormulaId();\n\n        _this.forEach(function (cell, ri, ci) {\n          if (ri === 0 && ci === 0) {\n            cell.setSharedFormula(sharedFormulaId, formula, _this.address());\n          } else {\n            cell.setSharedFormula(sharedFormulaId);\n          }\n        });\n\n        return _this;\n      }).handle(arguments);\n    }\n    /**\r\n     * Callback used by map.\r\n     * @callback Range~mapCallback\r\n     * @param {Cell} cell - The cell.\r\n     * @param {number} ri - The relative row index.\r\n     * @param {number} ci - The relative column index.\r\n     * @param {Range} range - The range.\r\n     * @returns {*} The value to map to.\r\n     */\n\n    /**\r\n     * Creates a 2D array of values by running each cell through a callback.\r\n     * @param {Range~mapCallback} callback - Function called for each cell in the range.\r\n     * @returns {Array.<Array.<*>>} The 2D array of return values.\r\n     */\n\n  }, {\n    key: \"map\",\n    value: function map(callback) {\n      var _this2 = this;\n\n      var result = [];\n      this.forEach(function (cell, ri, ci) {\n        if (!result[ri]) result[ri] = [];\n        result[ri][ci] = callback(cell, ri, ci, _this2);\n      });\n      return result;\n    }\n    /**\r\n     * Gets a value indicating whether the cells in the range are merged.\r\n     * @returns {boolean} The value.\r\n     */\n\n    /**\r\n    * Sets a value indicating whether the cells in the range should be merged.\r\n    * @param {boolean} merged - True to merge, false to unmerge.\r\n    * @returns {Range} The range.\r\n    */\n\n  }, {\n    key: \"merged\",\n    value: function merged(_merged) {\n      var _this3 = this;\n\n      return new ArgHandler('Range.merged')[\"case\"](function () {\n        return _this3.sheet().merged(_this3.address());\n      })[\"case\"]('*', function (merged) {\n        _this3.sheet().merged(_this3.address(), merged);\n\n        return _this3;\n      }).handle(arguments);\n    }\n    /**\r\n     * Gets the data validation object attached to the Range.\r\n     * @returns {object|undefined} The data validation object or undefined if not set.\r\n     */\n\n    /**\r\n    * Set or clear the data validation object of the entire range.\r\n    * @param {object|undefined} dataValidation - Object or null to clear.\r\n    * @returns {Range} The range.\r\n    */\n\n  }, {\n    key: \"dataValidation\",\n    value: function dataValidation() {\n      var _this4 = this;\n\n      return new ArgHandler('Range.dataValidation')[\"case\"](function () {\n        return _this4.sheet().dataValidation(_this4.address());\n      })[\"case\"]('boolean', function (obj) {\n        return _this4.sheet().dataValidation(_this4.address(), obj);\n      })[\"case\"]('*', function (obj) {\n        _this4.sheet().dataValidation(_this4.address(), obj);\n\n        return _this4;\n      }).handle(arguments);\n    }\n    /**\r\n     * Callback used by reduce.\r\n     * @callback Range~reduceCallback\r\n     * @param {*} accumulator - The accumulated value.\r\n     * @param {Cell} cell - The cell.\r\n     * @param {number} ri - The relative row index.\r\n     * @param {number} ci - The relative column index.\r\n     * @param {Range} range - The range.\r\n     * @returns {*} The value to map to.\r\n     */\n\n    /**\r\n     * Reduces the range to a single value accumulated from the result of a function called for each cell.\r\n     * @param {Range~reduceCallback} callback - Function called for each cell in the range.\r\n     * @param {*} [initialValue] - The initial value.\r\n     * @returns {*} The accumulated value.\r\n     */\n\n  }, {\n    key: \"reduce\",\n    value: function reduce(callback, initialValue) {\n      var _this5 = this;\n\n      var accumulator = initialValue;\n      this.forEach(function (cell, ri, ci) {\n        accumulator = callback(accumulator, cell, ri, ci, _this5);\n      });\n      return accumulator;\n    }\n    /**\r\n     * Gets the parent sheet of the range.\r\n     * @returns {Sheet} The parent sheet.\r\n     */\n\n  }, {\n    key: \"sheet\",\n    value: function sheet() {\n      return this.startCell().sheet();\n    }\n    /**\r\n     * Gets the start cell of the range.\r\n     * @returns {Cell} The start cell.\r\n     */\n\n  }, {\n    key: \"startCell\",\n    value: function startCell() {\n      return this._startCell;\n    }\n    /**\r\n     * Gets a single style for each cell.\r\n     * @param {string} name - The name of the style.\r\n     * @returns {Array.<Array.<*>>} 2D array of style values.\r\n     */\n\n    /**\r\n    * Gets multiple styles for each cell.\r\n    * @param {Array.<string>} names - The names of the styles.\r\n    * @returns {Object.<string, Array.<Array.<*>>>} Object whose keys are style names and values are 2D arrays of style values.\r\n    */\n\n    /**\r\n    * Set the style in each cell to the result of a function called for each.\r\n    * @param {string} name - The name of the style.\r\n    * @param {Range~mapCallback} callback - The callback to provide value for the cell.\r\n    * @returns {Range} The range.\r\n    */\n\n    /**\r\n    * Sets the style in each cell to the corresponding value in the given 2D array of values.\r\n    * @param {string} name - The name of the style.\r\n    * @param {Array.<Array.<*>>} values - The style values to set.\r\n    * @returns {Range} The range.\r\n    */\n\n    /**\r\n    * Set the style of all cells in the range to a single style value.\r\n    * @param {string} name - The name of the style.\r\n    * @param {*} value - The value to set.\r\n    * @returns {Range} The range.\r\n    */\n\n    /**\r\n    * Set multiple styles for the cells in the range.\r\n    * @param {object.<string,Range~mapCallback|Array.<Array.<*>>|*>} styles - Object whose keys are style names and values are either function callbacks, 2D arrays of style values, or a single value for all the cells.\r\n    * @returns {Range} The range.\r\n    */\n\n    /**\r\n    * Sets to a specific style\r\n    * @param {Style} style - Style object given from stylesheet.createStyle\r\n    * @returns {Range} The range.\r\n    */\n\n  }, {\n    key: \"style\",\n    value: function style() {\n      var _this6 = this;\n\n      return new ArgHandler(\"Range.style\")[\"case\"]('string', function (name) {\n        // Get single value\n        return _this6.map(function (cell) {\n          return cell.style(name);\n        });\n      })[\"case\"]('array', function (names) {\n        // Get list of values\n        var values = {};\n        names.forEach(function (name) {\n          values[name] = _this6.style(name);\n        });\n        return values;\n      })[\"case\"](['string', 'function'], function (name, callback) {\n        // Set a single value for the cells to the result of a function\n        return _this6.forEach(function (cell, ri, ci) {\n          cell.style(name, callback(cell, ri, ci, _this6));\n        });\n      })[\"case\"](['string', 'array'], function (name, values) {\n        // Set a single value for the cells using an array of matching dimension\n        return _this6.forEach(function (cell, ri, ci) {\n          if (values[ri] && values[ri][ci] !== undefined) {\n            cell.style(name, values[ri][ci]);\n          }\n        });\n      })[\"case\"](['string', '*'], function (name, value) {\n        // Set a single value for all cells to a single value\n        return _this6.forEach(function (cell) {\n          return cell.style(name, value);\n        });\n      })[\"case\"]('object', function (nameValues) {\n        // Object of key value pairs to set\n        for (var name in nameValues) {\n          if (!nameValues.hasOwnProperty(name)) continue;\n          var value = nameValues[name];\n\n          _this6.style(name, value);\n        }\n\n        return _this6;\n      })[\"case\"]('Style', function (style) {\n        _this6._style = style;\n        return _this6.forEach(function (cell) {\n          return cell.style(style);\n        });\n      }).handle(arguments);\n    }\n    /**\r\n     * Callback used by tap.\r\n     * @callback Range~tapCallback\r\n     * @param {Range} range - The range.\r\n     * @returns {undefined}\r\n     */\n\n    /**\r\n     * Invoke a callback on the range and return the range. Useful for method chaining.\r\n     * @param {Range~tapCallback} callback - The callback function.\r\n     * @returns {Range} The range.\r\n     */\n\n  }, {\n    key: \"tap\",\n    value: function tap(callback) {\n      callback(this);\n      return this;\n    }\n    /**\r\n     * Callback used by thru.\r\n     * @callback Range~thruCallback\r\n     * @param {Range} range - The range.\r\n     * @returns {*} The value to return from thru.\r\n     */\n\n    /**\r\n     * Invoke a callback on the range and return the value provided by the callback. Useful for method chaining.\r\n     * @param {Range~thruCallback} callback - The callback function.\r\n     * @returns {*} The return value of the callback.\r\n     */\n\n  }, {\n    key: \"thru\",\n    value: function thru(callback) {\n      return callback(this);\n    }\n    /**\r\n     * Get the values of each cell in the range as a 2D array.\r\n     * @returns {Array.<Array.<*>>} The values.\r\n     */\n\n    /**\r\n    * Set the values in each cell to the result of a function called for each.\r\n    * @param {Range~mapCallback} callback - The callback to provide value for the cell.\r\n    * @returns {Range} The range.\r\n    */\n\n    /**\r\n    * Sets the value in each cell to the corresponding value in the given 2D array of values.\r\n    * @param {Array.<Array.<*>>} values - The values to set.\r\n    * @returns {Range} The range.\r\n    */\n\n    /**\r\n    * Set the value of all cells in the range to a single value.\r\n    * @param {*} value - The value to set.\r\n    * @returns {Range} The range.\r\n    */\n\n  }, {\n    key: \"value\",\n    value: function value() {\n      var _this7 = this;\n\n      return new ArgHandler(\"Range.value\")[\"case\"](function () {\n        // Get values\n        return _this7.map(function (cell) {\n          return cell.value();\n        });\n      })[\"case\"]('function', function (callback) {\n        // Set a value for the cells to the result of a function\n        return _this7.forEach(function (cell, ri, ci) {\n          cell.value(callback(cell, ri, ci, _this7));\n        });\n      })[\"case\"]('array', function (values) {\n        // Set value for the cells using an array of matching dimension\n        return _this7.forEach(function (cell, ri, ci) {\n          if (values[ri] && values[ri][ci] !== undefined) {\n            cell.value(values[ri][ci]);\n          }\n        });\n      })[\"case\"]('*', function (value) {\n        // Set the value for all cells to a single value\n        return _this7.forEach(function (cell) {\n          return cell.value(value);\n        });\n      }).handle(arguments);\n    }\n    /**\r\n     * Gets the parent workbook.\r\n     * @returns {Workbook} The parent workbook.\r\n     */\n\n  }, {\n    key: \"workbook\",\n    value: function workbook() {\n      return this.sheet().workbook();\n    }\n    /**\r\n     * Find the extent of the range.\r\n     * @returns {undefined}\r\n     * @private\r\n     */\n\n  }, {\n    key: \"_findRangeExtent\",\n    value: function _findRangeExtent() {\n      this._minRowNumber = Math.min(this._startCell.rowNumber(), this._endCell.rowNumber());\n      this._maxRowNumber = Math.max(this._startCell.rowNumber(), this._endCell.rowNumber());\n      this._minColumnNumber = Math.min(this._startCell.columnNumber(), this._endCell.columnNumber());\n      this._maxColumnNumber = Math.max(this._startCell.columnNumber(), this._endCell.columnNumber());\n      this._numRows = this._maxRowNumber - this._minRowNumber + 1;\n      this._numColumns = this._maxColumnNumber - this._minColumnNumber + 1;\n    }\n  }]);\n\n  return Range;\n}();\n\nmodule.exports = Range;","\"use strict\";\n/**\r\n * PageBreaks\r\n */\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nvar PageBreaks =\n/*#__PURE__*/\nfunction () {\n  function PageBreaks(node) {\n    _classCallCheck(this, PageBreaks);\n\n    this._node = node;\n  }\n  /**\r\n   * add page-breaks by row/column id\r\n   * @param {number} id - row/column id (rowNumber/colNumber)\r\n   * @return {PageBreaks} the page-breaks\r\n   */\n\n\n  _createClass(PageBreaks, [{\n    key: \"add\",\n    value: function add(id) {\n      this._node.children.push({\n        name: \"brk\",\n        children: [],\n        attributes: {\n          id: id,\n          max: 16383,\n          man: 1\n        }\n      });\n\n      this._node.attributes.count++;\n      this._node.attributes.manualBreakCount++;\n      return this;\n    }\n    /**\r\n     * remove page-breaks by index\r\n     * @param {number} index - index of list\r\n     * @return {PageBreaks} the page-breaks\r\n     */\n\n  }, {\n    key: \"remove\",\n    value: function remove(index) {\n      var brk = this._node.children[index];\n\n      if (brk) {\n        this._node.children.splice(index, 1);\n\n        this._node.attributes.count--;\n\n        if (brk.man) {\n          this._node.attributes.manualBreakCount--;\n        }\n      }\n\n      return this;\n    }\n    /**\r\n     * get count of the page-breaks\r\n     * @return {number} the page-breaks' count\r\n     */\n\n  }, {\n    key: \"count\",\n    get: function get() {\n      return this._node.attributes.count;\n    }\n    /**\r\n     * get list of page-breaks\r\n     * @return {Array} list of the page-breaks\r\n     */\n\n  }, {\n    key: \"list\",\n    get: function get() {\n      return this._node.children.map(function (brk) {\n        return {\n          id: brk.id,\n          isManual: !!brk.man\n        };\n      });\n    }\n  }]);\n\n  return PageBreaks;\n}();\n\nmodule.exports = PageBreaks;","\"use strict\";\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nvar _ = require(\"lodash\");\n/**\r\n * A content type collection.\r\n * @ignore\r\n */\n\n\nvar ContentTypes =\n/*#__PURE__*/\nfunction () {\n  /**\r\n   * Creates a new instance of ContentTypes\r\n   * @param {{}} node - The node.\r\n   */\n  function ContentTypes(node) {\n    _classCallCheck(this, ContentTypes);\n\n    this._node = node;\n  }\n  /**\r\n   * Add a new content type.\r\n   * @param {string} partName - The part name.\r\n   * @param {string} contentType - The content type.\r\n   * @returns {{}} The new content type.\r\n   */\n\n\n  _createClass(ContentTypes, [{\n    key: \"add\",\n    value: function add(partName, contentType) {\n      var node = {\n        name: \"Override\",\n        attributes: {\n          PartName: partName,\n          ContentType: contentType\n        }\n      };\n\n      this._node.children.push(node);\n\n      return node;\n    }\n    /**\r\n     * Find a content type by part name.\r\n     * @param {string} partName - The part name.\r\n     * @returns {{}|undefined} The matching content type or undefined if not found.\r\n     */\n\n  }, {\n    key: \"findByPartName\",\n    value: function findByPartName(partName) {\n      return _.find(this._node.children, function (node) {\n        return node.attributes.PartName === partName;\n      });\n    }\n    /**\r\n     * Convert the collection to an XML object.\r\n     * @returns {{}} The XML.\r\n     */\n\n  }, {\n    key: \"toXml\",\n    value: function toXml() {\n      return this._node;\n    }\n  }]);\n\n  return ContentTypes;\n}();\n\nmodule.exports = ContentTypes;\n/*\r\n[Content_Types].xml\r\n\r\n<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\r\n<Types xmlns=\"http://schemas.openxmlformats.org/package/2006/content-types\">\r\n    <Default Extension=\"bin\" ContentType=\"application/vnd.openxmlformats-officedocument.spreadsheetml.printerSettings\"/>\r\n    <Default Extension=\"rels\" ContentType=\"application/vnd.openxmlformats-package.relationships+xml\"/>\r\n    <Default Extension=\"xml\" ContentType=\"application/xml\"/>\r\n    <Override PartName=\"/xl/workbook.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml\"/>\r\n    <Override PartName=\"/xl/worksheets/sheet1.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml\"/>\r\n    <Override PartName=\"/xl/theme/theme1.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.theme+xml\"/>\r\n    <Override PartName=\"/xl/styles.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml\"/>\r\n    <Override PartName=\"/xl/sharedStrings.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml\"/>\r\n    <Override PartName=\"/xl/calcChain.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.spreadsheetml.calcChain+xml\"/>\r\n    <Override PartName=\"/docProps/core.xml\" ContentType=\"application/vnd.openxmlformats-package.core-properties+xml\"/>\r\n    <Override PartName=\"/docProps/app.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.extended-properties+xml\"/>\r\n</Types>\r\n*/","\"use strict\";\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nvar _ = require(\"lodash\");\n\nvar xmlq = require(\"./xmlq\");\n\nvar ArgHandler = require(\"./ArgHandler\");\n/**\r\n * App properties\r\n * @ignore\r\n */\n\n\nvar AppProperties =\n/*#__PURE__*/\nfunction () {\n  /**\r\n   * Creates a new instance of AppProperties\r\n   * @param {{}} node - The node.\r\n   */\n  function AppProperties(node) {\n    _classCallCheck(this, AppProperties);\n\n    this._node = node;\n  }\n\n  _createClass(AppProperties, [{\n    key: \"isSecure\",\n    value: function isSecure(value) {\n      var _this = this;\n\n      return new ArgHandler(\"Range.formula\")[\"case\"](function () {\n        var docSecurityNode = xmlq.findChild(_this._node, \"DocSecurity\");\n        if (!docSecurityNode) return false;\n        return docSecurityNode.children[0] === 1;\n      })[\"case\"]('boolean', function (value) {\n        var docSecurityNode = xmlq.appendChildIfNotFound(_this._node, \"DocSecurity\");\n        docSecurityNode.children = [value ? 1 : 0];\n        return _this;\n      }).handle(arguments);\n    }\n    /**\r\n     * Convert the collection to an XML object.\r\n     * @returns {{}} The XML.\r\n     */\n\n  }, {\n    key: \"toXml\",\n    value: function toXml() {\n      return this._node;\n    }\n  }]);\n\n  return AppProperties;\n}();\n\nmodule.exports = AppProperties;\n/*\r\ndocProps/app.xml\r\n\r\n<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\r\n<Properties xmlns=\"http://schemas.openxmlformats.org/officeDocument/2006/extended-properties\" xmlns:vt=\"http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes\">\r\n    <Application>Microsoft Excel</Application>\r\n<DocSecurity>1</DocSecurity>\r\n<ScaleCrop>false</ScaleCrop>\r\n<HeadingPairs>\r\n<vt:vector size=\"2\" baseType=\"variant\">\r\n    <vt:variant>\r\n<vt:lpstr>Worksheets</vt:lpstr>\r\n</vt:variant>\r\n<vt:variant>\r\n<vt:i4>1</vt:i4>\r\n</vt:variant>\r\n</vt:vector>\r\n</HeadingPairs>\r\n<TitlesOfParts>\r\n<vt:vector size=\"1\" baseType=\"lpstr\">\r\n    <vt:lpstr>Sheet1</vt:lpstr>\r\n</vt:vector>\r\n</TitlesOfParts>\r\n<Company/>\r\n<LinksUpToDate>false</LinksUpToDate>\r\n<SharedDoc>false</SharedDoc>\r\n<HyperlinksChanged>false</HyperlinksChanged>\r\n<AppVersion>16.0300</AppVersion>\r\n</Properties>\r\n */","\"use strict\";\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nvar allowedProperties = {\n  title: \"dc:title\",\n  subject: \"dc:subject\",\n  author: \"dc:creator\",\n  creator: \"dc:creator\",\n  description: \"dc:description\",\n  keywords: \"cp:keywords\",\n  category: \"cp:category\"\n};\n/**\r\n * Core properties\r\n * @ignore\r\n */\n\nvar CoreProperties =\n/*#__PURE__*/\nfunction () {\n  function CoreProperties(node) {\n    _classCallCheck(this, CoreProperties);\n\n    this._node = node;\n    this._properties = {};\n  }\n  /**\r\n   * Sets a specific property.\r\n   * @param {string} name - The name of the property.\r\n   * @param {*} value - The value of the property.\r\n   * @returns {CoreProperties} CoreProperties.\r\n   */\n\n\n  _createClass(CoreProperties, [{\n    key: \"set\",\n    value: function set(name, value) {\n      var key = name.toLowerCase();\n\n      if (typeof allowedProperties[key] === \"undefined\") {\n        throw new Error(\"Unknown property name: \\\"\".concat(name, \"\\\"\"));\n      }\n\n      this._properties[key] = value;\n      return this;\n    }\n    /**\r\n     * Get a specific property.\r\n     * @param {string} name - The name of the property.\r\n     * @returns {*} The property value.\r\n     */\n\n  }, {\n    key: \"get\",\n    value: function get(name) {\n      var key = name.toLowerCase();\n\n      if (typeof allowedProperties[key] === \"undefined\") {\n        throw new Error(\"Unknown property name: \\\"\".concat(name, \"\\\"\"));\n      }\n\n      return this._properties[key];\n    }\n    /**\r\n     * Convert the collection to an XML object.\r\n     * @returns {{}} The XML.\r\n     */\n\n  }, {\n    key: \"toXml\",\n    value: function toXml() {\n      for (var key in this._properties) {\n        if (!this._properties.hasOwnProperty(key)) continue;\n\n        this._node.children.push({\n          name: allowedProperties[key],\n          children: [this._properties[key]]\n        });\n      }\n\n      return this._node;\n    }\n  }]);\n\n  return CoreProperties;\n}();\n\nmodule.exports = CoreProperties;\n/*\r\ndocProps/core.xml\r\n\r\n<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\r\n<cp:coreProperties xmlns:cp=\"http://schemas.openxmlformats.org/package/2006/metadata/core-properties\" xmlns:dc=\"http://purl.org/dc/elements/1.1/\" xmlns:dcterms=\"http://purl.org/dc/terms/\" xmlns:dcmitype=\"http://purl.org/dc/dcmitype/\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">\r\n<dc:title>Title</dc:title>\r\n<dc:subject>Subject</dc:subject>\r\n<dc:creator>Creator</dc:creator>\r\n<cp:keywords>Keywords</cp:keywords>\r\n<dc:description>Description</dc:description>\r\n<cp:category>Category</cp:category>\r\n</cp:coreProperties>\r\n */","\"use strict\";\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nvar _ = require(\"lodash\");\n/**\r\n * The shared strings table.\r\n * @ignore\r\n */\n\n\nvar SharedStrings =\n/*#__PURE__*/\nfunction () {\n  /**\r\n   * Constructs a new instance of _SharedStrings.\r\n   * @param {{}} node - The node.\r\n   */\n  function SharedStrings(node) {\n    _classCallCheck(this, SharedStrings);\n\n    this._stringArray = [];\n    this._indexMap = {};\n\n    this._init(node);\n\n    this._cacheExistingSharedStrings();\n  }\n  /**\r\n   * Gets the index for a string\r\n   * @param {string|Array.<{}>} string - The string or rich text array.\r\n   * @returns {number} The index\r\n   */\n\n\n  _createClass(SharedStrings, [{\n    key: \"getIndexForString\",\n    value: function getIndexForString(string) {\n      // If the string is found in the cache, return the index.\n      var key = _.isArray(string) ? JSON.stringify(string) : string;\n      var index = this._indexMap[key];\n      if (index >= 0) return index; // Otherwise, add it to the caches.\n\n      index = this._stringArray.length;\n\n      this._stringArray.push(string);\n\n      this._indexMap[key] = index; // Append a new si node.\n\n      this._node.children.push({\n        name: \"si\",\n        children: _.isArray(string) ? string : [{\n          name: \"t\",\n          attributes: {\n            'xml:space': \"preserve\"\n          },\n          children: [string]\n        }]\n      });\n\n      return index;\n    }\n    /**\r\n     * Get the string for a given index\r\n     * @param {number} index - The index\r\n     * @returns {string} The string\r\n     */\n\n  }, {\n    key: \"getStringByIndex\",\n    value: function getStringByIndex(index) {\n      return this._stringArray[index];\n    }\n    /**\r\n     * Convert the collection to an XML object.\r\n     * @returns {{}} The XML object.\r\n     */\n\n  }, {\n    key: \"toXml\",\n    value: function toXml() {\n      return this._node;\n    }\n    /**\r\n     * Store any existing values in the caches.\r\n     * @private\r\n     * @returns {undefined}\r\n     */\n\n  }, {\n    key: \"_cacheExistingSharedStrings\",\n    value: function _cacheExistingSharedStrings() {\n      var _this = this;\n\n      this._node.children.forEach(function (node, i) {\n        var content = node.children[0];\n\n        if (content.name === \"t\") {\n          var string = content.children[0];\n\n          _this._stringArray.push(string);\n\n          _this._indexMap[string] = i;\n        } else {\n          // TODO: Properly support rich text nodes in the future. For now just store the object as a placeholder.\n          _this._stringArray.push(node.children);\n\n          _this._indexMap[JSON.stringify(node.children)] = i;\n        }\n      });\n    }\n    /**\r\n     * Initialize the node.\r\n     * @param {{}} [node] - The shared strings node.\r\n     * @private\r\n     * @returns {undefined}\r\n     */\n\n  }, {\n    key: \"_init\",\n    value: function _init(node) {\n      if (!node) node = {\n        name: \"sst\",\n        attributes: {\n          xmlns: \"http://schemas.openxmlformats.org/spreadsheetml/2006/main\"\n        },\n        children: []\n      };\n      this._node = node;\n      delete this._node.attributes.count;\n      delete this._node.attributes.uniqueCount;\n    }\n  }]);\n\n  return SharedStrings;\n}();\n\nmodule.exports = SharedStrings;\n/*\r\nxl/sharedStrings.xml\r\n\r\n<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\r\n<sst xmlns=\"http://schemas.openxmlformats.org/spreadsheetml/2006/main\" count=\"13\" uniqueCount=\"4\">\r\n\t<si>\r\n\t\t<t>Foo</t>\r\n\t</si>\r\n\t<si>\r\n\t\t<t>Bar</t>\r\n\t</si>\r\n\t<si>\r\n\t\t<t>Goo</t>\r\n\t</si>\r\n\t<si>\r\n\t\t<r>\r\n\t\t\t<t>s</t>\r\n\t\t</r><r>\r\n\t\t\t<rPr>\r\n\t\t\t\t<b/>\r\n\t\t\t\t<sz val=\"11\"/>\r\n\t\t\t\t<color theme=\"1\"/>\r\n\t\t\t\t<rFont val=\"Calibri\"/>\r\n\t\t\t\t<family val=\"2\"/>\r\n\t\t\t\t<scheme val=\"minor\"/>\r\n\t\t\t</rPr><t>d;</t>\r\n\t\t</r><r>\r\n\t\t\t<rPr>\r\n\t\t\t\t<sz val=\"11\"/>\r\n\t\t\t\t<color theme=\"1\"/>\r\n\t\t\t\t<rFont val=\"Calibri\"/>\r\n\t\t\t\t<family val=\"2\"/>\r\n\t\t\t\t<scheme val=\"minor\"/>\r\n\t\t\t</rPr><t>lfk;l</t>\r\n\t\t</r>\r\n\t</si>\r\n</sst>\r\n*/","\"use strict\";\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nvar _ = require(\"lodash\");\n\nvar xmlq = require(\"./xmlq\");\n\nvar Style = require(\"./Style\");\n/**\r\n * Standard number format codes\r\n * Taken from http://polymathprogrammer.com/2011/02/15/built-in-styles-for-excel-open-xml/\r\n * @private\r\n */\n\n\nvar STANDARD_CODES = {\n  0: 'General',\n  1: '0',\n  2: '0.00',\n  3: '#,##0',\n  4: '#,##0.00',\n  9: '0%',\n  10: '0.00%',\n  11: '0.00E+00',\n  12: '# ?/?',\n  13: '# ??/??',\n  14: 'mm-dd-yy',\n  15: 'd-mmm-yy',\n  16: 'd-mmm',\n  17: 'mmm-yy',\n  18: 'h:mm AM/PM',\n  19: 'h:mm:ss AM/PM',\n  20: 'h:mm',\n  21: 'h:mm:ss',\n  22: 'm/d/yy h:mm',\n  37: '#,##0 ;(#,##0)',\n  38: '#,##0 ;[Red](#,##0)',\n  39: '#,##0.00;(#,##0.00)',\n  40: '#,##0.00;[Red](#,##0.00)',\n  45: 'mm:ss',\n  46: '[h]:mm:ss',\n  47: 'mmss.0',\n  48: '##0.0E+0',\n  49: '@'\n};\n/**\r\n * The starting ID for custom number formats. The first 163 indexes are reserved.\r\n * @private\r\n */\n\nvar STARTING_CUSTOM_NUMBER_FORMAT_ID = 164;\n/**\r\n * A style sheet.\r\n * @ignore\r\n */\n\nvar StyleSheet =\n/*#__PURE__*/\nfunction () {\n  /**\r\n   * Creates an instance of _StyleSheet.\r\n   * @param {string} node - The style sheet node\r\n   */\n  function StyleSheet(node) {\n    _classCallCheck(this, StyleSheet);\n\n    this._init(node);\n\n    this._cacheNumberFormats();\n  }\n  /**\r\n   * Create a style.\r\n   * @param {number} [sourceId] - The source style ID to copy, if provided.\r\n   * @returns {Style} The style.\r\n   */\n\n\n  _createClass(StyleSheet, [{\n    key: \"createStyle\",\n    value: function createStyle(sourceId) {\n      var fontNode, fillNode, borderNode, xfNode;\n\n      if (sourceId >= 0) {\n        var sourceXfNode = this._cellXfsNode.children[sourceId];\n        xfNode = _.cloneDeep(sourceXfNode);\n\n        if (sourceXfNode.attributes.applyFont) {\n          var fontId = sourceXfNode.attributes.fontId;\n          fontNode = _.cloneDeep(this._fontsNode.children[fontId]);\n        }\n\n        if (sourceXfNode.attributes.applyFill) {\n          var fillId = sourceXfNode.attributes.fillId;\n          fillNode = _.cloneDeep(this._fillsNode.children[fillId]);\n        }\n\n        if (sourceXfNode.attributes.applyBorder) {\n          var borderId = sourceXfNode.attributes.borderId;\n          borderNode = _.cloneDeep(this._bordersNode.children[borderId]);\n        }\n      }\n\n      if (!fontNode) fontNode = {\n        name: \"font\",\n        attributes: {},\n        children: []\n      };\n\n      this._fontsNode.children.push(fontNode);\n\n      if (!fillNode) fillNode = {\n        name: \"fill\",\n        attributes: {},\n        children: []\n      };\n\n      this._fillsNode.children.push(fillNode); // The border sides must be in order\n\n\n      if (!borderNode) borderNode = {\n        name: \"border\",\n        attributes: {},\n        children: []\n      };\n      borderNode.children = [xmlq.findChild(borderNode, \"left\") || {\n        name: \"left\",\n        attributes: {},\n        children: []\n      }, xmlq.findChild(borderNode, \"right\") || {\n        name: \"right\",\n        attributes: {},\n        children: []\n      }, xmlq.findChild(borderNode, \"top\") || {\n        name: \"top\",\n        attributes: {},\n        children: []\n      }, xmlq.findChild(borderNode, \"bottom\") || {\n        name: \"bottom\",\n        attributes: {},\n        children: []\n      }, xmlq.findChild(borderNode, \"diagonal\") || {\n        name: \"diagonal\",\n        attributes: {},\n        children: []\n      }];\n\n      this._bordersNode.children.push(borderNode);\n\n      if (!xfNode) xfNode = {\n        name: \"xf\",\n        attributes: {},\n        children: []\n      };\n\n      _.assign(xfNode.attributes, {\n        fontId: this._fontsNode.children.length - 1,\n        fillId: this._fillsNode.children.length - 1,\n        borderId: this._bordersNode.children.length - 1,\n        applyFont: 1,\n        applyFill: 1,\n        applyBorder: 1\n      });\n\n      this._cellXfsNode.children.push(xfNode);\n\n      return new Style(this, this._cellXfsNode.children.length - 1, xfNode, fontNode, fillNode, borderNode);\n    }\n    /**\r\n     * Get the number format code for a given ID.\r\n     * @param {number} id - The number format ID.\r\n     * @returns {string} The format code.\r\n     */\n\n  }, {\n    key: \"getNumberFormatCode\",\n    value: function getNumberFormatCode(id) {\n      return this._numberFormatCodesById[id];\n    }\n    /**\r\n     * Get the nuumber format ID for a given code.\r\n     * @param {string} code - The format code.\r\n     * @returns {number} The number format ID.\r\n     */\n\n  }, {\n    key: \"getNumberFormatId\",\n    value: function getNumberFormatId(code) {\n      var id = this._numberFormatIdsByCode[code];\n\n      if (id === undefined) {\n        id = this._nextNumFormatId++;\n        this._numberFormatCodesById[id] = code;\n        this._numberFormatIdsByCode[code] = id;\n\n        this._numFmtsNode.children.push({\n          name: 'numFmt',\n          attributes: {\n            numFmtId: id,\n            formatCode: code\n          }\n        });\n      }\n\n      return id;\n    }\n    /**\r\n     * Convert the style sheet to an XML object.\r\n     * @returns {{}} The XML form.\r\n     * @ignore\r\n     */\n\n  }, {\n    key: \"toXml\",\n    value: function toXml() {\n      return this._node;\n    }\n    /**\r\n     * Cache the number format codes\r\n     * @returns {undefined}\r\n     * @private\r\n     */\n\n  }, {\n    key: \"_cacheNumberFormats\",\n    value: function _cacheNumberFormats() {\n      var _this = this;\n\n      // Load the standard number format codes into the caches.\n      this._numberFormatCodesById = {};\n      this._numberFormatIdsByCode = {};\n\n      for (var id in STANDARD_CODES) {\n        if (!STANDARD_CODES.hasOwnProperty(id)) continue;\n        var code = STANDARD_CODES[id];\n        this._numberFormatCodesById[id] = code;\n        this._numberFormatIdsByCode[code] = parseInt(id);\n      } // Set the next number format code.\n\n\n      this._nextNumFormatId = STARTING_CUSTOM_NUMBER_FORMAT_ID; // If there are custom number formats, cache them all and update the next num as needed.\n\n      this._numFmtsNode.children.forEach(function (node) {\n        var id = node.attributes.numFmtId;\n        var code = node.attributes.formatCode;\n        _this._numberFormatCodesById[id] = code;\n        _this._numberFormatIdsByCode[code] = id;\n        if (id >= _this._nextNumFormatId) _this._nextNumFormatId = id + 1;\n      });\n    }\n    /**\r\n     * Initialize the style sheet node.\r\n     * @param {{}} [node] - The node\r\n     * @returns {undefined}\r\n     * @private\r\n     */\n\n  }, {\n    key: \"_init\",\n    value: function _init(node) {\n      this._node = node; // Cache the refs to the collections.\n\n      this._numFmtsNode = xmlq.findChild(this._node, \"numFmts\");\n      this._fontsNode = xmlq.findChild(this._node, \"fonts\");\n      this._fillsNode = xmlq.findChild(this._node, \"fills\");\n      this._bordersNode = xmlq.findChild(this._node, \"borders\");\n      this._cellXfsNode = xmlq.findChild(this._node, \"cellXfs\");\n\n      if (!this._numFmtsNode) {\n        this._numFmtsNode = {\n          name: \"numFmts\",\n          attributes: {},\n          children: []\n        }; // Number formats need to be before the others.\n\n        xmlq.insertBefore(this._node, this._numFmtsNode, this._fontsNode);\n      } // Remove the optional counts so we don't have to keep them up to date.\n\n\n      delete this._numFmtsNode.attributes.count;\n      delete this._fontsNode.attributes.count;\n      delete this._fillsNode.attributes.count;\n      delete this._bordersNode.attributes.count;\n      delete this._cellXfsNode.attributes.count;\n    }\n  }]);\n\n  return StyleSheet;\n}();\n\nmodule.exports = StyleSheet;\n/*\r\nxl/styles.xml\r\n\r\n<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\r\n<styleSheet xmlns=\"http://schemas.openxmlformats.org/spreadsheetml/2006/main\" xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" mc:Ignorable=\"x14ac x16r2\" xmlns:x14ac=\"http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac\" xmlns:x16r2=\"http://schemas.microsoft.com/office/spreadsheetml/2015/02/main\">\r\n    <numFmts count=\"1\">\r\n        <numFmt numFmtId=\"164\" formatCode=\"#,##0_);[Red]\\(#,##0\\)\\)\"/>\r\n    </numFmts>\r\n    <fonts count=\"1\" x14ac:knownFonts=\"1\">\r\n        <font>\r\n            <sz val=\"11\"/>\r\n            <color theme=\"1\"/>\r\n            <name val=\"Calibri\"/>\r\n            <family val=\"2\"/>\r\n            <scheme val=\"minor\"/>\r\n        </font>\r\n    </fonts>\r\n    <fills count=\"11\">\r\n        <fill>\r\n            <patternFill patternType=\"none\"/>\r\n        </fill>\r\n        <fill>\r\n            <patternFill patternType=\"gray125\"/>\r\n        </fill>\r\n        <fill>\r\n            <patternFill patternType=\"solid\">\r\n                <fgColor rgb=\"FFC00000\"/>\r\n                <bgColor indexed=\"64\"/>\r\n            </patternFill>\r\n        </fill>\r\n        <fill>\r\n            <patternFill patternType=\"lightDown\">\r\n                <fgColor theme=\"4\"/>\r\n                <bgColor rgb=\"FFC00000\"/>\r\n            </patternFill>\r\n        </fill>\r\n        <fill>\r\n            <gradientFill degree=\"90\">\r\n                <stop position=\"0\">\r\n                    <color theme=\"0\"/>\r\n                </stop>\r\n                <stop position=\"1\">\r\n                    <color theme=\"4\"/>\r\n                </stop>\r\n            </gradientFill>\r\n        </fill>\r\n        <fill>\r\n            <gradientFill>\r\n                <stop position=\"0\">\r\n                    <color theme=\"0\"/>\r\n                </stop>\r\n                <stop position=\"1\">\r\n                    <color theme=\"4\"/>\r\n                </stop>\r\n            </gradientFill>\r\n        </fill>\r\n        <fill>\r\n            <gradientFill degree=\"45\">\r\n                <stop position=\"0\">\r\n                    <color theme=\"0\"/>\r\n                </stop>\r\n                <stop position=\"1\">\r\n                    <color theme=\"4\"/>\r\n                </stop>\r\n            </gradientFill>\r\n        </fill>\r\n        <fill>\r\n            <gradientFill degree=\"135\">\r\n                <stop position=\"0\">\r\n                    <color theme=\"0\"/>\r\n                </stop>\r\n                <stop position=\"1\">\r\n                    <color theme=\"4\"/>\r\n                </stop>\r\n            </gradientFill>\r\n        </fill>\r\n        <fill>\r\n            <gradientFill type=\"path\">\r\n                <stop position=\"0\">\r\n                    <color theme=\"0\"/>\r\n                </stop>\r\n                <stop position=\"1\">\r\n                    <color theme=\"4\"/>\r\n                </stop>\r\n            </gradientFill>\r\n        </fill>\r\n        <fill>\r\n            <gradientFill type=\"path\" left=\"0.5\" right=\"0.5\" top=\"0.5\" bottom=\"0.5\">\r\n                <stop position=\"0\">\r\n                    <color theme=\"0\"/>\r\n                </stop>\r\n                <stop position=\"1\">\r\n                    <color theme=\"4\"/>\r\n                </stop>\r\n            </gradientFill>\r\n        </fill>\r\n        <fill>\r\n            <gradientFill degree=\"270\">\r\n                <stop position=\"0\">\r\n                    <color theme=\"0\"/>\r\n                </stop>\r\n                <stop position=\"1\">\r\n                    <color theme=\"4\"/>\r\n                </stop>\r\n            </gradientFill>\r\n        </fill>\r\n    </fills>\r\n    <borders count=\"10\">\r\n        <border>\r\n            <left/>\r\n            <right/>\r\n            <top/>\r\n            <bottom/>\r\n            <diagonal/>\r\n        </border>\r\n        <border diagonalDown=\"1\">\r\n            <left/>\r\n            <right/>\r\n            <top/>\r\n            <bottom/>\r\n            <diagonal style=\"hair\">\r\n                <color auto=\"1\"/>\r\n            </diagonal>\r\n        </border>\r\n        <border diagonalDown=\"1\">\r\n            <left/>\r\n            <right/>\r\n            <top/>\r\n            <bottom/>\r\n            <diagonal style=\"dotted\">\r\n                <color auto=\"1\"/>\r\n            </diagonal>\r\n        </border>\r\n        <border diagonalDown=\"1\">\r\n            <left/>\r\n            <right/>\r\n            <top/>\r\n            <bottom/>\r\n            <diagonal style=\"dashDotDot\">\r\n                <color auto=\"1\"/>\r\n            </diagonal>\r\n        </border>\r\n        <border diagonalDown=\"1\">\r\n            <left/>\r\n            <right/>\r\n            <top/>\r\n            <bottom/>\r\n            <diagonal style=\"dashDot\">\r\n                <color auto=\"1\"/>\r\n            </diagonal>\r\n        </border>\r\n        <border diagonalDown=\"1\">\r\n            <left/>\r\n            <right/>\r\n            <top/>\r\n            <bottom/>\r\n            <diagonal style=\"dashed\">\r\n                <color auto=\"1\"/>\r\n            </diagonal>\r\n        </border>\r\n        <border diagonalUp=\"1\">\r\n            <left/>\r\n            <right/>\r\n            <top/>\r\n            <bottom/>\r\n            <diagonal style=\"mediumDashDotDot\">\r\n                <color auto=\"1\"/>\r\n            </diagonal>\r\n        </border>\r\n        <border diagonalUp=\"1\">\r\n            <left/>\r\n            <right/>\r\n            <top/>\r\n            <bottom/>\r\n            <diagonal style=\"slantDashDot\">\r\n                <color auto=\"1\"/>\r\n            </diagonal>\r\n        </border>\r\n        <border diagonalUp=\"1\">\r\n            <left/>\r\n            <right/>\r\n            <top/>\r\n            <bottom/>\r\n            <diagonal style=\"mediumDashDot\">\r\n                <color auto=\"1\"/>\r\n            </diagonal>\r\n        </border>\r\n        <border diagonalUp=\"1\">\r\n            <left/>\r\n            <right/>\r\n            <top/>\r\n            <bottom/>\r\n            <diagonal style=\"mediumDashed\">\r\n                <color auto=\"1\"/>\r\n            </diagonal>\r\n        </border>\r\n    </borders>\r\n    <cellStyleXfs count=\"1\">\r\n        <xf numFmtId=\"0\" fontId=\"0\" fillId=\"0\" borderId=\"0\"/>\r\n    </cellStyleXfs>\r\n    <cellXfs count=\"19\">\r\n        <xf numFmtId=\"0\" fontId=\"0\" fillId=\"0\" borderId=\"0\" xfId=\"0\"/>\r\n        <xf numFmtId=\"0\" fontId=\"0\" fillId=\"0\" borderId=\"1\" xfId=\"0\" applyBorder=\"1\"/>\r\n        <xf numFmtId=\"0\" fontId=\"0\" fillId=\"0\" borderId=\"2\" xfId=\"0\" applyBorder=\"1\"/>\r\n        <xf numFmtId=\"0\" fontId=\"0\" fillId=\"0\" borderId=\"3\" xfId=\"0\" applyBorder=\"1\"/>\r\n        <xf numFmtId=\"0\" fontId=\"0\" fillId=\"0\" borderId=\"4\" xfId=\"0\" applyBorder=\"1\"/>\r\n        <xf numFmtId=\"0\" fontId=\"0\" fillId=\"0\" borderId=\"5\" xfId=\"0\" applyBorder=\"1\"/>\r\n        <xf numFmtId=\"0\" fontId=\"0\" fillId=\"0\" borderId=\"6\" xfId=\"0\" applyBorder=\"1\"/>\r\n        <xf numFmtId=\"0\" fontId=\"0\" fillId=\"0\" borderId=\"7\" xfId=\"0\" applyBorder=\"1\"/>\r\n        <xf numFmtId=\"0\" fontId=\"0\" fillId=\"0\" borderId=\"8\" xfId=\"0\" applyBorder=\"1\"/>\r\n        <xf numFmtId=\"0\" fontId=\"0\" fillId=\"0\" borderId=\"9\" xfId=\"0\" applyBorder=\"1\"/>\r\n        <xf numFmtId=\"0\" fontId=\"0\" fillId=\"2\" borderId=\"0\" xfId=\"0\" applyFill=\"1\" applyBorder=\"1\"/>\r\n        <xf numFmtId=\"0\" fontId=\"0\" fillId=\"3\" borderId=\"0\" xfId=\"0\" applyFill=\"1\"/>\r\n        <xf numFmtId=\"0\" fontId=\"0\" fillId=\"4\" borderId=\"0\" xfId=\"0\" applyFill=\"1\"/>\r\n        <xf numFmtId=\"0\" fontId=\"0\" fillId=\"5\" borderId=\"0\" xfId=\"0\" applyFill=\"1\"/>\r\n        <xf numFmtId=\"0\" fontId=\"0\" fillId=\"6\" borderId=\"0\" xfId=\"0\" applyFill=\"1\"/>\r\n        <xf numFmtId=\"0\" fontId=\"0\" fillId=\"7\" borderId=\"0\" xfId=\"0\" applyFill=\"1\"/>\r\n        <xf numFmtId=\"0\" fontId=\"0\" fillId=\"8\" borderId=\"0\" xfId=\"0\" applyFill=\"1\"/>\r\n        <xf numFmtId=\"0\" fontId=\"0\" fillId=\"9\" borderId=\"0\" xfId=\"0\" applyFill=\"1\"/>\r\n        <xf numFmtId=\"0\" fontId=\"0\" fillId=\"10\" borderId=\"0\" xfId=\"0\" applyFill=\"1\"/>\r\n    </cellXfs>\r\n    <cellStyles count=\"1\">\r\n        <cellStyle name=\"Normal\" xfId=\"0\" builtinId=\"0\"/>\r\n    </cellStyles>\r\n    <dxfs count=\"0\"/>\r\n    <tableStyles count=\"0\" defaultTableStyle=\"TableStyleMedium2\" defaultPivotStyle=\"PivotStyleLight16\"/>\r\n    <extLst>\r\n        <ext uri=\"{EB79DEF2-80B8-43e5-95BD-54CBDDF9020C}\" xmlns:x14=\"http://schemas.microsoft.com/office/spreadsheetml/2009/9/main\">\r\n            <x14:slicerStyles defaultSlicerStyle=\"SlicerStyleLight1\"/>\r\n        </ext>\r\n        <ext uri=\"{9260A510-F301-46a8-8635-F512D64BE5F5}\" xmlns:x15=\"http://schemas.microsoft.com/office/spreadsheetml/2010/11/main\">\r\n            <x15:timelineStyles defaultTimelineStyle=\"TimeSlicerStyleLight1\"/>\r\n        </ext>\r\n    </extLst>\r\n</styleSheet>\r\n*/","\"use strict\";\n/**\r\n * OOXML uses the CFB file format with Agile Encryption. The details of the encryption are here:\r\n * https://msdn.microsoft.com/en-us/library/dd950165(v=office.12).aspx\r\n *\r\n * Helpful guidance also take from this Github project:\r\n * https://github.com/nolze/ms-offcrypto-tool\r\n */\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nvar _ = require(\"lodash\");\n\nvar cfb = require(\"cfb\");\n\nvar crypto = require(\"crypto\");\n\nvar externals = require(\"./externals\");\n\nvar XmlParser = require(\"./XmlParser\");\n\nvar XmlBuilder = require(\"./XmlBuilder\");\n\nvar xmlq = require(\"./xmlq\");\n\nvar ENCRYPTION_INFO_PREFIX = Buffer.from([0x04, 0x00, 0x04, 0x00, 0x40, 0x00, 0x00, 0x00]); // First 4 bytes are the version number, second 4 bytes are reserved.\n\nvar PACKAGE_ENCRYPTION_CHUNK_SIZE = 4096;\nvar PACKAGE_OFFSET = 8; // First 8 bytes are the size of the stream\n// Block keys used for encryption\n\nvar BLOCK_KEYS = {\n  dataIntegrity: {\n    hmacKey: Buffer.from([0x5f, 0xb2, 0xad, 0x01, 0x0c, 0xb9, 0xe1, 0xf6]),\n    hmacValue: Buffer.from([0xa0, 0x67, 0x7f, 0x02, 0xb2, 0x2c, 0x84, 0x33])\n  },\n  key: Buffer.from([0x14, 0x6e, 0x0b, 0xe7, 0xab, 0xac, 0xd0, 0xd6]),\n  verifierHash: {\n    input: Buffer.from([0xfe, 0xa7, 0xd2, 0x76, 0x3b, 0x4b, 0x9e, 0x79]),\n    value: Buffer.from([0xd7, 0xaa, 0x0f, 0x6d, 0x30, 0x61, 0x34, 0x4e])\n  }\n};\n/**\r\n * Encrypts/decrypts XLSXs.\r\n * @private\r\n */\n\nvar Encryptor =\n/*#__PURE__*/\nfunction () {\n  function Encryptor() {\n    _classCallCheck(this, Encryptor);\n  }\n\n  _createClass(Encryptor, [{\n    key: \"encrypt\",\n\n    /**\r\n     * Encrypt the data with the password.\r\n     * @param {Buffer} data - The data to encrypt\r\n     * @param {string} password - The password\r\n     * @returns {Buffer} The encrypted data\r\n     */\n    value: function encrypt(data, password) {\n      // Generate a random key to use to encrypt the document. Excel uses 32 bytes. We'll use the password to encrypt this key.\n      // N.B. The number of bits needs to correspond to an algorithm available in crypto (e.g. aes-256-cbc).\n      var packageKey = crypto.randomBytes(32); // Create the encryption info. We'll use this for all of the encryption operations and for building the encryption info XML entry\n\n      var encryptionInfo = {\n        \"package\": {\n          // Info on the encryption of the package.\n          cipherAlgorithm: 'AES',\n          // Cipher algorithm to use. Excel uses AES.\n          cipherChaining: 'ChainingModeCBC',\n          // Cipher chaining mode to use. Excel uses CBC.\n          saltValue: crypto.randomBytes(16),\n          // Random value to use as encryption salt. Excel uses 16 bytes.\n          hashAlgorithm: 'SHA512',\n          // Hash algorithm to use. Excel uses SHA512.\n          hashSize: 64,\n          // The size of the hash in bytes. SHA512 results in 64-byte hashes\n          blockSize: 16,\n          // The number of bytes used to encrypt one block of data. It MUST be at least 2, no greater than 4096, and a multiple of 2. Excel uses 16\n          keyBits: packageKey.length * 8 // The number of bits in the package key.\n\n        },\n        key: {\n          // Info on the encryption of the package key.\n          cipherAlgorithm: 'AES',\n          // Cipher algorithm to use. Excel uses AES.\n          cipherChaining: 'ChainingModeCBC',\n          // Cipher chaining mode to use. Excel uses CBC.\n          saltValue: crypto.randomBytes(16),\n          // Random value to use as encryption salt. Excel uses 16 bytes.\n          hashAlgorithm: 'SHA512',\n          // Hash algorithm to use. Excel uses SHA512.\n          hashSize: 64,\n          // The size of the hash in bytes. SHA512 results in 64-byte hashes\n          blockSize: 16,\n          // The number of bytes used to encrypt one block of data. It MUST be at least 2, no greater than 4096, and a multiple of 2. Excel uses 16\n          spinCount: 100000,\n          // The number of times to iterate on a hash of a password. It MUST NOT be greater than 10,000,000. Excel uses 100,000.\n          keyBits: 256 // The length of the key to generate from the password. Must be a multiple of 8. Excel uses 256.\n\n        }\n      };\n      /* Package Encryption */\n      // Encrypt package using the package key.\n\n      var encryptedPackage = this._cryptPackage(true, encryptionInfo[\"package\"].cipherAlgorithm, encryptionInfo[\"package\"].cipherChaining, encryptionInfo[\"package\"].hashAlgorithm, encryptionInfo[\"package\"].blockSize, encryptionInfo[\"package\"].saltValue, packageKey, data);\n      /* Data Integrity */\n      // Create the data integrity fields used by clients for integrity checks.\n      // First generate a random array of bytes to use in HMAC. The docs say to use the same length as the key salt, but Excel seems to use 64.\n\n\n      var hmacKey = crypto.randomBytes(64); // Then create an initialization vector using the package encryption info and the appropriate block key.\n\n      var hmacKeyIV = this._createIV(encryptionInfo[\"package\"].hashAlgorithm, encryptionInfo[\"package\"].saltValue, encryptionInfo[\"package\"].blockSize, BLOCK_KEYS.dataIntegrity.hmacKey); // Use the package key and the IV to encrypt the HMAC key\n\n\n      var encryptedHmacKey = this._crypt(true, encryptionInfo[\"package\"].cipherAlgorithm, encryptionInfo[\"package\"].cipherChaining, packageKey, hmacKeyIV, hmacKey); // Now create the HMAC\n\n\n      var hmacValue = this._hmac(encryptionInfo[\"package\"].hashAlgorithm, hmacKey, encryptedPackage); // Next generate an initialization vector for encrypting the resulting HMAC value.\n\n\n      var hmacValueIV = this._createIV(encryptionInfo[\"package\"].hashAlgorithm, encryptionInfo[\"package\"].saltValue, encryptionInfo[\"package\"].blockSize, BLOCK_KEYS.dataIntegrity.hmacValue); // Now encrypt the value\n\n\n      var encryptedHmacValue = this._crypt(true, encryptionInfo[\"package\"].cipherAlgorithm, encryptionInfo[\"package\"].cipherChaining, packageKey, hmacValueIV, hmacValue); // Put the encrypted key and value on the encryption info\n\n\n      encryptionInfo.dataIntegrity = {\n        encryptedHmacKey: encryptedHmacKey,\n        encryptedHmacValue: encryptedHmacValue\n      };\n      /* Key Encryption */\n      // Convert the password to an encryption key\n\n      var key = this._convertPasswordToKey(password, encryptionInfo.key.hashAlgorithm, encryptionInfo.key.saltValue, encryptionInfo.key.spinCount, encryptionInfo.key.keyBits, BLOCK_KEYS.key); // Encrypt the package key with the\n\n\n      encryptionInfo.key.encryptedKeyValue = this._crypt(true, encryptionInfo.key.cipherAlgorithm, encryptionInfo.key.cipherChaining, key, encryptionInfo.key.saltValue, packageKey);\n      /* Verifier hash */\n      // Create a random byte array for hashing\n\n      var verifierHashInput = crypto.randomBytes(16); // Create an encryption key from the password for the input\n\n      var verifierHashInputKey = this._convertPasswordToKey(password, encryptionInfo.key.hashAlgorithm, encryptionInfo.key.saltValue, encryptionInfo.key.spinCount, encryptionInfo.key.keyBits, BLOCK_KEYS.verifierHash.input); // Use the key to encrypt the verifier input\n\n\n      encryptionInfo.key.encryptedVerifierHashInput = this._crypt(true, encryptionInfo.key.cipherAlgorithm, encryptionInfo.key.cipherChaining, verifierHashInputKey, encryptionInfo.key.saltValue, verifierHashInput); // Create a hash of the input\n\n      var verifierHashValue = this._hash(encryptionInfo.key.hashAlgorithm, verifierHashInput); // Create an encryption key from the password for the hash\n\n\n      var verifierHashValueKey = this._convertPasswordToKey(password, encryptionInfo.key.hashAlgorithm, encryptionInfo.key.saltValue, encryptionInfo.key.spinCount, encryptionInfo.key.keyBits, BLOCK_KEYS.verifierHash.value); // Use the key to encrypt the hash value\n\n\n      encryptionInfo.key.encryptedVerifierHashValue = this._crypt(true, encryptionInfo.key.cipherAlgorithm, encryptionInfo.key.cipherChaining, verifierHashValueKey, encryptionInfo.key.saltValue, verifierHashValue); // Build the encryption info buffer\n\n      var encryptionInfoBuffer = this._buildEncryptionInfo(encryptionInfo); // Create a new CFB\n\n\n      var output = cfb.utils.cfb_new(); // Add the encryption info and encrypted package\n\n      cfb.utils.cfb_add(output, \"EncryptionInfo\", encryptionInfoBuffer);\n      cfb.utils.cfb_add(output, \"EncryptedPackage\", encryptedPackage); // Delete the SheetJS entry that is added at initialization\n\n      cfb.utils.cfb_del(output, \"\\x01Sh33tJ5\"); // Write to a buffer and return\n\n      output = cfb.write(output); // The cfb library writes to a Uint8array in the browser. Convert to a Buffer.\n\n      if (!Buffer.isBuffer(output)) output = Buffer.from(output);\n      return output;\n    }\n    /**\r\n     * Decrypt the data with the given password\r\n     * @param {Buffer} data - The data to decrypt\r\n     * @param {string} password - The password\r\n     * @returns {Promise.<Buffer>} The decrypted data\r\n     */\n\n  }, {\n    key: \"decryptAsync\",\n    value: function decryptAsync(data, password) {\n      var _this = this;\n\n      // Parse the CFB input and pull out the encryption info and encrypted package entries.\n      var parsed = cfb.parse(data);\n\n      var encryptionInfoBuffer = _.find(parsed.FileIndex, {\n        name: \"EncryptionInfo\"\n      }).content;\n\n      var encryptedPackageBuffer = _.find(parsed.FileIndex, {\n        name: \"EncryptedPackage\"\n      }).content; // In the browser the CFB content is an array. Convert to a Buffer.\n\n\n      if (!Buffer.isBuffer(encryptionInfoBuffer)) encryptionInfoBuffer = Buffer.from(encryptionInfoBuffer);\n      if (!Buffer.isBuffer(encryptedPackageBuffer)) encryptedPackageBuffer = Buffer.from(encryptedPackageBuffer);\n      return externals.Promise.resolve().then(function () {\n        return _this._parseEncryptionInfoAsync(encryptionInfoBuffer);\n      }) // Parse the encryption info XML into an object\n      .then(function (encryptionInfo) {\n        // Convert the password into an encryption key\n        var key = _this._convertPasswordToKey(password, encryptionInfo.key.hashAlgorithm, encryptionInfo.key.saltValue, encryptionInfo.key.spinCount, encryptionInfo.key.keyBits, BLOCK_KEYS.key); // Use the key to decrypt the package key\n\n\n        var packageKey = _this._crypt(false, encryptionInfo.key.cipherAlgorithm, encryptionInfo.key.cipherChaining, key, encryptionInfo.key.saltValue, encryptionInfo.key.encryptedKeyValue); // Use the package key to decrypt the package\n\n\n        return _this._cryptPackage(false, encryptionInfo[\"package\"].cipherAlgorithm, encryptionInfo[\"package\"].cipherChaining, encryptionInfo[\"package\"].hashAlgorithm, encryptionInfo[\"package\"].blockSize, encryptionInfo[\"package\"].saltValue, packageKey, encryptedPackageBuffer);\n      });\n    }\n    /**\r\n     * Build the encryption info XML/buffer\r\n     * @param {{}} encryptionInfo - The encryption info object\r\n     * @returns {Buffer} The buffer\r\n     * @private\r\n     */\n\n  }, {\n    key: \"_buildEncryptionInfo\",\n    value: function _buildEncryptionInfo(encryptionInfo) {\n      // Map the object into the appropriate XML structure. Buffers are encoded in base 64.\n      var encryptionInfoNode = {\n        name: \"encryption\",\n        attributes: {\n          xmlns: \"http://schemas.microsoft.com/office/2006/encryption\",\n          'xmlns:p': \"http://schemas.microsoft.com/office/2006/keyEncryptor/password\",\n          'xmlns:c': \"http://schemas.microsoft.com/office/2006/keyEncryptor/certificate\"\n        },\n        children: [{\n          name: \"keyData\",\n          attributes: {\n            saltSize: encryptionInfo[\"package\"].saltValue.length,\n            blockSize: encryptionInfo[\"package\"].blockSize,\n            keyBits: encryptionInfo[\"package\"].keyBits,\n            hashSize: encryptionInfo[\"package\"].hashSize,\n            cipherAlgorithm: encryptionInfo[\"package\"].cipherAlgorithm,\n            cipherChaining: encryptionInfo[\"package\"].cipherChaining,\n            hashAlgorithm: encryptionInfo[\"package\"].hashAlgorithm,\n            saltValue: encryptionInfo[\"package\"].saltValue.toString(\"base64\")\n          }\n        }, {\n          name: \"dataIntegrity\",\n          attributes: {\n            encryptedHmacKey: encryptionInfo.dataIntegrity.encryptedHmacKey.toString(\"base64\"),\n            encryptedHmacValue: encryptionInfo.dataIntegrity.encryptedHmacValue.toString(\"base64\")\n          }\n        }, {\n          name: \"keyEncryptors\",\n          children: [{\n            name: \"keyEncryptor\",\n            attributes: {\n              uri: \"http://schemas.microsoft.com/office/2006/keyEncryptor/password\"\n            },\n            children: [{\n              name: \"p:encryptedKey\",\n              attributes: {\n                spinCount: encryptionInfo.key.spinCount,\n                saltSize: encryptionInfo.key.saltValue.length,\n                blockSize: encryptionInfo.key.blockSize,\n                keyBits: encryptionInfo.key.keyBits,\n                hashSize: encryptionInfo.key.hashSize,\n                cipherAlgorithm: encryptionInfo.key.cipherAlgorithm,\n                cipherChaining: encryptionInfo.key.cipherChaining,\n                hashAlgorithm: encryptionInfo.key.hashAlgorithm,\n                saltValue: encryptionInfo.key.saltValue.toString(\"base64\"),\n                encryptedVerifierHashInput: encryptionInfo.key.encryptedVerifierHashInput.toString(\"base64\"),\n                encryptedVerifierHashValue: encryptionInfo.key.encryptedVerifierHashValue.toString(\"base64\"),\n                encryptedKeyValue: encryptionInfo.key.encryptedKeyValue.toString(\"base64\")\n              }\n            }]\n          }]\n        }]\n      }; // Convert to an XML string\n\n      var xmlBuilder = new XmlBuilder();\n      var encryptionInfoXml = xmlBuilder.build(encryptionInfoNode); // Convert to a buffer and prefix with the appropriate bytes\n\n      return Buffer.concat([ENCRYPTION_INFO_PREFIX, Buffer.from(encryptionInfoXml, \"utf8\")]);\n    }\n    /**\r\n     * Parse the encryption info from the XML/buffer\r\n     * @param {Buffer} buffer - The buffer\r\n     * @returns {Promise.<{}>} The parsed encryption info object\r\n     * @private\r\n     */\n\n  }, {\n    key: \"_parseEncryptionInfoAsync\",\n    value: function _parseEncryptionInfoAsync(buffer) {\n      // Pull off the prefix and convert to string\n      var xml = buffer.slice(ENCRYPTION_INFO_PREFIX.length).toString(\"utf8\"); // Parse the XML\n\n      var xmlParser = new XmlParser();\n      return xmlParser.parseAsync(xml).then(function (doc) {\n        // Pull out the relevant values for decryption and return\n        var keyDataNode = xmlq.findChild(doc, \"keyData\");\n        var keyEncryptorsNode = xmlq.findChild(doc, \"keyEncryptors\");\n        var keyEncryptorNode = xmlq.findChild(keyEncryptorsNode, \"keyEncryptor\");\n        var encryptedKeyNode = xmlq.findChild(keyEncryptorNode, \"p:encryptedKey\");\n        return {\n          \"package\": {\n            cipherAlgorithm: keyDataNode.attributes.cipherAlgorithm,\n            cipherChaining: keyDataNode.attributes.cipherChaining,\n            saltValue: Buffer.from(keyDataNode.attributes.saltValue, \"base64\"),\n            hashAlgorithm: keyDataNode.attributes.hashAlgorithm,\n            blockSize: keyDataNode.attributes.blockSize\n          },\n          key: {\n            encryptedKeyValue: Buffer.from(encryptedKeyNode.attributes.encryptedKeyValue, \"base64\"),\n            cipherAlgorithm: encryptedKeyNode.attributes.cipherAlgorithm,\n            cipherChaining: encryptedKeyNode.attributes.cipherChaining,\n            saltValue: Buffer.from(encryptedKeyNode.attributes.saltValue, \"base64\"),\n            hashAlgorithm: encryptedKeyNode.attributes.hashAlgorithm,\n            spinCount: encryptedKeyNode.attributes.spinCount,\n            keyBits: encryptedKeyNode.attributes.keyBits\n          }\n        };\n      });\n    }\n    /**\r\n     * Calculate a hash of the concatenated buffers with the given algorithm.\r\n     * @param {string} algorithm - The hash algorithm.\r\n     * @param {Array.<Buffer>} buffers - The buffers to concat and hash\r\n     * @returns {Buffer} The hash\r\n     * @private\r\n     */\n\n  }, {\n    key: \"_hash\",\n    value: function _hash(algorithm) {\n      algorithm = algorithm.toLowerCase();\n      var hashes = crypto.getHashes();\n      if (hashes.indexOf(algorithm) < 0) throw new Error(\"Hash algorithm '\".concat(algorithm, \"' not supported!\"));\n      var hash = crypto.createHash(algorithm);\n\n      for (var _len = arguments.length, buffers = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n        buffers[_key - 1] = arguments[_key];\n      }\n\n      hash.update(Buffer.concat(buffers));\n      return hash.digest();\n    }\n    /**\r\n     * Calculate an HMAC of the concatenated buffers with the given algorithm and key\r\n     * @param {string} algorithm - The algorithm.\r\n     * @param {string} key - The key\r\n     * @param {Array.<Buffer>} buffers - The buffer to concat and HMAC\r\n     * @returns {Buffer} The HMAC\r\n     * @private\r\n     */\n\n  }, {\n    key: \"_hmac\",\n    value: function _hmac(algorithm, key) {\n      algorithm = algorithm.toLowerCase();\n      var hashes = crypto.getHashes();\n      if (hashes.indexOf(algorithm) < 0) throw new Error(\"HMAC algorithm '\".concat(algorithm, \"' not supported!\"));\n      var hmac = crypto.createHmac(algorithm, key);\n\n      for (var _len2 = arguments.length, buffers = new Array(_len2 > 2 ? _len2 - 2 : 0), _key2 = 2; _key2 < _len2; _key2++) {\n        buffers[_key2 - 2] = arguments[_key2];\n      }\n\n      hmac.update(Buffer.concat(buffers));\n      return hmac.digest();\n    }\n    /**\r\n     * Encrypt/decrypt input\r\n     * @param {boolean} encrypt - True to encrypt, false to decrypt\r\n     * @param {string} cipherAlgorithm - The cipher algorithm\r\n     * @param {sring} cipherChaining - The cipher chaining mode\r\n     * @param {Buffer} key - The encryption key\r\n     * @param {Buffer} iv - The initialization vector\r\n     * @param {Buffer} input - The input\r\n     * @returns {Buffer} The output\r\n     * @private\r\n     */\n\n  }, {\n    key: \"_crypt\",\n    value: function _crypt(encrypt, cipherAlgorithm, cipherChaining, key, iv, input) {\n      var algorithm = \"\".concat(cipherAlgorithm.toLowerCase(), \"-\").concat(key.length * 8);\n      if (cipherChaining === 'ChainingModeCBC') algorithm += '-cbc';else throw new Error(\"Unknown cipher chaining: \".concat(cipherChaining));\n      var cipher = crypto[encrypt ? 'createCipheriv' : 'createDecipheriv'](algorithm, key, iv);\n      cipher.setAutoPadding(false);\n      var output = cipher.update(input);\n      output = Buffer.concat([output, cipher[\"final\"]()]);\n      return output;\n    }\n    /**\r\n     * Encrypt/decrypt the package\r\n     * @param {boolean} encrypt - True to encrypt, false to decrypt\r\n     * @param {string} cipherAlgorithm - The cipher algorithm\r\n     * @param {string} cipherChaining - The cipher chaining mode\r\n     * @param {string} hashAlgorithm - The hash algorithm\r\n     * @param {number} blockSize - The IV block size\r\n     * @param {Buffer} saltValue - The salt\r\n     * @param {Buffer} key - The encryption key\r\n     * @param {Buffer} input - The package input\r\n     * @returns {Buffer} The output\r\n     * @private\r\n     */\n\n  }, {\n    key: \"_cryptPackage\",\n    value: function _cryptPackage(encrypt, cipherAlgorithm, cipherChaining, hashAlgorithm, blockSize, saltValue, key, input) {\n      // The first 8 bytes is supposed to be the length, but it seems like it is really the length - 4..\n      var outputChunks = [];\n      var offset = encrypt ? 0 : PACKAGE_OFFSET; // The package is encoded in chunks. Encrypt/decrypt each and concat.\n\n      var i = 0,\n          start = 0,\n          end = 0;\n\n      while (end < input.length) {\n        start = end;\n        end = start + PACKAGE_ENCRYPTION_CHUNK_SIZE;\n        if (end > input.length) end = input.length; // Grab the next chunk\n\n        var inputChunk = input.slice(start + offset, end + offset); // Pad the chunk if it is not an integer multiple of the block size\n\n        var remainder = inputChunk.length % blockSize;\n        if (remainder) inputChunk = Buffer.concat([inputChunk, Buffer.alloc(blockSize - remainder)]); // Create the initialization vector\n\n        var iv = this._createIV(hashAlgorithm, saltValue, blockSize, i); // Encrypt/decrypt the chunk and add it to the array\n\n\n        var outputChunk = this._crypt(encrypt, cipherAlgorithm, cipherChaining, key, iv, inputChunk);\n\n        outputChunks.push(outputChunk);\n        i++;\n      } // Concat all of the output chunks.\n\n\n      var output = Buffer.concat(outputChunks);\n\n      if (encrypt) {\n        // Put the length of the package in the first 8 bytes\n        output = Buffer.concat([this._createUInt32LEBuffer(input.length, PACKAGE_OFFSET), output]);\n      } else {\n        // Truncate the buffer to the size in the prefix\n        var length = input.readUInt32LE(0);\n        output = output.slice(0, length);\n      }\n\n      return output;\n    }\n    /**\r\n     * Create a buffer of an integer encoded as a uint32le\r\n     * @param {number} value - The integer to encode\r\n     * @param {number} [bufferSize=4] The output buffer size in bytes\r\n     * @returns {Buffer} The buffer\r\n     * @private\r\n     */\n\n  }, {\n    key: \"_createUInt32LEBuffer\",\n    value: function _createUInt32LEBuffer(value) {\n      var bufferSize = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 4;\n      var buffer = Buffer.alloc(bufferSize);\n      buffer.writeUInt32LE(value, 0);\n      return buffer;\n    }\n    /**\r\n     * Convert a password into an encryption key\r\n     * @param {string} password - The password\r\n     * @param {string} hashAlgorithm - The hash algoritm\r\n     * @param {Buffer} saltValue - The salt value\r\n     * @param {number} spinCount - The spin count\r\n     * @param {number} keyBits - The length of the key in bits\r\n     * @param {Buffer} blockKey - The block key\r\n     * @returns {Buffer} The encryption key\r\n     * @private\r\n     */\n\n  }, {\n    key: \"_convertPasswordToKey\",\n    value: function _convertPasswordToKey(password, hashAlgorithm, saltValue, spinCount, keyBits, blockKey) {\n      // Password must be in unicode buffer\n      var passwordBuffer = Buffer.from(password, 'utf16le'); // Generate the initial hash\n\n      var key = this._hash(hashAlgorithm, saltValue, passwordBuffer); // Now regenerate until spin count\n\n\n      for (var i = 0; i < spinCount; i++) {\n        var iterator = this._createUInt32LEBuffer(i);\n\n        key = this._hash(hashAlgorithm, iterator, key);\n      } // Now generate the final hash\n\n\n      key = this._hash(hashAlgorithm, key, blockKey); // Truncate or pad as needed to get to length of keyBits\n\n      var keyBytes = keyBits / 8;\n\n      if (key.length < keyBytes) {\n        var tmp = Buffer.alloc(keyBytes, 0x36);\n        key.copy(tmp);\n        key = tmp;\n      } else if (key.length > keyBytes) {\n        key = key.slice(0, keyBytes);\n      }\n\n      return key;\n    }\n    /**\r\n     * Create an initialization vector (IV)\r\n     * @param {string} hashAlgorithm - The hash algorithm\r\n     * @param {Buffer} saltValue - The salt value\r\n     * @param {number} blockSize - The size of the IV\r\n     * @param {Buffer|number} blockKey - The block key or an int to convert to a buffer\r\n     * @returns {Buffer} The IV\r\n     * @private\r\n     */\n\n  }, {\n    key: \"_createIV\",\n    value: function _createIV(hashAlgorithm, saltValue, blockSize, blockKey) {\n      // Create the block key from the current index\n      if (typeof blockKey === \"number\") blockKey = this._createUInt32LEBuffer(blockKey); // Create the initialization vector by hashing the salt with the block key.\n      // Truncate or pad as needed to meet the block size.\n\n      var iv = this._hash(hashAlgorithm, saltValue, blockKey);\n\n      if (iv.length < blockSize) {\n        var tmp = Buffer.alloc(blockSize, 0x36);\n        iv.copy(tmp);\n        iv = tmp;\n      } else if (iv.length > blockSize) {\n        iv = iv.slice(0, blockSize);\n      }\n\n      return iv;\n    }\n  }]);\n\n  return Encryptor;\n}();\n\nmodule.exports = Encryptor;","/* cfb.js (C) 2013-present SheetJS -- http://sheetjs.com */\n\n/* vim: set ts=2: */\n\n/*jshint eqnull:true */\n\n/*exported CFB */\n\n/*global module, require:false, process:false, Buffer:false, Uint8Array:false, Uint16Array:false */\nvar Base64 = function make_b64() {\n  var map = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";\n  return {\n    encode: function encode(input) {\n      var o = \"\";\n      var c1 = 0,\n          c2 = 0,\n          c3 = 0,\n          e1 = 0,\n          e2 = 0,\n          e3 = 0,\n          e4 = 0;\n\n      for (var i = 0; i < input.length;) {\n        c1 = input.charCodeAt(i++);\n        e1 = c1 >> 2;\n        c2 = input.charCodeAt(i++);\n        e2 = (c1 & 3) << 4 | c2 >> 4;\n        c3 = input.charCodeAt(i++);\n        e3 = (c2 & 15) << 2 | c3 >> 6;\n        e4 = c3 & 63;\n\n        if (isNaN(c2)) {\n          e3 = e4 = 64;\n        } else if (isNaN(c3)) {\n          e4 = 64;\n        }\n\n        o += map.charAt(e1) + map.charAt(e2) + map.charAt(e3) + map.charAt(e4);\n      }\n\n      return o;\n    },\n    decode: function b64_decode(input) {\n      var o = \"\";\n      var c1 = 0,\n          c2 = 0,\n          c3 = 0,\n          e1 = 0,\n          e2 = 0,\n          e3 = 0,\n          e4 = 0;\n      input = input.replace(/[^\\w\\+\\/\\=]/g, \"\");\n\n      for (var i = 0; i < input.length;) {\n        e1 = map.indexOf(input.charAt(i++));\n        e2 = map.indexOf(input.charAt(i++));\n        c1 = e1 << 2 | e2 >> 4;\n        o += String.fromCharCode(c1);\n        e3 = map.indexOf(input.charAt(i++));\n        c2 = (e2 & 15) << 4 | e3 >> 2;\n\n        if (e3 !== 64) {\n          o += String.fromCharCode(c2);\n        }\n\n        e4 = map.indexOf(input.charAt(i++));\n        c3 = (e3 & 3) << 6 | e4;\n\n        if (e4 !== 64) {\n          o += String.fromCharCode(c3);\n        }\n      }\n\n      return o;\n    }\n  };\n}();\n\nvar has_buf = typeof Buffer !== 'undefined' && typeof process !== 'undefined' && typeof process.versions !== 'undefined' && process.versions.node;\n\nvar Buffer_from = function Buffer_from() {};\n\nif (typeof Buffer !== 'undefined') {\n  var nbfs = !Buffer.from;\n  if (!nbfs) try {\n    Buffer.from(\"foo\", \"utf8\");\n  } catch (e) {\n    nbfs = true;\n  }\n  Buffer_from = nbfs ? function (buf, enc) {\n    return enc ? new Buffer(buf, enc) : new Buffer(buf);\n  } : Buffer.from.bind(Buffer); // $FlowIgnore\n\n  if (!Buffer.alloc) Buffer.alloc = function (n) {\n    return new Buffer(n);\n  }; // $FlowIgnore\n\n  if (!Buffer.allocUnsafe) Buffer.allocUnsafe = function (n) {\n    return new Buffer(n);\n  };\n}\n\nfunction new_raw_buf(len) {\n  /* jshint -W056 */\n  return has_buf ? Buffer.alloc(len) : new Array(len);\n  /* jshint +W056 */\n}\n\nfunction new_unsafe_buf(len) {\n  /* jshint -W056 */\n  return has_buf ? Buffer.allocUnsafe(len) : new Array(len);\n  /* jshint +W056 */\n}\n\nvar s2a = function s2a(s) {\n  if (has_buf) return Buffer_from(s, \"binary\");\n  return s.split(\"\").map(function (x) {\n    return x.charCodeAt(0) & 0xff;\n  });\n};\n\nvar chr0 = /\\u0000/g,\n    chr1 = /[\\u0001-\\u0006]/g;\n\nvar __toBuffer = function __toBuffer(bufs) {\n  var x = [];\n\n  for (var i = 0; i < bufs[0].length; ++i) {\n    x.push.apply(x, bufs[0][i]);\n  }\n\n  return x;\n};\n\nvar ___toBuffer = __toBuffer;\n\nvar __utf16le = function __utf16le(b, s, e) {\n  var ss = [];\n\n  for (var i = s; i < e; i += 2) {\n    ss.push(String.fromCharCode(__readUInt16LE(b, i)));\n  }\n\n  return ss.join(\"\").replace(chr0, '');\n};\n\nvar ___utf16le = __utf16le;\n\nvar __hexlify = function __hexlify(b, s, l) {\n  var ss = [];\n\n  for (var i = s; i < s + l; ++i) {\n    ss.push((\"0\" + b[i].toString(16)).slice(-2));\n  }\n\n  return ss.join(\"\");\n};\n\nvar ___hexlify = __hexlify;\n\nvar __bconcat = function __bconcat(bufs) {\n  if (Array.isArray(bufs[0])) return [].concat.apply([], bufs);\n  var maxlen = 0,\n      i = 0;\n\n  for (i = 0; i < bufs.length; ++i) {\n    maxlen += bufs[i].length;\n  }\n\n  var o = new Uint8Array(maxlen);\n\n  for (i = 0, maxlen = 0; i < bufs.length; maxlen += bufs[i].length, ++i) {\n    o.set(bufs[i], maxlen);\n  }\n\n  return o;\n};\n\nvar bconcat = __bconcat;\n\nif (has_buf) {\n  __utf16le = function __utf16le(b, s, e) {\n    if (!Buffer.isBuffer(b)) return ___utf16le(b, s, e);\n    return b.toString('utf16le', s, e).replace(chr0, '')\n    /*.replace(chr1,'!')*/\n    ;\n  };\n\n  __hexlify = function __hexlify(b, s, l) {\n    return Buffer.isBuffer(b) ? b.toString('hex', s, s + l) : ___hexlify(b, s, l);\n  };\n\n  __toBuffer = function __toBuffer(bufs) {\n    return bufs[0].length > 0 && Buffer.isBuffer(bufs[0][0]) ? Buffer.concat(bufs[0]) : ___toBuffer(bufs);\n  };\n\n  s2a = function s2a(s) {\n    return Buffer_from(s, \"binary\");\n  };\n\n  bconcat = function bconcat(bufs) {\n    return Buffer.isBuffer(bufs[0]) ? Buffer.concat(bufs) : __bconcat(bufs);\n  };\n}\n\nvar __readUInt8 = function __readUInt8(b, idx) {\n  return b[idx];\n};\n\nvar __readUInt16LE = function __readUInt16LE(b, idx) {\n  return b[idx + 1] * (1 << 8) + b[idx];\n};\n\nvar __readInt16LE = function __readInt16LE(b, idx) {\n  var u = b[idx + 1] * (1 << 8) + b[idx];\n  return u < 0x8000 ? u : (0xffff - u + 1) * -1;\n};\n\nvar __readUInt32LE = function __readUInt32LE(b, idx) {\n  return b[idx + 3] * (1 << 24) + (b[idx + 2] << 16) + (b[idx + 1] << 8) + b[idx];\n};\n\nvar __readInt32LE = function __readInt32LE(b, idx) {\n  return (b[idx + 3] << 24) + (b[idx + 2] << 16) + (b[idx + 1] << 8) + b[idx];\n};\n\nfunction ReadShift(size, t) {\n  var oI,\n      oS,\n      type = 0;\n\n  switch (size) {\n    case 1:\n      oI = __readUInt8(this, this.l);\n      break;\n\n    case 2:\n      oI = (t !== 'i' ? __readUInt16LE : __readInt16LE)(this, this.l);\n      break;\n\n    case 4:\n      oI = __readInt32LE(this, this.l);\n      break;\n\n    case 16:\n      type = 2;\n      oS = __hexlify(this, this.l, size);\n  }\n\n  this.l += size;\n  if (type === 0) return oI;\n  return oS;\n}\n\nvar __writeUInt32LE = function __writeUInt32LE(b, val, idx) {\n  b[idx] = val & 0xFF;\n  b[idx + 1] = val >>> 8 & 0xFF;\n  b[idx + 2] = val >>> 16 & 0xFF;\n  b[idx + 3] = val >>> 24 & 0xFF;\n};\n\nvar __writeInt32LE = function __writeInt32LE(b, val, idx) {\n  b[idx] = val & 0xFF;\n  b[idx + 1] = val >> 8 & 0xFF;\n  b[idx + 2] = val >> 16 & 0xFF;\n  b[idx + 3] = val >> 24 & 0xFF;\n};\n\nfunction WriteShift(t, val, f) {\n  var size = 0,\n      i = 0;\n\n  switch (f) {\n    case \"hex\":\n      for (; i < t; ++i) {\n        this[this.l++] = parseInt(val.slice(2 * i, 2 * i + 2), 16) || 0;\n      }\n\n      return this;\n\n    case \"utf16le\":\n      var end = this.l + t;\n\n      for (i = 0; i < Math.min(val.length, t); ++i) {\n        var cc = val.charCodeAt(i);\n        this[this.l++] = cc & 0xff;\n        this[this.l++] = cc >> 8;\n      }\n\n      while (this.l < end) {\n        this[this.l++] = 0;\n      }\n\n      return this;\n  }\n\n  switch (t) {\n    case 1:\n      size = 1;\n      this[this.l] = val & 0xFF;\n      break;\n\n    case 2:\n      size = 2;\n      this[this.l] = val & 0xFF;\n      val >>>= 8;\n      this[this.l + 1] = val & 0xFF;\n      break;\n\n    case 4:\n      size = 4;\n\n      __writeUInt32LE(this, val, this.l);\n\n      break;\n\n    case -4:\n      size = 4;\n\n      __writeInt32LE(this, val, this.l);\n\n      break;\n  }\n\n  this.l += size;\n  return this;\n}\n\nfunction CheckField(hexstr, fld) {\n  var m = __hexlify(this, this.l, hexstr.length >> 1);\n\n  if (m !== hexstr) throw new Error(fld + 'Expected ' + hexstr + ' saw ' + m);\n  this.l += hexstr.length >> 1;\n}\n\nfunction prep_blob(blob, pos) {\n  blob.l = pos;\n  blob.read_shift = ReadShift;\n  blob.chk = CheckField;\n  blob.write_shift = WriteShift;\n}\n\nfunction new_buf(sz) {\n  var o = new_raw_buf(sz);\n  prep_blob(o, 0);\n  return o;\n}\n/* crc32.js (C) 2014-present SheetJS -- http://sheetjs.com */\n\n/* vim: set ts=2: */\n\n/*exported CRC32 */\n\n\nvar CRC32;\n\n(function (factory) {\n  /*jshint ignore:start */\n\n  /*eslint-disable */\n  factory(CRC32 = {});\n  /*eslint-enable */\n\n  /*jshint ignore:end */\n})(function (CRC32) {\n  CRC32.version = '1.2.0';\n  /* see perf/crc32table.js */\n\n  /*global Int32Array */\n\n  function signed_crc_table() {\n    var c = 0,\n        table = new Array(256);\n\n    for (var n = 0; n != 256; ++n) {\n      c = n;\n      c = c & 1 ? -306674912 ^ c >>> 1 : c >>> 1;\n      c = c & 1 ? -306674912 ^ c >>> 1 : c >>> 1;\n      c = c & 1 ? -306674912 ^ c >>> 1 : c >>> 1;\n      c = c & 1 ? -306674912 ^ c >>> 1 : c >>> 1;\n      c = c & 1 ? -306674912 ^ c >>> 1 : c >>> 1;\n      c = c & 1 ? -306674912 ^ c >>> 1 : c >>> 1;\n      c = c & 1 ? -306674912 ^ c >>> 1 : c >>> 1;\n      c = c & 1 ? -306674912 ^ c >>> 1 : c >>> 1;\n      table[n] = c;\n    }\n\n    return typeof Int32Array !== 'undefined' ? new Int32Array(table) : table;\n  }\n\n  var T = signed_crc_table();\n\n  function crc32_bstr(bstr, seed) {\n    var C = seed ^ -1,\n        L = bstr.length - 1;\n\n    for (var i = 0; i < L;) {\n      C = C >>> 8 ^ T[(C ^ bstr.charCodeAt(i++)) & 0xFF];\n      C = C >>> 8 ^ T[(C ^ bstr.charCodeAt(i++)) & 0xFF];\n    }\n\n    if (i === L) C = C >>> 8 ^ T[(C ^ bstr.charCodeAt(i)) & 0xFF];\n    return C ^ -1;\n  }\n\n  function crc32_buf(buf, seed) {\n    if (buf.length > 10000) return crc32_buf_8(buf, seed);\n    var C = seed ^ -1,\n        L = buf.length - 3;\n\n    for (var i = 0; i < L;) {\n      C = C >>> 8 ^ T[(C ^ buf[i++]) & 0xFF];\n      C = C >>> 8 ^ T[(C ^ buf[i++]) & 0xFF];\n      C = C >>> 8 ^ T[(C ^ buf[i++]) & 0xFF];\n      C = C >>> 8 ^ T[(C ^ buf[i++]) & 0xFF];\n    }\n\n    while (i < L + 3) {\n      C = C >>> 8 ^ T[(C ^ buf[i++]) & 0xFF];\n    }\n\n    return C ^ -1;\n  }\n\n  function crc32_buf_8(buf, seed) {\n    var C = seed ^ -1,\n        L = buf.length - 7;\n\n    for (var i = 0; i < L;) {\n      C = C >>> 8 ^ T[(C ^ buf[i++]) & 0xFF];\n      C = C >>> 8 ^ T[(C ^ buf[i++]) & 0xFF];\n      C = C >>> 8 ^ T[(C ^ buf[i++]) & 0xFF];\n      C = C >>> 8 ^ T[(C ^ buf[i++]) & 0xFF];\n      C = C >>> 8 ^ T[(C ^ buf[i++]) & 0xFF];\n      C = C >>> 8 ^ T[(C ^ buf[i++]) & 0xFF];\n      C = C >>> 8 ^ T[(C ^ buf[i++]) & 0xFF];\n      C = C >>> 8 ^ T[(C ^ buf[i++]) & 0xFF];\n    }\n\n    while (i < L + 7) {\n      C = C >>> 8 ^ T[(C ^ buf[i++]) & 0xFF];\n    }\n\n    return C ^ -1;\n  }\n\n  function crc32_str(str, seed) {\n    var C = seed ^ -1;\n\n    for (var i = 0, L = str.length, c, d; i < L;) {\n      c = str.charCodeAt(i++);\n\n      if (c < 0x80) {\n        C = C >>> 8 ^ T[(C ^ c) & 0xFF];\n      } else if (c < 0x800) {\n        C = C >>> 8 ^ T[(C ^ (192 | c >> 6 & 31)) & 0xFF];\n        C = C >>> 8 ^ T[(C ^ (128 | c & 63)) & 0xFF];\n      } else if (c >= 0xD800 && c < 0xE000) {\n        c = (c & 1023) + 64;\n        d = str.charCodeAt(i++) & 1023;\n        C = C >>> 8 ^ T[(C ^ (240 | c >> 8 & 7)) & 0xFF];\n        C = C >>> 8 ^ T[(C ^ (128 | c >> 2 & 63)) & 0xFF];\n        C = C >>> 8 ^ T[(C ^ (128 | d >> 6 & 15 | (c & 3) << 4)) & 0xFF];\n        C = C >>> 8 ^ T[(C ^ (128 | d & 63)) & 0xFF];\n      } else {\n        C = C >>> 8 ^ T[(C ^ (224 | c >> 12 & 15)) & 0xFF];\n        C = C >>> 8 ^ T[(C ^ (128 | c >> 6 & 63)) & 0xFF];\n        C = C >>> 8 ^ T[(C ^ (128 | c & 63)) & 0xFF];\n      }\n    }\n\n    return C ^ -1;\n  }\n\n  CRC32.table = T;\n  CRC32.bstr = crc32_bstr;\n  CRC32.buf = crc32_buf;\n  CRC32.str = crc32_str;\n});\n/* [MS-CFB] v20171201 */\n\n\nvar CFB = function _CFB() {\n  var exports = {};\n  exports.version = '1.1.3';\n  /* [MS-CFB] 2.6.4 */\n\n  function namecmp(l, r) {\n    var L = l.split(\"/\"),\n        R = r.split(\"/\");\n\n    for (var i = 0, c = 0, Z = Math.min(L.length, R.length); i < Z; ++i) {\n      if (c = L[i].length - R[i].length) return c;\n      if (L[i] != R[i]) return L[i] < R[i] ? -1 : 1;\n    }\n\n    return L.length - R.length;\n  }\n\n  function dirname(p) {\n    if (p.charAt(p.length - 1) == \"/\") return p.slice(0, -1).indexOf(\"/\") === -1 ? p : dirname(p.slice(0, -1));\n    var c = p.lastIndexOf(\"/\");\n    return c === -1 ? p : p.slice(0, c + 1);\n  }\n\n  function filename(p) {\n    if (p.charAt(p.length - 1) == \"/\") return filename(p.slice(0, -1));\n    var c = p.lastIndexOf(\"/\");\n    return c === -1 ? p : p.slice(c + 1);\n  }\n  /* -------------------------------------------------------------------------- */\n\n  /* DOS Date format:\n     high|YYYYYYYm.mmmddddd.HHHHHMMM.MMMSSSSS|low\n     add 1980 to stored year\n     stored second should be doubled\n  */\n\n  /* write JS date to buf as a DOS date */\n\n\n  function write_dos_date(buf, date) {\n    if (typeof date === \"string\") date = new Date(date);\n    var hms = date.getHours();\n    hms = hms << 6 | date.getMinutes();\n    hms = hms << 5 | date.getSeconds() >>> 1;\n    buf.write_shift(2, hms);\n    var ymd = date.getFullYear() - 1980;\n    ymd = ymd << 4 | date.getMonth() + 1;\n    ymd = ymd << 5 | date.getDate();\n    buf.write_shift(2, ymd);\n  }\n  /* read four bytes from buf and interpret as a DOS date */\n\n\n  function parse_dos_date(buf) {\n    var hms = buf.read_shift(2) & 0xFFFF;\n    var ymd = buf.read_shift(2) & 0xFFFF;\n    var val = new Date();\n    var d = ymd & 0x1F;\n    ymd >>>= 5;\n    var m = ymd & 0x0F;\n    ymd >>>= 4;\n    val.setMilliseconds(0);\n    val.setFullYear(ymd + 1980);\n    val.setMonth(m - 1);\n    val.setDate(d);\n    var S = hms & 0x1F;\n    hms >>>= 5;\n    var M = hms & 0x3F;\n    hms >>>= 6;\n    val.setHours(hms);\n    val.setMinutes(M);\n    val.setSeconds(S << 1);\n    return val;\n  }\n\n  function parse_extra_field(blob) {\n    prep_blob(blob, 0);\n    var o = {};\n    var flags = 0;\n\n    while (blob.l <= blob.length - 4) {\n      var type = blob.read_shift(2);\n      var sz = blob.read_shift(2),\n          tgt = blob.l + sz;\n      var p = {};\n\n      switch (type) {\n        /* UNIX-style Timestamps */\n        case 0x5455:\n          {\n            flags = blob.read_shift(1);\n            if (flags & 1) p.mtime = blob.read_shift(4);\n            /* for some reason, CD flag corresponds to LFH */\n\n            if (sz > 5) {\n              if (flags & 2) p.atime = blob.read_shift(4);\n              if (flags & 4) p.ctime = blob.read_shift(4);\n            }\n\n            if (p.mtime) p.mt = new Date(p.mtime * 1000);\n          }\n          break;\n      }\n\n      blob.l = tgt;\n      o[type] = p;\n    }\n\n    return o;\n  }\n\n  var fs;\n\n  function get_fs() {\n    return fs || (fs = require('fs'));\n  }\n\n  function parse(file, options) {\n    if (file[0] == 0x50 && file[1] == 0x4b) return parse_zip(file, options);\n    if (file.length < 512) throw new Error(\"CFB file size \" + file.length + \" < 512\");\n    var mver = 3;\n    var ssz = 512;\n    var nmfs = 0; // number of mini FAT sectors\n\n    var difat_sec_cnt = 0;\n    var dir_start = 0;\n    var minifat_start = 0;\n    var difat_start = 0;\n    var fat_addrs = []; // locations of FAT sectors\n\n    /* [MS-CFB] 2.2 Compound File Header */\n\n    var blob = file.slice(0, 512);\n    prep_blob(blob, 0);\n    /* major version */\n\n    var mv = check_get_mver(blob);\n    mver = mv[0];\n\n    switch (mver) {\n      case 3:\n        ssz = 512;\n        break;\n\n      case 4:\n        ssz = 4096;\n        break;\n\n      case 0:\n        if (mv[1] == 0) return parse_zip(file, options);\n\n      /* falls through */\n\n      default:\n        throw new Error(\"Major Version: Expected 3 or 4 saw \" + mver);\n    }\n    /* reprocess header */\n\n\n    if (ssz !== 512) {\n      blob = file.slice(0, ssz);\n      prep_blob(blob, 28\n      /* blob.l */\n      );\n    }\n    /* Save header for final object */\n\n\n    var header = file.slice(0, ssz);\n    check_shifts(blob, mver); // Number of Directory Sectors\n\n    var dir_cnt = blob.read_shift(4, 'i');\n    if (mver === 3 && dir_cnt !== 0) throw new Error('# Directory Sectors: Expected 0 saw ' + dir_cnt); // Number of FAT Sectors\n\n    blob.l += 4; // First Directory Sector Location\n\n    dir_start = blob.read_shift(4, 'i'); // Transaction Signature\n\n    blob.l += 4; // Mini Stream Cutoff Size\n\n    blob.chk('00100000', 'Mini Stream Cutoff Size: '); // First Mini FAT Sector Location\n\n    minifat_start = blob.read_shift(4, 'i'); // Number of Mini FAT Sectors\n\n    nmfs = blob.read_shift(4, 'i'); // First DIFAT sector location\n\n    difat_start = blob.read_shift(4, 'i'); // Number of DIFAT Sectors\n\n    difat_sec_cnt = blob.read_shift(4, 'i'); // Grab FAT Sector Locations\n\n    for (var q = -1, j = 0; j < 109; ++j) {\n      /* 109 = (512 - blob.l)>>>2; */\n      q = blob.read_shift(4, 'i');\n      if (q < 0) break;\n      fat_addrs[j] = q;\n    }\n    /** Break the file up into sectors */\n\n\n    var sectors = sectorify(file, ssz);\n    sleuth_fat(difat_start, difat_sec_cnt, sectors, ssz, fat_addrs);\n    /** Chains */\n\n    var sector_list = make_sector_list(sectors, dir_start, fat_addrs, ssz);\n    sector_list[dir_start].name = \"!Directory\";\n    if (nmfs > 0 && minifat_start !== ENDOFCHAIN) sector_list[minifat_start].name = \"!MiniFAT\";\n    sector_list[fat_addrs[0]].name = \"!FAT\";\n    sector_list.fat_addrs = fat_addrs;\n    sector_list.ssz = ssz;\n    /* [MS-CFB] 2.6.1 Compound File Directory Entry */\n\n    var files = {},\n        Paths = [],\n        FileIndex = [],\n        FullPaths = [];\n    read_directory(dir_start, sector_list, sectors, Paths, nmfs, files, FileIndex, minifat_start);\n    build_full_paths(FileIndex, FullPaths, Paths);\n    Paths.shift();\n    var o = {\n      FileIndex: FileIndex,\n      FullPaths: FullPaths\n    }; // $FlowIgnore\n\n    if (options && options.raw) o.raw = {\n      header: header,\n      sectors: sectors\n    };\n    return o;\n  } // parse\n\n  /* [MS-CFB] 2.2 Compound File Header -- read up to major version */\n\n\n  function check_get_mver(blob) {\n    if (blob[blob.l] == 0x50 && blob[blob.l + 1] == 0x4b) return [0, 0]; // header signature 8\n\n    blob.chk(HEADER_SIGNATURE, 'Header Signature: '); // clsid 16\n    //blob.chk(HEADER_CLSID, 'CLSID: ');\n\n    blob.l += 16; // minor version 2\n\n    var mver = blob.read_shift(2, 'u');\n    return [blob.read_shift(2, 'u'), mver];\n  }\n\n  function check_shifts(blob, mver) {\n    var shift = 0x09; // Byte Order\n    //blob.chk('feff', 'Byte Order: '); // note: some writers put 0xffff\n\n    blob.l += 2; // Sector Shift\n\n    switch (shift = blob.read_shift(2)) {\n      case 0x09:\n        if (mver != 3) throw new Error('Sector Shift: Expected 9 saw ' + shift);\n        break;\n\n      case 0x0c:\n        if (mver != 4) throw new Error('Sector Shift: Expected 12 saw ' + shift);\n        break;\n\n      default:\n        throw new Error('Sector Shift: Expected 9 or 12 saw ' + shift);\n    } // Mini Sector Shift\n\n\n    blob.chk('0600', 'Mini Sector Shift: '); // Reserved\n\n    blob.chk('000000000000', 'Reserved: ');\n  }\n  /** Break the file up into sectors */\n\n\n  function sectorify(file, ssz) {\n    var nsectors = Math.ceil(file.length / ssz) - 1;\n    var sectors = [];\n\n    for (var i = 1; i < nsectors; ++i) {\n      sectors[i - 1] = file.slice(i * ssz, (i + 1) * ssz);\n    }\n\n    sectors[nsectors - 1] = file.slice(nsectors * ssz);\n    return sectors;\n  }\n  /* [MS-CFB] 2.6.4 Red-Black Tree */\n\n\n  function build_full_paths(FI, FP, Paths) {\n    var i = 0,\n        L = 0,\n        R = 0,\n        C = 0,\n        j = 0,\n        pl = Paths.length;\n    var dad = [],\n        q = [];\n\n    for (; i < pl; ++i) {\n      dad[i] = q[i] = i;\n      FP[i] = Paths[i];\n    }\n\n    for (; j < q.length; ++j) {\n      i = q[j];\n      L = FI[i].L;\n      R = FI[i].R;\n      C = FI[i].C;\n\n      if (dad[i] === i) {\n        if (L !== -1\n        /*NOSTREAM*/\n        && dad[L] !== L) dad[i] = dad[L];\n        if (R !== -1 && dad[R] !== R) dad[i] = dad[R];\n      }\n\n      if (C !== -1\n      /*NOSTREAM*/\n      ) dad[C] = i;\n\n      if (L !== -1 && i != dad[i]) {\n        dad[L] = dad[i];\n        if (q.lastIndexOf(L) < j) q.push(L);\n      }\n\n      if (R !== -1 && i != dad[i]) {\n        dad[R] = dad[i];\n        if (q.lastIndexOf(R) < j) q.push(R);\n      }\n    }\n\n    for (i = 1; i < pl; ++i) {\n      if (dad[i] === i) {\n        if (R !== -1\n        /*NOSTREAM*/\n        && dad[R] !== R) dad[i] = dad[R];else if (L !== -1 && dad[L] !== L) dad[i] = dad[L];\n      }\n    }\n\n    for (i = 1; i < pl; ++i) {\n      if (FI[i].type === 0\n      /* unknown */\n      ) continue;\n      j = i;\n      if (j != dad[j]) do {\n        j = dad[j];\n        FP[i] = FP[j] + \"/\" + FP[i];\n      } while (j !== 0 && -1 !== dad[j] && j != dad[j]);\n      dad[i] = -1;\n    }\n\n    FP[0] += \"/\";\n\n    for (i = 1; i < pl; ++i) {\n      if (FI[i].type !== 2\n      /* stream */\n      ) FP[i] += \"/\";\n    }\n  }\n\n  function get_mfat_entry(entry, payload, mini) {\n    var start = entry.start,\n        size = entry.size; //return (payload.slice(start*MSSZ, start*MSSZ + size));\n\n    var o = [];\n    var idx = start;\n\n    while (mini && size > 0 && idx >= 0) {\n      o.push(payload.slice(idx * MSSZ, idx * MSSZ + MSSZ));\n      size -= MSSZ;\n      idx = __readInt32LE(mini, idx * 4);\n    }\n\n    if (o.length === 0) return new_buf(0);\n    return bconcat(o).slice(0, entry.size);\n  }\n  /** Chase down the rest of the DIFAT chain to build a comprehensive list\n      DIFAT chains by storing the next sector number as the last 32 bits */\n\n\n  function sleuth_fat(idx, cnt, sectors, ssz, fat_addrs) {\n    var q = ENDOFCHAIN;\n\n    if (idx === ENDOFCHAIN) {\n      if (cnt !== 0) throw new Error(\"DIFAT chain shorter than expected\");\n    } else if (idx !== -1\n    /*FREESECT*/\n    ) {\n        var sector = sectors[idx],\n            m = (ssz >>> 2) - 1;\n        if (!sector) return;\n\n        for (var i = 0; i < m; ++i) {\n          if ((q = __readInt32LE(sector, i * 4)) === ENDOFCHAIN) break;\n          fat_addrs.push(q);\n        }\n\n        sleuth_fat(__readInt32LE(sector, ssz - 4), cnt - 1, sectors, ssz, fat_addrs);\n      }\n  }\n  /** Follow the linked list of sectors for a given starting point */\n\n\n  function get_sector_list(sectors, start, fat_addrs, ssz, chkd) {\n    var buf = [],\n        buf_chain = [];\n    if (!chkd) chkd = [];\n    var modulus = ssz - 1,\n        j = 0,\n        jj = 0;\n\n    for (j = start; j >= 0;) {\n      chkd[j] = true;\n      buf[buf.length] = j;\n      buf_chain.push(sectors[j]);\n      var addr = fat_addrs[Math.floor(j * 4 / ssz)];\n      jj = j * 4 & modulus;\n      if (ssz < 4 + jj) throw new Error(\"FAT boundary crossed: \" + j + \" 4 \" + ssz);\n      if (!sectors[addr]) break;\n      j = __readInt32LE(sectors[addr], jj);\n    }\n\n    return {\n      nodes: buf,\n      data: __toBuffer([buf_chain])\n    };\n  }\n  /** Chase down the sector linked lists */\n\n\n  function make_sector_list(sectors, dir_start, fat_addrs, ssz) {\n    var sl = sectors.length,\n        sector_list = [];\n    var chkd = [],\n        buf = [],\n        buf_chain = [];\n    var modulus = ssz - 1,\n        i = 0,\n        j = 0,\n        k = 0,\n        jj = 0;\n\n    for (i = 0; i < sl; ++i) {\n      buf = [];\n      k = i + dir_start;\n      if (k >= sl) k -= sl;\n      if (chkd[k]) continue;\n      buf_chain = [];\n\n      for (j = k; j >= 0;) {\n        chkd[j] = true;\n        buf[buf.length] = j;\n        buf_chain.push(sectors[j]);\n        var addr = fat_addrs[Math.floor(j * 4 / ssz)];\n        jj = j * 4 & modulus;\n        if (ssz < 4 + jj) throw new Error(\"FAT boundary crossed: \" + j + \" 4 \" + ssz);\n        if (!sectors[addr]) break;\n        j = __readInt32LE(sectors[addr], jj);\n      }\n\n      sector_list[k] = {\n        nodes: buf,\n        data: __toBuffer([buf_chain])\n      };\n    }\n\n    return sector_list;\n  }\n  /* [MS-CFB] 2.6.1 Compound File Directory Entry */\n\n\n  function read_directory(dir_start, sector_list, sectors, Paths, nmfs, files, FileIndex, mini) {\n    var minifat_store = 0,\n        pl = Paths.length ? 2 : 0;\n    var sector = sector_list[dir_start].data;\n    var i = 0,\n        namelen = 0,\n        name;\n\n    for (; i < sector.length; i += 128) {\n      var blob = sector.slice(i, i + 128);\n      prep_blob(blob, 64);\n      namelen = blob.read_shift(2);\n      name = __utf16le(blob, 0, namelen - pl);\n      Paths.push(name);\n      var o = {\n        name: name,\n        type: blob.read_shift(1),\n        color: blob.read_shift(1),\n        L: blob.read_shift(4, 'i'),\n        R: blob.read_shift(4, 'i'),\n        C: blob.read_shift(4, 'i'),\n        clsid: blob.read_shift(16),\n        state: blob.read_shift(4, 'i'),\n        start: 0,\n        size: 0\n      };\n      var ctime = blob.read_shift(2) + blob.read_shift(2) + blob.read_shift(2) + blob.read_shift(2);\n      if (ctime !== 0) o.ct = read_date(blob, blob.l - 8);\n      var mtime = blob.read_shift(2) + blob.read_shift(2) + blob.read_shift(2) + blob.read_shift(2);\n      if (mtime !== 0) o.mt = read_date(blob, blob.l - 8);\n      o.start = blob.read_shift(4, 'i');\n      o.size = blob.read_shift(4, 'i');\n\n      if (o.size < 0 && o.start < 0) {\n        o.size = o.type = 0;\n        o.start = ENDOFCHAIN;\n        o.name = \"\";\n      }\n\n      if (o.type === 5) {\n        /* root */\n        minifat_store = o.start;\n        if (nmfs > 0 && minifat_store !== ENDOFCHAIN) sector_list[minifat_store].name = \"!StreamData\";\n        /*minifat_size = o.size;*/\n      } else if (o.size >= 4096\n      /* MSCSZ */\n      ) {\n          o.storage = 'fat';\n          if (sector_list[o.start] === undefined) sector_list[o.start] = get_sector_list(sectors, o.start, sector_list.fat_addrs, sector_list.ssz);\n          sector_list[o.start].name = o.name;\n          o.content = sector_list[o.start].data.slice(0, o.size);\n        } else {\n        o.storage = 'minifat';\n        if (o.size < 0) o.size = 0;else if (minifat_store !== ENDOFCHAIN && o.start !== ENDOFCHAIN && sector_list[minifat_store]) {\n          o.content = get_mfat_entry(o, sector_list[minifat_store].data, (sector_list[mini] || {}).data);\n        }\n      }\n\n      if (o.content) prep_blob(o.content, 0);\n      files[name] = o;\n      FileIndex.push(o);\n    }\n  }\n\n  function read_date(blob, offset) {\n    return new Date((__readUInt32LE(blob, offset + 4) / 1e7 * Math.pow(2, 32) + __readUInt32LE(blob, offset) / 1e7 - 11644473600) * 1000);\n  }\n\n  function read_file(filename, options) {\n    get_fs();\n    return parse(fs.readFileSync(filename), options);\n  }\n\n  function read(blob, options) {\n    switch (options && options.type || \"base64\") {\n      case \"file\":\n        return read_file(blob, options);\n\n      case \"base64\":\n        return parse(s2a(Base64.decode(blob)), options);\n\n      case \"binary\":\n        return parse(s2a(blob), options);\n    }\n\n    return parse(blob, options);\n  }\n\n  function init_cfb(cfb, opts) {\n    var o = opts || {},\n        root = o.root || \"Root Entry\";\n    if (!cfb.FullPaths) cfb.FullPaths = [];\n    if (!cfb.FileIndex) cfb.FileIndex = [];\n    if (cfb.FullPaths.length !== cfb.FileIndex.length) throw new Error(\"inconsistent CFB structure\");\n\n    if (cfb.FullPaths.length === 0) {\n      cfb.FullPaths[0] = root + \"/\";\n      cfb.FileIndex[0] = {\n        name: root,\n        type: 5\n      };\n    }\n\n    if (o.CLSID) cfb.FileIndex[0].clsid = o.CLSID;\n    seed_cfb(cfb);\n  }\n\n  function seed_cfb(cfb) {\n    var nm = \"\\x01Sh33tJ5\";\n    if (CFB.find(cfb, \"/\" + nm)) return;\n    var p = new_buf(4);\n    p[0] = 55;\n    p[1] = p[3] = 50;\n    p[2] = 54;\n    cfb.FileIndex.push({\n      name: nm,\n      type: 2,\n      content: p,\n      size: 4,\n      L: 69,\n      R: 69,\n      C: 69\n    });\n    cfb.FullPaths.push(cfb.FullPaths[0] + nm);\n    rebuild_cfb(cfb);\n  }\n\n  function rebuild_cfb(cfb, f) {\n    init_cfb(cfb);\n    var gc = false,\n        s = false;\n\n    for (var i = cfb.FullPaths.length - 1; i >= 0; --i) {\n      var _file = cfb.FileIndex[i];\n\n      switch (_file.type) {\n        case 0:\n          if (s) gc = true;else {\n            cfb.FileIndex.pop();\n            cfb.FullPaths.pop();\n          }\n          break;\n\n        case 1:\n        case 2:\n        case 5:\n          s = true;\n          if (isNaN(_file.R * _file.L * _file.C)) gc = true;\n          if (_file.R > -1 && _file.L > -1 && _file.R == _file.L) gc = true;\n          break;\n\n        default:\n          gc = true;\n          break;\n      }\n    }\n\n    if (!gc && !f) return;\n    var now = new Date(1987, 1, 19),\n        j = 0;\n    var data = [];\n\n    for (i = 0; i < cfb.FullPaths.length; ++i) {\n      if (cfb.FileIndex[i].type === 0) continue;\n      data.push([cfb.FullPaths[i], cfb.FileIndex[i]]);\n    }\n\n    for (i = 0; i < data.length; ++i) {\n      var dad = dirname(data[i][0]);\n      s = false;\n\n      for (j = 0; j < data.length; ++j) {\n        if (data[j][0] === dad) s = true;\n      }\n\n      if (!s) data.push([dad, {\n        name: filename(dad).replace(\"/\", \"\"),\n        type: 1,\n        clsid: HEADER_CLSID,\n        ct: now,\n        mt: now,\n        content: null\n      }]);\n    }\n\n    data.sort(function (x, y) {\n      return namecmp(x[0], y[0]);\n    });\n    cfb.FullPaths = [];\n    cfb.FileIndex = [];\n\n    for (i = 0; i < data.length; ++i) {\n      cfb.FullPaths[i] = data[i][0];\n      cfb.FileIndex[i] = data[i][1];\n    }\n\n    for (i = 0; i < data.length; ++i) {\n      var elt = cfb.FileIndex[i];\n      var nm = cfb.FullPaths[i];\n      elt.name = filename(nm).replace(\"/\", \"\");\n      elt.L = elt.R = elt.C = -(elt.color = 1);\n      elt.size = elt.content ? elt.content.length : 0;\n      elt.start = 0;\n      elt.clsid = elt.clsid || HEADER_CLSID;\n\n      if (i === 0) {\n        elt.C = data.length > 1 ? 1 : -1;\n        elt.size = 0;\n        elt.type = 5;\n      } else if (nm.slice(-1) == \"/\") {\n        for (j = i + 1; j < data.length; ++j) {\n          if (dirname(cfb.FullPaths[j]) == nm) break;\n        }\n\n        elt.C = j >= data.length ? -1 : j;\n\n        for (j = i + 1; j < data.length; ++j) {\n          if (dirname(cfb.FullPaths[j]) == dirname(nm)) break;\n        }\n\n        elt.R = j >= data.length ? -1 : j;\n        elt.type = 1;\n      } else {\n        if (dirname(cfb.FullPaths[i + 1] || \"\") == dirname(nm)) elt.R = i + 1;\n        elt.type = 2;\n      }\n    }\n  }\n\n  function _write(cfb, options) {\n    var _opts = options || {};\n\n    rebuild_cfb(cfb);\n    if (_opts.fileType == 'zip') return write_zip(cfb, _opts);\n\n    var L = function (cfb) {\n      var mini_size = 0,\n          fat_size = 0;\n\n      for (var i = 0; i < cfb.FileIndex.length; ++i) {\n        var file = cfb.FileIndex[i];\n        if (!file.content) continue;\n        var flen = file.content.length;\n\n        if (flen > 0) {\n          if (flen < 0x1000) mini_size += flen + 0x3F >> 6;else fat_size += flen + 0x01FF >> 9;\n        }\n      }\n\n      var dir_cnt = cfb.FullPaths.length + 3 >> 2;\n      var mini_cnt = mini_size + 7 >> 3;\n      var mfat_cnt = mini_size + 0x7F >> 7;\n      var fat_base = mini_cnt + fat_size + dir_cnt + mfat_cnt;\n      var fat_cnt = fat_base + 0x7F >> 7;\n      var difat_cnt = fat_cnt <= 109 ? 0 : Math.ceil((fat_cnt - 109) / 0x7F);\n\n      while (fat_base + fat_cnt + difat_cnt + 0x7F >> 7 > fat_cnt) {\n        difat_cnt = ++fat_cnt <= 109 ? 0 : Math.ceil((fat_cnt - 109) / 0x7F);\n      }\n\n      var L = [1, difat_cnt, fat_cnt, mfat_cnt, dir_cnt, fat_size, mini_size, 0];\n      cfb.FileIndex[0].size = mini_size << 6;\n      L[7] = (cfb.FileIndex[0].start = L[0] + L[1] + L[2] + L[3] + L[4] + L[5]) + (L[6] + 7 >> 3);\n      return L;\n    }(cfb);\n\n    var o = new_buf(L[7] << 9);\n    var i = 0,\n        T = 0;\n    {\n      for (i = 0; i < 8; ++i) {\n        o.write_shift(1, HEADER_SIG[i]);\n      }\n\n      for (i = 0; i < 8; ++i) {\n        o.write_shift(2, 0);\n      }\n\n      o.write_shift(2, 0x003E);\n      o.write_shift(2, 0x0003);\n      o.write_shift(2, 0xFFFE);\n      o.write_shift(2, 0x0009);\n      o.write_shift(2, 0x0006);\n\n      for (i = 0; i < 3; ++i) {\n        o.write_shift(2, 0);\n      }\n\n      o.write_shift(4, 0);\n      o.write_shift(4, L[2]);\n      o.write_shift(4, L[0] + L[1] + L[2] + L[3] - 1);\n      o.write_shift(4, 0);\n      o.write_shift(4, 1 << 12);\n      o.write_shift(4, L[3] ? L[0] + L[1] + L[2] - 1 : ENDOFCHAIN);\n      o.write_shift(4, L[3]);\n      o.write_shift(-4, L[1] ? L[0] - 1 : ENDOFCHAIN);\n      o.write_shift(4, L[1]);\n\n      for (i = 0; i < 109; ++i) {\n        o.write_shift(-4, i < L[2] ? L[1] + i : -1);\n      }\n    }\n\n    if (L[1]) {\n      for (T = 0; T < L[1]; ++T) {\n        for (; i < 236 + T * 127; ++i) {\n          o.write_shift(-4, i < L[2] ? L[1] + i : -1);\n        }\n\n        o.write_shift(-4, T === L[1] - 1 ? ENDOFCHAIN : T + 1);\n      }\n    }\n\n    var chainit = function chainit(w) {\n      for (T += w; i < T - 1; ++i) {\n        o.write_shift(-4, i + 1);\n      }\n\n      if (w) {\n        ++i;\n        o.write_shift(-4, ENDOFCHAIN);\n      }\n    };\n\n    T = i = 0;\n\n    for (T += L[1]; i < T; ++i) {\n      o.write_shift(-4, consts.DIFSECT);\n    }\n\n    for (T += L[2]; i < T; ++i) {\n      o.write_shift(-4, consts.FATSECT);\n    }\n\n    chainit(L[3]);\n    chainit(L[4]);\n    var j = 0,\n        flen = 0;\n    var file = cfb.FileIndex[0];\n\n    for (; j < cfb.FileIndex.length; ++j) {\n      file = cfb.FileIndex[j];\n      if (!file.content) continue;\n      flen = file.content.length;\n      if (flen < 0x1000) continue;\n      file.start = T;\n      chainit(flen + 0x01FF >> 9);\n    }\n\n    chainit(L[6] + 7 >> 3);\n\n    while (o.l & 0x1FF) {\n      o.write_shift(-4, consts.ENDOFCHAIN);\n    }\n\n    T = i = 0;\n\n    for (j = 0; j < cfb.FileIndex.length; ++j) {\n      file = cfb.FileIndex[j];\n      if (!file.content) continue;\n      flen = file.content.length;\n      if (!flen || flen >= 0x1000) continue;\n      file.start = T;\n      chainit(flen + 0x3F >> 6);\n    }\n\n    while (o.l & 0x1FF) {\n      o.write_shift(-4, consts.ENDOFCHAIN);\n    }\n\n    for (i = 0; i < L[4] << 2; ++i) {\n      var nm = cfb.FullPaths[i];\n\n      if (!nm || nm.length === 0) {\n        for (j = 0; j < 17; ++j) {\n          o.write_shift(4, 0);\n        }\n\n        for (j = 0; j < 3; ++j) {\n          o.write_shift(4, -1);\n        }\n\n        for (j = 0; j < 12; ++j) {\n          o.write_shift(4, 0);\n        }\n\n        continue;\n      }\n\n      file = cfb.FileIndex[i];\n      if (i === 0) file.start = file.size ? file.start - 1 : ENDOFCHAIN;\n\n      var _nm = i === 0 && _opts.root || file.name;\n\n      flen = 2 * (_nm.length + 1);\n      o.write_shift(64, _nm, \"utf16le\");\n      o.write_shift(2, flen);\n      o.write_shift(1, file.type);\n      o.write_shift(1, file.color);\n      o.write_shift(-4, file.L);\n      o.write_shift(-4, file.R);\n      o.write_shift(-4, file.C);\n      if (!file.clsid) for (j = 0; j < 4; ++j) {\n        o.write_shift(4, 0);\n      } else o.write_shift(16, file.clsid, \"hex\");\n      o.write_shift(4, file.state || 0);\n      o.write_shift(4, 0);\n      o.write_shift(4, 0);\n      o.write_shift(4, 0);\n      o.write_shift(4, 0);\n      o.write_shift(4, file.start);\n      o.write_shift(4, file.size);\n      o.write_shift(4, 0);\n    }\n\n    for (i = 1; i < cfb.FileIndex.length; ++i) {\n      file = cfb.FileIndex[i];\n\n      if (file.size >= 0x1000) {\n        o.l = file.start + 1 << 9;\n\n        for (j = 0; j < file.size; ++j) {\n          o.write_shift(1, file.content[j]);\n        }\n\n        for (; j & 0x1FF; ++j) {\n          o.write_shift(1, 0);\n        }\n      }\n    }\n\n    for (i = 1; i < cfb.FileIndex.length; ++i) {\n      file = cfb.FileIndex[i];\n\n      if (file.size > 0 && file.size < 0x1000) {\n        for (j = 0; j < file.size; ++j) {\n          o.write_shift(1, file.content[j]);\n        }\n\n        for (; j & 0x3F; ++j) {\n          o.write_shift(1, 0);\n        }\n      }\n    }\n\n    while (o.l < o.length) {\n      o.write_shift(1, 0);\n    }\n\n    return o;\n  }\n  /* [MS-CFB] 2.6.4 (Unicode 3.0.1 case conversion) */\n\n\n  function find(cfb, path) {\n    var UCFullPaths = cfb.FullPaths.map(function (x) {\n      return x.toUpperCase();\n    });\n    var UCPaths = UCFullPaths.map(function (x) {\n      var y = x.split(\"/\");\n      return y[y.length - (x.slice(-1) == \"/\" ? 2 : 1)];\n    });\n    var k = false;\n\n    if (path.charCodeAt(0) === 47\n    /* \"/\" */\n    ) {\n        k = true;\n        path = UCFullPaths[0].slice(0, -1) + path;\n      } else k = path.indexOf(\"/\") !== -1;\n\n    var UCPath = path.toUpperCase();\n    var w = k === true ? UCFullPaths.indexOf(UCPath) : UCPaths.indexOf(UCPath);\n    if (w !== -1) return cfb.FileIndex[w];\n    var m = !UCPath.match(chr1);\n    UCPath = UCPath.replace(chr0, '');\n    if (m) UCPath = UCPath.replace(chr1, '!');\n\n    for (w = 0; w < UCFullPaths.length; ++w) {\n      if ((m ? UCFullPaths[w].replace(chr1, '!') : UCFullPaths[w]).replace(chr0, '') == UCPath) return cfb.FileIndex[w];\n      if ((m ? UCPaths[w].replace(chr1, '!') : UCPaths[w]).replace(chr0, '') == UCPath) return cfb.FileIndex[w];\n    }\n\n    return null;\n  }\n  /** CFB Constants */\n\n\n  var MSSZ = 64;\n  /* Mini Sector Size = 1<<6 */\n  //var MSCSZ = 4096; /* Mini Stream Cutoff Size */\n\n  /* 2.1 Compound File Sector Numbers and Types */\n\n  var ENDOFCHAIN = -2;\n  /* 2.2 Compound File Header */\n\n  var HEADER_SIGNATURE = 'd0cf11e0a1b11ae1';\n  var HEADER_SIG = [0xD0, 0xCF, 0x11, 0xE0, 0xA1, 0xB1, 0x1A, 0xE1];\n  var HEADER_CLSID = '00000000000000000000000000000000';\n  var consts = {\n    /* 2.1 Compund File Sector Numbers and Types */\n    MAXREGSECT: -6,\n    DIFSECT: -4,\n    FATSECT: -3,\n    ENDOFCHAIN: ENDOFCHAIN,\n    FREESECT: -1,\n\n    /* 2.2 Compound File Header */\n    HEADER_SIGNATURE: HEADER_SIGNATURE,\n    HEADER_MINOR_VERSION: '3e00',\n    MAXREGSID: -6,\n    NOSTREAM: -1,\n    HEADER_CLSID: HEADER_CLSID,\n\n    /* 2.6.1 Compound File Directory Entry */\n    EntryTypes: ['unknown', 'storage', 'stream', 'lockbytes', 'property', 'root']\n  };\n\n  function write_file(cfb, filename, options) {\n    get_fs();\n\n    var o = _write(cfb, options);\n\n    fs.writeFileSync(filename, o);\n  }\n\n  function a2s(o) {\n    var out = new Array(o.length);\n\n    for (var i = 0; i < o.length; ++i) {\n      out[i] = String.fromCharCode(o[i]);\n    }\n\n    return out.join(\"\");\n  }\n\n  function write(cfb, options) {\n    var o = _write(cfb, options);\n\n    switch (options && options.type) {\n      case \"file\":\n        get_fs();\n        fs.writeFileSync(options.filename, o);\n        return o;\n\n      case \"binary\":\n        return a2s(o);\n\n      case \"base64\":\n        return Base64.encode(a2s(o));\n    }\n\n    return o;\n  }\n  /* node < 8.1 zlib does not expose bytesRead, so default to pure JS */\n\n\n  var _zlib;\n\n  function use_zlib(zlib) {\n    try {\n      var InflateRaw = zlib.InflateRaw;\n      var InflRaw = new InflateRaw();\n\n      InflRaw._processChunk(new Uint8Array([3, 0]), InflRaw._finishFlushFlag);\n\n      if (InflRaw.bytesRead) _zlib = zlib;else throw new Error(\"zlib does not expose bytesRead\");\n    } catch (e) {\n      console.error(\"cannot use native zlib: \" + (e.message || e));\n    }\n  }\n\n  function _inflateRawSync(payload, usz) {\n    if (!_zlib) return _inflate(payload, usz);\n    var InflateRaw = _zlib.InflateRaw;\n    var InflRaw = new InflateRaw();\n\n    var out = InflRaw._processChunk(payload.slice(payload.l), InflRaw._finishFlushFlag);\n\n    payload.l += InflRaw.bytesRead;\n    return out;\n  }\n\n  function _deflateRawSync(payload) {\n    return _zlib ? _zlib.deflateRawSync(payload) : _deflate(payload);\n  }\n\n  var CLEN_ORDER = [16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15];\n  /*  LEN_ID = [ 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285 ]; */\n\n  var LEN_LN = [3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31, 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258];\n  /*  DST_ID = [  0,  1,  2,  3,  4,  5,  6,  7,  8,  9, 10, 11, 12, 13,  14,  15,  16,  17,  18,  19,   20,   21,   22,   23,   24,   25,   26,    27,    28,    29 ]; */\n\n  var DST_LN = [1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145, 8193, 12289, 16385, 24577];\n\n  function bit_swap_8(n) {\n    var t = (n << 1 | n << 11) & 0x22110 | (n << 5 | n << 15) & 0x88440;\n    return (t >> 16 | t >> 8 | t) & 0xFF;\n  }\n\n  var use_typed_arrays = typeof Uint8Array !== 'undefined';\n  var bitswap8 = use_typed_arrays ? new Uint8Array(1 << 8) : [];\n\n  for (var q = 0; q < 1 << 8; ++q) {\n    bitswap8[q] = bit_swap_8(q);\n  }\n\n  function bit_swap_n(n, b) {\n    var rev = bitswap8[n & 0xFF];\n    if (b <= 8) return rev >>> 8 - b;\n    rev = rev << 8 | bitswap8[n >> 8 & 0xFF];\n    if (b <= 16) return rev >>> 16 - b;\n    rev = rev << 8 | bitswap8[n >> 16 & 0xFF];\n    return rev >>> 24 - b;\n  }\n  /* helpers for unaligned bit reads */\n\n\n  function read_bits_2(buf, bl) {\n    var w = bl & 7,\n        h = bl >>> 3;\n    return (buf[h] | (w <= 6 ? 0 : buf[h + 1] << 8)) >>> w & 0x03;\n  }\n\n  function read_bits_3(buf, bl) {\n    var w = bl & 7,\n        h = bl >>> 3;\n    return (buf[h] | (w <= 5 ? 0 : buf[h + 1] << 8)) >>> w & 0x07;\n  }\n\n  function read_bits_4(buf, bl) {\n    var w = bl & 7,\n        h = bl >>> 3;\n    return (buf[h] | (w <= 4 ? 0 : buf[h + 1] << 8)) >>> w & 0x0F;\n  }\n\n  function read_bits_5(buf, bl) {\n    var w = bl & 7,\n        h = bl >>> 3;\n    return (buf[h] | (w <= 3 ? 0 : buf[h + 1] << 8)) >>> w & 0x1F;\n  }\n\n  function read_bits_7(buf, bl) {\n    var w = bl & 7,\n        h = bl >>> 3;\n    return (buf[h] | (w <= 1 ? 0 : buf[h + 1] << 8)) >>> w & 0x7F;\n  }\n  /* works up to n = 3 * 8 + 1 = 25 */\n\n\n  function read_bits_n(buf, bl, n) {\n    var w = bl & 7,\n        h = bl >>> 3,\n        f = (1 << n) - 1;\n    var v = buf[h] >>> w;\n    if (n < 8 - w) return v & f;\n    v |= buf[h + 1] << 8 - w;\n    if (n < 16 - w) return v & f;\n    v |= buf[h + 2] << 16 - w;\n    if (n < 24 - w) return v & f;\n    v |= buf[h + 3] << 24 - w;\n    return v & f;\n  }\n  /* until ArrayBuffer#realloc is a thing, fake a realloc */\n\n\n  function realloc(b, sz) {\n    var L = b.length,\n        M = 2 * L > sz ? 2 * L : sz + 5,\n        i = 0;\n    if (L >= sz) return b;\n\n    if (has_buf) {\n      var o = new_unsafe_buf(M); // $FlowIgnore\n\n      if (b.copy) b.copy(o);else for (; i < b.length; ++i) {\n        o[i] = b[i];\n      }\n      return o;\n    } else if (use_typed_arrays) {\n      var a = new Uint8Array(M);\n      if (a.set) a.set(b);else for (; i < b.length; ++i) {\n        a[i] = b[i];\n      }\n      return a;\n    }\n\n    b.length = M;\n    return b;\n  }\n  /* zero-filled arrays for older browsers */\n\n\n  function zero_fill_array(n) {\n    var o = new Array(n);\n\n    for (var i = 0; i < n; ++i) {\n      o[i] = 0;\n    }\n\n    return o;\n  }\n\n  var _deflate = function () {\n    var _deflateRaw = function () {\n      return function deflateRaw(data, out) {\n        var boff = 0;\n\n        while (boff < data.length) {\n          var L = Math.min(0xFFFF, data.length - boff);\n          var h = boff + L == data.length;\n          /* TODO: this is only type 0 stored */\n\n          out.write_shift(1, +h);\n          out.write_shift(2, L);\n          out.write_shift(2, ~L & 0xFFFF);\n\n          while (L-- > 0) {\n            out[out.l++] = data[boff++];\n          }\n        }\n\n        return out.l;\n      };\n    }();\n\n    return function (data) {\n      var buf = new_buf(50 + Math.floor(data.length * 1.1));\n\n      var off = _deflateRaw(data, buf);\n\n      return buf.slice(0, off);\n    };\n  }();\n  /* modified inflate function also moves original read head */\n\n  /* build tree (used for literals and lengths) */\n\n\n  function build_tree(clens, cmap, MAX) {\n    var maxlen = 1,\n        w = 0,\n        i = 0,\n        j = 0,\n        ccode = 0,\n        L = clens.length;\n    var bl_count = use_typed_arrays ? new Uint16Array(32) : zero_fill_array(32);\n\n    for (i = 0; i < 32; ++i) {\n      bl_count[i] = 0;\n    }\n\n    for (i = L; i < MAX; ++i) {\n      clens[i] = 0;\n    }\n\n    L = clens.length;\n    var ctree = use_typed_arrays ? new Uint16Array(L) : zero_fill_array(L); // []\n\n    /* build code tree */\n\n    for (i = 0; i < L; ++i) {\n      bl_count[w = clens[i]]++;\n      if (maxlen < w) maxlen = w;\n      ctree[i] = 0;\n    }\n\n    bl_count[0] = 0;\n\n    for (i = 1; i <= maxlen; ++i) {\n      bl_count[i + 16] = ccode = ccode + bl_count[i - 1] << 1;\n    }\n\n    for (i = 0; i < L; ++i) {\n      ccode = clens[i];\n      if (ccode != 0) ctree[i] = bl_count[ccode + 16]++;\n    }\n    /* cmap[maxlen + 4 bits] = (off&15) + (lit<<4) reverse mapping */\n\n\n    var cleni = 0;\n\n    for (i = 0; i < L; ++i) {\n      cleni = clens[i];\n\n      if (cleni != 0) {\n        ccode = bit_swap_n(ctree[i], maxlen) >> maxlen - cleni;\n\n        for (j = (1 << maxlen + 4 - cleni) - 1; j >= 0; --j) {\n          cmap[ccode | j << cleni] = cleni & 15 | i << 4;\n        }\n      }\n    }\n\n    return maxlen;\n  }\n\n  var fix_lmap = use_typed_arrays ? new Uint16Array(512) : zero_fill_array(512);\n  var fix_dmap = use_typed_arrays ? new Uint16Array(32) : zero_fill_array(32);\n\n  if (!use_typed_arrays) {\n    for (var i = 0; i < 512; ++i) {\n      fix_lmap[i] = 0;\n    }\n\n    for (i = 0; i < 32; ++i) {\n      fix_dmap[i] = 0;\n    }\n  }\n\n  (function () {\n    var dlens = [];\n    var i = 0;\n\n    for (; i < 32; i++) {\n      dlens.push(5);\n    }\n\n    build_tree(dlens, fix_dmap, 32);\n    var clens = [];\n    i = 0;\n\n    for (; i <= 143; i++) {\n      clens.push(8);\n    }\n\n    for (; i <= 255; i++) {\n      clens.push(9);\n    }\n\n    for (; i <= 279; i++) {\n      clens.push(7);\n    }\n\n    for (; i <= 287; i++) {\n      clens.push(8);\n    }\n\n    build_tree(clens, fix_lmap, 288);\n  })();\n\n  var dyn_lmap = use_typed_arrays ? new Uint16Array(32768) : zero_fill_array(32768);\n  var dyn_dmap = use_typed_arrays ? new Uint16Array(32768) : zero_fill_array(32768);\n  var dyn_cmap = use_typed_arrays ? new Uint16Array(128) : zero_fill_array(128);\n  var dyn_len_1 = 1,\n      dyn_len_2 = 1;\n  /* 5.5.3 Expanding Huffman Codes */\n\n  function dyn(data, boff) {\n    /* nomenclature from RFC1951 refers to bit values; these are offset by the implicit constant */\n    var _HLIT = read_bits_5(data, boff) + 257;\n\n    boff += 5;\n\n    var _HDIST = read_bits_5(data, boff) + 1;\n\n    boff += 5;\n\n    var _HCLEN = read_bits_4(data, boff) + 4;\n\n    boff += 4;\n    var w = 0;\n    /* grab and store code lengths */\n\n    var clens = use_typed_arrays ? new Uint8Array(19) : zero_fill_array(19);\n    var ctree = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];\n    var maxlen = 1;\n    var bl_count = use_typed_arrays ? new Uint8Array(8) : zero_fill_array(8);\n    var next_code = use_typed_arrays ? new Uint8Array(8) : zero_fill_array(8);\n    var L = clens.length;\n    /* 19 */\n\n    for (var i = 0; i < _HCLEN; ++i) {\n      clens[CLEN_ORDER[i]] = w = read_bits_3(data, boff);\n      if (maxlen < w) maxlen = w;\n      bl_count[w]++;\n      boff += 3;\n    }\n    /* build code tree */\n\n\n    var ccode = 0;\n    bl_count[0] = 0;\n\n    for (i = 1; i <= maxlen; ++i) {\n      next_code[i] = ccode = ccode + bl_count[i - 1] << 1;\n    }\n\n    for (i = 0; i < L; ++i) {\n      if ((ccode = clens[i]) != 0) ctree[i] = next_code[ccode]++;\n    }\n    /* cmap[7 bits from stream] = (off&7) + (lit<<3) */\n\n\n    var cleni = 0;\n\n    for (i = 0; i < L; ++i) {\n      cleni = clens[i];\n\n      if (cleni != 0) {\n        ccode = bitswap8[ctree[i]] >> 8 - cleni;\n\n        for (var j = (1 << 7 - cleni) - 1; j >= 0; --j) {\n          dyn_cmap[ccode | j << cleni] = cleni & 7 | i << 3;\n        }\n      }\n    }\n    /* read literal and dist codes at once */\n\n\n    var hcodes = [];\n    maxlen = 1;\n\n    for (; hcodes.length < _HLIT + _HDIST;) {\n      ccode = dyn_cmap[read_bits_7(data, boff)];\n      boff += ccode & 7;\n\n      switch (ccode >>>= 3) {\n        case 16:\n          w = 3 + read_bits_2(data, boff);\n          boff += 2;\n          ccode = hcodes[hcodes.length - 1];\n\n          while (w-- > 0) {\n            hcodes.push(ccode);\n          }\n\n          break;\n\n        case 17:\n          w = 3 + read_bits_3(data, boff);\n          boff += 3;\n\n          while (w-- > 0) {\n            hcodes.push(0);\n          }\n\n          break;\n\n        case 18:\n          w = 11 + read_bits_7(data, boff);\n          boff += 7;\n\n          while (w-- > 0) {\n            hcodes.push(0);\n          }\n\n          break;\n\n        default:\n          hcodes.push(ccode);\n          if (maxlen < ccode) maxlen = ccode;\n          break;\n      }\n    }\n    /* build literal / length trees */\n\n\n    var h1 = hcodes.slice(0, _HLIT),\n        h2 = hcodes.slice(_HLIT);\n\n    for (i = _HLIT; i < 286; ++i) {\n      h1[i] = 0;\n    }\n\n    for (i = _HDIST; i < 30; ++i) {\n      h2[i] = 0;\n    }\n\n    dyn_len_1 = build_tree(h1, dyn_lmap, 286);\n    dyn_len_2 = build_tree(h2, dyn_dmap, 30);\n    return boff;\n  }\n  /* return [ data, bytesRead ] */\n\n\n  function inflate(data, usz) {\n    /* shortcircuit for empty buffer [0x03, 0x00] */\n    if (data[0] == 3 && !(data[1] & 0x3)) {\n      return [new_raw_buf(usz), 2];\n    }\n    /* bit offset */\n\n\n    var boff = 0;\n    /* header includes final bit and type bits */\n\n    var header = 0;\n    var outbuf = new_unsafe_buf(usz ? usz : 1 << 18);\n    var woff = 0;\n    var OL = outbuf.length >>> 0;\n    var max_len_1 = 0,\n        max_len_2 = 0;\n\n    while ((header & 1) == 0) {\n      header = read_bits_3(data, boff);\n      boff += 3;\n\n      if (header >>> 1 == 0) {\n        /* Stored block */\n        if (boff & 7) boff += 8 - (boff & 7);\n        /* 2 bytes sz, 2 bytes bit inverse */\n\n        var sz = data[boff >>> 3] | data[(boff >>> 3) + 1] << 8;\n        boff += 32;\n        /* push sz bytes */\n\n        if (!usz && OL < woff + sz) {\n          outbuf = realloc(outbuf, woff + sz);\n          OL = outbuf.length;\n        }\n\n        if (typeof data.copy === 'function') {\n          // $FlowIgnore\n          data.copy(outbuf, woff, boff >>> 3, (boff >>> 3) + sz);\n          woff += sz;\n          boff += 8 * sz;\n        } else while (sz-- > 0) {\n          outbuf[woff++] = data[boff >>> 3];\n          boff += 8;\n        }\n\n        continue;\n      } else if (header >>> 1 == 1) {\n        /* Fixed Huffman */\n        max_len_1 = 9;\n        max_len_2 = 5;\n      } else {\n        /* Dynamic Huffman */\n        boff = dyn(data, boff);\n        max_len_1 = dyn_len_1;\n        max_len_2 = dyn_len_2;\n      }\n\n      if (!usz && OL < woff + 32767) {\n        outbuf = realloc(outbuf, woff + 32767);\n        OL = outbuf.length;\n      }\n\n      for (;;) {\n        // while(true) is apparently out of vogue in modern JS circles\n\n        /* ingest code and move read head */\n        var bits = read_bits_n(data, boff, max_len_1);\n        var code = header >>> 1 == 1 ? fix_lmap[bits] : dyn_lmap[bits];\n        boff += code & 15;\n        code >>>= 4;\n        /* 0-255 are literals, 256 is end of block token, 257+ are copy tokens */\n\n        if ((code >>> 8 & 0xFF) === 0) outbuf[woff++] = code;else if (code == 256) break;else {\n          code -= 257;\n          var len_eb = code < 8 ? 0 : code - 4 >> 2;\n          if (len_eb > 5) len_eb = 0;\n          var tgt = woff + LEN_LN[code];\n          /* length extra bits */\n\n          if (len_eb > 0) {\n            tgt += read_bits_n(data, boff, len_eb);\n            boff += len_eb;\n          }\n          /* dist code */\n\n\n          bits = read_bits_n(data, boff, max_len_2);\n          code = header >>> 1 == 1 ? fix_dmap[bits] : dyn_dmap[bits];\n          boff += code & 15;\n          code >>>= 4;\n          var dst_eb = code < 4 ? 0 : code - 2 >> 1;\n          var dst = DST_LN[code];\n          /* dist extra bits */\n\n          if (dst_eb > 0) {\n            dst += read_bits_n(data, boff, dst_eb);\n            boff += dst_eb;\n          }\n          /* in the common case, manual byte copy is faster than TA set / Buffer copy */\n\n\n          if (!usz && OL < tgt) {\n            outbuf = realloc(outbuf, tgt);\n            OL = outbuf.length;\n          }\n\n          while (woff < tgt) {\n            outbuf[woff] = outbuf[woff - dst];\n            ++woff;\n          }\n        }\n      }\n    }\n\n    return [usz ? outbuf : outbuf.slice(0, woff), boff + 7 >>> 3];\n  }\n\n  function _inflate(payload, usz) {\n    var data = payload.slice(payload.l || 0);\n    var out = inflate(data, usz);\n    payload.l += out[1];\n    return out[0];\n  }\n\n  function warn_or_throw(wrn, msg) {\n    if (wrn) {\n      if (typeof console !== 'undefined') console.error(msg);\n    } else throw new Error(msg);\n  }\n\n  function parse_zip(file, options) {\n    var blob = file;\n    prep_blob(blob, 0);\n    var FileIndex = [],\n        FullPaths = [];\n    var o = {\n      FileIndex: FileIndex,\n      FullPaths: FullPaths\n    };\n    init_cfb(o, {\n      root: options.root\n    });\n    /* find end of central directory, start just after signature */\n\n    var i = blob.length - 4;\n\n    while ((blob[i] != 0x50 || blob[i + 1] != 0x4b || blob[i + 2] != 0x05 || blob[i + 3] != 0x06) && i >= 0) {\n      --i;\n    }\n\n    blob.l = i + 4;\n    /* parse end of central directory */\n\n    blob.l += 4;\n    var fcnt = blob.read_shift(2);\n    blob.l += 6;\n    var start_cd = blob.read_shift(4);\n    /* parse central directory */\n\n    blob.l = start_cd;\n\n    for (i = 0; i < fcnt; ++i) {\n      /* trust local file header instead of CD entry */\n      blob.l += 20;\n      var csz = blob.read_shift(4);\n      var usz = blob.read_shift(4);\n      var namelen = blob.read_shift(2);\n      var efsz = blob.read_shift(2);\n      var fcsz = blob.read_shift(2);\n      blob.l += 8;\n      var offset = blob.read_shift(4);\n      var EF = parse_extra_field(blob.slice(blob.l + namelen, blob.l + namelen + efsz));\n      blob.l += namelen + efsz + fcsz;\n      var L = blob.l;\n      blob.l = offset + 4;\n      parse_local_file(blob, csz, usz, o, EF);\n      blob.l = L;\n    }\n\n    return o;\n  }\n  /* head starts just after local file header signature */\n\n\n  function parse_local_file(blob, csz, usz, o, EF) {\n    /* [local file header] */\n    blob.l += 2;\n    var flags = blob.read_shift(2);\n    var meth = blob.read_shift(2);\n    var date = parse_dos_date(blob);\n    if (flags & 0x2041) throw new Error(\"Unsupported ZIP encryption\");\n    var crc32 = blob.read_shift(4);\n\n    var _csz = blob.read_shift(4);\n\n    var _usz = blob.read_shift(4);\n\n    var namelen = blob.read_shift(2);\n    var efsz = blob.read_shift(2); // TODO: flags & (1<<11) // UTF8\n\n    var name = \"\";\n\n    for (var i = 0; i < namelen; ++i) {\n      name += String.fromCharCode(blob[blob.l++]);\n    }\n\n    if (efsz) {\n      var ef = parse_extra_field(blob.slice(blob.l, blob.l + efsz));\n      if ((ef[0x5455] || {}).mt) date = ef[0x5455].mt;\n      if (((EF || {})[0x5455] || {}).mt) date = EF[0x5455].mt;\n    }\n\n    blob.l += efsz;\n    /* [encryption header] */\n\n    /* [file data] */\n\n    var data = blob.slice(blob.l, blob.l + _csz);\n\n    switch (meth) {\n      case 8:\n        data = _inflateRawSync(blob, _usz);\n        break;\n\n      case 0:\n        break;\n\n      default:\n        throw new Error(\"Unsupported ZIP Compression method \" + meth);\n    }\n    /* [data descriptor] */\n\n\n    var wrn = false;\n\n    if (flags & 8) {\n      crc32 = blob.read_shift(4);\n\n      if (crc32 == 0x08074b50) {\n        crc32 = blob.read_shift(4);\n        wrn = true;\n      }\n\n      _csz = blob.read_shift(4);\n      _usz = blob.read_shift(4);\n    }\n\n    if (_csz != csz) warn_or_throw(wrn, \"Bad compressed size: \" + csz + \" != \" + _csz);\n    if (_usz != usz) warn_or_throw(wrn, \"Bad uncompressed size: \" + usz + \" != \" + _usz);\n\n    var _crc32 = CRC32.buf(data, 0);\n\n    if (crc32 >> 0 != _crc32 >> 0) warn_or_throw(wrn, \"Bad CRC32 checksum: \" + crc32 + \" != \" + _crc32);\n    cfb_add(o, name, data, {\n      unsafe: true,\n      mt: date\n    });\n  }\n\n  function write_zip(cfb, options) {\n    var _opts = options || {};\n\n    var out = [],\n        cdirs = [];\n    var o = new_buf(1);\n    var method = _opts.compression ? 8 : 0,\n        flags = 0;\n    var desc = false;\n    if (desc) flags |= 8;\n    var i = 0,\n        j = 0;\n    var start_cd = 0,\n        fcnt = 0;\n    var root = cfb.FullPaths[0],\n        fp = root,\n        fi = cfb.FileIndex[0];\n    var crcs = [];\n    var sz_cd = 0;\n\n    for (i = 1; i < cfb.FullPaths.length; ++i) {\n      fp = cfb.FullPaths[i].slice(root.length);\n      fi = cfb.FileIndex[i];\n      if (!fi.size || !fi.content || fp == \"\\x01Sh33tJ5\") continue;\n      var start = start_cd;\n      /* TODO: CP437 filename */\n\n      var namebuf = new_buf(fp.length);\n\n      for (j = 0; j < fp.length; ++j) {\n        namebuf.write_shift(1, fp.charCodeAt(j) & 0x7F);\n      }\n\n      namebuf = namebuf.slice(0, namebuf.l);\n      crcs[fcnt] = CRC32.buf(fi.content, 0);\n      var outbuf = fi.content;\n      if (method == 8) outbuf = _deflateRawSync(outbuf);\n      /* local file header */\n\n      o = new_buf(30);\n      o.write_shift(4, 0x04034b50);\n      o.write_shift(2, 20);\n      o.write_shift(2, flags);\n      o.write_shift(2, method);\n      /* TODO: last mod file time/date */\n\n      if (fi.mt) write_dos_date(o, fi.mt);else o.write_shift(4, 0);\n      o.write_shift(-4, flags & 8 ? 0 : crcs[fcnt]);\n      o.write_shift(4, flags & 8 ? 0 : outbuf.length);\n      o.write_shift(4, flags & 8 ? 0 : fi.content.length);\n      o.write_shift(2, namebuf.length);\n      o.write_shift(2, 0);\n      start_cd += o.length;\n      out.push(o);\n      start_cd += namebuf.length;\n      out.push(namebuf);\n      /* TODO: encryption header ? */\n\n      start_cd += outbuf.length;\n      out.push(outbuf);\n      /* data descriptor */\n\n      if (flags & 8) {\n        o = new_buf(12);\n        o.write_shift(-4, crcs[fcnt]);\n        o.write_shift(4, outbuf.length);\n        o.write_shift(4, fi.content.length);\n        start_cd += o.l;\n        out.push(o);\n      }\n      /* central directory */\n\n\n      o = new_buf(46);\n      o.write_shift(4, 0x02014b50);\n      o.write_shift(2, 0);\n      o.write_shift(2, 20);\n      o.write_shift(2, flags);\n      o.write_shift(2, method);\n      o.write_shift(4, 0);\n      /* TODO: last mod file time/date */\n\n      o.write_shift(-4, crcs[fcnt]);\n      o.write_shift(4, outbuf.length);\n      o.write_shift(4, fi.content.length);\n      o.write_shift(2, namebuf.length);\n      o.write_shift(2, 0);\n      o.write_shift(2, 0);\n      o.write_shift(2, 0);\n      o.write_shift(2, 0);\n      o.write_shift(4, 0);\n      o.write_shift(4, start);\n      sz_cd += o.l;\n      cdirs.push(o);\n      sz_cd += namebuf.length;\n      cdirs.push(namebuf);\n      ++fcnt;\n    }\n    /* end of central directory */\n\n\n    o = new_buf(22);\n    o.write_shift(4, 0x06054b50);\n    o.write_shift(2, 0);\n    o.write_shift(2, 0);\n    o.write_shift(2, fcnt);\n    o.write_shift(2, fcnt);\n    o.write_shift(4, sz_cd);\n    o.write_shift(4, start_cd);\n    o.write_shift(2, 0);\n    return bconcat([bconcat(out), bconcat(cdirs), o]);\n  }\n\n  function cfb_new(opts) {\n    var o = {};\n    init_cfb(o, opts);\n    return o;\n  }\n\n  function cfb_add(cfb, name, content, opts) {\n    var unsafe = opts && opts.unsafe;\n    if (!unsafe) init_cfb(cfb);\n    var file = !unsafe && CFB.find(cfb, name);\n\n    if (!file) {\n      var fpath = cfb.FullPaths[0];\n      if (name.slice(0, fpath.length) == fpath) fpath = name;else {\n        if (fpath.slice(-1) != \"/\") fpath += \"/\";\n        fpath = (fpath + name).replace(\"//\", \"/\");\n      }\n      file = {\n        name: filename(name),\n        type: 2\n      };\n      cfb.FileIndex.push(file);\n      cfb.FullPaths.push(fpath);\n      if (!unsafe) CFB.utils.cfb_gc(cfb);\n    }\n\n    file.content = content;\n    file.size = content ? content.length : 0;\n\n    if (opts) {\n      if (opts.CLSID) file.clsid = opts.CLSID;\n      if (opts.mt) file.mt = opts.mt;\n      if (opts.ct) file.ct = opts.ct;\n    }\n\n    return file;\n  }\n\n  function cfb_del(cfb, name) {\n    init_cfb(cfb);\n    var file = CFB.find(cfb, name);\n    if (file) for (var j = 0; j < cfb.FileIndex.length; ++j) {\n      if (cfb.FileIndex[j] == file) {\n        cfb.FileIndex.splice(j, 1);\n        cfb.FullPaths.splice(j, 1);\n        return true;\n      }\n    }\n    return false;\n  }\n\n  function cfb_mov(cfb, old_name, new_name) {\n    init_cfb(cfb);\n    var file = CFB.find(cfb, old_name);\n    if (file) for (var j = 0; j < cfb.FileIndex.length; ++j) {\n      if (cfb.FileIndex[j] == file) {\n        cfb.FileIndex[j].name = filename(new_name);\n        cfb.FullPaths[j] = new_name;\n        return true;\n      }\n    }\n    return false;\n  }\n\n  function cfb_gc(cfb) {\n    rebuild_cfb(cfb, true);\n  }\n\n  exports.find = find;\n  exports.read = read;\n  exports.parse = parse;\n  exports.write = write;\n  exports.writeFile = write_file;\n  exports.utils = {\n    cfb_new: cfb_new,\n    cfb_add: cfb_add,\n    cfb_del: cfb_del,\n    cfb_mov: cfb_mov,\n    cfb_gc: cfb_gc,\n    ReadShift: ReadShift,\n    CheckField: CheckField,\n    prep_blob: prep_blob,\n    bconcat: bconcat,\n    use_zlib: use_zlib,\n    _deflateRaw: _deflate,\n    _inflateRaw: _inflate,\n    consts: consts\n  };\n  return exports;\n}();\n\nif (typeof require !== 'undefined' && typeof module !== 'undefined' && typeof DO_NOT_EXPORT_CFB === 'undefined') {\n  module.exports = CFB;\n}","'use strict';\n\nexports.randomBytes = exports.rng = exports.pseudoRandomBytes = exports.prng = require('randombytes');\nexports.createHash = exports.Hash = require('create-hash');\nexports.createHmac = exports.Hmac = require('create-hmac');\n\nvar algos = require('browserify-sign/algos');\n\nvar algoKeys = Object.keys(algos);\nvar hashes = ['sha1', 'sha224', 'sha256', 'sha384', 'sha512', 'md5', 'rmd160'].concat(algoKeys);\n\nexports.getHashes = function () {\n  return hashes;\n};\n\nvar p = require('pbkdf2');\n\nexports.pbkdf2 = p.pbkdf2;\nexports.pbkdf2Sync = p.pbkdf2Sync;\n\nvar aes = require('browserify-cipher');\n\nexports.Cipher = aes.Cipher;\nexports.createCipher = aes.createCipher;\nexports.Cipheriv = aes.Cipheriv;\nexports.createCipheriv = aes.createCipheriv;\nexports.Decipher = aes.Decipher;\nexports.createDecipher = aes.createDecipher;\nexports.Decipheriv = aes.Decipheriv;\nexports.createDecipheriv = aes.createDecipheriv;\nexports.getCiphers = aes.getCiphers;\nexports.listCiphers = aes.listCiphers;\n\nvar dh = require('diffie-hellman');\n\nexports.DiffieHellmanGroup = dh.DiffieHellmanGroup;\nexports.createDiffieHellmanGroup = dh.createDiffieHellmanGroup;\nexports.getDiffieHellman = dh.getDiffieHellman;\nexports.createDiffieHellman = dh.createDiffieHellman;\nexports.DiffieHellman = dh.DiffieHellman;\n\nvar sign = require('browserify-sign');\n\nexports.createSign = sign.createSign;\nexports.Sign = sign.Sign;\nexports.createVerify = sign.createVerify;\nexports.Verify = sign.Verify;\nexports.createECDH = require('create-ecdh');\n\nvar publicEncrypt = require('public-encrypt');\n\nexports.publicEncrypt = publicEncrypt.publicEncrypt;\nexports.privateEncrypt = publicEncrypt.privateEncrypt;\nexports.publicDecrypt = publicEncrypt.publicDecrypt;\nexports.privateDecrypt = publicEncrypt.privateDecrypt; // the least I can do is make error messages for the rest of the node.js/crypto api.\n// ;[\n//   'createCredentials'\n// ].forEach(function (name) {\n//   exports[name] = function () {\n//     throw new Error([\n//       'sorry, ' + name + ' is not implemented yet',\n//       'we accept pull requests',\n//       'https://github.com/crypto-browserify/crypto-browserify'\n//     ].join('\\n'))\n//   }\n// })\n\nvar rf = require('randomfill');\n\nexports.randomFill = rf.randomFill;\nexports.randomFillSync = rf.randomFillSync;\n\nexports.createCredentials = function () {\n  throw new Error(['sorry, createCredentials is not implemented yet', 'we accept pull requests', 'https://github.com/crypto-browserify/crypto-browserify'].join('\\n'));\n};\n\nexports.constants = {\n  'DH_CHECK_P_NOT_SAFE_PRIME': 2,\n  'DH_CHECK_P_NOT_PRIME': 1,\n  'DH_UNABLE_TO_CHECK_GENERATOR': 4,\n  'DH_NOT_SUITABLE_GENERATOR': 8,\n  'NPN_ENABLED': 1,\n  'ALPN_ENABLED': 1,\n  'RSA_PKCS1_PADDING': 1,\n  'RSA_SSLV23_PADDING': 2,\n  'RSA_NO_PADDING': 3,\n  'RSA_PKCS1_OAEP_PADDING': 4,\n  'RSA_X931_PADDING': 5,\n  'RSA_PKCS1_PSS_PADDING': 6,\n  'POINT_CONVERSION_COMPRESSED': 2,\n  'POINT_CONVERSION_UNCOMPRESSED': 4,\n  'POINT_CONVERSION_HYBRID': 6\n};","/*\n * A JavaScript implementation of the Secure Hash Algorithm, SHA-0, as defined\n * in FIPS PUB 180-1\n * This source code is derived from sha1.js of the same repository.\n * The difference between SHA-0 and SHA-1 is just a bitwise rotate left\n * operation was added.\n */\nvar inherits = require('inherits');\n\nvar Hash = require('./hash');\n\nvar Buffer = require('safe-buffer').Buffer;\n\nvar K = [0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0];\nvar W = new Array(80);\n\nfunction Sha() {\n  this.init();\n  this._w = W;\n  Hash.call(this, 64, 56);\n}\n\ninherits(Sha, Hash);\n\nSha.prototype.init = function () {\n  this._a = 0x67452301;\n  this._b = 0xefcdab89;\n  this._c = 0x98badcfe;\n  this._d = 0x10325476;\n  this._e = 0xc3d2e1f0;\n  return this;\n};\n\nfunction rotl5(num) {\n  return num << 5 | num >>> 27;\n}\n\nfunction rotl30(num) {\n  return num << 30 | num >>> 2;\n}\n\nfunction ft(s, b, c, d) {\n  if (s === 0) return b & c | ~b & d;\n  if (s === 2) return b & c | b & d | c & d;\n  return b ^ c ^ d;\n}\n\nSha.prototype._update = function (M) {\n  var W = this._w;\n  var a = this._a | 0;\n  var b = this._b | 0;\n  var c = this._c | 0;\n  var d = this._d | 0;\n  var e = this._e | 0;\n\n  for (var i = 0; i < 16; ++i) {\n    W[i] = M.readInt32BE(i * 4);\n  }\n\n  for (; i < 80; ++i) {\n    W[i] = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16];\n  }\n\n  for (var j = 0; j < 80; ++j) {\n    var s = ~~(j / 20);\n    var t = rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s] | 0;\n    e = d;\n    d = c;\n    c = rotl30(b);\n    b = a;\n    a = t;\n  }\n\n  this._a = a + this._a | 0;\n  this._b = b + this._b | 0;\n  this._c = c + this._c | 0;\n  this._d = d + this._d | 0;\n  this._e = e + this._e | 0;\n};\n\nSha.prototype._hash = function () {\n  var H = Buffer.allocUnsafe(20);\n  H.writeInt32BE(this._a | 0, 0);\n  H.writeInt32BE(this._b | 0, 4);\n  H.writeInt32BE(this._c | 0, 8);\n  H.writeInt32BE(this._d | 0, 12);\n  H.writeInt32BE(this._e | 0, 16);\n  return H;\n};\n\nmodule.exports = Sha;","/*\n * A JavaScript implementation of the Secure Hash Algorithm, SHA-1, as defined\n * in FIPS PUB 180-1\n * Version 2.1a Copyright Paul Johnston 2000 - 2002.\n * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet\n * Distributed under the BSD License\n * See http://pajhome.org.uk/crypt/md5 for details.\n */\nvar inherits = require('inherits');\n\nvar Hash = require('./hash');\n\nvar Buffer = require('safe-buffer').Buffer;\n\nvar K = [0x5a827999, 0x6ed9eba1, 0x8f1bbcdc | 0, 0xca62c1d6 | 0];\nvar W = new Array(80);\n\nfunction Sha1() {\n  this.init();\n  this._w = W;\n  Hash.call(this, 64, 56);\n}\n\ninherits(Sha1, Hash);\n\nSha1.prototype.init = function () {\n  this._a = 0x67452301;\n  this._b = 0xefcdab89;\n  this._c = 0x98badcfe;\n  this._d = 0x10325476;\n  this._e = 0xc3d2e1f0;\n  return this;\n};\n\nfunction rotl1(num) {\n  return num << 1 | num >>> 31;\n}\n\nfunction rotl5(num) {\n  return num << 5 | num >>> 27;\n}\n\nfunction rotl30(num) {\n  return num << 30 | num >>> 2;\n}\n\nfunction ft(s, b, c, d) {\n  if (s === 0) return b & c | ~b & d;\n  if (s === 2) return b & c | b & d | c & d;\n  return b ^ c ^ d;\n}\n\nSha1.prototype._update = function (M) {\n  var W = this._w;\n  var a = this._a | 0;\n  var b = this._b | 0;\n  var c = this._c | 0;\n  var d = this._d | 0;\n  var e = this._e | 0;\n\n  for (var i = 0; i < 16; ++i) {\n    W[i] = M.readInt32BE(i * 4);\n  }\n\n  for (; i < 80; ++i) {\n    W[i] = rotl1(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16]);\n  }\n\n  for (var j = 0; j < 80; ++j) {\n    var s = ~~(j / 20);\n    var t = rotl5(a) + ft(s, b, c, d) + e + W[j] + K[s] | 0;\n    e = d;\n    d = c;\n    c = rotl30(b);\n    b = a;\n    a = t;\n  }\n\n  this._a = a + this._a | 0;\n  this._b = b + this._b | 0;\n  this._c = c + this._c | 0;\n  this._d = d + this._d | 0;\n  this._e = e + this._e | 0;\n};\n\nSha1.prototype._hash = function () {\n  var H = Buffer.allocUnsafe(20);\n  H.writeInt32BE(this._a | 0, 0);\n  H.writeInt32BE(this._b | 0, 4);\n  H.writeInt32BE(this._c | 0, 8);\n  H.writeInt32BE(this._d | 0, 12);\n  H.writeInt32BE(this._e | 0, 16);\n  return H;\n};\n\nmodule.exports = Sha1;","/**\n * A JavaScript implementation of the Secure Hash Algorithm, SHA-256, as defined\n * in FIPS 180-2\n * Version 2.2-beta Copyright Angel Marin, Paul Johnston 2000 - 2009.\n * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet\n *\n */\nvar inherits = require('inherits');\n\nvar Sha256 = require('./sha256');\n\nvar Hash = require('./hash');\n\nvar Buffer = require('safe-buffer').Buffer;\n\nvar W = new Array(64);\n\nfunction Sha224() {\n  this.init();\n  this._w = W; // new Array(64)\n\n  Hash.call(this, 64, 56);\n}\n\ninherits(Sha224, Sha256);\n\nSha224.prototype.init = function () {\n  this._a = 0xc1059ed8;\n  this._b = 0x367cd507;\n  this._c = 0x3070dd17;\n  this._d = 0xf70e5939;\n  this._e = 0xffc00b31;\n  this._f = 0x68581511;\n  this._g = 0x64f98fa7;\n  this._h = 0xbefa4fa4;\n  return this;\n};\n\nSha224.prototype._hash = function () {\n  var H = Buffer.allocUnsafe(28);\n  H.writeInt32BE(this._a, 0);\n  H.writeInt32BE(this._b, 4);\n  H.writeInt32BE(this._c, 8);\n  H.writeInt32BE(this._d, 12);\n  H.writeInt32BE(this._e, 16);\n  H.writeInt32BE(this._f, 20);\n  H.writeInt32BE(this._g, 24);\n  return H;\n};\n\nmodule.exports = Sha224;","var inherits = require('inherits');\n\nvar SHA512 = require('./sha512');\n\nvar Hash = require('./hash');\n\nvar Buffer = require('safe-buffer').Buffer;\n\nvar W = new Array(160);\n\nfunction Sha384() {\n  this.init();\n  this._w = W;\n  Hash.call(this, 128, 112);\n}\n\ninherits(Sha384, SHA512);\n\nSha384.prototype.init = function () {\n  this._ah = 0xcbbb9d5d;\n  this._bh = 0x629a292a;\n  this._ch = 0x9159015a;\n  this._dh = 0x152fecd8;\n  this._eh = 0x67332667;\n  this._fh = 0x8eb44a87;\n  this._gh = 0xdb0c2e0d;\n  this._hh = 0x47b5481d;\n  this._al = 0xc1059ed8;\n  this._bl = 0x367cd507;\n  this._cl = 0x3070dd17;\n  this._dl = 0xf70e5939;\n  this._el = 0xffc00b31;\n  this._fl = 0x68581511;\n  this._gl = 0x64f98fa7;\n  this._hl = 0xbefa4fa4;\n  return this;\n};\n\nSha384.prototype._hash = function () {\n  var H = Buffer.allocUnsafe(48);\n\n  function writeInt64BE(h, l, offset) {\n    H.writeInt32BE(h, offset);\n    H.writeInt32BE(l, offset + 4);\n  }\n\n  writeInt64BE(this._ah, this._al, 0);\n  writeInt64BE(this._bh, this._bl, 8);\n  writeInt64BE(this._ch, this._cl, 16);\n  writeInt64BE(this._dh, this._dl, 24);\n  writeInt64BE(this._eh, this._el, 32);\n  writeInt64BE(this._fh, this._fl, 40);\n  return H;\n};\n\nmodule.exports = Sha384;","'use strict';\n\nvar inherits = require('inherits');\n\nvar Buffer = require('safe-buffer').Buffer;\n\nvar Base = require('cipher-base');\n\nvar ZEROS = Buffer.alloc(128);\nvar blocksize = 64;\n\nfunction Hmac(alg, key) {\n  Base.call(this, 'digest');\n\n  if (typeof key === 'string') {\n    key = Buffer.from(key);\n  }\n\n  this._alg = alg;\n  this._key = key;\n\n  if (key.length > blocksize) {\n    key = alg(key);\n  } else if (key.length < blocksize) {\n    key = Buffer.concat([key, ZEROS], blocksize);\n  }\n\n  var ipad = this._ipad = Buffer.allocUnsafe(blocksize);\n  var opad = this._opad = Buffer.allocUnsafe(blocksize);\n\n  for (var i = 0; i < blocksize; i++) {\n    ipad[i] = key[i] ^ 0x36;\n    opad[i] = key[i] ^ 0x5C;\n  }\n\n  this._hash = [ipad];\n}\n\ninherits(Hmac, Base);\n\nHmac.prototype._update = function (data) {\n  this._hash.push(data);\n};\n\nHmac.prototype._final = function () {\n  var h = this._alg(Buffer.concat(this._hash));\n\n  return this._alg(Buffer.concat([this._opad, h]));\n};\n\nmodule.exports = Hmac;","module.exports = require('./browser/algorithms.json');","var checkParameters = require('./precondition');\n\nvar defaultEncoding = require('./default-encoding');\n\nvar sync = require('./sync');\n\nvar Buffer = require('safe-buffer').Buffer;\n\nvar ZERO_BUF;\nvar subtle = global.crypto && global.crypto.subtle;\nvar toBrowser = {\n  'sha': 'SHA-1',\n  'sha-1': 'SHA-1',\n  'sha1': 'SHA-1',\n  'sha256': 'SHA-256',\n  'sha-256': 'SHA-256',\n  'sha384': 'SHA-384',\n  'sha-384': 'SHA-384',\n  'sha-512': 'SHA-512',\n  'sha512': 'SHA-512'\n};\nvar checks = [];\n\nfunction checkNative(algo) {\n  if (global.process && !global.process.browser) {\n    return Promise.resolve(false);\n  }\n\n  if (!subtle || !subtle.importKey || !subtle.deriveBits) {\n    return Promise.resolve(false);\n  }\n\n  if (checks[algo] !== undefined) {\n    return checks[algo];\n  }\n\n  ZERO_BUF = ZERO_BUF || Buffer.alloc(8);\n  var prom = browserPbkdf2(ZERO_BUF, ZERO_BUF, 10, 128, algo).then(function () {\n    return true;\n  })[\"catch\"](function () {\n    return false;\n  });\n  checks[algo] = prom;\n  return prom;\n}\n\nfunction browserPbkdf2(password, salt, iterations, length, algo) {\n  return subtle.importKey('raw', password, {\n    name: 'PBKDF2'\n  }, false, ['deriveBits']).then(function (key) {\n    return subtle.deriveBits({\n      name: 'PBKDF2',\n      salt: salt,\n      iterations: iterations,\n      hash: {\n        name: algo\n      }\n    }, key, length << 3);\n  }).then(function (res) {\n    return Buffer.from(res);\n  });\n}\n\nfunction resolvePromise(promise, callback) {\n  promise.then(function (out) {\n    process.nextTick(function () {\n      callback(null, out);\n    });\n  }, function (e) {\n    process.nextTick(function () {\n      callback(e);\n    });\n  });\n}\n\nmodule.exports = function (password, salt, iterations, keylen, digest, callback) {\n  if (typeof digest === 'function') {\n    callback = digest;\n    digest = undefined;\n  }\n\n  digest = digest || 'sha1';\n  var algo = toBrowser[digest.toLowerCase()];\n\n  if (!algo || typeof global.Promise !== 'function') {\n    return process.nextTick(function () {\n      var out;\n\n      try {\n        out = sync(password, salt, iterations, keylen, digest);\n      } catch (e) {\n        return callback(e);\n      }\n\n      callback(null, out);\n    });\n  }\n\n  checkParameters(password, salt, iterations, keylen);\n  if (typeof callback !== 'function') throw new Error('No callback provided to pbkdf2');\n  if (!Buffer.isBuffer(password)) password = Buffer.from(password, defaultEncoding);\n  if (!Buffer.isBuffer(salt)) salt = Buffer.from(salt, defaultEncoding);\n  resolvePromise(checkNative(algo).then(function (resp) {\n    if (resp) return browserPbkdf2(password, salt, iterations, keylen, algo);\n    return sync(password, salt, iterations, keylen, digest);\n  }), callback);\n};","var DES = require('browserify-des');\n\nvar aes = require('browserify-aes/browser');\n\nvar aesModes = require('browserify-aes/modes');\n\nvar desModes = require('browserify-des/modes');\n\nvar ebtk = require('evp_bytestokey');\n\nfunction createCipher(suite, password) {\n  suite = suite.toLowerCase();\n  var keyLen, ivLen;\n\n  if (aesModes[suite]) {\n    keyLen = aesModes[suite].key;\n    ivLen = aesModes[suite].iv;\n  } else if (desModes[suite]) {\n    keyLen = desModes[suite].key * 8;\n    ivLen = desModes[suite].iv;\n  } else {\n    throw new TypeError('invalid suite type');\n  }\n\n  var keys = ebtk(password, false, keyLen, ivLen);\n  return createCipheriv(suite, keys.key, keys.iv);\n}\n\nfunction createDecipher(suite, password) {\n  suite = suite.toLowerCase();\n  var keyLen, ivLen;\n\n  if (aesModes[suite]) {\n    keyLen = aesModes[suite].key;\n    ivLen = aesModes[suite].iv;\n  } else if (desModes[suite]) {\n    keyLen = desModes[suite].key * 8;\n    ivLen = desModes[suite].iv;\n  } else {\n    throw new TypeError('invalid suite type');\n  }\n\n  var keys = ebtk(password, false, keyLen, ivLen);\n  return createDecipheriv(suite, keys.key, keys.iv);\n}\n\nfunction createCipheriv(suite, key, iv) {\n  suite = suite.toLowerCase();\n  if (aesModes[suite]) return aes.createCipheriv(suite, key, iv);\n  if (desModes[suite]) return new DES({\n    key: key,\n    iv: iv,\n    mode: suite\n  });\n  throw new TypeError('invalid suite type');\n}\n\nfunction createDecipheriv(suite, key, iv) {\n  suite = suite.toLowerCase();\n  if (aesModes[suite]) return aes.createDecipheriv(suite, key, iv);\n  if (desModes[suite]) return new DES({\n    key: key,\n    iv: iv,\n    mode: suite,\n    decrypt: true\n  });\n  throw new TypeError('invalid suite type');\n}\n\nfunction getCiphers() {\n  return Object.keys(desModes).concat(aes.getCiphers());\n}\n\nexports.createCipher = exports.Cipher = createCipher;\nexports.createCipheriv = exports.Cipheriv = createCipheriv;\nexports.createDecipher = exports.Decipher = createDecipher;\nexports.createDecipheriv = exports.Decipheriv = createDecipheriv;\nexports.listCiphers = exports.getCiphers = getCiphers;","var CipherBase = require('cipher-base');\n\nvar des = require('des.js');\n\nvar inherits = require('inherits');\n\nvar Buffer = require('safe-buffer').Buffer;\n\nvar modes = {\n  'des-ede3-cbc': des.CBC.instantiate(des.EDE),\n  'des-ede3': des.EDE,\n  'des-ede-cbc': des.CBC.instantiate(des.EDE),\n  'des-ede': des.EDE,\n  'des-cbc': des.CBC.instantiate(des.DES),\n  'des-ecb': des.DES\n};\nmodes.des = modes['des-cbc'];\nmodes.des3 = modes['des-ede3-cbc'];\nmodule.exports = DES;\ninherits(DES, CipherBase);\n\nfunction DES(opts) {\n  CipherBase.call(this);\n  var modeName = opts.mode.toLowerCase();\n  var mode = modes[modeName];\n  var type;\n\n  if (opts.decrypt) {\n    type = 'decrypt';\n  } else {\n    type = 'encrypt';\n  }\n\n  var key = opts.key;\n\n  if (!Buffer.isBuffer(key)) {\n    key = Buffer.from(key);\n  }\n\n  if (modeName === 'des-ede' || modeName === 'des-ede-cbc') {\n    key = Buffer.concat([key, key.slice(0, 8)]);\n  }\n\n  var iv = opts.iv;\n\n  if (!Buffer.isBuffer(iv)) {\n    iv = Buffer.from(iv);\n  }\n\n  this._des = mode.create({\n    key: key,\n    iv: iv,\n    type: type\n  });\n}\n\nDES.prototype._update = function (data) {\n  return Buffer.from(this._des.update(data));\n};\n\nDES.prototype._final = function () {\n  return Buffer.from(this._des[\"final\"]());\n};","'use strict';\n\nexports.readUInt32BE = function readUInt32BE(bytes, off) {\n  var res = bytes[0 + off] << 24 | bytes[1 + off] << 16 | bytes[2 + off] << 8 | bytes[3 + off];\n  return res >>> 0;\n};\n\nexports.writeUInt32BE = function writeUInt32BE(bytes, value, off) {\n  bytes[0 + off] = value >>> 24;\n  bytes[1 + off] = value >>> 16 & 0xff;\n  bytes[2 + off] = value >>> 8 & 0xff;\n  bytes[3 + off] = value & 0xff;\n};\n\nexports.ip = function ip(inL, inR, out, off) {\n  var outL = 0;\n  var outR = 0;\n\n  for (var i = 6; i >= 0; i -= 2) {\n    for (var j = 0; j <= 24; j += 8) {\n      outL <<= 1;\n      outL |= inR >>> j + i & 1;\n    }\n\n    for (var j = 0; j <= 24; j += 8) {\n      outL <<= 1;\n      outL |= inL >>> j + i & 1;\n    }\n  }\n\n  for (var i = 6; i >= 0; i -= 2) {\n    for (var j = 1; j <= 25; j += 8) {\n      outR <<= 1;\n      outR |= inR >>> j + i & 1;\n    }\n\n    for (var j = 1; j <= 25; j += 8) {\n      outR <<= 1;\n      outR |= inL >>> j + i & 1;\n    }\n  }\n\n  out[off + 0] = outL >>> 0;\n  out[off + 1] = outR >>> 0;\n};\n\nexports.rip = function rip(inL, inR, out, off) {\n  var outL = 0;\n  var outR = 0;\n\n  for (var i = 0; i < 4; i++) {\n    for (var j = 24; j >= 0; j -= 8) {\n      outL <<= 1;\n      outL |= inR >>> j + i & 1;\n      outL <<= 1;\n      outL |= inL >>> j + i & 1;\n    }\n  }\n\n  for (var i = 4; i < 8; i++) {\n    for (var j = 24; j >= 0; j -= 8) {\n      outR <<= 1;\n      outR |= inR >>> j + i & 1;\n      outR <<= 1;\n      outR |= inL >>> j + i & 1;\n    }\n  }\n\n  out[off + 0] = outL >>> 0;\n  out[off + 1] = outR >>> 0;\n};\n\nexports.pc1 = function pc1(inL, inR, out, off) {\n  var outL = 0;\n  var outR = 0; // 7, 15, 23, 31, 39, 47, 55, 63\n  // 6, 14, 22, 30, 39, 47, 55, 63\n  // 5, 13, 21, 29, 39, 47, 55, 63\n  // 4, 12, 20, 28\n\n  for (var i = 7; i >= 5; i--) {\n    for (var j = 0; j <= 24; j += 8) {\n      outL <<= 1;\n      outL |= inR >> j + i & 1;\n    }\n\n    for (var j = 0; j <= 24; j += 8) {\n      outL <<= 1;\n      outL |= inL >> j + i & 1;\n    }\n  }\n\n  for (var j = 0; j <= 24; j += 8) {\n    outL <<= 1;\n    outL |= inR >> j + i & 1;\n  } // 1, 9, 17, 25, 33, 41, 49, 57\n  // 2, 10, 18, 26, 34, 42, 50, 58\n  // 3, 11, 19, 27, 35, 43, 51, 59\n  // 36, 44, 52, 60\n\n\n  for (var i = 1; i <= 3; i++) {\n    for (var j = 0; j <= 24; j += 8) {\n      outR <<= 1;\n      outR |= inR >> j + i & 1;\n    }\n\n    for (var j = 0; j <= 24; j += 8) {\n      outR <<= 1;\n      outR |= inL >> j + i & 1;\n    }\n  }\n\n  for (var j = 0; j <= 24; j += 8) {\n    outR <<= 1;\n    outR |= inL >> j + i & 1;\n  }\n\n  out[off + 0] = outL >>> 0;\n  out[off + 1] = outR >>> 0;\n};\n\nexports.r28shl = function r28shl(num, shift) {\n  return num << shift & 0xfffffff | num >>> 28 - shift;\n};\n\nvar pc2table = [// inL => outL\n14, 11, 17, 4, 27, 23, 25, 0, 13, 22, 7, 18, 5, 9, 16, 24, 2, 20, 12, 21, 1, 8, 15, 26, // inR => outR\n15, 4, 25, 19, 9, 1, 26, 16, 5, 11, 23, 8, 12, 7, 17, 0, 22, 3, 10, 14, 6, 20, 27, 24];\n\nexports.pc2 = function pc2(inL, inR, out, off) {\n  var outL = 0;\n  var outR = 0;\n  var len = pc2table.length >>> 1;\n\n  for (var i = 0; i < len; i++) {\n    outL <<= 1;\n    outL |= inL >>> pc2table[i] & 0x1;\n  }\n\n  for (var i = len; i < pc2table.length; i++) {\n    outR <<= 1;\n    outR |= inR >>> pc2table[i] & 0x1;\n  }\n\n  out[off + 0] = outL >>> 0;\n  out[off + 1] = outR >>> 0;\n};\n\nexports.expand = function expand(r, out, off) {\n  var outL = 0;\n  var outR = 0;\n  outL = (r & 1) << 5 | r >>> 27;\n\n  for (var i = 23; i >= 15; i -= 4) {\n    outL <<= 6;\n    outL |= r >>> i & 0x3f;\n  }\n\n  for (var i = 11; i >= 3; i -= 4) {\n    outR |= r >>> i & 0x3f;\n    outR <<= 6;\n  }\n\n  outR |= (r & 0x1f) << 1 | r >>> 31;\n  out[off + 0] = outL >>> 0;\n  out[off + 1] = outR >>> 0;\n};\n\nvar sTable = [14, 0, 4, 15, 13, 7, 1, 4, 2, 14, 15, 2, 11, 13, 8, 1, 3, 10, 10, 6, 6, 12, 12, 11, 5, 9, 9, 5, 0, 3, 7, 8, 4, 15, 1, 12, 14, 8, 8, 2, 13, 4, 6, 9, 2, 1, 11, 7, 15, 5, 12, 11, 9, 3, 7, 14, 3, 10, 10, 0, 5, 6, 0, 13, 15, 3, 1, 13, 8, 4, 14, 7, 6, 15, 11, 2, 3, 8, 4, 14, 9, 12, 7, 0, 2, 1, 13, 10, 12, 6, 0, 9, 5, 11, 10, 5, 0, 13, 14, 8, 7, 10, 11, 1, 10, 3, 4, 15, 13, 4, 1, 2, 5, 11, 8, 6, 12, 7, 6, 12, 9, 0, 3, 5, 2, 14, 15, 9, 10, 13, 0, 7, 9, 0, 14, 9, 6, 3, 3, 4, 15, 6, 5, 10, 1, 2, 13, 8, 12, 5, 7, 14, 11, 12, 4, 11, 2, 15, 8, 1, 13, 1, 6, 10, 4, 13, 9, 0, 8, 6, 15, 9, 3, 8, 0, 7, 11, 4, 1, 15, 2, 14, 12, 3, 5, 11, 10, 5, 14, 2, 7, 12, 7, 13, 13, 8, 14, 11, 3, 5, 0, 6, 6, 15, 9, 0, 10, 3, 1, 4, 2, 7, 8, 2, 5, 12, 11, 1, 12, 10, 4, 14, 15, 9, 10, 3, 6, 15, 9, 0, 0, 6, 12, 10, 11, 1, 7, 13, 13, 8, 15, 9, 1, 4, 3, 5, 14, 11, 5, 12, 2, 7, 8, 2, 4, 14, 2, 14, 12, 11, 4, 2, 1, 12, 7, 4, 10, 7, 11, 13, 6, 1, 8, 5, 5, 0, 3, 15, 15, 10, 13, 3, 0, 9, 14, 8, 9, 6, 4, 11, 2, 8, 1, 12, 11, 7, 10, 1, 13, 14, 7, 2, 8, 13, 15, 6, 9, 15, 12, 0, 5, 9, 6, 10, 3, 4, 0, 5, 14, 3, 12, 10, 1, 15, 10, 4, 15, 2, 9, 7, 2, 12, 6, 9, 8, 5, 0, 6, 13, 1, 3, 13, 4, 14, 14, 0, 7, 11, 5, 3, 11, 8, 9, 4, 14, 3, 15, 2, 5, 12, 2, 9, 8, 5, 12, 15, 3, 10, 7, 11, 0, 14, 4, 1, 10, 7, 1, 6, 13, 0, 11, 8, 6, 13, 4, 13, 11, 0, 2, 11, 14, 7, 15, 4, 0, 9, 8, 1, 13, 10, 3, 14, 12, 3, 9, 5, 7, 12, 5, 2, 10, 15, 6, 8, 1, 6, 1, 6, 4, 11, 11, 13, 13, 8, 12, 1, 3, 4, 7, 10, 14, 7, 10, 9, 15, 5, 6, 0, 8, 15, 0, 14, 5, 2, 9, 3, 2, 12, 13, 1, 2, 15, 8, 13, 4, 8, 6, 10, 15, 3, 11, 7, 1, 4, 10, 12, 9, 5, 3, 6, 14, 11, 5, 0, 0, 14, 12, 9, 7, 2, 7, 2, 11, 1, 4, 14, 1, 7, 9, 4, 12, 10, 14, 8, 2, 13, 0, 15, 6, 12, 10, 9, 13, 0, 15, 3, 3, 5, 5, 6, 8, 11];\n\nexports.substitute = function substitute(inL, inR) {\n  var out = 0;\n\n  for (var i = 0; i < 4; i++) {\n    var b = inL >>> 18 - i * 6 & 0x3f;\n    var sb = sTable[i * 0x40 + b];\n    out <<= 4;\n    out |= sb;\n  }\n\n  for (var i = 0; i < 4; i++) {\n    var b = inR >>> 18 - i * 6 & 0x3f;\n    var sb = sTable[4 * 0x40 + i * 0x40 + b];\n    out <<= 4;\n    out |= sb;\n  }\n\n  return out >>> 0;\n};\n\nvar permuteTable = [16, 25, 12, 11, 3, 20, 4, 15, 31, 17, 9, 6, 27, 14, 1, 22, 30, 24, 8, 18, 0, 5, 29, 23, 13, 19, 2, 26, 10, 21, 28, 7];\n\nexports.permute = function permute(num) {\n  var out = 0;\n\n  for (var i = 0; i < permuteTable.length; i++) {\n    out <<= 1;\n    out |= num >>> permuteTable[i] & 0x1;\n  }\n\n  return out >>> 0;\n};\n\nexports.padSplit = function padSplit(num, size, group) {\n  var str = num.toString(2);\n\n  while (str.length < size) {\n    str = '0' + str;\n  }\n\n  var out = [];\n\n  for (var i = 0; i < size; i += group) {\n    out.push(str.slice(i, i + group));\n  }\n\n  return out.join(' ');\n};","'use strict';\n\nvar assert = require('minimalistic-assert');\n\nfunction Cipher(options) {\n  this.options = options;\n  this.type = this.options.type;\n  this.blockSize = 8;\n\n  this._init();\n\n  this.buffer = new Array(this.blockSize);\n  this.bufferOff = 0;\n}\n\nmodule.exports = Cipher;\n\nCipher.prototype._init = function _init() {// Might be overrided\n};\n\nCipher.prototype.update = function update(data) {\n  if (data.length === 0) return [];\n  if (this.type === 'decrypt') return this._updateDecrypt(data);else return this._updateEncrypt(data);\n};\n\nCipher.prototype._buffer = function _buffer(data, off) {\n  // Append data to buffer\n  var min = Math.min(this.buffer.length - this.bufferOff, data.length - off);\n\n  for (var i = 0; i < min; i++) {\n    this.buffer[this.bufferOff + i] = data[off + i];\n  }\n\n  this.bufferOff += min; // Shift next\n\n  return min;\n};\n\nCipher.prototype._flushBuffer = function _flushBuffer(out, off) {\n  this._update(this.buffer, 0, out, off);\n\n  this.bufferOff = 0;\n  return this.blockSize;\n};\n\nCipher.prototype._updateEncrypt = function _updateEncrypt(data) {\n  var inputOff = 0;\n  var outputOff = 0;\n  var count = (this.bufferOff + data.length) / this.blockSize | 0;\n  var out = new Array(count * this.blockSize);\n\n  if (this.bufferOff !== 0) {\n    inputOff += this._buffer(data, inputOff);\n    if (this.bufferOff === this.buffer.length) outputOff += this._flushBuffer(out, outputOff);\n  } // Write blocks\n\n\n  var max = data.length - (data.length - inputOff) % this.blockSize;\n\n  for (; inputOff < max; inputOff += this.blockSize) {\n    this._update(data, inputOff, out, outputOff);\n\n    outputOff += this.blockSize;\n  } // Queue rest\n\n\n  for (; inputOff < data.length; inputOff++, this.bufferOff++) {\n    this.buffer[this.bufferOff] = data[inputOff];\n  }\n\n  return out;\n};\n\nCipher.prototype._updateDecrypt = function _updateDecrypt(data) {\n  var inputOff = 0;\n  var outputOff = 0;\n  var count = Math.ceil((this.bufferOff + data.length) / this.blockSize) - 1;\n  var out = new Array(count * this.blockSize); // TODO(indutny): optimize it, this is far from optimal\n\n  for (; count > 0; count--) {\n    inputOff += this._buffer(data, inputOff);\n    outputOff += this._flushBuffer(out, outputOff);\n  } // Buffer rest of the input\n\n\n  inputOff += this._buffer(data, inputOff);\n  return out;\n};\n\nCipher.prototype[\"final\"] = function _final(buffer) {\n  var first;\n  if (buffer) first = this.update(buffer);\n  var last;\n  if (this.type === 'encrypt') last = this._finalEncrypt();else last = this._finalDecrypt();\n  if (first) return first.concat(last);else return last;\n};\n\nCipher.prototype._pad = function _pad(buffer, off) {\n  if (off === 0) return false;\n\n  while (off < buffer.length) {\n    buffer[off++] = 0;\n  }\n\n  return true;\n};\n\nCipher.prototype._finalEncrypt = function _finalEncrypt() {\n  if (!this._pad(this.buffer, this.bufferOff)) return [];\n  var out = new Array(this.blockSize);\n\n  this._update(this.buffer, 0, out, 0);\n\n  return out;\n};\n\nCipher.prototype._unpad = function _unpad(buffer) {\n  return buffer;\n};\n\nCipher.prototype._finalDecrypt = function _finalDecrypt() {\n  assert.equal(this.bufferOff, this.blockSize, 'Not enough data to decrypt');\n  var out = new Array(this.blockSize);\n\n  this._flushBuffer(out, 0);\n\n  return this._unpad(out);\n};","'use strict';\n\nvar assert = require('minimalistic-assert');\n\nvar inherits = require('inherits');\n\nvar des = require('../des');\n\nvar utils = des.utils;\nvar Cipher = des.Cipher;\n\nfunction DESState() {\n  this.tmp = new Array(2);\n  this.keys = null;\n}\n\nfunction DES(options) {\n  Cipher.call(this, options);\n  var state = new DESState();\n  this._desState = state;\n  this.deriveKeys(state, options.key);\n}\n\ninherits(DES, Cipher);\nmodule.exports = DES;\n\nDES.create = function create(options) {\n  return new DES(options);\n};\n\nvar shiftTable = [1, 1, 2, 2, 2, 2, 2, 2, 1, 2, 2, 2, 2, 2, 2, 1];\n\nDES.prototype.deriveKeys = function deriveKeys(state, key) {\n  state.keys = new Array(16 * 2);\n  assert.equal(key.length, this.blockSize, 'Invalid key length');\n  var kL = utils.readUInt32BE(key, 0);\n  var kR = utils.readUInt32BE(key, 4);\n  utils.pc1(kL, kR, state.tmp, 0);\n  kL = state.tmp[0];\n  kR = state.tmp[1];\n\n  for (var i = 0; i < state.keys.length; i += 2) {\n    var shift = shiftTable[i >>> 1];\n    kL = utils.r28shl(kL, shift);\n    kR = utils.r28shl(kR, shift);\n    utils.pc2(kL, kR, state.keys, i);\n  }\n};\n\nDES.prototype._update = function _update(inp, inOff, out, outOff) {\n  var state = this._desState;\n  var l = utils.readUInt32BE(inp, inOff);\n  var r = utils.readUInt32BE(inp, inOff + 4); // Initial Permutation\n\n  utils.ip(l, r, state.tmp, 0);\n  l = state.tmp[0];\n  r = state.tmp[1];\n  if (this.type === 'encrypt') this._encrypt(state, l, r, state.tmp, 0);else this._decrypt(state, l, r, state.tmp, 0);\n  l = state.tmp[0];\n  r = state.tmp[1];\n  utils.writeUInt32BE(out, l, outOff);\n  utils.writeUInt32BE(out, r, outOff + 4);\n};\n\nDES.prototype._pad = function _pad(buffer, off) {\n  var value = buffer.length - off;\n\n  for (var i = off; i < buffer.length; i++) {\n    buffer[i] = value;\n  }\n\n  return true;\n};\n\nDES.prototype._unpad = function _unpad(buffer) {\n  var pad = buffer[buffer.length - 1];\n\n  for (var i = buffer.length - pad; i < buffer.length; i++) {\n    assert.equal(buffer[i], pad);\n  }\n\n  return buffer.slice(0, buffer.length - pad);\n};\n\nDES.prototype._encrypt = function _encrypt(state, lStart, rStart, out, off) {\n  var l = lStart;\n  var r = rStart; // Apply f() x16 times\n\n  for (var i = 0; i < state.keys.length; i += 2) {\n    var keyL = state.keys[i];\n    var keyR = state.keys[i + 1]; // f(r, k)\n\n    utils.expand(r, state.tmp, 0);\n    keyL ^= state.tmp[0];\n    keyR ^= state.tmp[1];\n    var s = utils.substitute(keyL, keyR);\n    var f = utils.permute(s);\n    var t = r;\n    r = (l ^ f) >>> 0;\n    l = t;\n  } // Reverse Initial Permutation\n\n\n  utils.rip(r, l, out, off);\n};\n\nDES.prototype._decrypt = function _decrypt(state, lStart, rStart, out, off) {\n  var l = rStart;\n  var r = lStart; // Apply f() x16 times\n\n  for (var i = state.keys.length - 2; i >= 0; i -= 2) {\n    var keyL = state.keys[i];\n    var keyR = state.keys[i + 1]; // f(r, k)\n\n    utils.expand(l, state.tmp, 0);\n    keyL ^= state.tmp[0];\n    keyR ^= state.tmp[1];\n    var s = utils.substitute(keyL, keyR);\n    var f = utils.permute(s);\n    var t = l;\n    l = (r ^ f) >>> 0;\n    r = t;\n  } // Reverse Initial Permutation\n\n\n  utils.rip(l, r, out, off);\n};","'use strict';\n\nvar assert = require('minimalistic-assert');\n\nvar inherits = require('inherits');\n\nvar proto = {};\n\nfunction CBCState(iv) {\n  assert.equal(iv.length, 8, 'Invalid IV length');\n  this.iv = new Array(8);\n\n  for (var i = 0; i < this.iv.length; i++) {\n    this.iv[i] = iv[i];\n  }\n}\n\nfunction instantiate(Base) {\n  function CBC(options) {\n    Base.call(this, options);\n\n    this._cbcInit();\n  }\n\n  inherits(CBC, Base);\n  var keys = Object.keys(proto);\n\n  for (var i = 0; i < keys.length; i++) {\n    var key = keys[i];\n    CBC.prototype[key] = proto[key];\n  }\n\n  CBC.create = function create(options) {\n    return new CBC(options);\n  };\n\n  return CBC;\n}\n\nexports.instantiate = instantiate;\n\nproto._cbcInit = function _cbcInit() {\n  var state = new CBCState(this.options.iv);\n  this._cbcState = state;\n};\n\nproto._update = function _update(inp, inOff, out, outOff) {\n  var state = this._cbcState;\n  var superProto = this.constructor.super_.prototype;\n  var iv = state.iv;\n\n  if (this.type === 'encrypt') {\n    for (var i = 0; i < this.blockSize; i++) {\n      iv[i] ^= inp[inOff + i];\n    }\n\n    superProto._update.call(this, iv, 0, out, outOff);\n\n    for (var i = 0; i < this.blockSize; i++) {\n      iv[i] = out[outOff + i];\n    }\n  } else {\n    superProto._update.call(this, inp, inOff, out, outOff);\n\n    for (var i = 0; i < this.blockSize; i++) {\n      out[outOff + i] ^= iv[i];\n    }\n\n    for (var i = 0; i < this.blockSize; i++) {\n      iv[i] = inp[inOff + i];\n    }\n  }\n};","'use strict';\n\nvar assert = require('minimalistic-assert');\n\nvar inherits = require('inherits');\n\nvar des = require('../des');\n\nvar Cipher = des.Cipher;\nvar DES = des.DES;\n\nfunction EDEState(type, key) {\n  assert.equal(key.length, 24, 'Invalid key length');\n  var k1 = key.slice(0, 8);\n  var k2 = key.slice(8, 16);\n  var k3 = key.slice(16, 24);\n\n  if (type === 'encrypt') {\n    this.ciphers = [DES.create({\n      type: 'encrypt',\n      key: k1\n    }), DES.create({\n      type: 'decrypt',\n      key: k2\n    }), DES.create({\n      type: 'encrypt',\n      key: k3\n    })];\n  } else {\n    this.ciphers = [DES.create({\n      type: 'decrypt',\n      key: k3\n    }), DES.create({\n      type: 'encrypt',\n      key: k2\n    }), DES.create({\n      type: 'decrypt',\n      key: k1\n    })];\n  }\n}\n\nfunction EDE(options) {\n  Cipher.call(this, options);\n  var state = new EDEState(this.type, this.options.key);\n  this._edeState = state;\n}\n\ninherits(EDE, Cipher);\nmodule.exports = EDE;\n\nEDE.create = function create(options) {\n  return new EDE(options);\n};\n\nEDE.prototype._update = function _update(inp, inOff, out, outOff) {\n  var state = this._edeState;\n\n  state.ciphers[0]._update(inp, inOff, out, outOff);\n\n  state.ciphers[1]._update(out, outOff, out, outOff);\n\n  state.ciphers[2]._update(out, outOff, out, outOff);\n};\n\nEDE.prototype._pad = DES.prototype._pad;\nEDE.prototype._unpad = DES.prototype._unpad;","var MODES = require('./modes');\n\nvar AuthCipher = require('./authCipher');\n\nvar Buffer = require('safe-buffer').Buffer;\n\nvar StreamCipher = require('./streamCipher');\n\nvar Transform = require('cipher-base');\n\nvar aes = require('./aes');\n\nvar ebtk = require('evp_bytestokey');\n\nvar inherits = require('inherits');\n\nfunction Cipher(mode, key, iv) {\n  Transform.call(this);\n  this._cache = new Splitter();\n  this._cipher = new aes.AES(key);\n  this._prev = Buffer.from(iv);\n  this._mode = mode;\n  this._autopadding = true;\n}\n\ninherits(Cipher, Transform);\n\nCipher.prototype._update = function (data) {\n  this._cache.add(data);\n\n  var chunk;\n  var thing;\n  var out = [];\n\n  while (chunk = this._cache.get()) {\n    thing = this._mode.encrypt(this, chunk);\n    out.push(thing);\n  }\n\n  return Buffer.concat(out);\n};\n\nvar PADDING = Buffer.alloc(16, 0x10);\n\nCipher.prototype._final = function () {\n  var chunk = this._cache.flush();\n\n  if (this._autopadding) {\n    chunk = this._mode.encrypt(this, chunk);\n\n    this._cipher.scrub();\n\n    return chunk;\n  }\n\n  if (!chunk.equals(PADDING)) {\n    this._cipher.scrub();\n\n    throw new Error('data not multiple of block length');\n  }\n};\n\nCipher.prototype.setAutoPadding = function (setTo) {\n  this._autopadding = !!setTo;\n  return this;\n};\n\nfunction Splitter() {\n  this.cache = Buffer.allocUnsafe(0);\n}\n\nSplitter.prototype.add = function (data) {\n  this.cache = Buffer.concat([this.cache, data]);\n};\n\nSplitter.prototype.get = function () {\n  if (this.cache.length > 15) {\n    var out = this.cache.slice(0, 16);\n    this.cache = this.cache.slice(16);\n    return out;\n  }\n\n  return null;\n};\n\nSplitter.prototype.flush = function () {\n  var len = 16 - this.cache.length;\n  var padBuff = Buffer.allocUnsafe(len);\n  var i = -1;\n\n  while (++i < len) {\n    padBuff.writeUInt8(len, i);\n  }\n\n  return Buffer.concat([this.cache, padBuff]);\n};\n\nfunction createCipheriv(suite, password, iv) {\n  var config = MODES[suite.toLowerCase()];\n  if (!config) throw new TypeError('invalid suite type');\n  if (typeof password === 'string') password = Buffer.from(password);\n  if (password.length !== config.key / 8) throw new TypeError('invalid key length ' + password.length);\n  if (typeof iv === 'string') iv = Buffer.from(iv);\n  if (config.mode !== 'GCM' && iv.length !== config.iv) throw new TypeError('invalid iv length ' + iv.length);\n\n  if (config.type === 'stream') {\n    return new StreamCipher(config.module, password, iv);\n  } else if (config.type === 'auth') {\n    return new AuthCipher(config.module, password, iv);\n  }\n\n  return new Cipher(config.module, password, iv);\n}\n\nfunction createCipher(suite, password) {\n  var config = MODES[suite.toLowerCase()];\n  if (!config) throw new TypeError('invalid suite type');\n  var keys = ebtk(password, false, config.key, config.iv);\n  return createCipheriv(suite, keys.key, keys.iv);\n}\n\nexports.createCipheriv = createCipheriv;\nexports.createCipher = createCipher;","exports.encrypt = function (self, block) {\n  return self._cipher.encryptBlock(block);\n};\n\nexports.decrypt = function (self, block) {\n  return self._cipher.decryptBlock(block);\n};","var xor = require('buffer-xor');\n\nexports.encrypt = function (self, block) {\n  var data = xor(block, self._prev);\n  self._prev = self._cipher.encryptBlock(data);\n  return self._prev;\n};\n\nexports.decrypt = function (self, block) {\n  var pad = self._prev;\n  self._prev = block;\n\n  var out = self._cipher.decryptBlock(block);\n\n  return xor(out, pad);\n};","var Buffer = require('safe-buffer').Buffer;\n\nvar xor = require('buffer-xor');\n\nfunction encryptStart(self, data, decrypt) {\n  var len = data.length;\n  var out = xor(data, self._cache);\n  self._cache = self._cache.slice(len);\n  self._prev = Buffer.concat([self._prev, decrypt ? data : out]);\n  return out;\n}\n\nexports.encrypt = function (self, data, decrypt) {\n  var out = Buffer.allocUnsafe(0);\n  var len;\n\n  while (data.length) {\n    if (self._cache.length === 0) {\n      self._cache = self._cipher.encryptBlock(self._prev);\n      self._prev = Buffer.allocUnsafe(0);\n    }\n\n    if (self._cache.length <= data.length) {\n      len = self._cache.length;\n      out = Buffer.concat([out, encryptStart(self, data.slice(0, len), decrypt)]);\n      data = data.slice(len);\n    } else {\n      out = Buffer.concat([out, encryptStart(self, data, decrypt)]);\n      break;\n    }\n  }\n\n  return out;\n};","var Buffer = require('safe-buffer').Buffer;\n\nfunction encryptByte(self, byteParam, decrypt) {\n  var pad = self._cipher.encryptBlock(self._prev);\n\n  var out = pad[0] ^ byteParam;\n  self._prev = Buffer.concat([self._prev.slice(1), Buffer.from([decrypt ? byteParam : out])]);\n  return out;\n}\n\nexports.encrypt = function (self, chunk, decrypt) {\n  var len = chunk.length;\n  var out = Buffer.allocUnsafe(len);\n  var i = -1;\n\n  while (++i < len) {\n    out[i] = encryptByte(self, chunk[i], decrypt);\n  }\n\n  return out;\n};","var Buffer = require('safe-buffer').Buffer;\n\nfunction encryptByte(self, byteParam, decrypt) {\n  var pad;\n  var i = -1;\n  var len = 8;\n  var out = 0;\n  var bit, value;\n\n  while (++i < len) {\n    pad = self._cipher.encryptBlock(self._prev);\n    bit = byteParam & 1 << 7 - i ? 0x80 : 0;\n    value = pad[0] ^ bit;\n    out += (value & 0x80) >> i % 8;\n    self._prev = shiftIn(self._prev, decrypt ? bit : value);\n  }\n\n  return out;\n}\n\nfunction shiftIn(buffer, value) {\n  var len = buffer.length;\n  var i = -1;\n  var out = Buffer.allocUnsafe(buffer.length);\n  buffer = Buffer.concat([buffer, Buffer.from([value])]);\n\n  while (++i < len) {\n    out[i] = buffer[i] << 1 | buffer[i + 1] >> 7;\n  }\n\n  return out;\n}\n\nexports.encrypt = function (self, chunk, decrypt) {\n  var len = chunk.length;\n  var out = Buffer.allocUnsafe(len);\n  var i = -1;\n\n  while (++i < len) {\n    out[i] = encryptByte(self, chunk[i], decrypt);\n  }\n\n  return out;\n};","var xor = require('buffer-xor');\n\nfunction getBlock(self) {\n  self._prev = self._cipher.encryptBlock(self._prev);\n  return self._prev;\n}\n\nexports.encrypt = function (self, chunk) {\n  while (self._cache.length < chunk.length) {\n    self._cache = Buffer.concat([self._cache, getBlock(self)]);\n  }\n\n  var pad = self._cache.slice(0, chunk.length);\n\n  self._cache = self._cache.slice(chunk.length);\n  return xor(chunk, pad);\n};","var Buffer = require('safe-buffer').Buffer;\n\nvar ZEROES = Buffer.alloc(16, 0);\n\nfunction toArray(buf) {\n  return [buf.readUInt32BE(0), buf.readUInt32BE(4), buf.readUInt32BE(8), buf.readUInt32BE(12)];\n}\n\nfunction fromArray(out) {\n  var buf = Buffer.allocUnsafe(16);\n  buf.writeUInt32BE(out[0] >>> 0, 0);\n  buf.writeUInt32BE(out[1] >>> 0, 4);\n  buf.writeUInt32BE(out[2] >>> 0, 8);\n  buf.writeUInt32BE(out[3] >>> 0, 12);\n  return buf;\n}\n\nfunction GHASH(key) {\n  this.h = key;\n  this.state = Buffer.alloc(16, 0);\n  this.cache = Buffer.allocUnsafe(0);\n} // from http://bitwiseshiftleft.github.io/sjcl/doc/symbols/src/core_gcm.js.html\n// by Juho Vähä-Herttua\n\n\nGHASH.prototype.ghash = function (block) {\n  var i = -1;\n\n  while (++i < block.length) {\n    this.state[i] ^= block[i];\n  }\n\n  this._multiply();\n};\n\nGHASH.prototype._multiply = function () {\n  var Vi = toArray(this.h);\n  var Zi = [0, 0, 0, 0];\n  var j, xi, lsbVi;\n  var i = -1;\n\n  while (++i < 128) {\n    xi = (this.state[~~(i / 8)] & 1 << 7 - i % 8) !== 0;\n\n    if (xi) {\n      // Z_i+1 = Z_i ^ V_i\n      Zi[0] ^= Vi[0];\n      Zi[1] ^= Vi[1];\n      Zi[2] ^= Vi[2];\n      Zi[3] ^= Vi[3];\n    } // Store the value of LSB(V_i)\n\n\n    lsbVi = (Vi[3] & 1) !== 0; // V_i+1 = V_i >> 1\n\n    for (j = 3; j > 0; j--) {\n      Vi[j] = Vi[j] >>> 1 | (Vi[j - 1] & 1) << 31;\n    }\n\n    Vi[0] = Vi[0] >>> 1; // If LSB(V_i) is 1, V_i+1 = (V_i >> 1) ^ R\n\n    if (lsbVi) {\n      Vi[0] = Vi[0] ^ 0xe1 << 24;\n    }\n  }\n\n  this.state = fromArray(Zi);\n};\n\nGHASH.prototype.update = function (buf) {\n  this.cache = Buffer.concat([this.cache, buf]);\n  var chunk;\n\n  while (this.cache.length >= 16) {\n    chunk = this.cache.slice(0, 16);\n    this.cache = this.cache.slice(16);\n    this.ghash(chunk);\n  }\n};\n\nGHASH.prototype[\"final\"] = function (abl, bl) {\n  if (this.cache.length) {\n    this.ghash(Buffer.concat([this.cache, ZEROES], 16));\n  }\n\n  this.ghash(fromArray([0, abl, 0, bl]));\n  return this.state;\n};\n\nmodule.exports = GHASH;","var AuthCipher = require('./authCipher');\n\nvar Buffer = require('safe-buffer').Buffer;\n\nvar MODES = require('./modes');\n\nvar StreamCipher = require('./streamCipher');\n\nvar Transform = require('cipher-base');\n\nvar aes = require('./aes');\n\nvar ebtk = require('evp_bytestokey');\n\nvar inherits = require('inherits');\n\nfunction Decipher(mode, key, iv) {\n  Transform.call(this);\n  this._cache = new Splitter();\n  this._last = void 0;\n  this._cipher = new aes.AES(key);\n  this._prev = Buffer.from(iv);\n  this._mode = mode;\n  this._autopadding = true;\n}\n\ninherits(Decipher, Transform);\n\nDecipher.prototype._update = function (data) {\n  this._cache.add(data);\n\n  var chunk;\n  var thing;\n  var out = [];\n\n  while (chunk = this._cache.get(this._autopadding)) {\n    thing = this._mode.decrypt(this, chunk);\n    out.push(thing);\n  }\n\n  return Buffer.concat(out);\n};\n\nDecipher.prototype._final = function () {\n  var chunk = this._cache.flush();\n\n  if (this._autopadding) {\n    return unpad(this._mode.decrypt(this, chunk));\n  } else if (chunk) {\n    throw new Error('data not multiple of block length');\n  }\n};\n\nDecipher.prototype.setAutoPadding = function (setTo) {\n  this._autopadding = !!setTo;\n  return this;\n};\n\nfunction Splitter() {\n  this.cache = Buffer.allocUnsafe(0);\n}\n\nSplitter.prototype.add = function (data) {\n  this.cache = Buffer.concat([this.cache, data]);\n};\n\nSplitter.prototype.get = function (autoPadding) {\n  var out;\n\n  if (autoPadding) {\n    if (this.cache.length > 16) {\n      out = this.cache.slice(0, 16);\n      this.cache = this.cache.slice(16);\n      return out;\n    }\n  } else {\n    if (this.cache.length >= 16) {\n      out = this.cache.slice(0, 16);\n      this.cache = this.cache.slice(16);\n      return out;\n    }\n  }\n\n  return null;\n};\n\nSplitter.prototype.flush = function () {\n  if (this.cache.length) return this.cache;\n};\n\nfunction unpad(last) {\n  var padded = last[15];\n\n  if (padded < 1 || padded > 16) {\n    throw new Error('unable to decrypt data');\n  }\n\n  var i = -1;\n\n  while (++i < padded) {\n    if (last[i + (16 - padded)] !== padded) {\n      throw new Error('unable to decrypt data');\n    }\n  }\n\n  if (padded === 16) return;\n  return last.slice(0, 16 - padded);\n}\n\nfunction createDecipheriv(suite, password, iv) {\n  var config = MODES[suite.toLowerCase()];\n  if (!config) throw new TypeError('invalid suite type');\n  if (typeof iv === 'string') iv = Buffer.from(iv);\n  if (config.mode !== 'GCM' && iv.length !== config.iv) throw new TypeError('invalid iv length ' + iv.length);\n  if (typeof password === 'string') password = Buffer.from(password);\n  if (password.length !== config.key / 8) throw new TypeError('invalid key length ' + password.length);\n\n  if (config.type === 'stream') {\n    return new StreamCipher(config.module, password, iv, true);\n  } else if (config.type === 'auth') {\n    return new AuthCipher(config.module, password, iv, true);\n  }\n\n  return new Decipher(config.module, password, iv);\n}\n\nfunction createDecipher(suite, password) {\n  var config = MODES[suite.toLowerCase()];\n  if (!config) throw new TypeError('invalid suite type');\n  var keys = ebtk(password, false, config.key, config.iv);\n  return createDecipheriv(suite, keys.key, keys.iv);\n}\n\nexports.createDecipher = createDecipher;\nexports.createDecipheriv = createDecipheriv;","exports['des-ecb'] = {\n  key: 8,\n  iv: 0\n};\nexports['des-cbc'] = exports.des = {\n  key: 8,\n  iv: 8\n};\nexports['des-ede3-cbc'] = exports.des3 = {\n  key: 24,\n  iv: 8\n};\nexports['des-ede3'] = {\n  key: 24,\n  iv: 0\n};\nexports['des-ede-cbc'] = {\n  key: 16,\n  iv: 8\n};\nexports['des-ede'] = {\n  key: 16,\n  iv: 0\n};","var generatePrime = require('./lib/generatePrime');\n\nvar primes = require('./lib/primes.json');\n\nvar DH = require('./lib/dh');\n\nfunction getDiffieHellman(mod) {\n  var prime = new Buffer(primes[mod].prime, 'hex');\n  var gen = new Buffer(primes[mod].gen, 'hex');\n  return new DH(prime, gen);\n}\n\nvar ENCODINGS = {\n  'binary': true,\n  'hex': true,\n  'base64': true\n};\n\nfunction createDiffieHellman(prime, enc, generator, genc) {\n  if (Buffer.isBuffer(enc) || ENCODINGS[enc] === undefined) {\n    return createDiffieHellman(prime, 'binary', enc, generator);\n  }\n\n  enc = enc || 'binary';\n  genc = genc || 'binary';\n  generator = generator || new Buffer([2]);\n\n  if (!Buffer.isBuffer(generator)) {\n    generator = new Buffer(generator, genc);\n  }\n\n  if (typeof prime === 'number') {\n    return new DH(generatePrime(prime, generator), generator, true);\n  }\n\n  if (!Buffer.isBuffer(prime)) {\n    prime = new Buffer(prime, enc);\n  }\n\n  return new DH(prime, generator, true);\n}\n\nexports.DiffieHellmanGroup = exports.createDiffieHellmanGroup = exports.getDiffieHellman = getDiffieHellman;\nexports.createDiffieHellman = exports.DiffieHellman = createDiffieHellman;","var BN = require('bn.js');\n\nvar MillerRabin = require('miller-rabin');\n\nvar millerRabin = new MillerRabin();\nvar TWENTYFOUR = new BN(24);\nvar ELEVEN = new BN(11);\nvar TEN = new BN(10);\nvar THREE = new BN(3);\nvar SEVEN = new BN(7);\n\nvar primes = require('./generatePrime');\n\nvar randomBytes = require('randombytes');\n\nmodule.exports = DH;\n\nfunction setPublicKey(pub, enc) {\n  enc = enc || 'utf8';\n\n  if (!Buffer.isBuffer(pub)) {\n    pub = new Buffer(pub, enc);\n  }\n\n  this._pub = new BN(pub);\n  return this;\n}\n\nfunction setPrivateKey(priv, enc) {\n  enc = enc || 'utf8';\n\n  if (!Buffer.isBuffer(priv)) {\n    priv = new Buffer(priv, enc);\n  }\n\n  this._priv = new BN(priv);\n  return this;\n}\n\nvar primeCache = {};\n\nfunction checkPrime(prime, generator) {\n  var gen = generator.toString('hex');\n  var hex = [gen, prime.toString(16)].join('_');\n\n  if (hex in primeCache) {\n    return primeCache[hex];\n  }\n\n  var error = 0;\n\n  if (prime.isEven() || !primes.simpleSieve || !primes.fermatTest(prime) || !millerRabin.test(prime)) {\n    //not a prime so +1\n    error += 1;\n\n    if (gen === '02' || gen === '05') {\n      // we'd be able to check the generator\n      // it would fail so +8\n      error += 8;\n    } else {\n      //we wouldn't be able to test the generator\n      // so +4\n      error += 4;\n    }\n\n    primeCache[hex] = error;\n    return error;\n  }\n\n  if (!millerRabin.test(prime.shrn(1))) {\n    //not a safe prime\n    error += 2;\n  }\n\n  var rem;\n\n  switch (gen) {\n    case '02':\n      if (prime.mod(TWENTYFOUR).cmp(ELEVEN)) {\n        // unsuidable generator\n        error += 8;\n      }\n\n      break;\n\n    case '05':\n      rem = prime.mod(TEN);\n\n      if (rem.cmp(THREE) && rem.cmp(SEVEN)) {\n        // prime mod 10 needs to equal 3 or 7\n        error += 8;\n      }\n\n      break;\n\n    default:\n      error += 4;\n  }\n\n  primeCache[hex] = error;\n  return error;\n}\n\nfunction DH(prime, generator, malleable) {\n  this.setGenerator(generator);\n  this.__prime = new BN(prime);\n  this._prime = BN.mont(this.__prime);\n  this._primeLen = prime.length;\n  this._pub = undefined;\n  this._priv = undefined;\n  this._primeCode = undefined;\n\n  if (malleable) {\n    this.setPublicKey = setPublicKey;\n    this.setPrivateKey = setPrivateKey;\n  } else {\n    this._primeCode = 8;\n  }\n}\n\nObject.defineProperty(DH.prototype, 'verifyError', {\n  enumerable: true,\n  get: function get() {\n    if (typeof this._primeCode !== 'number') {\n      this._primeCode = checkPrime(this.__prime, this.__gen);\n    }\n\n    return this._primeCode;\n  }\n});\n\nDH.prototype.generateKeys = function () {\n  if (!this._priv) {\n    this._priv = new BN(randomBytes(this._primeLen));\n  }\n\n  this._pub = this._gen.toRed(this._prime).redPow(this._priv).fromRed();\n  return this.getPublicKey();\n};\n\nDH.prototype.computeSecret = function (other) {\n  other = new BN(other);\n  other = other.toRed(this._prime);\n  var secret = other.redPow(this._priv).fromRed();\n  var out = new Buffer(secret.toArray());\n  var prime = this.getPrime();\n\n  if (out.length < prime.length) {\n    var front = new Buffer(prime.length - out.length);\n    front.fill(0);\n    out = Buffer.concat([front, out]);\n  }\n\n  return out;\n};\n\nDH.prototype.getPublicKey = function getPublicKey(enc) {\n  return formatReturnValue(this._pub, enc);\n};\n\nDH.prototype.getPrivateKey = function getPrivateKey(enc) {\n  return formatReturnValue(this._priv, enc);\n};\n\nDH.prototype.getPrime = function (enc) {\n  return formatReturnValue(this.__prime, enc);\n};\n\nDH.prototype.getGenerator = function (enc) {\n  return formatReturnValue(this._gen, enc);\n};\n\nDH.prototype.setGenerator = function (gen, enc) {\n  enc = enc || 'utf8';\n\n  if (!Buffer.isBuffer(gen)) {\n    gen = new Buffer(gen, enc);\n  }\n\n  this.__gen = gen;\n  this._gen = new BN(gen);\n  return this;\n};\n\nfunction formatReturnValue(bn, enc) {\n  var buf = new Buffer(bn.toArray());\n\n  if (!enc) {\n    return buf;\n  } else {\n    return buf.toString(enc);\n  }\n}","var createHash = require('create-hash');\n\nvar stream = require('stream');\n\nvar inherits = require('inherits');\n\nvar sign = require('./sign');\n\nvar verify = require('./verify');\n\nvar algorithms = require('./algorithms.json');\n\nObject.keys(algorithms).forEach(function (key) {\n  algorithms[key].id = new Buffer(algorithms[key].id, 'hex');\n  algorithms[key.toLowerCase()] = algorithms[key];\n});\n\nfunction Sign(algorithm) {\n  stream.Writable.call(this);\n  var data = algorithms[algorithm];\n  if (!data) throw new Error('Unknown message digest');\n  this._hashType = data.hash;\n  this._hash = createHash(data.hash);\n  this._tag = data.id;\n  this._signType = data.sign;\n}\n\ninherits(Sign, stream.Writable);\n\nSign.prototype._write = function _write(data, _, done) {\n  this._hash.update(data);\n\n  done();\n};\n\nSign.prototype.update = function update(data, enc) {\n  if (typeof data === 'string') data = new Buffer(data, enc);\n\n  this._hash.update(data);\n\n  return this;\n};\n\nSign.prototype.sign = function signMethod(key, enc) {\n  this.end();\n\n  var hash = this._hash.digest();\n\n  var sig = sign(hash, key, this._hashType, this._signType, this._tag);\n  return enc ? sig.toString(enc) : sig;\n};\n\nfunction Verify(algorithm) {\n  stream.Writable.call(this);\n  var data = algorithms[algorithm];\n  if (!data) throw new Error('Unknown message digest');\n  this._hash = createHash(data.hash);\n  this._tag = data.id;\n  this._signType = data.sign;\n}\n\ninherits(Verify, stream.Writable);\n\nVerify.prototype._write = function _write(data, _, done) {\n  this._hash.update(data);\n\n  done();\n};\n\nVerify.prototype.update = function update(data, enc) {\n  if (typeof data === 'string') data = new Buffer(data, enc);\n\n  this._hash.update(data);\n\n  return this;\n};\n\nVerify.prototype.verify = function verifyMethod(key, sig, enc) {\n  if (typeof sig === 'string') sig = new Buffer(sig, enc);\n  this.end();\n\n  var hash = this._hash.digest();\n\n  return verify(sig, hash, key, this._signType, this._tag);\n};\n\nfunction createSign(algorithm) {\n  return new Sign(algorithm);\n}\n\nfunction createVerify(algorithm) {\n  return new Verify(algorithm);\n}\n\nmodule.exports = {\n  Sign: createSign,\n  Verify: createVerify,\n  createSign: createSign,\n  createVerify: createVerify\n};","// much of this based on https://github.com/indutny/self-signed/blob/gh-pages/lib/rsa.js\nvar createHmac = require('create-hmac');\n\nvar crt = require('browserify-rsa');\n\nvar EC = require('elliptic').ec;\n\nvar BN = require('bn.js');\n\nvar parseKeys = require('parse-asn1');\n\nvar curves = require('./curves.json');\n\nfunction sign(hash, key, hashType, signType, tag) {\n  var priv = parseKeys(key);\n\n  if (priv.curve) {\n    // rsa keys can be interpreted as ecdsa ones in openssl\n    if (signType !== 'ecdsa' && signType !== 'ecdsa/rsa') throw new Error('wrong private key type');\n    return ecSign(hash, priv);\n  } else if (priv.type === 'dsa') {\n    if (signType !== 'dsa') throw new Error('wrong private key type');\n    return dsaSign(hash, priv, hashType);\n  } else {\n    if (signType !== 'rsa' && signType !== 'ecdsa/rsa') throw new Error('wrong private key type');\n  }\n\n  hash = Buffer.concat([tag, hash]);\n  var len = priv.modulus.byteLength();\n  var pad = [0, 1];\n\n  while (hash.length + pad.length + 1 < len) {\n    pad.push(0xff);\n  }\n\n  pad.push(0x00);\n  var i = -1;\n\n  while (++i < hash.length) {\n    pad.push(hash[i]);\n  }\n\n  var out = crt(pad, priv);\n  return out;\n}\n\nfunction ecSign(hash, priv) {\n  var curveId = curves[priv.curve.join('.')];\n  if (!curveId) throw new Error('unknown curve ' + priv.curve.join('.'));\n  var curve = new EC(curveId);\n  var key = curve.keyFromPrivate(priv.privateKey);\n  var out = key.sign(hash);\n  return new Buffer(out.toDER());\n}\n\nfunction dsaSign(hash, priv, algo) {\n  var x = priv.params.priv_key;\n  var p = priv.params.p;\n  var q = priv.params.q;\n  var g = priv.params.g;\n  var r = new BN(0);\n  var k;\n  var H = bits2int(hash, q).mod(q);\n  var s = false;\n  var kv = getKey(x, q, hash, algo);\n\n  while (s === false) {\n    k = makeKey(q, kv, algo);\n    r = makeR(g, k, p, q);\n    s = k.invm(q).imul(H.add(x.mul(r))).mod(q);\n\n    if (s.cmpn(0) === 0) {\n      s = false;\n      r = new BN(0);\n    }\n  }\n\n  return toDER(r, s);\n}\n\nfunction toDER(r, s) {\n  r = r.toArray();\n  s = s.toArray(); // Pad values\n\n  if (r[0] & 0x80) r = [0].concat(r);\n  if (s[0] & 0x80) s = [0].concat(s);\n  var total = r.length + s.length + 4;\n  var res = [0x30, total, 0x02, r.length];\n  res = res.concat(r, [0x02, s.length], s);\n  return new Buffer(res);\n}\n\nfunction getKey(x, q, hash, algo) {\n  x = new Buffer(x.toArray());\n\n  if (x.length < q.byteLength()) {\n    var zeros = new Buffer(q.byteLength() - x.length);\n    zeros.fill(0);\n    x = Buffer.concat([zeros, x]);\n  }\n\n  var hlen = hash.length;\n  var hbits = bits2octets(hash, q);\n  var v = new Buffer(hlen);\n  v.fill(1);\n  var k = new Buffer(hlen);\n  k.fill(0);\n  k = createHmac(algo, k).update(v).update(new Buffer([0])).update(x).update(hbits).digest();\n  v = createHmac(algo, k).update(v).digest();\n  k = createHmac(algo, k).update(v).update(new Buffer([1])).update(x).update(hbits).digest();\n  v = createHmac(algo, k).update(v).digest();\n  return {\n    k: k,\n    v: v\n  };\n}\n\nfunction bits2int(obits, q) {\n  var bits = new BN(obits);\n  var shift = (obits.length << 3) - q.bitLength();\n  if (shift > 0) bits.ishrn(shift);\n  return bits;\n}\n\nfunction bits2octets(bits, q) {\n  bits = bits2int(bits, q);\n  bits = bits.mod(q);\n  var out = new Buffer(bits.toArray());\n\n  if (out.length < q.byteLength()) {\n    var zeros = new Buffer(q.byteLength() - out.length);\n    zeros.fill(0);\n    out = Buffer.concat([zeros, out]);\n  }\n\n  return out;\n}\n\nfunction makeKey(q, kv, algo) {\n  var t;\n  var k;\n\n  do {\n    t = new Buffer(0);\n\n    while (t.length * 8 < q.bitLength()) {\n      kv.v = createHmac(algo, kv.k).update(kv.v).digest();\n      t = Buffer.concat([t, kv.v]);\n    }\n\n    k = bits2int(t, q);\n    kv.k = createHmac(algo, kv.k).update(kv.v).update(new Buffer([0])).digest();\n    kv.v = createHmac(algo, kv.k).update(kv.v).digest();\n  } while (k.cmp(q) !== -1);\n\n  return k;\n}\n\nfunction makeR(g, k, p, q) {\n  return g.toRed(BN.mont(p)).redPow(k).fromRed().mod(q);\n}\n\nmodule.exports = sign;\nmodule.exports.getKey = getKey;\nmodule.exports.makeKey = makeKey;","'use strict';\n\nvar utils = require('../utils');\n\nvar BN = require('bn.js');\n\nvar inherits = require('inherits');\n\nvar Base = require('./base');\n\nvar assert = utils.assert;\n\nfunction ShortCurve(conf) {\n  Base.call(this, 'short', conf);\n  this.a = new BN(conf.a, 16).toRed(this.red);\n  this.b = new BN(conf.b, 16).toRed(this.red);\n  this.tinv = this.two.redInvm();\n  this.zeroA = this.a.fromRed().cmpn(0) === 0;\n  this.threeA = this.a.fromRed().sub(this.p).cmpn(-3) === 0; // If the curve is endomorphic, precalculate beta and lambda\n\n  this.endo = this._getEndomorphism(conf);\n  this._endoWnafT1 = new Array(4);\n  this._endoWnafT2 = new Array(4);\n}\n\ninherits(ShortCurve, Base);\nmodule.exports = ShortCurve;\n\nShortCurve.prototype._getEndomorphism = function _getEndomorphism(conf) {\n  // No efficient endomorphism\n  if (!this.zeroA || !this.g || !this.n || this.p.modn(3) !== 1) return; // Compute beta and lambda, that lambda * P = (beta * Px; Py)\n\n  var beta;\n  var lambda;\n\n  if (conf.beta) {\n    beta = new BN(conf.beta, 16).toRed(this.red);\n  } else {\n    var betas = this._getEndoRoots(this.p); // Choose the smallest beta\n\n\n    beta = betas[0].cmp(betas[1]) < 0 ? betas[0] : betas[1];\n    beta = beta.toRed(this.red);\n  }\n\n  if (conf.lambda) {\n    lambda = new BN(conf.lambda, 16);\n  } else {\n    // Choose the lambda that is matching selected beta\n    var lambdas = this._getEndoRoots(this.n);\n\n    if (this.g.mul(lambdas[0]).x.cmp(this.g.x.redMul(beta)) === 0) {\n      lambda = lambdas[0];\n    } else {\n      lambda = lambdas[1];\n      assert(this.g.mul(lambda).x.cmp(this.g.x.redMul(beta)) === 0);\n    }\n  } // Get basis vectors, used for balanced length-two representation\n\n\n  var basis;\n\n  if (conf.basis) {\n    basis = conf.basis.map(function (vec) {\n      return {\n        a: new BN(vec.a, 16),\n        b: new BN(vec.b, 16)\n      };\n    });\n  } else {\n    basis = this._getEndoBasis(lambda);\n  }\n\n  return {\n    beta: beta,\n    lambda: lambda,\n    basis: basis\n  };\n};\n\nShortCurve.prototype._getEndoRoots = function _getEndoRoots(num) {\n  // Find roots of for x^2 + x + 1 in F\n  // Root = (-1 +- Sqrt(-3)) / 2\n  //\n  var red = num === this.p ? this.red : BN.mont(num);\n  var tinv = new BN(2).toRed(red).redInvm();\n  var ntinv = tinv.redNeg();\n  var s = new BN(3).toRed(red).redNeg().redSqrt().redMul(tinv);\n  var l1 = ntinv.redAdd(s).fromRed();\n  var l2 = ntinv.redSub(s).fromRed();\n  return [l1, l2];\n};\n\nShortCurve.prototype._getEndoBasis = function _getEndoBasis(lambda) {\n  // aprxSqrt >= sqrt(this.n)\n  var aprxSqrt = this.n.ushrn(Math.floor(this.n.bitLength() / 2)); // 3.74\n  // Run EGCD, until r(L + 1) < aprxSqrt\n\n  var u = lambda;\n  var v = this.n.clone();\n  var x1 = new BN(1);\n  var y1 = new BN(0);\n  var x2 = new BN(0);\n  var y2 = new BN(1); // NOTE: all vectors are roots of: a + b * lambda = 0 (mod n)\n\n  var a0;\n  var b0; // First vector\n\n  var a1;\n  var b1; // Second vector\n\n  var a2;\n  var b2;\n  var prevR;\n  var i = 0;\n  var r;\n  var x;\n\n  while (u.cmpn(0) !== 0) {\n    var q = v.div(u);\n    r = v.sub(q.mul(u));\n    x = x2.sub(q.mul(x1));\n    var y = y2.sub(q.mul(y1));\n\n    if (!a1 && r.cmp(aprxSqrt) < 0) {\n      a0 = prevR.neg();\n      b0 = x1;\n      a1 = r.neg();\n      b1 = x;\n    } else if (a1 && ++i === 2) {\n      break;\n    }\n\n    prevR = r;\n    v = u;\n    u = r;\n    x2 = x1;\n    x1 = x;\n    y2 = y1;\n    y1 = y;\n  }\n\n  a2 = r.neg();\n  b2 = x;\n  var len1 = a1.sqr().add(b1.sqr());\n  var len2 = a2.sqr().add(b2.sqr());\n\n  if (len2.cmp(len1) >= 0) {\n    a2 = a0;\n    b2 = b0;\n  } // Normalize signs\n\n\n  if (a1.negative) {\n    a1 = a1.neg();\n    b1 = b1.neg();\n  }\n\n  if (a2.negative) {\n    a2 = a2.neg();\n    b2 = b2.neg();\n  }\n\n  return [{\n    a: a1,\n    b: b1\n  }, {\n    a: a2,\n    b: b2\n  }];\n};\n\nShortCurve.prototype._endoSplit = function _endoSplit(k) {\n  var basis = this.endo.basis;\n  var v1 = basis[0];\n  var v2 = basis[1];\n  var c1 = v2.b.mul(k).divRound(this.n);\n  var c2 = v1.b.neg().mul(k).divRound(this.n);\n  var p1 = c1.mul(v1.a);\n  var p2 = c2.mul(v2.a);\n  var q1 = c1.mul(v1.b);\n  var q2 = c2.mul(v2.b); // Calculate answer\n\n  var k1 = k.sub(p1).sub(p2);\n  var k2 = q1.add(q2).neg();\n  return {\n    k1: k1,\n    k2: k2\n  };\n};\n\nShortCurve.prototype.pointFromX = function pointFromX(x, odd) {\n  x = new BN(x, 16);\n  if (!x.red) x = x.toRed(this.red);\n  var y2 = x.redSqr().redMul(x).redIAdd(x.redMul(this.a)).redIAdd(this.b);\n  var y = y2.redSqrt();\n  if (y.redSqr().redSub(y2).cmp(this.zero) !== 0) throw new Error('invalid point'); // XXX Is there any way to tell if the number is odd without converting it\n  // to non-red form?\n\n  var isOdd = y.fromRed().isOdd();\n  if (odd && !isOdd || !odd && isOdd) y = y.redNeg();\n  return this.point(x, y);\n};\n\nShortCurve.prototype.validate = function validate(point) {\n  if (point.inf) return true;\n  var x = point.x;\n  var y = point.y;\n  var ax = this.a.redMul(x);\n  var rhs = x.redSqr().redMul(x).redIAdd(ax).redIAdd(this.b);\n  return y.redSqr().redISub(rhs).cmpn(0) === 0;\n};\n\nShortCurve.prototype._endoWnafMulAdd = function _endoWnafMulAdd(points, coeffs, jacobianResult) {\n  var npoints = this._endoWnafT1;\n  var ncoeffs = this._endoWnafT2;\n\n  for (var i = 0; i < points.length; i++) {\n    var split = this._endoSplit(coeffs[i]);\n\n    var p = points[i];\n\n    var beta = p._getBeta();\n\n    if (split.k1.negative) {\n      split.k1.ineg();\n      p = p.neg(true);\n    }\n\n    if (split.k2.negative) {\n      split.k2.ineg();\n      beta = beta.neg(true);\n    }\n\n    npoints[i * 2] = p;\n    npoints[i * 2 + 1] = beta;\n    ncoeffs[i * 2] = split.k1;\n    ncoeffs[i * 2 + 1] = split.k2;\n  }\n\n  var res = this._wnafMulAdd(1, npoints, ncoeffs, i * 2, jacobianResult); // Clean-up references to points and coefficients\n\n\n  for (var j = 0; j < i * 2; j++) {\n    npoints[j] = null;\n    ncoeffs[j] = null;\n  }\n\n  return res;\n};\n\nfunction Point(curve, x, y, isRed) {\n  Base.BasePoint.call(this, curve, 'affine');\n\n  if (x === null && y === null) {\n    this.x = null;\n    this.y = null;\n    this.inf = true;\n  } else {\n    this.x = new BN(x, 16);\n    this.y = new BN(y, 16); // Force redgomery representation when loading from JSON\n\n    if (isRed) {\n      this.x.forceRed(this.curve.red);\n      this.y.forceRed(this.curve.red);\n    }\n\n    if (!this.x.red) this.x = this.x.toRed(this.curve.red);\n    if (!this.y.red) this.y = this.y.toRed(this.curve.red);\n    this.inf = false;\n  }\n}\n\ninherits(Point, Base.BasePoint);\n\nShortCurve.prototype.point = function point(x, y, isRed) {\n  return new Point(this, x, y, isRed);\n};\n\nShortCurve.prototype.pointFromJSON = function pointFromJSON(obj, red) {\n  return Point.fromJSON(this, obj, red);\n};\n\nPoint.prototype._getBeta = function _getBeta() {\n  if (!this.curve.endo) return;\n  var pre = this.precomputed;\n  if (pre && pre.beta) return pre.beta;\n  var beta = this.curve.point(this.x.redMul(this.curve.endo.beta), this.y);\n\n  if (pre) {\n    var curve = this.curve;\n\n    var endoMul = function endoMul(p) {\n      return curve.point(p.x.redMul(curve.endo.beta), p.y);\n    };\n\n    pre.beta = beta;\n    beta.precomputed = {\n      beta: null,\n      naf: pre.naf && {\n        wnd: pre.naf.wnd,\n        points: pre.naf.points.map(endoMul)\n      },\n      doubles: pre.doubles && {\n        step: pre.doubles.step,\n        points: pre.doubles.points.map(endoMul)\n      }\n    };\n  }\n\n  return beta;\n};\n\nPoint.prototype.toJSON = function toJSON() {\n  if (!this.precomputed) return [this.x, this.y];\n  return [this.x, this.y, this.precomputed && {\n    doubles: this.precomputed.doubles && {\n      step: this.precomputed.doubles.step,\n      points: this.precomputed.doubles.points.slice(1)\n    },\n    naf: this.precomputed.naf && {\n      wnd: this.precomputed.naf.wnd,\n      points: this.precomputed.naf.points.slice(1)\n    }\n  }];\n};\n\nPoint.fromJSON = function fromJSON(curve, obj, red) {\n  if (typeof obj === 'string') obj = JSON.parse(obj);\n  var res = curve.point(obj[0], obj[1], red);\n  if (!obj[2]) return res;\n\n  function obj2point(obj) {\n    return curve.point(obj[0], obj[1], red);\n  }\n\n  var pre = obj[2];\n  res.precomputed = {\n    beta: null,\n    doubles: pre.doubles && {\n      step: pre.doubles.step,\n      points: [res].concat(pre.doubles.points.map(obj2point))\n    },\n    naf: pre.naf && {\n      wnd: pre.naf.wnd,\n      points: [res].concat(pre.naf.points.map(obj2point))\n    }\n  };\n  return res;\n};\n\nPoint.prototype.inspect = function inspect() {\n  if (this.isInfinity()) return '<EC Point Infinity>';\n  return '<EC Point x: ' + this.x.fromRed().toString(16, 2) + ' y: ' + this.y.fromRed().toString(16, 2) + '>';\n};\n\nPoint.prototype.isInfinity = function isInfinity() {\n  return this.inf;\n};\n\nPoint.prototype.add = function add(p) {\n  // O + P = P\n  if (this.inf) return p; // P + O = P\n\n  if (p.inf) return this; // P + P = 2P\n\n  if (this.eq(p)) return this.dbl(); // P + (-P) = O\n\n  if (this.neg().eq(p)) return this.curve.point(null, null); // P + Q = O\n\n  if (this.x.cmp(p.x) === 0) return this.curve.point(null, null);\n  var c = this.y.redSub(p.y);\n  if (c.cmpn(0) !== 0) c = c.redMul(this.x.redSub(p.x).redInvm());\n  var nx = c.redSqr().redISub(this.x).redISub(p.x);\n  var ny = c.redMul(this.x.redSub(nx)).redISub(this.y);\n  return this.curve.point(nx, ny);\n};\n\nPoint.prototype.dbl = function dbl() {\n  if (this.inf) return this; // 2P = O\n\n  var ys1 = this.y.redAdd(this.y);\n  if (ys1.cmpn(0) === 0) return this.curve.point(null, null);\n  var a = this.curve.a;\n  var x2 = this.x.redSqr();\n  var dyinv = ys1.redInvm();\n  var c = x2.redAdd(x2).redIAdd(x2).redIAdd(a).redMul(dyinv);\n  var nx = c.redSqr().redISub(this.x.redAdd(this.x));\n  var ny = c.redMul(this.x.redSub(nx)).redISub(this.y);\n  return this.curve.point(nx, ny);\n};\n\nPoint.prototype.getX = function getX() {\n  return this.x.fromRed();\n};\n\nPoint.prototype.getY = function getY() {\n  return this.y.fromRed();\n};\n\nPoint.prototype.mul = function mul(k) {\n  k = new BN(k, 16);\n  if (this._hasDoubles(k)) return this.curve._fixedNafMul(this, k);else if (this.curve.endo) return this.curve._endoWnafMulAdd([this], [k]);else return this.curve._wnafMul(this, k);\n};\n\nPoint.prototype.mulAdd = function mulAdd(k1, p2, k2) {\n  var points = [this, p2];\n  var coeffs = [k1, k2];\n  if (this.curve.endo) return this.curve._endoWnafMulAdd(points, coeffs);else return this.curve._wnafMulAdd(1, points, coeffs, 2);\n};\n\nPoint.prototype.jmulAdd = function jmulAdd(k1, p2, k2) {\n  var points = [this, p2];\n  var coeffs = [k1, k2];\n  if (this.curve.endo) return this.curve._endoWnafMulAdd(points, coeffs, true);else return this.curve._wnafMulAdd(1, points, coeffs, 2, true);\n};\n\nPoint.prototype.eq = function eq(p) {\n  return this === p || this.inf === p.inf && (this.inf || this.x.cmp(p.x) === 0 && this.y.cmp(p.y) === 0);\n};\n\nPoint.prototype.neg = function neg(_precompute) {\n  if (this.inf) return this;\n  var res = this.curve.point(this.x, this.y.redNeg());\n\n  if (_precompute && this.precomputed) {\n    var pre = this.precomputed;\n\n    var negate = function negate(p) {\n      return p.neg();\n    };\n\n    res.precomputed = {\n      naf: pre.naf && {\n        wnd: pre.naf.wnd,\n        points: pre.naf.points.map(negate)\n      },\n      doubles: pre.doubles && {\n        step: pre.doubles.step,\n        points: pre.doubles.points.map(negate)\n      }\n    };\n  }\n\n  return res;\n};\n\nPoint.prototype.toJ = function toJ() {\n  if (this.inf) return this.curve.jpoint(null, null, null);\n  var res = this.curve.jpoint(this.x, this.y, this.curve.one);\n  return res;\n};\n\nfunction JPoint(curve, x, y, z) {\n  Base.BasePoint.call(this, curve, 'jacobian');\n\n  if (x === null && y === null && z === null) {\n    this.x = this.curve.one;\n    this.y = this.curve.one;\n    this.z = new BN(0);\n  } else {\n    this.x = new BN(x, 16);\n    this.y = new BN(y, 16);\n    this.z = new BN(z, 16);\n  }\n\n  if (!this.x.red) this.x = this.x.toRed(this.curve.red);\n  if (!this.y.red) this.y = this.y.toRed(this.curve.red);\n  if (!this.z.red) this.z = this.z.toRed(this.curve.red);\n  this.zOne = this.z === this.curve.one;\n}\n\ninherits(JPoint, Base.BasePoint);\n\nShortCurve.prototype.jpoint = function jpoint(x, y, z) {\n  return new JPoint(this, x, y, z);\n};\n\nJPoint.prototype.toP = function toP() {\n  if (this.isInfinity()) return this.curve.point(null, null);\n  var zinv = this.z.redInvm();\n  var zinv2 = zinv.redSqr();\n  var ax = this.x.redMul(zinv2);\n  var ay = this.y.redMul(zinv2).redMul(zinv);\n  return this.curve.point(ax, ay);\n};\n\nJPoint.prototype.neg = function neg() {\n  return this.curve.jpoint(this.x, this.y.redNeg(), this.z);\n};\n\nJPoint.prototype.add = function add(p) {\n  // O + P = P\n  if (this.isInfinity()) return p; // P + O = P\n\n  if (p.isInfinity()) return this; // 12M + 4S + 7A\n\n  var pz2 = p.z.redSqr();\n  var z2 = this.z.redSqr();\n  var u1 = this.x.redMul(pz2);\n  var u2 = p.x.redMul(z2);\n  var s1 = this.y.redMul(pz2.redMul(p.z));\n  var s2 = p.y.redMul(z2.redMul(this.z));\n  var h = u1.redSub(u2);\n  var r = s1.redSub(s2);\n\n  if (h.cmpn(0) === 0) {\n    if (r.cmpn(0) !== 0) return this.curve.jpoint(null, null, null);else return this.dbl();\n  }\n\n  var h2 = h.redSqr();\n  var h3 = h2.redMul(h);\n  var v = u1.redMul(h2);\n  var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v);\n  var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));\n  var nz = this.z.redMul(p.z).redMul(h);\n  return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype.mixedAdd = function mixedAdd(p) {\n  // O + P = P\n  if (this.isInfinity()) return p.toJ(); // P + O = P\n\n  if (p.isInfinity()) return this; // 8M + 3S + 7A\n\n  var z2 = this.z.redSqr();\n  var u1 = this.x;\n  var u2 = p.x.redMul(z2);\n  var s1 = this.y;\n  var s2 = p.y.redMul(z2).redMul(this.z);\n  var h = u1.redSub(u2);\n  var r = s1.redSub(s2);\n\n  if (h.cmpn(0) === 0) {\n    if (r.cmpn(0) !== 0) return this.curve.jpoint(null, null, null);else return this.dbl();\n  }\n\n  var h2 = h.redSqr();\n  var h3 = h2.redMul(h);\n  var v = u1.redMul(h2);\n  var nx = r.redSqr().redIAdd(h3).redISub(v).redISub(v);\n  var ny = r.redMul(v.redISub(nx)).redISub(s1.redMul(h3));\n  var nz = this.z.redMul(h);\n  return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype.dblp = function dblp(pow) {\n  if (pow === 0) return this;\n  if (this.isInfinity()) return this;\n  if (!pow) return this.dbl();\n\n  if (this.curve.zeroA || this.curve.threeA) {\n    var r = this;\n\n    for (var i = 0; i < pow; i++) {\n      r = r.dbl();\n    }\n\n    return r;\n  } // 1M + 2S + 1A + N * (4S + 5M + 8A)\n  // N = 1 => 6M + 6S + 9A\n\n\n  var a = this.curve.a;\n  var tinv = this.curve.tinv;\n  var jx = this.x;\n  var jy = this.y;\n  var jz = this.z;\n  var jz4 = jz.redSqr().redSqr(); // Reuse results\n\n  var jyd = jy.redAdd(jy);\n\n  for (var i = 0; i < pow; i++) {\n    var jx2 = jx.redSqr();\n    var jyd2 = jyd.redSqr();\n    var jyd4 = jyd2.redSqr();\n    var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));\n    var t1 = jx.redMul(jyd2);\n    var nx = c.redSqr().redISub(t1.redAdd(t1));\n    var t2 = t1.redISub(nx);\n    var dny = c.redMul(t2);\n    dny = dny.redIAdd(dny).redISub(jyd4);\n    var nz = jyd.redMul(jz);\n    if (i + 1 < pow) jz4 = jz4.redMul(jyd4);\n    jx = nx;\n    jz = nz;\n    jyd = dny;\n  }\n\n  return this.curve.jpoint(jx, jyd.redMul(tinv), jz);\n};\n\nJPoint.prototype.dbl = function dbl() {\n  if (this.isInfinity()) return this;\n  if (this.curve.zeroA) return this._zeroDbl();else if (this.curve.threeA) return this._threeDbl();else return this._dbl();\n};\n\nJPoint.prototype._zeroDbl = function _zeroDbl() {\n  var nx;\n  var ny;\n  var nz; // Z = 1\n\n  if (this.zOne) {\n    // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html\n    //     #doubling-mdbl-2007-bl\n    // 1M + 5S + 14A\n    // XX = X1^2\n    var xx = this.x.redSqr(); // YY = Y1^2\n\n    var yy = this.y.redSqr(); // YYYY = YY^2\n\n    var yyyy = yy.redSqr(); // S = 2 * ((X1 + YY)^2 - XX - YYYY)\n\n    var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);\n    s = s.redIAdd(s); // M = 3 * XX + a; a = 0\n\n    var m = xx.redAdd(xx).redIAdd(xx); // T = M ^ 2 - 2*S\n\n    var t = m.redSqr().redISub(s).redISub(s); // 8 * YYYY\n\n    var yyyy8 = yyyy.redIAdd(yyyy);\n    yyyy8 = yyyy8.redIAdd(yyyy8);\n    yyyy8 = yyyy8.redIAdd(yyyy8); // X3 = T\n\n    nx = t; // Y3 = M * (S - T) - 8 * YYYY\n\n    ny = m.redMul(s.redISub(t)).redISub(yyyy8); // Z3 = 2*Y1\n\n    nz = this.y.redAdd(this.y);\n  } else {\n    // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html\n    //     #doubling-dbl-2009-l\n    // 2M + 5S + 13A\n    // A = X1^2\n    var a = this.x.redSqr(); // B = Y1^2\n\n    var b = this.y.redSqr(); // C = B^2\n\n    var c = b.redSqr(); // D = 2 * ((X1 + B)^2 - A - C)\n\n    var d = this.x.redAdd(b).redSqr().redISub(a).redISub(c);\n    d = d.redIAdd(d); // E = 3 * A\n\n    var e = a.redAdd(a).redIAdd(a); // F = E^2\n\n    var f = e.redSqr(); // 8 * C\n\n    var c8 = c.redIAdd(c);\n    c8 = c8.redIAdd(c8);\n    c8 = c8.redIAdd(c8); // X3 = F - 2 * D\n\n    nx = f.redISub(d).redISub(d); // Y3 = E * (D - X3) - 8 * C\n\n    ny = e.redMul(d.redISub(nx)).redISub(c8); // Z3 = 2 * Y1 * Z1\n\n    nz = this.y.redMul(this.z);\n    nz = nz.redIAdd(nz);\n  }\n\n  return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype._threeDbl = function _threeDbl() {\n  var nx;\n  var ny;\n  var nz; // Z = 1\n\n  if (this.zOne) {\n    // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html\n    //     #doubling-mdbl-2007-bl\n    // 1M + 5S + 15A\n    // XX = X1^2\n    var xx = this.x.redSqr(); // YY = Y1^2\n\n    var yy = this.y.redSqr(); // YYYY = YY^2\n\n    var yyyy = yy.redSqr(); // S = 2 * ((X1 + YY)^2 - XX - YYYY)\n\n    var s = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);\n    s = s.redIAdd(s); // M = 3 * XX + a\n\n    var m = xx.redAdd(xx).redIAdd(xx).redIAdd(this.curve.a); // T = M^2 - 2 * S\n\n    var t = m.redSqr().redISub(s).redISub(s); // X3 = T\n\n    nx = t; // Y3 = M * (S - T) - 8 * YYYY\n\n    var yyyy8 = yyyy.redIAdd(yyyy);\n    yyyy8 = yyyy8.redIAdd(yyyy8);\n    yyyy8 = yyyy8.redIAdd(yyyy8);\n    ny = m.redMul(s.redISub(t)).redISub(yyyy8); // Z3 = 2 * Y1\n\n    nz = this.y.redAdd(this.y);\n  } else {\n    // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-3.html#doubling-dbl-2001-b\n    // 3M + 5S\n    // delta = Z1^2\n    var delta = this.z.redSqr(); // gamma = Y1^2\n\n    var gamma = this.y.redSqr(); // beta = X1 * gamma\n\n    var beta = this.x.redMul(gamma); // alpha = 3 * (X1 - delta) * (X1 + delta)\n\n    var alpha = this.x.redSub(delta).redMul(this.x.redAdd(delta));\n    alpha = alpha.redAdd(alpha).redIAdd(alpha); // X3 = alpha^2 - 8 * beta\n\n    var beta4 = beta.redIAdd(beta);\n    beta4 = beta4.redIAdd(beta4);\n    var beta8 = beta4.redAdd(beta4);\n    nx = alpha.redSqr().redISub(beta8); // Z3 = (Y1 + Z1)^2 - gamma - delta\n\n    nz = this.y.redAdd(this.z).redSqr().redISub(gamma).redISub(delta); // Y3 = alpha * (4 * beta - X3) - 8 * gamma^2\n\n    var ggamma8 = gamma.redSqr();\n    ggamma8 = ggamma8.redIAdd(ggamma8);\n    ggamma8 = ggamma8.redIAdd(ggamma8);\n    ggamma8 = ggamma8.redIAdd(ggamma8);\n    ny = alpha.redMul(beta4.redISub(nx)).redISub(ggamma8);\n  }\n\n  return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype._dbl = function _dbl() {\n  var a = this.curve.a; // 4M + 6S + 10A\n\n  var jx = this.x;\n  var jy = this.y;\n  var jz = this.z;\n  var jz4 = jz.redSqr().redSqr();\n  var jx2 = jx.redSqr();\n  var jy2 = jy.redSqr();\n  var c = jx2.redAdd(jx2).redIAdd(jx2).redIAdd(a.redMul(jz4));\n  var jxd4 = jx.redAdd(jx);\n  jxd4 = jxd4.redIAdd(jxd4);\n  var t1 = jxd4.redMul(jy2);\n  var nx = c.redSqr().redISub(t1.redAdd(t1));\n  var t2 = t1.redISub(nx);\n  var jyd8 = jy2.redSqr();\n  jyd8 = jyd8.redIAdd(jyd8);\n  jyd8 = jyd8.redIAdd(jyd8);\n  jyd8 = jyd8.redIAdd(jyd8);\n  var ny = c.redMul(t2).redISub(jyd8);\n  var nz = jy.redAdd(jy).redMul(jz);\n  return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype.trpl = function trpl() {\n  if (!this.curve.zeroA) return this.dbl().add(this); // hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html#tripling-tpl-2007-bl\n  // 5M + 10S + ...\n  // XX = X1^2\n\n  var xx = this.x.redSqr(); // YY = Y1^2\n\n  var yy = this.y.redSqr(); // ZZ = Z1^2\n\n  var zz = this.z.redSqr(); // YYYY = YY^2\n\n  var yyyy = yy.redSqr(); // M = 3 * XX + a * ZZ2; a = 0\n\n  var m = xx.redAdd(xx).redIAdd(xx); // MM = M^2\n\n  var mm = m.redSqr(); // E = 6 * ((X1 + YY)^2 - XX - YYYY) - MM\n\n  var e = this.x.redAdd(yy).redSqr().redISub(xx).redISub(yyyy);\n  e = e.redIAdd(e);\n  e = e.redAdd(e).redIAdd(e);\n  e = e.redISub(mm); // EE = E^2\n\n  var ee = e.redSqr(); // T = 16*YYYY\n\n  var t = yyyy.redIAdd(yyyy);\n  t = t.redIAdd(t);\n  t = t.redIAdd(t);\n  t = t.redIAdd(t); // U = (M + E)^2 - MM - EE - T\n\n  var u = m.redIAdd(e).redSqr().redISub(mm).redISub(ee).redISub(t); // X3 = 4 * (X1 * EE - 4 * YY * U)\n\n  var yyu4 = yy.redMul(u);\n  yyu4 = yyu4.redIAdd(yyu4);\n  yyu4 = yyu4.redIAdd(yyu4);\n  var nx = this.x.redMul(ee).redISub(yyu4);\n  nx = nx.redIAdd(nx);\n  nx = nx.redIAdd(nx); // Y3 = 8 * Y1 * (U * (T - U) - E * EE)\n\n  var ny = this.y.redMul(u.redMul(t.redISub(u)).redISub(e.redMul(ee)));\n  ny = ny.redIAdd(ny);\n  ny = ny.redIAdd(ny);\n  ny = ny.redIAdd(ny); // Z3 = (Z1 + E)^2 - ZZ - EE\n\n  var nz = this.z.redAdd(e).redSqr().redISub(zz).redISub(ee);\n  return this.curve.jpoint(nx, ny, nz);\n};\n\nJPoint.prototype.mul = function mul(k, kbase) {\n  k = new BN(k, kbase);\n  return this.curve._wnafMul(this, k);\n};\n\nJPoint.prototype.eq = function eq(p) {\n  if (p.type === 'affine') return this.eq(p.toJ());\n  if (this === p) return true; // x1 * z2^2 == x2 * z1^2\n\n  var z2 = this.z.redSqr();\n  var pz2 = p.z.redSqr();\n  if (this.x.redMul(pz2).redISub(p.x.redMul(z2)).cmpn(0) !== 0) return false; // y1 * z2^3 == y2 * z1^3\n\n  var z3 = z2.redMul(this.z);\n  var pz3 = pz2.redMul(p.z);\n  return this.y.redMul(pz3).redISub(p.y.redMul(z3)).cmpn(0) === 0;\n};\n\nJPoint.prototype.eqXToP = function eqXToP(x) {\n  var zs = this.z.redSqr();\n  var rx = x.toRed(this.curve.red).redMul(zs);\n  if (this.x.cmp(rx) === 0) return true;\n  var xc = x.clone();\n  var t = this.curve.redN.redMul(zs);\n\n  for (;;) {\n    xc.iadd(this.curve.n);\n    if (xc.cmp(this.curve.p) >= 0) return false;\n    rx.redIAdd(t);\n    if (this.x.cmp(rx) === 0) return true;\n  }\n};\n\nJPoint.prototype.inspect = function inspect() {\n  if (this.isInfinity()) return '<EC JPoint Infinity>';\n  return '<EC JPoint x: ' + this.x.toString(16, 2) + ' y: ' + this.y.toString(16, 2) + ' z: ' + this.z.toString(16, 2) + '>';\n};\n\nJPoint.prototype.isInfinity = function isInfinity() {\n  // XXX This code assumes that zero is always zero in red\n  return this.z.cmpn(0) === 0;\n};","'use strict';\n\nvar BN = require('bn.js');\n\nvar inherits = require('inherits');\n\nvar Base = require('./base');\n\nvar utils = require('../utils');\n\nfunction MontCurve(conf) {\n  Base.call(this, 'mont', conf);\n  this.a = new BN(conf.a, 16).toRed(this.red);\n  this.b = new BN(conf.b, 16).toRed(this.red);\n  this.i4 = new BN(4).toRed(this.red).redInvm();\n  this.two = new BN(2).toRed(this.red);\n  this.a24 = this.i4.redMul(this.a.redAdd(this.two));\n}\n\ninherits(MontCurve, Base);\nmodule.exports = MontCurve;\n\nMontCurve.prototype.validate = function validate(point) {\n  var x = point.normalize().x;\n  var x2 = x.redSqr();\n  var rhs = x2.redMul(x).redAdd(x2.redMul(this.a)).redAdd(x);\n  var y = rhs.redSqrt();\n  return y.redSqr().cmp(rhs) === 0;\n};\n\nfunction Point(curve, x, z) {\n  Base.BasePoint.call(this, curve, 'projective');\n\n  if (x === null && z === null) {\n    this.x = this.curve.one;\n    this.z = this.curve.zero;\n  } else {\n    this.x = new BN(x, 16);\n    this.z = new BN(z, 16);\n    if (!this.x.red) this.x = this.x.toRed(this.curve.red);\n    if (!this.z.red) this.z = this.z.toRed(this.curve.red);\n  }\n}\n\ninherits(Point, Base.BasePoint);\n\nMontCurve.prototype.decodePoint = function decodePoint(bytes, enc) {\n  return this.point(utils.toArray(bytes, enc), 1);\n};\n\nMontCurve.prototype.point = function point(x, z) {\n  return new Point(this, x, z);\n};\n\nMontCurve.prototype.pointFromJSON = function pointFromJSON(obj) {\n  return Point.fromJSON(this, obj);\n};\n\nPoint.prototype.precompute = function precompute() {// No-op\n};\n\nPoint.prototype._encode = function _encode() {\n  return this.getX().toArray('be', this.curve.p.byteLength());\n};\n\nPoint.fromJSON = function fromJSON(curve, obj) {\n  return new Point(curve, obj[0], obj[1] || curve.one);\n};\n\nPoint.prototype.inspect = function inspect() {\n  if (this.isInfinity()) return '<EC Point Infinity>';\n  return '<EC Point x: ' + this.x.fromRed().toString(16, 2) + ' z: ' + this.z.fromRed().toString(16, 2) + '>';\n};\n\nPoint.prototype.isInfinity = function isInfinity() {\n  // XXX This code assumes that zero is always zero in red\n  return this.z.cmpn(0) === 0;\n};\n\nPoint.prototype.dbl = function dbl() {\n  // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#doubling-dbl-1987-m-3\n  // 2M + 2S + 4A\n  // A = X1 + Z1\n  var a = this.x.redAdd(this.z); // AA = A^2\n\n  var aa = a.redSqr(); // B = X1 - Z1\n\n  var b = this.x.redSub(this.z); // BB = B^2\n\n  var bb = b.redSqr(); // C = AA - BB\n\n  var c = aa.redSub(bb); // X3 = AA * BB\n\n  var nx = aa.redMul(bb); // Z3 = C * (BB + A24 * C)\n\n  var nz = c.redMul(bb.redAdd(this.curve.a24.redMul(c)));\n  return this.curve.point(nx, nz);\n};\n\nPoint.prototype.add = function add() {\n  throw new Error('Not supported on Montgomery curve');\n};\n\nPoint.prototype.diffAdd = function diffAdd(p, diff) {\n  // http://hyperelliptic.org/EFD/g1p/auto-montgom-xz.html#diffadd-dadd-1987-m-3\n  // 4M + 2S + 6A\n  // A = X2 + Z2\n  var a = this.x.redAdd(this.z); // B = X2 - Z2\n\n  var b = this.x.redSub(this.z); // C = X3 + Z3\n\n  var c = p.x.redAdd(p.z); // D = X3 - Z3\n\n  var d = p.x.redSub(p.z); // DA = D * A\n\n  var da = d.redMul(a); // CB = C * B\n\n  var cb = c.redMul(b); // X5 = Z1 * (DA + CB)^2\n\n  var nx = diff.z.redMul(da.redAdd(cb).redSqr()); // Z5 = X1 * (DA - CB)^2\n\n  var nz = diff.x.redMul(da.redISub(cb).redSqr());\n  return this.curve.point(nx, nz);\n};\n\nPoint.prototype.mul = function mul(k) {\n  var t = k.clone();\n  var a = this; // (N / 2) * Q + Q\n\n  var b = this.curve.point(null, null); // (N / 2) * Q\n\n  var c = this; // Q\n\n  for (var bits = []; t.cmpn(0) !== 0; t.iushrn(1)) {\n    bits.push(t.andln(1));\n  }\n\n  for (var i = bits.length - 1; i >= 0; i--) {\n    if (bits[i] === 0) {\n      // N * Q + Q = ((N / 2) * Q + Q)) + (N / 2) * Q\n      a = a.diffAdd(b, c); // N * Q = 2 * ((N / 2) * Q + Q))\n\n      b = b.dbl();\n    } else {\n      // N * Q = ((N / 2) * Q + Q) + ((N / 2) * Q)\n      b = a.diffAdd(b, c); // N * Q + Q = 2 * ((N / 2) * Q + Q)\n\n      a = a.dbl();\n    }\n  }\n\n  return b;\n};\n\nPoint.prototype.mulAdd = function mulAdd() {\n  throw new Error('Not supported on Montgomery curve');\n};\n\nPoint.prototype.jumlAdd = function jumlAdd() {\n  throw new Error('Not supported on Montgomery curve');\n};\n\nPoint.prototype.eq = function eq(other) {\n  return this.getX().cmp(other.getX()) === 0;\n};\n\nPoint.prototype.normalize = function normalize() {\n  this.x = this.x.redMul(this.z.redInvm());\n  this.z = this.curve.one;\n  return this;\n};\n\nPoint.prototype.getX = function getX() {\n  // Normalize coordinates\n  this.normalize();\n  return this.x.fromRed();\n};","'use strict';\n\nvar utils = require('../utils');\n\nvar BN = require('bn.js');\n\nvar inherits = require('inherits');\n\nvar Base = require('./base');\n\nvar assert = utils.assert;\n\nfunction EdwardsCurve(conf) {\n  // NOTE: Important as we are creating point in Base.call()\n  this.twisted = (conf.a | 0) !== 1;\n  this.mOneA = this.twisted && (conf.a | 0) === -1;\n  this.extended = this.mOneA;\n  Base.call(this, 'edwards', conf);\n  this.a = new BN(conf.a, 16).umod(this.red.m);\n  this.a = this.a.toRed(this.red);\n  this.c = new BN(conf.c, 16).toRed(this.red);\n  this.c2 = this.c.redSqr();\n  this.d = new BN(conf.d, 16).toRed(this.red);\n  this.dd = this.d.redAdd(this.d);\n  assert(!this.twisted || this.c.fromRed().cmpn(1) === 0);\n  this.oneC = (conf.c | 0) === 1;\n}\n\ninherits(EdwardsCurve, Base);\nmodule.exports = EdwardsCurve;\n\nEdwardsCurve.prototype._mulA = function _mulA(num) {\n  if (this.mOneA) return num.redNeg();else return this.a.redMul(num);\n};\n\nEdwardsCurve.prototype._mulC = function _mulC(num) {\n  if (this.oneC) return num;else return this.c.redMul(num);\n}; // Just for compatibility with Short curve\n\n\nEdwardsCurve.prototype.jpoint = function jpoint(x, y, z, t) {\n  return this.point(x, y, z, t);\n};\n\nEdwardsCurve.prototype.pointFromX = function pointFromX(x, odd) {\n  x = new BN(x, 16);\n  if (!x.red) x = x.toRed(this.red);\n  var x2 = x.redSqr();\n  var rhs = this.c2.redSub(this.a.redMul(x2));\n  var lhs = this.one.redSub(this.c2.redMul(this.d).redMul(x2));\n  var y2 = rhs.redMul(lhs.redInvm());\n  var y = y2.redSqrt();\n  if (y.redSqr().redSub(y2).cmp(this.zero) !== 0) throw new Error('invalid point');\n  var isOdd = y.fromRed().isOdd();\n  if (odd && !isOdd || !odd && isOdd) y = y.redNeg();\n  return this.point(x, y);\n};\n\nEdwardsCurve.prototype.pointFromY = function pointFromY(y, odd) {\n  y = new BN(y, 16);\n  if (!y.red) y = y.toRed(this.red); // x^2 = (y^2 - c^2) / (c^2 d y^2 - a)\n\n  var y2 = y.redSqr();\n  var lhs = y2.redSub(this.c2);\n  var rhs = y2.redMul(this.d).redMul(this.c2).redSub(this.a);\n  var x2 = lhs.redMul(rhs.redInvm());\n\n  if (x2.cmp(this.zero) === 0) {\n    if (odd) throw new Error('invalid point');else return this.point(this.zero, y);\n  }\n\n  var x = x2.redSqrt();\n  if (x.redSqr().redSub(x2).cmp(this.zero) !== 0) throw new Error('invalid point');\n  if (x.fromRed().isOdd() !== odd) x = x.redNeg();\n  return this.point(x, y);\n};\n\nEdwardsCurve.prototype.validate = function validate(point) {\n  if (point.isInfinity()) return true; // Curve: A * X^2 + Y^2 = C^2 * (1 + D * X^2 * Y^2)\n\n  point.normalize();\n  var x2 = point.x.redSqr();\n  var y2 = point.y.redSqr();\n  var lhs = x2.redMul(this.a).redAdd(y2);\n  var rhs = this.c2.redMul(this.one.redAdd(this.d.redMul(x2).redMul(y2)));\n  return lhs.cmp(rhs) === 0;\n};\n\nfunction Point(curve, x, y, z, t) {\n  Base.BasePoint.call(this, curve, 'projective');\n\n  if (x === null && y === null && z === null) {\n    this.x = this.curve.zero;\n    this.y = this.curve.one;\n    this.z = this.curve.one;\n    this.t = this.curve.zero;\n    this.zOne = true;\n  } else {\n    this.x = new BN(x, 16);\n    this.y = new BN(y, 16);\n    this.z = z ? new BN(z, 16) : this.curve.one;\n    this.t = t && new BN(t, 16);\n    if (!this.x.red) this.x = this.x.toRed(this.curve.red);\n    if (!this.y.red) this.y = this.y.toRed(this.curve.red);\n    if (!this.z.red) this.z = this.z.toRed(this.curve.red);\n    if (this.t && !this.t.red) this.t = this.t.toRed(this.curve.red);\n    this.zOne = this.z === this.curve.one; // Use extended coordinates\n\n    if (this.curve.extended && !this.t) {\n      this.t = this.x.redMul(this.y);\n      if (!this.zOne) this.t = this.t.redMul(this.z.redInvm());\n    }\n  }\n}\n\ninherits(Point, Base.BasePoint);\n\nEdwardsCurve.prototype.pointFromJSON = function pointFromJSON(obj) {\n  return Point.fromJSON(this, obj);\n};\n\nEdwardsCurve.prototype.point = function point(x, y, z, t) {\n  return new Point(this, x, y, z, t);\n};\n\nPoint.fromJSON = function fromJSON(curve, obj) {\n  return new Point(curve, obj[0], obj[1], obj[2]);\n};\n\nPoint.prototype.inspect = function inspect() {\n  if (this.isInfinity()) return '<EC Point Infinity>';\n  return '<EC Point x: ' + this.x.fromRed().toString(16, 2) + ' y: ' + this.y.fromRed().toString(16, 2) + ' z: ' + this.z.fromRed().toString(16, 2) + '>';\n};\n\nPoint.prototype.isInfinity = function isInfinity() {\n  // XXX This code assumes that zero is always zero in red\n  return this.x.cmpn(0) === 0 && (this.y.cmp(this.z) === 0 || this.zOne && this.y.cmp(this.curve.c) === 0);\n};\n\nPoint.prototype._extDbl = function _extDbl() {\n  // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html\n  //     #doubling-dbl-2008-hwcd\n  // 4M + 4S\n  // A = X1^2\n  var a = this.x.redSqr(); // B = Y1^2\n\n  var b = this.y.redSqr(); // C = 2 * Z1^2\n\n  var c = this.z.redSqr();\n  c = c.redIAdd(c); // D = a * A\n\n  var d = this.curve._mulA(a); // E = (X1 + Y1)^2 - A - B\n\n\n  var e = this.x.redAdd(this.y).redSqr().redISub(a).redISub(b); // G = D + B\n\n  var g = d.redAdd(b); // F = G - C\n\n  var f = g.redSub(c); // H = D - B\n\n  var h = d.redSub(b); // X3 = E * F\n\n  var nx = e.redMul(f); // Y3 = G * H\n\n  var ny = g.redMul(h); // T3 = E * H\n\n  var nt = e.redMul(h); // Z3 = F * G\n\n  var nz = f.redMul(g);\n  return this.curve.point(nx, ny, nz, nt);\n};\n\nPoint.prototype._projDbl = function _projDbl() {\n  // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html\n  //     #doubling-dbl-2008-bbjlp\n  //     #doubling-dbl-2007-bl\n  // and others\n  // Generally 3M + 4S or 2M + 4S\n  // B = (X1 + Y1)^2\n  var b = this.x.redAdd(this.y).redSqr(); // C = X1^2\n\n  var c = this.x.redSqr(); // D = Y1^2\n\n  var d = this.y.redSqr();\n  var nx;\n  var ny;\n  var nz;\n\n  if (this.curve.twisted) {\n    // E = a * C\n    var e = this.curve._mulA(c); // F = E + D\n\n\n    var f = e.redAdd(d);\n\n    if (this.zOne) {\n      // X3 = (B - C - D) * (F - 2)\n      nx = b.redSub(c).redSub(d).redMul(f.redSub(this.curve.two)); // Y3 = F * (E - D)\n\n      ny = f.redMul(e.redSub(d)); // Z3 = F^2 - 2 * F\n\n      nz = f.redSqr().redSub(f).redSub(f);\n    } else {\n      // H = Z1^2\n      var h = this.z.redSqr(); // J = F - 2 * H\n\n      var j = f.redSub(h).redISub(h); // X3 = (B-C-D)*J\n\n      nx = b.redSub(c).redISub(d).redMul(j); // Y3 = F * (E - D)\n\n      ny = f.redMul(e.redSub(d)); // Z3 = F * J\n\n      nz = f.redMul(j);\n    }\n  } else {\n    // E = C + D\n    var e = c.redAdd(d); // H = (c * Z1)^2\n\n    var h = this.curve._mulC(this.z).redSqr(); // J = E - 2 * H\n\n\n    var j = e.redSub(h).redSub(h); // X3 = c * (B - E) * J\n\n    nx = this.curve._mulC(b.redISub(e)).redMul(j); // Y3 = c * E * (C - D)\n\n    ny = this.curve._mulC(e).redMul(c.redISub(d)); // Z3 = E * J\n\n    nz = e.redMul(j);\n  }\n\n  return this.curve.point(nx, ny, nz);\n};\n\nPoint.prototype.dbl = function dbl() {\n  if (this.isInfinity()) return this; // Double in extended coordinates\n\n  if (this.curve.extended) return this._extDbl();else return this._projDbl();\n};\n\nPoint.prototype._extAdd = function _extAdd(p) {\n  // hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html\n  //     #addition-add-2008-hwcd-3\n  // 8M\n  // A = (Y1 - X1) * (Y2 - X2)\n  var a = this.y.redSub(this.x).redMul(p.y.redSub(p.x)); // B = (Y1 + X1) * (Y2 + X2)\n\n  var b = this.y.redAdd(this.x).redMul(p.y.redAdd(p.x)); // C = T1 * k * T2\n\n  var c = this.t.redMul(this.curve.dd).redMul(p.t); // D = Z1 * 2 * Z2\n\n  var d = this.z.redMul(p.z.redAdd(p.z)); // E = B - A\n\n  var e = b.redSub(a); // F = D - C\n\n  var f = d.redSub(c); // G = D + C\n\n  var g = d.redAdd(c); // H = B + A\n\n  var h = b.redAdd(a); // X3 = E * F\n\n  var nx = e.redMul(f); // Y3 = G * H\n\n  var ny = g.redMul(h); // T3 = E * H\n\n  var nt = e.redMul(h); // Z3 = F * G\n\n  var nz = f.redMul(g);\n  return this.curve.point(nx, ny, nz, nt);\n};\n\nPoint.prototype._projAdd = function _projAdd(p) {\n  // hyperelliptic.org/EFD/g1p/auto-twisted-projective.html\n  //     #addition-add-2008-bbjlp\n  //     #addition-add-2007-bl\n  // 10M + 1S\n  // A = Z1 * Z2\n  var a = this.z.redMul(p.z); // B = A^2\n\n  var b = a.redSqr(); // C = X1 * X2\n\n  var c = this.x.redMul(p.x); // D = Y1 * Y2\n\n  var d = this.y.redMul(p.y); // E = d * C * D\n\n  var e = this.curve.d.redMul(c).redMul(d); // F = B - E\n\n  var f = b.redSub(e); // G = B + E\n\n  var g = b.redAdd(e); // X3 = A * F * ((X1 + Y1) * (X2 + Y2) - C - D)\n\n  var tmp = this.x.redAdd(this.y).redMul(p.x.redAdd(p.y)).redISub(c).redISub(d);\n  var nx = a.redMul(f).redMul(tmp);\n  var ny;\n  var nz;\n\n  if (this.curve.twisted) {\n    // Y3 = A * G * (D - a * C)\n    ny = a.redMul(g).redMul(d.redSub(this.curve._mulA(c))); // Z3 = F * G\n\n    nz = f.redMul(g);\n  } else {\n    // Y3 = A * G * (D - C)\n    ny = a.redMul(g).redMul(d.redSub(c)); // Z3 = c * F * G\n\n    nz = this.curve._mulC(f).redMul(g);\n  }\n\n  return this.curve.point(nx, ny, nz);\n};\n\nPoint.prototype.add = function add(p) {\n  if (this.isInfinity()) return p;\n  if (p.isInfinity()) return this;\n  if (this.curve.extended) return this._extAdd(p);else return this._projAdd(p);\n};\n\nPoint.prototype.mul = function mul(k) {\n  if (this._hasDoubles(k)) return this.curve._fixedNafMul(this, k);else return this.curve._wnafMul(this, k);\n};\n\nPoint.prototype.mulAdd = function mulAdd(k1, p, k2) {\n  return this.curve._wnafMulAdd(1, [this, p], [k1, k2], 2, false);\n};\n\nPoint.prototype.jmulAdd = function jmulAdd(k1, p, k2) {\n  return this.curve._wnafMulAdd(1, [this, p], [k1, k2], 2, true);\n};\n\nPoint.prototype.normalize = function normalize() {\n  if (this.zOne) return this; // Normalize coordinates\n\n  var zi = this.z.redInvm();\n  this.x = this.x.redMul(zi);\n  this.y = this.y.redMul(zi);\n  if (this.t) this.t = this.t.redMul(zi);\n  this.z = this.curve.one;\n  this.zOne = true;\n  return this;\n};\n\nPoint.prototype.neg = function neg() {\n  return this.curve.point(this.x.redNeg(), this.y, this.z, this.t && this.t.redNeg());\n};\n\nPoint.prototype.getX = function getX() {\n  this.normalize();\n  return this.x.fromRed();\n};\n\nPoint.prototype.getY = function getY() {\n  this.normalize();\n  return this.y.fromRed();\n};\n\nPoint.prototype.eq = function eq(other) {\n  return this === other || this.getX().cmp(other.getX()) === 0 && this.getY().cmp(other.getY()) === 0;\n};\n\nPoint.prototype.eqXToP = function eqXToP(x) {\n  var rx = x.toRed(this.curve.red).redMul(this.z);\n  if (this.x.cmp(rx) === 0) return true;\n  var xc = x.clone();\n  var t = this.curve.redN.redMul(this.z);\n\n  for (;;) {\n    xc.iadd(this.curve.n);\n    if (xc.cmp(this.curve.p) >= 0) return false;\n    rx.redIAdd(t);\n    if (this.x.cmp(rx) === 0) return true;\n  }\n}; // Compatibility with BaseCurve\n\n\nPoint.prototype.toP = Point.prototype.normalize;\nPoint.prototype.mixedAdd = Point.prototype.add;","'use strict';\n\nexports.sha1 = require('./sha/1');\nexports.sha224 = require('./sha/224');\nexports.sha256 = require('./sha/256');\nexports.sha384 = require('./sha/384');\nexports.sha512 = require('./sha/512');","'use strict';\n\nvar utils = require('../utils');\n\nvar common = require('../common');\n\nvar shaCommon = require('./common');\n\nvar rotl32 = utils.rotl32;\nvar sum32 = utils.sum32;\nvar sum32_5 = utils.sum32_5;\nvar ft_1 = shaCommon.ft_1;\nvar BlockHash = common.BlockHash;\nvar sha1_K = [0x5A827999, 0x6ED9EBA1, 0x8F1BBCDC, 0xCA62C1D6];\n\nfunction SHA1() {\n  if (!(this instanceof SHA1)) return new SHA1();\n  BlockHash.call(this);\n  this.h = [0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0];\n  this.W = new Array(80);\n}\n\nutils.inherits(SHA1, BlockHash);\nmodule.exports = SHA1;\nSHA1.blockSize = 512;\nSHA1.outSize = 160;\nSHA1.hmacStrength = 80;\nSHA1.padLength = 64;\n\nSHA1.prototype._update = function _update(msg, start) {\n  var W = this.W;\n\n  for (var i = 0; i < 16; i++) {\n    W[i] = msg[start + i];\n  }\n\n  for (; i < W.length; i++) {\n    W[i] = rotl32(W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16], 1);\n  }\n\n  var a = this.h[0];\n  var b = this.h[1];\n  var c = this.h[2];\n  var d = this.h[3];\n  var e = this.h[4];\n\n  for (i = 0; i < W.length; i++) {\n    var s = ~~(i / 20);\n    var t = sum32_5(rotl32(a, 5), ft_1(s, b, c, d), e, W[i], sha1_K[s]);\n    e = d;\n    d = c;\n    c = rotl32(b, 30);\n    b = a;\n    a = t;\n  }\n\n  this.h[0] = sum32(this.h[0], a);\n  this.h[1] = sum32(this.h[1], b);\n  this.h[2] = sum32(this.h[2], c);\n  this.h[3] = sum32(this.h[3], d);\n  this.h[4] = sum32(this.h[4], e);\n};\n\nSHA1.prototype._digest = function digest(enc) {\n  if (enc === 'hex') return utils.toHex32(this.h, 'big');else return utils.split32(this.h, 'big');\n};","'use strict';\n\nvar utils = require('../utils');\n\nvar SHA256 = require('./256');\n\nfunction SHA224() {\n  if (!(this instanceof SHA224)) return new SHA224();\n  SHA256.call(this);\n  this.h = [0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939, 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4];\n}\n\nutils.inherits(SHA224, SHA256);\nmodule.exports = SHA224;\nSHA224.blockSize = 512;\nSHA224.outSize = 224;\nSHA224.hmacStrength = 192;\nSHA224.padLength = 64;\n\nSHA224.prototype._digest = function digest(enc) {\n  // Just truncate output\n  if (enc === 'hex') return utils.toHex32(this.h.slice(0, 7), 'big');else return utils.split32(this.h.slice(0, 7), 'big');\n};","'use strict';\n\nvar utils = require('../utils');\n\nvar SHA512 = require('./512');\n\nfunction SHA384() {\n  if (!(this instanceof SHA384)) return new SHA384();\n  SHA512.call(this);\n  this.h = [0xcbbb9d5d, 0xc1059ed8, 0x629a292a, 0x367cd507, 0x9159015a, 0x3070dd17, 0x152fecd8, 0xf70e5939, 0x67332667, 0xffc00b31, 0x8eb44a87, 0x68581511, 0xdb0c2e0d, 0x64f98fa7, 0x47b5481d, 0xbefa4fa4];\n}\n\nutils.inherits(SHA384, SHA512);\nmodule.exports = SHA384;\nSHA384.blockSize = 1024;\nSHA384.outSize = 384;\nSHA384.hmacStrength = 192;\nSHA384.padLength = 128;\n\nSHA384.prototype._digest = function digest(enc) {\n  if (enc === 'hex') return utils.toHex32(this.h.slice(0, 12), 'big');else return utils.split32(this.h.slice(0, 12), 'big');\n};","'use strict';\n\nvar utils = require('./utils');\n\nvar common = require('./common');\n\nvar rotl32 = utils.rotl32;\nvar sum32 = utils.sum32;\nvar sum32_3 = utils.sum32_3;\nvar sum32_4 = utils.sum32_4;\nvar BlockHash = common.BlockHash;\n\nfunction RIPEMD160() {\n  if (!(this instanceof RIPEMD160)) return new RIPEMD160();\n  BlockHash.call(this);\n  this.h = [0x67452301, 0xefcdab89, 0x98badcfe, 0x10325476, 0xc3d2e1f0];\n  this.endian = 'little';\n}\n\nutils.inherits(RIPEMD160, BlockHash);\nexports.ripemd160 = RIPEMD160;\nRIPEMD160.blockSize = 512;\nRIPEMD160.outSize = 160;\nRIPEMD160.hmacStrength = 192;\nRIPEMD160.padLength = 64;\n\nRIPEMD160.prototype._update = function update(msg, start) {\n  var A = this.h[0];\n  var B = this.h[1];\n  var C = this.h[2];\n  var D = this.h[3];\n  var E = this.h[4];\n  var Ah = A;\n  var Bh = B;\n  var Ch = C;\n  var Dh = D;\n  var Eh = E;\n\n  for (var j = 0; j < 80; j++) {\n    var T = sum32(rotl32(sum32_4(A, f(j, B, C, D), msg[r[j] + start], K(j)), s[j]), E);\n    A = E;\n    E = D;\n    D = rotl32(C, 10);\n    C = B;\n    B = T;\n    T = sum32(rotl32(sum32_4(Ah, f(79 - j, Bh, Ch, Dh), msg[rh[j] + start], Kh(j)), sh[j]), Eh);\n    Ah = Eh;\n    Eh = Dh;\n    Dh = rotl32(Ch, 10);\n    Ch = Bh;\n    Bh = T;\n  }\n\n  T = sum32_3(this.h[1], C, Dh);\n  this.h[1] = sum32_3(this.h[2], D, Eh);\n  this.h[2] = sum32_3(this.h[3], E, Ah);\n  this.h[3] = sum32_3(this.h[4], A, Bh);\n  this.h[4] = sum32_3(this.h[0], B, Ch);\n  this.h[0] = T;\n};\n\nRIPEMD160.prototype._digest = function digest(enc) {\n  if (enc === 'hex') return utils.toHex32(this.h, 'little');else return utils.split32(this.h, 'little');\n};\n\nfunction f(j, x, y, z) {\n  if (j <= 15) return x ^ y ^ z;else if (j <= 31) return x & y | ~x & z;else if (j <= 47) return (x | ~y) ^ z;else if (j <= 63) return x & z | y & ~z;else return x ^ (y | ~z);\n}\n\nfunction K(j) {\n  if (j <= 15) return 0x00000000;else if (j <= 31) return 0x5a827999;else if (j <= 47) return 0x6ed9eba1;else if (j <= 63) return 0x8f1bbcdc;else return 0xa953fd4e;\n}\n\nfunction Kh(j) {\n  if (j <= 15) return 0x50a28be6;else if (j <= 31) return 0x5c4dd124;else if (j <= 47) return 0x6d703ef3;else if (j <= 63) return 0x7a6d76e9;else return 0x00000000;\n}\n\nvar r = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8, 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12, 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2, 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13];\nvar rh = [5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12, 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2, 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13, 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14, 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11];\nvar s = [11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8, 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12, 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5, 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12, 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6];\nvar sh = [8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6, 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11, 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5, 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8, 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11];","'use strict';\n\nvar utils = require('./utils');\n\nvar assert = require('minimalistic-assert');\n\nfunction Hmac(hash, key, enc) {\n  if (!(this instanceof Hmac)) return new Hmac(hash, key, enc);\n  this.Hash = hash;\n  this.blockSize = hash.blockSize / 8;\n  this.outSize = hash.outSize / 8;\n  this.inner = null;\n  this.outer = null;\n\n  this._init(utils.toArray(key, enc));\n}\n\nmodule.exports = Hmac;\n\nHmac.prototype._init = function init(key) {\n  // Shorten key, if needed\n  if (key.length > this.blockSize) key = new this.Hash().update(key).digest();\n  assert(key.length <= this.blockSize); // Add padding to key\n\n  for (var i = key.length; i < this.blockSize; i++) {\n    key.push(0);\n  }\n\n  for (i = 0; i < key.length; i++) {\n    key[i] ^= 0x36;\n  }\n\n  this.inner = new this.Hash().update(key); // 0x36 ^ 0x5c = 0x6a\n\n  for (i = 0; i < key.length; i++) {\n    key[i] ^= 0x6a;\n  }\n\n  this.outer = new this.Hash().update(key);\n};\n\nHmac.prototype.update = function update(msg, enc) {\n  this.inner.update(msg, enc);\n  return this;\n};\n\nHmac.prototype.digest = function digest(enc) {\n  this.outer.update(this.inner.digest());\n  return this.outer.digest(enc);\n};","module.exports = {\n  doubles: {\n    step: 4,\n    points: [['e60fce93b59e9ec53011aabc21c23e97b2a31369b87a5ae9c44ee89e2a6dec0a', 'f7e3507399e595929db99f34f57937101296891e44d23f0be1f32cce69616821'], ['8282263212c609d9ea2a6e3e172de238d8c39cabd5ac1ca10646e23fd5f51508', '11f8a8098557dfe45e8256e830b60ace62d613ac2f7b17bed31b6eaff6e26caf'], ['175e159f728b865a72f99cc6c6fc846de0b93833fd2222ed73fce5b551e5b739', 'd3506e0d9e3c79eba4ef97a51ff71f5eacb5955add24345c6efa6ffee9fed695'], ['363d90d447b00c9c99ceac05b6262ee053441c7e55552ffe526bad8f83ff4640', '4e273adfc732221953b445397f3363145b9a89008199ecb62003c7f3bee9de9'], ['8b4b5f165df3c2be8c6244b5b745638843e4a781a15bcd1b69f79a55dffdf80c', '4aad0a6f68d308b4b3fbd7813ab0da04f9e336546162ee56b3eff0c65fd4fd36'], ['723cbaa6e5db996d6bf771c00bd548c7b700dbffa6c0e77bcb6115925232fcda', '96e867b5595cc498a921137488824d6e2660a0653779494801dc069d9eb39f5f'], ['eebfa4d493bebf98ba5feec812c2d3b50947961237a919839a533eca0e7dd7fa', '5d9a8ca3970ef0f269ee7edaf178089d9ae4cdc3a711f712ddfd4fdae1de8999'], ['100f44da696e71672791d0a09b7bde459f1215a29b3c03bfefd7835b39a48db0', 'cdd9e13192a00b772ec8f3300c090666b7ff4a18ff5195ac0fbd5cd62bc65a09'], ['e1031be262c7ed1b1dc9227a4a04c017a77f8d4464f3b3852c8acde6e534fd2d', '9d7061928940405e6bb6a4176597535af292dd419e1ced79a44f18f29456a00d'], ['feea6cae46d55b530ac2839f143bd7ec5cf8b266a41d6af52d5e688d9094696d', 'e57c6b6c97dce1bab06e4e12bf3ecd5c981c8957cc41442d3155debf18090088'], ['da67a91d91049cdcb367be4be6ffca3cfeed657d808583de33fa978bc1ec6cb1', '9bacaa35481642bc41f463f7ec9780e5dec7adc508f740a17e9ea8e27a68be1d'], ['53904faa0b334cdda6e000935ef22151ec08d0f7bb11069f57545ccc1a37b7c0', '5bc087d0bc80106d88c9eccac20d3c1c13999981e14434699dcb096b022771c8'], ['8e7bcd0bd35983a7719cca7764ca906779b53a043a9b8bcaeff959f43ad86047', '10b7770b2a3da4b3940310420ca9514579e88e2e47fd68b3ea10047e8460372a'], ['385eed34c1cdff21e6d0818689b81bde71a7f4f18397e6690a841e1599c43862', '283bebc3e8ea23f56701de19e9ebf4576b304eec2086dc8cc0458fe5542e5453'], ['6f9d9b803ecf191637c73a4413dfa180fddf84a5947fbc9c606ed86c3fac3a7', '7c80c68e603059ba69b8e2a30e45c4d47ea4dd2f5c281002d86890603a842160'], ['3322d401243c4e2582a2147c104d6ecbf774d163db0f5e5313b7e0e742d0e6bd', '56e70797e9664ef5bfb019bc4ddaf9b72805f63ea2873af624f3a2e96c28b2a0'], ['85672c7d2de0b7da2bd1770d89665868741b3f9af7643397721d74d28134ab83', '7c481b9b5b43b2eb6374049bfa62c2e5e77f17fcc5298f44c8e3094f790313a6'], ['948bf809b1988a46b06c9f1919413b10f9226c60f668832ffd959af60c82a0a', '53a562856dcb6646dc6b74c5d1c3418c6d4dff08c97cd2bed4cb7f88d8c8e589'], ['6260ce7f461801c34f067ce0f02873a8f1b0e44dfc69752accecd819f38fd8e8', 'bc2da82b6fa5b571a7f09049776a1ef7ecd292238051c198c1a84e95b2b4ae17'], ['e5037de0afc1d8d43d8348414bbf4103043ec8f575bfdc432953cc8d2037fa2d', '4571534baa94d3b5f9f98d09fb990bddbd5f5b03ec481f10e0e5dc841d755bda'], ['e06372b0f4a207adf5ea905e8f1771b4e7e8dbd1c6a6c5b725866a0ae4fce725', '7a908974bce18cfe12a27bb2ad5a488cd7484a7787104870b27034f94eee31dd'], ['213c7a715cd5d45358d0bbf9dc0ce02204b10bdde2a3f58540ad6908d0559754', '4b6dad0b5ae462507013ad06245ba190bb4850f5f36a7eeddff2c27534b458f2'], ['4e7c272a7af4b34e8dbb9352a5419a87e2838c70adc62cddf0cc3a3b08fbd53c', '17749c766c9d0b18e16fd09f6def681b530b9614bff7dd33e0b3941817dcaae6'], ['fea74e3dbe778b1b10f238ad61686aa5c76e3db2be43057632427e2840fb27b6', '6e0568db9b0b13297cf674deccb6af93126b596b973f7b77701d3db7f23cb96f'], ['76e64113f677cf0e10a2570d599968d31544e179b760432952c02a4417bdde39', 'c90ddf8dee4e95cf577066d70681f0d35e2a33d2b56d2032b4b1752d1901ac01'], ['c738c56b03b2abe1e8281baa743f8f9a8f7cc643df26cbee3ab150242bcbb891', '893fb578951ad2537f718f2eacbfbbbb82314eef7880cfe917e735d9699a84c3'], ['d895626548b65b81e264c7637c972877d1d72e5f3a925014372e9f6588f6c14b', 'febfaa38f2bc7eae728ec60818c340eb03428d632bb067e179363ed75d7d991f'], ['b8da94032a957518eb0f6433571e8761ceffc73693e84edd49150a564f676e03', '2804dfa44805a1e4d7c99cc9762808b092cc584d95ff3b511488e4e74efdf6e7'], ['e80fea14441fb33a7d8adab9475d7fab2019effb5156a792f1a11778e3c0df5d', 'eed1de7f638e00771e89768ca3ca94472d155e80af322ea9fcb4291b6ac9ec78'], ['a301697bdfcd704313ba48e51d567543f2a182031efd6915ddc07bbcc4e16070', '7370f91cfb67e4f5081809fa25d40f9b1735dbf7c0a11a130c0d1a041e177ea1'], ['90ad85b389d6b936463f9d0512678de208cc330b11307fffab7ac63e3fb04ed4', 'e507a3620a38261affdcbd9427222b839aefabe1582894d991d4d48cb6ef150'], ['8f68b9d2f63b5f339239c1ad981f162ee88c5678723ea3351b7b444c9ec4c0da', '662a9f2dba063986de1d90c2b6be215dbbea2cfe95510bfdf23cbf79501fff82'], ['e4f3fb0176af85d65ff99ff9198c36091f48e86503681e3e6686fd5053231e11', '1e63633ad0ef4f1c1661a6d0ea02b7286cc7e74ec951d1c9822c38576feb73bc'], ['8c00fa9b18ebf331eb961537a45a4266c7034f2f0d4e1d0716fb6eae20eae29e', 'efa47267fea521a1a9dc343a3736c974c2fadafa81e36c54e7d2a4c66702414b'], ['e7a26ce69dd4829f3e10cec0a9e98ed3143d084f308b92c0997fddfc60cb3e41', '2a758e300fa7984b471b006a1aafbb18d0a6b2c0420e83e20e8a9421cf2cfd51'], ['b6459e0ee3662ec8d23540c223bcbdc571cbcb967d79424f3cf29eb3de6b80ef', '67c876d06f3e06de1dadf16e5661db3c4b3ae6d48e35b2ff30bf0b61a71ba45'], ['d68a80c8280bb840793234aa118f06231d6f1fc67e73c5a5deda0f5b496943e8', 'db8ba9fff4b586d00c4b1f9177b0e28b5b0e7b8f7845295a294c84266b133120'], ['324aed7df65c804252dc0270907a30b09612aeb973449cea4095980fc28d3d5d', '648a365774b61f2ff130c0c35aec1f4f19213b0c7e332843967224af96ab7c84'], ['4df9c14919cde61f6d51dfdbe5fee5dceec4143ba8d1ca888e8bd373fd054c96', '35ec51092d8728050974c23a1d85d4b5d506cdc288490192ebac06cad10d5d'], ['9c3919a84a474870faed8a9c1cc66021523489054d7f0308cbfc99c8ac1f98cd', 'ddb84f0f4a4ddd57584f044bf260e641905326f76c64c8e6be7e5e03d4fc599d'], ['6057170b1dd12fdf8de05f281d8e06bb91e1493a8b91d4cc5a21382120a959e5', '9a1af0b26a6a4807add9a2daf71df262465152bc3ee24c65e899be932385a2a8'], ['a576df8e23a08411421439a4518da31880cef0fba7d4df12b1a6973eecb94266', '40a6bf20e76640b2c92b97afe58cd82c432e10a7f514d9f3ee8be11ae1b28ec8'], ['7778a78c28dec3e30a05fe9629de8c38bb30d1f5cf9a3a208f763889be58ad71', '34626d9ab5a5b22ff7098e12f2ff580087b38411ff24ac563b513fc1fd9f43ac'], ['928955ee637a84463729fd30e7afd2ed5f96274e5ad7e5cb09eda9c06d903ac', 'c25621003d3f42a827b78a13093a95eeac3d26efa8a8d83fc5180e935bcd091f'], ['85d0fef3ec6db109399064f3a0e3b2855645b4a907ad354527aae75163d82751', '1f03648413a38c0be29d496e582cf5663e8751e96877331582c237a24eb1f962'], ['ff2b0dce97eece97c1c9b6041798b85dfdfb6d8882da20308f5404824526087e', '493d13fef524ba188af4c4dc54d07936c7b7ed6fb90e2ceb2c951e01f0c29907'], ['827fbbe4b1e880ea9ed2b2e6301b212b57f1ee148cd6dd28780e5e2cf856e241', 'c60f9c923c727b0b71bef2c67d1d12687ff7a63186903166d605b68baec293ec'], ['eaa649f21f51bdbae7be4ae34ce6e5217a58fdce7f47f9aa7f3b58fa2120e2b3', 'be3279ed5bbbb03ac69a80f89879aa5a01a6b965f13f7e59d47a5305ba5ad93d'], ['e4a42d43c5cf169d9391df6decf42ee541b6d8f0c9a137401e23632dda34d24f', '4d9f92e716d1c73526fc99ccfb8ad34ce886eedfa8d8e4f13a7f7131deba9414'], ['1ec80fef360cbdd954160fadab352b6b92b53576a88fea4947173b9d4300bf19', 'aeefe93756b5340d2f3a4958a7abbf5e0146e77f6295a07b671cdc1cc107cefd'], ['146a778c04670c2f91b00af4680dfa8bce3490717d58ba889ddb5928366642be', 'b318e0ec3354028add669827f9d4b2870aaa971d2f7e5ed1d0b297483d83efd0'], ['fa50c0f61d22e5f07e3acebb1aa07b128d0012209a28b9776d76a8793180eef9', '6b84c6922397eba9b72cd2872281a68a5e683293a57a213b38cd8d7d3f4f2811'], ['da1d61d0ca721a11b1a5bf6b7d88e8421a288ab5d5bba5220e53d32b5f067ec2', '8157f55a7c99306c79c0766161c91e2966a73899d279b48a655fba0f1ad836f1'], ['a8e282ff0c9706907215ff98e8fd416615311de0446f1e062a73b0610d064e13', '7f97355b8db81c09abfb7f3c5b2515888b679a3e50dd6bd6cef7c73111f4cc0c'], ['174a53b9c9a285872d39e56e6913cab15d59b1fa512508c022f382de8319497c', 'ccc9dc37abfc9c1657b4155f2c47f9e6646b3a1d8cb9854383da13ac079afa73'], ['959396981943785c3d3e57edf5018cdbe039e730e4918b3d884fdff09475b7ba', '2e7e552888c331dd8ba0386a4b9cd6849c653f64c8709385e9b8abf87524f2fd'], ['d2a63a50ae401e56d645a1153b109a8fcca0a43d561fba2dbb51340c9d82b151', 'e82d86fb6443fcb7565aee58b2948220a70f750af484ca52d4142174dcf89405'], ['64587e2335471eb890ee7896d7cfdc866bacbdbd3839317b3436f9b45617e073', 'd99fcdd5bf6902e2ae96dd6447c299a185b90a39133aeab358299e5e9faf6589'], ['8481bde0e4e4d885b3a546d3e549de042f0aa6cea250e7fd358d6c86dd45e458', '38ee7b8cba5404dd84a25bf39cecb2ca900a79c42b262e556d64b1b59779057e'], ['13464a57a78102aa62b6979ae817f4637ffcfed3c4b1ce30bcd6303f6caf666b', '69be159004614580ef7e433453ccb0ca48f300a81d0942e13f495a907f6ecc27'], ['bc4a9df5b713fe2e9aef430bcc1dc97a0cd9ccede2f28588cada3a0d2d83f366', 'd3a81ca6e785c06383937adf4b798caa6e8a9fbfa547b16d758d666581f33c1'], ['8c28a97bf8298bc0d23d8c749452a32e694b65e30a9472a3954ab30fe5324caa', '40a30463a3305193378fedf31f7cc0eb7ae784f0451cb9459e71dc73cbef9482'], ['8ea9666139527a8c1dd94ce4f071fd23c8b350c5a4bb33748c4ba111faccae0', '620efabbc8ee2782e24e7c0cfb95c5d735b783be9cf0f8e955af34a30e62b945'], ['dd3625faef5ba06074669716bbd3788d89bdde815959968092f76cc4eb9a9787', '7a188fa3520e30d461da2501045731ca941461982883395937f68d00c644a573'], ['f710d79d9eb962297e4f6232b40e8f7feb2bc63814614d692c12de752408221e', 'ea98e67232d3b3295d3b535532115ccac8612c721851617526ae47a9c77bfc82']]\n  },\n  naf: {\n    wnd: 7,\n    points: [['f9308a019258c31049344f85f89d5229b531c845836f99b08601f113bce036f9', '388f7b0f632de8140fe337e62a37f3566500a99934c2231b6cb9fd7584b8e672'], ['2f8bde4d1a07209355b4a7250a5c5128e88b84bddc619ab7cba8d569b240efe4', 'd8ac222636e5e3d6d4dba9dda6c9c426f788271bab0d6840dca87d3aa6ac62d6'], ['5cbdf0646e5db4eaa398f365f2ea7a0e3d419b7e0330e39ce92bddedcac4f9bc', '6aebca40ba255960a3178d6d861a54dba813d0b813fde7b5a5082628087264da'], ['acd484e2f0c7f65309ad178a9f559abde09796974c57e714c35f110dfc27ccbe', 'cc338921b0a7d9fd64380971763b61e9add888a4375f8e0f05cc262ac64f9c37'], ['774ae7f858a9411e5ef4246b70c65aac5649980be5c17891bbec17895da008cb', 'd984a032eb6b5e190243dd56d7b7b365372db1e2dff9d6a8301d74c9c953c61b'], ['f28773c2d975288bc7d1d205c3748651b075fbc6610e58cddeeddf8f19405aa8', 'ab0902e8d880a89758212eb65cdaf473a1a06da521fa91f29b5cb52db03ed81'], ['d7924d4f7d43ea965a465ae3095ff41131e5946f3c85f79e44adbcf8e27e080e', '581e2872a86c72a683842ec228cc6defea40af2bd896d3a5c504dc9ff6a26b58'], ['defdea4cdb677750a420fee807eacf21eb9898ae79b9768766e4faa04a2d4a34', '4211ab0694635168e997b0ead2a93daeced1f4a04a95c0f6cfb199f69e56eb77'], ['2b4ea0a797a443d293ef5cff444f4979f06acfebd7e86d277475656138385b6c', '85e89bc037945d93b343083b5a1c86131a01f60c50269763b570c854e5c09b7a'], ['352bbf4a4cdd12564f93fa332ce333301d9ad40271f8107181340aef25be59d5', '321eb4075348f534d59c18259dda3e1f4a1b3b2e71b1039c67bd3d8bcf81998c'], ['2fa2104d6b38d11b0230010559879124e42ab8dfeff5ff29dc9cdadd4ecacc3f', '2de1068295dd865b64569335bd5dd80181d70ecfc882648423ba76b532b7d67'], ['9248279b09b4d68dab21a9b066edda83263c3d84e09572e269ca0cd7f5453714', '73016f7bf234aade5d1aa71bdea2b1ff3fc0de2a887912ffe54a32ce97cb3402'], ['daed4f2be3a8bf278e70132fb0beb7522f570e144bf615c07e996d443dee8729', 'a69dce4a7d6c98e8d4a1aca87ef8d7003f83c230f3afa726ab40e52290be1c55'], ['c44d12c7065d812e8acf28d7cbb19f9011ecd9e9fdf281b0e6a3b5e87d22e7db', '2119a460ce326cdc76c45926c982fdac0e106e861edf61c5a039063f0e0e6482'], ['6a245bf6dc698504c89a20cfded60853152b695336c28063b61c65cbd269e6b4', 'e022cf42c2bd4a708b3f5126f16a24ad8b33ba48d0423b6efd5e6348100d8a82'], ['1697ffa6fd9de627c077e3d2fe541084ce13300b0bec1146f95ae57f0d0bd6a5', 'b9c398f186806f5d27561506e4557433a2cf15009e498ae7adee9d63d01b2396'], ['605bdb019981718b986d0f07e834cb0d9deb8360ffb7f61df982345ef27a7479', '2972d2de4f8d20681a78d93ec96fe23c26bfae84fb14db43b01e1e9056b8c49'], ['62d14dab4150bf497402fdc45a215e10dcb01c354959b10cfe31c7e9d87ff33d', '80fc06bd8cc5b01098088a1950eed0db01aa132967ab472235f5642483b25eaf'], ['80c60ad0040f27dade5b4b06c408e56b2c50e9f56b9b8b425e555c2f86308b6f', '1c38303f1cc5c30f26e66bad7fe72f70a65eed4cbe7024eb1aa01f56430bd57a'], ['7a9375ad6167ad54aa74c6348cc54d344cc5dc9487d847049d5eabb0fa03c8fb', 'd0e3fa9eca8726909559e0d79269046bdc59ea10c70ce2b02d499ec224dc7f7'], ['d528ecd9b696b54c907a9ed045447a79bb408ec39b68df504bb51f459bc3ffc9', 'eecf41253136e5f99966f21881fd656ebc4345405c520dbc063465b521409933'], ['49370a4b5f43412ea25f514e8ecdad05266115e4a7ecb1387231808f8b45963', '758f3f41afd6ed428b3081b0512fd62a54c3f3afbb5b6764b653052a12949c9a'], ['77f230936ee88cbbd73df930d64702ef881d811e0e1498e2f1c13eb1fc345d74', '958ef42a7886b6400a08266e9ba1b37896c95330d97077cbbe8eb3c7671c60d6'], ['f2dac991cc4ce4b9ea44887e5c7c0bce58c80074ab9d4dbaeb28531b7739f530', 'e0dedc9b3b2f8dad4da1f32dec2531df9eb5fbeb0598e4fd1a117dba703a3c37'], ['463b3d9f662621fb1b4be8fbbe2520125a216cdfc9dae3debcba4850c690d45b', '5ed430d78c296c3543114306dd8622d7c622e27c970a1de31cb377b01af7307e'], ['f16f804244e46e2a09232d4aff3b59976b98fac14328a2d1a32496b49998f247', 'cedabd9b82203f7e13d206fcdf4e33d92a6c53c26e5cce26d6579962c4e31df6'], ['caf754272dc84563b0352b7a14311af55d245315ace27c65369e15f7151d41d1', 'cb474660ef35f5f2a41b643fa5e460575f4fa9b7962232a5c32f908318a04476'], ['2600ca4b282cb986f85d0f1709979d8b44a09c07cb86d7c124497bc86f082120', '4119b88753c15bd6a693b03fcddbb45d5ac6be74ab5f0ef44b0be9475a7e4b40'], ['7635ca72d7e8432c338ec53cd12220bc01c48685e24f7dc8c602a7746998e435', '91b649609489d613d1d5e590f78e6d74ecfc061d57048bad9e76f302c5b9c61'], ['754e3239f325570cdbbf4a87deee8a66b7f2b33479d468fbc1a50743bf56cc18', '673fb86e5bda30fb3cd0ed304ea49a023ee33d0197a695d0c5d98093c536683'], ['e3e6bd1071a1e96aff57859c82d570f0330800661d1c952f9fe2694691d9b9e8', '59c9e0bba394e76f40c0aa58379a3cb6a5a2283993e90c4167002af4920e37f5'], ['186b483d056a033826ae73d88f732985c4ccb1f32ba35f4b4cc47fdcf04aa6eb', '3b952d32c67cf77e2e17446e204180ab21fb8090895138b4a4a797f86e80888b'], ['df9d70a6b9876ce544c98561f4be4f725442e6d2b737d9c91a8321724ce0963f', '55eb2dafd84d6ccd5f862b785dc39d4ab157222720ef9da217b8c45cf2ba2417'], ['5edd5cc23c51e87a497ca815d5dce0f8ab52554f849ed8995de64c5f34ce7143', 'efae9c8dbc14130661e8cec030c89ad0c13c66c0d17a2905cdc706ab7399a868'], ['290798c2b6476830da12fe02287e9e777aa3fba1c355b17a722d362f84614fba', 'e38da76dcd440621988d00bcf79af25d5b29c094db2a23146d003afd41943e7a'], ['af3c423a95d9f5b3054754efa150ac39cd29552fe360257362dfdecef4053b45', 'f98a3fd831eb2b749a93b0e6f35cfb40c8cd5aa667a15581bc2feded498fd9c6'], ['766dbb24d134e745cccaa28c99bf274906bb66b26dcf98df8d2fed50d884249a', '744b1152eacbe5e38dcc887980da38b897584a65fa06cedd2c924f97cbac5996'], ['59dbf46f8c94759ba21277c33784f41645f7b44f6c596a58ce92e666191abe3e', 'c534ad44175fbc300f4ea6ce648309a042ce739a7919798cd85e216c4a307f6e'], ['f13ada95103c4537305e691e74e9a4a8dd647e711a95e73cb62dc6018cfd87b8', 'e13817b44ee14de663bf4bc808341f326949e21a6a75c2570778419bdaf5733d'], ['7754b4fa0e8aced06d4167a2c59cca4cda1869c06ebadfb6488550015a88522c', '30e93e864e669d82224b967c3020b8fa8d1e4e350b6cbcc537a48b57841163a2'], ['948dcadf5990e048aa3874d46abef9d701858f95de8041d2a6828c99e2262519', 'e491a42537f6e597d5d28a3224b1bc25df9154efbd2ef1d2cbba2cae5347d57e'], ['7962414450c76c1689c7b48f8202ec37fb224cf5ac0bfa1570328a8a3d7c77ab', '100b610ec4ffb4760d5c1fc133ef6f6b12507a051f04ac5760afa5b29db83437'], ['3514087834964b54b15b160644d915485a16977225b8847bb0dd085137ec47ca', 'ef0afbb2056205448e1652c48e8127fc6039e77c15c2378b7e7d15a0de293311'], ['d3cc30ad6b483e4bc79ce2c9dd8bc54993e947eb8df787b442943d3f7b527eaf', '8b378a22d827278d89c5e9be8f9508ae3c2ad46290358630afb34db04eede0a4'], ['1624d84780732860ce1c78fcbfefe08b2b29823db913f6493975ba0ff4847610', '68651cf9b6da903e0914448c6cd9d4ca896878f5282be4c8cc06e2a404078575'], ['733ce80da955a8a26902c95633e62a985192474b5af207da6df7b4fd5fc61cd4', 'f5435a2bd2badf7d485a4d8b8db9fcce3e1ef8e0201e4578c54673bc1dc5ea1d'], ['15d9441254945064cf1a1c33bbd3b49f8966c5092171e699ef258dfab81c045c', 'd56eb30b69463e7234f5137b73b84177434800bacebfc685fc37bbe9efe4070d'], ['a1d0fcf2ec9de675b612136e5ce70d271c21417c9d2b8aaaac138599d0717940', 'edd77f50bcb5a3cab2e90737309667f2641462a54070f3d519212d39c197a629'], ['e22fbe15c0af8ccc5780c0735f84dbe9a790badee8245c06c7ca37331cb36980', 'a855babad5cd60c88b430a69f53a1a7a38289154964799be43d06d77d31da06'], ['311091dd9860e8e20ee13473c1155f5f69635e394704eaa74009452246cfa9b3', '66db656f87d1f04fffd1f04788c06830871ec5a64feee685bd80f0b1286d8374'], ['34c1fd04d301be89b31c0442d3e6ac24883928b45a9340781867d4232ec2dbdf', '9414685e97b1b5954bd46f730174136d57f1ceeb487443dc5321857ba73abee'], ['f219ea5d6b54701c1c14de5b557eb42a8d13f3abbcd08affcc2a5e6b049b8d63', '4cb95957e83d40b0f73af4544cccf6b1f4b08d3c07b27fb8d8c2962a400766d1'], ['d7b8740f74a8fbaab1f683db8f45de26543a5490bca627087236912469a0b448', 'fa77968128d9c92ee1010f337ad4717eff15db5ed3c049b3411e0315eaa4593b'], ['32d31c222f8f6f0ef86f7c98d3a3335ead5bcd32abdd94289fe4d3091aa824bf', '5f3032f5892156e39ccd3d7915b9e1da2e6dac9e6f26e961118d14b8462e1661'], ['7461f371914ab32671045a155d9831ea8793d77cd59592c4340f86cbc18347b5', '8ec0ba238b96bec0cbdddcae0aa442542eee1ff50c986ea6b39847b3cc092ff6'], ['ee079adb1df1860074356a25aa38206a6d716b2c3e67453d287698bad7b2b2d6', '8dc2412aafe3be5c4c5f37e0ecc5f9f6a446989af04c4e25ebaac479ec1c8c1e'], ['16ec93e447ec83f0467b18302ee620f7e65de331874c9dc72bfd8616ba9da6b5', '5e4631150e62fb40d0e8c2a7ca5804a39d58186a50e497139626778e25b0674d'], ['eaa5f980c245f6f038978290afa70b6bd8855897f98b6aa485b96065d537bd99', 'f65f5d3e292c2e0819a528391c994624d784869d7e6ea67fb18041024edc07dc'], ['78c9407544ac132692ee1910a02439958ae04877151342ea96c4b6b35a49f51', 'f3e0319169eb9b85d5404795539a5e68fa1fbd583c064d2462b675f194a3ddb4'], ['494f4be219a1a77016dcd838431aea0001cdc8ae7a6fc688726578d9702857a5', '42242a969283a5f339ba7f075e36ba2af925ce30d767ed6e55f4b031880d562c'], ['a598a8030da6d86c6bc7f2f5144ea549d28211ea58faa70ebf4c1e665c1fe9b5', '204b5d6f84822c307e4b4a7140737aec23fc63b65b35f86a10026dbd2d864e6b'], ['c41916365abb2b5d09192f5f2dbeafec208f020f12570a184dbadc3e58595997', '4f14351d0087efa49d245b328984989d5caf9450f34bfc0ed16e96b58fa9913'], ['841d6063a586fa475a724604da03bc5b92a2e0d2e0a36acfe4c73a5514742881', '73867f59c0659e81904f9a1c7543698e62562d6744c169ce7a36de01a8d6154'], ['5e95bb399a6971d376026947f89bde2f282b33810928be4ded112ac4d70e20d5', '39f23f366809085beebfc71181313775a99c9aed7d8ba38b161384c746012865'], ['36e4641a53948fd476c39f8a99fd974e5ec07564b5315d8bf99471bca0ef2f66', 'd2424b1b1abe4eb8164227b085c9aa9456ea13493fd563e06fd51cf5694c78fc'], ['336581ea7bfbbb290c191a2f507a41cf5643842170e914faeab27c2c579f726', 'ead12168595fe1be99252129b6e56b3391f7ab1410cd1e0ef3dcdcabd2fda224'], ['8ab89816dadfd6b6a1f2634fcf00ec8403781025ed6890c4849742706bd43ede', '6fdcef09f2f6d0a044e654aef624136f503d459c3e89845858a47a9129cdd24e'], ['1e33f1a746c9c5778133344d9299fcaa20b0938e8acff2544bb40284b8c5fb94', '60660257dd11b3aa9c8ed618d24edff2306d320f1d03010e33a7d2057f3b3b6'], ['85b7c1dcb3cec1b7ee7f30ded79dd20a0ed1f4cc18cbcfcfa410361fd8f08f31', '3d98a9cdd026dd43f39048f25a8847f4fcafad1895d7a633c6fed3c35e999511'], ['29df9fbd8d9e46509275f4b125d6d45d7fbe9a3b878a7af872a2800661ac5f51', 'b4c4fe99c775a606e2d8862179139ffda61dc861c019e55cd2876eb2a27d84b'], ['a0b1cae06b0a847a3fea6e671aaf8adfdfe58ca2f768105c8082b2e449fce252', 'ae434102edde0958ec4b19d917a6a28e6b72da1834aff0e650f049503a296cf2'], ['4e8ceafb9b3e9a136dc7ff67e840295b499dfb3b2133e4ba113f2e4c0e121e5', 'cf2174118c8b6d7a4b48f6d534ce5c79422c086a63460502b827ce62a326683c'], ['d24a44e047e19b6f5afb81c7ca2f69080a5076689a010919f42725c2b789a33b', '6fb8d5591b466f8fc63db50f1c0f1c69013f996887b8244d2cdec417afea8fa3'], ['ea01606a7a6c9cdd249fdfcfacb99584001edd28abbab77b5104e98e8e3b35d4', '322af4908c7312b0cfbfe369f7a7b3cdb7d4494bc2823700cfd652188a3ea98d'], ['af8addbf2b661c8a6c6328655eb96651252007d8c5ea31be4ad196de8ce2131f', '6749e67c029b85f52a034eafd096836b2520818680e26ac8f3dfbcdb71749700'], ['e3ae1974566ca06cc516d47e0fb165a674a3dabcfca15e722f0e3450f45889', '2aeabe7e4531510116217f07bf4d07300de97e4874f81f533420a72eeb0bd6a4'], ['591ee355313d99721cf6993ffed1e3e301993ff3ed258802075ea8ced397e246', 'b0ea558a113c30bea60fc4775460c7901ff0b053d25ca2bdeee98f1a4be5d196'], ['11396d55fda54c49f19aa97318d8da61fa8584e47b084945077cf03255b52984', '998c74a8cd45ac01289d5833a7beb4744ff536b01b257be4c5767bea93ea57a4'], ['3c5d2a1ba39c5a1790000738c9e0c40b8dcdfd5468754b6405540157e017aa7a', 'b2284279995a34e2f9d4de7396fc18b80f9b8b9fdd270f6661f79ca4c81bd257'], ['cc8704b8a60a0defa3a99a7299f2e9c3fbc395afb04ac078425ef8a1793cc030', 'bdd46039feed17881d1e0862db347f8cf395b74fc4bcdc4e940b74e3ac1f1b13'], ['c533e4f7ea8555aacd9777ac5cad29b97dd4defccc53ee7ea204119b2889b197', '6f0a256bc5efdf429a2fb6242f1a43a2d9b925bb4a4b3a26bb8e0f45eb596096'], ['c14f8f2ccb27d6f109f6d08d03cc96a69ba8c34eec07bbcf566d48e33da6593', 'c359d6923bb398f7fd4473e16fe1c28475b740dd098075e6c0e8649113dc3a38'], ['a6cbc3046bc6a450bac24789fa17115a4c9739ed75f8f21ce441f72e0b90e6ef', '21ae7f4680e889bb130619e2c0f95a360ceb573c70603139862afd617fa9b9f'], ['347d6d9a02c48927ebfb86c1359b1caf130a3c0267d11ce6344b39f99d43cc38', '60ea7f61a353524d1c987f6ecec92f086d565ab687870cb12689ff1e31c74448'], ['da6545d2181db8d983f7dcb375ef5866d47c67b1bf31c8cf855ef7437b72656a', '49b96715ab6878a79e78f07ce5680c5d6673051b4935bd897fea824b77dc208a'], ['c40747cc9d012cb1a13b8148309c6de7ec25d6945d657146b9d5994b8feb1111', '5ca560753be2a12fc6de6caf2cb489565db936156b9514e1bb5e83037e0fa2d4'], ['4e42c8ec82c99798ccf3a610be870e78338c7f713348bd34c8203ef4037f3502', '7571d74ee5e0fb92a7a8b33a07783341a5492144cc54bcc40a94473693606437'], ['3775ab7089bc6af823aba2e1af70b236d251cadb0c86743287522a1b3b0dedea', 'be52d107bcfa09d8bcb9736a828cfa7fac8db17bf7a76a2c42ad961409018cf7'], ['cee31cbf7e34ec379d94fb814d3d775ad954595d1314ba8846959e3e82f74e26', '8fd64a14c06b589c26b947ae2bcf6bfa0149ef0be14ed4d80f448a01c43b1c6d'], ['b4f9eaea09b6917619f6ea6a4eb5464efddb58fd45b1ebefcdc1a01d08b47986', '39e5c9925b5a54b07433a4f18c61726f8bb131c012ca542eb24a8ac07200682a'], ['d4263dfc3d2df923a0179a48966d30ce84e2515afc3dccc1b77907792ebcc60e', '62dfaf07a0f78feb30e30d6295853ce189e127760ad6cf7fae164e122a208d54'], ['48457524820fa65a4f8d35eb6930857c0032acc0a4a2de422233eeda897612c4', '25a748ab367979d98733c38a1fa1c2e7dc6cc07db2d60a9ae7a76aaa49bd0f77'], ['dfeeef1881101f2cb11644f3a2afdfc2045e19919152923f367a1767c11cceda', 'ecfb7056cf1de042f9420bab396793c0c390bde74b4bbdff16a83ae09a9a7517'], ['6d7ef6b17543f8373c573f44e1f389835d89bcbc6062ced36c82df83b8fae859', 'cd450ec335438986dfefa10c57fea9bcc521a0959b2d80bbf74b190dca712d10'], ['e75605d59102a5a2684500d3b991f2e3f3c88b93225547035af25af66e04541f', 'f5c54754a8f71ee540b9b48728473e314f729ac5308b06938360990e2bfad125'], ['eb98660f4c4dfaa06a2be453d5020bc99a0c2e60abe388457dd43fefb1ed620c', '6cb9a8876d9cb8520609af3add26cd20a0a7cd8a9411131ce85f44100099223e'], ['13e87b027d8514d35939f2e6892b19922154596941888336dc3563e3b8dba942', 'fef5a3c68059a6dec5d624114bf1e91aac2b9da568d6abeb2570d55646b8adf1'], ['ee163026e9fd6fe017c38f06a5be6fc125424b371ce2708e7bf4491691e5764a', '1acb250f255dd61c43d94ccc670d0f58f49ae3fa15b96623e5430da0ad6c62b2'], ['b268f5ef9ad51e4d78de3a750c2dc89b1e626d43505867999932e5db33af3d80', '5f310d4b3c99b9ebb19f77d41c1dee018cf0d34fd4191614003e945a1216e423'], ['ff07f3118a9df035e9fad85eb6c7bfe42b02f01ca99ceea3bf7ffdba93c4750d', '438136d603e858a3a5c440c38eccbaddc1d2942114e2eddd4740d098ced1f0d8'], ['8d8b9855c7c052a34146fd20ffb658bea4b9f69e0d825ebec16e8c3ce2b526a1', 'cdb559eedc2d79f926baf44fb84ea4d44bcf50fee51d7ceb30e2e7f463036758'], ['52db0b5384dfbf05bfa9d472d7ae26dfe4b851ceca91b1eba54263180da32b63', 'c3b997d050ee5d423ebaf66a6db9f57b3180c902875679de924b69d84a7b375'], ['e62f9490d3d51da6395efd24e80919cc7d0f29c3f3fa48c6fff543becbd43352', '6d89ad7ba4876b0b22c2ca280c682862f342c8591f1daf5170e07bfd9ccafa7d'], ['7f30ea2476b399b4957509c88f77d0191afa2ff5cb7b14fd6d8e7d65aaab1193', 'ca5ef7d4b231c94c3b15389a5f6311e9daff7bb67b103e9880ef4bff637acaec'], ['5098ff1e1d9f14fb46a210fada6c903fef0fb7b4a1dd1d9ac60a0361800b7a00', '9731141d81fc8f8084d37c6e7542006b3ee1b40d60dfe5362a5b132fd17ddc0'], ['32b78c7de9ee512a72895be6b9cbefa6e2f3c4ccce445c96b9f2c81e2778ad58', 'ee1849f513df71e32efc3896ee28260c73bb80547ae2275ba497237794c8753c'], ['e2cb74fddc8e9fbcd076eef2a7c72b0ce37d50f08269dfc074b581550547a4f7', 'd3aa2ed71c9dd2247a62df062736eb0baddea9e36122d2be8641abcb005cc4a4'], ['8438447566d4d7bedadc299496ab357426009a35f235cb141be0d99cd10ae3a8', 'c4e1020916980a4da5d01ac5e6ad330734ef0d7906631c4f2390426b2edd791f'], ['4162d488b89402039b584c6fc6c308870587d9c46f660b878ab65c82c711d67e', '67163e903236289f776f22c25fb8a3afc1732f2b84b4e95dbda47ae5a0852649'], ['3fad3fa84caf0f34f0f89bfd2dcf54fc175d767aec3e50684f3ba4a4bf5f683d', 'cd1bc7cb6cc407bb2f0ca647c718a730cf71872e7d0d2a53fa20efcdfe61826'], ['674f2600a3007a00568c1a7ce05d0816c1fb84bf1370798f1c69532faeb1a86b', '299d21f9413f33b3edf43b257004580b70db57da0b182259e09eecc69e0d38a5'], ['d32f4da54ade74abb81b815ad1fb3b263d82d6c692714bcff87d29bd5ee9f08f', 'f9429e738b8e53b968e99016c059707782e14f4535359d582fc416910b3eea87'], ['30e4e670435385556e593657135845d36fbb6931f72b08cb1ed954f1e3ce3ff6', '462f9bce619898638499350113bbc9b10a878d35da70740dc695a559eb88db7b'], ['be2062003c51cc3004682904330e4dee7f3dcd10b01e580bf1971b04d4cad297', '62188bc49d61e5428573d48a74e1c655b1c61090905682a0d5558ed72dccb9bc'], ['93144423ace3451ed29e0fb9ac2af211cb6e84a601df5993c419859fff5df04a', '7c10dfb164c3425f5c71a3f9d7992038f1065224f72bb9d1d902a6d13037b47c'], ['b015f8044f5fcbdcf21ca26d6c34fb8197829205c7b7d2a7cb66418c157b112c', 'ab8c1e086d04e813744a655b2df8d5f83b3cdc6faa3088c1d3aea1454e3a1d5f'], ['d5e9e1da649d97d89e4868117a465a3a4f8a18de57a140d36b3f2af341a21b52', '4cb04437f391ed73111a13cc1d4dd0db1693465c2240480d8955e8592f27447a'], ['d3ae41047dd7ca065dbf8ed77b992439983005cd72e16d6f996a5316d36966bb', 'bd1aeb21ad22ebb22a10f0303417c6d964f8cdd7df0aca614b10dc14d125ac46'], ['463e2763d885f958fc66cdd22800f0a487197d0a82e377b49f80af87c897b065', 'bfefacdb0e5d0fd7df3a311a94de062b26b80c61fbc97508b79992671ef7ca7f'], ['7985fdfd127c0567c6f53ec1bb63ec3158e597c40bfe747c83cddfc910641917', '603c12daf3d9862ef2b25fe1de289aed24ed291e0ec6708703a5bd567f32ed03'], ['74a1ad6b5f76e39db2dd249410eac7f99e74c59cb83d2d0ed5ff1543da7703e9', 'cc6157ef18c9c63cd6193d83631bbea0093e0968942e8c33d5737fd790e0db08'], ['30682a50703375f602d416664ba19b7fc9bab42c72747463a71d0896b22f6da3', '553e04f6b018b4fa6c8f39e7f311d3176290d0e0f19ca73f17714d9977a22ff8'], ['9e2158f0d7c0d5f26c3791efefa79597654e7a2b2464f52b1ee6c1347769ef57', '712fcdd1b9053f09003a3481fa7762e9ffd7c8ef35a38509e2fbf2629008373'], ['176e26989a43c9cfeba4029c202538c28172e566e3c4fce7322857f3be327d66', 'ed8cc9d04b29eb877d270b4878dc43c19aefd31f4eee09ee7b47834c1fa4b1c3'], ['75d46efea3771e6e68abb89a13ad747ecf1892393dfc4f1b7004788c50374da8', '9852390a99507679fd0b86fd2b39a868d7efc22151346e1a3ca4726586a6bed8'], ['809a20c67d64900ffb698c4c825f6d5f2310fb0451c869345b7319f645605721', '9e994980d9917e22b76b061927fa04143d096ccc54963e6a5ebfa5f3f8e286c1'], ['1b38903a43f7f114ed4500b4eac7083fdefece1cf29c63528d563446f972c180', '4036edc931a60ae889353f77fd53de4a2708b26b6f5da72ad3394119daf408f9']]\n  }\n};","'use strict';\n\nfunction _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nvar BN = require('bn.js');\n\nvar HmacDRBG = require('hmac-drbg');\n\nvar utils = require('../utils');\n\nvar curves = require('../curves');\n\nvar rand = require('brorand');\n\nvar assert = utils.assert;\n\nvar KeyPair = require('./key');\n\nvar Signature = require('./signature');\n\nfunction EC(options) {\n  if (!(this instanceof EC)) return new EC(options); // Shortcut `elliptic.ec(curve-name)`\n\n  if (typeof options === 'string') {\n    assert(curves.hasOwnProperty(options), 'Unknown curve ' + options);\n    options = curves[options];\n  } // Shortcut for `elliptic.ec(elliptic.curves.curveName)`\n\n\n  if (options instanceof curves.PresetCurve) options = {\n    curve: options\n  };\n  this.curve = options.curve.curve;\n  this.n = this.curve.n;\n  this.nh = this.n.ushrn(1);\n  this.g = this.curve.g; // Point on curve\n\n  this.g = options.curve.g;\n  this.g.precompute(options.curve.n.bitLength() + 1); // Hash for function for DRBG\n\n  this.hash = options.hash || options.curve.hash;\n}\n\nmodule.exports = EC;\n\nEC.prototype.keyPair = function keyPair(options) {\n  return new KeyPair(this, options);\n};\n\nEC.prototype.keyFromPrivate = function keyFromPrivate(priv, enc) {\n  return KeyPair.fromPrivate(this, priv, enc);\n};\n\nEC.prototype.keyFromPublic = function keyFromPublic(pub, enc) {\n  return KeyPair.fromPublic(this, pub, enc);\n};\n\nEC.prototype.genKeyPair = function genKeyPair(options) {\n  if (!options) options = {}; // Instantiate Hmac_DRBG\n\n  var drbg = new HmacDRBG({\n    hash: this.hash,\n    pers: options.pers,\n    persEnc: options.persEnc || 'utf8',\n    entropy: options.entropy || rand(this.hash.hmacStrength),\n    entropyEnc: options.entropy && options.entropyEnc || 'utf8',\n    nonce: this.n.toArray()\n  });\n  var bytes = this.n.byteLength();\n  var ns2 = this.n.sub(new BN(2));\n\n  do {\n    var priv = new BN(drbg.generate(bytes));\n    if (priv.cmp(ns2) > 0) continue;\n    priv.iaddn(1);\n    return this.keyFromPrivate(priv);\n  } while (true);\n};\n\nEC.prototype._truncateToN = function truncateToN(msg, truncOnly) {\n  var delta = msg.byteLength() * 8 - this.n.bitLength();\n  if (delta > 0) msg = msg.ushrn(delta);\n  if (!truncOnly && msg.cmp(this.n) >= 0) return msg.sub(this.n);else return msg;\n};\n\nEC.prototype.sign = function sign(msg, key, enc, options) {\n  if (_typeof(enc) === 'object') {\n    options = enc;\n    enc = null;\n  }\n\n  if (!options) options = {};\n  key = this.keyFromPrivate(key, enc);\n  msg = this._truncateToN(new BN(msg, 16)); // Zero-extend key to provide enough entropy\n\n  var bytes = this.n.byteLength();\n  var bkey = key.getPrivate().toArray('be', bytes); // Zero-extend nonce to have the same byte size as N\n\n  var nonce = msg.toArray('be', bytes); // Instantiate Hmac_DRBG\n\n  var drbg = new HmacDRBG({\n    hash: this.hash,\n    entropy: bkey,\n    nonce: nonce,\n    pers: options.pers,\n    persEnc: options.persEnc || 'utf8'\n  }); // Number of bytes to generate\n\n  var ns1 = this.n.sub(new BN(1));\n\n  for (var iter = 0; true; iter++) {\n    var k = options.k ? options.k(iter) : new BN(drbg.generate(this.n.byteLength()));\n    k = this._truncateToN(k, true);\n    if (k.cmpn(1) <= 0 || k.cmp(ns1) >= 0) continue;\n    var kp = this.g.mul(k);\n    if (kp.isInfinity()) continue;\n    var kpX = kp.getX();\n    var r = kpX.umod(this.n);\n    if (r.cmpn(0) === 0) continue;\n    var s = k.invm(this.n).mul(r.mul(key.getPrivate()).iadd(msg));\n    s = s.umod(this.n);\n    if (s.cmpn(0) === 0) continue;\n    var recoveryParam = (kp.getY().isOdd() ? 1 : 0) | (kpX.cmp(r) !== 0 ? 2 : 0); // Use complement of `s`, if it is > `n / 2`\n\n    if (options.canonical && s.cmp(this.nh) > 0) {\n      s = this.n.sub(s);\n      recoveryParam ^= 1;\n    }\n\n    return new Signature({\n      r: r,\n      s: s,\n      recoveryParam: recoveryParam\n    });\n  }\n};\n\nEC.prototype.verify = function verify(msg, signature, key, enc) {\n  msg = this._truncateToN(new BN(msg, 16));\n  key = this.keyFromPublic(key, enc);\n  signature = new Signature(signature, 'hex'); // Perform primitive values validation\n\n  var r = signature.r;\n  var s = signature.s;\n  if (r.cmpn(1) < 0 || r.cmp(this.n) >= 0) return false;\n  if (s.cmpn(1) < 0 || s.cmp(this.n) >= 0) return false; // Validate signature\n\n  var sinv = s.invm(this.n);\n  var u1 = sinv.mul(msg).umod(this.n);\n  var u2 = sinv.mul(r).umod(this.n);\n\n  if (!this.curve._maxwellTrick) {\n    var p = this.g.mulAdd(u1, key.getPublic(), u2);\n    if (p.isInfinity()) return false;\n    return p.getX().umod(this.n).cmp(r) === 0;\n  } // NOTE: Greg Maxwell's trick, inspired by:\n  // https://git.io/vad3K\n\n\n  var p = this.g.jmulAdd(u1, key.getPublic(), u2);\n  if (p.isInfinity()) return false; // Compare `p.x` of Jacobian point with `r`,\n  // this will do `p.x == r * p.z^2` instead of multiplying `p.x` by the\n  // inverse of `p.z^2`\n\n  return p.eqXToP(r);\n};\n\nEC.prototype.recoverPubKey = function (msg, signature, j, enc) {\n  assert((3 & j) === j, 'The recovery param is more than two bits');\n  signature = new Signature(signature, enc);\n  var n = this.n;\n  var e = new BN(msg);\n  var r = signature.r;\n  var s = signature.s; // A set LSB signifies that the y-coordinate is odd\n\n  var isYOdd = j & 1;\n  var isSecondKey = j >> 1;\n  if (r.cmp(this.curve.p.umod(this.curve.n)) >= 0 && isSecondKey) throw new Error('Unable to find sencond key candinate'); // 1.1. Let x = r + jn.\n\n  if (isSecondKey) r = this.curve.pointFromX(r.add(this.curve.n), isYOdd);else r = this.curve.pointFromX(r, isYOdd);\n  var rInv = signature.r.invm(n);\n  var s1 = n.sub(e).mul(rInv).umod(n);\n  var s2 = s.mul(rInv).umod(n); // 1.6.1 Compute Q = r^-1 (sR -  eG)\n  //               Q = r^-1 (sR + -eG)\n\n  return this.g.mulAdd(s1, r, s2);\n};\n\nEC.prototype.getKeyRecoveryParam = function (e, signature, Q, enc) {\n  signature = new Signature(signature, enc);\n  if (signature.recoveryParam !== null) return signature.recoveryParam;\n\n  for (var i = 0; i < 4; i++) {\n    var Qprime;\n\n    try {\n      Qprime = this.recoverPubKey(e, signature, i);\n    } catch (e) {\n      continue;\n    }\n\n    if (Qprime.eq(Q)) return i;\n  }\n\n  throw new Error('Unable to find valid recovery factor');\n};","'use strict';\n\nvar hash = require('hash.js');\n\nvar utils = require('minimalistic-crypto-utils');\n\nvar assert = require('minimalistic-assert');\n\nfunction HmacDRBG(options) {\n  if (!(this instanceof HmacDRBG)) return new HmacDRBG(options);\n  this.hash = options.hash;\n  this.predResist = !!options.predResist;\n  this.outLen = this.hash.outSize;\n  this.minEntropy = options.minEntropy || this.hash.hmacStrength;\n  this._reseed = null;\n  this.reseedInterval = null;\n  this.K = null;\n  this.V = null;\n  var entropy = utils.toArray(options.entropy, options.entropyEnc || 'hex');\n  var nonce = utils.toArray(options.nonce, options.nonceEnc || 'hex');\n  var pers = utils.toArray(options.pers, options.persEnc || 'hex');\n  assert(entropy.length >= this.minEntropy / 8, 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits');\n\n  this._init(entropy, nonce, pers);\n}\n\nmodule.exports = HmacDRBG;\n\nHmacDRBG.prototype._init = function init(entropy, nonce, pers) {\n  var seed = entropy.concat(nonce).concat(pers);\n  this.K = new Array(this.outLen / 8);\n  this.V = new Array(this.outLen / 8);\n\n  for (var i = 0; i < this.V.length; i++) {\n    this.K[i] = 0x00;\n    this.V[i] = 0x01;\n  }\n\n  this._update(seed);\n\n  this._reseed = 1;\n  this.reseedInterval = 0x1000000000000; // 2^48\n};\n\nHmacDRBG.prototype._hmac = function hmac() {\n  return new hash.hmac(this.hash, this.K);\n};\n\nHmacDRBG.prototype._update = function update(seed) {\n  var kmac = this._hmac().update(this.V).update([0x00]);\n\n  if (seed) kmac = kmac.update(seed);\n  this.K = kmac.digest();\n  this.V = this._hmac().update(this.V).digest();\n  if (!seed) return;\n  this.K = this._hmac().update(this.V).update([0x01]).update(seed).digest();\n  this.V = this._hmac().update(this.V).digest();\n};\n\nHmacDRBG.prototype.reseed = function reseed(entropy, entropyEnc, add, addEnc) {\n  // Optional entropy enc\n  if (typeof entropyEnc !== 'string') {\n    addEnc = add;\n    add = entropyEnc;\n    entropyEnc = null;\n  }\n\n  entropy = utils.toArray(entropy, entropyEnc);\n  add = utils.toArray(add, addEnc);\n  assert(entropy.length >= this.minEntropy / 8, 'Not enough entropy. Minimum is: ' + this.minEntropy + ' bits');\n\n  this._update(entropy.concat(add || []));\n\n  this._reseed = 1;\n};\n\nHmacDRBG.prototype.generate = function generate(len, enc, add, addEnc) {\n  if (this._reseed > this.reseedInterval) throw new Error('Reseed is required'); // Optional encoding\n\n  if (typeof enc !== 'string') {\n    addEnc = add;\n    add = enc;\n    enc = null;\n  } // Optional additional data\n\n\n  if (add) {\n    add = utils.toArray(add, addEnc || 'hex');\n\n    this._update(add);\n  }\n\n  var temp = [];\n\n  while (temp.length < len) {\n    this.V = this._hmac().update(this.V).digest();\n    temp = temp.concat(this.V);\n  }\n\n  var res = temp.slice(0, len);\n\n  this._update(add);\n\n  this._reseed++;\n  return utils.encode(res, enc);\n};","'use strict';\n\nvar BN = require('bn.js');\n\nvar utils = require('../utils');\n\nvar assert = utils.assert;\n\nfunction KeyPair(ec, options) {\n  this.ec = ec;\n  this.priv = null;\n  this.pub = null; // KeyPair(ec, { priv: ..., pub: ... })\n\n  if (options.priv) this._importPrivate(options.priv, options.privEnc);\n  if (options.pub) this._importPublic(options.pub, options.pubEnc);\n}\n\nmodule.exports = KeyPair;\n\nKeyPair.fromPublic = function fromPublic(ec, pub, enc) {\n  if (pub instanceof KeyPair) return pub;\n  return new KeyPair(ec, {\n    pub: pub,\n    pubEnc: enc\n  });\n};\n\nKeyPair.fromPrivate = function fromPrivate(ec, priv, enc) {\n  if (priv instanceof KeyPair) return priv;\n  return new KeyPair(ec, {\n    priv: priv,\n    privEnc: enc\n  });\n};\n\nKeyPair.prototype.validate = function validate() {\n  var pub = this.getPublic();\n  if (pub.isInfinity()) return {\n    result: false,\n    reason: 'Invalid public key'\n  };\n  if (!pub.validate()) return {\n    result: false,\n    reason: 'Public key is not a point'\n  };\n  if (!pub.mul(this.ec.curve.n).isInfinity()) return {\n    result: false,\n    reason: 'Public key * N != O'\n  };\n  return {\n    result: true,\n    reason: null\n  };\n};\n\nKeyPair.prototype.getPublic = function getPublic(compact, enc) {\n  // compact is optional argument\n  if (typeof compact === 'string') {\n    enc = compact;\n    compact = null;\n  }\n\n  if (!this.pub) this.pub = this.ec.g.mul(this.priv);\n  if (!enc) return this.pub;\n  return this.pub.encode(enc, compact);\n};\n\nKeyPair.prototype.getPrivate = function getPrivate(enc) {\n  if (enc === 'hex') return this.priv.toString(16, 2);else return this.priv;\n};\n\nKeyPair.prototype._importPrivate = function _importPrivate(key, enc) {\n  this.priv = new BN(key, enc || 16); // Ensure that the priv won't be bigger than n, otherwise we may fail\n  // in fixed multiplication method\n\n  this.priv = this.priv.umod(this.ec.curve.n);\n};\n\nKeyPair.prototype._importPublic = function _importPublic(key, enc) {\n  if (key.x || key.y) {\n    // Montgomery points only have an `x` coordinate.\n    // Weierstrass/Edwards points on the other hand have both `x` and\n    // `y` coordinates.\n    if (this.ec.curve.type === 'mont') {\n      assert(key.x, 'Need x coordinate');\n    } else if (this.ec.curve.type === 'short' || this.ec.curve.type === 'edwards') {\n      assert(key.x && key.y, 'Need both x and y coordinate');\n    }\n\n    this.pub = this.ec.curve.point(key.x, key.y);\n    return;\n  }\n\n  this.pub = this.ec.curve.decodePoint(key, enc);\n}; // ECDH\n\n\nKeyPair.prototype.derive = function derive(pub) {\n  return pub.mul(this.priv).getX();\n}; // ECDSA\n\n\nKeyPair.prototype.sign = function sign(msg, enc, options) {\n  return this.ec.sign(msg, this, enc, options);\n};\n\nKeyPair.prototype.verify = function verify(msg, signature) {\n  return this.ec.verify(msg, signature, this);\n};\n\nKeyPair.prototype.inspect = function inspect() {\n  return '<Key priv: ' + (this.priv && this.priv.toString(16, 2)) + ' pub: ' + (this.pub && this.pub.inspect()) + ' >';\n};","'use strict';\n\nvar BN = require('bn.js');\n\nvar utils = require('../utils');\n\nvar assert = utils.assert;\n\nfunction Signature(options, enc) {\n  if (options instanceof Signature) return options;\n  if (this._importDER(options, enc)) return;\n  assert(options.r && options.s, 'Signature without r or s');\n  this.r = new BN(options.r, 16);\n  this.s = new BN(options.s, 16);\n  if (options.recoveryParam === undefined) this.recoveryParam = null;else this.recoveryParam = options.recoveryParam;\n}\n\nmodule.exports = Signature;\n\nfunction Position() {\n  this.place = 0;\n}\n\nfunction getLength(buf, p) {\n  var initial = buf[p.place++];\n\n  if (!(initial & 0x80)) {\n    return initial;\n  }\n\n  var octetLen = initial & 0xf;\n  var val = 0;\n\n  for (var i = 0, off = p.place; i < octetLen; i++, off++) {\n    val <<= 8;\n    val |= buf[off];\n  }\n\n  p.place = off;\n  return val;\n}\n\nfunction rmPadding(buf) {\n  var i = 0;\n  var len = buf.length - 1;\n\n  while (!buf[i] && !(buf[i + 1] & 0x80) && i < len) {\n    i++;\n  }\n\n  if (i === 0) {\n    return buf;\n  }\n\n  return buf.slice(i);\n}\n\nSignature.prototype._importDER = function _importDER(data, enc) {\n  data = utils.toArray(data, enc);\n  var p = new Position();\n\n  if (data[p.place++] !== 0x30) {\n    return false;\n  }\n\n  var len = getLength(data, p);\n\n  if (len + p.place !== data.length) {\n    return false;\n  }\n\n  if (data[p.place++] !== 0x02) {\n    return false;\n  }\n\n  var rlen = getLength(data, p);\n  var r = data.slice(p.place, rlen + p.place);\n  p.place += rlen;\n\n  if (data[p.place++] !== 0x02) {\n    return false;\n  }\n\n  var slen = getLength(data, p);\n\n  if (data.length !== slen + p.place) {\n    return false;\n  }\n\n  var s = data.slice(p.place, slen + p.place);\n\n  if (r[0] === 0 && r[1] & 0x80) {\n    r = r.slice(1);\n  }\n\n  if (s[0] === 0 && s[1] & 0x80) {\n    s = s.slice(1);\n  }\n\n  this.r = new BN(r);\n  this.s = new BN(s);\n  this.recoveryParam = null;\n  return true;\n};\n\nfunction constructLength(arr, len) {\n  if (len < 0x80) {\n    arr.push(len);\n    return;\n  }\n\n  var octets = 1 + (Math.log(len) / Math.LN2 >>> 3);\n  arr.push(octets | 0x80);\n\n  while (--octets) {\n    arr.push(len >>> (octets << 3) & 0xff);\n  }\n\n  arr.push(len);\n}\n\nSignature.prototype.toDER = function toDER(enc) {\n  var r = this.r.toArray();\n  var s = this.s.toArray(); // Pad values\n\n  if (r[0] & 0x80) r = [0].concat(r); // Pad values\n\n  if (s[0] & 0x80) s = [0].concat(s);\n  r = rmPadding(r);\n  s = rmPadding(s);\n\n  while (!s[0] && !(s[1] & 0x80)) {\n    s = s.slice(1);\n  }\n\n  var arr = [0x02];\n  constructLength(arr, r.length);\n  arr = arr.concat(r);\n  arr.push(0x02);\n  constructLength(arr, s.length);\n  var backHalf = arr.concat(s);\n  var res = [0x30];\n  constructLength(res, backHalf.length);\n  res = res.concat(backHalf);\n  return utils.encode(res, enc);\n};","'use strict';\n\nvar hash = require('hash.js');\n\nvar curves = require('../curves');\n\nvar utils = require('../utils');\n\nvar assert = utils.assert;\nvar parseBytes = utils.parseBytes;\n\nvar KeyPair = require('./key');\n\nvar Signature = require('./signature');\n\nfunction EDDSA(curve) {\n  assert(curve === 'ed25519', 'only tested with ed25519 so far');\n  if (!(this instanceof EDDSA)) return new EDDSA(curve);\n  var curve = curves[curve].curve;\n  this.curve = curve;\n  this.g = curve.g;\n  this.g.precompute(curve.n.bitLength() + 1);\n  this.pointClass = curve.point().constructor;\n  this.encodingLength = Math.ceil(curve.n.bitLength() / 8);\n  this.hash = hash.sha512;\n}\n\nmodule.exports = EDDSA;\n/**\n* @param {Array|String} message - message bytes\n* @param {Array|String|KeyPair} secret - secret bytes or a keypair\n* @returns {Signature} - signature\n*/\n\nEDDSA.prototype.sign = function sign(message, secret) {\n  message = parseBytes(message);\n  var key = this.keyFromSecret(secret);\n  var r = this.hashInt(key.messagePrefix(), message);\n  var R = this.g.mul(r);\n  var Rencoded = this.encodePoint(R);\n  var s_ = this.hashInt(Rencoded, key.pubBytes(), message).mul(key.priv());\n  var S = r.add(s_).umod(this.curve.n);\n  return this.makeSignature({\n    R: R,\n    S: S,\n    Rencoded: Rencoded\n  });\n};\n/**\n* @param {Array} message - message bytes\n* @param {Array|String|Signature} sig - sig bytes\n* @param {Array|String|Point|KeyPair} pub - public key\n* @returns {Boolean} - true if public key matches sig of message\n*/\n\n\nEDDSA.prototype.verify = function verify(message, sig, pub) {\n  message = parseBytes(message);\n  sig = this.makeSignature(sig);\n  var key = this.keyFromPublic(pub);\n  var h = this.hashInt(sig.Rencoded(), key.pubBytes(), message);\n  var SG = this.g.mul(sig.S());\n  var RplusAh = sig.R().add(key.pub().mul(h));\n  return RplusAh.eq(SG);\n};\n\nEDDSA.prototype.hashInt = function hashInt() {\n  var hash = this.hash();\n\n  for (var i = 0; i < arguments.length; i++) {\n    hash.update(arguments[i]);\n  }\n\n  return utils.intFromLE(hash.digest()).umod(this.curve.n);\n};\n\nEDDSA.prototype.keyFromPublic = function keyFromPublic(pub) {\n  return KeyPair.fromPublic(this, pub);\n};\n\nEDDSA.prototype.keyFromSecret = function keyFromSecret(secret) {\n  return KeyPair.fromSecret(this, secret);\n};\n\nEDDSA.prototype.makeSignature = function makeSignature(sig) {\n  if (sig instanceof Signature) return sig;\n  return new Signature(this, sig);\n};\n/**\n* * https://tools.ietf.org/html/draft-josefsson-eddsa-ed25519-03#section-5.2\n*\n* EDDSA defines methods for encoding and decoding points and integers. These are\n* helper convenience methods, that pass along to utility functions implied\n* parameters.\n*\n*/\n\n\nEDDSA.prototype.encodePoint = function encodePoint(point) {\n  var enc = point.getY().toArray('le', this.encodingLength);\n  enc[this.encodingLength - 1] |= point.getX().isOdd() ? 0x80 : 0;\n  return enc;\n};\n\nEDDSA.prototype.decodePoint = function decodePoint(bytes) {\n  bytes = utils.parseBytes(bytes);\n  var lastIx = bytes.length - 1;\n  var normed = bytes.slice(0, lastIx).concat(bytes[lastIx] & ~0x80);\n  var xIsOdd = (bytes[lastIx] & 0x80) !== 0;\n  var y = utils.intFromLE(normed);\n  return this.curve.pointFromY(y, xIsOdd);\n};\n\nEDDSA.prototype.encodeInt = function encodeInt(num) {\n  return num.toArray('le', this.encodingLength);\n};\n\nEDDSA.prototype.decodeInt = function decodeInt(bytes) {\n  return utils.intFromLE(bytes);\n};\n\nEDDSA.prototype.isPoint = function isPoint(val) {\n  return val instanceof this.pointClass;\n};","'use strict';\n\nvar utils = require('../utils');\n\nvar assert = utils.assert;\nvar parseBytes = utils.parseBytes;\nvar cachedProperty = utils.cachedProperty;\n/**\n* @param {EDDSA} eddsa - instance\n* @param {Object} params - public/private key parameters\n*\n* @param {Array<Byte>} [params.secret] - secret seed bytes\n* @param {Point} [params.pub] - public key point (aka `A` in eddsa terms)\n* @param {Array<Byte>} [params.pub] - public key point encoded as bytes\n*\n*/\n\nfunction KeyPair(eddsa, params) {\n  this.eddsa = eddsa;\n  this._secret = parseBytes(params.secret);\n  if (eddsa.isPoint(params.pub)) this._pub = params.pub;else this._pubBytes = parseBytes(params.pub);\n}\n\nKeyPair.fromPublic = function fromPublic(eddsa, pub) {\n  if (pub instanceof KeyPair) return pub;\n  return new KeyPair(eddsa, {\n    pub: pub\n  });\n};\n\nKeyPair.fromSecret = function fromSecret(eddsa, secret) {\n  if (secret instanceof KeyPair) return secret;\n  return new KeyPair(eddsa, {\n    secret: secret\n  });\n};\n\nKeyPair.prototype.secret = function secret() {\n  return this._secret;\n};\n\ncachedProperty(KeyPair, 'pubBytes', function pubBytes() {\n  return this.eddsa.encodePoint(this.pub());\n});\ncachedProperty(KeyPair, 'pub', function pub() {\n  if (this._pubBytes) return this.eddsa.decodePoint(this._pubBytes);\n  return this.eddsa.g.mul(this.priv());\n});\ncachedProperty(KeyPair, 'privBytes', function privBytes() {\n  var eddsa = this.eddsa;\n  var hash = this.hash();\n  var lastIx = eddsa.encodingLength - 1;\n  var a = hash.slice(0, eddsa.encodingLength);\n  a[0] &= 248;\n  a[lastIx] &= 127;\n  a[lastIx] |= 64;\n  return a;\n});\ncachedProperty(KeyPair, 'priv', function priv() {\n  return this.eddsa.decodeInt(this.privBytes());\n});\ncachedProperty(KeyPair, 'hash', function hash() {\n  return this.eddsa.hash().update(this.secret()).digest();\n});\ncachedProperty(KeyPair, 'messagePrefix', function messagePrefix() {\n  return this.hash().slice(this.eddsa.encodingLength);\n});\n\nKeyPair.prototype.sign = function sign(message) {\n  assert(this._secret, 'KeyPair can only verify');\n  return this.eddsa.sign(message, this);\n};\n\nKeyPair.prototype.verify = function verify(message, sig) {\n  return this.eddsa.verify(message, sig, this);\n};\n\nKeyPair.prototype.getSecret = function getSecret(enc) {\n  assert(this._secret, 'KeyPair is public only');\n  return utils.encode(this.secret(), enc);\n};\n\nKeyPair.prototype.getPublic = function getPublic(enc) {\n  return utils.encode(this.pubBytes(), enc);\n};\n\nmodule.exports = KeyPair;","'use strict';\n\nfunction _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nvar BN = require('bn.js');\n\nvar utils = require('../utils');\n\nvar assert = utils.assert;\nvar cachedProperty = utils.cachedProperty;\nvar parseBytes = utils.parseBytes;\n/**\n* @param {EDDSA} eddsa - eddsa instance\n* @param {Array<Bytes>|Object} sig -\n* @param {Array<Bytes>|Point} [sig.R] - R point as Point or bytes\n* @param {Array<Bytes>|bn} [sig.S] - S scalar as bn or bytes\n* @param {Array<Bytes>} [sig.Rencoded] - R point encoded\n* @param {Array<Bytes>} [sig.Sencoded] - S scalar encoded\n*/\n\nfunction Signature(eddsa, sig) {\n  this.eddsa = eddsa;\n  if (_typeof(sig) !== 'object') sig = parseBytes(sig);\n\n  if (Array.isArray(sig)) {\n    sig = {\n      R: sig.slice(0, eddsa.encodingLength),\n      S: sig.slice(eddsa.encodingLength)\n    };\n  }\n\n  assert(sig.R && sig.S, 'Signature without R or S');\n  if (eddsa.isPoint(sig.R)) this._R = sig.R;\n  if (sig.S instanceof BN) this._S = sig.S;\n  this._Rencoded = Array.isArray(sig.R) ? sig.R : sig.Rencoded;\n  this._Sencoded = Array.isArray(sig.S) ? sig.S : sig.Sencoded;\n}\n\ncachedProperty(Signature, 'S', function S() {\n  return this.eddsa.decodeInt(this.Sencoded());\n});\ncachedProperty(Signature, 'R', function R() {\n  return this.eddsa.decodePoint(this.Rencoded());\n});\ncachedProperty(Signature, 'Rencoded', function Rencoded() {\n  return this.eddsa.encodePoint(this.R());\n});\ncachedProperty(Signature, 'Sencoded', function Sencoded() {\n  return this.eddsa.encodeInt(this.S());\n});\n\nSignature.prototype.toBytes = function toBytes() {\n  return this.Rencoded().concat(this.Sencoded());\n};\n\nSignature.prototype.toHex = function toHex() {\n  return utils.encode(this.toBytes(), 'hex').toUpperCase();\n};\n\nmodule.exports = Signature;","// from https://github.com/indutny/self-signed/blob/gh-pages/lib/asn1.js\n// Fedor, you are amazing.\n'use strict';\n\nvar asn1 = require('asn1.js');\n\nexports.certificate = require('./certificate');\nvar RSAPrivateKey = asn1.define('RSAPrivateKey', function () {\n  this.seq().obj(this.key('version')[\"int\"](), this.key('modulus')[\"int\"](), this.key('publicExponent')[\"int\"](), this.key('privateExponent')[\"int\"](), this.key('prime1')[\"int\"](), this.key('prime2')[\"int\"](), this.key('exponent1')[\"int\"](), this.key('exponent2')[\"int\"](), this.key('coefficient')[\"int\"]());\n});\nexports.RSAPrivateKey = RSAPrivateKey;\nvar RSAPublicKey = asn1.define('RSAPublicKey', function () {\n  this.seq().obj(this.key('modulus')[\"int\"](), this.key('publicExponent')[\"int\"]());\n});\nexports.RSAPublicKey = RSAPublicKey;\nvar PublicKey = asn1.define('SubjectPublicKeyInfo', function () {\n  this.seq().obj(this.key('algorithm').use(AlgorithmIdentifier), this.key('subjectPublicKey').bitstr());\n});\nexports.PublicKey = PublicKey;\nvar AlgorithmIdentifier = asn1.define('AlgorithmIdentifier', function () {\n  this.seq().obj(this.key('algorithm').objid(), this.key('none').null_().optional(), this.key('curve').objid().optional(), this.key('params').seq().obj(this.key('p')[\"int\"](), this.key('q')[\"int\"](), this.key('g')[\"int\"]()).optional());\n});\nvar PrivateKeyInfo = asn1.define('PrivateKeyInfo', function () {\n  this.seq().obj(this.key('version')[\"int\"](), this.key('algorithm').use(AlgorithmIdentifier), this.key('subjectPrivateKey').octstr());\n});\nexports.PrivateKey = PrivateKeyInfo;\nvar EncryptedPrivateKeyInfo = asn1.define('EncryptedPrivateKeyInfo', function () {\n  this.seq().obj(this.key('algorithm').seq().obj(this.key('id').objid(), this.key('decrypt').seq().obj(this.key('kde').seq().obj(this.key('id').objid(), this.key('kdeparams').seq().obj(this.key('salt').octstr(), this.key('iters')[\"int\"]())), this.key('cipher').seq().obj(this.key('algo').objid(), this.key('iv').octstr()))), this.key('subjectPrivateKey').octstr());\n});\nexports.EncryptedPrivateKey = EncryptedPrivateKeyInfo;\nvar DSAPrivateKey = asn1.define('DSAPrivateKey', function () {\n  this.seq().obj(this.key('version')[\"int\"](), this.key('p')[\"int\"](), this.key('q')[\"int\"](), this.key('g')[\"int\"](), this.key('pub_key')[\"int\"](), this.key('priv_key')[\"int\"]());\n});\nexports.DSAPrivateKey = DSAPrivateKey;\nexports.DSAparam = asn1.define('DSAparam', function () {\n  this[\"int\"]();\n});\nvar ECPrivateKey = asn1.define('ECPrivateKey', function () {\n  this.seq().obj(this.key('version')[\"int\"](), this.key('privateKey').octstr(), this.key('parameters').optional().explicit(0).use(ECParameters), this.key('publicKey').optional().explicit(1).bitstr());\n});\nexports.ECPrivateKey = ECPrivateKey;\nvar ECParameters = asn1.define('ECParameters', function () {\n  this.choice({\n    namedCurve: this.objid()\n  });\n});\nexports.signature = asn1.define('signature', function () {\n  this.seq().obj(this.key('r')[\"int\"](), this.key('s')[\"int\"]());\n});","var asn1 = require('../asn1');\n\nvar inherits = require('inherits');\n\nvar api = exports;\n\napi.define = function define(name, body) {\n  return new Entity(name, body);\n};\n\nfunction Entity(name, body) {\n  this.name = name;\n  this.body = body;\n  this.decoders = {};\n  this.encoders = {};\n}\n\n;\n\nEntity.prototype._createNamed = function createNamed(base) {\n  var named;\n\n  try {\n    named = require('vm').runInThisContext('(function ' + this.name + '(entity) {\\n' + '  this._initNamed(entity);\\n' + '})');\n  } catch (e) {\n    named = function named(entity) {\n      this._initNamed(entity);\n    };\n  }\n\n  inherits(named, base);\n\n  named.prototype._initNamed = function initnamed(entity) {\n    base.call(this, entity);\n  };\n\n  return new named(this);\n};\n\nEntity.prototype._getDecoder = function _getDecoder(enc) {\n  enc = enc || 'der'; // Lazily create decoder\n\n  if (!this.decoders.hasOwnProperty(enc)) this.decoders[enc] = this._createNamed(asn1.decoders[enc]);\n  return this.decoders[enc];\n};\n\nEntity.prototype.decode = function decode(data, enc, options) {\n  return this._getDecoder(enc).decode(data, options);\n};\n\nEntity.prototype._getEncoder = function _getEncoder(enc) {\n  enc = enc || 'der'; // Lazily create encoder\n\n  if (!this.encoders.hasOwnProperty(enc)) this.encoders[enc] = this._createNamed(asn1.encoders[enc]);\n  return this.encoders[enc];\n};\n\nEntity.prototype.encode = function encode(data, enc,\n/* internal */\nreporter) {\n  return this._getEncoder(enc).encode(data, reporter);\n};","function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nvar indexOf = function indexOf(xs, item) {\n  if (xs.indexOf) return xs.indexOf(item);else for (var i = 0; i < xs.length; i++) {\n    if (xs[i] === item) return i;\n  }\n  return -1;\n};\n\nvar Object_keys = function Object_keys(obj) {\n  if (Object.keys) return Object.keys(obj);else {\n    var res = [];\n\n    for (var key in obj) {\n      res.push(key);\n    }\n\n    return res;\n  }\n};\n\nvar forEach = function forEach(xs, fn) {\n  if (xs.forEach) return xs.forEach(fn);else for (var i = 0; i < xs.length; i++) {\n    fn(xs[i], i, xs);\n  }\n};\n\nvar defineProp = function () {\n  try {\n    Object.defineProperty({}, '_', {});\n    return function (obj, name, value) {\n      Object.defineProperty(obj, name, {\n        writable: true,\n        enumerable: false,\n        configurable: true,\n        value: value\n      });\n    };\n  } catch (e) {\n    return function (obj, name, value) {\n      obj[name] = value;\n    };\n  }\n}();\n\nvar globals = ['Array', 'Boolean', 'Date', 'Error', 'EvalError', 'Function', 'Infinity', 'JSON', 'Math', 'NaN', 'Number', 'Object', 'RangeError', 'ReferenceError', 'RegExp', 'String', 'SyntaxError', 'TypeError', 'URIError', 'decodeURI', 'decodeURIComponent', 'encodeURI', 'encodeURIComponent', 'escape', 'eval', 'isFinite', 'isNaN', 'parseFloat', 'parseInt', 'undefined', 'unescape'];\n\nfunction Context() {}\n\nContext.prototype = {};\n\nvar Script = exports.Script = function NodeScript(code) {\n  if (!(this instanceof Script)) return new Script(code);\n  this.code = code;\n};\n\nScript.prototype.runInContext = function (context) {\n  if (!(context instanceof Context)) {\n    throw new TypeError(\"needs a 'context' argument.\");\n  }\n\n  var iframe = document.createElement('iframe');\n  if (!iframe.style) iframe.style = {};\n  iframe.style.display = 'none';\n  document.body.appendChild(iframe);\n  var win = iframe.contentWindow;\n  var wEval = win.eval,\n      wExecScript = win.execScript;\n\n  if (!wEval && wExecScript) {\n    // win.eval() magically appears when this is called in IE:\n    wExecScript.call(win, 'null');\n    wEval = win.eval;\n  }\n\n  forEach(Object_keys(context), function (key) {\n    win[key] = context[key];\n  });\n  forEach(globals, function (key) {\n    if (context[key]) {\n      win[key] = context[key];\n    }\n  });\n  var winKeys = Object_keys(win);\n  var res = wEval.call(win, this.code);\n  forEach(Object_keys(win), function (key) {\n    // Avoid copying circular objects like `top` and `window` by only\n    // updating existing context properties or new properties in the `win`\n    // that was only introduced after the eval.\n    if (key in context || indexOf(winKeys, key) === -1) {\n      context[key] = win[key];\n    }\n  });\n  forEach(globals, function (key) {\n    if (!(key in context)) {\n      defineProp(context, key, win[key]);\n    }\n  });\n  document.body.removeChild(iframe);\n  return res;\n};\n\nScript.prototype.runInThisContext = function () {\n  return eval(this.code); // maybe...\n};\n\nScript.prototype.runInNewContext = function (context) {\n  var ctx = Script.createContext(context);\n  var res = this.runInContext(ctx);\n\n  if (context) {\n    forEach(Object_keys(ctx), function (key) {\n      context[key] = ctx[key];\n    });\n  }\n\n  return res;\n};\n\nforEach(Object_keys(Script.prototype), function (name) {\n  exports[name] = Script[name] = function (code) {\n    var s = Script(code);\n    return s[name].apply(s, [].slice.call(arguments, 1));\n  };\n});\n\nexports.isContext = function (context) {\n  return context instanceof Context;\n};\n\nexports.createScript = function (code) {\n  return exports.Script(code);\n};\n\nexports.createContext = Script.createContext = function (context) {\n  var copy = new Context();\n\n  if (_typeof(context) === 'object') {\n    forEach(Object_keys(context), function (key) {\n      copy[key] = context[key];\n    });\n  }\n\n  return copy;\n};","var inherits = require('inherits');\n\nfunction Reporter(options) {\n  this._reporterState = {\n    obj: null,\n    path: [],\n    options: options || {},\n    errors: []\n  };\n}\n\nexports.Reporter = Reporter;\n\nReporter.prototype.isError = function isError(obj) {\n  return obj instanceof ReporterError;\n};\n\nReporter.prototype.save = function save() {\n  var state = this._reporterState;\n  return {\n    obj: state.obj,\n    pathLen: state.path.length\n  };\n};\n\nReporter.prototype.restore = function restore(data) {\n  var state = this._reporterState;\n  state.obj = data.obj;\n  state.path = state.path.slice(0, data.pathLen);\n};\n\nReporter.prototype.enterKey = function enterKey(key) {\n  return this._reporterState.path.push(key);\n};\n\nReporter.prototype.exitKey = function exitKey(index) {\n  var state = this._reporterState;\n  state.path = state.path.slice(0, index - 1);\n};\n\nReporter.prototype.leaveKey = function leaveKey(index, key, value) {\n  var state = this._reporterState;\n  this.exitKey(index);\n  if (state.obj !== null) state.obj[key] = value;\n};\n\nReporter.prototype.path = function path() {\n  return this._reporterState.path.join('/');\n};\n\nReporter.prototype.enterObject = function enterObject() {\n  var state = this._reporterState;\n  var prev = state.obj;\n  state.obj = {};\n  return prev;\n};\n\nReporter.prototype.leaveObject = function leaveObject(prev) {\n  var state = this._reporterState;\n  var now = state.obj;\n  state.obj = prev;\n  return now;\n};\n\nReporter.prototype.error = function error(msg) {\n  var err;\n  var state = this._reporterState;\n  var inherited = msg instanceof ReporterError;\n\n  if (inherited) {\n    err = msg;\n  } else {\n    err = new ReporterError(state.path.map(function (elem) {\n      return '[' + JSON.stringify(elem) + ']';\n    }).join(''), msg.message || msg, msg.stack);\n  }\n\n  if (!state.options.partial) throw err;\n  if (!inherited) state.errors.push(err);\n  return err;\n};\n\nReporter.prototype.wrapResult = function wrapResult(result) {\n  var state = this._reporterState;\n  if (!state.options.partial) return result;\n  return {\n    result: this.isError(result) ? null : result,\n    errors: state.errors\n  };\n};\n\nfunction ReporterError(path, msg) {\n  this.path = path;\n  this.rethrow(msg);\n}\n\n;\ninherits(ReporterError, Error);\n\nReporterError.prototype.rethrow = function rethrow(msg) {\n  this.message = msg + ' at: ' + (this.path || '(shallow)');\n  if (Error.captureStackTrace) Error.captureStackTrace(this, ReporterError);\n\n  if (!this.stack) {\n    try {\n      // IE only adds stack when thrown\n      throw new Error(this.message);\n    } catch (e) {\n      this.stack = e.stack;\n    }\n  }\n\n  return this;\n};","function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\nvar Reporter = require('../base').Reporter;\n\nvar EncoderBuffer = require('../base').EncoderBuffer;\n\nvar DecoderBuffer = require('../base').DecoderBuffer;\n\nvar assert = require('minimalistic-assert'); // Supported tags\n\n\nvar tags = ['seq', 'seqof', 'set', 'setof', 'objid', 'bool', 'gentime', 'utctime', 'null_', 'enum', 'int', 'objDesc', 'bitstr', 'bmpstr', 'charstr', 'genstr', 'graphstr', 'ia5str', 'iso646str', 'numstr', 'octstr', 'printstr', 't61str', 'unistr', 'utf8str', 'videostr']; // Public methods list\n\nvar methods = ['key', 'obj', 'use', 'optional', 'explicit', 'implicit', 'def', 'choice', 'any', 'contains'].concat(tags); // Overrided methods list\n\nvar overrided = ['_peekTag', '_decodeTag', '_use', '_decodeStr', '_decodeObjid', '_decodeTime', '_decodeNull', '_decodeInt', '_decodeBool', '_decodeList', '_encodeComposite', '_encodeStr', '_encodeObjid', '_encodeTime', '_encodeNull', '_encodeInt', '_encodeBool'];\n\nfunction Node(enc, parent) {\n  var state = {};\n  this._baseState = state;\n  state.enc = enc;\n  state.parent = parent || null;\n  state.children = null; // State\n\n  state.tag = null;\n  state.args = null;\n  state.reverseArgs = null;\n  state.choice = null;\n  state.optional = false;\n  state.any = false;\n  state.obj = false;\n  state.use = null;\n  state.useDecoder = null;\n  state.key = null;\n  state['default'] = null;\n  state.explicit = null;\n  state.implicit = null;\n  state.contains = null; // Should create new instance on each method\n\n  if (!state.parent) {\n    state.children = [];\n\n    this._wrap();\n  }\n}\n\nmodule.exports = Node;\nvar stateProps = ['enc', 'parent', 'children', 'tag', 'args', 'reverseArgs', 'choice', 'optional', 'any', 'obj', 'use', 'alteredUse', 'key', 'default', 'explicit', 'implicit', 'contains'];\n\nNode.prototype.clone = function clone() {\n  var state = this._baseState;\n  var cstate = {};\n  stateProps.forEach(function (prop) {\n    cstate[prop] = state[prop];\n  });\n  var res = new this.constructor(cstate.parent);\n  res._baseState = cstate;\n  return res;\n};\n\nNode.prototype._wrap = function wrap() {\n  var state = this._baseState;\n  methods.forEach(function (method) {\n    this[method] = function _wrappedMethod() {\n      var clone = new this.constructor(this);\n      state.children.push(clone);\n      return clone[method].apply(clone, arguments);\n    };\n  }, this);\n};\n\nNode.prototype._init = function init(body) {\n  var state = this._baseState;\n  assert(state.parent === null);\n  body.call(this); // Filter children\n\n  state.children = state.children.filter(function (child) {\n    return child._baseState.parent === this;\n  }, this);\n  assert.equal(state.children.length, 1, 'Root node can have only one child');\n};\n\nNode.prototype._useArgs = function useArgs(args) {\n  var state = this._baseState; // Filter children and args\n\n  var children = args.filter(function (arg) {\n    return arg instanceof this.constructor;\n  }, this);\n  args = args.filter(function (arg) {\n    return !(arg instanceof this.constructor);\n  }, this);\n\n  if (children.length !== 0) {\n    assert(state.children === null);\n    state.children = children; // Replace parent to maintain backward link\n\n    children.forEach(function (child) {\n      child._baseState.parent = this;\n    }, this);\n  }\n\n  if (args.length !== 0) {\n    assert(state.args === null);\n    state.args = args;\n    state.reverseArgs = args.map(function (arg) {\n      if (_typeof(arg) !== 'object' || arg.constructor !== Object) return arg;\n      var res = {};\n      Object.keys(arg).forEach(function (key) {\n        if (key == (key | 0)) key |= 0;\n        var value = arg[key];\n        res[value] = key;\n      });\n      return res;\n    });\n  }\n}; //\n// Overrided methods\n//\n\n\noverrided.forEach(function (method) {\n  Node.prototype[method] = function _overrided() {\n    var state = this._baseState;\n    throw new Error(method + ' not implemented for encoding: ' + state.enc);\n  };\n}); //\n// Public methods\n//\n\ntags.forEach(function (tag) {\n  Node.prototype[tag] = function _tagMethod() {\n    var state = this._baseState;\n    var args = Array.prototype.slice.call(arguments);\n    assert(state.tag === null);\n    state.tag = tag;\n\n    this._useArgs(args);\n\n    return this;\n  };\n});\n\nNode.prototype.use = function use(item) {\n  assert(item);\n  var state = this._baseState;\n  assert(state.use === null);\n  state.use = item;\n  return this;\n};\n\nNode.prototype.optional = function optional() {\n  var state = this._baseState;\n  state.optional = true;\n  return this;\n};\n\nNode.prototype.def = function def(val) {\n  var state = this._baseState;\n  assert(state['default'] === null);\n  state['default'] = val;\n  state.optional = true;\n  return this;\n};\n\nNode.prototype.explicit = function explicit(num) {\n  var state = this._baseState;\n  assert(state.explicit === null && state.implicit === null);\n  state.explicit = num;\n  return this;\n};\n\nNode.prototype.implicit = function implicit(num) {\n  var state = this._baseState;\n  assert(state.explicit === null && state.implicit === null);\n  state.implicit = num;\n  return this;\n};\n\nNode.prototype.obj = function obj() {\n  var state = this._baseState;\n  var args = Array.prototype.slice.call(arguments);\n  state.obj = true;\n  if (args.length !== 0) this._useArgs(args);\n  return this;\n};\n\nNode.prototype.key = function key(newKey) {\n  var state = this._baseState;\n  assert(state.key === null);\n  state.key = newKey;\n  return this;\n};\n\nNode.prototype.any = function any() {\n  var state = this._baseState;\n  state.any = true;\n  return this;\n};\n\nNode.prototype.choice = function choice(obj) {\n  var state = this._baseState;\n  assert(state.choice === null);\n  state.choice = obj;\n\n  this._useArgs(Object.keys(obj).map(function (key) {\n    return obj[key];\n  }));\n\n  return this;\n};\n\nNode.prototype.contains = function contains(item) {\n  var state = this._baseState;\n  assert(state.use === null);\n  state.contains = item;\n  return this;\n}; //\n// Decoding\n//\n\n\nNode.prototype._decode = function decode(input, options) {\n  var state = this._baseState; // Decode root node\n\n  if (state.parent === null) return input.wrapResult(state.children[0]._decode(input, options));\n  var result = state['default'];\n  var present = true;\n  var prevKey = null;\n  if (state.key !== null) prevKey = input.enterKey(state.key); // Check if tag is there\n\n  if (state.optional) {\n    var tag = null;\n    if (state.explicit !== null) tag = state.explicit;else if (state.implicit !== null) tag = state.implicit;else if (state.tag !== null) tag = state.tag;\n\n    if (tag === null && !state.any) {\n      // Trial and Error\n      var save = input.save();\n\n      try {\n        if (state.choice === null) this._decodeGeneric(state.tag, input, options);else this._decodeChoice(input, options);\n        present = true;\n      } catch (e) {\n        present = false;\n      }\n\n      input.restore(save);\n    } else {\n      present = this._peekTag(input, tag, state.any);\n      if (input.isError(present)) return present;\n    }\n  } // Push object on stack\n\n\n  var prevObj;\n  if (state.obj && present) prevObj = input.enterObject();\n\n  if (present) {\n    // Unwrap explicit values\n    if (state.explicit !== null) {\n      var explicit = this._decodeTag(input, state.explicit);\n\n      if (input.isError(explicit)) return explicit;\n      input = explicit;\n    }\n\n    var start = input.offset; // Unwrap implicit and normal values\n\n    if (state.use === null && state.choice === null) {\n      if (state.any) var save = input.save();\n\n      var body = this._decodeTag(input, state.implicit !== null ? state.implicit : state.tag, state.any);\n\n      if (input.isError(body)) return body;\n      if (state.any) result = input.raw(save);else input = body;\n    }\n\n    if (options && options.track && state.tag !== null) options.track(input.path(), start, input.length, 'tagged');\n    if (options && options.track && state.tag !== null) options.track(input.path(), input.offset, input.length, 'content'); // Select proper method for tag\n\n    if (state.any) result = result;else if (state.choice === null) result = this._decodeGeneric(state.tag, input, options);else result = this._decodeChoice(input, options);\n    if (input.isError(result)) return result; // Decode children\n\n    if (!state.any && state.choice === null && state.children !== null) {\n      state.children.forEach(function decodeChildren(child) {\n        // NOTE: We are ignoring errors here, to let parser continue with other\n        // parts of encoded data\n        child._decode(input, options);\n      });\n    } // Decode contained/encoded by schema, only in bit or octet strings\n\n\n    if (state.contains && (state.tag === 'octstr' || state.tag === 'bitstr')) {\n      var data = new DecoderBuffer(result);\n      result = this._getUse(state.contains, input._reporterState.obj)._decode(data, options);\n    }\n  } // Pop object\n\n\n  if (state.obj && present) result = input.leaveObject(prevObj); // Set key\n\n  if (state.key !== null && (result !== null || present === true)) input.leaveKey(prevKey, state.key, result);else if (prevKey !== null) input.exitKey(prevKey);\n  return result;\n};\n\nNode.prototype._decodeGeneric = function decodeGeneric(tag, input, options) {\n  var state = this._baseState;\n  if (tag === 'seq' || tag === 'set') return null;\n  if (tag === 'seqof' || tag === 'setof') return this._decodeList(input, tag, state.args[0], options);else if (/str$/.test(tag)) return this._decodeStr(input, tag, options);else if (tag === 'objid' && state.args) return this._decodeObjid(input, state.args[0], state.args[1], options);else if (tag === 'objid') return this._decodeObjid(input, null, null, options);else if (tag === 'gentime' || tag === 'utctime') return this._decodeTime(input, tag, options);else if (tag === 'null_') return this._decodeNull(input, options);else if (tag === 'bool') return this._decodeBool(input, options);else if (tag === 'objDesc') return this._decodeStr(input, tag, options);else if (tag === 'int' || tag === 'enum') return this._decodeInt(input, state.args && state.args[0], options);\n\n  if (state.use !== null) {\n    return this._getUse(state.use, input._reporterState.obj)._decode(input, options);\n  } else {\n    return input.error('unknown tag: ' + tag);\n  }\n};\n\nNode.prototype._getUse = function _getUse(entity, obj) {\n  var state = this._baseState; // Create altered use decoder if implicit is set\n\n  state.useDecoder = this._use(entity, obj);\n  assert(state.useDecoder._baseState.parent === null);\n  state.useDecoder = state.useDecoder._baseState.children[0];\n\n  if (state.implicit !== state.useDecoder._baseState.implicit) {\n    state.useDecoder = state.useDecoder.clone();\n    state.useDecoder._baseState.implicit = state.implicit;\n  }\n\n  return state.useDecoder;\n};\n\nNode.prototype._decodeChoice = function decodeChoice(input, options) {\n  var state = this._baseState;\n  var result = null;\n  var match = false;\n  Object.keys(state.choice).some(function (key) {\n    var save = input.save();\n    var node = state.choice[key];\n\n    try {\n      var value = node._decode(input, options);\n\n      if (input.isError(value)) return false;\n      result = {\n        type: key,\n        value: value\n      };\n      match = true;\n    } catch (e) {\n      input.restore(save);\n      return false;\n    }\n\n    return true;\n  }, this);\n  if (!match) return input.error('Choice not matched');\n  return result;\n}; //\n// Encoding\n//\n\n\nNode.prototype._createEncoderBuffer = function createEncoderBuffer(data) {\n  return new EncoderBuffer(data, this.reporter);\n};\n\nNode.prototype._encode = function encode(data, reporter, parent) {\n  var state = this._baseState;\n  if (state['default'] !== null && state['default'] === data) return;\n\n  var result = this._encodeValue(data, reporter, parent);\n\n  if (result === undefined) return;\n  if (this._skipDefault(result, reporter, parent)) return;\n  return result;\n};\n\nNode.prototype._encodeValue = function encode(data, reporter, parent) {\n  var state = this._baseState; // Decode root node\n\n  if (state.parent === null) return state.children[0]._encode(data, reporter || new Reporter());\n  var result = null; // Set reporter to share it with a child class\n\n  this.reporter = reporter; // Check if data is there\n\n  if (state.optional && data === undefined) {\n    if (state['default'] !== null) data = state['default'];else return;\n  } // Encode children first\n\n\n  var content = null;\n  var primitive = false;\n\n  if (state.any) {\n    // Anything that was given is translated to buffer\n    result = this._createEncoderBuffer(data);\n  } else if (state.choice) {\n    result = this._encodeChoice(data, reporter);\n  } else if (state.contains) {\n    content = this._getUse(state.contains, parent)._encode(data, reporter);\n    primitive = true;\n  } else if (state.children) {\n    content = state.children.map(function (child) {\n      if (child._baseState.tag === 'null_') return child._encode(null, reporter, data);\n      if (child._baseState.key === null) return reporter.error('Child should have a key');\n      var prevKey = reporter.enterKey(child._baseState.key);\n      if (_typeof(data) !== 'object') return reporter.error('Child expected, but input is not object');\n\n      var res = child._encode(data[child._baseState.key], reporter, data);\n\n      reporter.leaveKey(prevKey);\n      return res;\n    }, this).filter(function (child) {\n      return child;\n    });\n    content = this._createEncoderBuffer(content);\n  } else {\n    if (state.tag === 'seqof' || state.tag === 'setof') {\n      // TODO(indutny): this should be thrown on DSL level\n      if (!(state.args && state.args.length === 1)) return reporter.error('Too many args for : ' + state.tag);\n      if (!Array.isArray(data)) return reporter.error('seqof/setof, but data is not Array');\n      var child = this.clone();\n      child._baseState.implicit = null;\n      content = this._createEncoderBuffer(data.map(function (item) {\n        var state = this._baseState;\n        return this._getUse(state.args[0], data)._encode(item, reporter);\n      }, child));\n    } else if (state.use !== null) {\n      result = this._getUse(state.use, parent)._encode(data, reporter);\n    } else {\n      content = this._encodePrimitive(state.tag, data);\n      primitive = true;\n    }\n  } // Encode data itself\n\n\n  var result;\n\n  if (!state.any && state.choice === null) {\n    var tag = state.implicit !== null ? state.implicit : state.tag;\n    var cls = state.implicit === null ? 'universal' : 'context';\n\n    if (tag === null) {\n      if (state.use === null) reporter.error('Tag could be omitted only for .use()');\n    } else {\n      if (state.use === null) result = this._encodeComposite(tag, primitive, cls, content);\n    }\n  } // Wrap in explicit\n\n\n  if (state.explicit !== null) result = this._encodeComposite(state.explicit, false, 'context', result);\n  return result;\n};\n\nNode.prototype._encodeChoice = function encodeChoice(data, reporter) {\n  var state = this._baseState;\n  var node = state.choice[data.type];\n\n  if (!node) {\n    assert(false, data.type + ' not found in ' + JSON.stringify(Object.keys(state.choice)));\n  }\n\n  return node._encode(data.value, reporter);\n};\n\nNode.prototype._encodePrimitive = function encodePrimitive(tag, data) {\n  var state = this._baseState;\n  if (/str$/.test(tag)) return this._encodeStr(data, tag);else if (tag === 'objid' && state.args) return this._encodeObjid(data, state.reverseArgs[0], state.args[1]);else if (tag === 'objid') return this._encodeObjid(data, null, null);else if (tag === 'gentime' || tag === 'utctime') return this._encodeTime(data, tag);else if (tag === 'null_') return this._encodeNull();else if (tag === 'int' || tag === 'enum') return this._encodeInt(data, state.args && state.reverseArgs[0]);else if (tag === 'bool') return this._encodeBool(data);else if (tag === 'objDesc') return this._encodeStr(data, tag);else throw new Error('Unsupported tag: ' + tag);\n};\n\nNode.prototype._isNumstr = function isNumstr(str) {\n  return /^[0-9 ]*$/.test(str);\n};\n\nNode.prototype._isPrintstr = function isPrintstr(str) {\n  return /^[A-Za-z0-9 '\\(\\)\\+,\\-\\.\\/:=\\?]*$/.test(str);\n};","var constants = require('../constants');\n\nexports.tagClass = {\n  0: 'universal',\n  1: 'application',\n  2: 'context',\n  3: 'private'\n};\nexports.tagClassByName = constants._reverse(exports.tagClass);\nexports.tag = {\n  0x00: 'end',\n  0x01: 'bool',\n  0x02: 'int',\n  0x03: 'bitstr',\n  0x04: 'octstr',\n  0x05: 'null_',\n  0x06: 'objid',\n  0x07: 'objDesc',\n  0x08: 'external',\n  0x09: 'real',\n  0x0a: 'enum',\n  0x0b: 'embed',\n  0x0c: 'utf8str',\n  0x0d: 'relativeOid',\n  0x10: 'seq',\n  0x11: 'set',\n  0x12: 'numstr',\n  0x13: 'printstr',\n  0x14: 't61str',\n  0x15: 'videostr',\n  0x16: 'ia5str',\n  0x17: 'utctime',\n  0x18: 'gentime',\n  0x19: 'graphstr',\n  0x1a: 'iso646str',\n  0x1b: 'genstr',\n  0x1c: 'unistr',\n  0x1d: 'charstr',\n  0x1e: 'bmpstr'\n};\nexports.tagByName = constants._reverse(exports.tag);","var decoders = exports;\ndecoders.der = require('./der');\ndecoders.pem = require('./pem');","var inherits = require('inherits');\n\nvar Buffer = require('buffer').Buffer;\n\nvar DERDecoder = require('./der');\n\nfunction PEMDecoder(entity) {\n  DERDecoder.call(this, entity);\n  this.enc = 'pem';\n}\n\n;\ninherits(PEMDecoder, DERDecoder);\nmodule.exports = PEMDecoder;\n\nPEMDecoder.prototype.decode = function decode(data, options) {\n  var lines = data.toString().split(/[\\r\\n]+/g);\n  var label = options.label.toUpperCase();\n  var re = /^-----(BEGIN|END) ([^-]+)-----$/;\n  var start = -1;\n  var end = -1;\n\n  for (var i = 0; i < lines.length; i++) {\n    var match = lines[i].match(re);\n    if (match === null) continue;\n    if (match[2] !== label) continue;\n\n    if (start === -1) {\n      if (match[1] !== 'BEGIN') break;\n      start = i;\n    } else {\n      if (match[1] !== 'END') break;\n      end = i;\n      break;\n    }\n  }\n\n  if (start === -1 || end === -1) throw new Error('PEM section not found for: ' + label);\n  var base64 = lines.slice(start + 1, end).join(''); // Remove excessive symbols\n\n  base64.replace(/[^a-z0-9\\+\\/=]+/gi, '');\n  var input = new Buffer(base64, 'base64');\n  return DERDecoder.prototype.decode.call(this, input, options);\n};","var encoders = exports;\nencoders.der = require('./der');\nencoders.pem = require('./pem');","var inherits = require('inherits');\n\nvar DEREncoder = require('./der');\n\nfunction PEMEncoder(entity) {\n  DEREncoder.call(this, entity);\n  this.enc = 'pem';\n}\n\n;\ninherits(PEMEncoder, DEREncoder);\nmodule.exports = PEMEncoder;\n\nPEMEncoder.prototype.encode = function encode(data, options) {\n  var buf = DEREncoder.prototype.encode.call(this, data);\n  var p = buf.toString('base64');\n  var out = ['-----BEGIN ' + options.label + '-----'];\n\n  for (var i = 0; i < p.length; i += 64) {\n    out.push(p.slice(i, i + 64));\n  }\n\n  out.push('-----END ' + options.label + '-----');\n  return out.join('\\n');\n};","// from https://github.com/Rantanen/node-dtls/blob/25a7dc861bda38cfeac93a723500eea4f0ac2e86/Certificate.js\n// thanks to @Rantanen\n'use strict';\n\nvar asn = require('asn1.js');\n\nvar Time = asn.define('Time', function () {\n  this.choice({\n    utcTime: this.utctime(),\n    generalTime: this.gentime()\n  });\n});\nvar AttributeTypeValue = asn.define('AttributeTypeValue', function () {\n  this.seq().obj(this.key('type').objid(), this.key('value').any());\n});\nvar AlgorithmIdentifier = asn.define('AlgorithmIdentifier', function () {\n  this.seq().obj(this.key('algorithm').objid(), this.key('parameters').optional(), this.key('curve').objid().optional());\n});\nvar SubjectPublicKeyInfo = asn.define('SubjectPublicKeyInfo', function () {\n  this.seq().obj(this.key('algorithm').use(AlgorithmIdentifier), this.key('subjectPublicKey').bitstr());\n});\nvar RelativeDistinguishedName = asn.define('RelativeDistinguishedName', function () {\n  this.setof(AttributeTypeValue);\n});\nvar RDNSequence = asn.define('RDNSequence', function () {\n  this.seqof(RelativeDistinguishedName);\n});\nvar Name = asn.define('Name', function () {\n  this.choice({\n    rdnSequence: this.use(RDNSequence)\n  });\n});\nvar Validity = asn.define('Validity', function () {\n  this.seq().obj(this.key('notBefore').use(Time), this.key('notAfter').use(Time));\n});\nvar Extension = asn.define('Extension', function () {\n  this.seq().obj(this.key('extnID').objid(), this.key('critical').bool().def(false), this.key('extnValue').octstr());\n});\nvar TBSCertificate = asn.define('TBSCertificate', function () {\n  this.seq().obj(this.key('version').explicit(0)[\"int\"]().optional(), this.key('serialNumber')[\"int\"](), this.key('signature').use(AlgorithmIdentifier), this.key('issuer').use(Name), this.key('validity').use(Validity), this.key('subject').use(Name), this.key('subjectPublicKeyInfo').use(SubjectPublicKeyInfo), this.key('issuerUniqueID').implicit(1).bitstr().optional(), this.key('subjectUniqueID').implicit(2).bitstr().optional(), this.key('extensions').explicit(3).seqof(Extension).optional());\n});\nvar X509Certificate = asn.define('X509Certificate', function () {\n  this.seq().obj(this.key('tbsCertificate').use(TBSCertificate), this.key('signatureAlgorithm').use(AlgorithmIdentifier), this.key('signatureValue').bitstr());\n});\nmodule.exports = X509Certificate;","// adapted from https://github.com/apatil/pemstrip\nvar findProc = /Proc-Type: 4,ENCRYPTED[\\n\\r]+DEK-Info: AES-((?:128)|(?:192)|(?:256))-CBC,([0-9A-H]+)[\\n\\r]+([0-9A-z\\n\\r\\+\\/\\=]+)[\\n\\r]+/m;\nvar startRegex = /^-----BEGIN ((?:.*? KEY)|CERTIFICATE)-----/m;\nvar fullRegex = /^-----BEGIN ((?:.*? KEY)|CERTIFICATE)-----([0-9A-z\\n\\r\\+\\/\\=]+)-----END \\1-----$/m;\n\nvar evp = require('evp_bytestokey');\n\nvar ciphers = require('browserify-aes');\n\nvar Buffer = require('safe-buffer').Buffer;\n\nmodule.exports = function (okey, password) {\n  var key = okey.toString();\n  var match = key.match(findProc);\n  var decrypted;\n\n  if (!match) {\n    var match2 = key.match(fullRegex);\n    decrypted = new Buffer(match2[2].replace(/[\\r\\n]/g, ''), 'base64');\n  } else {\n    var suite = 'aes' + match[1];\n    var iv = Buffer.from(match[2], 'hex');\n    var cipherText = Buffer.from(match[3].replace(/[\\r\\n]/g, ''), 'base64');\n    var cipherKey = evp(password, iv.slice(0, 8), parseInt(match[1], 10)).key;\n    var out = [];\n    var cipher = ciphers.createDecipheriv(suite, cipherKey, iv);\n    out.push(cipher.update(cipherText));\n    out.push(cipher[\"final\"]());\n    decrypted = Buffer.concat(out);\n  }\n\n  var tag = key.match(startRegex)[1];\n  return {\n    tag: tag,\n    data: decrypted\n  };\n};","// much of this based on https://github.com/indutny/self-signed/blob/gh-pages/lib/rsa.js\nvar BN = require('bn.js');\n\nvar EC = require('elliptic').ec;\n\nvar parseKeys = require('parse-asn1');\n\nvar curves = require('./curves.json');\n\nfunction verify(sig, hash, key, signType, tag) {\n  var pub = parseKeys(key);\n\n  if (pub.type === 'ec') {\n    // rsa keys can be interpreted as ecdsa ones in openssl\n    if (signType !== 'ecdsa' && signType !== 'ecdsa/rsa') throw new Error('wrong public key type');\n    return ecVerify(sig, hash, pub);\n  } else if (pub.type === 'dsa') {\n    if (signType !== 'dsa') throw new Error('wrong public key type');\n    return dsaVerify(sig, hash, pub);\n  } else {\n    if (signType !== 'rsa' && signType !== 'ecdsa/rsa') throw new Error('wrong public key type');\n  }\n\n  hash = Buffer.concat([tag, hash]);\n  var len = pub.modulus.byteLength();\n  var pad = [1];\n  var padNum = 0;\n\n  while (hash.length + pad.length + 2 < len) {\n    pad.push(0xff);\n    padNum++;\n  }\n\n  pad.push(0x00);\n  var i = -1;\n\n  while (++i < hash.length) {\n    pad.push(hash[i]);\n  }\n\n  pad = new Buffer(pad);\n  var red = BN.mont(pub.modulus);\n  sig = new BN(sig).toRed(red);\n  sig = sig.redPow(new BN(pub.publicExponent));\n  sig = new Buffer(sig.fromRed().toArray());\n  var out = padNum < 8 ? 1 : 0;\n  len = Math.min(sig.length, pad.length);\n  if (sig.length !== pad.length) out = 1;\n  i = -1;\n\n  while (++i < len) {\n    out |= sig[i] ^ pad[i];\n  }\n\n  return out === 0;\n}\n\nfunction ecVerify(sig, hash, pub) {\n  var curveId = curves[pub.data.algorithm.curve.join('.')];\n  if (!curveId) throw new Error('unknown curve ' + pub.data.algorithm.curve.join('.'));\n  var curve = new EC(curveId);\n  var pubkey = pub.data.subjectPrivateKey.data;\n  return curve.verify(hash, sig, pubkey);\n}\n\nfunction dsaVerify(sig, hash, pub) {\n  var p = pub.data.p;\n  var q = pub.data.q;\n  var g = pub.data.g;\n  var y = pub.data.pub_key;\n  var unpacked = parseKeys.signature.decode(sig, 'der');\n  var s = unpacked.s;\n  var r = unpacked.r;\n  checkValue(s, q);\n  checkValue(r, q);\n  var montp = BN.mont(p);\n  var w = s.invm(q);\n  var v = g.toRed(montp).redPow(new BN(hash).mul(w).mod(q)).fromRed().mul(y.toRed(montp).redPow(r.mul(w).mod(q)).fromRed()).mod(p).mod(q);\n  return v.cmp(r) === 0;\n}\n\nfunction checkValue(b, q) {\n  if (b.cmpn(0) <= 0) throw new Error('invalid sig');\n  if (b.cmp(q) >= q) throw new Error('invalid sig');\n}\n\nmodule.exports = verify;","var elliptic = require('elliptic');\n\nvar BN = require('bn.js');\n\nmodule.exports = function createECDH(curve) {\n  return new ECDH(curve);\n};\n\nvar aliases = {\n  secp256k1: {\n    name: 'secp256k1',\n    byteLength: 32\n  },\n  secp224r1: {\n    name: 'p224',\n    byteLength: 28\n  },\n  prime256v1: {\n    name: 'p256',\n    byteLength: 32\n  },\n  prime192v1: {\n    name: 'p192',\n    byteLength: 24\n  },\n  ed25519: {\n    name: 'ed25519',\n    byteLength: 32\n  },\n  secp384r1: {\n    name: 'p384',\n    byteLength: 48\n  },\n  secp521r1: {\n    name: 'p521',\n    byteLength: 66\n  }\n};\naliases.p224 = aliases.secp224r1;\naliases.p256 = aliases.secp256r1 = aliases.prime256v1;\naliases.p192 = aliases.secp192r1 = aliases.prime192v1;\naliases.p384 = aliases.secp384r1;\naliases.p521 = aliases.secp521r1;\n\nfunction ECDH(curve) {\n  this.curveType = aliases[curve];\n\n  if (!this.curveType) {\n    this.curveType = {\n      name: curve\n    };\n  }\n\n  this.curve = new elliptic.ec(this.curveType.name); // eslint-disable-line new-cap\n\n  this.keys = void 0;\n}\n\nECDH.prototype.generateKeys = function (enc, format) {\n  this.keys = this.curve.genKeyPair();\n  return this.getPublicKey(enc, format);\n};\n\nECDH.prototype.computeSecret = function (other, inenc, enc) {\n  inenc = inenc || 'utf8';\n\n  if (!Buffer.isBuffer(other)) {\n    other = new Buffer(other, inenc);\n  }\n\n  var otherPub = this.curve.keyFromPublic(other).getPublic();\n  var out = otherPub.mul(this.keys.getPrivate()).getX();\n  return formatReturnValue(out, enc, this.curveType.byteLength);\n};\n\nECDH.prototype.getPublicKey = function (enc, format) {\n  var key = this.keys.getPublic(format === 'compressed', true);\n\n  if (format === 'hybrid') {\n    if (key[key.length - 1] % 2) {\n      key[0] = 7;\n    } else {\n      key[0] = 6;\n    }\n  }\n\n  return formatReturnValue(key, enc);\n};\n\nECDH.prototype.getPrivateKey = function (enc) {\n  return formatReturnValue(this.keys.getPrivate(), enc);\n};\n\nECDH.prototype.setPublicKey = function (pub, enc) {\n  enc = enc || 'utf8';\n\n  if (!Buffer.isBuffer(pub)) {\n    pub = new Buffer(pub, enc);\n  }\n\n  this.keys._importPublic(pub);\n\n  return this;\n};\n\nECDH.prototype.setPrivateKey = function (priv, enc) {\n  enc = enc || 'utf8';\n\n  if (!Buffer.isBuffer(priv)) {\n    priv = new Buffer(priv, enc);\n  }\n\n  var _priv = new BN(priv);\n\n  _priv = _priv.toString(16);\n  this.keys = this.curve.genKeyPair();\n\n  this.keys._importPrivate(_priv);\n\n  return this;\n};\n\nfunction formatReturnValue(bn, enc, len) {\n  if (!Array.isArray(bn)) {\n    bn = bn.toArray();\n  }\n\n  var buf = new Buffer(bn);\n\n  if (len && buf.length < len) {\n    var zeros = new Buffer(len - buf.length);\n    zeros.fill(0);\n    buf = Buffer.concat([zeros, buf]);\n  }\n\n  if (!enc) {\n    return buf;\n  } else {\n    return buf.toString(enc);\n  }\n}","exports.publicEncrypt = require('./publicEncrypt');\nexports.privateDecrypt = require('./privateDecrypt');\n\nexports.privateEncrypt = function privateEncrypt(key, buf) {\n  return exports.publicEncrypt(key, buf, true);\n};\n\nexports.publicDecrypt = function publicDecrypt(key, buf) {\n  return exports.privateDecrypt(key, buf, true);\n};","var parseKeys = require('parse-asn1');\n\nvar randomBytes = require('randombytes');\n\nvar createHash = require('create-hash');\n\nvar mgf = require('./mgf');\n\nvar xor = require('./xor');\n\nvar BN = require('bn.js');\n\nvar withPublic = require('./withPublic');\n\nvar crt = require('browserify-rsa');\n\nvar Buffer = require('safe-buffer').Buffer;\n\nmodule.exports = function publicEncrypt(publicKey, msg, reverse) {\n  var padding;\n\n  if (publicKey.padding) {\n    padding = publicKey.padding;\n  } else if (reverse) {\n    padding = 1;\n  } else {\n    padding = 4;\n  }\n\n  var key = parseKeys(publicKey);\n  var paddedMsg;\n\n  if (padding === 4) {\n    paddedMsg = oaep(key, msg);\n  } else if (padding === 1) {\n    paddedMsg = pkcs1(key, msg, reverse);\n  } else if (padding === 3) {\n    paddedMsg = new BN(msg);\n\n    if (paddedMsg.cmp(key.modulus) >= 0) {\n      throw new Error('data too long for modulus');\n    }\n  } else {\n    throw new Error('unknown padding');\n  }\n\n  if (reverse) {\n    return crt(paddedMsg, key);\n  } else {\n    return withPublic(paddedMsg, key);\n  }\n};\n\nfunction oaep(key, msg) {\n  var k = key.modulus.byteLength();\n  var mLen = msg.length;\n  var iHash = createHash('sha1').update(Buffer.alloc(0)).digest();\n  var hLen = iHash.length;\n  var hLen2 = 2 * hLen;\n\n  if (mLen > k - hLen2 - 2) {\n    throw new Error('message too long');\n  }\n\n  var ps = Buffer.alloc(k - mLen - hLen2 - 2);\n  var dblen = k - hLen - 1;\n  var seed = randomBytes(hLen);\n  var maskedDb = xor(Buffer.concat([iHash, ps, Buffer.alloc(1, 1), msg], dblen), mgf(seed, dblen));\n  var maskedSeed = xor(seed, mgf(maskedDb, hLen));\n  return new BN(Buffer.concat([Buffer.alloc(1), maskedSeed, maskedDb], k));\n}\n\nfunction pkcs1(key, msg, reverse) {\n  var mLen = msg.length;\n  var k = key.modulus.byteLength();\n\n  if (mLen > k - 11) {\n    throw new Error('message too long');\n  }\n\n  var ps;\n\n  if (reverse) {\n    ps = Buffer.alloc(k - mLen - 3, 0xff);\n  } else {\n    ps = nonZero(k - mLen - 3);\n  }\n\n  return new BN(Buffer.concat([Buffer.from([0, reverse ? 1 : 2]), ps, Buffer.alloc(1), msg], k));\n}\n\nfunction nonZero(len) {\n  var out = Buffer.allocUnsafe(len);\n  var i = 0;\n  var cache = randomBytes(len * 2);\n  var cur = 0;\n  var num;\n\n  while (i < len) {\n    if (cur === cache.length) {\n      cache = randomBytes(len * 2);\n      cur = 0;\n    }\n\n    num = cache[cur++];\n\n    if (num) {\n      out[i++] = num;\n    }\n  }\n\n  return out;\n}","var parseKeys = require('parse-asn1');\n\nvar mgf = require('./mgf');\n\nvar xor = require('./xor');\n\nvar BN = require('bn.js');\n\nvar crt = require('browserify-rsa');\n\nvar createHash = require('create-hash');\n\nvar withPublic = require('./withPublic');\n\nvar Buffer = require('safe-buffer').Buffer;\n\nmodule.exports = function privateDecrypt(privateKey, enc, reverse) {\n  var padding;\n\n  if (privateKey.padding) {\n    padding = privateKey.padding;\n  } else if (reverse) {\n    padding = 1;\n  } else {\n    padding = 4;\n  }\n\n  var key = parseKeys(privateKey);\n  var k = key.modulus.byteLength();\n\n  if (enc.length > k || new BN(enc).cmp(key.modulus) >= 0) {\n    throw new Error('decryption error');\n  }\n\n  var msg;\n\n  if (reverse) {\n    msg = withPublic(new BN(enc), key);\n  } else {\n    msg = crt(enc, key);\n  }\n\n  var zBuffer = Buffer.alloc(k - msg.length);\n  msg = Buffer.concat([zBuffer, msg], k);\n\n  if (padding === 4) {\n    return oaep(key, msg);\n  } else if (padding === 1) {\n    return pkcs1(key, msg, reverse);\n  } else if (padding === 3) {\n    return msg;\n  } else {\n    throw new Error('unknown padding');\n  }\n};\n\nfunction oaep(key, msg) {\n  var k = key.modulus.byteLength();\n  var iHash = createHash('sha1').update(Buffer.alloc(0)).digest();\n  var hLen = iHash.length;\n\n  if (msg[0] !== 0) {\n    throw new Error('decryption error');\n  }\n\n  var maskedSeed = msg.slice(1, hLen + 1);\n  var maskedDb = msg.slice(hLen + 1);\n  var seed = xor(maskedSeed, mgf(maskedDb, hLen));\n  var db = xor(maskedDb, mgf(seed, k - hLen - 1));\n\n  if (compare(iHash, db.slice(0, hLen))) {\n    throw new Error('decryption error');\n  }\n\n  var i = hLen;\n\n  while (db[i] === 0) {\n    i++;\n  }\n\n  if (db[i++] !== 1) {\n    throw new Error('decryption error');\n  }\n\n  return db.slice(i);\n}\n\nfunction pkcs1(key, msg, reverse) {\n  var p1 = msg.slice(0, 2);\n  var i = 2;\n  var status = 0;\n\n  while (msg[i++] !== 0) {\n    if (i >= msg.length) {\n      status++;\n      break;\n    }\n  }\n\n  var ps = msg.slice(2, i - 1);\n\n  if (p1.toString('hex') !== '0002' && !reverse || p1.toString('hex') !== '0001' && reverse) {\n    status++;\n  }\n\n  if (ps.length < 8) {\n    status++;\n  }\n\n  if (status) {\n    throw new Error('decryption error');\n  }\n\n  return msg.slice(i);\n}\n\nfunction compare(a, b) {\n  a = Buffer.from(a);\n  b = Buffer.from(b);\n  var dif = 0;\n  var len = a.length;\n\n  if (a.length !== b.length) {\n    dif++;\n    len = Math.min(a.length, b.length);\n  }\n\n  var i = -1;\n\n  while (++i < len) {\n    dif += a[i] ^ b[i];\n  }\n\n  return dif;\n}","'use strict';\n\nfunction oldBrowser() {\n  throw new Error('secure random number generation not supported by this browser\\nuse chrome, FireFox or Internet Explorer 11');\n}\n\nvar safeBuffer = require('safe-buffer');\n\nvar randombytes = require('randombytes');\n\nvar Buffer = safeBuffer.Buffer;\nvar kBufferMaxLength = safeBuffer.kMaxLength;\nvar crypto = global.crypto || global.msCrypto;\nvar kMaxUint32 = Math.pow(2, 32) - 1;\n\nfunction assertOffset(offset, length) {\n  if (typeof offset !== 'number' || offset !== offset) {\n    // eslint-disable-line no-self-compare\n    throw new TypeError('offset must be a number');\n  }\n\n  if (offset > kMaxUint32 || offset < 0) {\n    throw new TypeError('offset must be a uint32');\n  }\n\n  if (offset > kBufferMaxLength || offset > length) {\n    throw new RangeError('offset out of range');\n  }\n}\n\nfunction assertSize(size, offset, length) {\n  if (typeof size !== 'number' || size !== size) {\n    // eslint-disable-line no-self-compare\n    throw new TypeError('size must be a number');\n  }\n\n  if (size > kMaxUint32 || size < 0) {\n    throw new TypeError('size must be a uint32');\n  }\n\n  if (size + offset > length || size > kBufferMaxLength) {\n    throw new RangeError('buffer too small');\n  }\n}\n\nif (crypto && crypto.getRandomValues || !process.browser) {\n  exports.randomFill = randomFill;\n  exports.randomFillSync = randomFillSync;\n} else {\n  exports.randomFill = oldBrowser;\n  exports.randomFillSync = oldBrowser;\n}\n\nfunction randomFill(buf, offset, size, cb) {\n  if (!Buffer.isBuffer(buf) && !(buf instanceof global.Uint8Array)) {\n    throw new TypeError('\"buf\" argument must be a Buffer or Uint8Array');\n  }\n\n  if (typeof offset === 'function') {\n    cb = offset;\n    offset = 0;\n    size = buf.length;\n  } else if (typeof size === 'function') {\n    cb = size;\n    size = buf.length - offset;\n  } else if (typeof cb !== 'function') {\n    throw new TypeError('\"cb\" argument must be a function');\n  }\n\n  assertOffset(offset, buf.length);\n  assertSize(size, offset, buf.length);\n  return actualFill(buf, offset, size, cb);\n}\n\nfunction actualFill(buf, offset, size, cb) {\n  if (process.browser) {\n    var ourBuf = buf.buffer;\n    var uint = new Uint8Array(ourBuf, offset, size);\n    crypto.getRandomValues(uint);\n\n    if (cb) {\n      process.nextTick(function () {\n        cb(null, buf);\n      });\n      return;\n    }\n\n    return buf;\n  }\n\n  if (cb) {\n    randombytes(size, function (err, bytes) {\n      if (err) {\n        return cb(err);\n      }\n\n      bytes.copy(buf, offset);\n      cb(null, buf);\n    });\n    return;\n  }\n\n  var bytes = randombytes(size);\n  bytes.copy(buf, offset);\n  return buf;\n}\n\nfunction randomFillSync(buf, offset, size) {\n  if (typeof offset === 'undefined') {\n    offset = 0;\n  }\n\n  if (!Buffer.isBuffer(buf) && !(buf instanceof global.Uint8Array)) {\n    throw new TypeError('\"buf\" argument must be a Buffer or Uint8Array');\n  }\n\n  assertOffset(offset, buf.length);\n  if (size === undefined) size = buf.length - offset;\n  assertSize(size, offset, buf.length);\n  return actualFill(buf, offset, size);\n}","function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n;\n\n(function (sax) {\n  // wrapper for non-node envs\n  sax.parser = function (strict, opt) {\n    return new SAXParser(strict, opt);\n  };\n\n  sax.SAXParser = SAXParser;\n  sax.SAXStream = SAXStream;\n  sax.createStream = createStream; // When we pass the MAX_BUFFER_LENGTH position, start checking for buffer overruns.\n  // When we check, schedule the next check for MAX_BUFFER_LENGTH - (max(buffer lengths)),\n  // since that's the earliest that a buffer overrun could occur.  This way, checks are\n  // as rare as required, but as often as necessary to ensure never crossing this bound.\n  // Furthermore, buffers are only tested at most once per write(), so passing a very\n  // large string into write() might have undesirable effects, but this is manageable by\n  // the caller, so it is assumed to be safe.  Thus, a call to write() may, in the extreme\n  // edge case, result in creating at most one complete copy of the string passed in.\n  // Set to Infinity to have unlimited buffers.\n\n  sax.MAX_BUFFER_LENGTH = 64 * 1024;\n  var buffers = ['comment', 'sgmlDecl', 'textNode', 'tagName', 'doctype', 'procInstName', 'procInstBody', 'entity', 'attribName', 'attribValue', 'cdata', 'script'];\n  sax.EVENTS = ['text', 'processinginstruction', 'sgmldeclaration', 'doctype', 'comment', 'opentagstart', 'attribute', 'opentag', 'closetag', 'opencdata', 'cdata', 'closecdata', 'error', 'end', 'ready', 'script', 'opennamespace', 'closenamespace'];\n\n  function SAXParser(strict, opt) {\n    if (!(this instanceof SAXParser)) {\n      return new SAXParser(strict, opt);\n    }\n\n    var parser = this;\n    clearBuffers(parser);\n    parser.q = parser.c = '';\n    parser.bufferCheckPosition = sax.MAX_BUFFER_LENGTH;\n    parser.opt = opt || {};\n    parser.opt.lowercase = parser.opt.lowercase || parser.opt.lowercasetags;\n    parser.looseCase = parser.opt.lowercase ? 'toLowerCase' : 'toUpperCase';\n    parser.tags = [];\n    parser.closed = parser.closedRoot = parser.sawRoot = false;\n    parser.tag = parser.error = null;\n    parser.strict = !!strict;\n    parser.noscript = !!(strict || parser.opt.noscript);\n    parser.state = S.BEGIN;\n    parser.strictEntities = parser.opt.strictEntities;\n    parser.ENTITIES = parser.strictEntities ? Object.create(sax.XML_ENTITIES) : Object.create(sax.ENTITIES);\n    parser.attribList = []; // namespaces form a prototype chain.\n    // it always points at the current tag,\n    // which protos to its parent tag.\n\n    if (parser.opt.xmlns) {\n      parser.ns = Object.create(rootNS);\n    } // mostly just for error reporting\n\n\n    parser.trackPosition = parser.opt.position !== false;\n\n    if (parser.trackPosition) {\n      parser.position = parser.line = parser.column = 0;\n    }\n\n    emit(parser, 'onready');\n  }\n\n  if (!Object.create) {\n    Object.create = function (o) {\n      function F() {}\n\n      F.prototype = o;\n      var newf = new F();\n      return newf;\n    };\n  }\n\n  if (!Object.keys) {\n    Object.keys = function (o) {\n      var a = [];\n\n      for (var i in o) {\n        if (o.hasOwnProperty(i)) a.push(i);\n      }\n\n      return a;\n    };\n  }\n\n  function checkBufferLength(parser) {\n    var maxAllowed = Math.max(sax.MAX_BUFFER_LENGTH, 10);\n    var maxActual = 0;\n\n    for (var i = 0, l = buffers.length; i < l; i++) {\n      var len = parser[buffers[i]].length;\n\n      if (len > maxAllowed) {\n        // Text/cdata nodes can get big, and since they're buffered,\n        // we can get here under normal conditions.\n        // Avoid issues by emitting the text node now,\n        // so at least it won't get any bigger.\n        switch (buffers[i]) {\n          case 'textNode':\n            closeText(parser);\n            break;\n\n          case 'cdata':\n            emitNode(parser, 'oncdata', parser.cdata);\n            parser.cdata = '';\n            break;\n\n          case 'script':\n            emitNode(parser, 'onscript', parser.script);\n            parser.script = '';\n            break;\n\n          default:\n            error(parser, 'Max buffer length exceeded: ' + buffers[i]);\n        }\n      }\n\n      maxActual = Math.max(maxActual, len);\n    } // schedule the next check for the earliest possible buffer overrun.\n\n\n    var m = sax.MAX_BUFFER_LENGTH - maxActual;\n    parser.bufferCheckPosition = m + parser.position;\n  }\n\n  function clearBuffers(parser) {\n    for (var i = 0, l = buffers.length; i < l; i++) {\n      parser[buffers[i]] = '';\n    }\n  }\n\n  function flushBuffers(parser) {\n    closeText(parser);\n\n    if (parser.cdata !== '') {\n      emitNode(parser, 'oncdata', parser.cdata);\n      parser.cdata = '';\n    }\n\n    if (parser.script !== '') {\n      emitNode(parser, 'onscript', parser.script);\n      parser.script = '';\n    }\n  }\n\n  SAXParser.prototype = {\n    end: function end() {\n      _end(this);\n    },\n    write: write,\n    resume: function resume() {\n      this.error = null;\n      return this;\n    },\n    close: function close() {\n      return this.write(null);\n    },\n    flush: function flush() {\n      flushBuffers(this);\n    }\n  };\n  var Stream;\n\n  try {\n    Stream = require('stream').Stream;\n  } catch (ex) {\n    Stream = function Stream() {};\n  }\n\n  var streamWraps = sax.EVENTS.filter(function (ev) {\n    return ev !== 'error' && ev !== 'end';\n  });\n\n  function createStream(strict, opt) {\n    return new SAXStream(strict, opt);\n  }\n\n  function SAXStream(strict, opt) {\n    if (!(this instanceof SAXStream)) {\n      return new SAXStream(strict, opt);\n    }\n\n    Stream.apply(this);\n    this._parser = new SAXParser(strict, opt);\n    this.writable = true;\n    this.readable = true;\n    var me = this;\n\n    this._parser.onend = function () {\n      me.emit('end');\n    };\n\n    this._parser.onerror = function (er) {\n      me.emit('error', er); // if didn't throw, then means error was handled.\n      // go ahead and clear error, so we can write again.\n\n      me._parser.error = null;\n    };\n\n    this._decoder = null;\n    streamWraps.forEach(function (ev) {\n      Object.defineProperty(me, 'on' + ev, {\n        get: function get() {\n          return me._parser['on' + ev];\n        },\n        set: function set(h) {\n          if (!h) {\n            me.removeAllListeners(ev);\n            me._parser['on' + ev] = h;\n            return h;\n          }\n\n          me.on(ev, h);\n        },\n        enumerable: true,\n        configurable: false\n      });\n    });\n  }\n\n  SAXStream.prototype = Object.create(Stream.prototype, {\n    constructor: {\n      value: SAXStream\n    }\n  });\n\n  SAXStream.prototype.write = function (data) {\n    if (typeof Buffer === 'function' && typeof Buffer.isBuffer === 'function' && Buffer.isBuffer(data)) {\n      if (!this._decoder) {\n        var SD = require('string_decoder').StringDecoder;\n\n        this._decoder = new SD('utf8');\n      }\n\n      data = this._decoder.write(data);\n    }\n\n    this._parser.write(data.toString());\n\n    this.emit('data', data);\n    return true;\n  };\n\n  SAXStream.prototype.end = function (chunk) {\n    if (chunk && chunk.length) {\n      this.write(chunk);\n    }\n\n    this._parser.end();\n\n    return true;\n  };\n\n  SAXStream.prototype.on = function (ev, handler) {\n    var me = this;\n\n    if (!me._parser['on' + ev] && streamWraps.indexOf(ev) !== -1) {\n      me._parser['on' + ev] = function () {\n        var args = arguments.length === 1 ? [arguments[0]] : Array.apply(null, arguments);\n        args.splice(0, 0, ev);\n        me.emit.apply(me, args);\n      };\n    }\n\n    return Stream.prototype.on.call(me, ev, handler);\n  }; // this really needs to be replaced with character classes.\n  // XML allows all manner of ridiculous numbers and digits.\n\n\n  var CDATA = '[CDATA[';\n  var DOCTYPE = 'DOCTYPE';\n  var XML_NAMESPACE = 'http://www.w3.org/XML/1998/namespace';\n  var XMLNS_NAMESPACE = 'http://www.w3.org/2000/xmlns/';\n  var rootNS = {\n    xml: XML_NAMESPACE,\n    xmlns: XMLNS_NAMESPACE // http://www.w3.org/TR/REC-xml/#NT-NameStartChar\n    // This implementation works on strings, a single character at a time\n    // as such, it cannot ever support astral-plane characters (10000-EFFFF)\n    // without a significant breaking change to either this  parser, or the\n    // JavaScript language.  Implementation of an emoji-capable xml parser\n    // is left as an exercise for the reader.\n\n  };\n  var nameStart = /[:_A-Za-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD]/;\n  var nameBody = /[:_A-Za-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\u00B7\\u0300-\\u036F\\u203F-\\u2040.\\d-]/;\n  var entityStart = /[#:_A-Za-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD]/;\n  var entityBody = /[#:_A-Za-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02FF\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\\u00B7\\u0300-\\u036F\\u203F-\\u2040.\\d-]/;\n\n  function isWhitespace(c) {\n    return c === ' ' || c === '\\n' || c === '\\r' || c === '\\t';\n  }\n\n  function isQuote(c) {\n    return c === '\"' || c === '\\'';\n  }\n\n  function isAttribEnd(c) {\n    return c === '>' || isWhitespace(c);\n  }\n\n  function isMatch(regex, c) {\n    return regex.test(c);\n  }\n\n  function notMatch(regex, c) {\n    return !isMatch(regex, c);\n  }\n\n  var S = 0;\n  sax.STATE = {\n    BEGIN: S++,\n    // leading byte order mark or whitespace\n    BEGIN_WHITESPACE: S++,\n    // leading whitespace\n    TEXT: S++,\n    // general stuff\n    TEXT_ENTITY: S++,\n    // &amp and such.\n    OPEN_WAKA: S++,\n    // <\n    SGML_DECL: S++,\n    // <!BLARG\n    SGML_DECL_QUOTED: S++,\n    // <!BLARG foo \"bar\n    DOCTYPE: S++,\n    // <!DOCTYPE\n    DOCTYPE_QUOTED: S++,\n    // <!DOCTYPE \"//blah\n    DOCTYPE_DTD: S++,\n    // <!DOCTYPE \"//blah\" [ ...\n    DOCTYPE_DTD_QUOTED: S++,\n    // <!DOCTYPE \"//blah\" [ \"foo\n    COMMENT_STARTING: S++,\n    // <!-\n    COMMENT: S++,\n    // <!--\n    COMMENT_ENDING: S++,\n    // <!-- blah -\n    COMMENT_ENDED: S++,\n    // <!-- blah --\n    CDATA: S++,\n    // <![CDATA[ something\n    CDATA_ENDING: S++,\n    // ]\n    CDATA_ENDING_2: S++,\n    // ]]\n    PROC_INST: S++,\n    // <?hi\n    PROC_INST_BODY: S++,\n    // <?hi there\n    PROC_INST_ENDING: S++,\n    // <?hi \"there\" ?\n    OPEN_TAG: S++,\n    // <strong\n    OPEN_TAG_SLASH: S++,\n    // <strong /\n    ATTRIB: S++,\n    // <a\n    ATTRIB_NAME: S++,\n    // <a foo\n    ATTRIB_NAME_SAW_WHITE: S++,\n    // <a foo _\n    ATTRIB_VALUE: S++,\n    // <a foo=\n    ATTRIB_VALUE_QUOTED: S++,\n    // <a foo=\"bar\n    ATTRIB_VALUE_CLOSED: S++,\n    // <a foo=\"bar\"\n    ATTRIB_VALUE_UNQUOTED: S++,\n    // <a foo=bar\n    ATTRIB_VALUE_ENTITY_Q: S++,\n    // <foo bar=\"&quot;\"\n    ATTRIB_VALUE_ENTITY_U: S++,\n    // <foo bar=&quot\n    CLOSE_TAG: S++,\n    // </a\n    CLOSE_TAG_SAW_WHITE: S++,\n    // </a   >\n    SCRIPT: S++,\n    // <script> ...\n    SCRIPT_ENDING: S++ // <script> ... <\n\n  };\n  sax.XML_ENTITIES = {\n    'amp': '&',\n    'gt': '>',\n    'lt': '<',\n    'quot': '\"',\n    'apos': \"'\"\n  };\n  sax.ENTITIES = {\n    'amp': '&',\n    'gt': '>',\n    'lt': '<',\n    'quot': '\"',\n    'apos': \"'\",\n    'AElig': 198,\n    'Aacute': 193,\n    'Acirc': 194,\n    'Agrave': 192,\n    'Aring': 197,\n    'Atilde': 195,\n    'Auml': 196,\n    'Ccedil': 199,\n    'ETH': 208,\n    'Eacute': 201,\n    'Ecirc': 202,\n    'Egrave': 200,\n    'Euml': 203,\n    'Iacute': 205,\n    'Icirc': 206,\n    'Igrave': 204,\n    'Iuml': 207,\n    'Ntilde': 209,\n    'Oacute': 211,\n    'Ocirc': 212,\n    'Ograve': 210,\n    'Oslash': 216,\n    'Otilde': 213,\n    'Ouml': 214,\n    'THORN': 222,\n    'Uacute': 218,\n    'Ucirc': 219,\n    'Ugrave': 217,\n    'Uuml': 220,\n    'Yacute': 221,\n    'aacute': 225,\n    'acirc': 226,\n    'aelig': 230,\n    'agrave': 224,\n    'aring': 229,\n    'atilde': 227,\n    'auml': 228,\n    'ccedil': 231,\n    'eacute': 233,\n    'ecirc': 234,\n    'egrave': 232,\n    'eth': 240,\n    'euml': 235,\n    'iacute': 237,\n    'icirc': 238,\n    'igrave': 236,\n    'iuml': 239,\n    'ntilde': 241,\n    'oacute': 243,\n    'ocirc': 244,\n    'ograve': 242,\n    'oslash': 248,\n    'otilde': 245,\n    'ouml': 246,\n    'szlig': 223,\n    'thorn': 254,\n    'uacute': 250,\n    'ucirc': 251,\n    'ugrave': 249,\n    'uuml': 252,\n    'yacute': 253,\n    'yuml': 255,\n    'copy': 169,\n    'reg': 174,\n    'nbsp': 160,\n    'iexcl': 161,\n    'cent': 162,\n    'pound': 163,\n    'curren': 164,\n    'yen': 165,\n    'brvbar': 166,\n    'sect': 167,\n    'uml': 168,\n    'ordf': 170,\n    'laquo': 171,\n    'not': 172,\n    'shy': 173,\n    'macr': 175,\n    'deg': 176,\n    'plusmn': 177,\n    'sup1': 185,\n    'sup2': 178,\n    'sup3': 179,\n    'acute': 180,\n    'micro': 181,\n    'para': 182,\n    'middot': 183,\n    'cedil': 184,\n    'ordm': 186,\n    'raquo': 187,\n    'frac14': 188,\n    'frac12': 189,\n    'frac34': 190,\n    'iquest': 191,\n    'times': 215,\n    'divide': 247,\n    'OElig': 338,\n    'oelig': 339,\n    'Scaron': 352,\n    'scaron': 353,\n    'Yuml': 376,\n    'fnof': 402,\n    'circ': 710,\n    'tilde': 732,\n    'Alpha': 913,\n    'Beta': 914,\n    'Gamma': 915,\n    'Delta': 916,\n    'Epsilon': 917,\n    'Zeta': 918,\n    'Eta': 919,\n    'Theta': 920,\n    'Iota': 921,\n    'Kappa': 922,\n    'Lambda': 923,\n    'Mu': 924,\n    'Nu': 925,\n    'Xi': 926,\n    'Omicron': 927,\n    'Pi': 928,\n    'Rho': 929,\n    'Sigma': 931,\n    'Tau': 932,\n    'Upsilon': 933,\n    'Phi': 934,\n    'Chi': 935,\n    'Psi': 936,\n    'Omega': 937,\n    'alpha': 945,\n    'beta': 946,\n    'gamma': 947,\n    'delta': 948,\n    'epsilon': 949,\n    'zeta': 950,\n    'eta': 951,\n    'theta': 952,\n    'iota': 953,\n    'kappa': 954,\n    'lambda': 955,\n    'mu': 956,\n    'nu': 957,\n    'xi': 958,\n    'omicron': 959,\n    'pi': 960,\n    'rho': 961,\n    'sigmaf': 962,\n    'sigma': 963,\n    'tau': 964,\n    'upsilon': 965,\n    'phi': 966,\n    'chi': 967,\n    'psi': 968,\n    'omega': 969,\n    'thetasym': 977,\n    'upsih': 978,\n    'piv': 982,\n    'ensp': 8194,\n    'emsp': 8195,\n    'thinsp': 8201,\n    'zwnj': 8204,\n    'zwj': 8205,\n    'lrm': 8206,\n    'rlm': 8207,\n    'ndash': 8211,\n    'mdash': 8212,\n    'lsquo': 8216,\n    'rsquo': 8217,\n    'sbquo': 8218,\n    'ldquo': 8220,\n    'rdquo': 8221,\n    'bdquo': 8222,\n    'dagger': 8224,\n    'Dagger': 8225,\n    'bull': 8226,\n    'hellip': 8230,\n    'permil': 8240,\n    'prime': 8242,\n    'Prime': 8243,\n    'lsaquo': 8249,\n    'rsaquo': 8250,\n    'oline': 8254,\n    'frasl': 8260,\n    'euro': 8364,\n    'image': 8465,\n    'weierp': 8472,\n    'real': 8476,\n    'trade': 8482,\n    'alefsym': 8501,\n    'larr': 8592,\n    'uarr': 8593,\n    'rarr': 8594,\n    'darr': 8595,\n    'harr': 8596,\n    'crarr': 8629,\n    'lArr': 8656,\n    'uArr': 8657,\n    'rArr': 8658,\n    'dArr': 8659,\n    'hArr': 8660,\n    'forall': 8704,\n    'part': 8706,\n    'exist': 8707,\n    'empty': 8709,\n    'nabla': 8711,\n    'isin': 8712,\n    'notin': 8713,\n    'ni': 8715,\n    'prod': 8719,\n    'sum': 8721,\n    'minus': 8722,\n    'lowast': 8727,\n    'radic': 8730,\n    'prop': 8733,\n    'infin': 8734,\n    'ang': 8736,\n    'and': 8743,\n    'or': 8744,\n    'cap': 8745,\n    'cup': 8746,\n    'int': 8747,\n    'there4': 8756,\n    'sim': 8764,\n    'cong': 8773,\n    'asymp': 8776,\n    'ne': 8800,\n    'equiv': 8801,\n    'le': 8804,\n    'ge': 8805,\n    'sub': 8834,\n    'sup': 8835,\n    'nsub': 8836,\n    'sube': 8838,\n    'supe': 8839,\n    'oplus': 8853,\n    'otimes': 8855,\n    'perp': 8869,\n    'sdot': 8901,\n    'lceil': 8968,\n    'rceil': 8969,\n    'lfloor': 8970,\n    'rfloor': 8971,\n    'lang': 9001,\n    'rang': 9002,\n    'loz': 9674,\n    'spades': 9824,\n    'clubs': 9827,\n    'hearts': 9829,\n    'diams': 9830\n  };\n  Object.keys(sax.ENTITIES).forEach(function (key) {\n    var e = sax.ENTITIES[key];\n    var s = typeof e === 'number' ? String.fromCharCode(e) : e;\n    sax.ENTITIES[key] = s;\n  });\n\n  for (var s in sax.STATE) {\n    sax.STATE[sax.STATE[s]] = s;\n  } // shorthand\n\n\n  S = sax.STATE;\n\n  function emit(parser, event, data) {\n    parser[event] && parser[event](data);\n  }\n\n  function emitNode(parser, nodeType, data) {\n    if (parser.textNode) closeText(parser);\n    emit(parser, nodeType, data);\n  }\n\n  function closeText(parser) {\n    parser.textNode = textopts(parser.opt, parser.textNode);\n    if (parser.textNode) emit(parser, 'ontext', parser.textNode);\n    parser.textNode = '';\n  }\n\n  function textopts(opt, text) {\n    if (opt.trim) text = text.trim();\n    if (opt.normalize) text = text.replace(/\\s+/g, ' ');\n    return text;\n  }\n\n  function error(parser, er) {\n    closeText(parser);\n\n    if (parser.trackPosition) {\n      er += '\\nLine: ' + parser.line + '\\nColumn: ' + parser.column + '\\nChar: ' + parser.c;\n    }\n\n    er = new Error(er);\n    parser.error = er;\n    emit(parser, 'onerror', er);\n    return parser;\n  }\n\n  function _end(parser) {\n    if (parser.sawRoot && !parser.closedRoot) strictFail(parser, 'Unclosed root tag');\n\n    if (parser.state !== S.BEGIN && parser.state !== S.BEGIN_WHITESPACE && parser.state !== S.TEXT) {\n      error(parser, 'Unexpected end');\n    }\n\n    closeText(parser);\n    parser.c = '';\n    parser.closed = true;\n    emit(parser, 'onend');\n    SAXParser.call(parser, parser.strict, parser.opt);\n    return parser;\n  }\n\n  function strictFail(parser, message) {\n    if (_typeof(parser) !== 'object' || !(parser instanceof SAXParser)) {\n      throw new Error('bad call to strictFail');\n    }\n\n    if (parser.strict) {\n      error(parser, message);\n    }\n  }\n\n  function newTag(parser) {\n    if (!parser.strict) parser.tagName = parser.tagName[parser.looseCase]();\n    var parent = parser.tags[parser.tags.length - 1] || parser;\n    var tag = parser.tag = {\n      name: parser.tagName,\n      attributes: {} // will be overridden if tag contails an xmlns=\"foo\" or xmlns:foo=\"bar\"\n\n    };\n\n    if (parser.opt.xmlns) {\n      tag.ns = parent.ns;\n    }\n\n    parser.attribList.length = 0;\n    emitNode(parser, 'onopentagstart', tag);\n  }\n\n  function qname(name, attribute) {\n    var i = name.indexOf(':');\n    var qualName = i < 0 ? ['', name] : name.split(':');\n    var prefix = qualName[0];\n    var local = qualName[1]; // <x \"xmlns\"=\"http://foo\">\n\n    if (attribute && name === 'xmlns') {\n      prefix = 'xmlns';\n      local = '';\n    }\n\n    return {\n      prefix: prefix,\n      local: local\n    };\n  }\n\n  function attrib(parser) {\n    if (!parser.strict) {\n      parser.attribName = parser.attribName[parser.looseCase]();\n    }\n\n    if (parser.attribList.indexOf(parser.attribName) !== -1 || parser.tag.attributes.hasOwnProperty(parser.attribName)) {\n      parser.attribName = parser.attribValue = '';\n      return;\n    }\n\n    if (parser.opt.xmlns) {\n      var qn = qname(parser.attribName, true);\n      var prefix = qn.prefix;\n      var local = qn.local;\n\n      if (prefix === 'xmlns') {\n        // namespace binding attribute. push the binding into scope\n        if (local === 'xml' && parser.attribValue !== XML_NAMESPACE) {\n          strictFail(parser, 'xml: prefix must be bound to ' + XML_NAMESPACE + '\\n' + 'Actual: ' + parser.attribValue);\n        } else if (local === 'xmlns' && parser.attribValue !== XMLNS_NAMESPACE) {\n          strictFail(parser, 'xmlns: prefix must be bound to ' + XMLNS_NAMESPACE + '\\n' + 'Actual: ' + parser.attribValue);\n        } else {\n          var tag = parser.tag;\n          var parent = parser.tags[parser.tags.length - 1] || parser;\n\n          if (tag.ns === parent.ns) {\n            tag.ns = Object.create(parent.ns);\n          }\n\n          tag.ns[local] = parser.attribValue;\n        }\n      } // defer onattribute events until all attributes have been seen\n      // so any new bindings can take effect. preserve attribute order\n      // so deferred events can be emitted in document order\n\n\n      parser.attribList.push([parser.attribName, parser.attribValue]);\n    } else {\n      // in non-xmlns mode, we can emit the event right away\n      parser.tag.attributes[parser.attribName] = parser.attribValue;\n      emitNode(parser, 'onattribute', {\n        name: parser.attribName,\n        value: parser.attribValue\n      });\n    }\n\n    parser.attribName = parser.attribValue = '';\n  }\n\n  function openTag(parser, selfClosing) {\n    if (parser.opt.xmlns) {\n      // emit namespace binding events\n      var tag = parser.tag; // add namespace info to tag\n\n      var qn = qname(parser.tagName);\n      tag.prefix = qn.prefix;\n      tag.local = qn.local;\n      tag.uri = tag.ns[qn.prefix] || '';\n\n      if (tag.prefix && !tag.uri) {\n        strictFail(parser, 'Unbound namespace prefix: ' + JSON.stringify(parser.tagName));\n        tag.uri = qn.prefix;\n      }\n\n      var parent = parser.tags[parser.tags.length - 1] || parser;\n\n      if (tag.ns && parent.ns !== tag.ns) {\n        Object.keys(tag.ns).forEach(function (p) {\n          emitNode(parser, 'onopennamespace', {\n            prefix: p,\n            uri: tag.ns[p]\n          });\n        });\n      } // handle deferred onattribute events\n      // Note: do not apply default ns to attributes:\n      //   http://www.w3.org/TR/REC-xml-names/#defaulting\n\n\n      for (var i = 0, l = parser.attribList.length; i < l; i++) {\n        var nv = parser.attribList[i];\n        var name = nv[0];\n        var value = nv[1];\n        var qualName = qname(name, true);\n        var prefix = qualName.prefix;\n        var local = qualName.local;\n        var uri = prefix === '' ? '' : tag.ns[prefix] || '';\n        var a = {\n          name: name,\n          value: value,\n          prefix: prefix,\n          local: local,\n          uri: uri // if there's any attributes with an undefined namespace,\n          // then fail on them now.\n\n        };\n\n        if (prefix && prefix !== 'xmlns' && !uri) {\n          strictFail(parser, 'Unbound namespace prefix: ' + JSON.stringify(prefix));\n          a.uri = prefix;\n        }\n\n        parser.tag.attributes[name] = a;\n        emitNode(parser, 'onattribute', a);\n      }\n\n      parser.attribList.length = 0;\n    }\n\n    parser.tag.isSelfClosing = !!selfClosing; // process the tag\n\n    parser.sawRoot = true;\n    parser.tags.push(parser.tag);\n    emitNode(parser, 'onopentag', parser.tag);\n\n    if (!selfClosing) {\n      // special case for <script> in non-strict mode.\n      if (!parser.noscript && parser.tagName.toLowerCase() === 'script') {\n        parser.state = S.SCRIPT;\n      } else {\n        parser.state = S.TEXT;\n      }\n\n      parser.tag = null;\n      parser.tagName = '';\n    }\n\n    parser.attribName = parser.attribValue = '';\n    parser.attribList.length = 0;\n  }\n\n  function closeTag(parser) {\n    if (!parser.tagName) {\n      strictFail(parser, 'Weird empty close tag.');\n      parser.textNode += '</>';\n      parser.state = S.TEXT;\n      return;\n    }\n\n    if (parser.script) {\n      if (parser.tagName !== 'script') {\n        parser.script += '</' + parser.tagName + '>';\n        parser.tagName = '';\n        parser.state = S.SCRIPT;\n        return;\n      }\n\n      emitNode(parser, 'onscript', parser.script);\n      parser.script = '';\n    } // first make sure that the closing tag actually exists.\n    // <a><b></c></b></a> will close everything, otherwise.\n\n\n    var t = parser.tags.length;\n    var tagName = parser.tagName;\n\n    if (!parser.strict) {\n      tagName = tagName[parser.looseCase]();\n    }\n\n    var closeTo = tagName;\n\n    while (t--) {\n      var close = parser.tags[t];\n\n      if (close.name !== closeTo) {\n        // fail the first time in strict mode\n        strictFail(parser, 'Unexpected close tag');\n      } else {\n        break;\n      }\n    } // didn't find it.  we already failed for strict, so just abort.\n\n\n    if (t < 0) {\n      strictFail(parser, 'Unmatched closing tag: ' + parser.tagName);\n      parser.textNode += '</' + parser.tagName + '>';\n      parser.state = S.TEXT;\n      return;\n    }\n\n    parser.tagName = tagName;\n    var s = parser.tags.length;\n\n    while (s-- > t) {\n      var tag = parser.tag = parser.tags.pop();\n      parser.tagName = parser.tag.name;\n      emitNode(parser, 'onclosetag', parser.tagName);\n      var x = {};\n\n      for (var i in tag.ns) {\n        x[i] = tag.ns[i];\n      }\n\n      var parent = parser.tags[parser.tags.length - 1] || parser;\n\n      if (parser.opt.xmlns && tag.ns !== parent.ns) {\n        // remove namespace bindings introduced by tag\n        Object.keys(tag.ns).forEach(function (p) {\n          var n = tag.ns[p];\n          emitNode(parser, 'onclosenamespace', {\n            prefix: p,\n            uri: n\n          });\n        });\n      }\n    }\n\n    if (t === 0) parser.closedRoot = true;\n    parser.tagName = parser.attribValue = parser.attribName = '';\n    parser.attribList.length = 0;\n    parser.state = S.TEXT;\n  }\n\n  function parseEntity(parser) {\n    var entity = parser.entity;\n    var entityLC = entity.toLowerCase();\n    var num;\n    var numStr = '';\n\n    if (parser.ENTITIES[entity]) {\n      return parser.ENTITIES[entity];\n    }\n\n    if (parser.ENTITIES[entityLC]) {\n      return parser.ENTITIES[entityLC];\n    }\n\n    entity = entityLC;\n\n    if (entity.charAt(0) === '#') {\n      if (entity.charAt(1) === 'x') {\n        entity = entity.slice(2);\n        num = parseInt(entity, 16);\n        numStr = num.toString(16);\n      } else {\n        entity = entity.slice(1);\n        num = parseInt(entity, 10);\n        numStr = num.toString(10);\n      }\n    }\n\n    entity = entity.replace(/^0+/, '');\n\n    if (isNaN(num) || numStr.toLowerCase() !== entity) {\n      strictFail(parser, 'Invalid character entity');\n      return '&' + parser.entity + ';';\n    }\n\n    return String.fromCodePoint(num);\n  }\n\n  function beginWhiteSpace(parser, c) {\n    if (c === '<') {\n      parser.state = S.OPEN_WAKA;\n      parser.startTagPosition = parser.position;\n    } else if (!isWhitespace(c)) {\n      // have to process this as a text node.\n      // weird, but happens.\n      strictFail(parser, 'Non-whitespace before first tag.');\n      parser.textNode = c;\n      parser.state = S.TEXT;\n    }\n  }\n\n  function charAt(chunk, i) {\n    var result = '';\n\n    if (i < chunk.length) {\n      result = chunk.charAt(i);\n    }\n\n    return result;\n  }\n\n  function write(chunk) {\n    var parser = this;\n\n    if (this.error) {\n      throw this.error;\n    }\n\n    if (parser.closed) {\n      return error(parser, 'Cannot write after close. Assign an onready handler.');\n    }\n\n    if (chunk === null) {\n      return _end(parser);\n    }\n\n    if (_typeof(chunk) === 'object') {\n      chunk = chunk.toString();\n    }\n\n    var i = 0;\n    var c = '';\n\n    while (true) {\n      c = charAt(chunk, i++);\n      parser.c = c;\n\n      if (!c) {\n        break;\n      }\n\n      if (parser.trackPosition) {\n        parser.position++;\n\n        if (c === '\\n') {\n          parser.line++;\n          parser.column = 0;\n        } else {\n          parser.column++;\n        }\n      }\n\n      switch (parser.state) {\n        case S.BEGIN:\n          parser.state = S.BEGIN_WHITESPACE;\n\n          if (c === \"\\uFEFF\") {\n            continue;\n          }\n\n          beginWhiteSpace(parser, c);\n          continue;\n\n        case S.BEGIN_WHITESPACE:\n          beginWhiteSpace(parser, c);\n          continue;\n\n        case S.TEXT:\n          if (parser.sawRoot && !parser.closedRoot) {\n            var starti = i - 1;\n\n            while (c && c !== '<' && c !== '&') {\n              c = charAt(chunk, i++);\n\n              if (c && parser.trackPosition) {\n                parser.position++;\n\n                if (c === '\\n') {\n                  parser.line++;\n                  parser.column = 0;\n                } else {\n                  parser.column++;\n                }\n              }\n            }\n\n            parser.textNode += chunk.substring(starti, i - 1);\n          }\n\n          if (c === '<' && !(parser.sawRoot && parser.closedRoot && !parser.strict)) {\n            parser.state = S.OPEN_WAKA;\n            parser.startTagPosition = parser.position;\n          } else {\n            if (!isWhitespace(c) && (!parser.sawRoot || parser.closedRoot)) {\n              strictFail(parser, 'Text data outside of root node.');\n            }\n\n            if (c === '&') {\n              parser.state = S.TEXT_ENTITY;\n            } else {\n              parser.textNode += c;\n            }\n          }\n\n          continue;\n\n        case S.SCRIPT:\n          // only non-strict\n          if (c === '<') {\n            parser.state = S.SCRIPT_ENDING;\n          } else {\n            parser.script += c;\n          }\n\n          continue;\n\n        case S.SCRIPT_ENDING:\n          if (c === '/') {\n            parser.state = S.CLOSE_TAG;\n          } else {\n            parser.script += '<' + c;\n            parser.state = S.SCRIPT;\n          }\n\n          continue;\n\n        case S.OPEN_WAKA:\n          // either a /, ?, !, or text is coming next.\n          if (c === '!') {\n            parser.state = S.SGML_DECL;\n            parser.sgmlDecl = '';\n          } else if (isWhitespace(c)) {// wait for it...\n          } else if (isMatch(nameStart, c)) {\n            parser.state = S.OPEN_TAG;\n            parser.tagName = c;\n          } else if (c === '/') {\n            parser.state = S.CLOSE_TAG;\n            parser.tagName = '';\n          } else if (c === '?') {\n            parser.state = S.PROC_INST;\n            parser.procInstName = parser.procInstBody = '';\n          } else {\n            strictFail(parser, 'Unencoded <'); // if there was some whitespace, then add that in.\n\n            if (parser.startTagPosition + 1 < parser.position) {\n              var pad = parser.position - parser.startTagPosition;\n              c = new Array(pad).join(' ') + c;\n            }\n\n            parser.textNode += '<' + c;\n            parser.state = S.TEXT;\n          }\n\n          continue;\n\n        case S.SGML_DECL:\n          if ((parser.sgmlDecl + c).toUpperCase() === CDATA) {\n            emitNode(parser, 'onopencdata');\n            parser.state = S.CDATA;\n            parser.sgmlDecl = '';\n            parser.cdata = '';\n          } else if (parser.sgmlDecl + c === '--') {\n            parser.state = S.COMMENT;\n            parser.comment = '';\n            parser.sgmlDecl = '';\n          } else if ((parser.sgmlDecl + c).toUpperCase() === DOCTYPE) {\n            parser.state = S.DOCTYPE;\n\n            if (parser.doctype || parser.sawRoot) {\n              strictFail(parser, 'Inappropriately located doctype declaration');\n            }\n\n            parser.doctype = '';\n            parser.sgmlDecl = '';\n          } else if (c === '>') {\n            emitNode(parser, 'onsgmldeclaration', parser.sgmlDecl);\n            parser.sgmlDecl = '';\n            parser.state = S.TEXT;\n          } else if (isQuote(c)) {\n            parser.state = S.SGML_DECL_QUOTED;\n            parser.sgmlDecl += c;\n          } else {\n            parser.sgmlDecl += c;\n          }\n\n          continue;\n\n        case S.SGML_DECL_QUOTED:\n          if (c === parser.q) {\n            parser.state = S.SGML_DECL;\n            parser.q = '';\n          }\n\n          parser.sgmlDecl += c;\n          continue;\n\n        case S.DOCTYPE:\n          if (c === '>') {\n            parser.state = S.TEXT;\n            emitNode(parser, 'ondoctype', parser.doctype);\n            parser.doctype = true; // just remember that we saw it.\n          } else {\n            parser.doctype += c;\n\n            if (c === '[') {\n              parser.state = S.DOCTYPE_DTD;\n            } else if (isQuote(c)) {\n              parser.state = S.DOCTYPE_QUOTED;\n              parser.q = c;\n            }\n          }\n\n          continue;\n\n        case S.DOCTYPE_QUOTED:\n          parser.doctype += c;\n\n          if (c === parser.q) {\n            parser.q = '';\n            parser.state = S.DOCTYPE;\n          }\n\n          continue;\n\n        case S.DOCTYPE_DTD:\n          parser.doctype += c;\n\n          if (c === ']') {\n            parser.state = S.DOCTYPE;\n          } else if (isQuote(c)) {\n            parser.state = S.DOCTYPE_DTD_QUOTED;\n            parser.q = c;\n          }\n\n          continue;\n\n        case S.DOCTYPE_DTD_QUOTED:\n          parser.doctype += c;\n\n          if (c === parser.q) {\n            parser.state = S.DOCTYPE_DTD;\n            parser.q = '';\n          }\n\n          continue;\n\n        case S.COMMENT:\n          if (c === '-') {\n            parser.state = S.COMMENT_ENDING;\n          } else {\n            parser.comment += c;\n          }\n\n          continue;\n\n        case S.COMMENT_ENDING:\n          if (c === '-') {\n            parser.state = S.COMMENT_ENDED;\n            parser.comment = textopts(parser.opt, parser.comment);\n\n            if (parser.comment) {\n              emitNode(parser, 'oncomment', parser.comment);\n            }\n\n            parser.comment = '';\n          } else {\n            parser.comment += '-' + c;\n            parser.state = S.COMMENT;\n          }\n\n          continue;\n\n        case S.COMMENT_ENDED:\n          if (c !== '>') {\n            strictFail(parser, 'Malformed comment'); // allow <!-- blah -- bloo --> in non-strict mode,\n            // which is a comment of \" blah -- bloo \"\n\n            parser.comment += '--' + c;\n            parser.state = S.COMMENT;\n          } else {\n            parser.state = S.TEXT;\n          }\n\n          continue;\n\n        case S.CDATA:\n          if (c === ']') {\n            parser.state = S.CDATA_ENDING;\n          } else {\n            parser.cdata += c;\n          }\n\n          continue;\n\n        case S.CDATA_ENDING:\n          if (c === ']') {\n            parser.state = S.CDATA_ENDING_2;\n          } else {\n            parser.cdata += ']' + c;\n            parser.state = S.CDATA;\n          }\n\n          continue;\n\n        case S.CDATA_ENDING_2:\n          if (c === '>') {\n            if (parser.cdata) {\n              emitNode(parser, 'oncdata', parser.cdata);\n            }\n\n            emitNode(parser, 'onclosecdata');\n            parser.cdata = '';\n            parser.state = S.TEXT;\n          } else if (c === ']') {\n            parser.cdata += ']';\n          } else {\n            parser.cdata += ']]' + c;\n            parser.state = S.CDATA;\n          }\n\n          continue;\n\n        case S.PROC_INST:\n          if (c === '?') {\n            parser.state = S.PROC_INST_ENDING;\n          } else if (isWhitespace(c)) {\n            parser.state = S.PROC_INST_BODY;\n          } else {\n            parser.procInstName += c;\n          }\n\n          continue;\n\n        case S.PROC_INST_BODY:\n          if (!parser.procInstBody && isWhitespace(c)) {\n            continue;\n          } else if (c === '?') {\n            parser.state = S.PROC_INST_ENDING;\n          } else {\n            parser.procInstBody += c;\n          }\n\n          continue;\n\n        case S.PROC_INST_ENDING:\n          if (c === '>') {\n            emitNode(parser, 'onprocessinginstruction', {\n              name: parser.procInstName,\n              body: parser.procInstBody\n            });\n            parser.procInstName = parser.procInstBody = '';\n            parser.state = S.TEXT;\n          } else {\n            parser.procInstBody += '?' + c;\n            parser.state = S.PROC_INST_BODY;\n          }\n\n          continue;\n\n        case S.OPEN_TAG:\n          if (isMatch(nameBody, c)) {\n            parser.tagName += c;\n          } else {\n            newTag(parser);\n\n            if (c === '>') {\n              openTag(parser);\n            } else if (c === '/') {\n              parser.state = S.OPEN_TAG_SLASH;\n            } else {\n              if (!isWhitespace(c)) {\n                strictFail(parser, 'Invalid character in tag name');\n              }\n\n              parser.state = S.ATTRIB;\n            }\n          }\n\n          continue;\n\n        case S.OPEN_TAG_SLASH:\n          if (c === '>') {\n            openTag(parser, true);\n            closeTag(parser);\n          } else {\n            strictFail(parser, 'Forward-slash in opening tag not followed by >');\n            parser.state = S.ATTRIB;\n          }\n\n          continue;\n\n        case S.ATTRIB:\n          // haven't read the attribute name yet.\n          if (isWhitespace(c)) {\n            continue;\n          } else if (c === '>') {\n            openTag(parser);\n          } else if (c === '/') {\n            parser.state = S.OPEN_TAG_SLASH;\n          } else if (isMatch(nameStart, c)) {\n            parser.attribName = c;\n            parser.attribValue = '';\n            parser.state = S.ATTRIB_NAME;\n          } else {\n            strictFail(parser, 'Invalid attribute name');\n          }\n\n          continue;\n\n        case S.ATTRIB_NAME:\n          if (c === '=') {\n            parser.state = S.ATTRIB_VALUE;\n          } else if (c === '>') {\n            strictFail(parser, 'Attribute without value');\n            parser.attribValue = parser.attribName;\n            attrib(parser);\n            openTag(parser);\n          } else if (isWhitespace(c)) {\n            parser.state = S.ATTRIB_NAME_SAW_WHITE;\n          } else if (isMatch(nameBody, c)) {\n            parser.attribName += c;\n          } else {\n            strictFail(parser, 'Invalid attribute name');\n          }\n\n          continue;\n\n        case S.ATTRIB_NAME_SAW_WHITE:\n          if (c === '=') {\n            parser.state = S.ATTRIB_VALUE;\n          } else if (isWhitespace(c)) {\n            continue;\n          } else {\n            strictFail(parser, 'Attribute without value');\n            parser.tag.attributes[parser.attribName] = '';\n            parser.attribValue = '';\n            emitNode(parser, 'onattribute', {\n              name: parser.attribName,\n              value: ''\n            });\n            parser.attribName = '';\n\n            if (c === '>') {\n              openTag(parser);\n            } else if (isMatch(nameStart, c)) {\n              parser.attribName = c;\n              parser.state = S.ATTRIB_NAME;\n            } else {\n              strictFail(parser, 'Invalid attribute name');\n              parser.state = S.ATTRIB;\n            }\n          }\n\n          continue;\n\n        case S.ATTRIB_VALUE:\n          if (isWhitespace(c)) {\n            continue;\n          } else if (isQuote(c)) {\n            parser.q = c;\n            parser.state = S.ATTRIB_VALUE_QUOTED;\n          } else {\n            strictFail(parser, 'Unquoted attribute value');\n            parser.state = S.ATTRIB_VALUE_UNQUOTED;\n            parser.attribValue = c;\n          }\n\n          continue;\n\n        case S.ATTRIB_VALUE_QUOTED:\n          if (c !== parser.q) {\n            if (c === '&') {\n              parser.state = S.ATTRIB_VALUE_ENTITY_Q;\n            } else {\n              parser.attribValue += c;\n            }\n\n            continue;\n          }\n\n          attrib(parser);\n          parser.q = '';\n          parser.state = S.ATTRIB_VALUE_CLOSED;\n          continue;\n\n        case S.ATTRIB_VALUE_CLOSED:\n          if (isWhitespace(c)) {\n            parser.state = S.ATTRIB;\n          } else if (c === '>') {\n            openTag(parser);\n          } else if (c === '/') {\n            parser.state = S.OPEN_TAG_SLASH;\n          } else if (isMatch(nameStart, c)) {\n            strictFail(parser, 'No whitespace between attributes');\n            parser.attribName = c;\n            parser.attribValue = '';\n            parser.state = S.ATTRIB_NAME;\n          } else {\n            strictFail(parser, 'Invalid attribute name');\n          }\n\n          continue;\n\n        case S.ATTRIB_VALUE_UNQUOTED:\n          if (!isAttribEnd(c)) {\n            if (c === '&') {\n              parser.state = S.ATTRIB_VALUE_ENTITY_U;\n            } else {\n              parser.attribValue += c;\n            }\n\n            continue;\n          }\n\n          attrib(parser);\n\n          if (c === '>') {\n            openTag(parser);\n          } else {\n            parser.state = S.ATTRIB;\n          }\n\n          continue;\n\n        case S.CLOSE_TAG:\n          if (!parser.tagName) {\n            if (isWhitespace(c)) {\n              continue;\n            } else if (notMatch(nameStart, c)) {\n              if (parser.script) {\n                parser.script += '</' + c;\n                parser.state = S.SCRIPT;\n              } else {\n                strictFail(parser, 'Invalid tagname in closing tag.');\n              }\n            } else {\n              parser.tagName = c;\n            }\n          } else if (c === '>') {\n            closeTag(parser);\n          } else if (isMatch(nameBody, c)) {\n            parser.tagName += c;\n          } else if (parser.script) {\n            parser.script += '</' + parser.tagName;\n            parser.tagName = '';\n            parser.state = S.SCRIPT;\n          } else {\n            if (!isWhitespace(c)) {\n              strictFail(parser, 'Invalid tagname in closing tag');\n            }\n\n            parser.state = S.CLOSE_TAG_SAW_WHITE;\n          }\n\n          continue;\n\n        case S.CLOSE_TAG_SAW_WHITE:\n          if (isWhitespace(c)) {\n            continue;\n          }\n\n          if (c === '>') {\n            closeTag(parser);\n          } else {\n            strictFail(parser, 'Invalid characters in closing tag');\n          }\n\n          continue;\n\n        case S.TEXT_ENTITY:\n        case S.ATTRIB_VALUE_ENTITY_Q:\n        case S.ATTRIB_VALUE_ENTITY_U:\n          var returnState;\n          var buffer;\n\n          switch (parser.state) {\n            case S.TEXT_ENTITY:\n              returnState = S.TEXT;\n              buffer = 'textNode';\n              break;\n\n            case S.ATTRIB_VALUE_ENTITY_Q:\n              returnState = S.ATTRIB_VALUE_QUOTED;\n              buffer = 'attribValue';\n              break;\n\n            case S.ATTRIB_VALUE_ENTITY_U:\n              returnState = S.ATTRIB_VALUE_UNQUOTED;\n              buffer = 'attribValue';\n              break;\n          }\n\n          if (c === ';') {\n            parser[buffer] += parseEntity(parser);\n            parser.entity = '';\n            parser.state = returnState;\n          } else if (isMatch(parser.entity.length ? entityBody : entityStart, c)) {\n            parser.entity += c;\n          } else {\n            strictFail(parser, 'Invalid character in entity name');\n            parser[buffer] += '&' + parser.entity + c;\n            parser.entity = '';\n            parser.state = returnState;\n          }\n\n          continue;\n\n        default:\n          throw new Error(parser, 'Unknown state: ' + parser.state);\n      }\n    } // while\n\n\n    if (parser.position >= parser.bufferCheckPosition) {\n      checkBufferLength(parser);\n    }\n\n    return parser;\n  }\n  /*! http://mths.be/fromcodepoint v0.1.0 by @mathias */\n\n  /* istanbul ignore next */\n\n\n  if (!String.fromCodePoint) {\n    (function () {\n      var stringFromCharCode = String.fromCharCode;\n      var floor = Math.floor;\n\n      var fromCodePoint = function fromCodePoint() {\n        var MAX_SIZE = 0x4000;\n        var codeUnits = [];\n        var highSurrogate;\n        var lowSurrogate;\n        var index = -1;\n        var length = arguments.length;\n\n        if (!length) {\n          return '';\n        }\n\n        var result = '';\n\n        while (++index < length) {\n          var codePoint = Number(arguments[index]);\n\n          if (!isFinite(codePoint) || // `NaN`, `+Infinity`, or `-Infinity`\n          codePoint < 0 || // not a valid Unicode code point\n          codePoint > 0x10FFFF || // not a valid Unicode code point\n          floor(codePoint) !== codePoint // not an integer\n          ) {\n              throw RangeError('Invalid code point: ' + codePoint);\n            }\n\n          if (codePoint <= 0xFFFF) {\n            // BMP code point\n            codeUnits.push(codePoint);\n          } else {\n            // Astral code point; split in surrogate halves\n            // http://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae\n            codePoint -= 0x10000;\n            highSurrogate = (codePoint >> 10) + 0xD800;\n            lowSurrogate = codePoint % 0x400 + 0xDC00;\n            codeUnits.push(highSurrogate, lowSurrogate);\n          }\n\n          if (index + 1 === length || codeUnits.length > MAX_SIZE) {\n            result += stringFromCharCode.apply(null, codeUnits);\n            codeUnits.length = 0;\n          }\n        }\n\n        return result;\n      };\n      /* istanbul ignore next */\n\n\n      if (Object.defineProperty) {\n        Object.defineProperty(String, 'fromCodePoint', {\n          value: fromCodePoint,\n          configurable: true,\n          writable: true\n        });\n      } else {\n        String.fromCodePoint = fromCodePoint;\n      }\n    })();\n  }\n})(typeof exports === 'undefined' ? this.sax = {} : exports);","import { preventDefault } from \"fullcalendar\";\n\n$(document).on('turbolinks:load', function() {\n\n  if($('.header--sp').css('display') == 'block') {\n    $('a.burger--sp').on('click', function(event) {\n      event.preventDefault();\n      $('body').toggleClass('slideout');\n      $(this).toggleClass('open');\n    })\n  }\n\n  // if ($('.header--sp').css('display') == 'block') {\n  //   // sidenav switch\n  //   $('a.burger--sp').on('click', function() {\n  //     $('body').addClass('slideout')\n  //     return false\n  //   })\n  //   $('.nav-mask--sp').on('click', function() {\n  //     $('body').removeClass('slideout')\n  //     return false\n  //   })\n  // }\n\n  /*\n  if ($('.header--sp').css('display') == 'block' || $('body').hasClass('welcome index')) {\n    // guest-flow modal\n    $('.guest-flow-trigger').on('click', function() {\n      if ($('.header--sp').css('display') == 'block') {\n        // sidenav switch\n        $('body').removeClass('slideout')\n        console.log(\"slideout removed 2\")\n      }\n      $('body').addClass('paper')\n      console.log(\"paper added\")\n      $('#guest-flow').modal()\n    })\n    $('.close-guest-flow').on('click', function() {\n      $('body').removeClass('paper')\n      console.log(\"paper removed\")\n    })\n  }*/\n\n});\n","$(document).on('ready turbolinks:load', function() {\n\n  var toggleButton = function(target) {\n    const buttonElement = document.getElementById(target+ '-button');\n    const selectElement = document.getElementById(target+ '-select');\n    if (selectElement != null) {\n      if (selectElement.value === '') {\n        buttonElement.disabled = true;\n        $(buttonElement).addClass(\"disabled btn-nonactive\");\n      } else {\n        buttonElement.disabled = false;\n        $(buttonElement).removeClass(\"disabled btn-nonactive\");\n      }\n    }\n  }\n  toggleButton('facility');\n  toggleButton('tag');\n  $(\"select[id='facility-select']\").change(function() {\n    toggleButton('facility');\n  });\n  $(\"select[id='tag-select']\").change(function() {\n    toggleButton('tag');\n  });\n});","$(document).on('ready turbolinks:load', function() {\n  //このJSが利用者のCSV出力画面でしか動かないように\n  const all_checkbox = document.getElementById(\"user_export_column_all\");\n  if (all_checkbox) {\n    const checkboxes = document.querySelectorAll(\"input[name='user_export[column][]']\");\n    const submit_btn = document.getElementById('user_export_submit');\n    const loadingGif = document.getElementById('loading_gif');\n    const error_message = document.getElementById('error_message');\n\n    function updateSubmitButtonState() {\n      const anyChecked = Array.from(checkboxes).some(checkbox => checkbox.checked);\n      submit_btn.disabled = !anyChecked;\n      if (!anyChecked) {\n        error_message.textContent = \"最低1つの項目を選択してください。\";\n      } else {\n        error_message.textContent = \"\";\n      }\n    }\n\n    // 「すべての項目」チェックボックスの状態変更\n    all_checkbox.addEventListener(\"change\", function() {\n      checkboxes.forEach(checkbox => {\n        checkbox.checked = all_checkbox.checked;\n      });\n      updateSubmitButtonState();\n    });\n\n    checkboxes.forEach(checkbox => {\n      checkbox.addEventListener(\"change\", function() {\n        if (!checkbox.checked) {\n          all_checkbox.checked = false;\n        } else {\n          const checked_all = Array.from(checkboxes).every(check => check.checked);\n          all_checkbox.checked = checked_all;\n        }\n        updateSubmitButtonState();\n      });\n    });\n  \n    if (submit_btn && loadingGif) {\n      submit_btn.addEventListener('click', function(event) {\n        event.preventDefault(); \n        loadingGif.style.display = 'block';\n\n      // Fetch APIを使ってCSVをダウンロード\n        fetch(submit_btn.form.action, {\n          method: 'POST',\n          headers: {\n            'Content-Type': 'application/x-www-form-urlencoded',\n            'X-CSRF-Token': document.querySelector('meta[name=\"csrf-token\"]').getAttribute('content')\n          },\n          body: new URLSearchParams(new FormData(submit_btn.form))\n        })\n        .then(response => {\n          if (!response.ok) {\n            throw new Error('Network response was not ok');\n          }\n          const filename = response.headers.get('Content-Disposition').match(/filename=\"(.+)\"/)[1];\n          return response.blob().then(blob => ({ blob, filename }));\n        })\n        .then(({ blob, filename }) => {\n          // ダウンロード処理\n          const url = window.URL.createObjectURL(blob);\n          const a = document.createElement('a');\n          a.href = url;\n          a.download = filename; \n          document.body.appendChild(a);\n          a.click();\n          a.remove();\n          window.URL.revokeObjectURL(url);  // メモリリークを防ぐ\n\n        // GIFを非表示\n          loadingGif.style.display = 'none';\n        })\n        .catch(error => {\n          console.error('Error:', error);\n          loadingGif.style.display = 'none'; // エラー発生時も非表示にする\n        });\n      });\n    }\n    // 初期状態でボタンの状態を更新\n    updateSubmitButtonState();\n  }\n\n  const update_mynumber_card_status = function (mynumber_user_id) {\n    $.ajax({\n      url: '/users/mynumber_card_status',\n      type: 'POST',\n      data: { mynumber_user_id: mynumber_user_id },\n      async: false,\n      dataType: 'json',    \n    })\n    .done(function (data) {\n      var data_stringify = JSON.stringify(data);\n      var data_json = JSON.parse(data_stringify);\n      my_status = data_json[\"status\"];\n      my_expires_on = data_json[\"expires_on\"];\n     \n      document.getElementById('user_card_status').textContent = '';\n      document.getElementById('user_card_expires_on').textContent = '';\n\n      if (my_status == 'working') {\n        document.getElementById('user_card_status').textContent = '運用中';\n        document.getElementById('user_card_status').style.color = \"#666666\";\n      } else if (my_status == 'suspended') {\n        document.getElementById('user_card_status').textContent = '一時停止';\n        document.getElementById('user_card_status').style.color = \"red\";\n      } else if (my_status == 'obsoleted') {\n        document.getElementById('user_card_status').textContent = '廃止';\n        document.getElementById('user_card_status').style.color = \"red\";\n      } else {\n        document.getElementById('user_card_status').textContent = '未連携';\n        document.getElementById('user_card_status').style.color = \"#666666\";\n      }\n\n      if (my_expires_on != null && my_expires_on.length > 0) {\n        var setDate = new Date(my_expires_on + ' 23:59:59');\n        var today = new Date();\n\n        document.getElementById('user_card_expires_on').textContent = `${setDate.getFullYear()}年${(\"0\"+(setDate.getMonth() + 1)).slice(-2)}月${(\"0\"+(setDate.getDate())).slice(-2)}日`;\n        if (setDate.getTime() < today.getTime()) {\n          document.getElementById('user_card_expires_on').style.color = \"red\"\n        } else {\n          document.getElementById('user_card_expires_on').style.color = \"#666666\";\n        }\n      } else {\n        document.getElementById('user_card_expires_on').textContent = '';\n      }\n    })\n    .fail(function (){\n      console.log('MyNumber: マイナンバーカード運用状況・有効期限の取得に失敗しました。')\n    });\n  }\n\n    $(\"select[name='user[raffle_limit_type]']\").change(function() {\n      var val = $(\"select[name='user[raffle_limit_type]']\").val();\n      if (val != \"none\") {\n        $(\".user_raffle_limit_number\").slideDown()\n      } else {\n        $(\".user_raffle_limit_number\").slideUp()\n      }\n    })\n    $(\"select[name='user[raffle_limit_type]']\").trigger('change');\n\n    $(\"select[name='user[reservation_limit_type]']\").change(function() {\n      var val = $(\"select[name='user[reservation_limit_type]']\").val();\n      if (val != \"none\") {\n        $(\".user_reservation_limit_number\").slideDown()\n      } else {\n        $(\".user_reservation_limit_number\").slideUp()\n      }\n    })\n    $(\"select[name='user[reservation_limit_type]']\").trigger('change');\n\n    $(\"input[name='facility_use_setting']\").change(function() {\n      if ($(\"input[name='facility_use_setting']\").prop(\"checked\")) {\n        $(\".facility_use_list\").slideDown()\n      } else {\n        $(\".facility_use_list\").slideUp()\n      }\n    })\n    $(\"input[name='facility_use_setting']\").trigger('change');\n\n    $(\"#ngButton\").click(function() {\n      const facilityIds = document.querySelectorAll('.col-1.text-right input[type=\"hidden\"]');\n      var useType = \"impossible\";\n\n      facilityIds.forEach(function(element) {\n        var facilityid = \"#\" + element.value.trim();\n        // select要素の選択肢を変更\n        $(facilityid).val(useType);\n\n      });\n\n    });\n\n    $(\"#okButton\").click(function() {\n      const facilityIds = document.querySelectorAll('.col-1.text-right input[type=\"hidden\"]');\n      var useType = \"\";\n\n      facilityIds.forEach(function(element) {\n        var facilityid = \"#\" + element.value.trim();\n        // select要素の選択肢を変更\n        $(facilityid).val(useType);\n      });\n\n    });\n\n    const items = $(\".col-4.text-right\"); // 施設を取得\n    const searchInput = $(\"#searchInput\");\n\n    searchInput.on(\"input\", function() {   \n      const noMatchMessage = $(\"#noMatchMessage\")\n      let hasMatch = false; // 部分一致が見つかったかどうかのフラグ \n      items.each(function() {\n        if ($(this).text().includes(searchInput.val())) {\n          $(this).parent().css(\"display\", \"block\"); // 部分一致する場合、表示\n          hasMatch = true; // 部分一致検出\n        } else {\n          $(this).parent().css(\"display\", \"none\"); // 非表示\n        }\n      });\n      if (!hasMatch) {\n        noMatchMessage.css(\"display\", \"block\");\n      } else {\n        noMatchMessage.css(\"display\", \"none\"); // 部分一致が見つかった場合、メッセージを非表示にする\n      }\n    });\n    \n    $('#mynumber-modal').on('click', function(){\n      document.getElementById( \"old_mynumbercard\" ).value = document.getElementById('mynumber_user_id_hidden').value;\n      document.getElementById( \"mynumbercard\" ).value = document.getElementById('user_mynumber_user_id').value;\n    })\n\n  const mynumber_updated = function() {\n    var close_flg = 0;\n    var old_mynumber = document.getElementById('old_mynumbercard');\n    var mynumber = document.getElementById('mynumbercard');\n\n    if (mynumber.value.length > 0) {\n      if (mynumber.value.length != 13) {\n        alert('マイナンバーカード利用者IDは13文字で指定してください。')\n        return\n      } \n\n      if (String(mynumber.value).search(/^[-]?[0-9]+$/) != 0) {\n        alert('マイナンバーカード利用者IDは半角数字で指定してください。')\n        return\n      }\n\n      if (old_mynumber.value != mynumber.value) {\n        $.ajax({\n          url: '/users/mynumber_check',\n          type: 'POST',\n          data: { mynumber_user_id: mynumber.value },\n          async: false,\n          dataType: 'json',    \n        })\n        .done(function (data) {\n          if (data == \"0\") {\n            close_flg = 0;\n          } else {\n            alert('マイナンバーカード利用者IDは既に登録済みです。')\n            close_flg = 1;\n          }\n        })\n        .fail(function (){\n          console.log('MyNumber: マイナンバーカード利用者IDのチェックに失敗しました。')\n          close_flg = 2;\n        });\n      }\n    }\n\n    if (close_flg == 0) {\n      update_mynumber_card_status(mynumber.value);\n      document.getElementById(\"user_mynumber_user_id\").value = mynumber.value;\n      $('#users-form-modal').modal('hide');\n    }\n  }\n\n  $('#mynumber-update').on('click', mynumber_updated);\n  $('#mynumbercard').on('keydown', (e) => {\n    if (e.key == 'Enter') {\n      // 「登録する」クリックと同じ処理を行う\n      mynumber_updated();\n      return;\n    }\n  });\n\n  $('#users-form-modal').on('keydown', (e) => {\n    if (e.key == 'Enter') {\n      // Enterキーで「利用者の追加/編集」画面の「保存する」が行われないよう、バブリングをmodalで止める。\n      e.stopPropagation();\n      e.preventDefault();\n      return;\n    }\n  });\n\n  // 利用者の一括登録機能 送信日時の表示/非表示\n  $(\"select#send_mail_type\").change(function() {\n    if ($(\"#send_mail_type\").val() === \"scheduled\") {\n      $(\".select-datetime\").slideDown()\n    } else {\n      $(\".select-datetime\").slideUp()\n    }\n  })\n\n  $(\"select#send_mail_type\").trigger('change');\n\n  $(\".import-error-toggle\").on(\"click\", function() {\n    var targetId = $(this).data(\"target\");\n    $(\"#\" + targetId).toggleClass(\"hidden\");\n  });\n\n});\n\n$(window).on('pageshow', function() {\n    $(\"select[name='user[raffle_limit_type]']\").trigger('change');\n    $(\"select[name='user[reservation_limit_type]']\").trigger('change');\n    $(\"input[name='facility_use_setting']\").trigger('change');\n});","$(document).on('turbolinks:load', function() {\n  $('li.user-item').hover(\n    function() {\n      $(this).find('.dropdown-menu').delay(200).show();\n      return;\n    },\n    function() {\n      $(this).find('.dropdown-menu').delay(200).hide();\n      return;\n    }\n  )\n});\n","$(document).on('turbolinks:load', function() {\n  $('.datetimepicker').datetimepicker({\n    dayViewHeaderFormat: 'YYYY年 MMM',\n    format: 'YYYY-MM-DDTHH:mm:ss',\n    locale: 'ja',\n    showClose: true\n  })\n})\n","window.calendar_base_params = function() {\n  return {\n    //===== Toolbar =====\n\n    // Defines the buttons and title at the top of the calendar.\n    header: {\n      left: 'today',\n      center: 'prev title next',\n      right: 'month agendaWeek agendaDay'\n    },\n\n    // Defines the controls at the bottom of the calendar.\n    //footer:\n\n    views: {\n      month: {\n        titleFormat: 'YYYY年M月'\n      },\n      week: {\n        titleFormat: 'YYYY年M月D日',\n        titleRangeSeparator: '日 ~ ',\n        columnFormat: 'M/D(ddd)'\n      },\n      day: {\n        titleFormat: 'YYYY年M月D日(ddd)'\n      }\n    },\n\n    // Determines the separator text when formatting the date range in the toolbar title.\n    //titleRangeSeparator:\n\n    // Text that will be displayed on buttons of the header/footer.\n    buttonText: {\n      prev: ' < ',\n      next: ' > ',\n      prevYear: ' << ',\n      nextYear: ' >> ',\n      today: '今日',\n      month: '月表示',\n      week: '週表示',\n      day: '日表示'\n    },\n\n    // Icons that will be displayed in buttons of the header/footer.\n    //buttonIcons:\n\n    // Defines custom buttons that can be used in the header/footer.\n    //customButtons:\n\n    //===== Theme =====\n\n    //===== Sizing =====\n\n    // Sets the height of the entire calendar, including header and footer.\n    //height:\n\n    // Sets the height of the view area of the calendar.\n    contentHeight: 'auto',\n\n    // Sets the width-to-height aspect ratio of the calendar.\n    //aspectRatio:\n\n    // Immediately forces the calendar to readjusts its size.\n    //updateSize:\n\n    // Whether to automatically resize the calendar when the browser window resizes.\n    //handleWindowResize:\n\n    // The time the calendar will wait to adjust its size after a window resize occurs, in milliseconds.\n    //windowResizeDelay:\n\n    //----- CALLBACKS -----\n    // Triggered after the calendar’s dimensions have been changed due to the browser window being resized.\n    //windowResize:\n\n    //===== MONTH-VIEW-SPECIFIC OPTIONS =====\n\n    // Determines the number of weeks displayed in a month view.\n    //fixedWeekCount:\n    fixedWeekCount: false,\n\n    // In month view, whether dates in the previous or next month should be rendered at all.\n    //showNonCurrentDates:\n    showNonCurrentDates: true,\n\n    //===== TIMEGRID-SPECIFIC OPTIONS =====\n\n    // Determines if the “all-day” slot is displayed at the top of the calendar.\n    allDaySlot: true,\n    //allDaySlot: 'all-day',\n\n    // The text titling the “all-day” slot at the top of the calendar.\n    allDayText: '時刻',\n\n    // Determines if timed events in TimeGrid view should visually overlap.\n    slotEventOverlap: false,\n    //slotEventOverlap: true,\n\n    // Guarantees that events within the TimeGrid views will be a minimum height.\n    timeGridEventMinHeight: 100,\n\n    //===== LIST-VIEW-SPECIFIC OPTIONS =====\n\n    // A Date Formatter that affects the text on the left side of the day headings in list view.\n    //listDayFormat:\n\n    // A Date Formatter that affects the text on the right side of the day headings in list view.\n    //listDayAltFormat:\n\n    // The text that is displayed in the middle of list view, alerting the user that there are no events within the given range.\n    //noEventsMessage:\n\n    //===== CUSTOM-VIEW =====\n    // Sets the exact duration of a custom view.\n    //duration:\n\n    // Sets the exact number of days displayed in a custom view, regardless of weekends or hiddenDays.\n    //dayCount:\n\n    // Sets the exact date range that is visible in a view.\n    //visibleRange: {\n    //  start: '2019-10-25',\n    //  end: '2019-11-01'\n    //},\n\n    //===== VIEW-API =====\n    // The initial view when the calendar loads.\n    defaultView: 'month',\n\n    //----- CALLBACKS -----\n\n    // Triggered after a view’s non-date-related DOM structure has been rendered.\n    //viewSkeletonRender:\n\n    // Triggered before a view’s DOM skeleton is removed from the DOM.\n    //viewSkeletonDestroy:\n\n    // Triggered when a new set of dates has been rendered.\n    //datesRender:\n\n    // Triggered before the currently rendered set of dates is removed from the DOM.\n    //datesDestroy:\n\n    //===== Date & Time Display =====\n\n    //----- WHOLE-DAY SETTINGS -----\n    // Whether to include Saturday/Sunday columns in any of the calendar views.\n    weekends: true,\n\n    // Exclude certain days-of-the-week from being displayed.\n    //hiddenDays:\n\n    // Whether the day headers should appear. For the Month, TimeGrid, and DayGrid views.\n    //columnHeader:\n\n    // Determines the text that will be displayed on the calendar’s column headings.\n    //columnHeaderFormat:\n\n    // Programmatically generates text that will be displayed on the calendar’s column headings.\n    //columnHeaderText:\n\n    // Programmatically generates HTML that will be injected on the calendar’s column headings.\n    //columnHeaderHtml:\n\n    //----- TIME-AXIS SETTINGS -----\n    // The frequency for displaying time slots.\n    //slotDuration:\n\n    // The frequency that the time slots should be labelled with text.\n    //slotLabelInterval:\n\n    // Determines the text that will be displayed within a time slot.\n    //slotLabelFormat:\n\n    // Determines the first time slot that will be displayed for each day.\n    //minTime:\n\n    // Determines the last time slot that will be displayed for each day. In line with the discussion about the Event object, it is important to stress that this should be specified as an exclusive end time.\n    //maxTime:\n\n    // Determines how far forward the scroll pane is initially scrolled.\n    //scrollTime:\n\n    //----- CALLBACKS -----\n    // A hook for modifying a day cell’s DOM.\n    //dayRender:\n\n    //----- METHODS -----\n    // Programatically scroll the current view to the given time.\n    //scrollToTime:\n\n    // In month view, whether dates in the previous or next month should be rendered at all.\n    //showNonCurrentDates:\n\n    //===== Date Nav Links =====\n    // Turns various datetime text into clickable links that the user can use for navigation. Activated by setting the navLinks settings to true.\n\n    //Determines if day names and week names are clickable.\n    //navLinks:\n\n    // Determines what happens upon a day heading nav-link click.\n    //navLinkDayClick:\n\n    // Determines what happens upon a week-number nav-link click.\n    //navLinkWeekClick:\n\n    //===== Week Numbers =====\n    // Display week numbers in various parts of your calendar views.\n\n    // Determines if week numbers should be displayed on the calendar.\n    weekNumbers: false,\n\n    // Determines the styling for week numbers in Month and DayGrid views.\n    //weekNumbersWithinDays:\n\n    // The method for calculating week numbers that are displayed with the weekNumbers setting.\n    //weekNumberCalculation:\n\n    // The heading text for week numbers. Also affects weeks in date formatting.\n    //weekLabel:\n\n    //===== Date Clicking & Selecting =====\n    // Detect when the user clicks on dates or times. Give the user the ability to select multiple dates or time slots with their mouse or touch device.\n\n    // Allows a user to highlight multiple days or timeslots by clicking and dragging.\n    selectable: true,\n\n    // Whether to draw a “placeholder” event while the user is dragging.\n    //selectMirror:\n\n    // Whether clicking elsewhere on the page will cause the current selection to be cleared.\n    unselectAuto: true,\n\n    // A way to specify elements that will ignore the unselectAuto option.\n    unselectCancel: '',\n\n    // Determines whether the user is allowed to select periods of time that are occupied by events.\n    //selectOverlap:\n\n    // Limits user selection to certain windows of time.\n    //selectConstraint:\n\n    // Exact programmatic control over where the user can select.\n    //selectAllow:\n\n    // The minimum distance the user’s mouse must travel after a mousedown, before a selection is allowed.\n    //selectMinDistance:\n\n    //----- CALLBACKS -----\n    // Triggered when the user clicks on a date or a time.\n    //dateClick:\n\n    // Triggered when a date/time selection is made.\n    //select:\n\n    // Triggered when the current selection is cleared.\n    //unselect:\n\n    //-----METHODS -----\n    // A method for programmatically selecting a period of time. It accepts two different signatures:\n    //Calendar::select\n\n    // A method for programmatically clearing the current selection.\n    //Calendar::unselect\n\n    //===== Now Indicator =====\n    // You can display a marker that represents the exact current time in both TimeGrid view and Timeline view.\n\n    // Whether or not to display a marker indicating the current time.\n    //nowIndicator:\n\n    // Explicitly sets the “today” date of the calendar. This is the day that is normally highlighted in yellow.\n    //now:\n\n    //=====  Business Hours =====\n    // Emphasize a view’s “business hours” (aka “working hours”).\n\n    // Emphasizes certain time slots on the calendar. By default, Monday-Friday, 9am-5pm.\n    //businessHours:\n\n    // The main businessHours settings can be applied more granularly to individual resources via the businessHours property on the Resource input\n    //businessHours-per-resource:\n\n\n    //===== Event Sources =====\n\n    // An array of Event Objects that will be displayed on the calendar.\n    //events (as an array)\n\n    // A URL of a JSON feed that the calendar will fetch Event Objects from.\n    //events (as a json feed)\n    //events: events_url,\n\n    // A custom function for programmatically generating Events.\n    //events (as a function)\n\n    // FullCalendar can display events from a public Google Calendar.\n    //events from Google Calendar\n\n    // An “event source” is anything that provides FullCalendar with data about events.\n    //Event Source Object\n\n    // A way to specify multiple event sources.\n    //eventSources:\n\n    // A function that gets called when fetching succeeds. It can transform the response. Gets called for any type of Event source.\n    //eventSourceSuccess:\n\n    // Called when any of the event sources fails. Probably because an AJAX request failed.\n    //eventSourceFailure:\n\n    //----- EVENT REQUESTING -----\n    // A parameter of this name will be sent to each JSON event feed. It describes the start of the interval being fetched.\n    //startParam:\n\n    //A parameter of this name will be sent to each JSON event feed. It describes the exclusive end of the interval being fetched.\n    //endParam:\n\n    // A parameter of this name will be sent to each JSON event feed. It describes the timezone of the startParam and endParam values, as well as the desired timezone of the returned events.\n    //timeZoneParam:\n\n    // Determines when event fetching should occur.\n    //lazyFetching:\n\n    //Triggered when event or resource fetching starts/stops.\n    //loading:\n\n    //----- METHODS -----\n\n    // Retrieves all Event Source Objects.\n    //Calendar::getEventSources\n\n    // Retrieves a specific Event Source Object.\n    //Calendar::getEventSourceById\n\n    // Dynamically adds an event source.\n    //Calendar::addEventSource\n\n    // Refetches events from all sources and rerenders them on the screen.\n    //Calendar::refetchEvents\n\n    // Causes this event source to fetch its event data again.\n    //EventSource::refetch\n\n    // Removes all events associated with this source and prevents it from being fetched again.\n    //EventSource::remove\n\n\n    //===== Event Display =====\n    // How to control the appearance of events on your calendar.\n\n    // Sets the background and border colors for all events on the calendar.\n    eventColor: 'transparent',\n\n    // Sets the background color for all events on the calendar.\n    //eventBackgroundColor:\n\n    // Sets the border color for all events on the calendar.\n    //eventBorderColor:\n\n    // Sets the text color for all events on the calendar.\n    //eventTextColor:\n\n    // Determines the time-text that will be displayed on each event.\n    //eventTimeFormat:\n\n    // Whether or not to display the text for an event’s date/time.\n    //displayEventTime:\n\n    // Whether or not to display an event’s end time.\n    //displayEventEnd:\n\n    // When an event’s end time spans into another day, the minimum time it must be in order for it to render as if it were on that day.\n    //nextDayThreshold:\n\n    // Determines the ordering events within the same day.\n    //eventOrder:\n\n    // When to render multiple asynchronous event sources in an individual or batched manner.\n    //progressiveEventRendering:\n\n    //----- CALLBACKS -----\n\n    // Triggered while an event is being rendered. A hook for modifying its DOM.\n    //eventRender:\n\n    // Triggered after an event has been placed on the calendar in its final position.\n    //eventPositioned:\n\n    // Called before an event’s element is removed from the DOM.\n    //eventDestroy:tim\n\n    //----- METHODS -----\n    // Rerenders all events on the calendar.\n    //Calendar::rerenderEvents\n\n    //===== Event Clicking & Hovering =====\n    // Handers to know when an event has been clicked or hovered over.\n\n    // Triggered when the user clicks an event.\n    //eventClick:\n\n    // Triggered when the user mouses over an event. Similar to the native mouseenter.\n    //eventMouseEnter:\n\n    // Triggered when the user mouses out of an event. Similar to the native mouseleave.\n    //eventMouseLeave:\n\n    //===== International =====\n\n    // \n    //locale:\n\n    // The direction that elements in the calendar are rendered. Either left-to-right or right-to-left.\n    //dir:\n\n    // jQuery UI theme\n    theme: false,\n    // The day that each week begins.\n    firstDay: 0, // 日曜日\n    // 週モード(fixed,liquid,variable)\n    weekMode: 'fixed',\n\n    timeFormat: 'HH:mm', // <- time format within events\n    smallTimeFormat: 'H時', // <- time format of axis (week-view and day-view)\n\n    slotMinutes: 30,\n    snapMinutes: 30,\n    //firstHour: 8,\n    //minTime: '00:00:00',\n    //maxTime: '24:00:00',\n\n    //monthNames: [\n    //  I18n.t('js.calendar.month_names.jan'), I18n.t('js.calendar.month_names.feb'), I18n.t('js.calendar.month_names.mar'),\n    //  I18n.t('js.calendar.month_names.apr'), I18n.t('js.calendar.month_names.may'), I18n.t('js.calendar.month_names.jun'),\n    //  I18n.t('js.calendar.month_names.jul'), I18n.t('js.calendar.month_names.aug'), I18n.t('js.calendar.month_names.sep'),\n    //  I18n.t('js.calendar.month_names.oct'), I18n.t('js.calendar.month_names.nov'), I18n.t('js.calendar.month_names.dec')\n    //],\n    monthNames: [\n      '1月', '2月', '3月', '4月', '5月', '6月',\n      '7月', '8月', '9月', '10月', '11月', '12月',\n    ],\n    monthNamesShort: [\n      '1月', '2月', '3月', '4月', '5月', '6月',\n      '7月', '8月', '9月', '10月', '11月', '12月',\n    ],\n    dayNames: [\n      '日', '月', '火', '水', '木', '金', '土',\n    ],\n    dayNamesShort: [\n      '日', '月', '火', '水', '木', '金', '土',\n    ],\n\n    selectHelper: true,\n\n    ignoreTimezone: false,\n    editable: false,\n    droppable: false,\n\n    displayEventEnd: true,\n\n    eventColor: 'rgba(150,150,150,0.2)',\n    disableDragging: true\n  }\n}\n","$(document).on('turbolinks:load', function() {\n  var events_url = location.pathname.replace(/\\/[^\\/]+$/, '/closed_days')\n\n  $('#closed_day_calendar').empty()\n\n  const params = calendar_base_params()\n\n  Object.assign(params, {\n    // Defines the buttons and title at the top of the calendar.\n    header: {\n      left: 'today',\n      center: 'prev title next',\n      right: '',\n      //right: 'month agendaWeek agendaDay'\n    },\n\n    // The initial view when the calendar loads.\n    defaultView: 'month',\n\n    // A URL of a JSON feed that the calendar will fetch Event Objects from.\n    //events (as a json feed)\n    events: events_url, // イベント(チップ)の表示\n\n    \n    // 日付クリック時の処理\n    // サーバに対して休館日イベント追加依頼をして、成功時にはイベントを描画する。\n    /*\n    dayClick: function(day, jsEvent, view) {\n      $.ajax({\n        type: 'POST',\n        url: events_url,\n        data: { closed_day: { date: day.format() } },\n        dataType: 'json'\n      }).then(\n        function(data) {\n          console.log('OK: create event:', data)\n          // TODO: 追加後に削除できない\n          //$('#closed_day_calendar').fullCalendar('renderEvent', data, true)\n          $('#closed_day_calendar').fullCalendar('refetchEvents')\n        },\n        function() {\n          console.log('NG: create event')\n        }\n      )\n      return false\n    },\n    */\n    // 日付枠のクリックおよびドラッグ\n    select: function(start, end, jsEvent, view) {\n      var start_on = start.format() // 選択した日付の開始日\n      var end_on = end.subtract(1, 'd').format()  // 選択した日付の終了日\n      if (start_on == end_on) {\n        // 1日\n        closed_day = {\n          date: start_on,\n        }\n      } else {\n        // 連続した日\n        closed_day = {\n          start_on: start_on,\n          end_on: end_on,\n          every: 'daily'\n        }\n      }\n      $.ajax({\n        type: 'POST',\n        url: events_url,\n        data: {\n          closed_day: closed_day\n        },\n        dataType: 'json'\n      }).then(\n        function(data) {\n          console.log('OK: create event:', data)\n          $('#closed_day_calendar').fullCalendar('refetchEvents')\n        },\n        function(data) {\n          if (data.status == 200) {\n            eval(data.responseText)\n            console.log('Confirm: create event')\n          } else{\n            console.log('NG: create event')\n          }\n        }\n      )\n      return false\n    },\n    /*unselect: function(jsEvent, view) {\n      console.log(\"===== unselect =====\")\n      console.log(jsEvent)\n      console.log(view)\n    },*/\n\n    // 休館日イベントクリック時の処理\n    // サーバに対して当該休館日イベント削除依頼をして、成功時には描画からも削除する。\n    eventClick: function(calEvent, jsEvent, view) {\n      if(calEvent.type == 'upper'){\n        alert(calEvent.name + 'の休館日は' + calEvent.name + 'のカレンダーで削除してください');\n        return false;\n      }\n      $.ajax({\n        type: 'DELETE',\n        url: calEvent.url,\n      }).then(\n        function(data, textStatus, jqXHR) {\n          console.log('OK: delete event (id=' + calEvent._id + ')')\n          if(jqXHR.status == 204){\n            $('#closed_day_calendar').fullCalendar('refetchEvents')\n          }\n          else if(jqXHR.status == 200 && data.data == 'confirm'){\n            // ルール削除時は確認\n            if(confirm(\"同じ適用日の休館日が一斉に削除されますがよろしいでしょうか?\") === true){\n              $.ajax({\n                type: 'DELETE',\n                url: calEvent.url + '?force=1',\n              }).then(function(){\n                // ルール適用可能日が変わるのでリロード\n                location.reload();\n              }, function(){\n                console.log('NG: delete event (id=' + calEvent._id + ')')\n              });\n            }\n            return;\n          }\n        },\n        function() {\n          console.log('NG: delete event (id=' + calEvent._id + ')')\n        }\n      )\n      return false\n    },\n\n    editable: false,\n    droppable: false,\n    //displayEventEnd: true,\n    //timeFormat: 'HH:mm',\n\n    eventColor: 'rgba(150,150,150,0.2)',\n    disableDragging: true,\n  })\n\n  // 休館打ち消し確認モーダル(3択)のフォーム送信時にモーダルを閉じる。\n  $('#closed_day_confirm_neutralize_modal_form').on('submit', function(event) {\n      $('#closed_day_confirm_neutralize_modal').modal('hide');\n  });\n  \n  // 休館打ち消し確認モーダル(3択)のフォームのAjax通信成功時にカレンダーを再読み込み。\n  $('#closed_day_confirm_neutralize_modal_form').on('ajax:success', function(event) {\n    $('#closed_day_calendar').fullCalendar('refetchEvents')\n  });\n\n  // 休館登録確認モーダルのフォーム送信時にモーダルを閉じる。\n  $('#closed_day_confirm_close_modal_form').on('submit', function(event) {\n      $('#closed_day_confirm_close_modal').modal('hide');\n  });\n\n  // 休館登録確認モーダルのフォームのAjax通信成功時にカレンダーを再読み込み。\n  $('#closed_day_confirm_close_modal_form').on('ajax:success', function(event) {\n    $('#closed_day_calendar').fullCalendar('refetchEvents')\n  });\n\n  // 複数休館登録確認モーダルのフォーム送信時にモーダルを閉じる。\n  $('#closed_day_confirm_close_daily_modal_form').on('submit', function(event) {\n    $('#closed_day_confirm_close_daily_modal').modal('hide');\n  });\n\n  // 複数休館登録確認モーダルのフォームのAjax通信成功時にカレンダーを再読み込み。\n  $('#closed_day_confirm_close_daily_modal_form').on('ajax:success', function(event) {\n    $('#closed_day_calendar').fullCalendar('refetchEvents')\n  });\n\n  // IE だと formのremoteがきかない?\n  $('[data-ajax-modal]').on('click', function(){\n    const $this = $(this);\n    const $form = $(this).closest('form')\n    const data = $form.serializeArray();\n    if (($('#raffle_application_starts_at_modal').length > 0) && ($('#raffle_application_ends_at_modal').length > 0)) {\n      if ($('#raffle_application_starts_at_modal').val() >= $('#raffle_application_ends_at_modal').val()) {\n        alert('利用終了は、利用開始より後の時間を指定してください。');\n        return false;\n      }\n    }\n    if ($this.attr('name')){\n      data.push({'name': $this.attr('name'), 'value': $this.val()});\n    }\n    $.ajax({url: $form.attr('action'), type: 'POST', data: data}).then(function(){\n      $('#closed_day_calendar').fullCalendar('refetchEvents');\n    });\n    $form.closest('.modal').modal('hide');\n    return false\n  })\n\n  $('#closed_day_calendar').fullCalendar(params)\n})\n\n","$(document).on('turbolinks:load', function() {\n  const prices_edit_sel = '.price-calendar-create';\n  const prices_show_sel = '.price-calendar-show';\n  const optional_prices_edit_sel = '.optional_price-new';\n  const optional_prices_show_sel = '.optional_price-show';\n  const select_price_sel = '#select_price_facility';\n\n  // 価格表のどの画面で動作しているか確認\n  // 他のpacks/xxxx.jsから使用するためにブラウザグローバル変数windowに保存\n  window.g_prices = {\n    sel: {\n      prices_edit: prices_edit_sel,\n      prices_show: prices_show_sel,\n      optional_prices_edit: optional_prices_edit_sel,\n      optional_prices_show: optional_prices_show_sel,\n      select_price: select_price_sel,\n    },\n\n    // 時間枠価格表 新規作成\n    is_prices_edit: $(prices_edit_sel).length > 0,\n    // 時間枠価格表 詳細 または 時間枠価格表の選択\n    is_prices_show: $(prices_show_sel).length > 0,\n    // 時間あたり価格表 新規作成\n    is_optional_prices_edit: $(optional_prices_edit_sel).length > 0,\n    // 時間あたり価格表 詳細 または 時間あたり価格表の選択\n    is_optional_prices_show: $(optional_prices_show_sel).length > 0,\n    // 価格表の選択であるか 価格表 詳細であるか\n    is_select_price: $(select_price_sel).length > 0,\n\n    // 表示順\n    date_types: ['monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday', 'sunday'],\n  };\n});\n\nrequire(\"packs/price_calendar\")\nrequire(\"packs/price_calendar_readonly\")\nrequire(\"packs/optional_price\")\n","$(document).on('turbolinks:load', function() {\n  if ($('#reservation_calendar').length > 0 || $('#raffle_calendar').length > 0) {\n    const AJAX_STATUS_NONE = 0;           // 初期状態 (FullCalendarのevents関数が起動される前 / ajax / render timeoutが動作していない)\n    const AJAX_STATUS_INPROGRESS = 1;     // ajaxが動作中 (1回目) この状態でajaxコールバック復帰したらcallbackにてカレンダー描画できる\n    const AJAX_STATUS_RETRIGGER = 2;      // ajaxが動作中 (ajax 1回目動作中にevents関数が起動された) renderにてカレンダー描画の必要がある\n    const AJAX_STATUS_WAIT_TO_RENDER = 3; // AJAX_STATUS_RETRIGGERのajaxコールバック関数発火後 renderによる描画待ち\n\n    window.g_calendar_events = {\n      ajax: {\n        // events関数のajax状態\n        status: AJAX_STATUS_NONE,\n        // ajax動作中に追加起動されたevents関数のajax起動用data\n        data_to_render: null,\n        // render起動タイマID\n        render_timeout_id: 0\n      },\n\n      // 動作確認用ログ\n      log: {\n        ajax: [],\n        events: [],\n      },\n\n      debug: false,\n\n      fullcalendar_events_handler: function (calendar_el, events_url, start, end, timezone, callback) {\n        const get_id = () => Date.now();\n        const console_log = (id, textStatus, message) => console.log(\"event_ajax\" + ((textStatus != null) ? (\":\" + textStatus) : \"\") + \"[\" + id + \"]: \" + message);\n        const ajax_log = (id, textStatus, _this, jqXHR, errorThrown = null) => {\n          const log_data = {id: id, textStatus: textStatus, this: _this, jqXHR: jqXHR};\n          if (errorThrown != null) {\n            log_data.errorThrown = errorThrown;\n          }\n          g_calendar_events.log.ajax.push(log_data);\n        };\n        const events_log = (id, events, message) => g_calendar_events.log.events.push({id: id, events: events, message: message});\n\n        const render_events = function (events, ajax_id) {\n          const id = get_id();\n          console_log(id, \"render\", \"done \" + ajax_id);\n          if (g_calendar_events.debug) events_log(id, events, \"render\");\n\n          g_calendar_events.ajax.status = AJAX_STATUS_NONE;\n          g_calendar_events.ajax.render_timeout_id = 0;\n          // ajax.data_to_renderは常にnull\n          calendar_el.fullCalendar('renderEvents', events);\n        };\n\n        const ajax_error_handler = function (jqXHR, textStatus, errorThrown) {\n          const id = get_id();\n          console_log(id, textStatus, \"url: \" + this.url);\n          ajax_log(id, textStatus, this, jqXHR, errorThrown);\n\n          // 状態が不明のため全メンバ初期化\n          g_calendar_events.ajax = { status: AJAX_STATUS_NONE, data_to_render: null, render_timeout_id: 0 };\n        };\n\n        const ajax_complete_handler = function (jqXHR, textStatus) {\n          const id = get_id();\n          // responseText等もjqXHRに入っており多くのメモリを使用しそうであること、complete(success/error両方完了)時にログするメリットがないことにより、コメントアウトする。\n          // ajax_log(id, textStatus, this, jqXHR);\n        };\n\n        const ajax_success_handler = function (events, textStatus, jqXHR) {\n          const id = get_id();\n          const ajax = g_calendar_events.ajax;\n          // ajax起動からこのコールバックまでにevents関数呼出があった時、最新のevents関数呼出時のdata\n          const data = ajax.data_to_render;\n\n          // responseText等もjqXHRに入っており多くのメモリを使用しそうであること、success時にログするメリットがないことにより、デバッグ時のみログする\n          if (g_calendar_events.debug) ajax_log(id, textStatus, this, jqXHR);\n\n          switch (ajax.status) {\n            case AJAX_STATUS_INPROGRESS:\n              // 1回目のajaxコールバック\n              if (data == null) {\n                // 追加のevents関数呼出がなかったので、callbackでカレンダー描画する\n                ajax.status = AJAX_STATUS_NONE;\n                console_log(id, textStatus, \"done render callback\");\n                if (g_calendar_events.debug) events_log(id, events, \"none: render callback\");\n                callback(events);\n              } else {\n                // 追加のevents関数呼出があったので、最新の取得用dataにて再度ajax起動する\n                //  ここで起動したajaxのコールバックではrenderによるカレンダー描画が必要\n                ajax.status = AJAX_STATUS_RETRIGGER;\n                ajax.data_to_render = null;\n                if (g_calendar_events.debug) console_log(id, textStatus, \"first retrigger: \" + JSON.stringify(data));\n                callback([]);\n                trigger_event_ajax(data);\n              }\n              break;\n            case AJAX_STATUS_RETRIGGER:\n              // 2回目以降のajaxコールバック\n              if (data == null) {\n                // 追加のevents関数呼出がなかったので、時間待ち後にrenderにてカレンダー描画\n                ajax.status = AJAX_STATUS_WAIT_TO_RENDER;\n                let wait_msec = 1000;\n                if (g_calendar_events.debug) console_log(id, textStatus, \"wait_to_render\");\n                callback([]);\n                ajax.render_timeout_id = setTimeout(render_events, wait_msec, events, id);\n              } else {\n                // 追加のevents関数呼出があったので、最新の取得用dataにて再度ajax起動する\n                //  ここで起動したajaxのコールバックではrenderによるカレンダー描画が必要\n                ajax.data_to_render = null;\n                if (g_calendar_events.debug) console_log(id, textStatus, \"retrigger: \" + JSON.stringify(data));\n                callback([]);\n                trigger_event_ajax(data);\n              }\n              break;\n            default:\n              console_log(id, textStatus, \"invalid ajax callback\");\n              ajax_log(id, textStatus, this, jqXHR);\n              events_log(id, events, \"success invalid ajax callback\");\n              break;\n          }\n        };\n\n        const trigger_event_ajax = function (ajax_data) {\n          $.ajax({\n            type: 'GET',\n            // A URL of a JSON feed that the calendar will fetch Event Objects from.\n            url: events_url,\n            dataType: 'json',\n            data: ajax_data,\n            cache: true,\n            success: ajax_success_handler,\n            error: ajax_error_handler,\n            complete: ajax_complete_handler\n          });\n        };\n\n        const id = get_id();\n        const facility_id = $('#facility_id').val();\n        const room_id = $('#room_id').val();\n        const user_id = $('#user_id').val();\n        const requested_setting_id = $('#requested_setting_id').val();\n\n        // events関数のメインルーチン\n\n        // ajax起動data\n        let data = {\n          start: start.format(),\n          end: end.format()\n        }\n        if (facility_id) {\n          data['facility_id'] = facility_id;\n        }\n        if (room_id) {\n          data['room_id'] = room_id;\n        }\n        if (user_id) {\n          data['user_id'] = user_id;\n        }\n        if (requested_setting_id) {\n          data['requested_setting_id'] = requested_setting_id;\n        }\n\n        const ajax = g_calendar_events.ajax;\n        // 起動された時の状態\n        switch (ajax.status) {\n          case AJAX_STATUS_NONE:\n            ajax.status = AJAX_STATUS_INPROGRESS;\n            ajax.data_to_render = null;\n            ajax.render_timeout_id = 0;\n            // 1回目のajax起動\n            if (g_calendar_events.debug) console_log(id, null, \"none: trigger \" + JSON.stringify(data));\n            trigger_event_ajax(data);\n            break;\n          case AJAX_STATUS_INPROGRESS:\n            // 1回目のajax動作中\n            //  追加のevents関数が起動されたので、ajax用dataを保存(このdataの結果をrenderする)\n            ajax.data_to_render = data;\n            if (g_calendar_events.debug) console_log(id, null, \"inprogress: \" + JSON.stringify(data));\n            // ajax起動しないので、ここでcallback呼出\n            callback([]);\n            break;\n          case AJAX_STATUS_RETRIGGER:\n            // 2回目以降のajax動作中\n            //  追加のevents関数が起動されたので、ajax用dataを保存(このdataの結果をrenderする)\n            ajax.data_to_render = data;\n            if (g_calendar_events.debug) console_log(id, null, \"retrigger: \" + JSON.stringify(data));\n            // ajax起動しないので、ここでcallback呼出\n            callback([]);\n            break;\n          case AJAX_STATUS_WAIT_TO_RENDER:\n            // render待ち中\n            // 待ちを解除し、ajaxを再起動\n            const timeout_id = ajax.render_timeout_id;\n            ajax.status = AJAX_STATUS_RETRIGGER;\n            ajax.data_to_render = null;\n            ajax.render_timeout_id = 0;\n            clearTimeout(timeout_id);\n            if (g_calendar_events.debug) console_log(id, null, \"wait_to_render: trigger \" + JSON.stringify(data));\n            trigger_event_ajax(data);\n            break;\n          default:\n            console_log(id, null, \"invalid ajax status \" + ajax.status + \": \" + JSON.stringify(data));\n            ajax.status = AJAX_STATUS_NONE;\n            ajax.data_to_render = null;\n            ajax.render_timeout_id = 0;\n            // ajax起動しないので、ここでcallback呼出\n            callback([]);\n        }\n      }\n    };\n  } // ($('#reservation_calendar').length > 0 || $('#raffle_calendar').length > 0)\n\n  var events_url = location.pathname.replace(/calendar$/, 'events.json')\n  var query = location.search\n  if (query.includes('summarize')) {\n    let p = new URLSearchParams(query);\n    let v = p.get('summarize');\n    events_url += '?summarize=' + v;\n  }\n\n  $('#reservation_calendar').empty()\n\n  const params = calendar_base_params()\n\n  params.header.right = 'month'\n  var add_date = $('#reservation_add_date').val();\n  if (add_date) {\n    if (this.location.pathname.match(/reservation_calendar/)) {\n      let d = new Date(add_date);\n      let t = new Date();\n      if (d < t) {\n        add_date = t.getFullYear() + '-' + ('00' + (t.getMonth()+1)).slice(-2) + '-' + ('00' + t.getDate()).slice(-2);\n      }\n    }\n    params.defaultDate = add_date;\n  }\n\n  const calendar_el = $('#reservation_calendar');\n\n  Object.assign(params, {\n    // The initial view when the calendar loads.\n    defaultView: 'month',\n    //events (as a function)\n    events: function(start, end, timezone, callback) {\n      g_calendar_events.fullcalendar_events_handler(calendar_el, events_url, start, end, timezone, callback);\n    },\n\n    // カレンダー上にアイコンを表示させるメソッド(ただし、運用者と窓口対応者のカレンダーはアイコンではなくイベントの情報が表示される)\n    eventRender: function(event, element) {\n\n      var currentUrl = window.location.href;\n      if (currentUrl.includes('/reservation_calendar')) { //以下、空室カレンダーの表示方法\n\n        if (!(event.role && (event.role === 'operator'))) {\n          element.find('.fc-title').remove();\n          element.css('display', 'none');\n\n          var formattedDate = event.start.toISOString().slice(0, 10);  // YYYY-MM-DD形式を取得\n          var cell = $('.fc-day[data-date=\"' + formattedDate + '\"]');\n    \n          if(event.eventStatus === 'reservation' && typeof event.type === 'undefined'){\n            if (cell.find('.fa-circle-o').length === 0) {\n              cell.find('.fa-star-o, .fa-close').remove();\n              const iconElement = $('<i class=\"fa fa-circle-o\" style=\"display:block; text-align:center; font-size:25px; margin-top:20px; color:#297acf;\"></i>'); // アイコン要素を作成\n              cell.append(iconElement);\n            }\n          }else if(event.eventStatus === 'reservation' && event.type === 'raffle_apply'){\n            if (cell.find('.fa-star-o').length === 0) {\n              cell.find('.fa-circle-o, .fa-close').remove();\n              const iconElement = $('<i class=\"fa fa-star-o\" style=\"display:block; text-align:center; font-size:25px; margin-top:20px; color:#297acf;\"></i>'); // アイコン要素を作成\n              cell.append(iconElement);\n            }\n          }else{\n            if (cell.find('.fa-circle-o').length === 0 && cell.find('.fa-star-o').length === 0 && cell.find('.fa-close').length === 0) {\n              cell.find('.fa-circle-o, .fa-star-o, .fa-close').remove();\n              const iconElement = $('<i class=\"fa fa-close\" style=\"display:block; text-align:center; font-size:25px; margin-top:20px; color:gray;\"></i>'); // アイコン要素を作成\n              cell.append(iconElement);\n            }\n          }\n        }\n      }else{  //以下、予約状況カレンダーの表示方法\n      }\n    },\n\n    //===== Date Clicking & Selecting =====\n    // Detect when the user clicks on dates or times. Give the user the ability to select multiple dates or time slots with their mouse or touch device.\n\n    // Allows a user to highlight multiple days or timeslots by clicking and dragging.\n    selectable: true,\n\n    // Whether to draw a “placeholder” event while the user is dragging.\n    //selectMirror:\n\n    // Whether clicking elsewhere on the page will cause the current selection to be cleared.\n    unselectAuto: true,\n\n    // A way to specify elements that will ignore the unselectAuto option.\n    unselectCancel: '',\n\n    //----- CALLBACKS -----\n    // Triggered when the user clicks on a date or a time.\n    //dateClick:\n\n    // Triggered when a date/time selection is made.\n    //select: function(start, end, allDay) {\n    //  console.log('select called: start=', start, ', end=', end, ', allDay=', allDay)\n    //},\n\n    // Triggered when the current selection is cleared.\n    //unselect:\n\n    //===== Event Sources =====\n\n    // An array of Event Objects that will be displayed on the calendar.\n    //events (as an array)\n\n    // A custom function for programmatically generating Events.\n    //events (as a function)\n\n    //===== Event Clicking & Hovering =====\n    // Handers to know when an event has been clicked or hovered over.\n\n    // Triggered when the user clicks an event.\n    eventClick: function(calEvent, jsEvent, view) {\n      //console.log('eventClick called: calEvent=', calEvent, ', jsEvent=', jsEvent)\n      //console.log(calEvent)\n      //console.log(jsEvent)\n      //console.log(view)\n      \n      type_array = ['raffle_apply', 'raffle_impossible', 'raffle_waiting', 'raffle_ineligible']\n      post_type = ['raffle_apply', 'raffle_impossible', 'raffle_waiting']\n      delete_type = ['raffle_ineligible']\n\n      if (calEvent.type && post_type.includes(calEvent.type)){\n        method_type = 'POST'\n      } else if (calEvent.type && delete_type.includes(calEvent.type)){\n        method_type = 'DELETE'\n      }\n      if (calEvent.type && type_array.includes(calEvent.type)) {\n        $.ajax({\n          type: method_type,\n          url: calEvent.url,\n          dataType: 'json',\n          data: {\n            type: calEvent.type\n          }\n        }).then(\n          function(data) {\n            console.log('OK: create event:', data)\n            $('#reservation_calendar').fullCalendar('refetchEvents')\n          },\n          function(data) {\n            if (data.status == 200) {\n              eval(data.responseText)\n              console.log('Confirm: create event')\n            } else{\n              console.log('NG: create event')\n            }\n          }\n        )\n        return false\n      }\n      if (this.href.indexOf('/reservations/new') >= 0) {\n        this.href += RESERVATION_NEW_ENTRY_PARAM;\n      }\n    },\n    \n    dayClick: function(date, jsEvent, view) {\n\n      $('.fc-day').css('background-color', ''); // 背景色をリセット\n      $('#event-details, #selected-date').remove(); // 追加した要素を削除\n\n      const selectedCell = $('.fc-day[data-date=\"' + date.format('YYYY-MM-DD') + '\"]');\n      selectedCell.css('background-color', '#f0f8ff '); // 背景色を設定(例:)\n\n      const allEvents = $('#reservation_calendar').fullCalendar('clientEvents');\n\n     // 選択された日付のイベントをフィルタリング\n      const events = allEvents.filter(event => event.start.isSame(date, 'day'));\n\n      // 当日のイベントを表示するための要素を取得または作成\n      let eventDetailsContainer = $('#event-details');\n      if (eventDetailsContainer.length === 0) {\n        eventDetailsContainer = $('<div id=\"event-details\"></div>').insertAfter('#reservation_calendar');\n      }\n      eventDetailsContainer.empty();  // 既存のイベント情報をクリア\n\n      // 選択された日付を表示するための要素を取得または作成\n      let selectedDateContainer = $('#selected-date');\n      if (selectedDateContainer.length === 0) {\n        selectedDateContainer = $('<div id=\"selected-date\" style=\"margin-top: 20px; font-size: 18px; font-weight: bold;\"></div>').insertAfter('#reservation_calendar');\n      }\n      selectedDateContainer.empty();  // 既存のイベント情報をクリア\n\n      // 選択された日付を表示\n      const s_DATE = date.format('M月D日(dddd)'); \n      DATE = $(`<div>${s_DATE}</div>`);  \n\n      type_array = ['raffle_apply', 'raffle_impossible', 'raffle_waiting', 'raffle_ineligible']\n      post_type = ['raffle_apply', 'raffle_impossible', 'raffle_waiting']\n      delete_type = ['raffle_ineligible']\n\n      events.sort((a, b) => new Date(a.start) - new Date(b.start));  //イベントの表示順序を整理\n\n      // イベント情報を表示\n      events.forEach(event => {\n        const eventElement = $(`<div>${event.start.format('HH:mm')} - ${event.end.format('HH:mm')} : ${event.title}</div>`);\n        let background_color = event.color !== undefined ? event.color : 'rgba(150, 150, 150, 0.2)';\n        eventElement.css({\n          'padding': '10px',\n          'margin-bottom': '5px',\n          'background-color': background_color,\n          'border': '2px solid #dee2e6',\n          'border-radius': '5px',\n          'font-size': '14px',\n          'cursor': 'pointer',\n          'color': '#343a40'\n        });\n        // イベントをクリックしたときの処理\n        eventElement.on('click', function() {\n          if (!post_type.includes(event.type) && !delete_type.includes(event.type)) {\n            // 通常のリンク遷移\n            if (event.url) {\n              window.location.href = event.url;\n            }\n          } else {\n            // POSTまたはDELETEが必要な場合\n            $.ajax({\n              type: post_type.includes(event.type) ? 'POST' : 'DELETE',\n              url: event.url,\n              dataType: 'json',\n              data: {\n                type: event.type\n              }\n            }).then(\n              function(data) {\n                $('#reservation_calendar').fullCalendar('refetchEvents');\n                // ここでモーダルを表示するなど次のアクションを追加\n              },\n              function(data) {\n                if (data.status == 200) {\n                  eval(data.responseText);\n                  console.log('Confirm: event processed');\n                } else {\n                  console.log('NG: event processing failed');\n                }\n              }\n            );\n          }\n        });\n        selectedDateContainer.append(DATE);\n        eventDetailsContainer.append(eventElement);  \n      });\n\n       //日付選択後のスクロール機能 \n      const lastEvent = eventDetailsContainer.children().last(); \n      if (lastEvent.length > 0) {\n          lastEvent[0].scrollIntoView({ behavior: 'smooth', block: 'nearest' });\n          console.log()\n      }\n      return false;\n    },\n\n    //===== International =====\n    eventColor: 'rgba(150,150,150,0.2)',\n    disableDragging: true\n  })\n\n  calendar = $('#reservation_calendar').fullCalendar(params)\n  $('[data-refetch-trigger]').on('change' , function(){\n    $('.fc-day').each(function() {\n      $(this).find('.fa-circle-o, .fa-star-o, .fa-close').remove();\n    });\n    $('#event-details, #selected-date').remove(); // dayClick によって追加された要素を削除\n    calendar.fullCalendar('refetchEvents');\n  });\n\n  {\n    let application_starts_at_modal = $('#raffle_application_starts_at_modal');\n    let application_ends_at_modal = $('#raffle_application_ends_at_modal');\n\n    if (application_starts_at_modal && application_ends_at_modal) {\n      let raffle_ineligible_notice = function(form, notice) {\n        if ($('#user_id').val() == 'all') {\n          var data = {ajax_method: \"check_overlapped\"};\n          form.find('[name]').each(function(index) {\n            var name = $(this).prop('name');\n            var val = $(this).val();\n            data[name] = val;\n          });\n          $.ajax({\n            url: $(\"#form_action_raffle_ineligible\").val(),\n            type: 'POST',\n            data: data\n          }).done(function(data) {\n            if (!(data instanceof Object) || (data.result == undefined)) {\n              return;\n            }\n            if (data.result) {\n              notice.show();\n            } else {\n              notice.hide();\n            }\n          });\n        }\n      }\n\n      application_starts_at_modal.on('change', function() {\n        raffle_ineligible_notice($('#raffle_application_modal_form'), $('#raffle_application_modal_overlapped'));\n      });\n      application_ends_at_modal.on('change', function() {\n        raffle_ineligible_notice($('#raffle_application_modal_form'), $('#raffle_application_modal_overlapped'));\n      });\n    }\n  }\n\n  $(\"#room_id_in_facility\").on('change', function room_select() {\n    var date = $('#reservation_calendar').fullCalendar('getDate'); // このdateはMoment.jsのmoment object\n    add_date = date.format('YYYY-MM-DD');\n    var url = this.options[this.selectedIndex].value;\n    url += url.includes('?') ? '&' : '?';\n    url += 'add_date=' + add_date;\n    self.location = url;\n  });\n})\n","$(document).on('turbolinks:load', function() {\n  $('#facility_images,#room_images').on('change', function(event) {\n    var field = $(event.target).parent().find('.preview_images')\n    var files = event.target.files\n    var def = (new $.Deferred()).resolve()\n    $.each(files, function(i, file) {\n      def = def.then(function() {\n        return previewImage(field, file)\n      })\n    })\n  })\n\n  var previewImage = function(field, file) {\n    var reader = new FileReader()\n    var img = new Image()\n    var def = $.Deferred()\n    reader.onload = function(event) {\n      $(field).append(img)\n      img.src = event.target.result\n      def.resolve(img)\n    }\n    reader.readAsDataURL(file)\n    return def.promise()\n  }\n})\n","$(document).on('ready turbolinks:load', function() {\n  $('[data-mail-template-keyword-to-clipboard]').on('click', mail_template_keyword_to_clipboard)\n});\n\nfunction mail_template_keyword_to_clipboard(evt) {\n  const keyword = $(evt.target).text().trim()\n\n  //keywordを含んだtextareaをbodyタグの末尾に設置\n  $(document.body).append(\"<textarea id=\\\"tmp_copy\\\" style=\\\"position:fixed;right:100vw;font-size:16px;\\\" readonly=\\\"readonly\\\">\" + keyword + \"</textarea>\");\n\n  //elmはtextareaノード\n  var elm = $(\"#tmp_copy\")[0];\n\n  //select()でtextarea内の文字を選択\n  elm.select();\n\n  //rangeでtextarea内の文字を選択\n  var range = document.createRange();\n  range.selectNodeContents(elm);\n  var sel = window.getSelection();\n  sel.removeAllRanges();\n  sel.addRange(range);\n  elm.setSelectionRange(0, 999999);\n\n  //execCommandを実施\n  document.execCommand(\"copy\");\n\n  //textareaを削除\n  $(elm).remove();\n}\n","$(document).on('turbolinks:load', function() {\n\n  const XlsxPopulate = require('xlsx-populate')\n\n  function getWorkbook(url) {\n    var Promise = XlsxPopulate.Promise\n    return new Promise(function(resolve, reject) {\n      var req = new XMLHttpRequest()\n      req.open(\"GET\", url, true)\n      req.responseType = \"arraybuffer\"\n      req.onreadystatechange = function() {\n        if (req.readyState === 4) {\n          if (req.status === 200) {\n            resolve(XlsxPopulate.fromDataAsync(req.response))\n          } else {\n            reject(\"Received a \" + req.status + \" HTTP code.\")\n          }\n        }\n      }\n      req.send()\n    })\n  }\n  function generate(url, params, type) {\n    return getWorkbook(url)\n      .then(function(workbook) {\n        var sheet = workbook.sheet(0)\n        for (const k in params) {\n          var cells = sheet.find(k)\n          for (var cell of cells) {\n            const rowNumber = cell.row().rowNumber()\n            sheet.cell(rowNumber, 2).value(params[k])\n          }\n        }\n        return workbook.outputAsync({ type: type })\n      })\n  }\n  function generateBlob(url, params, filename) {\n    return generate(url, params)\n      .then(function(blob) {\n        if (window.navigator && window.navigator.msSaveOrOpenBlob) {\n          window.navigator.msSaveOrOpenBlob(blob, \"outA.xlsx\")\n        } else {\n          var url = window.URL.createObjectURL(blob)\n          var a = document.createElement(\"a\")\n          document.body.appendChild(a)\n          a.href = url\n          a.download = filename\n          a.click()\n          window.URL.revokeObjectURL(url)\n          document.body.removeChild(a)\n        }\n      })\n      .catch(function(err) {\n        alert(err.message || err)\n        throw err\n      })\n  }\n  function generateBase64(url, params, filename) {\n    return generate(url, params, \"base64\")\n      .then(function(base64) {\n        if (window.navigator && window.navigator.msSaveOrOpenBlob) {\n          throw new Error(\"Navigating to data URI is not supported in IE.\")\n        } else {\n          location.href = \"data:\" + XlsxPopulate.MIME_TYPE + \";base64,\" + base64\n        }\n      })\n      .catch(function(err) {\n        alert(err.message || err)\n        throw err\n      })\n  }\n  $(\".download-document\").on(\"click\", function() {\n    var url = $(this).attr('url')\n    var filename = $(this).attr('filename')\n    var params = {}\n    $(\".card-body.reservation .row.form\").each(function(i, elem) {\n      const k = $(elem).find(\".key\").text()\n      const v = $(elem).find(\".value\").text()\n\n      console.log(\"k[\"+k+\"],v[\"+v+\"]\")\n\n      params[k] = v\n    })\n    generateBlob(url, params, filename)\n    //generateBase64(url, params)\n  })\n})\n","$(document).on('turbolinks:load', function() {\n\n  var slideSwitch = function() {\n    var active = $('#slideshow li.active')\n    if ($(active).length == 0) {\n      active = $('#slideshow li:last')\n    }\n    var next = null\n    if ($(active).next().length) {\n      next = $(active).next()\n    } else {\n      next = $('#slideshow li:first')\n    }\n    console.log(\"next\", next)\n    $(active).addClass('last-active')\n    //$(next).css({opacity: 0.0}).addClass('active').animate( { opacity: 1.0 }, 1000, function() {\n    //  $(active).removeClass('active last-active')\n    //  return\n    //})\n    return\n  }\n\n  if ($('body').hasClass('welcome index')) {\n    //setInterval(slideSwitch, 5000)\n  }\n});\n","$(document).on('turbolinks:load', function() {\n\n  $('.welcome-image-slider').not('.slick-initialized').slick({\n    dots: true,\n    //infinite: true,\n    slidesToShow: 3,\n    //slidesToScroll: 1,\n    arrows: true,\n    autoplay: true,\n    autoplaySpeed: 3000,\n    centerMode: true,\n    //accessibility: true,\n    //centerPadding: '50px',\n    //prevArrow:'<i class=\"fa fa-angle-left arrow arrow-left\"></i>',\n    //nextArrow:'<i class=\"fa fa-angle-right arrow arrow-right\"></i>',\n  })\n\n  $('.facility-index-image-slider, .room-index-image-slider').not('.slick-initialized').slick({\n    dots: false,\n    slidesToShow: 1,\n    slidesToScroll: 1,\n    infinite: true,\n    autoplay: true,\n    autoplaySpeed: 5000,\n    initialSlide: 0,\n    centerMode: true,\n    arrows: false,\n    variableWidth: true,\n    centerPadding: '0'\n  })\n\n  $el = $('.facility-show-image-slider, .room-show-image-slider')\n  if($el[0]){\n    $('.facility-show-image-slider, .room-show-image-slider').not('.slick-initialized').slick({\n      dots: true,\n      //infinite: true,\n      slidesToShow: 1,\n      //slidesToScroll: 1,\n      arrows: true,\n      //centerMode: true,\n      //autoplay: true,\n      //autoplaySpeed: 5000,\n      //centerMode: true,\n      //centerPadding: '10%'\n    });\n  }\n  // 画像が表示されないことがあるが、リサイズすると出るので無理やり出す\n  setTimeout(function(){\n    $(window).trigger('resize');\n  }, 1000);\n});\n$(window).on('pageshow', function() {\n  // 画像が表示されないことがあるが、リサイズすると出るので無理やり出す\n  setTimeout(function(){\n    $(window).trigger('resize');\n  }, 1000);\n});\n","require(\"packs/use_report\")\n\n$(document).on('ready turbolinks:load', function() {\n  $(\"input[name='reservation[request_for_exemption]'\").change(function() {\n    if ($(this).prop('checked')) {\n      $(\"#reservation_payment_method\").prop('disabled', true)\n      $(\".reservation_reason_for_exemption\").slideDown()\n      //$(\".reservation_reason_for_exemption\").css('visibility', 'visible')\n    } else {\n      $(\"#reservation_payment_method\").prop('disabled', false)\n      $(\".reservation_reason_for_exemption\").slideUp()\n      //$(\".reservation_reason_for_exemption\").css('visibility', 'hidden')\n    }\n  })\n\n  $(\"[data-payment-method-trigger]\").on('change', function() {\n    // 利用目的によっては料金が0になることがある\n    const $target = $(\"[data-payment-method]\");\n    if ($(this).find(':selected').data('price') > 0) {\n      $target.show();\n      $target.find(':input').prop('disabled', false);\n      $(\"input[name='reservation[request_for_exemption]']\").trigger('change');\n    } else {\n      $target.hide();\n      $target.find(':input').prop('disabled', true);\n    }\n  });\n  $(\"[data-payment-method-trigger]\").trigger('change');\n\n  // 申請書作成ボタン\n  $('[data-reservation-to-clipboard]').on('click', reservation_to_clipboard)\n\n  // 繰り返しselectの変更で利用日、etcの表示を切り替える。\n  $(\"select[name='reservation[multiple_reservation_attributes][repeat_type]']\").on('change', function() {\n    var repeat_type = $(\"select[name='reservation[multiple_reservation_attributes][repeat_type]']\").val();\n    switch (repeat_type) {\n      case 'daily':\n      case 'weekly':\n      case 'monthly_nth_day':\n      case 'monthly_nth_wday':\n      case 'end_of_month':\n        $(\".single_reservation_using_date\").slideUp();\n        $(\".multiple_reservation_starts_on\").slideDown();\n        $(\".multiple_reservation_ends_on\").slideDown();\n        switch (repeat_type) {\n          case 'weekly':\n            $(\".multiple_reservation_wdays\").slideDown();\n            // $(\".multiple_reservation_mday\").slideUp();\n            $(\".multiple_reservation_mweek_and_wday\").slideUp();\n            break;\n          case 'monthly_nth_wday':\n            $(\".multiple_reservation_wdays\").slideUp();\n            // $(\".multiple_reservation_mday\").slideUp();\n            $(\".multiple_reservation_mweek_and_wday\").slideDown();\n            break;\n          case 'monthly_nth_day':\n            $(\".multiple_reservation_wdays\").slideUp();\n            // $(\".multiple_reservation_mday\").slideDown();\n            $(\".multiple_reservation_mweek_and_wday\").slideUp();\n            break;\n          case 'daily':\n          case 'end_of_month':\n          default:\n            $(\".multiple_reservation_wdays\").slideUp();\n            // $(\".multiple_reservation_mday\").slideUp();\n            $(\".multiple_reservation_mweek_and_wday\").slideUp();\n            break;\n        }\n        break;\n      case 'none':\n      default:\n        $(\".single_reservation_using_date\").slideDown();\n        $(\".multiple_reservation_starts_on\").slideUp();\n        $(\".multiple_reservation_ends_on\").slideUp();\n        $(\".multiple_reservation_wdays\").slideUp();\n        // $(\".multiple_reservation_mday\").slideUp();\n        $(\".multiple_reservation_mweek_and_wday\").slideUp();\n        break;\n    }\n  })\n  $(\"select[name='reservation[multiple_reservation_attributes][repeat_type]']\").trigger('change');\n\n  $('.new_reservation').submit(function(){\n    start_at = $(\"select[name='reservation[starts_at]']\").val();\n    end_at = $(\"select[name='reservation[ends_at]']\").val();\n    if (start_at && end_at && start_at >= end_at) {\n      alert('利用開始時間<利用終了時間で選択してください');\n      return false;\n    }\n  });\n\n  $('.new_reservation input, #fixture_select_form input').keypress(function(e){\n    if ((e.which && e.which === 13) || (e.keyCode && e.keyCode === 13)) {\n      return false;\n    }\n  })\n\n  // 支払い方法選択画面の同意確認部分\n  $(document).on(\"change\", \"#terms-checkbox\", function () {\n    $(\"#submit-button\").prop(\"disabled\", !$(this).prop(\"checked\"));\n  });\n\n  // 支払い方法選択画面の同意確認部分のチェックボックスの判定範囲拡張\n  $(document).on(\"click\", \".consent-group\", function (e) {\n    if ($(e.target).is(\"input[type='checkbox']\")) {\n      return;\n    }\n    var $checkbox = $(\"#terms-checkbox\");\n    $checkbox.prop(\"checked\", !$checkbox.prop(\"checked\")).trigger(\"change\"); //申請ボタンの切替\n    e.stopPropagation();    // イベントのバブリングを防ぐ(チェックボックス自体のクリック時に意図しない挙動を防ぐため)\n  });\n  \n\n  // 申請内容表示画面\n  \n  // 利用内容のチェックボックス全選択制御\n  var do_all = \".edit_reservation .reservation_content_tab .using_content input#do_all\";\n  var do_id = \".edit_reservation .reservation_content_tab .using_content input[name='do_ids[]']:enabled\";\n  var do_id_checked = do_id + \":checked\";\n  if ($(do_id) && $(do_id).length > 1) {\n    $(do_all).on('change', function() {\n      $(do_id).prop('checked', this.checked);\n    });\n\n    $(do_id).on('change', function() {\n      if ($(do_id_checked) && $(do_id)) {\n        if ($(do_id_checked).length == $(do_id).length) {\n          $(do_all).prop('checked', true);\n        } else {\n          $(do_all).prop('checked', false);\n        }\n      }\n    });\n    }\n  $(do_all).trigger('change');\n\n  $('#backgrounds .cancel').on('click', function() {\n    $('#cancel_id').val($(this).data(\"cancel-id\"));\n    $('#cancel_queue').val($(this).data(\"cancel-queue\"));\n    return true;\n  });\n\n  checkbox_manual_payment = $(\"input[name='manual_payment']:checkbox\");\n  confirm_payment_block = $(\"#confirm_payment_block\");\n  approve = $(\"#approve\");\n  confirm_payment = $(\"#confirm_payment\");\n  checkbox_manual_payment.on('change', function() {\n    if (checkbox_manual_payment.prop('checked')) {\n      confirm_payment_block.slideDown();\n      approve.show();\n      confirm_payment.show();\n    } else {\n      confirm_payment_block.slideUp();\n      approve.hide();\n      confirm_payment.hide();\n    }\n  });\n\n  var step_progress = $(\".step-progress\");\n  step_progress.find(\"li\").each(function(){\n    var step = $(this);\n    if (step.attr(\"stage\") === step_progress.attr(\"stage\")) {\n      step.toggleClass(\"processing\");\n      return false;\n    }\n  });\n\n  var footer = $(\".reservations.show\").find(\".card-footer\");\n  var footer_left = footer.find(\".btn-left\");\n  var footer_right = footer.find(\".btn-right\");\n  footer.removeClass(\"row-two\");\n  if (footer.width() < (footer_left.width() + footer_right.width())) {\n    footer.addClass(\"row-two\");\n  }\n  \n  //モーダル表示\n  $('#confirmation_modal').on('show.bs.modal', function(event) {\n    var button = $(event.relatedTarget); // show.htmlで押下されたボタン\n    var action_type = button.attr('data-action-type');\n    var modal = $(this);\n    var confirm_button = modal.find('.confirm-button');\n    var reason_field = modal.find('#reason_field');\n    reason_field.val(''); // モーダル表示のたびにフィールドをリセット\n\n    if (action_type === 'reject') {\n      modal.find('.modal-title').text('予約を却下しますか?');\n      modal.find('.reason-label').text('却下理由');\n      reason_field.attr('name', 'reservation[reason_for_rejection]');\n      confirm_button.text('却下を確定する');\n      confirm_button.attr('onclick', 'submit_reject_reservation()'); \n\n    } else if (action_type === 'cancel') {\n      modal.find('.modal-title').text('予約をキャンセルしますか?');\n      modal.find('.reason-label').text('キャンセル理由');\n      reason_field.attr('name', 'reservation[reason_for_cancellation]');\n      confirm_button.text('キャンセルを確定する');\n      confirm_button.attr('onclick', 'submit_cancel_reservation()'); \n    }\n  });\n});\n\n$(window).on('pageshow', function() {\n  // これがないとブラウザの戻るで予約申請画面に来た場合おかしくなる\n  $(\"[data-payment-method-trigger]\").trigger('change');\n  $(\"input[name='reservation[request_for_exemption]']\").trigger('change');\n  // $(\"select[name='reservation[starts_at]']\").trigger('change');\n  $(\"select[name='reservation[multiple_reservation_attributes][repeat_type]']\").trigger('change');\n\n  // 申請内容表示画面\n  $(\".edit_reservation .reservation_content_tab input[name='do_ids[]']\").trigger('change');\n\n  $(\"input[name='manual_payment']:checkbox\").trigger('change');\n\n  $(\"body.reservations.payment_select\").css({'position': '','width': ''});\n  $(\".loader-container\").hide();\n});\n\n// 予約情報をクリップボードへ入れる\n// コピーした内容を入れたテキストエリアを一瞬documentに追加し、\n// テキストを選択、コピーコマンドを実行 を実施する必要がある\nfunction reservation_to_clipboard(){\n  var id = $(this).attr('id').slice('download'.length + 1);\n  const userAgent = window.navigator.userAgent.toLowerCase();\n  const $copydata = $('#copydata_'.concat(id));\n  const $copytmp = $('<textarea></textarea>');\n  // 減免率入力フォームが画面にある場合はその値を使う\n  const $exemption_percent = $('select[name=\"reservation[exemption_percent]\"]');\n  if($exemption_percent[0]){\n    $copydata.find('.exemption_percent').text($exemption_percent.find(':selected').val());\n  }\n  $copytmp.html($copydata.find('td').map(function(i, el){return $(el).text().trim()}).get().join('\\n'));\n  $('body').append($copytmp);\n  if(userAgent.indexOf('chrome') != -1 ){\n    $copytmp.select();\n  } else {\n    const range = document.createRange();\n    range.selectNode($copytmp[0].firstChild);\n    const selection = window.getSelection();\n    selection.removeAllRanges();\n    selection.addRange(range);\n  }\n  document.execCommand('copy');\n  $copytmp.remove();\n  alert('申請書に必要なデータをコピーしました\\n申請書の所定の位置に貼り付けてください');\n}\n","$(document).on('turbolinks:load', function() {\n  window.g_reservation_slot = {\n    is_search_form: ($('#reservation_search_form').length > 0),\n    is_export_form: ($('#reservation_export_form').length > 0),\n    is_export_reservable_form: ($('#reservable_slot_form').length > 0),\n\n    search_form_fini: null,\n  };\n\n  const is_search_form = g_reservation_slot.is_search_form;\n  const is_export_form = g_reservation_slot.is_export_form;\n  const is_export_reservable_form = g_reservation_slot.is_export_reservable_form;\n\n  if (is_search_form || is_export_form || is_export_reservable_form) {\n    class ReservationForm {\n      constructor(model_name) {\n        // form\n        const form_root_sel = `#${model_name}_form`;\n        // formの子要素CSSセレクタの文字列フォーマット\n        const disp_block_sel = attr => `#${model_name}_${attr}_disp_block`;\n        const control_sel = attr => `[name=\"${model_name}[${attr}]\"]`;\n        const control_arr_sel = attr => `[name=\"${model_name}[${attr}][]\"]`;\n        const all_sel = attr => `#${model_name}_${attr}_all`;\n        const submit_sel = `#${model_name}_submit`;\n        const form_el = sel => $(`${form_root_sel} ${sel}`);\n\n        this.disp_block_el = attr => form_el(disp_block_sel(attr));\n        this.control_el = attr => form_el(control_sel(attr));\n        this.control_arr_el = attr => form_el(control_arr_sel(attr));\n        this.all_el = attr => form_el(all_sel(attr));\n        this.submit_el = form_el(submit_sel);\n      }\n\n      set_select_options(select_el, opts, default_value) {\n        select_el.empty();\n        for (const opt of opts) {\n          const newOption = new Option(opt[0], opt[1], false, false);\n          select_el.append(newOption);\n        }\n        if (default_value != undefined) {\n          select_el.val(default_value);\n        }\n      };\n\n      all_checked(els, all_val) {\n        return els.map(function (index, e, val) {\n          return $(this).prop('checked');\n        }).get().every(val => val == all_val);\n      }\n\n      init_checkbox_all(attrs) {\n        attrs.forEach(attr => {\n          // 「全て」が変更されたら、その属性の全項目のチェック状態を「全て」に合わせる\n          this.all_el(attr).on('change', () => {\n            this.control_arr_el(attr).prop('checked', this.all_el(attr).prop('checked'));\n          });\n\n          this.control_arr_el(attr).on('change', () => {\n            // 属性の全項目のチェック状態がチェックになったら「全て」をチェック。そうでなければチェックオフ。\n            if (this.all_checked(this.control_arr_el(attr), true)) {\n              this.all_el(attr).prop('checked', true);\n            } else {\n              this.all_el(attr).prop('checked', false);\n            }\n          });\n          this.control_arr_el(attr).trigger('change');\n        });\n      }\n    };\n\n    if (is_search_form) {\n\n      // 予約 詳細検索条件指定画面\n\n      const form = new ReservationForm('reservation_search');\n\n      // select2要素\n      const select2_controls = {\n        // \"モデルの属性\": \"ajaxパラメータ(https://select2.org/data-sources/ajax)\"\n        user_id: { url: '/user_resources/search' },\n        facility: { url: '/facilities/search' },\n        room_id: {\n          url: '/rooms/search',\n          data: function (params) {\n            const facility_id = form.control_el('facility').val();\n            const room_name = params.term;\n            let query = {};\n            Object.assign(query, params);\n            query.q = room_name;\n            if (facility_id != 'all') {\n              query.facility_id = facility_id;\n            }\n            return query;\n          }\n        }\n      };\n\n      const select2_arg = attr => {\n        const ajax_arg = select2_controls[attr];\n        let ajax = {\n          url: ajax_arg.url,\n          dataType: 'json'\n        };\n        if (ajax_arg.data) {\n          // select2 request parameter override\n          ajax.data = ajax_arg.data;\n        }\n        let arg = { ajax: ajax };\n        return arg;\n      };\n\n      // 予約 詳細検索条件指定画面 初期化処理\n\n      const search_form_init = function () {\n        // select2要素\n        for (const attr in select2_controls) {\n          form.control_el(attr).select2(select2_arg(attr));\n        }\n\n        // 期間\n        form.control_el('date_range').on('change', function() {\n          // 未指定の時は開始日/終了日をdisabled\n          [ 'start_on', 'end_on' ].forEach(function (attr) {\n            if (form.control_el('date_range').val() == 'none') {\n              form.control_el(attr).prop('disabled', true);\n            } else {\n              form.control_el(attr).prop('disabled', false);\n            }\n          });\n        });\n        form.control_el('date_range').trigger('change');\n\n        // 利用者(種別)\n        form.control_el('user_kind').on('change', function() {\n          // 選択された場合表示\n          [ 'user', 'user_id', 'user_type' ].forEach(function (attr) {\n            if (form.control_el('user_kind').val() == attr) {\n              form.disp_block_el(attr).show();\n            } else {\n              form.disp_block_el(attr).hide();\n            }\n          });\n        });\n        form.control_el('user_kind').trigger('change');\n\n        // 施設\n        let prev_facility_id = form.control_el('facility').val();\n        form.control_el('facility').on('change.select2', function () {\n          const facility_id = form.control_el('facility').val();\n          const requested_setting_id = (facility_id != prev_facility_id) ? 'all' : form.control_el('requested_setting').val();\n\n          // 部屋選択肢(ajax)\n          form.control_el('room_id').select2('data');\n          if (facility_id != prev_facility_id) {\n            form.control_el('room_id').val('all');\n            form.control_el('room_id').trigger('change');\n          }\n          prev_facility_id = facility_id;\n\n          // 申請内容選択肢\n          form.set_select_options(form.control_el('requested_setting'), all_facility_requested_settings[facility_id], requested_setting_id);\n          form.control_el('requested_setting').trigger('change');\n\n          // 施設:全て 「施設・部屋名」を表示\n          const room = 'room'\n          if (facility_id == 'all') {\n            form.disp_block_el(room).show();\n          } else {\n            form.disp_block_el(room).hide();\n          }\n\n          // どれかの施設 「部屋」「申請内容」を表示\n          [ 'room_id', 'requested_setting' ].forEach(function (attr) {\n            if (facility_id == 'all') {\n              form.disp_block_el(attr).hide();\n            } else {\n              form.disp_block_el(attr).show();\n            }\n          });\n        });\n        form.control_el('facility').trigger('change.select2');\n\n        // 「全て」チェックボックス\n        const checkbox_all_attrs = [ 'status', 'payment_status', 'payment_method', 'use_report_status' ];\n        form.init_checkbox_all(checkbox_all_attrs);\n\n        form.submit_el.on('click', function () {\n          const start_on = form.control_el('start_on').val();\n          const end_on = form.control_el('end_on').val();\n          if ((start_on != '') && (end_on != '')) {\n            if (start_on > end_on) {\n              alert('開始日<=終了日にしてください');\n              return false;\n            }\n            return true;\n          }\n        });\n        form.submit_el.trigger('submit');\n      };\n\n      const search_form_fini = function () {\n          for (const attr in select2_controls) {\n            form.control_el(attr).select2('destroy');\n          }\n      };\n\n      window.g_reservation_slot.search_form_fini = search_form_fini;\n\n      // 詳細検索条件 画面初期化\n      search_form_init();\n    }\n\n    if (is_export_form) {\n\n      // 予約情報CSV出力 画面初期化処理\n\n      const export_form_init = function () {\n        const form = new ReservationForm('reservation_export');\n\n        const checkbox_all_attrs = [ 'column' ];  \n        form.init_checkbox_all(checkbox_all_attrs);\n      };\n\n      // 予約情報CSV出力 画面初期化\n      export_form_init();\n    }\n\n    if (is_export_reservable_form) {\n      const form = new ReservationForm('reservable_slot');\n      const start_on_el = form.control_el('start_on');\n      const end_on_el = form.control_el('end_on');\n\n      const is_background = function (days) {\n        // nroom: 部屋数(edit_reservable_slot.htmlにて初期設定されているグローバル変数)\n        return ((days * nroom) > reservable_slot_background_threshold);\n      };\n\n      const switch_export_background = function() {\n        const start_on = start_on_el.val();\n        const end_on = end_on_el.val();\n        if ((start_on == '') || (end_on == '')) {\n          return;\n        }\n        start_time = Date.parse(start_on);\n        end_time = Date.parse(end_on);\n        if (start_time > end_time) {\n          return;\n        }\n        const days = ((end_time - start_time) / (24 * 60 * 60 * 1000)) + 1; // start_onとend_onを含む日数\n        if (is_background(days)) {\n          form.disp_block_el('background').show();\n          form.disp_block_el('foreground').hide();\n        } else {\n          form.disp_block_el('background').hide();\n          form.disp_block_el('foreground').show();\n        }\n      };\n\n      // 予約枠情報CSV出力 画面初期化処理\n\n      const export_reservable_form_init = function () {\n        form.submit_el.on('click', function () {\n          const start_on = start_on_el.val();\n          const end_on = end_on_el.val();\n          if (start_on == '') {\n            alert('開始日を入力してください');\n            return false;\n          }\n          if (end_on == '') {\n            alert('終了日を入力してください');\n            return false;\n          }\n          if (start_on > end_on) {\n            alert('開始日<=終了日にしてください');\n            return false;\n          }\n          return true;\n        });\n        form.submit_el.trigger('submit');\n\n        start_on_el.on('change', function() {\n          switch_export_background();\n        });\n\n        end_on_el.on('change', function() {\n          switch_export_background();\n        });\n\n        end_on_el.trigger('change');\n      };\n\n      // CSRF token error occurs when using turbolinks with ruby on rails\n      //   https://stackoverflow.com/questions/55040734/csrf-token-error-occurs-when-using-turbolinks-with-ruby-on-rails\n      $.rails.refreshCSRFTokens();\n\n      // 予約情報CSV出力 画面初期化\n      export_reservable_form_init();\n    }\n  }\n});\n\n$(document).on('turbolinks:before-cache', function() {\n  if (g_reservation_slot.is_search_form) {\n    g_reservation_slot.search_form_fini();\n  }\n});\n","if (!Object.assign) {\n    Object.defineProperty(Object, 'assign', {\n      enumerable: false,\n      configurable: true,\n      writable: true,\n      value: function(target) {\n        'use strict';\n        if (target === undefined || target === null) {\n          throw new TypeError('Cannot convert first argument to object');\n        }\n  \n        var to = Object(target);\n        for (var i = 1; i < arguments.length; i++) {\n          var nextSource = arguments[i];\n          if (nextSource === undefined || nextSource === null) {\n            continue;\n          }\n          nextSource = Object(nextSource);\n  \n          var keysArray = Object.keys(Object(nextSource));\n          for (var nextIndex = 0, len = keysArray.length; nextIndex < len; nextIndex++) {\n            var nextKey = keysArray[nextIndex];\n            var desc = Object.getOwnPropertyDescriptor(nextSource, nextKey);\n            if (desc !== undefined && desc.enumerable) {\n              to[nextKey] = nextSource[nextKey];\n            }\n          }\n        }\n        return to;\n      }\n    });\n  } ","$(document).on('turbolinks:load', function() {\n  const add_all_users = function (reservation_take_method, data) {\n    const all_users = {id: 'all', text: '特定のコマを抽選対象外にする'};\n    let results = data.results;\n    if (reservation_take_method == 'raffle') {\n      results.unshift(all_users);\n    }\n    return {\n      results: results\n    };\n  };\n\n  $(this).find('[data-user-select2]').select2({\n    ajax: {\n      url: '/user_resources/search',\n      dataType: 'json',\n      processResults: (data) => {\n        let reservation_take_method = $('#reservation_take_method').data('reservation-take-method');\n        return add_all_users(reservation_take_method, data);\n      }\n    }\n  });\n\n  $('[data-bookmark-facility-select2]').select2({\n    multiple: true, //複数選択可能\n    placeholder: \"施設を選択してください\", //プレースホルダーを設定\n    //allowClear: true //×を追加\n  });\n\n  $(this).find('[data-raffle-user-select2]').select2({\n    ajax: {\n      url: '/raffle_applications/search',\n      dataType: 'json',\n      data: (params) =>{\n        return {\n          q: params.term,\n          raffle_id: $(\"input[name='raffle_application[id]']\").val()\n        }\n      }\n    }\n  });\n\n  $(this).find('[data-raffle-user-select2]').select2({\n    ajax: {\n      url: '/raffle_applications/search',\n      dataType: 'json',\n      data: (params) =>{\n        return {\n          q: params.term,\n          raffle_id: $(\"input[name='raffle_application[id]']\").val()\n        }\n      }\n    }\n  });\n\n  $('[id^=\"reservation_modal_\"]').on('shown.bs.modal', function (e) {\n    let reservation_take_method = $(this).data('reservation-take-method');\n    $(this).find('[data-modal-user-select2]').select2({\n      ajax: {\n        url: '/user_resources/search',\n        dataType: 'json',\n        processResults: (data) => { return add_all_users(reservation_take_method, data); }\n      },\n      dropdownParent: $(this).find('.modal-body')\n    });\n  })\n\n\n  $('[id^=\"reservation_modal_\"]').on('hidden.bs.modal', function (e) {\n    $(this).find('[data-modal-user-select2]').select2('destroy');\n  });\n\n  $('[data-tag-select2]').select2({\n  });\n  \n  $('[data-facility-select2]').select2({\n  });\n\n  //$(this).find('[data-facility-select2]').select2({\n  //});\n  \n});\n\n$(document).on('turbolinks:before-cache', function() {\n  $(this).find('[data-raffle-user-select2]').select2('destroy');\n  $(this).find('[data-facility-select2]').select2('destroy');\n  $(this).find('[data-tag-select2]').select2('destroy');\n});\n","!function n(t,e,r){function o(u,f){if(!e[u]){if(!t[u]){var c=\"function\"==typeof require&&require;if(!f&&c)return c(u,!0);if(i)return i(u,!0);var s=new Error(\"Cannot find module '\"+u+\"'\");throw s.code=\"MODULE_NOT_FOUND\",s}var l=e[u]={exports:{}};t[u][0].call(l.exports,function(n){var e=t[u][1][n];return o(e?e:n)},l,l.exports,n,t,e,r)}return e[u].exports}for(var i=\"function\"==typeof require&&require,u=0;u<r.length;u++)o(r[u]);return o}({1:[function(n,t,e){\"use strict\";function r(){}function o(n){try{return n.then}catch(t){return d=t,w}}function i(n,t){try{return n(t)}catch(e){return d=e,w}}function u(n,t,e){try{n(t,e)}catch(r){return d=r,w}}function f(n){if(\"object\"!=typeof this)throw new TypeError(\"Promises must be constructed via new\");if(\"function\"!=typeof n)throw new TypeError(\"not a function\");this._37=0,this._12=null,this._59=[],n!==r&&v(n,this)}function c(n,t,e){return new n.constructor(function(o,i){var u=new f(r);u.then(o,i),s(n,new p(t,e,u))})}function s(n,t){for(;3===n._37;)n=n._12;return 0===n._37?void n._59.push(t):void y(function(){var e=1===n._37?t.onFulfilled:t.onRejected;if(null===e)return void(1===n._37?l(t.promise,n._12):a(t.promise,n._12));var r=i(e,n._12);r===w?a(t.promise,d):l(t.promise,r)})}function l(n,t){if(t===n)return a(n,new TypeError(\"A promise cannot be resolved with itself.\"));if(t&&(\"object\"==typeof t||\"function\"==typeof t)){var e=o(t);if(e===w)return a(n,d);if(e===n.then&&t instanceof f)return n._37=3,n._12=t,void h(n);if(\"function\"==typeof e)return void v(e.bind(t),n)}n._37=1,n._12=t,h(n)}function a(n,t){n._37=2,n._12=t,h(n)}function h(n){for(var t=0;t<n._59.length;t++)s(n,n._59[t]);n._59=null}function p(n,t,e){this.onFulfilled=\"function\"==typeof n?n:null,this.onRejected=\"function\"==typeof t?t:null,this.promise=e}function v(n,t){var e=!1,r=u(n,function(n){e||(e=!0,l(t,n))},function(n){e||(e=!0,a(t,n))});e||r!==w||(e=!0,a(t,d))}var y=n(\"asap/raw\"),d=null,w={};t.exports=f,f._99=r,f.prototype.then=function(n,t){if(this.constructor!==f)return c(this,n,t);var e=new f(r);return s(this,new p(n,t,e)),e}},{\"asap/raw\":4}],2:[function(n,t,e){\"use strict\";function r(n){var t=new o(o._99);return t._37=1,t._12=n,t}var o=n(\"./core.js\");t.exports=o;var i=r(!0),u=r(!1),f=r(null),c=r(void 0),s=r(0),l=r(\"\");o.resolve=function(n){if(n instanceof o)return n;if(null===n)return f;if(void 0===n)return c;if(n===!0)return i;if(n===!1)return u;if(0===n)return s;if(\"\"===n)return l;if(\"object\"==typeof n||\"function\"==typeof n)try{var t=n.then;if(\"function\"==typeof t)return new o(t.bind(n))}catch(e){return new o(function(n,t){t(e)})}return r(n)},o.all=function(n){var t=Array.prototype.slice.call(n);return new o(function(n,e){function r(u,f){if(f&&(\"object\"==typeof f||\"function\"==typeof f)){if(f instanceof o&&f.then===o.prototype.then){for(;3===f._37;)f=f._12;return 1===f._37?r(u,f._12):(2===f._37&&e(f._12),void f.then(function(n){r(u,n)},e))}var c=f.then;if(\"function\"==typeof c){var s=new o(c.bind(f));return void s.then(function(n){r(u,n)},e)}}t[u]=f,0===--i&&n(t)}if(0===t.length)return n([]);for(var i=t.length,u=0;u<t.length;u++)r(u,t[u])})},o.reject=function(n){return new o(function(t,e){e(n)})},o.race=function(n){return new o(function(t,e){n.forEach(function(n){o.resolve(n).then(t,e)})})},o.prototype[\"catch\"]=function(n){return this.then(null,n)}},{\"./core.js\":1}],3:[function(n,t,e){\"use strict\";function r(){if(c.length)throw c.shift()}function o(n){var t;t=f.length?f.pop():new i,t.task=n,u(t)}function i(){this.task=null}var u=n(\"./raw\"),f=[],c=[],s=u.makeRequestCallFromTimer(r);t.exports=o,i.prototype.call=function(){try{this.task.call()}catch(n){o.onerror?o.onerror(n):(c.push(n),s())}finally{this.task=null,f[f.length]=this}}},{\"./raw\":4}],4:[function(n,t,e){(function(n){\"use strict\";function e(n){f.length||(u(),c=!0),f[f.length]=n}function r(){for(;s<f.length;){var n=s;if(s+=1,f[n].call(),s>l){for(var t=0,e=f.length-s;e>t;t++)f[t]=f[t+s];f.length-=s,s=0}}f.length=0,s=0,c=!1}function o(n){var t=1,e=new a(n),r=document.createTextNode(\"\");return e.observe(r,{characterData:!0}),function(){t=-t,r.data=t}}function i(n){return function(){function t(){clearTimeout(e),clearInterval(r),n()}var e=setTimeout(t,0),r=setInterval(t,50)}}t.exports=e;var u,f=[],c=!1,s=0,l=1024,a=n.MutationObserver||n.WebKitMutationObserver;u=\"function\"==typeof a?o(r):i(r),e.requestFlush=u,e.makeRequestCallFromTimer=i}).call(this,\"undefined\"!=typeof global?global:\"undefined\"!=typeof self?self:\"undefined\"!=typeof window?window:{})},{}],5:[function(n,t,e){\"function\"!=typeof Promise.prototype.done&&(Promise.prototype.done=function(n,t){var e=arguments.length?this.then.apply(this,arguments):this;e.then(null,function(n){setTimeout(function(){throw n},0)})})},{}],6:[function(n,t,e){n(\"asap\");\"undefined\"==typeof Promise&&(Promise=n(\"./lib/core.js\"),n(\"./lib/es6-extensions.js\")),n(\"./polyfill-done.js\")},{\"./lib/core.js\":1,\"./lib/es6-extensions.js\":2,\"./polyfill-done.js\":5,asap:3}]},{},[6]);\n","$(document).on('ready turbolinks:load', function() {\n  $(\"#room_is_group\").on('change', room_is_group_changed);\n  $(\"#room_is_group\").trigger('change');\n\n  $(\"#add_rooms_into_group\").on('click', function() {\n    $(\"select[name='rooms_in_facility[]'] option:selected\").each(function() {\n      $(\"select[name='room[room_group_members][]']\").append($('<option>').html($(this).text()).val($(this).val()))\n    });\n    var item = $(\"select[name='room[room_group_members][]']\").children().sort(sort_by_text);\n    $(\"select[name='room[room_group_members][]']\").append(item);\n    $(\"select[name='rooms_in_facility[]'] option:selected\").remove();\n  })\n\n  $(\"#remove_rooms_from_group\").on('click', function() {\n    $(\"select[name='room[room_group_members][]'] option:selected\").each(function() {\n      $(\"select[name='rooms_in_facility[]']\").append($('<option>').html($(this).text()).val($(this).val()))\n    });\n    var item = $(\"select[name='rooms_in_facility[]']\").children().sort(sort_by_text);\n    $(\"select[name='rooms_in_facility[]']\").append(item);\n    $(\"select[name='room[room_group_members][]'] option:selected\").remove();\n  })\n\n  $(\"select[name='room[reservation_method]']\").on('change', reservation_method_changed);\n  $(\"select[name='room[reservation_method]']\").trigger('change');\n\n  lock_type_load_setting();\n\n  // モーダルダイアログ内にselect name=\"user_id\"がある時のみ限定で処理する (現在は部屋の情報画面と部屋の一覧画面のみ)\n  //   (issue#467 空室カレンダー画面で動作しないように修正)\n  if ($(\".modal-body select[name='user_id']\").length > 0) {\n    $(\"select[name='user_id']\").change(function() {\n      // 部屋の数だけダイアログが出来てしまうため、すべてのダイアログの選択を見るように\n      $(\"select[name='user_id']\").each(function() {\n        // 同一modal(ダイアログ)上のfooterを変更対象とする\n        var footer = $(this).parents('.modal-content').find(\".modal-footer-button\");\n        if (footer != null){\n          var val = $(this).val();\n          if (val == ''){\n            footer.hide();\n          } else {\n            footer.show();\n          }\n        }\n      });\n    })\n    $(\"select[name='user_id']\").trigger('change');\n  }\n\n  $(\".edit-room-form input[type='submit'].activate-room-group-members\").on('click', function() {\n    pre_edit_room_submit();\n    return true\n  });\n\n  var use_report_form_sel = '.edit-room-form';\n  var use_report_model = 'room';\n  var use_report_el = $(`${use_report_form_sel} select[name='${use_report_model}[use_report]']`);\n  var use_report_template_id_el = $(`${use_report_form_sel} select[name='${use_report_model}[use_report_template_id]']`);\n\n  // 「利用報告機能」選択に応じ「利用報告書」表示切替\n  use_report_el.on('change', function() {\n    if ($(this).val() == 'enabled') {\n      // 表示\n      $(`${use_report_form_sel} .use-report-template`).slideDown();\n    } else {\n      // 非表示\n      $(`${use_report_form_sel} .use-report-template`).slideUp();\n    }\n  });\n  use_report_el.trigger('change');\n\n  $('#room_save').on('click', function() {\n    var val_group = $(\"select[name='room[room_group_members][]']\").text();\n    var val_method = $(\"select[name='room[reservation_take_method]']\").val();\n\n    let msgFlg = false;\n\n    if ($(\"input[name='room[is_group]']:checkbox\").prop('checked')) {\n      // 親部屋\n      // 子部屋に異なる予約部屋がいればダイアログを出す。\n      if (val_method == \"first\") {\n        if (val_group.indexOf(\"[抽]\") != -1) {\n          msgFlg = true;\n        }\n      } else {\n        if (val_group.indexOf(\"[先]\") != -1) {\n          msgFlg = true;\n        }\n      }\n    } else {\n      // 子部屋でreservation_take_methodが変更されたならばダイアログを出す。\n      if (g_belongs_to_group && (val_method != g_previous_reservation_take_method)) {\n        msgFlg = true;\n      }\n    }\n\n    let checkMoveFlg = true;\n    if (msgFlg == true) {\n      checkMoveFlg = window.confirm('属する部屋グループ・その部屋グループに属する部屋など、\\n関連する部屋について同様の予約の受付方法で更新されます。\\n\\nよろしいですか?');\n    }\n    if(checkMoveFlg == false) {\n      return false\n    }\n\n    // 「利用報告書機能」が「利用する」なのに「利用報告書」が未選択\n    //   (施設/所管(common.js)と異なり「未選択」選択肢がないのでnullと比較)\n    if (use_report_el.val() == 'enabled' && use_report_template_id_el.val() == null) {\n      alert('利用報告書を選択してください');\n      return false;\n    }\n\n    pre_edit_room_submit();\n    return true\n  });\n\n  //「申請内容を選択してください」が表示されている時、ボタンを無効化\n  var requested_setting_toggleButton = function(modal) {\n    const buttonElement = modal.querySelector('.modal-footer-button #requested-setting-submit-btn');\n    const selectElement = modal.querySelector('#requested-setting-select');\n    if (!selectElement) return;\n    const promptMessage = selectElement.options[selectElement.selectedIndex].text;\n\n    if (promptMessage === '申請内容を選択してください') {\n      buttonElement.disabled = true;\n      $(buttonElement).addClass(\"btn-nonactive\");\n    } else {\n      buttonElement.disabled = false;\n      $(buttonElement).removeClass(\"btn-nonactive\");\n    }\n  };\n  //部屋の一覧ページにおいて、空室カレンダーボタンを開くたびにボタンの状態を設定\n  $('[id^=reservation_modal_]').on('show.bs.modal', function() {\n    const modal = $(this)[0];  // jQuery から DOM 要素に変換\n    requested_setting_toggleButton(modal);  \n    $(modal).find(\"#requested-setting-select\").change(function() {\n      requested_setting_toggleButton(modal);  // セレクトボックスの変更に応じて制御\n    });\n  });\n});\n\n$(window).on('pageshow', function() {\n  $(\"#room_is_group\").trigger('change');\n  $(\"select[name='room[reservation_method]']\").trigger('change');\n  // モーダルダイアログ内にselect name=\"user_id\"がある時のみ限定で処理する (現在は部屋の情報画面と部屋の一覧画面のみ)\n  //   (issue#467 空室カレンダー画面で動作しないように修正)\n  if ($(\".modal-body select[name='user_id']\").length > 0) {\n    $(\"select[name='user_id']\").trigger('change');\n  }\n  lock_type_load_setting();\n});\n\nfunction room_is_group_changed() {\n  if ($(\"#room_is_group\").prop('checked')) {\n    $(\".room_group\").slideDown();\n    /*$(\".display_raffle\").slideUp();\n    $(\".display_first\").slideDown();\n    document.getElementById(\"room_reservation_take_method\").querySelector(\"option[value='first']\").selected = true;*/\n  } else {\n    $(\".room_group\").slideUp();\n    /*$(\".display_raffle\").slideDown();\n    $(\".display_first\").slideUp();*/\n  }\n}\n\nfunction reservation_method_changed() {\n  var val = $(\"select[name='room[reservation_method]']\").val();\n  if (val == \"optional\") {\n    $(\".room_select_unit\").slideDown()\n  } else {\n    $(\".room_select_unit\").slideUp()\n  }\n}\n\nfunction lock_type_load_setting() {\n  var val = $(\"select[name='room[lock_type]']\").val();\n  if (val == \"none\") {\n    $(\".room_lock_serial\").slideUp()\n    $(\".room_lock_master_pin\").slideUp();\n    $(\".room_validity_period_margin_before\").slideUp()\n    $(\".room_validity_period_margin_after\").slideUp()\n  } else {\n    $(\".room_lock_serial\").slideDown()\n    $(\".room_validity_period_margin_before\").slideDown();\n    $(\".room_validity_period_margin_after\").slideDown();\n\n    if (val == \"remotelock\" || val == \"remotelock_mynumber\") {\n      $(\".room_lock_master_pin\").slideDown();\n      $(\".room_lock_serial_igloo\").slideUp();\n      $(\".room_lock_serial_remotelock\").slideUp();\n      $(\"#validity_period_margin_before_hour\").slideUp();\n      $(\"#validity_period_margin_after_hour\").slideUp();\n      $(\"#validity_period_margin_before_min\").slideDown();\n      $(\"#validity_period_margin_after_min\").slideDown();\n    } else if (val == \"igloo\") {\n      $(\".room_lock_master_pin\").slideUp();\n      $(\".room_lock_serial_igloo\").slideDown();\n      $(\".room_lock_serial_remotelock\").slideUp();\n      $(\"#validity_period_margin_before_min\").slideUp();\n      $(\"#validity_period_margin_after_min\").slideUp();\n      $(\"#validity_period_margin_before_hour\").slideDown();\n      $(\"#validity_period_margin_after_hour\").slideDown();\n    }\n  }\n}\n\nfunction pre_edit_room_submit() {\n  $('#room_room_group_members option').prop(\"selected\", true);\n}\n\nfunction sort_by_text(a, b) {\n  var val_a1 = a.text.substr(0, 3);\n  var val_a2 = a.text.slice(3).trim();\n  var val_b1 = b.text.substr(0, 3);\n  var val_b2 = b.text.slice(3).trim();\n\n  var val = $(\"select[name='room[reservation_take_method]']\").val();\n  if (val == \"first\") {\n    if (val_a1 <= val_b1 && val_a2 > val_b2) {\n      if (val_a1 != val_b1) {\n        return -1;\n      } else {\n        return 1;\n      }\n    } else if (val_a1 <= val_b1 && val_a2 < val_b2) {\n      return -1;\n    } else {\n      return 0;\n    }\n  } else {\n    if (val_a1 >= val_b1 && val_a2 > val_b2) {\n      if (val_a1 != val_b1) {\n        return -1;\n      } else {\n        return 1;\n      }\n    } else if (val_a1 >= val_b1 && val_a2 < val_b2) {\n      return -1;\n    } else {\n      return 0;\n    }\n  }\n}","$(document).on('ready turbolinks:load', function() {\n    $(\"select[name='fixture[room_id]']\").change(function() {\n        var val = $(\"select[name='fixture[room_id]']\").val();\n        if (val == \"\") {\n            $(\"select[name='fixture[fixture_type]'] option[value='item']\").prop('selected',true);\n            $(\".stock_limit\").slideDown();\n            $(\"select[name='fixture[unit]'] option[value='event']\").prop('selected',true);\n            $(\"select[name='fixture[unit]']\").prop('disabled', true);\n        } else{\n            $(\"select[name='fixture[fixture_type]'] option[value='incidental']\").prop('selected',true);\n            $(\".stock_limit\").slideUp();\n            $(\"input[name='fixture[stock_quantity]']\").val(1);\n            $(\"input[name='fixture[limit]']\").val(1);\n            $(\"select[name='fixture[unit]']\").prop('disabled', false);\n        }\n        var fixture_type = $(\"select[name='fixture[fixture_type]']\").val();\n        $(\"#fixture_type_hidden\").val(fixture_type);\n        $(\"#fixture_type_label\").text($(\"select[name='fixture[fixture_type]'] option:selected\").text());\n        var unit = $(\"select[name='fixture[unit]']\").val();\n        $(\"#unit_hidden\").val(unit);\n        $(\"select[name='fixture[unit]']\").trigger('change');\n    })\n    $(\"select[name='fixture[room_id]']\").trigger('change');\n\n    $(\"select[name='fixture[unit]']\").change(function() {\n        var unit = $(\"select[name='fixture[unit]']\").val();\n        $(\"#unit_hidden\").val(unit);\n        if (unit == \"event\") {\n            $(\".use_seconds\").slideUp();\n        } else{\n            $(\".use_seconds\").slideDown();\n        }\n    })\n    $(\"select[name='fixture[unit]']\").trigger('change');\n});\n  \n$(window).on('pageshow', function() {\n    $(\"select[name='fixture[room_id]']\").trigger('change');\n    $(\"select[name='fixture[unit]']\").trigger('change');\n});\n  ","$(document).on('turbolinks:load', function() {\n  var events_url = location.pathname.replace(/calendar$/, 'events.json')\n\n  var query = location.search\n  if (query.includes('summarize')) {\n    let p = new URLSearchParams(query);\n    let v = p.get('summarize');\n    events_url += '?summarize=' + v;\n  }\n\n  $('#raffle_calendar').empty()\n\n  const params = calendar_base_params()\n\n  params.header.right = 'month'\n  var add_date = $('#raffle_add_date').val();\n  if (add_date) {\n    params.defaultDate = add_date;\n  }\n\n  const raffle_calendar_el = $('#raffle_calendar');\n  Object.assign(params, {\n    // The initial view when the calendar loads.\n    defaultView: 'month',\n    //events (as a function)\n    events: function (start, end, timezone, callback) {\n      // 窓口対応者/運用者では $('#facility_id') と $('#room_id') が存在\n      g_calendar_events.fullcalendar_events_handler(raffle_calendar_el, events_url, start, end, timezone, callback);\n    },\n    //===== Date Clicking & Selecting =====\n    // Detect when the user clicks on dates or times. Give the user the ability to select multiple dates or time slots with their mouse or touch device.\n\n    // Allows a user to highlight multiple days or timeslots by clicking and dragging.\n    selectable: true,\n\n    // Whether to draw a “placeholder” event while the user is dragging.\n    //selectMirror:\n\n    // Whether clicking elsewhere on the page will cause the current selection to be cleared.\n    unselectAuto: true,\n\n    // A way to specify elements that will ignore the unselectAuto option.\n    unselectCancel: '',\n\n    //----- CALLBACKS -----\n    // Triggered when the user clicks on a date or a time.\n    //dateClick:\n\n    // Triggered when a date/time selection is made.\n    //select: function(start, end, allDay) {\n    //  console.log('select called: start=', start, ', end=', end, ', allDay=', allDay)\n    //},\n\n    // Triggered when the current selection is cleared.\n    //unselect:\n\n    //===== Event Sources =====\n\n    // An array of Event Objects that will be displayed on the calendar.\n    //events (as an array)\n\n    // A custom function for programmatically generating Events.\n    //events (as a function)\n\n    //===== Event Clicking & Hovering =====\n    // Handers to know when an event has been clicked or hovered over.\n\n    // Triggered when the user clicks an event.\n    eventClick: function(calEvent, jsEvent, view) {\n      // console.log('eventClick called: calEvent=', calEvent, ', jsEvent=', jsEvent)\n      // console.log(calEvent)\n      // console.log(jsEvent)\n      // console.log(view)\n    },\n\n    //===== International =====\n    eventColor: 'rgba(150,150,150,0.2)',\n    disableDragging: true\n  })\n\n  raffle_calendar = $('#raffle_calendar').fullCalendar(params)\n  $('[data-raffle-refetch-trigger]').on('change' , function(){\n    raffle_calendar.fullCalendar('refetchEvents');\n  });\n\n})\n","$(document).on('turbolinks:load', function() {\n  // プレビューボタンの data-disabled が独立して外せないので力技\n  $('.card-footer .btn.preview').click(function () {\n    setTimeout(function () {\n      $('.card-footer .btn').prop('disabled', false);\n    }, 1000);\n  });\n\n  $(\".accordion-switch\").each(function( index ) {\n    var self = $( this );\n    if (self.parent().find(\".triangle-container\").length === 0) {\n      $( \"<div class='triangle-container'><div class='rouned-triangle'/></div>\" ).insertBefore(self);\n    }\n    \n  });\n  $(\"nav.pagination\").each(function( index ) {\n    var self = $( this );\n    if (!self.parent().hasClass(\"pagy-nav-container\")) {\n      self.wrap($( \"<div class='pagy-nav-container'/>\" ));\n    }\n  });\n  $('.accordion-switch').on('change', function(evt) {\n    var self = $(this);\n    var arrow = self.parent();\n    arrow.toggleClass(\"opened\", 1000);\n    var roomInfo = self.closest(\".row-table\").find(\".row-information\");\n    roomInfo.toggleClass(\"hidden\", 1000);\n    var media = roomInfo.find(\".media-photo\");\n    var img = roomInfo.find(\".slick-current\").find(\"img\");\n    media.height(img.height());\n  });\n\n  if ($('.card-footer .btn-left').children().length <= 0) {\n    $('.card-footer .btn-left').remove();\n  } \n\n  if ($('.card-footer .btn-right').children().length <= 0) {\n    $('.card-footer .btn-right').remove();\n  } \n\n  var sidenav_change = function () {\n    var sidenav_container_width = $(\".navigate_menu_with_accordion\").width();\n    var sidenav = $(\".navigate_menu_with_accordion .accordion_content .sidenav-list>li\");\n    sidenav.removeClass(\"last-row\").removeClass(\"only-cell\");\n    if (sidenav_container_width <= 670) {\n      if (sidenav.length % 2 === 1 ) {\n        $(sidenav[sidenav.length - 1]).addClass(\"last-row only-cell\");\n      }\n    } else if (sidenav_container_width <= 1099){\n      if (sidenav.length % 3 === 2 ) {\n        $(sidenav[sidenav.length - 1]).addClass(\"last-row\");\n        $(sidenav[sidenav.length - 2]).addClass(\"last-row\");\n      } else if (sidenav.length % 3 === 1) {\n        $(sidenav[sidenav.length - 1]).addClass(\"last-row only-cell\");\n      }\n    }\n  }\n  sidenav_change();\n  $(window).on('resize', function(evt) {\n    sidenav_change();\n  });\n\n  // 施設の追加/編集(facilities/_form.html.slim)画面または\n  // 所管の追加/編集(groups/_form.html.slim)画面から呼び出される。\n  var use_report_model = null;    // 処理するRailsモデル: 施設'facility'か所管('group')か\n  var use_report_form_sel = null; // form要素のcssクラス\n\n    // 施設(facilities/_form.html.slim)または所管(groups/_form.slim.html)で定義\n    //   [JavaScriptグローバル変数]\n    //   - g_rooms_use_report_templates: 自身に所属する部屋(/施設)のuse_template_id配列\n    //     (facilities/_form.html.slimまたはにて設定)\n    //   [html form]\n    //   - cssクラスedit-facility-form / edit-group-formのform: form要素\n    //   - cssクラスuse-report-templateのdiv: 利用報告書テンプレート 表示/非表示切替範囲\n    //   - cssクラスfacility-save / group-saveのボタン: 「保存する」ボタン\n    //   - select要素 facility[use_report] / group[use_report]: 利用報告機能 無効(disabled)/有効(enabled)\n    //   - select要素 facility[use_report_template_id] / group[use_report_template_id]: 利用報告書テンプレート選択肢\n    //     整数のテンプレートID値または未選択('select')\n    //   - ダイアログ dialog.update-room-use-report: 所属する部屋(/施設)設定を上書き選択ダイアログ\n    //   - input要素 room_use_report: 所属する部屋(/施設)設定を上書きを表すtrue / falseパラメタ\n    if ($('.edit-facility-form').length > 0) {\n    use_report_model = 'facility';\n    use_report_form_sel = '.edit-facility-form';\n  } else if ($('.edit-group-form').length > 0) {\n    use_report_model = 'group';\n    use_report_form_sel = '.edit-group-form';\n  }\n\n  if (use_report_form_sel != null) {\n    var use_report_form_el = $(use_report_form_sel);\n    var use_report_el = $(`${use_report_form_sel} select[name='${use_report_model}[use_report]']`);\n    var use_report_template_id_el = $(`${use_report_form_sel} select[name='${use_report_model}[use_report_template_id]']`);\n\n    // 自身に所属する部屋(/施設)に利用報告設定がある時は、利用報告機能 有効 で初期化する。\n    if (use_report_el.val() == 'disabled' && g_rooms_use_report_templates.length > 0) {\n      use_report_el.val('enabled');\n      use_report_template_id_el.val('select');\n    }\n\n    // 「利用報告機能」選択に応じ「利用報告書」表示切替\n    use_report_el.on('change', function() {\n      if ($(this).val() == 'enabled') {\n        // 表示\n        $(`${use_report_form_sel} .use-report-template`).slideDown();\n      } else {\n        // 非表示\n        $(`${use_report_form_sel} .use-report-template`).slideUp();\n      }\n    });\n    use_report_el.trigger('change');\n\n    var do_submit = function() {\n      if (use_report_model == 'facility') {\n        var map_el = $(`${use_report_form_sel} input[name='facility[map]']`);\n        var m = map_el.val();\n        map_el.val(btoa(unescape(encodeURIComponent(m))));\n        use_report_form_el.trigger('submit');\n        map_el.val(m);\n      } else {\n        use_report_form_el.trigger('submit');\n      }\n    };\n\n    // 「保存する」クリック時に開くダイアログ (views/shared/_update_room_use_report_dialog.html.slim)\n    //   (views/facilities/_form.html.slimまたはviews/facilities/_form.html.slimでrenderされる)\n    //   配下の部屋(/施設)に利用報告書設定がある時に上書するかの制御\n    var room_use_report_dialog = function() {\n      var dialog_sel = `${use_report_form_sel} dialog.update-room-use-report`;\n\n      // 上書を示すパラメタ(Railsコントローラupdateアクションに渡す)\n      var update_room_use_report = function(value) {\n        $(`${use_report_form_sel} input[name=\"room_use_report\"]`).val(value);\n      };\n\n      var button_yes = $(`${dialog_sel} button[name=\"yes\"]`);\n      var button_no = $(`${dialog_sel} button[name=\"no\"]`);\n      button_yes.on('click', function() {\n        update_room_use_report(true);\n        do_submit();\n      });\n\n      button_no.on('click', function() {\n        do_submit();\n      });\n\n      $(dialog_sel).on('keydown', function(events) {\n        switch (events.key) {\n          case 'Tab':\n            // タブ キーによるボタン間フォーカス移動\n            if (button_yes.is(':focus')) {\n              button_no.trigger('focus');\n            } else {\n              button_yes.trigger('focus');\n            }\n            return false;\n            break;\n          case 'Enter':\n            // ENTERキーでsbumit\n            if (button_yes.is(':focus')) {\n              update_room_use_report(true);\n            }\n            do_submit();\n        }\n      });\n\n      // $('dialog.use-report-confirm button[name=\"yes\"]').trigger('focus');\n      $(dialog_sel)[0].showModal();\n    };\n\n    // 「所管の編集」画面の「保存する」(.group-save)、「施設の編集」画面の「保存する」(.facility-save)クリック時処理\n    $(`${use_report_form_sel} .${use_report_model}-save`).on('click', function() {\n      // 「利用報告書機能」が「利用する」なのに「利用報告書」が未選択\n      if (use_report_el.val() == 'enabled' && use_report_template_id_el.val() == 'select') {\n        alert('利用報告書を選択してください');\n        return false;\n      }\n\n      // before_facility_use_report, before_facility_use_report_template_id\n      if (g_rooms_use_report_templates.length > 0) {\n        room_use_report_dialog();\n        return false;\n      }\n\n      do_submit();\n    });\n  }\n});\n","function adjust_room_list($rooms, original) {\n  var facility_id = $('select#facility_id').val()\n  $rooms.html(original).find('option').each(function() {\n    if (facility_id != $(this).data('facility-id')) {\n      $(this).not(':first-child').remove()\n    }\n  })\n}\n\nfunction delete_facility_room() {\n  var url = new URL(window.location.href)\n  url.searchParams.delete('facility_id')\n  url.searchParams.delete('room_id')\n  history.replaceState('', '', url.href)\n}\n\n$(document).on('turbolinks:load', function() {\n  var $rooms = $(\"select#room_id\")\n  var original = $rooms.html()\n  adjust_room_list($rooms, original)\n  $('select#facility_id').change(function() {\n    adjust_room_list($rooms, original)\n    if ($(this).val() == \"\") {\n      $rooms.attr('disabled', 'disabled')\n    } else {\n      $rooms.removeAttr('disabled')\n    }\n    $('select#room_id').val('')\n    $('#reservation_calendar').fullCalendar('refetchEvents')\n    $('#raffle_calendar').fullCalendar('refetchEvents')\n    delete_facility_room()\n  })\n  $('select#room_id').change(function() {\n    delete_facility_room()\n  })\n})\n","$(document).on('ready turbolinks:load', function() {\n  $(\"select[name='facility[reservation_start_type]']\").on('change', function() {\n    var val = $(\"select[name='facility[reservation_start_type]']\").val();\n    if (val == \"month_days\") {\n      $(\".facility_reservation_start_X_value\").slideDown();\n    } else {\n      $(\".facility_reservation_start_X_value\").slideUp();\n    }\n  });\n  $(\"select[name='facility[reservation_start_type]']\").trigger('change');\n\n  $(\"input[id='facility_cancel_enabled']\").change(function() {\n    if ($(\"input[id='facility_cancel_enabled']\").prop(\"checked\")) {\n      $(\".facility_cancel_list\").slideDown();\n    } else {\n      $(\".facility_cancel_list\").slideUp();\n    }\n  })\n  $(\"input[id='facility_cancel_enabled']\").trigger('change');\n\n  $(\"select[id='facility_cancel_period_type']\").change(function() {\n    var val = $(\"select[id='facility_cancel_period_type']\").val();\n    if (val == \"before_days_hours\") {\n      $(\".facility_cancel_X\").slideDown();\n    } else {\n      $(\".facility_cancel_X\").slideUp();\n    }\n  })\n  $(\"select[id='facility_cancel_period_type'\").trigger('change');\n\n  $(\"select[name='facility[multiple_reservation_limit_type]']\").on('change', function() {\n    var val = $(\"select[name='facility[multiple_reservation_limit_type]']\").val();\n    if (val == \"none\") {\n      $(\".facility_multiple_reservation_limit_number\").slideUp()\n    } else {\n      $(\".facility_multiple_reservation_limit_number\").slideDown()\n    }\n  })\n  $(\"select[name='facility[multiple_reservation_limit_type]']\").trigger('change');\n\n  $(\"select[id='facility_reservation_reception_end_type']\").change(function() {\n    var val = $(\"select[id='facility_reservation_reception_end_type']\").val();\n    if (val != \"none\") {\n      $(\".facility_reservation_reception_end_N\").slideDown();\n    } else {\n      $(\".facility_reservation_reception_end_N\").slideUp();\n    }\n  })\n  $(\"select[id='facility_reservation_reception_end_type'\").trigger('change');\n\n  $(\"select[name='facility[raffle_application_start_type]']\").on('change', raffle_application_start_type_changed);\n  $(\"select[name='facility[raffle_application_start_type]']\").trigger('change');\n\n  $(\"select[name='facility[raffle_date_type]']\").on('change', raffle_date_type_changed);\n  $(\"select[name='facility[raffle_date_type]']\").trigger('change');\n\n  $(\"select[name='facility[pay_limit_date_type]']\").on('change', function() {\n    var val = $(\"select[name='facility[pay_limit_date_type]']\").val();\n    if (val == \"use_day\") {\n      $(\".facility_pay_limit_date_X\").slideUp();\n    } else {\n      $(\".facility_pay_limit_date_X\").slideDown();\n    }\n  })\n  $(\"select[name='facility[pay_limit_date_type]']\").trigger('change');\n\n  $('.tooltip-container').hover(\n    function() {\n      $(this).find('.tooltip-content').show();\n    },\n    function() {\n      $(this).find('.tooltip-content').hide();\n    }\n  );\n\n  $('#toggle-raffle-settings').on('click', function() {\n    $('.hidden-raffle-settings').slideToggle();\n    var icon = document.getElementById('toggle-icon');\n    if (icon.classList.contains('fa-chevron-down')) {\n      icon.classList.remove('fa-chevron-down');\n      icon.classList.add('fa-chevron-up');\n    } else {\n      icon.classList.remove('fa-chevron-up');\n      icon.classList.add('fa-chevron-down');\n    }\n  });\n\n  // 初期状態でスライドが表示されている場合の設定\n  if ($('#toggle-icon').hasClass('fa-chevron-up')) {\n    $('.hidden-raffle-settings').show();\n  }\n\n  document.body.addEventListener(\n    \"error\",\n    (event) => {\n      if (!event.target) return;\n      if (event.target.tagName === \"IMG\") {\n        $(event.target).closest(\".media-fit-container\").toggleClass(\"no-img\");\n      }\n    },\n    true,\n  );\n});\n$(document).on('turbolinks:before-cache', function() {\n  $(\".media-fit-container\").removeClass(\"no-img\");\n});\n\n$(window).on('pageshow', function() {\n  $(\"input[id='facility_cancel_enabled']\").trigger('change');\n  $(\"select[id='facility_cancel_period_type']\").trigger('change');\n  $(\"select[name='facility[multiple_reservation_limit_type]']\").trigger('change');\n\n  $(\"select[name='facility[raffle_application_start_type]']\").trigger('change');\n  $(\"select[name='facility[raffle_date_type]']\").trigger('change');\n});\n\nfunction raffle_application_start_type_changed() {\n  var val = $(\"select[name='facility[raffle_application_start_type]']\").val();\n  if (val == \"month_days\") {\n    $(\".facility_raffle_application_start_X_value\").slideDown()\n  } else {\n    $(\".facility_raffle_application_start_X_value\").slideUp()\n  }\n}\n\nfunction raffle_date_type_changed() {\n  var val = $(\"select[name='facility[raffle_date_type]']\").val();\n  if (val == \"month_days\") {\n    $(\".facility_raffle_date_Y_value\").slideDown();\n    $(\".facility_raffle_publication_date_Z_value\").slideDown();\n  } else {\n    $(\".facility_raffle_date_Y_value\").slideUp();\n    $(\".facility_raffle_publication_date_Z_value\").slideUp();\n  }\n\n  // 2024/04/11時点ではraffle_publication_date_typeはraffle_date_typeと同じvalue値となるようにしている\n  $(\"input[name='facility[raffle_publication_date_type]']\").val(val);\n  $(\"input[id='facility_raffle_publication_date_type_i18n']\").val(facility_raffle_publication_date_types[val]);\n}\n","$(document).on('turbolinks:load', function() {\n  $(\"select[name='group[payment_method]']\").on('change', function (event) {\n    let payment_method = $(\"select[name='group[payment_method]']\").val();\n    if (payment_method == 'notice') {\n      $(\".paysys-api-settings\").slideUp();\n    } else {\n      $(\".paysys-api-settings\").slideDown();\n    }\n  });\n  $(\"select[name='group[payment_method]']\").trigger('change');\n\n  $(\"input[name='group[consent_confirmation]']\").on('change', function () {\n    if ($(this).prop('checked')) {\n      $(\".consent-confirmation-settings\").slideDown();\n    } else {\n      $(\".consent-confirmation-settings\").slideUp();\n    }\n  });\n\n  // 初回チェック\n  $(\"input[name='group[consent_confirmation]']\").trigger('change');\n\n  const Encoding = require('encoding-japanese');\n  const Papa = require('papaparse');\n\n  $(\"input:file[name='group[paysys_api_settings]']\").on('change', function (event) {\n    if (event.target.files.length >= 1) {\n      var file = event.target.files[0];\n\n      const reader = new FileReader;\n      reader.onload = function (e) {\n        var array = new Uint8Array(e.target.result);\n        var encode = Encoding.detect(array);\n        Papa.parse(file, {\n          header: true,\n          encoding: encode,\n          skipEmptyLines: true,\n          complete: function (results) {\n            $(\"input[name='group[paysys_channel_id]']\").val(results.data[0]['チャンネルID']);\n            $(\"input[name='group[paysys_channel_secret_key]']\").val(results.data[0]['チャンネル秘密鍵']);\n            console.log(\"updated.\");\n          }\n        })\n      }\n      reader.readAsArrayBuffer(file);\n    }\n  });\n});\n","$(document).on('ready turbolinks:load', function() {\n  $(\"select[name='requested_setting[reservation_start_type]']\").on('change', function() {\n    var val = $(\"select[name='requested_setting[reservation_start_type]']\").val();\n    if (val == \"month_days\") {\n      $(\".requested_setting_reservation_start_X_value\").slideDown();\n    } else {\n      $(\".requested_setting_reservation_start_X_value\").slideUp();\n    }\n  });\n  $(\"select[name='requested_setting[reservation_start_type]']\").trigger('change');\n});\n","$(document).on('ready turbolinks:load', function() {\n  $(\"select[name='user_type_setting[reservation_start_type]']\").on('change', function() {\n    var val = $(\"select[name='user_type_setting[reservation_start_type]']\").val();\n    if (val == \"month_days\") {\n      $(\".user_type_setting_reservation_start_X_value\").slideDown();\n    } else {\n      $(\".user_type_setting_reservation_start_X_value\").slideUp();\n    }\n  });\n  $(\"select[name='user_type_setting[reservation_start_type]']\").trigger('change');\n});\n","$(document).on('ready turbolinks:load', function() {\n  var use_report_template_form_sel = '#use-report-template-form';\n  if ($(use_report_template_form_sel).length == 0) {\n    return;\n  }\n\n  // use-report-template-option: ルートブロック\n  //   子ブロックが「追加報告」項目ブロック\n  var use_report_template_options_el = $(`${use_report_template_form_sel} #use-report-template-options`);\n\n  var set_use_report_template_options_order_id = () => {\n    const use_report_template_option_title = (order_id) => `追加項目${String.fromCharCode(\"①\".charCodeAt(0) + order_id)}の項目名`;\n\n    use_report_template_options_el.find('.use-report-template-option').each(function(order_id) {\n      $(this).find('.order-id').text(use_report_template_option_title(order_id));\n      $(this).find('input[name=\"use_report_template_option[][order_id]\"]').val(order_id);\n    });\n  };\n\n  var set_remove_use_report_template_option_hander = function() {\n    $(`${use_report_template_form_sel} label.remove-use-report-template-option`).on('click', function() {\n      // 利用報告書の追加項目ブロック削除\n      $(this).parents('.use-report-template-option').remove();\n      // ordr_idを付けなおす。\n      set_use_report_template_options_order_id();\n    });\n  };\n\n  // 利用報告作成/編集画面に 追加報告項目行 を追加\n  //   (html要素id: use_report_template_optionsの子供の後ろに行追加)\n  var add_use_report_template_option = (use_report_template_id, id = null, confirmation_text = null) => {\n    // use-report-template-optionの元ブロック\n    const option_template_el = $(`${use_report_template_form_sel} #use-report-template-option-template .use-report-template-option`);\n    // コピーしたブロックを使用。\n    const option_el = option_template_el.clone();\n\n    option_el.find('input[name=\"use_report_template_option[][id]\"]').val(id);\n    option_el.find('input[name=\"use_report_template_option[][use_report_template_id]\"]').val(use_report_template_id);\n    option_el.find('input[name=\"use_report_template_option[][confirmation_text]\"]').val(confirmation_text);\n\n    use_report_template_options_el.append(option_el[0]); // TODO :[0]以外にいい表現がないか調べる\n  };\n\n  // 利用報告書の追加項目ブロック作成\n  for (let i = 0; i < g_use_report_template_options.length; i++) {\n    const option = g_use_report_template_options[i];\n\n    add_use_report_template_option(option.use_report_template_id, option.id, option.confirmation_text);\n  }\n  set_use_report_template_options_order_id();\n  set_remove_use_report_template_option_hander();\n\n  // 「項目の追加」クリック時処理\n  $(`${use_report_template_form_sel} label.add-use-report-template-option`).on('click', function() {\n    if ($(`${use_report_template_form_sel} #use-report-template-options .use-report-template-option`).length >= g_max_confirmations) {\n      alert(`報告項目は${g_max_confirmations}項目より多くできません。`);\n      return false;\n    }\n\n    add_use_report_template_option(g_use_report_template_id);\n    set_use_report_template_options_order_id();\n    set_remove_use_report_template_option_hander();\n  });\n\n  // 「保存する」クリック時処理\n  $(`${use_report_template_form_sel}`).on('submit', function() {\n    // use_report_template_optionのコピー元ブロックフォームコントロールをformパラメタとしないようdisabled\n    $(`${use_report_template_form_sel} #use-report-template-option-template`).find('input').prop('disabled', true);\n  });\n});\n","function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n(function (global, factory) {\n  (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) === \"object\" && typeof module !== \"undefined\" ? factory(exports) : typeof define === \"function\" && define.amd ? define([\"exports\"], factory) : factory(global.ActiveStorage = {});\n})(this, function (exports) {\n  \"use strict\";\n\n  function createCommonjsModule(fn, module) {\n    return module = {\n      exports: {}\n    }, fn(module, module.exports), module.exports;\n  }\n\n  var sparkMd5 = createCommonjsModule(function (module, exports) {\n    (function (factory) {\n      {\n        module.exports = factory();\n      }\n    })(function (undefined) {\n      var hex_chr = [\"0\", \"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \"a\", \"b\", \"c\", \"d\", \"e\", \"f\"];\n\n      function md5cycle(x, k) {\n        var a = x[0],\n            b = x[1],\n            c = x[2],\n            d = x[3];\n        a += (b & c | ~b & d) + k[0] - 680876936 | 0;\n        a = (a << 7 | a >>> 25) + b | 0;\n        d += (a & b | ~a & c) + k[1] - 389564586 | 0;\n        d = (d << 12 | d >>> 20) + a | 0;\n        c += (d & a | ~d & b) + k[2] + 606105819 | 0;\n        c = (c << 17 | c >>> 15) + d | 0;\n        b += (c & d | ~c & a) + k[3] - 1044525330 | 0;\n        b = (b << 22 | b >>> 10) + c | 0;\n        a += (b & c | ~b & d) + k[4] - 176418897 | 0;\n        a = (a << 7 | a >>> 25) + b | 0;\n        d += (a & b | ~a & c) + k[5] + 1200080426 | 0;\n        d = (d << 12 | d >>> 20) + a | 0;\n        c += (d & a | ~d & b) + k[6] - 1473231341 | 0;\n        c = (c << 17 | c >>> 15) + d | 0;\n        b += (c & d | ~c & a) + k[7] - 45705983 | 0;\n        b = (b << 22 | b >>> 10) + c | 0;\n        a += (b & c | ~b & d) + k[8] + 1770035416 | 0;\n        a = (a << 7 | a >>> 25) + b | 0;\n        d += (a & b | ~a & c) + k[9] - 1958414417 | 0;\n        d = (d << 12 | d >>> 20) + a | 0;\n        c += (d & a | ~d & b) + k[10] - 42063 | 0;\n        c = (c << 17 | c >>> 15) + d | 0;\n        b += (c & d | ~c & a) + k[11] - 1990404162 | 0;\n        b = (b << 22 | b >>> 10) + c | 0;\n        a += (b & c | ~b & d) + k[12] + 1804603682 | 0;\n        a = (a << 7 | a >>> 25) + b | 0;\n        d += (a & b | ~a & c) + k[13] - 40341101 | 0;\n        d = (d << 12 | d >>> 20) + a | 0;\n        c += (d & a | ~d & b) + k[14] - 1502002290 | 0;\n        c = (c << 17 | c >>> 15) + d | 0;\n        b += (c & d | ~c & a) + k[15] + 1236535329 | 0;\n        b = (b << 22 | b >>> 10) + c | 0;\n        a += (b & d | c & ~d) + k[1] - 165796510 | 0;\n        a = (a << 5 | a >>> 27) + b | 0;\n        d += (a & c | b & ~c) + k[6] - 1069501632 | 0;\n        d = (d << 9 | d >>> 23) + a | 0;\n        c += (d & b | a & ~b) + k[11] + 643717713 | 0;\n        c = (c << 14 | c >>> 18) + d | 0;\n        b += (c & a | d & ~a) + k[0] - 373897302 | 0;\n        b = (b << 20 | b >>> 12) + c | 0;\n        a += (b & d | c & ~d) + k[5] - 701558691 | 0;\n        a = (a << 5 | a >>> 27) + b | 0;\n        d += (a & c | b & ~c) + k[10] + 38016083 | 0;\n        d = (d << 9 | d >>> 23) + a | 0;\n        c += (d & b | a & ~b) + k[15] - 660478335 | 0;\n        c = (c << 14 | c >>> 18) + d | 0;\n        b += (c & a | d & ~a) + k[4] - 405537848 | 0;\n        b = (b << 20 | b >>> 12) + c | 0;\n        a += (b & d | c & ~d) + k[9] + 568446438 | 0;\n        a = (a << 5 | a >>> 27) + b | 0;\n        d += (a & c | b & ~c) + k[14] - 1019803690 | 0;\n        d = (d << 9 | d >>> 23) + a | 0;\n        c += (d & b | a & ~b) + k[3] - 187363961 | 0;\n        c = (c << 14 | c >>> 18) + d | 0;\n        b += (c & a | d & ~a) + k[8] + 1163531501 | 0;\n        b = (b << 20 | b >>> 12) + c | 0;\n        a += (b & d | c & ~d) + k[13] - 1444681467 | 0;\n        a = (a << 5 | a >>> 27) + b | 0;\n        d += (a & c | b & ~c) + k[2] - 51403784 | 0;\n        d = (d << 9 | d >>> 23) + a | 0;\n        c += (d & b | a & ~b) + k[7] + 1735328473 | 0;\n        c = (c << 14 | c >>> 18) + d | 0;\n        b += (c & a | d & ~a) + k[12] - 1926607734 | 0;\n        b = (b << 20 | b >>> 12) + c | 0;\n        a += (b ^ c ^ d) + k[5] - 378558 | 0;\n        a = (a << 4 | a >>> 28) + b | 0;\n        d += (a ^ b ^ c) + k[8] - 2022574463 | 0;\n        d = (d << 11 | d >>> 21) + a | 0;\n        c += (d ^ a ^ b) + k[11] + 1839030562 | 0;\n        c = (c << 16 | c >>> 16) + d | 0;\n        b += (c ^ d ^ a) + k[14] - 35309556 | 0;\n        b = (b << 23 | b >>> 9) + c | 0;\n        a += (b ^ c ^ d) + k[1] - 1530992060 | 0;\n        a = (a << 4 | a >>> 28) + b | 0;\n        d += (a ^ b ^ c) + k[4] + 1272893353 | 0;\n        d = (d << 11 | d >>> 21) + a | 0;\n        c += (d ^ a ^ b) + k[7] - 155497632 | 0;\n        c = (c << 16 | c >>> 16) + d | 0;\n        b += (c ^ d ^ a) + k[10] - 1094730640 | 0;\n        b = (b << 23 | b >>> 9) + c | 0;\n        a += (b ^ c ^ d) + k[13] + 681279174 | 0;\n        a = (a << 4 | a >>> 28) + b | 0;\n        d += (a ^ b ^ c) + k[0] - 358537222 | 0;\n        d = (d << 11 | d >>> 21) + a | 0;\n        c += (d ^ a ^ b) + k[3] - 722521979 | 0;\n        c = (c << 16 | c >>> 16) + d | 0;\n        b += (c ^ d ^ a) + k[6] + 76029189 | 0;\n        b = (b << 23 | b >>> 9) + c | 0;\n        a += (b ^ c ^ d) + k[9] - 640364487 | 0;\n        a = (a << 4 | a >>> 28) + b | 0;\n        d += (a ^ b ^ c) + k[12] - 421815835 | 0;\n        d = (d << 11 | d >>> 21) + a | 0;\n        c += (d ^ a ^ b) + k[15] + 530742520 | 0;\n        c = (c << 16 | c >>> 16) + d | 0;\n        b += (c ^ d ^ a) + k[2] - 995338651 | 0;\n        b = (b << 23 | b >>> 9) + c | 0;\n        a += (c ^ (b | ~d)) + k[0] - 198630844 | 0;\n        a = (a << 6 | a >>> 26) + b | 0;\n        d += (b ^ (a | ~c)) + k[7] + 1126891415 | 0;\n        d = (d << 10 | d >>> 22) + a | 0;\n        c += (a ^ (d | ~b)) + k[14] - 1416354905 | 0;\n        c = (c << 15 | c >>> 17) + d | 0;\n        b += (d ^ (c | ~a)) + k[5] - 57434055 | 0;\n        b = (b << 21 | b >>> 11) + c | 0;\n        a += (c ^ (b | ~d)) + k[12] + 1700485571 | 0;\n        a = (a << 6 | a >>> 26) + b | 0;\n        d += (b ^ (a | ~c)) + k[3] - 1894986606 | 0;\n        d = (d << 10 | d >>> 22) + a | 0;\n        c += (a ^ (d | ~b)) + k[10] - 1051523 | 0;\n        c = (c << 15 | c >>> 17) + d | 0;\n        b += (d ^ (c | ~a)) + k[1] - 2054922799 | 0;\n        b = (b << 21 | b >>> 11) + c | 0;\n        a += (c ^ (b | ~d)) + k[8] + 1873313359 | 0;\n        a = (a << 6 | a >>> 26) + b | 0;\n        d += (b ^ (a | ~c)) + k[15] - 30611744 | 0;\n        d = (d << 10 | d >>> 22) + a | 0;\n        c += (a ^ (d | ~b)) + k[6] - 1560198380 | 0;\n        c = (c << 15 | c >>> 17) + d | 0;\n        b += (d ^ (c | ~a)) + k[13] + 1309151649 | 0;\n        b = (b << 21 | b >>> 11) + c | 0;\n        a += (c ^ (b | ~d)) + k[4] - 145523070 | 0;\n        a = (a << 6 | a >>> 26) + b | 0;\n        d += (b ^ (a | ~c)) + k[11] - 1120210379 | 0;\n        d = (d << 10 | d >>> 22) + a | 0;\n        c += (a ^ (d | ~b)) + k[2] + 718787259 | 0;\n        c = (c << 15 | c >>> 17) + d | 0;\n        b += (d ^ (c | ~a)) + k[9] - 343485551 | 0;\n        b = (b << 21 | b >>> 11) + c | 0;\n        x[0] = a + x[0] | 0;\n        x[1] = b + x[1] | 0;\n        x[2] = c + x[2] | 0;\n        x[3] = d + x[3] | 0;\n      }\n\n      function md5blk(s) {\n        var md5blks = [],\n            i;\n\n        for (i = 0; i < 64; i += 4) {\n          md5blks[i >> 2] = s.charCodeAt(i) + (s.charCodeAt(i + 1) << 8) + (s.charCodeAt(i + 2) << 16) + (s.charCodeAt(i + 3) << 24);\n        }\n\n        return md5blks;\n      }\n\n      function md5blk_array(a) {\n        var md5blks = [],\n            i;\n\n        for (i = 0; i < 64; i += 4) {\n          md5blks[i >> 2] = a[i] + (a[i + 1] << 8) + (a[i + 2] << 16) + (a[i + 3] << 24);\n        }\n\n        return md5blks;\n      }\n\n      function md51(s) {\n        var n = s.length,\n            state = [1732584193, -271733879, -1732584194, 271733878],\n            i,\n            length,\n            tail,\n            tmp,\n            lo,\n            hi;\n\n        for (i = 64; i <= n; i += 64) {\n          md5cycle(state, md5blk(s.substring(i - 64, i)));\n        }\n\n        s = s.substring(i - 64);\n        length = s.length;\n        tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];\n\n        for (i = 0; i < length; i += 1) {\n          tail[i >> 2] |= s.charCodeAt(i) << (i % 4 << 3);\n        }\n\n        tail[i >> 2] |= 128 << (i % 4 << 3);\n\n        if (i > 55) {\n          md5cycle(state, tail);\n\n          for (i = 0; i < 16; i += 1) {\n            tail[i] = 0;\n          }\n        }\n\n        tmp = n * 8;\n        tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/);\n        lo = parseInt(tmp[2], 16);\n        hi = parseInt(tmp[1], 16) || 0;\n        tail[14] = lo;\n        tail[15] = hi;\n        md5cycle(state, tail);\n        return state;\n      }\n\n      function md51_array(a) {\n        var n = a.length,\n            state = [1732584193, -271733879, -1732584194, 271733878],\n            i,\n            length,\n            tail,\n            tmp,\n            lo,\n            hi;\n\n        for (i = 64; i <= n; i += 64) {\n          md5cycle(state, md5blk_array(a.subarray(i - 64, i)));\n        }\n\n        a = i - 64 < n ? a.subarray(i - 64) : new Uint8Array(0);\n        length = a.length;\n        tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];\n\n        for (i = 0; i < length; i += 1) {\n          tail[i >> 2] |= a[i] << (i % 4 << 3);\n        }\n\n        tail[i >> 2] |= 128 << (i % 4 << 3);\n\n        if (i > 55) {\n          md5cycle(state, tail);\n\n          for (i = 0; i < 16; i += 1) {\n            tail[i] = 0;\n          }\n        }\n\n        tmp = n * 8;\n        tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/);\n        lo = parseInt(tmp[2], 16);\n        hi = parseInt(tmp[1], 16) || 0;\n        tail[14] = lo;\n        tail[15] = hi;\n        md5cycle(state, tail);\n        return state;\n      }\n\n      function rhex(n) {\n        var s = \"\",\n            j;\n\n        for (j = 0; j < 4; j += 1) {\n          s += hex_chr[n >> j * 8 + 4 & 15] + hex_chr[n >> j * 8 & 15];\n        }\n\n        return s;\n      }\n\n      function hex(x) {\n        var i;\n\n        for (i = 0; i < x.length; i += 1) {\n          x[i] = rhex(x[i]);\n        }\n\n        return x.join(\"\");\n      }\n\n      if (hex(md51(\"hello\")) !== \"5d41402abc4b2a76b9719d911017c592\") ;\n\n      if (typeof ArrayBuffer !== \"undefined\" && !ArrayBuffer.prototype.slice) {\n        (function () {\n          function clamp(val, length) {\n            val = val | 0 || 0;\n\n            if (val < 0) {\n              return Math.max(val + length, 0);\n            }\n\n            return Math.min(val, length);\n          }\n\n          ArrayBuffer.prototype.slice = function (from, to) {\n            var length = this.byteLength,\n                begin = clamp(from, length),\n                end = length,\n                num,\n                target,\n                targetArray,\n                sourceArray;\n\n            if (to !== undefined) {\n              end = clamp(to, length);\n            }\n\n            if (begin > end) {\n              return new ArrayBuffer(0);\n            }\n\n            num = end - begin;\n            target = new ArrayBuffer(num);\n            targetArray = new Uint8Array(target);\n            sourceArray = new Uint8Array(this, begin, num);\n            targetArray.set(sourceArray);\n            return target;\n          };\n        })();\n      }\n\n      function toUtf8(str) {\n        if (/[\\u0080-\\uFFFF]/.test(str)) {\n          str = unescape(encodeURIComponent(str));\n        }\n\n        return str;\n      }\n\n      function utf8Str2ArrayBuffer(str, returnUInt8Array) {\n        var length = str.length,\n            buff = new ArrayBuffer(length),\n            arr = new Uint8Array(buff),\n            i;\n\n        for (i = 0; i < length; i += 1) {\n          arr[i] = str.charCodeAt(i);\n        }\n\n        return returnUInt8Array ? arr : buff;\n      }\n\n      function arrayBuffer2Utf8Str(buff) {\n        return String.fromCharCode.apply(null, new Uint8Array(buff));\n      }\n\n      function concatenateArrayBuffers(first, second, returnUInt8Array) {\n        var result = new Uint8Array(first.byteLength + second.byteLength);\n        result.set(new Uint8Array(first));\n        result.set(new Uint8Array(second), first.byteLength);\n        return returnUInt8Array ? result : result.buffer;\n      }\n\n      function hexToBinaryString(hex) {\n        var bytes = [],\n            length = hex.length,\n            x;\n\n        for (x = 0; x < length - 1; x += 2) {\n          bytes.push(parseInt(hex.substr(x, 2), 16));\n        }\n\n        return String.fromCharCode.apply(String, bytes);\n      }\n\n      function SparkMD5() {\n        this.reset();\n      }\n\n      SparkMD5.prototype.append = function (str) {\n        this.appendBinary(toUtf8(str));\n        return this;\n      };\n\n      SparkMD5.prototype.appendBinary = function (contents) {\n        this._buff += contents;\n        this._length += contents.length;\n        var length = this._buff.length,\n            i;\n\n        for (i = 64; i <= length; i += 64) {\n          md5cycle(this._hash, md5blk(this._buff.substring(i - 64, i)));\n        }\n\n        this._buff = this._buff.substring(i - 64);\n        return this;\n      };\n\n      SparkMD5.prototype.end = function (raw) {\n        var buff = this._buff,\n            length = buff.length,\n            i,\n            tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n            ret;\n\n        for (i = 0; i < length; i += 1) {\n          tail[i >> 2] |= buff.charCodeAt(i) << (i % 4 << 3);\n        }\n\n        this._finish(tail, length);\n\n        ret = hex(this._hash);\n\n        if (raw) {\n          ret = hexToBinaryString(ret);\n        }\n\n        this.reset();\n        return ret;\n      };\n\n      SparkMD5.prototype.reset = function () {\n        this._buff = \"\";\n        this._length = 0;\n        this._hash = [1732584193, -271733879, -1732584194, 271733878];\n        return this;\n      };\n\n      SparkMD5.prototype.getState = function () {\n        return {\n          buff: this._buff,\n          length: this._length,\n          hash: this._hash\n        };\n      };\n\n      SparkMD5.prototype.setState = function (state) {\n        this._buff = state.buff;\n        this._length = state.length;\n        this._hash = state.hash;\n        return this;\n      };\n\n      SparkMD5.prototype.destroy = function () {\n        delete this._hash;\n        delete this._buff;\n        delete this._length;\n      };\n\n      SparkMD5.prototype._finish = function (tail, length) {\n        var i = length,\n            tmp,\n            lo,\n            hi;\n        tail[i >> 2] |= 128 << (i % 4 << 3);\n\n        if (i > 55) {\n          md5cycle(this._hash, tail);\n\n          for (i = 0; i < 16; i += 1) {\n            tail[i] = 0;\n          }\n        }\n\n        tmp = this._length * 8;\n        tmp = tmp.toString(16).match(/(.*?)(.{0,8})$/);\n        lo = parseInt(tmp[2], 16);\n        hi = parseInt(tmp[1], 16) || 0;\n        tail[14] = lo;\n        tail[15] = hi;\n        md5cycle(this._hash, tail);\n      };\n\n      SparkMD5.hash = function (str, raw) {\n        return SparkMD5.hashBinary(toUtf8(str), raw);\n      };\n\n      SparkMD5.hashBinary = function (content, raw) {\n        var hash = md51(content),\n            ret = hex(hash);\n        return raw ? hexToBinaryString(ret) : ret;\n      };\n\n      SparkMD5.ArrayBuffer = function () {\n        this.reset();\n      };\n\n      SparkMD5.ArrayBuffer.prototype.append = function (arr) {\n        var buff = concatenateArrayBuffers(this._buff.buffer, arr, true),\n            length = buff.length,\n            i;\n        this._length += arr.byteLength;\n\n        for (i = 64; i <= length; i += 64) {\n          md5cycle(this._hash, md5blk_array(buff.subarray(i - 64, i)));\n        }\n\n        this._buff = i - 64 < length ? new Uint8Array(buff.buffer.slice(i - 64)) : new Uint8Array(0);\n        return this;\n      };\n\n      SparkMD5.ArrayBuffer.prototype.end = function (raw) {\n        var buff = this._buff,\n            length = buff.length,\n            tail = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0],\n            i,\n            ret;\n\n        for (i = 0; i < length; i += 1) {\n          tail[i >> 2] |= buff[i] << (i % 4 << 3);\n        }\n\n        this._finish(tail, length);\n\n        ret = hex(this._hash);\n\n        if (raw) {\n          ret = hexToBinaryString(ret);\n        }\n\n        this.reset();\n        return ret;\n      };\n\n      SparkMD5.ArrayBuffer.prototype.reset = function () {\n        this._buff = new Uint8Array(0);\n        this._length = 0;\n        this._hash = [1732584193, -271733879, -1732584194, 271733878];\n        return this;\n      };\n\n      SparkMD5.ArrayBuffer.prototype.getState = function () {\n        var state = SparkMD5.prototype.getState.call(this);\n        state.buff = arrayBuffer2Utf8Str(state.buff);\n        return state;\n      };\n\n      SparkMD5.ArrayBuffer.prototype.setState = function (state) {\n        state.buff = utf8Str2ArrayBuffer(state.buff, true);\n        return SparkMD5.prototype.setState.call(this, state);\n      };\n\n      SparkMD5.ArrayBuffer.prototype.destroy = SparkMD5.prototype.destroy;\n      SparkMD5.ArrayBuffer.prototype._finish = SparkMD5.prototype._finish;\n\n      SparkMD5.ArrayBuffer.hash = function (arr, raw) {\n        var hash = md51_array(new Uint8Array(arr)),\n            ret = hex(hash);\n        return raw ? hexToBinaryString(ret) : ret;\n      };\n\n      return SparkMD5;\n    });\n  });\n\n  var classCallCheck = function classCallCheck(instance, Constructor) {\n    if (!(instance instanceof Constructor)) {\n      throw new TypeError(\"Cannot call a class as a function\");\n    }\n  };\n\n  var createClass = function () {\n    function defineProperties(target, props) {\n      for (var i = 0; i < props.length; i++) {\n        var descriptor = props[i];\n        descriptor.enumerable = descriptor.enumerable || false;\n        descriptor.configurable = true;\n        if (\"value\" in descriptor) descriptor.writable = true;\n        Object.defineProperty(target, descriptor.key, descriptor);\n      }\n    }\n\n    return function (Constructor, protoProps, staticProps) {\n      if (protoProps) defineProperties(Constructor.prototype, protoProps);\n      if (staticProps) defineProperties(Constructor, staticProps);\n      return Constructor;\n    };\n  }();\n\n  var fileSlice = File.prototype.slice || File.prototype.mozSlice || File.prototype.webkitSlice;\n\n  var FileChecksum = function () {\n    createClass(FileChecksum, null, [{\n      key: \"create\",\n      value: function create(file, callback) {\n        var instance = new FileChecksum(file);\n        instance.create(callback);\n      }\n    }]);\n\n    function FileChecksum(file) {\n      classCallCheck(this, FileChecksum);\n      this.file = file;\n      this.chunkSize = 2097152;\n      this.chunkCount = Math.ceil(this.file.size / this.chunkSize);\n      this.chunkIndex = 0;\n    }\n\n    createClass(FileChecksum, [{\n      key: \"create\",\n      value: function create(callback) {\n        var _this = this;\n\n        this.callback = callback;\n        this.md5Buffer = new sparkMd5.ArrayBuffer();\n        this.fileReader = new FileReader();\n        this.fileReader.addEventListener(\"load\", function (event) {\n          return _this.fileReaderDidLoad(event);\n        });\n        this.fileReader.addEventListener(\"error\", function (event) {\n          return _this.fileReaderDidError(event);\n        });\n        this.readNextChunk();\n      }\n    }, {\n      key: \"fileReaderDidLoad\",\n      value: function fileReaderDidLoad(event) {\n        this.md5Buffer.append(event.target.result);\n\n        if (!this.readNextChunk()) {\n          var binaryDigest = this.md5Buffer.end(true);\n          var base64digest = btoa(binaryDigest);\n          this.callback(null, base64digest);\n        }\n      }\n    }, {\n      key: \"fileReaderDidError\",\n      value: function fileReaderDidError(event) {\n        this.callback(\"Error reading \" + this.file.name);\n      }\n    }, {\n      key: \"readNextChunk\",\n      value: function readNextChunk() {\n        if (this.chunkIndex < this.chunkCount || this.chunkIndex == 0 && this.chunkCount == 0) {\n          var start = this.chunkIndex * this.chunkSize;\n          var end = Math.min(start + this.chunkSize, this.file.size);\n          var bytes = fileSlice.call(this.file, start, end);\n          this.fileReader.readAsArrayBuffer(bytes);\n          this.chunkIndex++;\n          return true;\n        } else {\n          return false;\n        }\n      }\n    }]);\n    return FileChecksum;\n  }();\n\n  function getMetaValue(name) {\n    var element = findElement(document.head, 'meta[name=\"' + name + '\"]');\n\n    if (element) {\n      return element.getAttribute(\"content\");\n    }\n  }\n\n  function findElements(root, selector) {\n    if (typeof root == \"string\") {\n      selector = root;\n      root = document;\n    }\n\n    var elements = root.querySelectorAll(selector);\n    return toArray$1(elements);\n  }\n\n  function findElement(root, selector) {\n    if (typeof root == \"string\") {\n      selector = root;\n      root = document;\n    }\n\n    return root.querySelector(selector);\n  }\n\n  function dispatchEvent(element, type) {\n    var eventInit = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n    var disabled = element.disabled;\n    var bubbles = eventInit.bubbles,\n        cancelable = eventInit.cancelable,\n        detail = eventInit.detail;\n    var event = document.createEvent(\"Event\");\n    event.initEvent(type, bubbles || true, cancelable || true);\n    event.detail = detail || {};\n\n    try {\n      element.disabled = false;\n      element.dispatchEvent(event);\n    } finally {\n      element.disabled = disabled;\n    }\n\n    return event;\n  }\n\n  function toArray$1(value) {\n    if (Array.isArray(value)) {\n      return value;\n    } else if (Array.from) {\n      return Array.from(value);\n    } else {\n      return [].slice.call(value);\n    }\n  }\n\n  var BlobRecord = function () {\n    function BlobRecord(file, checksum, url) {\n      var _this = this;\n\n      classCallCheck(this, BlobRecord);\n      this.file = file;\n      this.attributes = {\n        filename: file.name,\n        content_type: file.type,\n        byte_size: file.size,\n        checksum: checksum\n      };\n      this.xhr = new XMLHttpRequest();\n      this.xhr.open(\"POST\", url, true);\n      this.xhr.responseType = \"json\";\n      this.xhr.setRequestHeader(\"Content-Type\", \"application/json\");\n      this.xhr.setRequestHeader(\"Accept\", \"application/json\");\n      this.xhr.setRequestHeader(\"X-Requested-With\", \"XMLHttpRequest\");\n      var csrfToken = getMetaValue(\"csrf-token\");\n\n      if (csrfToken != undefined) {\n        this.xhr.setRequestHeader(\"X-CSRF-Token\", csrfToken);\n      }\n\n      this.xhr.addEventListener(\"load\", function (event) {\n        return _this.requestDidLoad(event);\n      });\n      this.xhr.addEventListener(\"error\", function (event) {\n        return _this.requestDidError(event);\n      });\n    }\n\n    createClass(BlobRecord, [{\n      key: \"create\",\n      value: function create(callback) {\n        this.callback = callback;\n        this.xhr.send(JSON.stringify({\n          blob: this.attributes\n        }));\n      }\n    }, {\n      key: \"requestDidLoad\",\n      value: function requestDidLoad(event) {\n        if (this.status >= 200 && this.status < 300) {\n          var response = this.response;\n          var direct_upload = response.direct_upload;\n          delete response.direct_upload;\n          this.attributes = response;\n          this.directUploadData = direct_upload;\n          this.callback(null, this.toJSON());\n        } else {\n          this.requestDidError(event);\n        }\n      }\n    }, {\n      key: \"requestDidError\",\n      value: function requestDidError(event) {\n        this.callback('Error creating Blob for \"' + this.file.name + '\". Status: ' + this.status);\n      }\n    }, {\n      key: \"toJSON\",\n      value: function toJSON() {\n        var result = {};\n\n        for (var key in this.attributes) {\n          result[key] = this.attributes[key];\n        }\n\n        return result;\n      }\n    }, {\n      key: \"status\",\n      get: function get$$1() {\n        return this.xhr.status;\n      }\n    }, {\n      key: \"response\",\n      get: function get$$1() {\n        var _xhr = this.xhr,\n            responseType = _xhr.responseType,\n            response = _xhr.response;\n\n        if (responseType == \"json\") {\n          return response;\n        } else {\n          return JSON.parse(response);\n        }\n      }\n    }]);\n    return BlobRecord;\n  }();\n\n  var BlobUpload = function () {\n    function BlobUpload(blob) {\n      var _this = this;\n\n      classCallCheck(this, BlobUpload);\n      this.blob = blob;\n      this.file = blob.file;\n      var _blob$directUploadDat = blob.directUploadData,\n          url = _blob$directUploadDat.url,\n          headers = _blob$directUploadDat.headers;\n      this.xhr = new XMLHttpRequest();\n      this.xhr.open(\"PUT\", url, true);\n      this.xhr.responseType = \"text\";\n\n      for (var key in headers) {\n        this.xhr.setRequestHeader(key, headers[key]);\n      }\n\n      this.xhr.addEventListener(\"load\", function (event) {\n        return _this.requestDidLoad(event);\n      });\n      this.xhr.addEventListener(\"error\", function (event) {\n        return _this.requestDidError(event);\n      });\n    }\n\n    createClass(BlobUpload, [{\n      key: \"create\",\n      value: function create(callback) {\n        this.callback = callback;\n        this.xhr.send(this.file.slice());\n      }\n    }, {\n      key: \"requestDidLoad\",\n      value: function requestDidLoad(event) {\n        var _xhr = this.xhr,\n            status = _xhr.status,\n            response = _xhr.response;\n\n        if (status >= 200 && status < 300) {\n          this.callback(null, response);\n        } else {\n          this.requestDidError(event);\n        }\n      }\n    }, {\n      key: \"requestDidError\",\n      value: function requestDidError(event) {\n        this.callback('Error storing \"' + this.file.name + '\". Status: ' + this.xhr.status);\n      }\n    }]);\n    return BlobUpload;\n  }();\n\n  var id = 0;\n\n  var DirectUpload = function () {\n    function DirectUpload(file, url, delegate) {\n      classCallCheck(this, DirectUpload);\n      this.id = ++id;\n      this.file = file;\n      this.url = url;\n      this.delegate = delegate;\n    }\n\n    createClass(DirectUpload, [{\n      key: \"create\",\n      value: function create(callback) {\n        var _this = this;\n\n        FileChecksum.create(this.file, function (error, checksum) {\n          if (error) {\n            callback(error);\n            return;\n          }\n\n          var blob = new BlobRecord(_this.file, checksum, _this.url);\n          notify(_this.delegate, \"directUploadWillCreateBlobWithXHR\", blob.xhr);\n          blob.create(function (error) {\n            if (error) {\n              callback(error);\n            } else {\n              var upload = new BlobUpload(blob);\n              notify(_this.delegate, \"directUploadWillStoreFileWithXHR\", upload.xhr);\n              upload.create(function (error) {\n                if (error) {\n                  callback(error);\n                } else {\n                  callback(null, blob.toJSON());\n                }\n              });\n            }\n          });\n        });\n      }\n    }]);\n    return DirectUpload;\n  }();\n\n  function notify(object, methodName) {\n    if (object && typeof object[methodName] == \"function\") {\n      for (var _len = arguments.length, messages = Array(_len > 2 ? _len - 2 : 0), _key = 2; _key < _len; _key++) {\n        messages[_key - 2] = arguments[_key];\n      }\n\n      return object[methodName].apply(object, messages);\n    }\n  }\n\n  var DirectUploadController = function () {\n    function DirectUploadController(input, file) {\n      classCallCheck(this, DirectUploadController);\n      this.input = input;\n      this.file = file;\n      this.directUpload = new DirectUpload(this.file, this.url, this);\n      this.dispatch(\"initialize\");\n    }\n\n    createClass(DirectUploadController, [{\n      key: \"start\",\n      value: function start(callback) {\n        var _this = this;\n\n        var hiddenInput = document.createElement(\"input\");\n        hiddenInput.type = \"hidden\";\n        hiddenInput.name = this.input.name;\n        this.input.insertAdjacentElement(\"beforebegin\", hiddenInput);\n        this.dispatch(\"start\");\n        this.directUpload.create(function (error, attributes) {\n          if (error) {\n            hiddenInput.parentNode.removeChild(hiddenInput);\n\n            _this.dispatchError(error);\n          } else {\n            hiddenInput.value = attributes.signed_id;\n          }\n\n          _this.dispatch(\"end\");\n\n          callback(error);\n        });\n      }\n    }, {\n      key: \"uploadRequestDidProgress\",\n      value: function uploadRequestDidProgress(event) {\n        var progress = event.loaded / event.total * 100;\n\n        if (progress) {\n          this.dispatch(\"progress\", {\n            progress: progress\n          });\n        }\n      }\n    }, {\n      key: \"dispatch\",\n      value: function dispatch(name) {\n        var detail = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n        detail.file = this.file;\n        detail.id = this.directUpload.id;\n        return dispatchEvent(this.input, \"direct-upload:\" + name, {\n          detail: detail\n        });\n      }\n    }, {\n      key: \"dispatchError\",\n      value: function dispatchError(error) {\n        var event = this.dispatch(\"error\", {\n          error: error\n        });\n\n        if (!event.defaultPrevented) {\n          alert(error);\n        }\n      }\n    }, {\n      key: \"directUploadWillCreateBlobWithXHR\",\n      value: function directUploadWillCreateBlobWithXHR(xhr) {\n        this.dispatch(\"before-blob-request\", {\n          xhr: xhr\n        });\n      }\n    }, {\n      key: \"directUploadWillStoreFileWithXHR\",\n      value: function directUploadWillStoreFileWithXHR(xhr) {\n        var _this2 = this;\n\n        this.dispatch(\"before-storage-request\", {\n          xhr: xhr\n        });\n        xhr.upload.addEventListener(\"progress\", function (event) {\n          return _this2.uploadRequestDidProgress(event);\n        });\n      }\n    }, {\n      key: \"url\",\n      get: function get$$1() {\n        return this.input.getAttribute(\"data-direct-upload-url\");\n      }\n    }]);\n    return DirectUploadController;\n  }();\n\n  var inputSelector = \"input[type=file][data-direct-upload-url]:not([disabled])\";\n\n  var DirectUploadsController = function () {\n    function DirectUploadsController(form) {\n      classCallCheck(this, DirectUploadsController);\n      this.form = form;\n      this.inputs = findElements(form, inputSelector).filter(function (input) {\n        return input.files.length;\n      });\n    }\n\n    createClass(DirectUploadsController, [{\n      key: \"start\",\n      value: function start(callback) {\n        var _this = this;\n\n        var controllers = this.createDirectUploadControllers();\n\n        var startNextController = function startNextController() {\n          var controller = controllers.shift();\n\n          if (controller) {\n            controller.start(function (error) {\n              if (error) {\n                callback(error);\n\n                _this.dispatch(\"end\");\n              } else {\n                startNextController();\n              }\n            });\n          } else {\n            callback();\n\n            _this.dispatch(\"end\");\n          }\n        };\n\n        this.dispatch(\"start\");\n        startNextController();\n      }\n    }, {\n      key: \"createDirectUploadControllers\",\n      value: function createDirectUploadControllers() {\n        var controllers = [];\n        this.inputs.forEach(function (input) {\n          toArray$1(input.files).forEach(function (file) {\n            var controller = new DirectUploadController(input, file);\n            controllers.push(controller);\n          });\n        });\n        return controllers;\n      }\n    }, {\n      key: \"dispatch\",\n      value: function dispatch(name) {\n        var detail = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};\n        return dispatchEvent(this.form, \"direct-uploads:\" + name, {\n          detail: detail\n        });\n      }\n    }]);\n    return DirectUploadsController;\n  }();\n\n  var processingAttribute = \"data-direct-uploads-processing\";\n  var submitButtonsByForm = new WeakMap();\n  var started = false;\n\n  function start() {\n    if (!started) {\n      started = true;\n      document.addEventListener(\"click\", didClick, true);\n      document.addEventListener(\"submit\", didSubmitForm);\n      document.addEventListener(\"ajax:before\", didSubmitRemoteElement);\n    }\n  }\n\n  function didClick(event) {\n    var target = event.target;\n\n    if ((target.tagName == \"INPUT\" || target.tagName == \"BUTTON\") && target.type == \"submit\" && target.form) {\n      submitButtonsByForm.set(target.form, target);\n    }\n  }\n\n  function didSubmitForm(event) {\n    handleFormSubmissionEvent(event);\n  }\n\n  function didSubmitRemoteElement(event) {\n    if (event.target.tagName == \"FORM\") {\n      handleFormSubmissionEvent(event);\n    }\n  }\n\n  function handleFormSubmissionEvent(event) {\n    var form = event.target;\n\n    if (form.hasAttribute(processingAttribute)) {\n      event.preventDefault();\n      return;\n    }\n\n    var controller = new DirectUploadsController(form);\n    var inputs = controller.inputs;\n\n    if (inputs.length) {\n      event.preventDefault();\n      form.setAttribute(processingAttribute, \"\");\n      inputs.forEach(disable);\n      controller.start(function (error) {\n        form.removeAttribute(processingAttribute);\n\n        if (error) {\n          inputs.forEach(enable);\n        } else {\n          submitForm(form);\n        }\n      });\n    }\n  }\n\n  function submitForm(form) {\n    var button = submitButtonsByForm.get(form) || findElement(form, \"input[type=submit], button[type=submit]\");\n\n    if (button) {\n      var _button = button,\n          disabled = _button.disabled;\n      button.disabled = false;\n      button.focus();\n      button.click();\n      button.disabled = disabled;\n    } else {\n      button = document.createElement(\"input\");\n      button.type = \"submit\";\n      button.style.display = \"none\";\n      form.appendChild(button);\n      button.click();\n      form.removeChild(button);\n    }\n\n    submitButtonsByForm[\"delete\"](form);\n  }\n\n  function disable(input) {\n    input.disabled = true;\n  }\n\n  function enable(input) {\n    input.disabled = false;\n  }\n\n  function autostart() {\n    if (window.ActiveStorage) {\n      start();\n    }\n  }\n\n  setTimeout(autostart, 1);\n  exports.start = start;\n  exports.DirectUpload = DirectUpload;\n  Object.defineProperty(exports, \"__esModule\", {\n    value: true\n  });\n});","/**!\n * @fileOverview Kickass library to create and place poppers near their reference elements.\n * @version 1.16.0\n * @license\n * Copyright (c) 2016 Federico Zivolo and contributors\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to deal\n * in the Software without restriction, including without limitation the rights\n * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n * copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in all\n * copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n * SOFTWARE.\n */\nvar isBrowser = typeof window !== 'undefined' && typeof document !== 'undefined' && typeof navigator !== 'undefined';\n\nvar timeoutDuration = function () {\n  var longerTimeoutBrowsers = ['Edge', 'Trident', 'Firefox'];\n\n  for (var i = 0; i < longerTimeoutBrowsers.length; i += 1) {\n    if (isBrowser && navigator.userAgent.indexOf(longerTimeoutBrowsers[i]) >= 0) {\n      return 1;\n    }\n  }\n\n  return 0;\n}();\n\nfunction microtaskDebounce(fn) {\n  var called = false;\n  return function () {\n    if (called) {\n      return;\n    }\n\n    called = true;\n    window.Promise.resolve().then(function () {\n      called = false;\n      fn();\n    });\n  };\n}\n\nfunction taskDebounce(fn) {\n  var scheduled = false;\n  return function () {\n    if (!scheduled) {\n      scheduled = true;\n      setTimeout(function () {\n        scheduled = false;\n        fn();\n      }, timeoutDuration);\n    }\n  };\n}\n\nvar supportsMicroTasks = isBrowser && window.Promise;\n/**\n* Create a debounced version of a method, that's asynchronously deferred\n* but called in the minimum time possible.\n*\n* @method\n* @memberof Popper.Utils\n* @argument {Function} fn\n* @returns {Function}\n*/\n\nvar debounce = supportsMicroTasks ? microtaskDebounce : taskDebounce;\n/**\n * Check if the given variable is a function\n * @method\n * @memberof Popper.Utils\n * @argument {Any} functionToCheck - variable to check\n * @returns {Boolean} answer to: is a function?\n */\n\nfunction isFunction(functionToCheck) {\n  var getType = {};\n  return functionToCheck && getType.toString.call(functionToCheck) === '[object Function]';\n}\n/**\n * Get CSS computed property of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Eement} element\n * @argument {String} property\n */\n\n\nfunction getStyleComputedProperty(element, property) {\n  if (element.nodeType !== 1) {\n    return [];\n  } // NOTE: 1 DOM access here\n\n\n  var window = element.ownerDocument.defaultView;\n  var css = window.getComputedStyle(element, null);\n  return property ? css[property] : css;\n}\n/**\n * Returns the parentNode or the host of the element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} parent\n */\n\n\nfunction getParentNode(element) {\n  if (element.nodeName === 'HTML') {\n    return element;\n  }\n\n  return element.parentNode || element.host;\n}\n/**\n * Returns the scrolling parent of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} scroll parent\n */\n\n\nfunction getScrollParent(element) {\n  // Return body, `getScroll` will take care to get the correct `scrollTop` from it\n  if (!element) {\n    return document.body;\n  }\n\n  switch (element.nodeName) {\n    case 'HTML':\n    case 'BODY':\n      return element.ownerDocument.body;\n\n    case '#document':\n      return element.body;\n  } // Firefox want us to check `-x` and `-y` variations as well\n\n\n  var _getStyleComputedProp = getStyleComputedProperty(element),\n      overflow = _getStyleComputedProp.overflow,\n      overflowX = _getStyleComputedProp.overflowX,\n      overflowY = _getStyleComputedProp.overflowY;\n\n  if (/(auto|scroll|overlay)/.test(overflow + overflowY + overflowX)) {\n    return element;\n  }\n\n  return getScrollParent(getParentNode(element));\n}\n/**\n * Returns the reference node of the reference object, or the reference object itself.\n * @method\n * @memberof Popper.Utils\n * @param {Element|Object} reference - the reference element (the popper will be relative to this)\n * @returns {Element} parent\n */\n\n\nfunction getReferenceNode(reference) {\n  return reference && reference.referenceNode ? reference.referenceNode : reference;\n}\n\nvar isIE11 = isBrowser && !!(window.MSInputMethodContext && document.documentMode);\nvar isIE10 = isBrowser && /MSIE 10/.test(navigator.userAgent);\n/**\n * Determines if the browser is Internet Explorer\n * @method\n * @memberof Popper.Utils\n * @param {Number} version to check\n * @returns {Boolean} isIE\n */\n\nfunction isIE(version) {\n  if (version === 11) {\n    return isIE11;\n  }\n\n  if (version === 10) {\n    return isIE10;\n  }\n\n  return isIE11 || isIE10;\n}\n/**\n * Returns the offset parent of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} offset parent\n */\n\n\nfunction getOffsetParent(element) {\n  if (!element) {\n    return document.documentElement;\n  }\n\n  var noOffsetParent = isIE(10) ? document.body : null; // NOTE: 1 DOM access here\n\n  var offsetParent = element.offsetParent || null; // Skip hidden elements which don't have an offsetParent\n\n  while (offsetParent === noOffsetParent && element.nextElementSibling) {\n    offsetParent = (element = element.nextElementSibling).offsetParent;\n  }\n\n  var nodeName = offsetParent && offsetParent.nodeName;\n\n  if (!nodeName || nodeName === 'BODY' || nodeName === 'HTML') {\n    return element ? element.ownerDocument.documentElement : document.documentElement;\n  } // .offsetParent will return the closest TH, TD or TABLE in case\n  // no offsetParent is present, I hate this job...\n\n\n  if (['TH', 'TD', 'TABLE'].indexOf(offsetParent.nodeName) !== -1 && getStyleComputedProperty(offsetParent, 'position') === 'static') {\n    return getOffsetParent(offsetParent);\n  }\n\n  return offsetParent;\n}\n\nfunction isOffsetContainer(element) {\n  var nodeName = element.nodeName;\n\n  if (nodeName === 'BODY') {\n    return false;\n  }\n\n  return nodeName === 'HTML' || getOffsetParent(element.firstElementChild) === element;\n}\n/**\n * Finds the root node (document, shadowDOM root) of the given element\n * @method\n * @memberof Popper.Utils\n * @argument {Element} node\n * @returns {Element} root node\n */\n\n\nfunction getRoot(node) {\n  if (node.parentNode !== null) {\n    return getRoot(node.parentNode);\n  }\n\n  return node;\n}\n/**\n * Finds the offset parent common to the two provided nodes\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element1\n * @argument {Element} element2\n * @returns {Element} common offset parent\n */\n\n\nfunction findCommonOffsetParent(element1, element2) {\n  // This check is needed to avoid errors in case one of the elements isn't defined for any reason\n  if (!element1 || !element1.nodeType || !element2 || !element2.nodeType) {\n    return document.documentElement;\n  } // Here we make sure to give as \"start\" the element that comes first in the DOM\n\n\n  var order = element1.compareDocumentPosition(element2) & Node.DOCUMENT_POSITION_FOLLOWING;\n  var start = order ? element1 : element2;\n  var end = order ? element2 : element1; // Get common ancestor container\n\n  var range = document.createRange();\n  range.setStart(start, 0);\n  range.setEnd(end, 0);\n  var commonAncestorContainer = range.commonAncestorContainer; // Both nodes are inside #document\n\n  if (element1 !== commonAncestorContainer && element2 !== commonAncestorContainer || start.contains(end)) {\n    if (isOffsetContainer(commonAncestorContainer)) {\n      return commonAncestorContainer;\n    }\n\n    return getOffsetParent(commonAncestorContainer);\n  } // one of the nodes is inside shadowDOM, find which one\n\n\n  var element1root = getRoot(element1);\n\n  if (element1root.host) {\n    return findCommonOffsetParent(element1root.host, element2);\n  } else {\n    return findCommonOffsetParent(element1, getRoot(element2).host);\n  }\n}\n/**\n * Gets the scroll value of the given element in the given side (top and left)\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @argument {String} side `top` or `left`\n * @returns {number} amount of scrolled pixels\n */\n\n\nfunction getScroll(element) {\n  var side = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'top';\n  var upperSide = side === 'top' ? 'scrollTop' : 'scrollLeft';\n  var nodeName = element.nodeName;\n\n  if (nodeName === 'BODY' || nodeName === 'HTML') {\n    var html = element.ownerDocument.documentElement;\n    var scrollingElement = element.ownerDocument.scrollingElement || html;\n    return scrollingElement[upperSide];\n  }\n\n  return element[upperSide];\n}\n/*\n * Sum or subtract the element scroll values (left and top) from a given rect object\n * @method\n * @memberof Popper.Utils\n * @param {Object} rect - Rect object you want to change\n * @param {HTMLElement} element - The element from the function reads the scroll values\n * @param {Boolean} subtract - set to true if you want to subtract the scroll values\n * @return {Object} rect - The modifier rect object\n */\n\n\nfunction includeScroll(rect, element) {\n  var subtract = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n  var scrollTop = getScroll(element, 'top');\n  var scrollLeft = getScroll(element, 'left');\n  var modifier = subtract ? -1 : 1;\n  rect.top += scrollTop * modifier;\n  rect.bottom += scrollTop * modifier;\n  rect.left += scrollLeft * modifier;\n  rect.right += scrollLeft * modifier;\n  return rect;\n}\n/*\n * Helper to detect borders of a given element\n * @method\n * @memberof Popper.Utils\n * @param {CSSStyleDeclaration} styles\n * Result of `getStyleComputedProperty` on the given element\n * @param {String} axis - `x` or `y`\n * @return {number} borders - The borders size of the given axis\n */\n\n\nfunction getBordersSize(styles, axis) {\n  var sideA = axis === 'x' ? 'Left' : 'Top';\n  var sideB = sideA === 'Left' ? 'Right' : 'Bottom';\n  return parseFloat(styles['border' + sideA + 'Width'], 10) + parseFloat(styles['border' + sideB + 'Width'], 10);\n}\n\nfunction getSize(axis, body, html, computedStyle) {\n  return Math.max(body['offset' + axis], body['scroll' + axis], html['client' + axis], html['offset' + axis], html['scroll' + axis], isIE(10) ? parseInt(html['offset' + axis]) + parseInt(computedStyle['margin' + (axis === 'Height' ? 'Top' : 'Left')]) + parseInt(computedStyle['margin' + (axis === 'Height' ? 'Bottom' : 'Right')]) : 0);\n}\n\nfunction getWindowSizes(document) {\n  var body = document.body;\n  var html = document.documentElement;\n  var computedStyle = isIE(10) && getComputedStyle(html);\n  return {\n    height: getSize('Height', body, html, computedStyle),\n    width: getSize('Width', body, html, computedStyle)\n  };\n}\n\nvar classCallCheck = function classCallCheck(instance, Constructor) {\n  if (!(instance instanceof Constructor)) {\n    throw new TypeError(\"Cannot call a class as a function\");\n  }\n};\n\nvar createClass = function () {\n  function defineProperties(target, props) {\n    for (var i = 0; i < props.length; i++) {\n      var descriptor = props[i];\n      descriptor.enumerable = descriptor.enumerable || false;\n      descriptor.configurable = true;\n      if (\"value\" in descriptor) descriptor.writable = true;\n      Object.defineProperty(target, descriptor.key, descriptor);\n    }\n  }\n\n  return function (Constructor, protoProps, staticProps) {\n    if (protoProps) defineProperties(Constructor.prototype, protoProps);\n    if (staticProps) defineProperties(Constructor, staticProps);\n    return Constructor;\n  };\n}();\n\nvar defineProperty = function defineProperty(obj, key, value) {\n  if (key in obj) {\n    Object.defineProperty(obj, key, {\n      value: value,\n      enumerable: true,\n      configurable: true,\n      writable: true\n    });\n  } else {\n    obj[key] = value;\n  }\n\n  return obj;\n};\n\nvar _extends = Object.assign || function (target) {\n  for (var i = 1; i < arguments.length; i++) {\n    var source = arguments[i];\n\n    for (var key in source) {\n      if (Object.prototype.hasOwnProperty.call(source, key)) {\n        target[key] = source[key];\n      }\n    }\n  }\n\n  return target;\n};\n/**\n * Given element offsets, generate an output similar to getBoundingClientRect\n * @method\n * @memberof Popper.Utils\n * @argument {Object} offsets\n * @returns {Object} ClientRect like output\n */\n\n\nfunction getClientRect(offsets) {\n  return _extends({}, offsets, {\n    right: offsets.left + offsets.width,\n    bottom: offsets.top + offsets.height\n  });\n}\n/**\n * Get bounding client rect of given element\n * @method\n * @memberof Popper.Utils\n * @param {HTMLElement} element\n * @return {Object} client rect\n */\n\n\nfunction getBoundingClientRect(element) {\n  var rect = {}; // IE10 10 FIX: Please, don't ask, the element isn't\n  // considered in DOM in some circumstances...\n  // This isn't reproducible in IE10 compatibility mode of IE11\n\n  try {\n    if (isIE(10)) {\n      rect = element.getBoundingClientRect();\n      var scrollTop = getScroll(element, 'top');\n      var scrollLeft = getScroll(element, 'left');\n      rect.top += scrollTop;\n      rect.left += scrollLeft;\n      rect.bottom += scrollTop;\n      rect.right += scrollLeft;\n    } else {\n      rect = element.getBoundingClientRect();\n    }\n  } catch (e) {}\n\n  var result = {\n    left: rect.left,\n    top: rect.top,\n    width: rect.right - rect.left,\n    height: rect.bottom - rect.top\n  }; // subtract scrollbar size from sizes\n\n  var sizes = element.nodeName === 'HTML' ? getWindowSizes(element.ownerDocument) : {};\n  var width = sizes.width || element.clientWidth || result.width;\n  var height = sizes.height || element.clientHeight || result.height;\n  var horizScrollbar = element.offsetWidth - width;\n  var vertScrollbar = element.offsetHeight - height; // if an hypothetical scrollbar is detected, we must be sure it's not a `border`\n  // we make this check conditional for performance reasons\n\n  if (horizScrollbar || vertScrollbar) {\n    var styles = getStyleComputedProperty(element);\n    horizScrollbar -= getBordersSize(styles, 'x');\n    vertScrollbar -= getBordersSize(styles, 'y');\n    result.width -= horizScrollbar;\n    result.height -= vertScrollbar;\n  }\n\n  return getClientRect(result);\n}\n\nfunction getOffsetRectRelativeToArbitraryNode(children, parent) {\n  var fixedPosition = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;\n  var isIE10 = isIE(10);\n  var isHTML = parent.nodeName === 'HTML';\n  var childrenRect = getBoundingClientRect(children);\n  var parentRect = getBoundingClientRect(parent);\n  var scrollParent = getScrollParent(children);\n  var styles = getStyleComputedProperty(parent);\n  var borderTopWidth = parseFloat(styles.borderTopWidth, 10);\n  var borderLeftWidth = parseFloat(styles.borderLeftWidth, 10); // In cases where the parent is fixed, we must ignore negative scroll in offset calc\n\n  if (fixedPosition && isHTML) {\n    parentRect.top = Math.max(parentRect.top, 0);\n    parentRect.left = Math.max(parentRect.left, 0);\n  }\n\n  var offsets = getClientRect({\n    top: childrenRect.top - parentRect.top - borderTopWidth,\n    left: childrenRect.left - parentRect.left - borderLeftWidth,\n    width: childrenRect.width,\n    height: childrenRect.height\n  });\n  offsets.marginTop = 0;\n  offsets.marginLeft = 0; // Subtract margins of documentElement in case it's being used as parent\n  // we do this only on HTML because it's the only element that behaves\n  // differently when margins are applied to it. The margins are included in\n  // the box of the documentElement, in the other cases not.\n\n  if (!isIE10 && isHTML) {\n    var marginTop = parseFloat(styles.marginTop, 10);\n    var marginLeft = parseFloat(styles.marginLeft, 10);\n    offsets.top -= borderTopWidth - marginTop;\n    offsets.bottom -= borderTopWidth - marginTop;\n    offsets.left -= borderLeftWidth - marginLeft;\n    offsets.right -= borderLeftWidth - marginLeft; // Attach marginTop and marginLeft because in some circumstances we may need them\n\n    offsets.marginTop = marginTop;\n    offsets.marginLeft = marginLeft;\n  }\n\n  if (isIE10 && !fixedPosition ? parent.contains(scrollParent) : parent === scrollParent && scrollParent.nodeName !== 'BODY') {\n    offsets = includeScroll(offsets, parent);\n  }\n\n  return offsets;\n}\n\nfunction getViewportOffsetRectRelativeToArtbitraryNode(element) {\n  var excludeScroll = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n  var html = element.ownerDocument.documentElement;\n  var relativeOffset = getOffsetRectRelativeToArbitraryNode(element, html);\n  var width = Math.max(html.clientWidth, window.innerWidth || 0);\n  var height = Math.max(html.clientHeight, window.innerHeight || 0);\n  var scrollTop = !excludeScroll ? getScroll(html) : 0;\n  var scrollLeft = !excludeScroll ? getScroll(html, 'left') : 0;\n  var offset = {\n    top: scrollTop - relativeOffset.top + relativeOffset.marginTop,\n    left: scrollLeft - relativeOffset.left + relativeOffset.marginLeft,\n    width: width,\n    height: height\n  };\n  return getClientRect(offset);\n}\n/**\n * Check if the given element is fixed or is inside a fixed parent\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @argument {Element} customContainer\n * @returns {Boolean} answer to \"isFixed?\"\n */\n\n\nfunction isFixed(element) {\n  var nodeName = element.nodeName;\n\n  if (nodeName === 'BODY' || nodeName === 'HTML') {\n    return false;\n  }\n\n  if (getStyleComputedProperty(element, 'position') === 'fixed') {\n    return true;\n  }\n\n  var parentNode = getParentNode(element);\n\n  if (!parentNode) {\n    return false;\n  }\n\n  return isFixed(parentNode);\n}\n/**\n * Finds the first parent of an element that has a transformed property defined\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Element} first transformed parent or documentElement\n */\n\n\nfunction getFixedPositionOffsetParent(element) {\n  // This check is needed to avoid errors in case one of the elements isn't defined for any reason\n  if (!element || !element.parentElement || isIE()) {\n    return document.documentElement;\n  }\n\n  var el = element.parentElement;\n\n  while (el && getStyleComputedProperty(el, 'transform') === 'none') {\n    el = el.parentElement;\n  }\n\n  return el || document.documentElement;\n}\n/**\n * Computed the boundaries limits and return them\n * @method\n * @memberof Popper.Utils\n * @param {HTMLElement} popper\n * @param {HTMLElement} reference\n * @param {number} padding\n * @param {HTMLElement} boundariesElement - Element used to define the boundaries\n * @param {Boolean} fixedPosition - Is in fixed position mode\n * @returns {Object} Coordinates of the boundaries\n */\n\n\nfunction getBoundaries(popper, reference, padding, boundariesElement) {\n  var fixedPosition = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : false; // NOTE: 1 DOM access here\n\n  var boundaries = {\n    top: 0,\n    left: 0\n  };\n  var offsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, getReferenceNode(reference)); // Handle viewport case\n\n  if (boundariesElement === 'viewport') {\n    boundaries = getViewportOffsetRectRelativeToArtbitraryNode(offsetParent, fixedPosition);\n  } else {\n    // Handle other cases based on DOM element used as boundaries\n    var boundariesNode = void 0;\n\n    if (boundariesElement === 'scrollParent') {\n      boundariesNode = getScrollParent(getParentNode(reference));\n\n      if (boundariesNode.nodeName === 'BODY') {\n        boundariesNode = popper.ownerDocument.documentElement;\n      }\n    } else if (boundariesElement === 'window') {\n      boundariesNode = popper.ownerDocument.documentElement;\n    } else {\n      boundariesNode = boundariesElement;\n    }\n\n    var offsets = getOffsetRectRelativeToArbitraryNode(boundariesNode, offsetParent, fixedPosition); // In case of HTML, we need a different computation\n\n    if (boundariesNode.nodeName === 'HTML' && !isFixed(offsetParent)) {\n      var _getWindowSizes = getWindowSizes(popper.ownerDocument),\n          height = _getWindowSizes.height,\n          width = _getWindowSizes.width;\n\n      boundaries.top += offsets.top - offsets.marginTop;\n      boundaries.bottom = height + offsets.top;\n      boundaries.left += offsets.left - offsets.marginLeft;\n      boundaries.right = width + offsets.left;\n    } else {\n      // for all the other DOM elements, this one is good\n      boundaries = offsets;\n    }\n  } // Add paddings\n\n\n  padding = padding || 0;\n  var isPaddingNumber = typeof padding === 'number';\n  boundaries.left += isPaddingNumber ? padding : padding.left || 0;\n  boundaries.top += isPaddingNumber ? padding : padding.top || 0;\n  boundaries.right -= isPaddingNumber ? padding : padding.right || 0;\n  boundaries.bottom -= isPaddingNumber ? padding : padding.bottom || 0;\n  return boundaries;\n}\n\nfunction getArea(_ref) {\n  var width = _ref.width,\n      height = _ref.height;\n  return width * height;\n}\n/**\n * Utility used to transform the `auto` placement to the placement with more\n * available space.\n * @method\n * @memberof Popper.Utils\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\n\n\nfunction computeAutoPlacement(placement, refRect, popper, reference, boundariesElement) {\n  var padding = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 0;\n\n  if (placement.indexOf('auto') === -1) {\n    return placement;\n  }\n\n  var boundaries = getBoundaries(popper, reference, padding, boundariesElement);\n  var rects = {\n    top: {\n      width: boundaries.width,\n      height: refRect.top - boundaries.top\n    },\n    right: {\n      width: boundaries.right - refRect.right,\n      height: boundaries.height\n    },\n    bottom: {\n      width: boundaries.width,\n      height: boundaries.bottom - refRect.bottom\n    },\n    left: {\n      width: refRect.left - boundaries.left,\n      height: boundaries.height\n    }\n  };\n  var sortedAreas = Object.keys(rects).map(function (key) {\n    return _extends({\n      key: key\n    }, rects[key], {\n      area: getArea(rects[key])\n    });\n  }).sort(function (a, b) {\n    return b.area - a.area;\n  });\n  var filteredAreas = sortedAreas.filter(function (_ref2) {\n    var width = _ref2.width,\n        height = _ref2.height;\n    return width >= popper.clientWidth && height >= popper.clientHeight;\n  });\n  var computedPlacement = filteredAreas.length > 0 ? filteredAreas[0].key : sortedAreas[0].key;\n  var variation = placement.split('-')[1];\n  return computedPlacement + (variation ? '-' + variation : '');\n}\n/**\n * Get offsets to the reference element\n * @method\n * @memberof Popper.Utils\n * @param {Object} state\n * @param {Element} popper - the popper element\n * @param {Element} reference - the reference element (the popper will be relative to this)\n * @param {Element} fixedPosition - is in fixed position mode\n * @returns {Object} An object containing the offsets which will be applied to the popper\n */\n\n\nfunction getReferenceOffsets(state, popper, reference) {\n  var fixedPosition = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;\n  var commonOffsetParent = fixedPosition ? getFixedPositionOffsetParent(popper) : findCommonOffsetParent(popper, getReferenceNode(reference));\n  return getOffsetRectRelativeToArbitraryNode(reference, commonOffsetParent, fixedPosition);\n}\n/**\n * Get the outer sizes of the given element (offset size + margins)\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element\n * @returns {Object} object containing width and height properties\n */\n\n\nfunction getOuterSizes(element) {\n  var window = element.ownerDocument.defaultView;\n  var styles = window.getComputedStyle(element);\n  var x = parseFloat(styles.marginTop || 0) + parseFloat(styles.marginBottom || 0);\n  var y = parseFloat(styles.marginLeft || 0) + parseFloat(styles.marginRight || 0);\n  var result = {\n    width: element.offsetWidth + y,\n    height: element.offsetHeight + x\n  };\n  return result;\n}\n/**\n * Get the opposite placement of the given one\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement\n * @returns {String} flipped placement\n */\n\n\nfunction getOppositePlacement(placement) {\n  var hash = {\n    left: 'right',\n    right: 'left',\n    bottom: 'top',\n    top: 'bottom'\n  };\n  return placement.replace(/left|right|bottom|top/g, function (matched) {\n    return hash[matched];\n  });\n}\n/**\n * Get offsets to the popper\n * @method\n * @memberof Popper.Utils\n * @param {Object} position - CSS position the Popper will get applied\n * @param {HTMLElement} popper - the popper element\n * @param {Object} referenceOffsets - the reference offsets (the popper will be relative to this)\n * @param {String} placement - one of the valid placement options\n * @returns {Object} popperOffsets - An object containing the offsets which will be applied to the popper\n */\n\n\nfunction getPopperOffsets(popper, referenceOffsets, placement) {\n  placement = placement.split('-')[0]; // Get popper node sizes\n\n  var popperRect = getOuterSizes(popper); // Add position, width and height to our offsets object\n\n  var popperOffsets = {\n    width: popperRect.width,\n    height: popperRect.height\n  }; // depending by the popper placement we have to compute its offsets slightly differently\n\n  var isHoriz = ['right', 'left'].indexOf(placement) !== -1;\n  var mainSide = isHoriz ? 'top' : 'left';\n  var secondarySide = isHoriz ? 'left' : 'top';\n  var measurement = isHoriz ? 'height' : 'width';\n  var secondaryMeasurement = !isHoriz ? 'height' : 'width';\n  popperOffsets[mainSide] = referenceOffsets[mainSide] + referenceOffsets[measurement] / 2 - popperRect[measurement] / 2;\n\n  if (placement === secondarySide) {\n    popperOffsets[secondarySide] = referenceOffsets[secondarySide] - popperRect[secondaryMeasurement];\n  } else {\n    popperOffsets[secondarySide] = referenceOffsets[getOppositePlacement(secondarySide)];\n  }\n\n  return popperOffsets;\n}\n/**\n * Mimics the `find` method of Array\n * @method\n * @memberof Popper.Utils\n * @argument {Array} arr\n * @argument prop\n * @argument value\n * @returns index or -1\n */\n\n\nfunction find(arr, check) {\n  // use native find if supported\n  if (Array.prototype.find) {\n    return arr.find(check);\n  } // use `filter` to obtain the same behavior of `find`\n\n\n  return arr.filter(check)[0];\n}\n/**\n * Return the index of the matching object\n * @method\n * @memberof Popper.Utils\n * @argument {Array} arr\n * @argument prop\n * @argument value\n * @returns index or -1\n */\n\n\nfunction findIndex(arr, prop, value) {\n  // use native findIndex if supported\n  if (Array.prototype.findIndex) {\n    return arr.findIndex(function (cur) {\n      return cur[prop] === value;\n    });\n  } // use `find` + `indexOf` if `findIndex` isn't supported\n\n\n  var match = find(arr, function (obj) {\n    return obj[prop] === value;\n  });\n  return arr.indexOf(match);\n}\n/**\n * Loop trough the list of modifiers and run them in order,\n * each of them will then edit the data object.\n * @method\n * @memberof Popper.Utils\n * @param {dataObject} data\n * @param {Array} modifiers\n * @param {String} ends - Optional modifier name used as stopper\n * @returns {dataObject}\n */\n\n\nfunction runModifiers(modifiers, data, ends) {\n  var modifiersToRun = ends === undefined ? modifiers : modifiers.slice(0, findIndex(modifiers, 'name', ends));\n  modifiersToRun.forEach(function (modifier) {\n    if (modifier['function']) {\n      // eslint-disable-line dot-notation\n      console.warn('`modifier.function` is deprecated, use `modifier.fn`!');\n    }\n\n    var fn = modifier['function'] || modifier.fn; // eslint-disable-line dot-notation\n\n    if (modifier.enabled && isFunction(fn)) {\n      // Add properties to offsets to make them a complete clientRect object\n      // we do this before each modifier to make sure the previous one doesn't\n      // mess with these values\n      data.offsets.popper = getClientRect(data.offsets.popper);\n      data.offsets.reference = getClientRect(data.offsets.reference);\n      data = fn(data, modifier);\n    }\n  });\n  return data;\n}\n/**\n * Updates the position of the popper, computing the new offsets and applying\n * the new style.<br />\n * Prefer `scheduleUpdate` over `update` because of performance reasons.\n * @method\n * @memberof Popper\n */\n\n\nfunction update() {\n  // if popper is destroyed, don't perform any further update\n  if (this.state.isDestroyed) {\n    return;\n  }\n\n  var data = {\n    instance: this,\n    styles: {},\n    arrowStyles: {},\n    attributes: {},\n    flipped: false,\n    offsets: {}\n  }; // compute reference element offsets\n\n  data.offsets.reference = getReferenceOffsets(this.state, this.popper, this.reference, this.options.positionFixed); // compute auto placement, store placement inside the data object,\n  // modifiers will be able to edit `placement` if needed\n  // and refer to originalPlacement to know the original value\n\n  data.placement = computeAutoPlacement(this.options.placement, data.offsets.reference, this.popper, this.reference, this.options.modifiers.flip.boundariesElement, this.options.modifiers.flip.padding); // store the computed placement inside `originalPlacement`\n\n  data.originalPlacement = data.placement;\n  data.positionFixed = this.options.positionFixed; // compute the popper offsets\n\n  data.offsets.popper = getPopperOffsets(this.popper, data.offsets.reference, data.placement);\n  data.offsets.popper.position = this.options.positionFixed ? 'fixed' : 'absolute'; // run the modifiers\n\n  data = runModifiers(this.modifiers, data); // the first `update` will call `onCreate` callback\n  // the other ones will call `onUpdate` callback\n\n  if (!this.state.isCreated) {\n    this.state.isCreated = true;\n    this.options.onCreate(data);\n  } else {\n    this.options.onUpdate(data);\n  }\n}\n/**\n * Helper used to know if the given modifier is enabled.\n * @method\n * @memberof Popper.Utils\n * @returns {Boolean}\n */\n\n\nfunction isModifierEnabled(modifiers, modifierName) {\n  return modifiers.some(function (_ref) {\n    var name = _ref.name,\n        enabled = _ref.enabled;\n    return enabled && name === modifierName;\n  });\n}\n/**\n * Get the prefixed supported property name\n * @method\n * @memberof Popper.Utils\n * @argument {String} property (camelCase)\n * @returns {String} prefixed property (camelCase or PascalCase, depending on the vendor prefix)\n */\n\n\nfunction getSupportedPropertyName(property) {\n  var prefixes = [false, 'ms', 'Webkit', 'Moz', 'O'];\n  var upperProp = property.charAt(0).toUpperCase() + property.slice(1);\n\n  for (var i = 0; i < prefixes.length; i++) {\n    var prefix = prefixes[i];\n    var toCheck = prefix ? '' + prefix + upperProp : property;\n\n    if (typeof document.body.style[toCheck] !== 'undefined') {\n      return toCheck;\n    }\n  }\n\n  return null;\n}\n/**\n * Destroys the popper.\n * @method\n * @memberof Popper\n */\n\n\nfunction destroy() {\n  this.state.isDestroyed = true; // touch DOM only if `applyStyle` modifier is enabled\n\n  if (isModifierEnabled(this.modifiers, 'applyStyle')) {\n    this.popper.removeAttribute('x-placement');\n    this.popper.style.position = '';\n    this.popper.style.top = '';\n    this.popper.style.left = '';\n    this.popper.style.right = '';\n    this.popper.style.bottom = '';\n    this.popper.style.willChange = '';\n    this.popper.style[getSupportedPropertyName('transform')] = '';\n  }\n\n  this.disableEventListeners(); // remove the popper if user explicitly asked for the deletion on destroy\n  // do not use `remove` because IE11 doesn't support it\n\n  if (this.options.removeOnDestroy) {\n    this.popper.parentNode.removeChild(this.popper);\n  }\n\n  return this;\n}\n/**\n * Get the window associated with the element\n * @argument {Element} element\n * @returns {Window}\n */\n\n\nfunction getWindow(element) {\n  var ownerDocument = element.ownerDocument;\n  return ownerDocument ? ownerDocument.defaultView : window;\n}\n\nfunction attachToScrollParents(scrollParent, event, callback, scrollParents) {\n  var isBody = scrollParent.nodeName === 'BODY';\n  var target = isBody ? scrollParent.ownerDocument.defaultView : scrollParent;\n  target.addEventListener(event, callback, {\n    passive: true\n  });\n\n  if (!isBody) {\n    attachToScrollParents(getScrollParent(target.parentNode), event, callback, scrollParents);\n  }\n\n  scrollParents.push(target);\n}\n/**\n * Setup needed event listeners used to update the popper position\n * @method\n * @memberof Popper.Utils\n * @private\n */\n\n\nfunction setupEventListeners(reference, options, state, updateBound) {\n  // Resize event listener on window\n  state.updateBound = updateBound;\n  getWindow(reference).addEventListener('resize', state.updateBound, {\n    passive: true\n  }); // Scroll event listener on scroll parents\n\n  var scrollElement = getScrollParent(reference);\n  attachToScrollParents(scrollElement, 'scroll', state.updateBound, state.scrollParents);\n  state.scrollElement = scrollElement;\n  state.eventsEnabled = true;\n  return state;\n}\n/**\n * It will add resize/scroll events and start recalculating\n * position of the popper element when they are triggered.\n * @method\n * @memberof Popper\n */\n\n\nfunction enableEventListeners() {\n  if (!this.state.eventsEnabled) {\n    this.state = setupEventListeners(this.reference, this.options, this.state, this.scheduleUpdate);\n  }\n}\n/**\n * Remove event listeners used to update the popper position\n * @method\n * @memberof Popper.Utils\n * @private\n */\n\n\nfunction removeEventListeners(reference, state) {\n  // Remove resize event listener on window\n  getWindow(reference).removeEventListener('resize', state.updateBound); // Remove scroll event listener on scroll parents\n\n  state.scrollParents.forEach(function (target) {\n    target.removeEventListener('scroll', state.updateBound);\n  }); // Reset state\n\n  state.updateBound = null;\n  state.scrollParents = [];\n  state.scrollElement = null;\n  state.eventsEnabled = false;\n  return state;\n}\n/**\n * It will remove resize/scroll events and won't recalculate popper position\n * when they are triggered. It also won't trigger `onUpdate` callback anymore,\n * unless you call `update` method manually.\n * @method\n * @memberof Popper\n */\n\n\nfunction disableEventListeners() {\n  if (this.state.eventsEnabled) {\n    cancelAnimationFrame(this.scheduleUpdate);\n    this.state = removeEventListeners(this.reference, this.state);\n  }\n}\n/**\n * Tells if a given input is a number\n * @method\n * @memberof Popper.Utils\n * @param {*} input to check\n * @return {Boolean}\n */\n\n\nfunction isNumeric(n) {\n  return n !== '' && !isNaN(parseFloat(n)) && isFinite(n);\n}\n/**\n * Set the style to the given popper\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element - Element to apply the style to\n * @argument {Object} styles\n * Object with a list of properties and values which will be applied to the element\n */\n\n\nfunction setStyles(element, styles) {\n  Object.keys(styles).forEach(function (prop) {\n    var unit = ''; // add unit if the value is numeric and is one of the following\n\n    if (['width', 'height', 'top', 'right', 'bottom', 'left'].indexOf(prop) !== -1 && isNumeric(styles[prop])) {\n      unit = 'px';\n    }\n\n    element.style[prop] = styles[prop] + unit;\n  });\n}\n/**\n * Set the attributes to the given popper\n * @method\n * @memberof Popper.Utils\n * @argument {Element} element - Element to apply the attributes to\n * @argument {Object} styles\n * Object with a list of properties and values which will be applied to the element\n */\n\n\nfunction setAttributes(element, attributes) {\n  Object.keys(attributes).forEach(function (prop) {\n    var value = attributes[prop];\n\n    if (value !== false) {\n      element.setAttribute(prop, attributes[prop]);\n    } else {\n      element.removeAttribute(prop);\n    }\n  });\n}\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} data.styles - List of style properties - values to apply to popper element\n * @argument {Object} data.attributes - List of attribute properties - values to apply to popper element\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The same data object\n */\n\n\nfunction applyStyle(data) {\n  // any property present in `data.styles` will be applied to the popper,\n  // in this way we can make the 3rd party modifiers add custom styles to it\n  // Be aware, modifiers could override the properties defined in the previous\n  // lines of this modifier!\n  setStyles(data.instance.popper, data.styles); // any property present in `data.attributes` will be applied to the popper,\n  // they will be set as HTML attributes of the element\n\n  setAttributes(data.instance.popper, data.attributes); // if arrowElement is defined and arrowStyles has some properties\n\n  if (data.arrowElement && Object.keys(data.arrowStyles).length) {\n    setStyles(data.arrowElement, data.arrowStyles);\n  }\n\n  return data;\n}\n/**\n * Set the x-placement attribute before everything else because it could be used\n * to add margins to the popper margins needs to be calculated to get the\n * correct popper offsets.\n * @method\n * @memberof Popper.modifiers\n * @param {HTMLElement} reference - The reference element used to position the popper\n * @param {HTMLElement} popper - The HTML element used as popper\n * @param {Object} options - Popper.js options\n */\n\n\nfunction applyStyleOnLoad(reference, popper, options, modifierOptions, state) {\n  // compute reference element offsets\n  var referenceOffsets = getReferenceOffsets(state, popper, reference, options.positionFixed); // compute auto placement, store placement inside the data object,\n  // modifiers will be able to edit `placement` if needed\n  // and refer to originalPlacement to know the original value\n\n  var placement = computeAutoPlacement(options.placement, referenceOffsets, popper, reference, options.modifiers.flip.boundariesElement, options.modifiers.flip.padding);\n  popper.setAttribute('x-placement', placement); // Apply `position` to popper before anything else because\n  // without the position applied we can't guarantee correct computations\n\n  setStyles(popper, {\n    position: options.positionFixed ? 'fixed' : 'absolute'\n  });\n  return options;\n}\n/**\n * @function\n * @memberof Popper.Utils\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Boolean} shouldRound - If the offsets should be rounded at all\n * @returns {Object} The popper's position offsets rounded\n *\n * The tale of pixel-perfect positioning. It's still not 100% perfect, but as\n * good as it can be within reason.\n * Discussion here: https://github.com/FezVrasta/popper.js/pull/715\n *\n * Low DPI screens cause a popper to be blurry if not using full pixels (Safari\n * as well on High DPI screens).\n *\n * Firefox prefers no rounding for positioning and does not have blurriness on\n * high DPI screens.\n *\n * Only horizontal placement and left/right values need to be considered.\n */\n\n\nfunction getRoundedOffsets(data, shouldRound) {\n  var _data$offsets = data.offsets,\n      popper = _data$offsets.popper,\n      reference = _data$offsets.reference;\n  var round = Math.round,\n      floor = Math.floor;\n\n  var noRound = function noRound(v) {\n    return v;\n  };\n\n  var referenceWidth = round(reference.width);\n  var popperWidth = round(popper.width);\n  var isVertical = ['left', 'right'].indexOf(data.placement) !== -1;\n  var isVariation = data.placement.indexOf('-') !== -1;\n  var sameWidthParity = referenceWidth % 2 === popperWidth % 2;\n  var bothOddWidth = referenceWidth % 2 === 1 && popperWidth % 2 === 1;\n  var horizontalToInteger = !shouldRound ? noRound : isVertical || isVariation || sameWidthParity ? round : floor;\n  var verticalToInteger = !shouldRound ? noRound : round;\n  return {\n    left: horizontalToInteger(bothOddWidth && !isVariation && shouldRound ? popper.left - 1 : popper.left),\n    top: verticalToInteger(popper.top),\n    bottom: verticalToInteger(popper.bottom),\n    right: horizontalToInteger(popper.right)\n  };\n}\n\nvar isFirefox = isBrowser && /Firefox/i.test(navigator.userAgent);\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\n\nfunction computeStyle(data, options) {\n  var x = options.x,\n      y = options.y;\n  var popper = data.offsets.popper; // Remove this legacy support in Popper.js v2\n\n  var legacyGpuAccelerationOption = find(data.instance.modifiers, function (modifier) {\n    return modifier.name === 'applyStyle';\n  }).gpuAcceleration;\n\n  if (legacyGpuAccelerationOption !== undefined) {\n    console.warn('WARNING: `gpuAcceleration` option moved to `computeStyle` modifier and will not be supported in future versions of Popper.js!');\n  }\n\n  var gpuAcceleration = legacyGpuAccelerationOption !== undefined ? legacyGpuAccelerationOption : options.gpuAcceleration;\n  var offsetParent = getOffsetParent(data.instance.popper);\n  var offsetParentRect = getBoundingClientRect(offsetParent); // Styles\n\n  var styles = {\n    position: popper.position\n  };\n  var offsets = getRoundedOffsets(data, window.devicePixelRatio < 2 || !isFirefox);\n  var sideA = x === 'bottom' ? 'top' : 'bottom';\n  var sideB = y === 'right' ? 'left' : 'right'; // if gpuAcceleration is set to `true` and transform is supported,\n  //  we use `translate3d` to apply the position to the popper we\n  // automatically use the supported prefixed version if needed\n\n  var prefixedProperty = getSupportedPropertyName('transform'); // now, let's make a step back and look at this code closely (wtf?)\n  // If the content of the popper grows once it's been positioned, it\n  // may happen that the popper gets misplaced because of the new content\n  // overflowing its reference element\n  // To avoid this problem, we provide two options (x and y), which allow\n  // the consumer to define the offset origin.\n  // If we position a popper on top of a reference element, we can set\n  // `x` to `top` to make the popper grow towards its top instead of\n  // its bottom.\n\n  var left = void 0,\n      top = void 0;\n\n  if (sideA === 'bottom') {\n    // when offsetParent is <html> the positioning is relative to the bottom of the screen (excluding the scrollbar)\n    // and not the bottom of the html element\n    if (offsetParent.nodeName === 'HTML') {\n      top = -offsetParent.clientHeight + offsets.bottom;\n    } else {\n      top = -offsetParentRect.height + offsets.bottom;\n    }\n  } else {\n    top = offsets.top;\n  }\n\n  if (sideB === 'right') {\n    if (offsetParent.nodeName === 'HTML') {\n      left = -offsetParent.clientWidth + offsets.right;\n    } else {\n      left = -offsetParentRect.width + offsets.right;\n    }\n  } else {\n    left = offsets.left;\n  }\n\n  if (gpuAcceleration && prefixedProperty) {\n    styles[prefixedProperty] = 'translate3d(' + left + 'px, ' + top + 'px, 0)';\n    styles[sideA] = 0;\n    styles[sideB] = 0;\n    styles.willChange = 'transform';\n  } else {\n    // othwerise, we use the standard `top`, `left`, `bottom` and `right` properties\n    var invertTop = sideA === 'bottom' ? -1 : 1;\n    var invertLeft = sideB === 'right' ? -1 : 1;\n    styles[sideA] = top * invertTop;\n    styles[sideB] = left * invertLeft;\n    styles.willChange = sideA + ', ' + sideB;\n  } // Attributes\n\n\n  var attributes = {\n    'x-placement': data.placement\n  }; // Update `data` attributes, styles and arrowStyles\n\n  data.attributes = _extends({}, attributes, data.attributes);\n  data.styles = _extends({}, styles, data.styles);\n  data.arrowStyles = _extends({}, data.offsets.arrow, data.arrowStyles);\n  return data;\n}\n/**\n * Helper used to know if the given modifier depends from another one.<br />\n * It checks if the needed modifier is listed and enabled.\n * @method\n * @memberof Popper.Utils\n * @param {Array} modifiers - list of modifiers\n * @param {String} requestingName - name of requesting modifier\n * @param {String} requestedName - name of requested modifier\n * @returns {Boolean}\n */\n\n\nfunction isModifierRequired(modifiers, requestingName, requestedName) {\n  var requesting = find(modifiers, function (_ref) {\n    var name = _ref.name;\n    return name === requestingName;\n  });\n  var isRequired = !!requesting && modifiers.some(function (modifier) {\n    return modifier.name === requestedName && modifier.enabled && modifier.order < requesting.order;\n  });\n\n  if (!isRequired) {\n    var _requesting = '`' + requestingName + '`';\n\n    var requested = '`' + requestedName + '`';\n    console.warn(requested + ' modifier is required by ' + _requesting + ' modifier in order to work, be sure to include it before ' + _requesting + '!');\n  }\n\n  return isRequired;\n}\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\n\n\nfunction arrow(data, options) {\n  var _data$offsets$arrow; // arrow depends on keepTogether in order to work\n\n\n  if (!isModifierRequired(data.instance.modifiers, 'arrow', 'keepTogether')) {\n    return data;\n  }\n\n  var arrowElement = options.element; // if arrowElement is a string, suppose it's a CSS selector\n\n  if (typeof arrowElement === 'string') {\n    arrowElement = data.instance.popper.querySelector(arrowElement); // if arrowElement is not found, don't run the modifier\n\n    if (!arrowElement) {\n      return data;\n    }\n  } else {\n    // if the arrowElement isn't a query selector we must check that the\n    // provided DOM node is child of its popper node\n    if (!data.instance.popper.contains(arrowElement)) {\n      console.warn('WARNING: `arrow.element` must be child of its popper element!');\n      return data;\n    }\n  }\n\n  var placement = data.placement.split('-')[0];\n  var _data$offsets = data.offsets,\n      popper = _data$offsets.popper,\n      reference = _data$offsets.reference;\n  var isVertical = ['left', 'right'].indexOf(placement) !== -1;\n  var len = isVertical ? 'height' : 'width';\n  var sideCapitalized = isVertical ? 'Top' : 'Left';\n  var side = sideCapitalized.toLowerCase();\n  var altSide = isVertical ? 'left' : 'top';\n  var opSide = isVertical ? 'bottom' : 'right';\n  var arrowElementSize = getOuterSizes(arrowElement)[len]; //\n  // extends keepTogether behavior making sure the popper and its\n  // reference have enough pixels in conjunction\n  //\n  // top/left side\n\n  if (reference[opSide] - arrowElementSize < popper[side]) {\n    data.offsets.popper[side] -= popper[side] - (reference[opSide] - arrowElementSize);\n  } // bottom/right side\n\n\n  if (reference[side] + arrowElementSize > popper[opSide]) {\n    data.offsets.popper[side] += reference[side] + arrowElementSize - popper[opSide];\n  }\n\n  data.offsets.popper = getClientRect(data.offsets.popper); // compute center of the popper\n\n  var center = reference[side] + reference[len] / 2 - arrowElementSize / 2; // Compute the sideValue using the updated popper offsets\n  // take popper margin in account because we don't have this info available\n\n  var css = getStyleComputedProperty(data.instance.popper);\n  var popperMarginSide = parseFloat(css['margin' + sideCapitalized], 10);\n  var popperBorderSide = parseFloat(css['border' + sideCapitalized + 'Width'], 10);\n  var sideValue = center - data.offsets.popper[side] - popperMarginSide - popperBorderSide; // prevent arrowElement from being placed not contiguously to its popper\n\n  sideValue = Math.max(Math.min(popper[len] - arrowElementSize, sideValue), 0);\n  data.arrowElement = arrowElement;\n  data.offsets.arrow = (_data$offsets$arrow = {}, defineProperty(_data$offsets$arrow, side, Math.round(sideValue)), defineProperty(_data$offsets$arrow, altSide, ''), _data$offsets$arrow);\n  return data;\n}\n/**\n * Get the opposite placement variation of the given one\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement variation\n * @returns {String} flipped placement variation\n */\n\n\nfunction getOppositeVariation(variation) {\n  if (variation === 'end') {\n    return 'start';\n  } else if (variation === 'start') {\n    return 'end';\n  }\n\n  return variation;\n}\n/**\n * List of accepted placements to use as values of the `placement` option.<br />\n * Valid placements are:\n * - `auto`\n * - `top`\n * - `right`\n * - `bottom`\n * - `left`\n *\n * Each placement can have a variation from this list:\n * - `-start`\n * - `-end`\n *\n * Variations are interpreted easily if you think of them as the left to right\n * written languages. Horizontally (`top` and `bottom`), `start` is left and `end`\n * is right.<br />\n * Vertically (`left` and `right`), `start` is top and `end` is bottom.\n *\n * Some valid examples are:\n * - `top-end` (on top of reference, right aligned)\n * - `right-start` (on right of reference, top aligned)\n * - `bottom` (on bottom, centered)\n * - `auto-end` (on the side with more space available, alignment depends by placement)\n *\n * @static\n * @type {Array}\n * @enum {String}\n * @readonly\n * @method placements\n * @memberof Popper\n */\n\n\nvar placements = ['auto-start', 'auto', 'auto-end', 'top-start', 'top', 'top-end', 'right-start', 'right', 'right-end', 'bottom-end', 'bottom', 'bottom-start', 'left-end', 'left', 'left-start']; // Get rid of `auto` `auto-start` and `auto-end`\n\nvar validPlacements = placements.slice(3);\n/**\n * Given an initial placement, returns all the subsequent placements\n * clockwise (or counter-clockwise).\n *\n * @method\n * @memberof Popper.Utils\n * @argument {String} placement - A valid placement (it accepts variations)\n * @argument {Boolean} counter - Set to true to walk the placements counterclockwise\n * @returns {Array} placements including their variations\n */\n\nfunction clockwise(placement) {\n  var counter = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;\n  var index = validPlacements.indexOf(placement);\n  var arr = validPlacements.slice(index + 1).concat(validPlacements.slice(0, index));\n  return counter ? arr.reverse() : arr;\n}\n\nvar BEHAVIORS = {\n  FLIP: 'flip',\n  CLOCKWISE: 'clockwise',\n  COUNTERCLOCKWISE: 'counterclockwise'\n};\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\n\nfunction flip(data, options) {\n  // if `inner` modifier is enabled, we can't use the `flip` modifier\n  if (isModifierEnabled(data.instance.modifiers, 'inner')) {\n    return data;\n  }\n\n  if (data.flipped && data.placement === data.originalPlacement) {\n    // seems like flip is trying to loop, probably there's not enough space on any of the flippable sides\n    return data;\n  }\n\n  var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, options.boundariesElement, data.positionFixed);\n  var placement = data.placement.split('-')[0];\n  var placementOpposite = getOppositePlacement(placement);\n  var variation = data.placement.split('-')[1] || '';\n  var flipOrder = [];\n\n  switch (options.behavior) {\n    case BEHAVIORS.FLIP:\n      flipOrder = [placement, placementOpposite];\n      break;\n\n    case BEHAVIORS.CLOCKWISE:\n      flipOrder = clockwise(placement);\n      break;\n\n    case BEHAVIORS.COUNTERCLOCKWISE:\n      flipOrder = clockwise(placement, true);\n      break;\n\n    default:\n      flipOrder = options.behavior;\n  }\n\n  flipOrder.forEach(function (step, index) {\n    if (placement !== step || flipOrder.length === index + 1) {\n      return data;\n    }\n\n    placement = data.placement.split('-')[0];\n    placementOpposite = getOppositePlacement(placement);\n    var popperOffsets = data.offsets.popper;\n    var refOffsets = data.offsets.reference; // using floor because the reference offsets may contain decimals we are not going to consider here\n\n    var floor = Math.floor;\n    var overlapsRef = placement === 'left' && floor(popperOffsets.right) > floor(refOffsets.left) || placement === 'right' && floor(popperOffsets.left) < floor(refOffsets.right) || placement === 'top' && floor(popperOffsets.bottom) > floor(refOffsets.top) || placement === 'bottom' && floor(popperOffsets.top) < floor(refOffsets.bottom);\n    var overflowsLeft = floor(popperOffsets.left) < floor(boundaries.left);\n    var overflowsRight = floor(popperOffsets.right) > floor(boundaries.right);\n    var overflowsTop = floor(popperOffsets.top) < floor(boundaries.top);\n    var overflowsBottom = floor(popperOffsets.bottom) > floor(boundaries.bottom);\n    var overflowsBoundaries = placement === 'left' && overflowsLeft || placement === 'right' && overflowsRight || placement === 'top' && overflowsTop || placement === 'bottom' && overflowsBottom; // flip the variation if required\n\n    var isVertical = ['top', 'bottom'].indexOf(placement) !== -1; // flips variation if reference element overflows boundaries\n\n    var flippedVariationByRef = !!options.flipVariations && (isVertical && variation === 'start' && overflowsLeft || isVertical && variation === 'end' && overflowsRight || !isVertical && variation === 'start' && overflowsTop || !isVertical && variation === 'end' && overflowsBottom); // flips variation if popper content overflows boundaries\n\n    var flippedVariationByContent = !!options.flipVariationsByContent && (isVertical && variation === 'start' && overflowsRight || isVertical && variation === 'end' && overflowsLeft || !isVertical && variation === 'start' && overflowsBottom || !isVertical && variation === 'end' && overflowsTop);\n    var flippedVariation = flippedVariationByRef || flippedVariationByContent;\n\n    if (overlapsRef || overflowsBoundaries || flippedVariation) {\n      // this boolean to detect any flip loop\n      data.flipped = true;\n\n      if (overlapsRef || overflowsBoundaries) {\n        placement = flipOrder[index + 1];\n      }\n\n      if (flippedVariation) {\n        variation = getOppositeVariation(variation);\n      }\n\n      data.placement = placement + (variation ? '-' + variation : ''); // this object contains `position`, we want to preserve it along with\n      // any additional property we may add in the future\n\n      data.offsets.popper = _extends({}, data.offsets.popper, getPopperOffsets(data.instance.popper, data.offsets.reference, data.placement));\n      data = runModifiers(data.instance.modifiers, data, 'flip');\n    }\n  });\n  return data;\n}\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\n\n\nfunction keepTogether(data) {\n  var _data$offsets = data.offsets,\n      popper = _data$offsets.popper,\n      reference = _data$offsets.reference;\n  var placement = data.placement.split('-')[0];\n  var floor = Math.floor;\n  var isVertical = ['top', 'bottom'].indexOf(placement) !== -1;\n  var side = isVertical ? 'right' : 'bottom';\n  var opSide = isVertical ? 'left' : 'top';\n  var measurement = isVertical ? 'width' : 'height';\n\n  if (popper[side] < floor(reference[opSide])) {\n    data.offsets.popper[opSide] = floor(reference[opSide]) - popper[measurement];\n  }\n\n  if (popper[opSide] > floor(reference[side])) {\n    data.offsets.popper[opSide] = floor(reference[side]);\n  }\n\n  return data;\n}\n/**\n * Converts a string containing value + unit into a px value number\n * @function\n * @memberof {modifiers~offset}\n * @private\n * @argument {String} str - Value + unit string\n * @argument {String} measurement - `height` or `width`\n * @argument {Object} popperOffsets\n * @argument {Object} referenceOffsets\n * @returns {Number|String}\n * Value in pixels, or original string if no values were extracted\n */\n\n\nfunction toValue(str, measurement, popperOffsets, referenceOffsets) {\n  // separate value from unit\n  var split = str.match(/((?:\\-|\\+)?\\d*\\.?\\d*)(.*)/);\n  var value = +split[1];\n  var unit = split[2]; // If it's not a number it's an operator, I guess\n\n  if (!value) {\n    return str;\n  }\n\n  if (unit.indexOf('%') === 0) {\n    var element = void 0;\n\n    switch (unit) {\n      case '%p':\n        element = popperOffsets;\n        break;\n\n      case '%':\n      case '%r':\n      default:\n        element = referenceOffsets;\n    }\n\n    var rect = getClientRect(element);\n    return rect[measurement] / 100 * value;\n  } else if (unit === 'vh' || unit === 'vw') {\n    // if is a vh or vw, we calculate the size based on the viewport\n    var size = void 0;\n\n    if (unit === 'vh') {\n      size = Math.max(document.documentElement.clientHeight, window.innerHeight || 0);\n    } else {\n      size = Math.max(document.documentElement.clientWidth, window.innerWidth || 0);\n    }\n\n    return size / 100 * value;\n  } else {\n    // if is an explicit pixel unit, we get rid of the unit and keep the value\n    // if is an implicit unit, it's px, and we return just the value\n    return value;\n  }\n}\n/**\n * Parse an `offset` string to extrapolate `x` and `y` numeric offsets.\n * @function\n * @memberof {modifiers~offset}\n * @private\n * @argument {String} offset\n * @argument {Object} popperOffsets\n * @argument {Object} referenceOffsets\n * @argument {String} basePlacement\n * @returns {Array} a two cells array with x and y offsets in numbers\n */\n\n\nfunction parseOffset(offset, popperOffsets, referenceOffsets, basePlacement) {\n  var offsets = [0, 0]; // Use height if placement is left or right and index is 0 otherwise use width\n  // in this way the first offset will use an axis and the second one\n  // will use the other one\n\n  var useHeight = ['right', 'left'].indexOf(basePlacement) !== -1; // Split the offset string to obtain a list of values and operands\n  // The regex addresses values with the plus or minus sign in front (+10, -20, etc)\n\n  var fragments = offset.split(/(\\+|\\-)/).map(function (frag) {\n    return frag.trim();\n  }); // Detect if the offset string contains a pair of values or a single one\n  // they could be separated by comma or space\n\n  var divider = fragments.indexOf(find(fragments, function (frag) {\n    return frag.search(/,|\\s/) !== -1;\n  }));\n\n  if (fragments[divider] && fragments[divider].indexOf(',') === -1) {\n    console.warn('Offsets separated by white space(s) are deprecated, use a comma (,) instead.');\n  } // If divider is found, we divide the list of values and operands to divide\n  // them by ofset X and Y.\n\n\n  var splitRegex = /\\s*,\\s*|\\s+/;\n  var ops = divider !== -1 ? [fragments.slice(0, divider).concat([fragments[divider].split(splitRegex)[0]]), [fragments[divider].split(splitRegex)[1]].concat(fragments.slice(divider + 1))] : [fragments]; // Convert the values with units to absolute pixels to allow our computations\n\n  ops = ops.map(function (op, index) {\n    // Most of the units rely on the orientation of the popper\n    var measurement = (index === 1 ? !useHeight : useHeight) ? 'height' : 'width';\n    var mergeWithPrevious = false;\n    return op // This aggregates any `+` or `-` sign that aren't considered operators\n    // e.g.: 10 + +5 => [10, +, +5]\n    .reduce(function (a, b) {\n      if (a[a.length - 1] === '' && ['+', '-'].indexOf(b) !== -1) {\n        a[a.length - 1] = b;\n        mergeWithPrevious = true;\n        return a;\n      } else if (mergeWithPrevious) {\n        a[a.length - 1] += b;\n        mergeWithPrevious = false;\n        return a;\n      } else {\n        return a.concat(b);\n      }\n    }, []) // Here we convert the string values into number values (in px)\n    .map(function (str) {\n      return toValue(str, measurement, popperOffsets, referenceOffsets);\n    });\n  }); // Loop trough the offsets arrays and execute the operations\n\n  ops.forEach(function (op, index) {\n    op.forEach(function (frag, index2) {\n      if (isNumeric(frag)) {\n        offsets[index] += frag * (op[index2 - 1] === '-' ? -1 : 1);\n      }\n    });\n  });\n  return offsets;\n}\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @argument {Number|String} options.offset=0\n * The offset value as described in the modifier description\n * @returns {Object} The data object, properly modified\n */\n\n\nfunction offset(data, _ref) {\n  var offset = _ref.offset;\n  var placement = data.placement,\n      _data$offsets = data.offsets,\n      popper = _data$offsets.popper,\n      reference = _data$offsets.reference;\n  var basePlacement = placement.split('-')[0];\n  var offsets = void 0;\n\n  if (isNumeric(+offset)) {\n    offsets = [+offset, 0];\n  } else {\n    offsets = parseOffset(offset, popper, reference, basePlacement);\n  }\n\n  if (basePlacement === 'left') {\n    popper.top += offsets[0];\n    popper.left -= offsets[1];\n  } else if (basePlacement === 'right') {\n    popper.top += offsets[0];\n    popper.left += offsets[1];\n  } else if (basePlacement === 'top') {\n    popper.left += offsets[0];\n    popper.top -= offsets[1];\n  } else if (basePlacement === 'bottom') {\n    popper.left += offsets[0];\n    popper.top += offsets[1];\n  }\n\n  data.popper = popper;\n  return data;\n}\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\n\n\nfunction preventOverflow(data, options) {\n  var boundariesElement = options.boundariesElement || getOffsetParent(data.instance.popper); // If offsetParent is the reference element, we really want to\n  // go one step up and use the next offsetParent as reference to\n  // avoid to make this modifier completely useless and look like broken\n\n  if (data.instance.reference === boundariesElement) {\n    boundariesElement = getOffsetParent(boundariesElement);\n  } // NOTE: DOM access here\n  // resets the popper's position so that the document size can be calculated excluding\n  // the size of the popper element itself\n\n\n  var transformProp = getSupportedPropertyName('transform');\n  var popperStyles = data.instance.popper.style; // assignment to help minification\n\n  var top = popperStyles.top,\n      left = popperStyles.left,\n      transform = popperStyles[transformProp];\n  popperStyles.top = '';\n  popperStyles.left = '';\n  popperStyles[transformProp] = '';\n  var boundaries = getBoundaries(data.instance.popper, data.instance.reference, options.padding, boundariesElement, data.positionFixed); // NOTE: DOM access here\n  // restores the original style properties after the offsets have been computed\n\n  popperStyles.top = top;\n  popperStyles.left = left;\n  popperStyles[transformProp] = transform;\n  options.boundaries = boundaries;\n  var order = options.priority;\n  var popper = data.offsets.popper;\n  var check = {\n    primary: function primary(placement) {\n      var value = popper[placement];\n\n      if (popper[placement] < boundaries[placement] && !options.escapeWithReference) {\n        value = Math.max(popper[placement], boundaries[placement]);\n      }\n\n      return defineProperty({}, placement, value);\n    },\n    secondary: function secondary(placement) {\n      var mainSide = placement === 'right' ? 'left' : 'top';\n      var value = popper[mainSide];\n\n      if (popper[placement] > boundaries[placement] && !options.escapeWithReference) {\n        value = Math.min(popper[mainSide], boundaries[placement] - (placement === 'right' ? popper.width : popper.height));\n      }\n\n      return defineProperty({}, mainSide, value);\n    }\n  };\n  order.forEach(function (placement) {\n    var side = ['left', 'top'].indexOf(placement) !== -1 ? 'primary' : 'secondary';\n    popper = _extends({}, popper, check[side](placement));\n  });\n  data.offsets.popper = popper;\n  return data;\n}\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\n\n\nfunction shift(data) {\n  var placement = data.placement;\n  var basePlacement = placement.split('-')[0];\n  var shiftvariation = placement.split('-')[1]; // if shift shiftvariation is specified, run the modifier\n\n  if (shiftvariation) {\n    var _data$offsets = data.offsets,\n        reference = _data$offsets.reference,\n        popper = _data$offsets.popper;\n    var isVertical = ['bottom', 'top'].indexOf(basePlacement) !== -1;\n    var side = isVertical ? 'left' : 'top';\n    var measurement = isVertical ? 'width' : 'height';\n    var shiftOffsets = {\n      start: defineProperty({}, side, reference[side]),\n      end: defineProperty({}, side, reference[side] + reference[measurement] - popper[measurement])\n    };\n    data.offsets.popper = _extends({}, popper, shiftOffsets[shiftvariation]);\n  }\n\n  return data;\n}\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by update method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\n\n\nfunction hide(data) {\n  if (!isModifierRequired(data.instance.modifiers, 'hide', 'preventOverflow')) {\n    return data;\n  }\n\n  var refRect = data.offsets.reference;\n  var bound = find(data.instance.modifiers, function (modifier) {\n    return modifier.name === 'preventOverflow';\n  }).boundaries;\n\n  if (refRect.bottom < bound.top || refRect.left > bound.right || refRect.top > bound.bottom || refRect.right < bound.left) {\n    // Avoid unnecessary DOM access if visibility hasn't changed\n    if (data.hide === true) {\n      return data;\n    }\n\n    data.hide = true;\n    data.attributes['x-out-of-boundaries'] = '';\n  } else {\n    // Avoid unnecessary DOM access if visibility hasn't changed\n    if (data.hide === false) {\n      return data;\n    }\n\n    data.hide = false;\n    data.attributes['x-out-of-boundaries'] = false;\n  }\n\n  return data;\n}\n/**\n * @function\n * @memberof Modifiers\n * @argument {Object} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {Object} The data object, properly modified\n */\n\n\nfunction inner(data) {\n  var placement = data.placement;\n  var basePlacement = placement.split('-')[0];\n  var _data$offsets = data.offsets,\n      popper = _data$offsets.popper,\n      reference = _data$offsets.reference;\n  var isHoriz = ['left', 'right'].indexOf(basePlacement) !== -1;\n  var subtractLength = ['top', 'left'].indexOf(basePlacement) === -1;\n  popper[isHoriz ? 'left' : 'top'] = reference[basePlacement] - (subtractLength ? popper[isHoriz ? 'width' : 'height'] : 0);\n  data.placement = getOppositePlacement(placement);\n  data.offsets.popper = getClientRect(popper);\n  return data;\n}\n/**\n * Modifier function, each modifier can have a function of this type assigned\n * to its `fn` property.<br />\n * These functions will be called on each update, this means that you must\n * make sure they are performant enough to avoid performance bottlenecks.\n *\n * @function ModifierFn\n * @argument {dataObject} data - The data object generated by `update` method\n * @argument {Object} options - Modifiers configuration and options\n * @returns {dataObject} The data object, properly modified\n */\n\n/**\n * Modifiers are plugins used to alter the behavior of your poppers.<br />\n * Popper.js uses a set of 9 modifiers to provide all the basic functionalities\n * needed by the library.\n *\n * Usually you don't want to override the `order`, `fn` and `onLoad` props.\n * All the other properties are configurations that could be tweaked.\n * @namespace modifiers\n */\n\n\nvar modifiers = {\n  /**\n   * Modifier used to shift the popper on the start or end of its reference\n   * element.<br />\n   * It will read the variation of the `placement` property.<br />\n   * It can be one either `-end` or `-start`.\n   * @memberof modifiers\n   * @inner\n   */\n  shift: {\n    /** @prop {number} order=100 - Index used to define the order of execution */\n    order: 100,\n\n    /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n    enabled: true,\n\n    /** @prop {ModifierFn} */\n    fn: shift\n  },\n\n  /**\n   * The `offset` modifier can shift your popper on both its axis.\n   *\n   * It accepts the following units:\n   * - `px` or unit-less, interpreted as pixels\n   * - `%` or `%r`, percentage relative to the length of the reference element\n   * - `%p`, percentage relative to the length of the popper element\n   * - `vw`, CSS viewport width unit\n   * - `vh`, CSS viewport height unit\n   *\n   * For length is intended the main axis relative to the placement of the popper.<br />\n   * This means that if the placement is `top` or `bottom`, the length will be the\n   * `width`. In case of `left` or `right`, it will be the `height`.\n   *\n   * You can provide a single value (as `Number` or `String`), or a pair of values\n   * as `String` divided by a comma or one (or more) white spaces.<br />\n   * The latter is a deprecated method because it leads to confusion and will be\n   * removed in v2.<br />\n   * Additionally, it accepts additions and subtractions between different units.\n   * Note that multiplications and divisions aren't supported.\n   *\n   * Valid examples are:\n   * ```\n   * 10\n   * '10%'\n   * '10, 10'\n   * '10%, 10'\n   * '10 + 10%'\n   * '10 - 5vh + 3%'\n   * '-10px + 5vh, 5px - 6%'\n   * ```\n   * > **NB**: If you desire to apply offsets to your poppers in a way that may make them overlap\n   * > with their reference element, unfortunately, you will have to disable the `flip` modifier.\n   * > You can read more on this at this [issue](https://github.com/FezVrasta/popper.js/issues/373).\n   *\n   * @memberof modifiers\n   * @inner\n   */\n  offset: {\n    /** @prop {number} order=200 - Index used to define the order of execution */\n    order: 200,\n\n    /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n    enabled: true,\n\n    /** @prop {ModifierFn} */\n    fn: offset,\n\n    /** @prop {Number|String} offset=0\n     * The offset value as described in the modifier description\n     */\n    offset: 0\n  },\n\n  /**\n   * Modifier used to prevent the popper from being positioned outside the boundary.\n   *\n   * A scenario exists where the reference itself is not within the boundaries.<br />\n   * We can say it has \"escaped the boundaries\" — or just \"escaped\".<br />\n   * In this case we need to decide whether the popper should either:\n   *\n   * - detach from the reference and remain \"trapped\" in the boundaries, or\n   * - if it should ignore the boundary and \"escape with its reference\"\n   *\n   * When `escapeWithReference` is set to`true` and reference is completely\n   * outside its boundaries, the popper will overflow (or completely leave)\n   * the boundaries in order to remain attached to the edge of the reference.\n   *\n   * @memberof modifiers\n   * @inner\n   */\n  preventOverflow: {\n    /** @prop {number} order=300 - Index used to define the order of execution */\n    order: 300,\n\n    /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n    enabled: true,\n\n    /** @prop {ModifierFn} */\n    fn: preventOverflow,\n\n    /**\n     * @prop {Array} [priority=['left','right','top','bottom']]\n     * Popper will try to prevent overflow following these priorities by default,\n     * then, it could overflow on the left and on top of the `boundariesElement`\n     */\n    priority: ['left', 'right', 'top', 'bottom'],\n\n    /**\n     * @prop {number} padding=5\n     * Amount of pixel used to define a minimum distance between the boundaries\n     * and the popper. This makes sure the popper always has a little padding\n     * between the edges of its container\n     */\n    padding: 5,\n\n    /**\n     * @prop {String|HTMLElement} boundariesElement='scrollParent'\n     * Boundaries used by the modifier. Can be `scrollParent`, `window`,\n     * `viewport` or any DOM element.\n     */\n    boundariesElement: 'scrollParent'\n  },\n\n  /**\n   * Modifier used to make sure the reference and its popper stay near each other\n   * without leaving any gap between the two. Especially useful when the arrow is\n   * enabled and you want to ensure that it points to its reference element.\n   * It cares only about the first axis. You can still have poppers with margin\n   * between the popper and its reference element.\n   * @memberof modifiers\n   * @inner\n   */\n  keepTogether: {\n    /** @prop {number} order=400 - Index used to define the order of execution */\n    order: 400,\n\n    /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n    enabled: true,\n\n    /** @prop {ModifierFn} */\n    fn: keepTogether\n  },\n\n  /**\n   * This modifier is used to move the `arrowElement` of the popper to make\n   * sure it is positioned between the reference element and its popper element.\n   * It will read the outer size of the `arrowElement` node to detect how many\n   * pixels of conjunction are needed.\n   *\n   * It has no effect if no `arrowElement` is provided.\n   * @memberof modifiers\n   * @inner\n   */\n  arrow: {\n    /** @prop {number} order=500 - Index used to define the order of execution */\n    order: 500,\n\n    /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n    enabled: true,\n\n    /** @prop {ModifierFn} */\n    fn: arrow,\n\n    /** @prop {String|HTMLElement} element='[x-arrow]' - Selector or node used as arrow */\n    element: '[x-arrow]'\n  },\n\n  /**\n   * Modifier used to flip the popper's placement when it starts to overlap its\n   * reference element.\n   *\n   * Requires the `preventOverflow` modifier before it in order to work.\n   *\n   * **NOTE:** this modifier will interrupt the current update cycle and will\n   * restart it if it detects the need to flip the placement.\n   * @memberof modifiers\n   * @inner\n   */\n  flip: {\n    /** @prop {number} order=600 - Index used to define the order of execution */\n    order: 600,\n\n    /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n    enabled: true,\n\n    /** @prop {ModifierFn} */\n    fn: flip,\n\n    /**\n     * @prop {String|Array} behavior='flip'\n     * The behavior used to change the popper's placement. It can be one of\n     * `flip`, `clockwise`, `counterclockwise` or an array with a list of valid\n     * placements (with optional variations)\n     */\n    behavior: 'flip',\n\n    /**\n     * @prop {number} padding=5\n     * The popper will flip if it hits the edges of the `boundariesElement`\n     */\n    padding: 5,\n\n    /**\n     * @prop {String|HTMLElement} boundariesElement='viewport'\n     * The element which will define the boundaries of the popper position.\n     * The popper will never be placed outside of the defined boundaries\n     * (except if `keepTogether` is enabled)\n     */\n    boundariesElement: 'viewport',\n\n    /**\n     * @prop {Boolean} flipVariations=false\n     * The popper will switch placement variation between `-start` and `-end` when\n     * the reference element overlaps its boundaries.\n     *\n     * The original placement should have a set variation.\n     */\n    flipVariations: false,\n\n    /**\n     * @prop {Boolean} flipVariationsByContent=false\n     * The popper will switch placement variation between `-start` and `-end` when\n     * the popper element overlaps its reference boundaries.\n     *\n     * The original placement should have a set variation.\n     */\n    flipVariationsByContent: false\n  },\n\n  /**\n   * Modifier used to make the popper flow toward the inner of the reference element.\n   * By default, when this modifier is disabled, the popper will be placed outside\n   * the reference element.\n   * @memberof modifiers\n   * @inner\n   */\n  inner: {\n    /** @prop {number} order=700 - Index used to define the order of execution */\n    order: 700,\n\n    /** @prop {Boolean} enabled=false - Whether the modifier is enabled or not */\n    enabled: false,\n\n    /** @prop {ModifierFn} */\n    fn: inner\n  },\n\n  /**\n   * Modifier used to hide the popper when its reference element is outside of the\n   * popper boundaries. It will set a `x-out-of-boundaries` attribute which can\n   * be used to hide with a CSS selector the popper when its reference is\n   * out of boundaries.\n   *\n   * Requires the `preventOverflow` modifier before it in order to work.\n   * @memberof modifiers\n   * @inner\n   */\n  hide: {\n    /** @prop {number} order=800 - Index used to define the order of execution */\n    order: 800,\n\n    /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n    enabled: true,\n\n    /** @prop {ModifierFn} */\n    fn: hide\n  },\n\n  /**\n   * Computes the style that will be applied to the popper element to gets\n   * properly positioned.\n   *\n   * Note that this modifier will not touch the DOM, it just prepares the styles\n   * so that `applyStyle` modifier can apply it. This separation is useful\n   * in case you need to replace `applyStyle` with a custom implementation.\n   *\n   * This modifier has `850` as `order` value to maintain backward compatibility\n   * with previous versions of Popper.js. Expect the modifiers ordering method\n   * to change in future major versions of the library.\n   *\n   * @memberof modifiers\n   * @inner\n   */\n  computeStyle: {\n    /** @prop {number} order=850 - Index used to define the order of execution */\n    order: 850,\n\n    /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n    enabled: true,\n\n    /** @prop {ModifierFn} */\n    fn: computeStyle,\n\n    /**\n     * @prop {Boolean} gpuAcceleration=true\n     * If true, it uses the CSS 3D transformation to position the popper.\n     * Otherwise, it will use the `top` and `left` properties\n     */\n    gpuAcceleration: true,\n\n    /**\n     * @prop {string} [x='bottom']\n     * Where to anchor the X axis (`bottom` or `top`). AKA X offset origin.\n     * Change this if your popper should grow in a direction different from `bottom`\n     */\n    x: 'bottom',\n\n    /**\n     * @prop {string} [x='left']\n     * Where to anchor the Y axis (`left` or `right`). AKA Y offset origin.\n     * Change this if your popper should grow in a direction different from `right`\n     */\n    y: 'right'\n  },\n\n  /**\n   * Applies the computed styles to the popper element.\n   *\n   * All the DOM manipulations are limited to this modifier. This is useful in case\n   * you want to integrate Popper.js inside a framework or view library and you\n   * want to delegate all the DOM manipulations to it.\n   *\n   * Note that if you disable this modifier, you must make sure the popper element\n   * has its position set to `absolute` before Popper.js can do its work!\n   *\n   * Just disable this modifier and define your own to achieve the desired effect.\n   *\n   * @memberof modifiers\n   * @inner\n   */\n  applyStyle: {\n    /** @prop {number} order=900 - Index used to define the order of execution */\n    order: 900,\n\n    /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */\n    enabled: true,\n\n    /** @prop {ModifierFn} */\n    fn: applyStyle,\n\n    /** @prop {Function} */\n    onLoad: applyStyleOnLoad,\n\n    /**\n     * @deprecated since version 1.10.0, the property moved to `computeStyle` modifier\n     * @prop {Boolean} gpuAcceleration=true\n     * If true, it uses the CSS 3D transformation to position the popper.\n     * Otherwise, it will use the `top` and `left` properties\n     */\n    gpuAcceleration: undefined\n  }\n};\n/**\n * The `dataObject` is an object containing all the information used by Popper.js.\n * This object is passed to modifiers and to the `onCreate` and `onUpdate` callbacks.\n * @name dataObject\n * @property {Object} data.instance The Popper.js instance\n * @property {String} data.placement Placement applied to popper\n * @property {String} data.originalPlacement Placement originally defined on init\n * @property {Boolean} data.flipped True if popper has been flipped by flip modifier\n * @property {Boolean} data.hide True if the reference element is out of boundaries, useful to know when to hide the popper\n * @property {HTMLElement} data.arrowElement Node used as arrow by arrow modifier\n * @property {Object} data.styles Any CSS property defined here will be applied to the popper. It expects the JavaScript nomenclature (eg. `marginBottom`)\n * @property {Object} data.arrowStyles Any CSS property defined here will be applied to the popper arrow. It expects the JavaScript nomenclature (eg. `marginBottom`)\n * @property {Object} data.boundaries Offsets of the popper boundaries\n * @property {Object} data.offsets The measurements of popper, reference and arrow elements\n * @property {Object} data.offsets.popper `top`, `left`, `width`, `height` values\n * @property {Object} data.offsets.reference `top`, `left`, `width`, `height` values\n * @property {Object} data.offsets.arrow] `top` and `left` offsets, only one of them will be different from 0\n */\n\n/**\n * Default options provided to Popper.js constructor.<br />\n * These can be overridden using the `options` argument of Popper.js.<br />\n * To override an option, simply pass an object with the same\n * structure of the `options` object, as the 3rd argument. For example:\n * ```\n * new Popper(ref, pop, {\n *   modifiers: {\n *     preventOverflow: { enabled: false }\n *   }\n * })\n * ```\n * @type {Object}\n * @static\n * @memberof Popper\n */\n\nvar Defaults = {\n  /**\n   * Popper's placement.\n   * @prop {Popper.placements} placement='bottom'\n   */\n  placement: 'bottom',\n\n  /**\n   * Set this to true if you want popper to position it self in 'fixed' mode\n   * @prop {Boolean} positionFixed=false\n   */\n  positionFixed: false,\n\n  /**\n   * Whether events (resize, scroll) are initially enabled.\n   * @prop {Boolean} eventsEnabled=true\n   */\n  eventsEnabled: true,\n\n  /**\n   * Set to true if you want to automatically remove the popper when\n   * you call the `destroy` method.\n   * @prop {Boolean} removeOnDestroy=false\n   */\n  removeOnDestroy: false,\n\n  /**\n   * Callback called when the popper is created.<br />\n   * By default, it is set to no-op.<br />\n   * Access Popper.js instance with `data.instance`.\n   * @prop {onCreate}\n   */\n  onCreate: function onCreate() {},\n\n  /**\n   * Callback called when the popper is updated. This callback is not called\n   * on the initialization/creation of the popper, but only on subsequent\n   * updates.<br />\n   * By default, it is set to no-op.<br />\n   * Access Popper.js instance with `data.instance`.\n   * @prop {onUpdate}\n   */\n  onUpdate: function onUpdate() {},\n\n  /**\n   * List of modifiers used to modify the offsets before they are applied to the popper.\n   * They provide most of the functionalities of Popper.js.\n   * @prop {modifiers}\n   */\n  modifiers: modifiers\n};\n/**\n * @callback onCreate\n * @param {dataObject} data\n */\n\n/**\n * @callback onUpdate\n * @param {dataObject} data\n */\n// Utils\n// Methods\n\nvar Popper = function () {\n  /**\n   * Creates a new Popper.js instance.\n   * @class Popper\n   * @param {Element|referenceObject} reference - The reference element used to position the popper\n   * @param {Element} popper - The HTML / XML element used as the popper\n   * @param {Object} options - Your custom options to override the ones defined in [Defaults](#defaults)\n   * @return {Object} instance - The generated Popper.js instance\n   */\n  function Popper(reference, popper) {\n    var _this = this;\n\n    var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n    classCallCheck(this, Popper);\n\n    this.scheduleUpdate = function () {\n      return requestAnimationFrame(_this.update);\n    }; // make update() debounced, so that it only runs at most once-per-tick\n\n\n    this.update = debounce(this.update.bind(this)); // with {} we create a new object with the options inside it\n\n    this.options = _extends({}, Popper.Defaults, options); // init state\n\n    this.state = {\n      isDestroyed: false,\n      isCreated: false,\n      scrollParents: []\n    }; // get reference and popper elements (allow jQuery wrappers)\n\n    this.reference = reference && reference.jquery ? reference[0] : reference;\n    this.popper = popper && popper.jquery ? popper[0] : popper; // Deep merge modifiers options\n\n    this.options.modifiers = {};\n    Object.keys(_extends({}, Popper.Defaults.modifiers, options.modifiers)).forEach(function (name) {\n      _this.options.modifiers[name] = _extends({}, Popper.Defaults.modifiers[name] || {}, options.modifiers ? options.modifiers[name] : {});\n    }); // Refactoring modifiers' list (Object => Array)\n\n    this.modifiers = Object.keys(this.options.modifiers).map(function (name) {\n      return _extends({\n        name: name\n      }, _this.options.modifiers[name]);\n    }) // sort the modifiers by order\n    .sort(function (a, b) {\n      return a.order - b.order;\n    }); // modifiers have the ability to execute arbitrary code when Popper.js get inited\n    // such code is executed in the same order of its modifier\n    // they could add new properties to their options configuration\n    // BE AWARE: don't add options to `options.modifiers.name` but to `modifierOptions`!\n\n    this.modifiers.forEach(function (modifierOptions) {\n      if (modifierOptions.enabled && isFunction(modifierOptions.onLoad)) {\n        modifierOptions.onLoad(_this.reference, _this.popper, _this.options, modifierOptions, _this.state);\n      }\n    }); // fire the first update to position the popper in the right place\n\n    this.update();\n    var eventsEnabled = this.options.eventsEnabled;\n\n    if (eventsEnabled) {\n      // setup event listeners, they will take care of update the position in specific situations\n      this.enableEventListeners();\n    }\n\n    this.state.eventsEnabled = eventsEnabled;\n  } // We can't use class properties because they don't get listed in the\n  // class prototype and break stuff like Sinon stubs\n\n\n  createClass(Popper, [{\n    key: 'update',\n    value: function update$$1() {\n      return update.call(this);\n    }\n  }, {\n    key: 'destroy',\n    value: function destroy$$1() {\n      return destroy.call(this);\n    }\n  }, {\n    key: 'enableEventListeners',\n    value: function enableEventListeners$$1() {\n      return enableEventListeners.call(this);\n    }\n  }, {\n    key: 'disableEventListeners',\n    value: function disableEventListeners$$1() {\n      return disableEventListeners.call(this);\n    }\n    /**\n     * Schedules an update. It will run on the next UI update available.\n     * @method scheduleUpdate\n     * @memberof Popper\n     */\n\n    /**\n     * Collection of utilities useful when writing custom modifiers.\n     * Starting from version 1.7, this method is available only if you\n     * include `popper-utils.js` before `popper.js`.\n     *\n     * **DEPRECATION**: This way to access PopperUtils is deprecated\n     * and will be removed in v2! Use the PopperUtils module directly instead.\n     * Due to the high instability of the methods contained in Utils, we can't\n     * guarantee them to follow semver. Use them at your own risk!\n     * @static\n     * @private\n     * @type {Object}\n     * @deprecated since version 1.8\n     * @member Utils\n     * @memberof Popper\n     */\n\n  }]);\n  return Popper;\n}();\n/**\n * The `referenceObject` is an object that provides an interface compatible with Popper.js\n * and lets you use it as replacement of a real DOM node.<br />\n * You can use this method to position a popper relatively to a set of coordinates\n * in case you don't have a DOM node to use as reference.\n *\n * ```\n * new Popper(referenceObject, popperNode);\n * ```\n *\n * NB: This feature isn't supported in Internet Explorer 10.\n * @name referenceObject\n * @property {Function} data.getBoundingClientRect\n * A function that returns a set of coordinates compatible with the native `getBoundingClientRect` method.\n * @property {number} data.clientWidth\n * An ES6 getter that will return the width of the virtual reference element.\n * @property {number} data.clientHeight\n * An ES6 getter that will return the height of the virtual reference element.\n */\n\n\nPopper.Utils = (typeof window !== 'undefined' ? window : global).PopperUtils;\nPopper.placements = placements;\nPopper.Defaults = Defaults;\nexport default Popper;","// This file is automatically compiled by Webpack, along with any other files\n// present in this directory. You're encouraged to place your actual application logic in\n// a relevant structure within app/javascript and only use these pack files to reference\n// that code so it'll be compiled.\n\nrequire(\"@rails/ujs\").start()\nrequire(\"turbolinks\").start()\nrequire(\"@rails/activestorage\").start()\nrequire(\"channels\")\n\n// Uncomment to copy all static images under ../images to the output folder and reference\n// them with the image_pack_tag helper in views (e.g <%= image_pack_tag 'rails.png' %>)\n// or the `imagePath` JavaScript helper below.\n//\n// const images = require.context('../images', true)\n// const imagePath = (name) => images(name, true)\n\nrequire(\"trix\")\nrequire(\"@rails/actiontext\")\n\nrequire(\"jquery\")\nrequire(\"moment\")\nrequire(\"moment/locale/ja\")\nrequire(\"fullcalendar\")\nrequire(\"bootstrap4-datetimepicker\")\n//require(\"tempusdominus-bootstrap-4\")\n//require(\"i18n\")\nrequire(\"bootstrap\")\nrequire(\"xlsx-populate\")\nrequire(\"papaparse\")\nrequire(\"dexie\")\nrequire(\"slick-carousel\")\nrequire(\"select2\")\nrequire(\"encoding-japanese\")\n\nrequire(\"packs/header\")\nrequire(\"packs/welcome\")\nrequire(\"packs/user\")\nrequire(\"packs/user_menu\")\nrequire(\"packs/datetimepicker\")\nrequire(\"packs/calendar_base_params\")\nrequire(\"packs/closed_day_calendar\")\nrequire(\"packs/price_common\")\nrequire(\"packs/reservation_calendar\")\nrequire(\"packs/preview_image\")\nrequire(\"packs/mail_template\")\nrequire(\"packs/excel\")\nrequire(\"packs/slideshow\")\nrequire(\"packs/slick\")\nrequire(\"packs/reservation\")\nrequire(\"packs/reservation_slot.js\")\nrequire(\"packs/object_assign\")\nrequire(\"packs/select2\")\nrequire(\"packs/promise\")\nrequire(\"packs/room\")\nrequire(\"packs/fixture\")\nrequire(\"packs/raffle_calendar\")\n\nrequire(\"packs/common\")\n\nrequire(\"packs/facility_room_select\")\nrequire(\"packs/facility\")\nrequire(\"packs/group\")\nrequire(\"packs/requested_setting\")\nrequire(\"packs/user_type_setting\")\nrequire(\"packs/use_report_template\")\n","function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n/*\nUnobtrusive JavaScript\nhttps://github.com/rails/rails/blob/master/actionview/app/assets/javascripts\nReleased under the MIT license\n */\n(function () {\n  var context = this;\n  (function () {\n    (function () {\n      this.Rails = {\n        linkClickSelector: 'a[data-confirm], a[data-method], a[data-remote]:not([disabled]), a[data-disable-with], a[data-disable]',\n        buttonClickSelector: {\n          selector: 'button[data-remote]:not([form]), button[data-confirm]:not([form])',\n          exclude: 'form button'\n        },\n        inputChangeSelector: 'select[data-remote], input[data-remote], textarea[data-remote]',\n        formSubmitSelector: 'form',\n        formInputClickSelector: 'form input[type=submit], form input[type=image], form button[type=submit], form button:not([type]), input[type=submit][form], input[type=image][form], button[type=submit][form], button[form]:not([type])',\n        formDisableSelector: 'input[data-disable-with]:enabled, button[data-disable-with]:enabled, textarea[data-disable-with]:enabled, input[data-disable]:enabled, button[data-disable]:enabled, textarea[data-disable]:enabled',\n        formEnableSelector: 'input[data-disable-with]:disabled, button[data-disable-with]:disabled, textarea[data-disable-with]:disabled, input[data-disable]:disabled, button[data-disable]:disabled, textarea[data-disable]:disabled',\n        fileInputSelector: 'input[name][type=file]:not([disabled])',\n        linkDisableSelector: 'a[data-disable-with], a[data-disable]',\n        buttonDisableSelector: 'button[data-remote][data-disable-with], button[data-remote][data-disable]'\n      };\n    }).call(this);\n  }).call(context);\n  var Rails = context.Rails;\n  (function () {\n    (function () {\n      var nonce;\n      nonce = null;\n\n      Rails.loadCSPNonce = function () {\n        var ref;\n        return nonce = (ref = document.querySelector(\"meta[name=csp-nonce]\")) != null ? ref.content : void 0;\n      };\n\n      Rails.cspNonce = function () {\n        return nonce != null ? nonce : Rails.loadCSPNonce();\n      };\n    }).call(this);\n    (function () {\n      var expando, m;\n      m = Element.prototype.matches || Element.prototype.matchesSelector || Element.prototype.mozMatchesSelector || Element.prototype.msMatchesSelector || Element.prototype.oMatchesSelector || Element.prototype.webkitMatchesSelector;\n\n      Rails.matches = function (element, selector) {\n        if (selector.exclude != null) {\n          return m.call(element, selector.selector) && !m.call(element, selector.exclude);\n        } else {\n          return m.call(element, selector);\n        }\n      };\n\n      expando = '_ujsData';\n\n      Rails.getData = function (element, key) {\n        var ref;\n        return (ref = element[expando]) != null ? ref[key] : void 0;\n      };\n\n      Rails.setData = function (element, key, value) {\n        if (element[expando] == null) {\n          element[expando] = {};\n        }\n\n        return element[expando][key] = value;\n      };\n\n      Rails.$ = function (selector) {\n        return Array.prototype.slice.call(document.querySelectorAll(selector));\n      };\n    }).call(this);\n    (function () {\n      var $, csrfParam, csrfToken;\n      $ = Rails.$;\n\n      csrfToken = Rails.csrfToken = function () {\n        var meta;\n        meta = document.querySelector('meta[name=csrf-token]');\n        return meta && meta.content;\n      };\n\n      csrfParam = Rails.csrfParam = function () {\n        var meta;\n        meta = document.querySelector('meta[name=csrf-param]');\n        return meta && meta.content;\n      };\n\n      Rails.CSRFProtection = function (xhr) {\n        var token;\n        token = csrfToken();\n\n        if (token != null) {\n          return xhr.setRequestHeader('X-CSRF-Token', token);\n        }\n      };\n\n      Rails.refreshCSRFTokens = function () {\n        var param, token;\n        token = csrfToken();\n        param = csrfParam();\n\n        if (token != null && param != null) {\n          return $('form input[name=\"' + param + '\"]').forEach(function (input) {\n            return input.value = token;\n          });\n        }\n      };\n    }).call(this);\n    (function () {\n      var CustomEvent, fire, matches, preventDefault;\n      matches = Rails.matches;\n      CustomEvent = window.CustomEvent;\n\n      if (typeof CustomEvent !== 'function') {\n        CustomEvent = function CustomEvent(event, params) {\n          var evt;\n          evt = document.createEvent('CustomEvent');\n          evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail);\n          return evt;\n        };\n\n        CustomEvent.prototype = window.Event.prototype;\n        preventDefault = CustomEvent.prototype.preventDefault;\n\n        CustomEvent.prototype.preventDefault = function () {\n          var result;\n          result = preventDefault.call(this);\n\n          if (this.cancelable && !this.defaultPrevented) {\n            Object.defineProperty(this, 'defaultPrevented', {\n              get: function get() {\n                return true;\n              }\n            });\n          }\n\n          return result;\n        };\n      }\n\n      fire = Rails.fire = function (obj, name, data) {\n        var event;\n        event = new CustomEvent(name, {\n          bubbles: true,\n          cancelable: true,\n          detail: data\n        });\n        obj.dispatchEvent(event);\n        return !event.defaultPrevented;\n      };\n\n      Rails.stopEverything = function (e) {\n        fire(e.target, 'ujs:everythingStopped');\n        e.preventDefault();\n        e.stopPropagation();\n        return e.stopImmediatePropagation();\n      };\n\n      Rails.delegate = function (element, selector, eventType, handler) {\n        return element.addEventListener(eventType, function (e) {\n          var target;\n          target = e.target;\n\n          while (!(!(target instanceof Element) || matches(target, selector))) {\n            target = target.parentNode;\n          }\n\n          if (target instanceof Element && handler.call(target, e) === false) {\n            e.preventDefault();\n            return e.stopPropagation();\n          }\n        });\n      };\n    }).call(this);\n    (function () {\n      var AcceptHeaders, CSRFProtection, createXHR, cspNonce, fire, prepareOptions, processResponse;\n      cspNonce = Rails.cspNonce, CSRFProtection = Rails.CSRFProtection, fire = Rails.fire;\n      AcceptHeaders = {\n        '*': '*/*',\n        text: 'text/plain',\n        html: 'text/html',\n        xml: 'application/xml, text/xml',\n        json: 'application/json, text/javascript',\n        script: 'text/javascript, application/javascript, application/ecmascript, application/x-ecmascript'\n      };\n\n      Rails.ajax = function (options) {\n        var xhr;\n        options = prepareOptions(options);\n        xhr = createXHR(options, function () {\n          var ref, response;\n          response = processResponse((ref = xhr.response) != null ? ref : xhr.responseText, xhr.getResponseHeader('Content-Type'));\n\n          if (Math.floor(xhr.status / 100) === 2) {\n            if (typeof options.success === \"function\") {\n              options.success(response, xhr.statusText, xhr);\n            }\n          } else {\n            if (typeof options.error === \"function\") {\n              options.error(response, xhr.statusText, xhr);\n            }\n          }\n\n          return typeof options.complete === \"function\" ? options.complete(xhr, xhr.statusText) : void 0;\n        });\n\n        if (options.beforeSend != null && !options.beforeSend(xhr, options)) {\n          return false;\n        }\n\n        if (xhr.readyState === XMLHttpRequest.OPENED) {\n          return xhr.send(options.data);\n        }\n      };\n\n      prepareOptions = function prepareOptions(options) {\n        options.url = options.url || location.href;\n        options.type = options.type.toUpperCase();\n\n        if (options.type === 'GET' && options.data) {\n          if (options.url.indexOf('?') < 0) {\n            options.url += '?' + options.data;\n          } else {\n            options.url += '&' + options.data;\n          }\n        }\n\n        if (AcceptHeaders[options.dataType] == null) {\n          options.dataType = '*';\n        }\n\n        options.accept = AcceptHeaders[options.dataType];\n\n        if (options.dataType !== '*') {\n          options.accept += ', */*; q=0.01';\n        }\n\n        return options;\n      };\n\n      createXHR = function createXHR(options, done) {\n        var xhr;\n        xhr = new XMLHttpRequest();\n        xhr.open(options.type, options.url, true);\n        xhr.setRequestHeader('Accept', options.accept);\n\n        if (typeof options.data === 'string') {\n          xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8');\n        }\n\n        if (!options.crossDomain) {\n          xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');\n        }\n\n        CSRFProtection(xhr);\n        xhr.withCredentials = !!options.withCredentials;\n\n        xhr.onreadystatechange = function () {\n          if (xhr.readyState === XMLHttpRequest.DONE) {\n            return done(xhr);\n          }\n        };\n\n        return xhr;\n      };\n\n      processResponse = function processResponse(response, type) {\n        var parser, script;\n\n        if (typeof response === 'string' && typeof type === 'string') {\n          if (type.match(/\\bjson\\b/)) {\n            try {\n              response = JSON.parse(response);\n            } catch (error) {}\n          } else if (type.match(/\\b(?:java|ecma)script\\b/)) {\n            script = document.createElement('script');\n            script.setAttribute('nonce', cspNonce());\n            script.text = response;\n            document.head.appendChild(script).parentNode.removeChild(script);\n          } else if (type.match(/\\b(xml|html|svg)\\b/)) {\n            parser = new DOMParser();\n            type = type.replace(/;.+/, '');\n\n            try {\n              response = parser.parseFromString(response, type);\n            } catch (error) {}\n          }\n        }\n\n        return response;\n      };\n\n      Rails.href = function (element) {\n        return element.href;\n      };\n\n      Rails.isCrossDomain = function (url) {\n        var e, originAnchor, urlAnchor;\n        originAnchor = document.createElement('a');\n        originAnchor.href = location.href;\n        urlAnchor = document.createElement('a');\n\n        try {\n          urlAnchor.href = url;\n          return !((!urlAnchor.protocol || urlAnchor.protocol === ':') && !urlAnchor.host || originAnchor.protocol + '//' + originAnchor.host === urlAnchor.protocol + '//' + urlAnchor.host);\n        } catch (error) {\n          e = error;\n          return true;\n        }\n      };\n    }).call(this);\n    (function () {\n      var matches, toArray;\n      matches = Rails.matches;\n\n      toArray = function toArray(e) {\n        return Array.prototype.slice.call(e);\n      };\n\n      Rails.serializeElement = function (element, additionalParam) {\n        var inputs, params;\n        inputs = [element];\n\n        if (matches(element, 'form')) {\n          inputs = toArray(element.elements);\n        }\n\n        params = [];\n        inputs.forEach(function (input) {\n          if (!input.name || input.disabled) {\n            return;\n          }\n\n          if (input.closest('fieldset[disabled]')) {\n            return;\n          }\n\n          if (matches(input, 'select')) {\n            return toArray(input.options).forEach(function (option) {\n              if (option.selected) {\n                return params.push({\n                  name: input.name,\n                  value: option.value\n                });\n              }\n            });\n          } else if (input.checked || ['radio', 'checkbox', 'submit'].indexOf(input.type) === -1) {\n            return params.push({\n              name: input.name,\n              value: input.value\n            });\n          }\n        });\n\n        if (additionalParam) {\n          params.push(additionalParam);\n        }\n\n        return params.map(function (param) {\n          if (param.name != null) {\n            return encodeURIComponent(param.name) + \"=\" + encodeURIComponent(param.value);\n          } else {\n            return param;\n          }\n        }).join('&');\n      };\n\n      Rails.formElements = function (form, selector) {\n        if (matches(form, 'form')) {\n          return toArray(form.elements).filter(function (el) {\n            return matches(el, selector);\n          });\n        } else {\n          return toArray(form.querySelectorAll(selector));\n        }\n      };\n    }).call(this);\n    (function () {\n      var allowAction, fire, stopEverything;\n      fire = Rails.fire, stopEverything = Rails.stopEverything;\n\n      Rails.handleConfirm = function (e) {\n        if (!allowAction(this)) {\n          return stopEverything(e);\n        }\n      };\n\n      Rails.confirm = function (message, element) {\n        return confirm(message);\n      };\n\n      allowAction = function allowAction(element) {\n        var answer, callback, message;\n        message = element.getAttribute('data-confirm');\n\n        if (!message) {\n          return true;\n        }\n\n        answer = false;\n\n        if (fire(element, 'confirm')) {\n          try {\n            answer = Rails.confirm(message, element);\n          } catch (error) {}\n\n          callback = fire(element, 'confirm:complete', [answer]);\n        }\n\n        return answer && callback;\n      };\n    }).call(this);\n    (function () {\n      var disableFormElement, disableFormElements, disableLinkElement, enableFormElement, enableFormElements, enableLinkElement, formElements, getData, isXhrRedirect, matches, setData, stopEverything;\n      matches = Rails.matches, getData = Rails.getData, setData = Rails.setData, stopEverything = Rails.stopEverything, formElements = Rails.formElements;\n\n      Rails.handleDisabledElement = function (e) {\n        var element;\n        element = this;\n\n        if (element.disabled) {\n          return stopEverything(e);\n        }\n      };\n\n      Rails.enableElement = function (e) {\n        var element;\n\n        if (e instanceof Event) {\n          if (isXhrRedirect(e)) {\n            return;\n          }\n\n          element = e.target;\n        } else {\n          element = e;\n        }\n\n        if (matches(element, Rails.linkDisableSelector)) {\n          return enableLinkElement(element);\n        } else if (matches(element, Rails.buttonDisableSelector) || matches(element, Rails.formEnableSelector)) {\n          return enableFormElement(element);\n        } else if (matches(element, Rails.formSubmitSelector)) {\n          return enableFormElements(element);\n        }\n      };\n\n      Rails.disableElement = function (e) {\n        var element;\n        element = e instanceof Event ? e.target : e;\n\n        if (matches(element, Rails.linkDisableSelector)) {\n          return disableLinkElement(element);\n        } else if (matches(element, Rails.buttonDisableSelector) || matches(element, Rails.formDisableSelector)) {\n          return disableFormElement(element);\n        } else if (matches(element, Rails.formSubmitSelector)) {\n          return disableFormElements(element);\n        }\n      };\n\n      disableLinkElement = function disableLinkElement(element) {\n        var replacement;\n\n        if (getData(element, 'ujs:disabled')) {\n          return;\n        }\n\n        replacement = element.getAttribute('data-disable-with');\n\n        if (replacement != null) {\n          setData(element, 'ujs:enable-with', element.innerHTML);\n          element.innerHTML = replacement;\n        }\n\n        element.addEventListener('click', stopEverything);\n        return setData(element, 'ujs:disabled', true);\n      };\n\n      enableLinkElement = function enableLinkElement(element) {\n        var originalText;\n        originalText = getData(element, 'ujs:enable-with');\n\n        if (originalText != null) {\n          element.innerHTML = originalText;\n          setData(element, 'ujs:enable-with', null);\n        }\n\n        element.removeEventListener('click', stopEverything);\n        return setData(element, 'ujs:disabled', null);\n      };\n\n      disableFormElements = function disableFormElements(form) {\n        return formElements(form, Rails.formDisableSelector).forEach(disableFormElement);\n      };\n\n      disableFormElement = function disableFormElement(element) {\n        var replacement;\n\n        if (getData(element, 'ujs:disabled')) {\n          return;\n        }\n\n        replacement = element.getAttribute('data-disable-with');\n\n        if (replacement != null) {\n          if (matches(element, 'button')) {\n            setData(element, 'ujs:enable-with', element.innerHTML);\n            element.innerHTML = replacement;\n          } else {\n            setData(element, 'ujs:enable-with', element.value);\n            element.value = replacement;\n          }\n        }\n\n        element.disabled = true;\n        return setData(element, 'ujs:disabled', true);\n      };\n\n      enableFormElements = function enableFormElements(form) {\n        return formElements(form, Rails.formEnableSelector).forEach(enableFormElement);\n      };\n\n      enableFormElement = function enableFormElement(element) {\n        var originalText;\n        originalText = getData(element, 'ujs:enable-with');\n\n        if (originalText != null) {\n          if (matches(element, 'button')) {\n            element.innerHTML = originalText;\n          } else {\n            element.value = originalText;\n          }\n\n          setData(element, 'ujs:enable-with', null);\n        }\n\n        element.disabled = false;\n        return setData(element, 'ujs:disabled', null);\n      };\n\n      isXhrRedirect = function isXhrRedirect(event) {\n        var ref, xhr;\n        xhr = (ref = event.detail) != null ? ref[0] : void 0;\n        return (xhr != null ? xhr.getResponseHeader(\"X-Xhr-Redirect\") : void 0) != null;\n      };\n    }).call(this);\n    (function () {\n      var stopEverything;\n      stopEverything = Rails.stopEverything;\n\n      Rails.handleMethod = function (e) {\n        var csrfParam, csrfToken, form, formContent, href, link, method;\n        link = this;\n        method = link.getAttribute('data-method');\n\n        if (!method) {\n          return;\n        }\n\n        href = Rails.href(link);\n        csrfToken = Rails.csrfToken();\n        csrfParam = Rails.csrfParam();\n        form = document.createElement('form');\n        formContent = \"<input name='_method' value='\" + method + \"' type='hidden' />\";\n\n        if (csrfParam != null && csrfToken != null && !Rails.isCrossDomain(href)) {\n          formContent += \"<input name='\" + csrfParam + \"' value='\" + csrfToken + \"' type='hidden' />\";\n        }\n\n        formContent += '<input type=\"submit\" />';\n        form.method = 'post';\n        form.action = href;\n        form.target = link.target;\n        form.innerHTML = formContent;\n        form.style.display = 'none';\n        document.body.appendChild(form);\n        form.querySelector('[type=\"submit\"]').click();\n        return stopEverything(e);\n      };\n    }).call(this);\n    (function () {\n      var ajax,\n          fire,\n          getData,\n          isCrossDomain,\n          isRemote,\n          matches,\n          serializeElement,\n          setData,\n          stopEverything,\n          slice = [].slice;\n      matches = Rails.matches, getData = Rails.getData, setData = Rails.setData, fire = Rails.fire, stopEverything = Rails.stopEverything, ajax = Rails.ajax, isCrossDomain = Rails.isCrossDomain, serializeElement = Rails.serializeElement;\n\n      isRemote = function isRemote(element) {\n        var value;\n        value = element.getAttribute('data-remote');\n        return value != null && value !== 'false';\n      };\n\n      Rails.handleRemote = function (e) {\n        var button, data, dataType, element, method, url, withCredentials;\n        element = this;\n\n        if (!isRemote(element)) {\n          return true;\n        }\n\n        if (!fire(element, 'ajax:before')) {\n          fire(element, 'ajax:stopped');\n          return false;\n        }\n\n        withCredentials = element.getAttribute('data-with-credentials');\n        dataType = element.getAttribute('data-type') || 'script';\n\n        if (matches(element, Rails.formSubmitSelector)) {\n          button = getData(element, 'ujs:submit-button');\n          method = getData(element, 'ujs:submit-button-formmethod') || element.method;\n          url = getData(element, 'ujs:submit-button-formaction') || element.getAttribute('action') || location.href;\n\n          if (method.toUpperCase() === 'GET') {\n            url = url.replace(/\\?.*$/, '');\n          }\n\n          if (element.enctype === 'multipart/form-data') {\n            data = new FormData(element);\n\n            if (button != null) {\n              data.append(button.name, button.value);\n            }\n          } else {\n            data = serializeElement(element, button);\n          }\n\n          setData(element, 'ujs:submit-button', null);\n          setData(element, 'ujs:submit-button-formmethod', null);\n          setData(element, 'ujs:submit-button-formaction', null);\n        } else if (matches(element, Rails.buttonClickSelector) || matches(element, Rails.inputChangeSelector)) {\n          method = element.getAttribute('data-method');\n          url = element.getAttribute('data-url');\n          data = serializeElement(element, element.getAttribute('data-params'));\n        } else {\n          method = element.getAttribute('data-method');\n          url = Rails.href(element);\n          data = element.getAttribute('data-params');\n        }\n\n        ajax({\n          type: method || 'GET',\n          url: url,\n          data: data,\n          dataType: dataType,\n          beforeSend: function beforeSend(xhr, options) {\n            if (fire(element, 'ajax:beforeSend', [xhr, options])) {\n              return fire(element, 'ajax:send', [xhr]);\n            } else {\n              fire(element, 'ajax:stopped');\n              return false;\n            }\n          },\n          success: function success() {\n            var args;\n            args = 1 <= arguments.length ? slice.call(arguments, 0) : [];\n            return fire(element, 'ajax:success', args);\n          },\n          error: function error() {\n            var args;\n            args = 1 <= arguments.length ? slice.call(arguments, 0) : [];\n            return fire(element, 'ajax:error', args);\n          },\n          complete: function complete() {\n            var args;\n            args = 1 <= arguments.length ? slice.call(arguments, 0) : [];\n            return fire(element, 'ajax:complete', args);\n          },\n          crossDomain: isCrossDomain(url),\n          withCredentials: withCredentials != null && withCredentials !== 'false'\n        });\n        return stopEverything(e);\n      };\n\n      Rails.formSubmitButtonClick = function (e) {\n        var button, form;\n        button = this;\n        form = button.form;\n\n        if (!form) {\n          return;\n        }\n\n        if (button.name) {\n          setData(form, 'ujs:submit-button', {\n            name: button.name,\n            value: button.value\n          });\n        }\n\n        setData(form, 'ujs:formnovalidate-button', button.formNoValidate);\n        setData(form, 'ujs:submit-button-formaction', button.getAttribute('formaction'));\n        return setData(form, 'ujs:submit-button-formmethod', button.getAttribute('formmethod'));\n      };\n\n      Rails.preventInsignificantClick = function (e) {\n        var data, insignificantMetaClick, link, metaClick, method, nonPrimaryMouseClick;\n        link = this;\n        method = (link.getAttribute('data-method') || 'GET').toUpperCase();\n        data = link.getAttribute('data-params');\n        metaClick = e.metaKey || e.ctrlKey;\n        insignificantMetaClick = metaClick && method === 'GET' && !data;\n        nonPrimaryMouseClick = e.button != null && e.button !== 0;\n\n        if (nonPrimaryMouseClick || insignificantMetaClick) {\n          return e.stopImmediatePropagation();\n        }\n      };\n    }).call(this);\n    (function () {\n      var $, CSRFProtection, delegate, disableElement, enableElement, fire, formSubmitButtonClick, getData, handleConfirm, handleDisabledElement, handleMethod, handleRemote, loadCSPNonce, preventInsignificantClick, refreshCSRFTokens;\n      fire = Rails.fire, delegate = Rails.delegate, getData = Rails.getData, $ = Rails.$, refreshCSRFTokens = Rails.refreshCSRFTokens, CSRFProtection = Rails.CSRFProtection, loadCSPNonce = Rails.loadCSPNonce, enableElement = Rails.enableElement, disableElement = Rails.disableElement, handleDisabledElement = Rails.handleDisabledElement, handleConfirm = Rails.handleConfirm, preventInsignificantClick = Rails.preventInsignificantClick, handleRemote = Rails.handleRemote, formSubmitButtonClick = Rails.formSubmitButtonClick, handleMethod = Rails.handleMethod;\n\n      if (typeof jQuery !== \"undefined\" && jQuery !== null && jQuery.ajax != null) {\n        if (jQuery.rails) {\n          throw new Error('If you load both jquery_ujs and rails-ujs, use rails-ujs only.');\n        }\n\n        jQuery.rails = Rails;\n        jQuery.ajaxPrefilter(function (options, originalOptions, xhr) {\n          if (!options.crossDomain) {\n            return CSRFProtection(xhr);\n          }\n        });\n      }\n\n      Rails.start = function () {\n        if (window._rails_loaded) {\n          throw new Error('rails-ujs has already been loaded!');\n        }\n\n        window.addEventListener('pageshow', function () {\n          $(Rails.formEnableSelector).forEach(function (el) {\n            if (getData(el, 'ujs:disabled')) {\n              return enableElement(el);\n            }\n          });\n          return $(Rails.linkDisableSelector).forEach(function (el) {\n            if (getData(el, 'ujs:disabled')) {\n              return enableElement(el);\n            }\n          });\n        });\n        delegate(document, Rails.linkDisableSelector, 'ajax:complete', enableElement);\n        delegate(document, Rails.linkDisableSelector, 'ajax:stopped', enableElement);\n        delegate(document, Rails.buttonDisableSelector, 'ajax:complete', enableElement);\n        delegate(document, Rails.buttonDisableSelector, 'ajax:stopped', enableElement);\n        delegate(document, Rails.linkClickSelector, 'click', preventInsignificantClick);\n        delegate(document, Rails.linkClickSelector, 'click', handleDisabledElement);\n        delegate(document, Rails.linkClickSelector, 'click', handleConfirm);\n        delegate(document, Rails.linkClickSelector, 'click', disableElement);\n        delegate(document, Rails.linkClickSelector, 'click', handleRemote);\n        delegate(document, Rails.linkClickSelector, 'click', handleMethod);\n        delegate(document, Rails.buttonClickSelector, 'click', preventInsignificantClick);\n        delegate(document, Rails.buttonClickSelector, 'click', handleDisabledElement);\n        delegate(document, Rails.buttonClickSelector, 'click', handleConfirm);\n        delegate(document, Rails.buttonClickSelector, 'click', disableElement);\n        delegate(document, Rails.buttonClickSelector, 'click', handleRemote);\n        delegate(document, Rails.inputChangeSelector, 'change', handleDisabledElement);\n        delegate(document, Rails.inputChangeSelector, 'change', handleConfirm);\n        delegate(document, Rails.inputChangeSelector, 'change', handleRemote);\n        delegate(document, Rails.formSubmitSelector, 'submit', handleDisabledElement);\n        delegate(document, Rails.formSubmitSelector, 'submit', handleConfirm);\n        delegate(document, Rails.formSubmitSelector, 'submit', handleRemote);\n        delegate(document, Rails.formSubmitSelector, 'submit', function (e) {\n          return setTimeout(function () {\n            return disableElement(e);\n          }, 13);\n        });\n        delegate(document, Rails.formSubmitSelector, 'ajax:send', disableElement);\n        delegate(document, Rails.formSubmitSelector, 'ajax:complete', enableElement);\n        delegate(document, Rails.formInputClickSelector, 'click', preventInsignificantClick);\n        delegate(document, Rails.formInputClickSelector, 'click', handleDisabledElement);\n        delegate(document, Rails.formInputClickSelector, 'click', handleConfirm);\n        delegate(document, Rails.formInputClickSelector, 'click', formSubmitButtonClick);\n        document.addEventListener('DOMContentLoaded', refreshCSRFTokens);\n        document.addEventListener('DOMContentLoaded', loadCSPNonce);\n        return window._rails_loaded = true;\n      };\n\n      if (window.Rails === Rails && fire(document, 'rails:attachBindings')) {\n        Rails.start();\n      }\n    }).call(this);\n  }).call(this);\n\n  if ((typeof module === \"undefined\" ? \"undefined\" : _typeof(module)) === \"object\" && module.exports) {\n    module.exports = Rails;\n  } else if (typeof define === \"function\" && define.amd) {\n    define(Rails);\n  }\n}).call(this);","function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n/*\nTurbolinks 5.2.0\nCopyright © 2018 Basecamp, LLC\n */\n(function () {\n  var t = this;\n  (function () {\n    (function () {\n      this.Turbolinks = {\n        supported: function () {\n          return null != window.history.pushState && null != window.requestAnimationFrame && null != window.addEventListener;\n        }(),\n        visit: function visit(t, r) {\n          return e.controller.visit(t, r);\n        },\n        clearCache: function clearCache() {\n          return e.controller.clearCache();\n        },\n        setProgressBarDelay: function setProgressBarDelay(t) {\n          return e.controller.setProgressBarDelay(t);\n        }\n      };\n    }).call(this);\n  }).call(t);\n  var e = t.Turbolinks;\n  (function () {\n    (function () {\n      var t,\n          r,\n          n,\n          o = [].slice;\n      e.copyObject = function (t) {\n        var e, r, n;\n        r = {};\n\n        for (e in t) {\n          n = t[e], r[e] = n;\n        }\n\n        return r;\n      }, e.closest = function (e, r) {\n        return t.call(e, r);\n      }, t = function () {\n        var t, e;\n        return t = document.documentElement, null != (e = t.closest) ? e : function (t) {\n          var e;\n\n          for (e = this; e;) {\n            if (e.nodeType === Node.ELEMENT_NODE && r.call(e, t)) return e;\n            e = e.parentNode;\n          }\n        };\n      }(), e.defer = function (t) {\n        return setTimeout(t, 1);\n      }, e.throttle = function (t) {\n        var e;\n        return e = null, function () {\n          var r;\n          return r = 1 <= arguments.length ? o.call(arguments, 0) : [], null != e ? e : e = requestAnimationFrame(function (n) {\n            return function () {\n              return e = null, t.apply(n, r);\n            };\n          }(this));\n        };\n      }, e.dispatch = function (t, e) {\n        var r, o, i, s, a, u;\n        return a = null != e ? e : {}, u = a.target, r = a.cancelable, o = a.data, i = document.createEvent(\"Events\"), i.initEvent(t, !0, r === !0), i.data = null != o ? o : {}, i.cancelable && !n && (s = i.preventDefault, i.preventDefault = function () {\n          return this.defaultPrevented || Object.defineProperty(this, \"defaultPrevented\", {\n            get: function get() {\n              return !0;\n            }\n          }), s.call(this);\n        }), (null != u ? u : document).dispatchEvent(i), i;\n      }, n = function () {\n        var t;\n        return t = document.createEvent(\"Events\"), t.initEvent(\"test\", !0, !0), t.preventDefault(), t.defaultPrevented;\n      }(), e.match = function (t, e) {\n        return r.call(t, e);\n      }, r = function () {\n        var t, e, r, n;\n        return t = document.documentElement, null != (e = null != (r = null != (n = t.matchesSelector) ? n : t.webkitMatchesSelector) ? r : t.msMatchesSelector) ? e : t.mozMatchesSelector;\n      }(), e.uuid = function () {\n        var t, e, r;\n\n        for (r = \"\", t = e = 1; 36 >= e; t = ++e) {\n          r += 9 === t || 14 === t || 19 === t || 24 === t ? \"-\" : 15 === t ? \"4\" : 20 === t ? (Math.floor(4 * Math.random()) + 8).toString(16) : Math.floor(15 * Math.random()).toString(16);\n        }\n\n        return r;\n      };\n    }).call(this), function () {\n      e.Location = function () {\n        function t(t) {\n          var e, r;\n          null == t && (t = \"\"), r = document.createElement(\"a\"), r.href = t.toString(), this.absoluteURL = r.href, e = r.hash.length, 2 > e ? this.requestURL = this.absoluteURL : (this.requestURL = this.absoluteURL.slice(0, -e), this.anchor = r.hash.slice(1));\n        }\n\n        var e, r, n, o;\n        return t.wrap = function (t) {\n          return t instanceof this ? t : new this(t);\n        }, t.prototype.getOrigin = function () {\n          return this.absoluteURL.split(\"/\", 3).join(\"/\");\n        }, t.prototype.getPath = function () {\n          var t, e;\n          return null != (t = null != (e = this.requestURL.match(/\\/\\/[^\\/]*(\\/[^?;]*)/)) ? e[1] : void 0) ? t : \"/\";\n        }, t.prototype.getPathComponents = function () {\n          return this.getPath().split(\"/\").slice(1);\n        }, t.prototype.getLastPathComponent = function () {\n          return this.getPathComponents().slice(-1)[0];\n        }, t.prototype.getExtension = function () {\n          var t, e;\n          return null != (t = null != (e = this.getLastPathComponent().match(/\\.[^.]*$/)) ? e[0] : void 0) ? t : \"\";\n        }, t.prototype.isHTML = function () {\n          return this.getExtension().match(/^(?:|\\.(?:htm|html|xhtml))$/);\n        }, t.prototype.isPrefixedBy = function (t) {\n          var e;\n          return e = r(t), this.isEqualTo(t) || o(this.absoluteURL, e);\n        }, t.prototype.isEqualTo = function (t) {\n          return this.absoluteURL === (null != t ? t.absoluteURL : void 0);\n        }, t.prototype.toCacheKey = function () {\n          return this.requestURL;\n        }, t.prototype.toJSON = function () {\n          return this.absoluteURL;\n        }, t.prototype.toString = function () {\n          return this.absoluteURL;\n        }, t.prototype.valueOf = function () {\n          return this.absoluteURL;\n        }, r = function r(t) {\n          return e(t.getOrigin() + t.getPath());\n        }, e = function e(t) {\n          return n(t, \"/\") ? t : t + \"/\";\n        }, o = function o(t, e) {\n          return t.slice(0, e.length) === e;\n        }, n = function n(t, e) {\n          return t.slice(-e.length) === e;\n        }, t;\n      }();\n    }.call(this), function () {\n      var t = function t(_t, e) {\n        return function () {\n          return _t.apply(e, arguments);\n        };\n      };\n\n      e.HttpRequest = function () {\n        function r(r, n, o) {\n          this.delegate = r, this.requestCanceled = t(this.requestCanceled, this), this.requestTimedOut = t(this.requestTimedOut, this), this.requestFailed = t(this.requestFailed, this), this.requestLoaded = t(this.requestLoaded, this), this.requestProgressed = t(this.requestProgressed, this), this.url = e.Location.wrap(n).requestURL, this.referrer = e.Location.wrap(o).absoluteURL, this.createXHR();\n        }\n\n        return r.NETWORK_FAILURE = 0, r.TIMEOUT_FAILURE = -1, r.timeout = 60, r.prototype.send = function () {\n          var t;\n          return this.xhr && !this.sent ? (this.notifyApplicationBeforeRequestStart(), this.setProgress(0), this.xhr.send(), this.sent = !0, \"function\" == typeof (t = this.delegate).requestStarted ? t.requestStarted() : void 0) : void 0;\n        }, r.prototype.cancel = function () {\n          return this.xhr && this.sent ? this.xhr.abort() : void 0;\n        }, r.prototype.requestProgressed = function (t) {\n          return t.lengthComputable ? this.setProgress(t.loaded / t.total) : void 0;\n        }, r.prototype.requestLoaded = function () {\n          return this.endRequest(function (t) {\n            return function () {\n              var e;\n              return 200 <= (e = t.xhr.status) && 300 > e ? t.delegate.requestCompletedWithResponse(t.xhr.responseText, t.xhr.getResponseHeader(\"Turbolinks-Location\")) : (t.failed = !0, t.delegate.requestFailedWithStatusCode(t.xhr.status, t.xhr.responseText));\n            };\n          }(this));\n        }, r.prototype.requestFailed = function () {\n          return this.endRequest(function (t) {\n            return function () {\n              return t.failed = !0, t.delegate.requestFailedWithStatusCode(t.constructor.NETWORK_FAILURE);\n            };\n          }(this));\n        }, r.prototype.requestTimedOut = function () {\n          return this.endRequest(function (t) {\n            return function () {\n              return t.failed = !0, t.delegate.requestFailedWithStatusCode(t.constructor.TIMEOUT_FAILURE);\n            };\n          }(this));\n        }, r.prototype.requestCanceled = function () {\n          return this.endRequest();\n        }, r.prototype.notifyApplicationBeforeRequestStart = function () {\n          return e.dispatch(\"turbolinks:request-start\", {\n            data: {\n              url: this.url,\n              xhr: this.xhr\n            }\n          });\n        }, r.prototype.notifyApplicationAfterRequestEnd = function () {\n          return e.dispatch(\"turbolinks:request-end\", {\n            data: {\n              url: this.url,\n              xhr: this.xhr\n            }\n          });\n        }, r.prototype.createXHR = function () {\n          return this.xhr = new XMLHttpRequest(), this.xhr.open(\"GET\", this.url, !0), this.xhr.timeout = 1e3 * this.constructor.timeout, this.xhr.setRequestHeader(\"Accept\", \"text/html, application/xhtml+xml\"), this.xhr.setRequestHeader(\"Turbolinks-Referrer\", this.referrer), this.xhr.onprogress = this.requestProgressed, this.xhr.onload = this.requestLoaded, this.xhr.onerror = this.requestFailed, this.xhr.ontimeout = this.requestTimedOut, this.xhr.onabort = this.requestCanceled;\n        }, r.prototype.endRequest = function (t) {\n          return this.xhr ? (this.notifyApplicationAfterRequestEnd(), null != t && t.call(this), this.destroy()) : void 0;\n        }, r.prototype.setProgress = function (t) {\n          var e;\n          return this.progress = t, \"function\" == typeof (e = this.delegate).requestProgressed ? e.requestProgressed(this.progress) : void 0;\n        }, r.prototype.destroy = function () {\n          var t;\n          return this.setProgress(1), \"function\" == typeof (t = this.delegate).requestFinished && t.requestFinished(), this.delegate = null, this.xhr = null;\n        }, r;\n      }();\n    }.call(this), function () {\n      var t = function t(_t2, e) {\n        return function () {\n          return _t2.apply(e, arguments);\n        };\n      };\n\n      e.ProgressBar = function () {\n        function e() {\n          this.trickle = t(this.trickle, this), this.stylesheetElement = this.createStylesheetElement(), this.progressElement = this.createProgressElement();\n        }\n\n        var r;\n        return r = 300, e.defaultCSS = \".turbolinks-progress-bar {\\n  position: fixed;\\n  display: block;\\n  top: 0;\\n  left: 0;\\n  height: 3px;\\n  background: #0076ff;\\n  z-index: 9999;\\n  transition: width \" + r + \"ms ease-out, opacity \" + r / 2 + \"ms \" + r / 2 + \"ms ease-in;\\n  transform: translate3d(0, 0, 0);\\n}\", e.prototype.show = function () {\n          return this.visible ? void 0 : (this.visible = !0, this.installStylesheetElement(), this.installProgressElement(), this.startTrickling());\n        }, e.prototype.hide = function () {\n          return this.visible && !this.hiding ? (this.hiding = !0, this.fadeProgressElement(function (t) {\n            return function () {\n              return t.uninstallProgressElement(), t.stopTrickling(), t.visible = !1, t.hiding = !1;\n            };\n          }(this))) : void 0;\n        }, e.prototype.setValue = function (t) {\n          return this.value = t, this.refresh();\n        }, e.prototype.installStylesheetElement = function () {\n          return document.head.insertBefore(this.stylesheetElement, document.head.firstChild);\n        }, e.prototype.installProgressElement = function () {\n          return this.progressElement.style.width = 0, this.progressElement.style.opacity = 1, document.documentElement.insertBefore(this.progressElement, document.body), this.refresh();\n        }, e.prototype.fadeProgressElement = function (t) {\n          return this.progressElement.style.opacity = 0, setTimeout(t, 1.5 * r);\n        }, e.prototype.uninstallProgressElement = function () {\n          return this.progressElement.parentNode ? document.documentElement.removeChild(this.progressElement) : void 0;\n        }, e.prototype.startTrickling = function () {\n          return null != this.trickleInterval ? this.trickleInterval : this.trickleInterval = setInterval(this.trickle, r);\n        }, e.prototype.stopTrickling = function () {\n          return clearInterval(this.trickleInterval), this.trickleInterval = null;\n        }, e.prototype.trickle = function () {\n          return this.setValue(this.value + Math.random() / 100);\n        }, e.prototype.refresh = function () {\n          return requestAnimationFrame(function (t) {\n            return function () {\n              return t.progressElement.style.width = 10 + 90 * t.value + \"%\";\n            };\n          }(this));\n        }, e.prototype.createStylesheetElement = function () {\n          var t;\n          return t = document.createElement(\"style\"), t.type = \"text/css\", t.textContent = this.constructor.defaultCSS, t;\n        }, e.prototype.createProgressElement = function () {\n          var t;\n          return t = document.createElement(\"div\"), t.className = \"turbolinks-progress-bar\", t;\n        }, e;\n      }();\n    }.call(this), function () {\n      var t = function t(_t3, e) {\n        return function () {\n          return _t3.apply(e, arguments);\n        };\n      };\n\n      e.BrowserAdapter = function () {\n        function r(r) {\n          this.controller = r, this.showProgressBar = t(this.showProgressBar, this), this.progressBar = new e.ProgressBar();\n        }\n\n        var n, o, i;\n        return i = e.HttpRequest, n = i.NETWORK_FAILURE, o = i.TIMEOUT_FAILURE, r.prototype.visitProposedToLocationWithAction = function (t, e) {\n          return this.controller.startVisitToLocationWithAction(t, e);\n        }, r.prototype.visitStarted = function (t) {\n          return t.issueRequest(), t.changeHistory(), t.loadCachedSnapshot();\n        }, r.prototype.visitRequestStarted = function (t) {\n          return this.progressBar.setValue(0), t.hasCachedSnapshot() || \"restore\" !== t.action ? this.showProgressBarAfterDelay() : this.showProgressBar();\n        }, r.prototype.visitRequestProgressed = function (t) {\n          return this.progressBar.setValue(t.progress);\n        }, r.prototype.visitRequestCompleted = function (t) {\n          return t.loadResponse();\n        }, r.prototype.visitRequestFailedWithStatusCode = function (t, e) {\n          switch (e) {\n            case n:\n            case o:\n              return this.reload();\n\n            default:\n              return t.loadResponse();\n          }\n        }, r.prototype.visitRequestFinished = function (t) {\n          return this.hideProgressBar();\n        }, r.prototype.visitCompleted = function (t) {\n          return t.followRedirect();\n        }, r.prototype.pageInvalidated = function () {\n          return this.reload();\n        }, r.prototype.showProgressBarAfterDelay = function () {\n          return this.progressBarTimeout = setTimeout(this.showProgressBar, this.controller.progressBarDelay);\n        }, r.prototype.showProgressBar = function () {\n          return this.progressBar.show();\n        }, r.prototype.hideProgressBar = function () {\n          return this.progressBar.hide(), clearTimeout(this.progressBarTimeout);\n        }, r.prototype.reload = function () {\n          return window.location.reload();\n        }, r;\n      }();\n    }.call(this), function () {\n      var t = function t(_t4, e) {\n        return function () {\n          return _t4.apply(e, arguments);\n        };\n      };\n\n      e.History = function () {\n        function r(e) {\n          this.delegate = e, this.onPageLoad = t(this.onPageLoad, this), this.onPopState = t(this.onPopState, this);\n        }\n\n        return r.prototype.start = function () {\n          return this.started ? void 0 : (addEventListener(\"popstate\", this.onPopState, !1), addEventListener(\"load\", this.onPageLoad, !1), this.started = !0);\n        }, r.prototype.stop = function () {\n          return this.started ? (removeEventListener(\"popstate\", this.onPopState, !1), removeEventListener(\"load\", this.onPageLoad, !1), this.started = !1) : void 0;\n        }, r.prototype.push = function (t, r) {\n          return t = e.Location.wrap(t), this.update(\"push\", t, r);\n        }, r.prototype.replace = function (t, r) {\n          return t = e.Location.wrap(t), this.update(\"replace\", t, r);\n        }, r.prototype.onPopState = function (t) {\n          var r, n, o, i;\n          return this.shouldHandlePopState() && (i = null != (n = t.state) ? n.turbolinks : void 0) ? (r = e.Location.wrap(window.location), o = i.restorationIdentifier, this.delegate.historyPoppedToLocationWithRestorationIdentifier(r, o)) : void 0;\n        }, r.prototype.onPageLoad = function (t) {\n          return e.defer(function (t) {\n            return function () {\n              return t.pageLoaded = !0;\n            };\n          }(this));\n        }, r.prototype.shouldHandlePopState = function () {\n          return this.pageIsLoaded();\n        }, r.prototype.pageIsLoaded = function () {\n          return this.pageLoaded || \"complete\" === document.readyState;\n        }, r.prototype.update = function (t, e, r) {\n          var n;\n          return n = {\n            turbolinks: {\n              restorationIdentifier: r\n            }\n          }, history[t + \"State\"](n, null, e);\n        }, r;\n      }();\n    }.call(this), function () {\n      e.HeadDetails = function () {\n        function t(t) {\n          var e, r, n, s, a, u;\n\n          for (this.elements = {}, n = 0, a = t.length; a > n; n++) {\n            u = t[n], u.nodeType === Node.ELEMENT_NODE && (s = u.outerHTML, r = null != (e = this.elements)[s] ? e[s] : e[s] = {\n              type: i(u),\n              tracked: o(u),\n              elements: []\n            }, r.elements.push(u));\n          }\n        }\n\n        var e, r, n, o, i;\n        return t.fromHeadElement = function (t) {\n          var e;\n          return new this(null != (e = null != t ? t.childNodes : void 0) ? e : []);\n        }, t.prototype.hasElementWithKey = function (t) {\n          return t in this.elements;\n        }, t.prototype.getTrackedElementSignature = function () {\n          var t, e;\n          return function () {\n            var r, n;\n            r = this.elements, n = [];\n\n            for (t in r) {\n              e = r[t].tracked, e && n.push(t);\n            }\n\n            return n;\n          }.call(this).join(\"\");\n        }, t.prototype.getScriptElementsNotInDetails = function (t) {\n          return this.getElementsMatchingTypeNotInDetails(\"script\", t);\n        }, t.prototype.getStylesheetElementsNotInDetails = function (t) {\n          return this.getElementsMatchingTypeNotInDetails(\"stylesheet\", t);\n        }, t.prototype.getElementsMatchingTypeNotInDetails = function (t, e) {\n          var r, n, o, i, s, a;\n          o = this.elements, s = [];\n\n          for (n in o) {\n            i = o[n], a = i.type, r = i.elements, a !== t || e.hasElementWithKey(n) || s.push(r[0]);\n          }\n\n          return s;\n        }, t.prototype.getProvisionalElements = function () {\n          var t, e, r, n, o, i, s;\n          r = [], n = this.elements;\n\n          for (e in n) {\n            o = n[e], s = o.type, i = o.tracked, t = o.elements, null != s || i ? t.length > 1 && r.push.apply(r, t.slice(1)) : r.push.apply(r, t);\n          }\n\n          return r;\n        }, t.prototype.getMetaValue = function (t) {\n          var e;\n          return null != (e = this.findMetaElementByName(t)) ? e.getAttribute(\"content\") : void 0;\n        }, t.prototype.findMetaElementByName = function (t) {\n          var r, n, o, i;\n          r = void 0, i = this.elements;\n\n          for (o in i) {\n            n = i[o].elements, e(n[0], t) && (r = n[0]);\n          }\n\n          return r;\n        }, i = function i(t) {\n          return r(t) ? \"script\" : n(t) ? \"stylesheet\" : void 0;\n        }, o = function o(t) {\n          return \"reload\" === t.getAttribute(\"data-turbolinks-track\");\n        }, r = function r(t) {\n          var e;\n          return e = t.tagName.toLowerCase(), \"script\" === e;\n        }, n = function n(t) {\n          var e;\n          return e = t.tagName.toLowerCase(), \"style\" === e || \"link\" === e && \"stylesheet\" === t.getAttribute(\"rel\");\n        }, e = function e(t, _e) {\n          var r;\n          return r = t.tagName.toLowerCase(), \"meta\" === r && t.getAttribute(\"name\") === _e;\n        }, t;\n      }();\n    }.call(this), function () {\n      e.Snapshot = function () {\n        function t(t, e) {\n          this.headDetails = t, this.bodyElement = e;\n        }\n\n        return t.wrap = function (t) {\n          return t instanceof this ? t : \"string\" == typeof t ? this.fromHTMLString(t) : this.fromHTMLElement(t);\n        }, t.fromHTMLString = function (t) {\n          var e;\n          return e = document.createElement(\"html\"), e.innerHTML = t, this.fromHTMLElement(e);\n        }, t.fromHTMLElement = function (t) {\n          var r, n, o, i;\n          return o = t.querySelector(\"head\"), r = null != (i = t.querySelector(\"body\")) ? i : document.createElement(\"body\"), n = e.HeadDetails.fromHeadElement(o), new this(n, r);\n        }, t.prototype.clone = function () {\n          return new this.constructor(this.headDetails, this.bodyElement.cloneNode(!0));\n        }, t.prototype.getRootLocation = function () {\n          var t, r;\n          return r = null != (t = this.getSetting(\"root\")) ? t : \"/\", new e.Location(r);\n        }, t.prototype.getCacheControlValue = function () {\n          return this.getSetting(\"cache-control\");\n        }, t.prototype.getElementForAnchor = function (t) {\n          try {\n            return this.bodyElement.querySelector(\"[id='\" + t + \"'], a[name='\" + t + \"']\");\n          } catch (e) {}\n        }, t.prototype.getPermanentElements = function () {\n          return this.bodyElement.querySelectorAll(\"[id][data-turbolinks-permanent]\");\n        }, t.prototype.getPermanentElementById = function (t) {\n          return this.bodyElement.querySelector(\"#\" + t + \"[data-turbolinks-permanent]\");\n        }, t.prototype.getPermanentElementsPresentInSnapshot = function (t) {\n          var e, r, n, o, i;\n\n          for (o = this.getPermanentElements(), i = [], r = 0, n = o.length; n > r; r++) {\n            e = o[r], t.getPermanentElementById(e.id) && i.push(e);\n          }\n\n          return i;\n        }, t.prototype.findFirstAutofocusableElement = function () {\n          return this.bodyElement.querySelector(\"[autofocus]\");\n        }, t.prototype.hasAnchor = function (t) {\n          return null != this.getElementForAnchor(t);\n        }, t.prototype.isPreviewable = function () {\n          return \"no-preview\" !== this.getCacheControlValue();\n        }, t.prototype.isCacheable = function () {\n          return \"no-cache\" !== this.getCacheControlValue();\n        }, t.prototype.isVisitable = function () {\n          return \"reload\" !== this.getSetting(\"visit-control\");\n        }, t.prototype.getSetting = function (t) {\n          return this.headDetails.getMetaValue(\"turbolinks-\" + t);\n        }, t;\n      }();\n    }.call(this), function () {\n      var t = [].slice;\n\n      e.Renderer = function () {\n        function e() {}\n\n        var r;\n        return e.render = function () {\n          var e, r, n, o;\n          return n = arguments[0], r = arguments[1], e = 3 <= arguments.length ? t.call(arguments, 2) : [], o = function (t, e, r) {\n            r.prototype = t.prototype;\n            var n = new r(),\n                o = t.apply(n, e);\n            return Object(o) === o ? o : n;\n          }(this, e, function () {}), o.delegate = n, o.render(r), o;\n        }, e.prototype.renderView = function (t) {\n          return this.delegate.viewWillRender(this.newBody), t(), this.delegate.viewRendered(this.newBody);\n        }, e.prototype.invalidateView = function () {\n          return this.delegate.viewInvalidated();\n        }, e.prototype.createScriptElement = function (t) {\n          var e;\n          return \"false\" === t.getAttribute(\"data-turbolinks-eval\") ? t : (e = document.createElement(\"script\"), e.textContent = t.textContent, e.async = !1, r(e, t), e);\n        }, r = function r(t, e) {\n          var r, n, o, i, s, a, u;\n\n          for (i = e.attributes, a = [], r = 0, n = i.length; n > r; r++) {\n            s = i[r], o = s.name, u = s.value, a.push(t.setAttribute(o, u));\n          }\n\n          return a;\n        }, e;\n      }();\n    }.call(this), function () {\n      var t,\n          r,\n          n = function n(t, e) {\n        function r() {\n          this.constructor = t;\n        }\n\n        for (var n in e) {\n          o.call(e, n) && (t[n] = e[n]);\n        }\n\n        return r.prototype = e.prototype, t.prototype = new r(), t.__super__ = e.prototype, t;\n      },\n          o = {}.hasOwnProperty;\n\n      e.SnapshotRenderer = function (e) {\n        function o(t, e, r) {\n          this.currentSnapshot = t, this.newSnapshot = e, this.isPreview = r, this.currentHeadDetails = this.currentSnapshot.headDetails, this.newHeadDetails = this.newSnapshot.headDetails, this.currentBody = this.currentSnapshot.bodyElement, this.newBody = this.newSnapshot.bodyElement;\n        }\n\n        return n(o, e), o.prototype.render = function (t) {\n          return this.shouldRender() ? (this.mergeHead(), this.renderView(function (e) {\n            return function () {\n              return e.replaceBody(), e.isPreview || e.focusFirstAutofocusableElement(), t();\n            };\n          }(this))) : this.invalidateView();\n        }, o.prototype.mergeHead = function () {\n          return this.copyNewHeadStylesheetElements(), this.copyNewHeadScriptElements(), this.removeCurrentHeadProvisionalElements(), this.copyNewHeadProvisionalElements();\n        }, o.prototype.replaceBody = function () {\n          var t;\n          return t = this.relocateCurrentBodyPermanentElements(), this.activateNewBodyScriptElements(), this.assignNewBody(), this.replacePlaceholderElementsWithClonedPermanentElements(t);\n        }, o.prototype.shouldRender = function () {\n          return this.newSnapshot.isVisitable() && this.trackedElementsAreIdentical();\n        }, o.prototype.trackedElementsAreIdentical = function () {\n          return this.currentHeadDetails.getTrackedElementSignature() === this.newHeadDetails.getTrackedElementSignature();\n        }, o.prototype.copyNewHeadStylesheetElements = function () {\n          var t, e, r, n, o;\n\n          for (n = this.getNewHeadStylesheetElements(), o = [], e = 0, r = n.length; r > e; e++) {\n            t = n[e], o.push(document.head.appendChild(t));\n          }\n\n          return o;\n        }, o.prototype.copyNewHeadScriptElements = function () {\n          var t, e, r, n, o;\n\n          for (n = this.getNewHeadScriptElements(), o = [], e = 0, r = n.length; r > e; e++) {\n            t = n[e], o.push(document.head.appendChild(this.createScriptElement(t)));\n          }\n\n          return o;\n        }, o.prototype.removeCurrentHeadProvisionalElements = function () {\n          var t, e, r, n, o;\n\n          for (n = this.getCurrentHeadProvisionalElements(), o = [], e = 0, r = n.length; r > e; e++) {\n            t = n[e], o.push(document.head.removeChild(t));\n          }\n\n          return o;\n        }, o.prototype.copyNewHeadProvisionalElements = function () {\n          var t, e, r, n, o;\n\n          for (n = this.getNewHeadProvisionalElements(), o = [], e = 0, r = n.length; r > e; e++) {\n            t = n[e], o.push(document.head.appendChild(t));\n          }\n\n          return o;\n        }, o.prototype.relocateCurrentBodyPermanentElements = function () {\n          var e, n, o, i, s, a, u;\n\n          for (a = this.getCurrentBodyPermanentElements(), u = [], e = 0, n = a.length; n > e; e++) {\n            i = a[e], s = t(i), o = this.newSnapshot.getPermanentElementById(i.id), r(i, s.element), r(o, i), u.push(s);\n          }\n\n          return u;\n        }, o.prototype.replacePlaceholderElementsWithClonedPermanentElements = function (t) {\n          var e, n, o, i, s, a, u;\n\n          for (u = [], o = 0, i = t.length; i > o; o++) {\n            a = t[o], n = a.element, s = a.permanentElement, e = s.cloneNode(!0), u.push(r(n, e));\n          }\n\n          return u;\n        }, o.prototype.activateNewBodyScriptElements = function () {\n          var t, e, n, o, i, s;\n\n          for (i = this.getNewBodyScriptElements(), s = [], e = 0, o = i.length; o > e; e++) {\n            n = i[e], t = this.createScriptElement(n), s.push(r(n, t));\n          }\n\n          return s;\n        }, o.prototype.assignNewBody = function () {\n          return document.body = this.newBody;\n        }, o.prototype.focusFirstAutofocusableElement = function () {\n          var t;\n          return null != (t = this.newSnapshot.findFirstAutofocusableElement()) ? t.focus() : void 0;\n        }, o.prototype.getNewHeadStylesheetElements = function () {\n          return this.newHeadDetails.getStylesheetElementsNotInDetails(this.currentHeadDetails);\n        }, o.prototype.getNewHeadScriptElements = function () {\n          return this.newHeadDetails.getScriptElementsNotInDetails(this.currentHeadDetails);\n        }, o.prototype.getCurrentHeadProvisionalElements = function () {\n          return this.currentHeadDetails.getProvisionalElements();\n        }, o.prototype.getNewHeadProvisionalElements = function () {\n          return this.newHeadDetails.getProvisionalElements();\n        }, o.prototype.getCurrentBodyPermanentElements = function () {\n          return this.currentSnapshot.getPermanentElementsPresentInSnapshot(this.newSnapshot);\n        }, o.prototype.getNewBodyScriptElements = function () {\n          return this.newBody.querySelectorAll(\"script\");\n        }, o;\n      }(e.Renderer), t = function t(_t5) {\n        var e;\n        return e = document.createElement(\"meta\"), e.setAttribute(\"name\", \"turbolinks-permanent-placeholder\"), e.setAttribute(\"content\", _t5.id), {\n          element: e,\n          permanentElement: _t5\n        };\n      }, r = function r(t, e) {\n        var r;\n        return (r = t.parentNode) ? r.replaceChild(e, t) : void 0;\n      };\n    }.call(this), function () {\n      var t = function t(_t6, e) {\n        function n() {\n          this.constructor = _t6;\n        }\n\n        for (var o in e) {\n          r.call(e, o) && (_t6[o] = e[o]);\n        }\n\n        return n.prototype = e.prototype, _t6.prototype = new n(), _t6.__super__ = e.prototype, _t6;\n      },\n          r = {}.hasOwnProperty;\n\n      e.ErrorRenderer = function (e) {\n        function r(t) {\n          var e;\n          e = document.createElement(\"html\"), e.innerHTML = t, this.newHead = e.querySelector(\"head\"), this.newBody = e.querySelector(\"body\");\n        }\n\n        return t(r, e), r.prototype.render = function (t) {\n          return this.renderView(function (e) {\n            return function () {\n              return e.replaceHeadAndBody(), e.activateBodyScriptElements(), t();\n            };\n          }(this));\n        }, r.prototype.replaceHeadAndBody = function () {\n          var t, e;\n          return e = document.head, t = document.body, e.parentNode.replaceChild(this.newHead, e), t.parentNode.replaceChild(this.newBody, t);\n        }, r.prototype.activateBodyScriptElements = function () {\n          var t, e, r, n, o, i;\n\n          for (n = this.getScriptElements(), i = [], e = 0, r = n.length; r > e; e++) {\n            o = n[e], t = this.createScriptElement(o), i.push(o.parentNode.replaceChild(t, o));\n          }\n\n          return i;\n        }, r.prototype.getScriptElements = function () {\n          return document.documentElement.querySelectorAll(\"script\");\n        }, r;\n      }(e.Renderer);\n    }.call(this), function () {\n      e.View = function () {\n        function t(t) {\n          this.delegate = t, this.htmlElement = document.documentElement;\n        }\n\n        return t.prototype.getRootLocation = function () {\n          return this.getSnapshot().getRootLocation();\n        }, t.prototype.getElementForAnchor = function (t) {\n          return this.getSnapshot().getElementForAnchor(t);\n        }, t.prototype.getSnapshot = function () {\n          return e.Snapshot.fromHTMLElement(this.htmlElement);\n        }, t.prototype.render = function (t, e) {\n          var r, n, o;\n          return o = t.snapshot, r = t.error, n = t.isPreview, this.markAsPreview(n), null != o ? this.renderSnapshot(o, n, e) : this.renderError(r, e);\n        }, t.prototype.markAsPreview = function (t) {\n          return t ? this.htmlElement.setAttribute(\"data-turbolinks-preview\", \"\") : this.htmlElement.removeAttribute(\"data-turbolinks-preview\");\n        }, t.prototype.renderSnapshot = function (t, r, n) {\n          return e.SnapshotRenderer.render(this.delegate, n, this.getSnapshot(), e.Snapshot.wrap(t), r);\n        }, t.prototype.renderError = function (t, r) {\n          return e.ErrorRenderer.render(this.delegate, r, t);\n        }, t;\n      }();\n    }.call(this), function () {\n      var t = function t(_t7, e) {\n        return function () {\n          return _t7.apply(e, arguments);\n        };\n      };\n\n      e.ScrollManager = function () {\n        function r(r) {\n          this.delegate = r, this.onScroll = t(this.onScroll, this), this.onScroll = e.throttle(this.onScroll);\n        }\n\n        return r.prototype.start = function () {\n          return this.started ? void 0 : (addEventListener(\"scroll\", this.onScroll, !1), this.onScroll(), this.started = !0);\n        }, r.prototype.stop = function () {\n          return this.started ? (removeEventListener(\"scroll\", this.onScroll, !1), this.started = !1) : void 0;\n        }, r.prototype.scrollToElement = function (t) {\n          return t.scrollIntoView();\n        }, r.prototype.scrollToPosition = function (t) {\n          var e, r;\n          return e = t.x, r = t.y, window.scrollTo(e, r);\n        }, r.prototype.onScroll = function (t) {\n          return this.updatePosition({\n            x: window.pageXOffset,\n            y: window.pageYOffset\n          });\n        }, r.prototype.updatePosition = function (t) {\n          var e;\n          return this.position = t, null != (e = this.delegate) ? e.scrollPositionChanged(this.position) : void 0;\n        }, r;\n      }();\n    }.call(this), function () {\n      e.SnapshotCache = function () {\n        function t(t) {\n          this.size = t, this.keys = [], this.snapshots = {};\n        }\n\n        var r;\n        return t.prototype.has = function (t) {\n          var e;\n          return e = r(t), e in this.snapshots;\n        }, t.prototype.get = function (t) {\n          var e;\n          if (this.has(t)) return e = this.read(t), this.touch(t), e;\n        }, t.prototype.put = function (t, e) {\n          return this.write(t, e), this.touch(t), e;\n        }, t.prototype.read = function (t) {\n          var e;\n          return e = r(t), this.snapshots[e];\n        }, t.prototype.write = function (t, e) {\n          var n;\n          return n = r(t), this.snapshots[n] = e;\n        }, t.prototype.touch = function (t) {\n          var e, n;\n          return n = r(t), e = this.keys.indexOf(n), e > -1 && this.keys.splice(e, 1), this.keys.unshift(n), this.trim();\n        }, t.prototype.trim = function () {\n          var t, e, r, n, o;\n\n          for (n = this.keys.splice(this.size), o = [], t = 0, r = n.length; r > t; t++) {\n            e = n[t], o.push(delete this.snapshots[e]);\n          }\n\n          return o;\n        }, r = function r(t) {\n          return e.Location.wrap(t).toCacheKey();\n        }, t;\n      }();\n    }.call(this), function () {\n      var t = function t(_t8, e) {\n        return function () {\n          return _t8.apply(e, arguments);\n        };\n      };\n\n      e.Visit = function () {\n        function r(r, n, o) {\n          this.controller = r, this.action = o, this.performScroll = t(this.performScroll, this), this.identifier = e.uuid(), this.location = e.Location.wrap(n), this.adapter = this.controller.adapter, this.state = \"initialized\", this.timingMetrics = {};\n        }\n\n        var n;\n        return r.prototype.start = function () {\n          return \"initialized\" === this.state ? (this.recordTimingMetric(\"visitStart\"), this.state = \"started\", this.adapter.visitStarted(this)) : void 0;\n        }, r.prototype.cancel = function () {\n          var t;\n          return \"started\" === this.state ? (null != (t = this.request) && t.cancel(), this.cancelRender(), this.state = \"canceled\") : void 0;\n        }, r.prototype.complete = function () {\n          var t;\n          return \"started\" === this.state ? (this.recordTimingMetric(\"visitEnd\"), this.state = \"completed\", \"function\" == typeof (t = this.adapter).visitCompleted && t.visitCompleted(this), this.controller.visitCompleted(this)) : void 0;\n        }, r.prototype.fail = function () {\n          var t;\n          return \"started\" === this.state ? (this.state = \"failed\", \"function\" == typeof (t = this.adapter).visitFailed ? t.visitFailed(this) : void 0) : void 0;\n        }, r.prototype.changeHistory = function () {\n          var t, e;\n          return this.historyChanged ? void 0 : (t = this.location.isEqualTo(this.referrer) ? \"replace\" : this.action, e = n(t), this.controller[e](this.location, this.restorationIdentifier), this.historyChanged = !0);\n        }, r.prototype.issueRequest = function () {\n          return this.shouldIssueRequest() && null == this.request ? (this.progress = 0, this.request = new e.HttpRequest(this, this.location, this.referrer), this.request.send()) : void 0;\n        }, r.prototype.getCachedSnapshot = function () {\n          var t;\n          return !(t = this.controller.getCachedSnapshotForLocation(this.location)) || null != this.location.anchor && !t.hasAnchor(this.location.anchor) || \"restore\" !== this.action && !t.isPreviewable() ? void 0 : t;\n        }, r.prototype.hasCachedSnapshot = function () {\n          return null != this.getCachedSnapshot();\n        }, r.prototype.loadCachedSnapshot = function () {\n          var t, e;\n          return (e = this.getCachedSnapshot()) ? (t = this.shouldIssueRequest(), this.render(function () {\n            var r;\n            return this.cacheSnapshot(), this.controller.render({\n              snapshot: e,\n              isPreview: t\n            }, this.performScroll), \"function\" == typeof (r = this.adapter).visitRendered && r.visitRendered(this), t ? void 0 : this.complete();\n          })) : void 0;\n        }, r.prototype.loadResponse = function () {\n          return null != this.response ? this.render(function () {\n            var t, e;\n            return this.cacheSnapshot(), this.request.failed ? (this.controller.render({\n              error: this.response\n            }, this.performScroll), \"function\" == typeof (t = this.adapter).visitRendered && t.visitRendered(this), this.fail()) : (this.controller.render({\n              snapshot: this.response\n            }, this.performScroll), \"function\" == typeof (e = this.adapter).visitRendered && e.visitRendered(this), this.complete());\n          }) : void 0;\n        }, r.prototype.followRedirect = function () {\n          return this.redirectedToLocation && !this.followedRedirect ? (this.location = this.redirectedToLocation, this.controller.replaceHistoryWithLocationAndRestorationIdentifier(this.redirectedToLocation, this.restorationIdentifier), this.followedRedirect = !0) : void 0;\n        }, r.prototype.requestStarted = function () {\n          var t;\n          return this.recordTimingMetric(\"requestStart\"), \"function\" == typeof (t = this.adapter).visitRequestStarted ? t.visitRequestStarted(this) : void 0;\n        }, r.prototype.requestProgressed = function (t) {\n          var e;\n          return this.progress = t, \"function\" == typeof (e = this.adapter).visitRequestProgressed ? e.visitRequestProgressed(this) : void 0;\n        }, r.prototype.requestCompletedWithResponse = function (t, r) {\n          return this.response = t, null != r && (this.redirectedToLocation = e.Location.wrap(r)), this.adapter.visitRequestCompleted(this);\n        }, r.prototype.requestFailedWithStatusCode = function (t, e) {\n          return this.response = e, this.adapter.visitRequestFailedWithStatusCode(this, t);\n        }, r.prototype.requestFinished = function () {\n          var t;\n          return this.recordTimingMetric(\"requestEnd\"), \"function\" == typeof (t = this.adapter).visitRequestFinished ? t.visitRequestFinished(this) : void 0;\n        }, r.prototype.performScroll = function () {\n          return this.scrolled ? void 0 : (\"restore\" === this.action ? this.scrollToRestoredPosition() || this.scrollToTop() : this.scrollToAnchor() || this.scrollToTop(), this.scrolled = !0);\n        }, r.prototype.scrollToRestoredPosition = function () {\n          var t, e;\n          return t = null != (e = this.restorationData) ? e.scrollPosition : void 0, null != t ? (this.controller.scrollToPosition(t), !0) : void 0;\n        }, r.prototype.scrollToAnchor = function () {\n          return null != this.location.anchor ? (this.controller.scrollToAnchor(this.location.anchor), !0) : void 0;\n        }, r.prototype.scrollToTop = function () {\n          return this.controller.scrollToPosition({\n            x: 0,\n            y: 0\n          });\n        }, r.prototype.recordTimingMetric = function (t) {\n          var e;\n          return null != (e = this.timingMetrics)[t] ? e[t] : e[t] = new Date().getTime();\n        }, r.prototype.getTimingMetrics = function () {\n          return e.copyObject(this.timingMetrics);\n        }, n = function n(t) {\n          switch (t) {\n            case \"replace\":\n              return \"replaceHistoryWithLocationAndRestorationIdentifier\";\n\n            case \"advance\":\n            case \"restore\":\n              return \"pushHistoryWithLocationAndRestorationIdentifier\";\n          }\n        }, r.prototype.shouldIssueRequest = function () {\n          return \"restore\" === this.action ? !this.hasCachedSnapshot() : !0;\n        }, r.prototype.cacheSnapshot = function () {\n          return this.snapshotCached ? void 0 : (this.controller.cacheSnapshot(), this.snapshotCached = !0);\n        }, r.prototype.render = function (t) {\n          return this.cancelRender(), this.frame = requestAnimationFrame(function (e) {\n            return function () {\n              return e.frame = null, t.call(e);\n            };\n          }(this));\n        }, r.prototype.cancelRender = function () {\n          return this.frame ? cancelAnimationFrame(this.frame) : void 0;\n        }, r;\n      }();\n    }.call(this), function () {\n      var t = function t(_t9, e) {\n        return function () {\n          return _t9.apply(e, arguments);\n        };\n      };\n\n      e.Controller = function () {\n        function r() {\n          this.clickBubbled = t(this.clickBubbled, this), this.clickCaptured = t(this.clickCaptured, this), this.pageLoaded = t(this.pageLoaded, this), this.history = new e.History(this), this.view = new e.View(this), this.scrollManager = new e.ScrollManager(this), this.restorationData = {}, this.clearCache(), this.setProgressBarDelay(500);\n        }\n\n        return r.prototype.start = function () {\n          return e.supported && !this.started ? (addEventListener(\"click\", this.clickCaptured, !0), addEventListener(\"DOMContentLoaded\", this.pageLoaded, !1), this.scrollManager.start(), this.startHistory(), this.started = !0, this.enabled = !0) : void 0;\n        }, r.prototype.disable = function () {\n          return this.enabled = !1;\n        }, r.prototype.stop = function () {\n          return this.started ? (removeEventListener(\"click\", this.clickCaptured, !0), removeEventListener(\"DOMContentLoaded\", this.pageLoaded, !1), this.scrollManager.stop(), this.stopHistory(), this.started = !1) : void 0;\n        }, r.prototype.clearCache = function () {\n          return this.cache = new e.SnapshotCache(10);\n        }, r.prototype.visit = function (t, r) {\n          var n, o;\n          return null == r && (r = {}), t = e.Location.wrap(t), this.applicationAllowsVisitingLocation(t) ? this.locationIsVisitable(t) ? (n = null != (o = r.action) ? o : \"advance\", this.adapter.visitProposedToLocationWithAction(t, n)) : window.location = t : void 0;\n        }, r.prototype.startVisitToLocationWithAction = function (t, r, n) {\n          var o;\n          return e.supported ? (o = this.getRestorationDataForIdentifier(n), this.startVisit(t, r, {\n            restorationData: o\n          })) : window.location = t;\n        }, r.prototype.setProgressBarDelay = function (t) {\n          return this.progressBarDelay = t;\n        }, r.prototype.startHistory = function () {\n          return this.location = e.Location.wrap(window.location), this.restorationIdentifier = e.uuid(), this.history.start(), this.history.replace(this.location, this.restorationIdentifier);\n        }, r.prototype.stopHistory = function () {\n          return this.history.stop();\n        }, r.prototype.pushHistoryWithLocationAndRestorationIdentifier = function (t, r) {\n          return this.restorationIdentifier = r, this.location = e.Location.wrap(t), this.history.push(this.location, this.restorationIdentifier);\n        }, r.prototype.replaceHistoryWithLocationAndRestorationIdentifier = function (t, r) {\n          return this.restorationIdentifier = r, this.location = e.Location.wrap(t), this.history.replace(this.location, this.restorationIdentifier);\n        }, r.prototype.historyPoppedToLocationWithRestorationIdentifier = function (t, r) {\n          var n;\n          return this.restorationIdentifier = r, this.enabled ? (n = this.getRestorationDataForIdentifier(this.restorationIdentifier), this.startVisit(t, \"restore\", {\n            restorationIdentifier: this.restorationIdentifier,\n            restorationData: n,\n            historyChanged: !0\n          }), this.location = e.Location.wrap(t)) : this.adapter.pageInvalidated();\n        }, r.prototype.getCachedSnapshotForLocation = function (t) {\n          var e;\n          return null != (e = this.cache.get(t)) ? e.clone() : void 0;\n        }, r.prototype.shouldCacheSnapshot = function () {\n          return this.view.getSnapshot().isCacheable();\n        }, r.prototype.cacheSnapshot = function () {\n          var t, r;\n          return this.shouldCacheSnapshot() ? (this.notifyApplicationBeforeCachingSnapshot(), r = this.view.getSnapshot(), t = this.lastRenderedLocation, e.defer(function (e) {\n            return function () {\n              return e.cache.put(t, r.clone());\n            };\n          }(this))) : void 0;\n        }, r.prototype.scrollToAnchor = function (t) {\n          var e;\n          return (e = this.view.getElementForAnchor(t)) ? this.scrollToElement(e) : this.scrollToPosition({\n            x: 0,\n            y: 0\n          });\n        }, r.prototype.scrollToElement = function (t) {\n          return this.scrollManager.scrollToElement(t);\n        }, r.prototype.scrollToPosition = function (t) {\n          return this.scrollManager.scrollToPosition(t);\n        }, r.prototype.scrollPositionChanged = function (t) {\n          var e;\n          return e = this.getCurrentRestorationData(), e.scrollPosition = t;\n        }, r.prototype.render = function (t, e) {\n          return this.view.render(t, e);\n        }, r.prototype.viewInvalidated = function () {\n          return this.adapter.pageInvalidated();\n        }, r.prototype.viewWillRender = function (t) {\n          return this.notifyApplicationBeforeRender(t);\n        }, r.prototype.viewRendered = function () {\n          return this.lastRenderedLocation = this.currentVisit.location, this.notifyApplicationAfterRender();\n        }, r.prototype.pageLoaded = function () {\n          return this.lastRenderedLocation = this.location, this.notifyApplicationAfterPageLoad();\n        }, r.prototype.clickCaptured = function () {\n          return removeEventListener(\"click\", this.clickBubbled, !1), addEventListener(\"click\", this.clickBubbled, !1);\n        }, r.prototype.clickBubbled = function (t) {\n          var e, r, n;\n          return this.enabled && this.clickEventIsSignificant(t) && (r = this.getVisitableLinkForNode(t.target)) && (n = this.getVisitableLocationForLink(r)) && this.applicationAllowsFollowingLinkToLocation(r, n) ? (t.preventDefault(), e = this.getActionForLink(r), this.visit(n, {\n            action: e\n          })) : void 0;\n        }, r.prototype.applicationAllowsFollowingLinkToLocation = function (t, e) {\n          var r;\n          return r = this.notifyApplicationAfterClickingLinkToLocation(t, e), !r.defaultPrevented;\n        }, r.prototype.applicationAllowsVisitingLocation = function (t) {\n          var e;\n          return e = this.notifyApplicationBeforeVisitingLocation(t), !e.defaultPrevented;\n        }, r.prototype.notifyApplicationAfterClickingLinkToLocation = function (t, r) {\n          return e.dispatch(\"turbolinks:click\", {\n            target: t,\n            data: {\n              url: r.absoluteURL\n            },\n            cancelable: !0\n          });\n        }, r.prototype.notifyApplicationBeforeVisitingLocation = function (t) {\n          return e.dispatch(\"turbolinks:before-visit\", {\n            data: {\n              url: t.absoluteURL\n            },\n            cancelable: !0\n          });\n        }, r.prototype.notifyApplicationAfterVisitingLocation = function (t) {\n          return e.dispatch(\"turbolinks:visit\", {\n            data: {\n              url: t.absoluteURL\n            }\n          });\n        }, r.prototype.notifyApplicationBeforeCachingSnapshot = function () {\n          return e.dispatch(\"turbolinks:before-cache\");\n        }, r.prototype.notifyApplicationBeforeRender = function (t) {\n          return e.dispatch(\"turbolinks:before-render\", {\n            data: {\n              newBody: t\n            }\n          });\n        }, r.prototype.notifyApplicationAfterRender = function () {\n          return e.dispatch(\"turbolinks:render\");\n        }, r.prototype.notifyApplicationAfterPageLoad = function (t) {\n          return null == t && (t = {}), e.dispatch(\"turbolinks:load\", {\n            data: {\n              url: this.location.absoluteURL,\n              timing: t\n            }\n          });\n        }, r.prototype.startVisit = function (t, e, r) {\n          var n;\n          return null != (n = this.currentVisit) && n.cancel(), this.currentVisit = this.createVisit(t, e, r), this.currentVisit.start(), this.notifyApplicationAfterVisitingLocation(t);\n        }, r.prototype.createVisit = function (t, r, n) {\n          var o, i, s, a, u;\n          return i = null != n ? n : {}, a = i.restorationIdentifier, s = i.restorationData, o = i.historyChanged, u = new e.Visit(this, t, r), u.restorationIdentifier = null != a ? a : e.uuid(), u.restorationData = e.copyObject(s), u.historyChanged = o, u.referrer = this.location, u;\n        }, r.prototype.visitCompleted = function (t) {\n          return this.notifyApplicationAfterPageLoad(t.getTimingMetrics());\n        }, r.prototype.clickEventIsSignificant = function (t) {\n          return !(t.defaultPrevented || t.target.isContentEditable || t.which > 1 || t.altKey || t.ctrlKey || t.metaKey || t.shiftKey);\n        }, r.prototype.getVisitableLinkForNode = function (t) {\n          return this.nodeIsVisitable(t) ? e.closest(t, \"a[href]:not([target]):not([download])\") : void 0;\n        }, r.prototype.getVisitableLocationForLink = function (t) {\n          var r;\n          return r = new e.Location(t.getAttribute(\"href\")), this.locationIsVisitable(r) ? r : void 0;\n        }, r.prototype.getActionForLink = function (t) {\n          var e;\n          return null != (e = t.getAttribute(\"data-turbolinks-action\")) ? e : \"advance\";\n        }, r.prototype.nodeIsVisitable = function (t) {\n          var r;\n          return (r = e.closest(t, \"[data-turbolinks]\")) ? \"false\" !== r.getAttribute(\"data-turbolinks\") : !0;\n        }, r.prototype.locationIsVisitable = function (t) {\n          return t.isPrefixedBy(this.view.getRootLocation()) && t.isHTML();\n        }, r.prototype.getCurrentRestorationData = function () {\n          return this.getRestorationDataForIdentifier(this.restorationIdentifier);\n        }, r.prototype.getRestorationDataForIdentifier = function (t) {\n          var e;\n          return null != (e = this.restorationData)[t] ? e[t] : e[t] = {};\n        }, r;\n      }();\n    }.call(this), function () {\n      !function () {\n        var t, e;\n        if ((t = e = document.currentScript) && !e.hasAttribute(\"data-turbolinks-suppress-warning\")) for (; t = t.parentNode;) {\n          if (t === document.body) return console.warn(\"You are loading Turbolinks from a <script> element inside the <body> element. This is probably not what you meant to do!\\n\\nLoad your application\\u2019s JavaScript bundle inside the <head> element instead. <script> elements in <body> are evaluated with each page change.\\n\\nFor more information, see: https://github.com/turbolinks/turbolinks#working-with-script-elements\\n\\n\\u2014\\u2014\\nSuppress this warning by adding a `data-turbolinks-suppress-warning` attribute to: %s\", e.outerHTML);\n        }\n      }();\n    }.call(this), function () {\n      var t, r, n;\n      e.start = function () {\n        return r() ? (null == e.controller && (e.controller = t()), e.controller.start()) : void 0;\n      }, r = function r() {\n        return null == window.Turbolinks && (window.Turbolinks = e), n();\n      }, t = function t() {\n        var t;\n        return t = new e.Controller(), t.adapter = new e.BrowserAdapter(t), t;\n      }, n = function n() {\n        return window.Turbolinks === e;\n      }, n() && e.start();\n    }.call(this);\n  }).call(this), \"object\" == (typeof module === \"undefined\" ? \"undefined\" : _typeof(module)) && module.exports ? module.exports = e : \"function\" == typeof define && define.amd && define(e);\n}).call(this);","// Load all the channels within this directory and all subdirectories.\n// Channel files must be named *_channel.js.\n\nconst channels = require.context('.', true, /_channel\\.js$/)\nchannels.keys().forEach(channels)\n","function webpackEmptyContext(req) {\n\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\te.code = 'MODULE_NOT_FOUND';\n\tthrow e;\n}\nwebpackEmptyContext.keys = function() { return []; };\nwebpackEmptyContext.resolve = webpackEmptyContext;\nmodule.exports = webpackEmptyContext;\nwebpackEmptyContext.id = 432;","function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n/*\nTrix 1.2.0\nCopyright © 2019 Basecamp, LLC\nhttp://trix-editor.org/\n */\n(function () {}).call(this), function () {\n  var t;\n  null == window.Set && (window.Set = t = function () {\n    function t() {\n      this.clear();\n    }\n\n    return t.prototype.clear = function () {\n      return this.values = [];\n    }, t.prototype.has = function (t) {\n      return -1 !== this.values.indexOf(t);\n    }, t.prototype.add = function (t) {\n      return this.has(t) || this.values.push(t), this;\n    }, t.prototype[\"delete\"] = function (t) {\n      var e;\n      return -1 === (e = this.values.indexOf(t)) ? !1 : (this.values.splice(e, 1), !0);\n    }, t.prototype.forEach = function () {\n      var t;\n      return (t = this.values).forEach.apply(t, arguments);\n    }, t;\n  }());\n}.call(this), function (t) {\n  function e() {}\n\n  function n(t, e) {\n    return function () {\n      t.apply(e, arguments);\n    };\n  }\n\n  function i(t) {\n    if (\"object\" != _typeof(this)) throw new TypeError(\"Promises must be constructed via new\");\n    if (\"function\" != typeof t) throw new TypeError(\"not a function\");\n    this._state = 0, this._handled = !1, this._value = void 0, this._deferreds = [], c(t, this);\n  }\n\n  function o(t, e) {\n    for (; 3 === t._state;) {\n      t = t._value;\n    }\n\n    return 0 === t._state ? void t._deferreds.push(e) : (t._handled = !0, void h(function () {\n      var n = 1 === t._state ? e.onFulfilled : e.onRejected;\n      if (null === n) return void (1 === t._state ? r : s)(e.promise, t._value);\n      var i;\n\n      try {\n        i = n(t._value);\n      } catch (o) {\n        return void s(e.promise, o);\n      }\n\n      r(e.promise, i);\n    }));\n  }\n\n  function r(t, e) {\n    try {\n      if (e === t) throw new TypeError(\"A promise cannot be resolved with itself.\");\n\n      if (e && (\"object\" == _typeof(e) || \"function\" == typeof e)) {\n        var o = e.then;\n        if (e instanceof i) return t._state = 3, t._value = e, void a(t);\n        if (\"function\" == typeof o) return void c(n(o, e), t);\n      }\n\n      t._state = 1, t._value = e, a(t);\n    } catch (r) {\n      s(t, r);\n    }\n  }\n\n  function s(t, e) {\n    t._state = 2, t._value = e, a(t);\n  }\n\n  function a(t) {\n    2 === t._state && 0 === t._deferreds.length && setTimeout(function () {\n      t._handled || p(t._value);\n    }, 1);\n\n    for (var e = 0, n = t._deferreds.length; n > e; e++) {\n      o(t, t._deferreds[e]);\n    }\n\n    t._deferreds = null;\n  }\n\n  function u(t, e, n) {\n    this.onFulfilled = \"function\" == typeof t ? t : null, this.onRejected = \"function\" == typeof e ? e : null, this.promise = n;\n  }\n\n  function c(t, e) {\n    var n = !1;\n\n    try {\n      t(function (t) {\n        n || (n = !0, r(e, t));\n      }, function (t) {\n        n || (n = !0, s(e, t));\n      });\n    } catch (i) {\n      if (n) return;\n      n = !0, s(e, i);\n    }\n  }\n\n  var l = setTimeout,\n      h = \"function\" == typeof setImmediate && setImmediate || function (t) {\n    l(t, 1);\n  },\n      p = function p(t) {\n    \"undefined\" != typeof console && console && console.warn(\"Possible Unhandled Promise Rejection:\", t);\n  };\n\n  i.prototype[\"catch\"] = function (t) {\n    return this.then(null, t);\n  }, i.prototype.then = function (t, n) {\n    var r = new i(e);\n    return o(this, new u(t, n, r)), r;\n  }, i.all = function (t) {\n    var e = Array.prototype.slice.call(t);\n    return new i(function (t, n) {\n      function i(r, s) {\n        try {\n          if (s && (\"object\" == _typeof(s) || \"function\" == typeof s)) {\n            var a = s.then;\n            if (\"function\" == typeof a) return void a.call(s, function (t) {\n              i(r, t);\n            }, n);\n          }\n\n          e[r] = s, 0 === --o && t(e);\n        } catch (u) {\n          n(u);\n        }\n      }\n\n      if (0 === e.length) return t([]);\n\n      for (var o = e.length, r = 0; r < e.length; r++) {\n        i(r, e[r]);\n      }\n    });\n  }, i.resolve = function (t) {\n    return t && \"object\" == _typeof(t) && t.constructor === i ? t : new i(function (e) {\n      e(t);\n    });\n  }, i.reject = function (t) {\n    return new i(function (e, n) {\n      n(t);\n    });\n  }, i.race = function (t) {\n    return new i(function (e, n) {\n      for (var i = 0, o = t.length; o > i; i++) {\n        t[i].then(e, n);\n      }\n    });\n  }, i._setImmediateFn = function (t) {\n    h = t;\n  }, i._setUnhandledRejectionFn = function (t) {\n    p = t;\n  }, \"undefined\" != typeof module && module.exports ? module.exports = i : t.Promise || (t.Promise = i);\n}(this), function () {\n  var t = \"object\" == _typeof(window.customElements),\n      e = \"function\" == typeof document.registerElement,\n      n = t || e;\n\n  n || (\n  /**\n  * @license\n  * Copyright (c) 2014 The Polymer Project Authors. All rights reserved.\n  * This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt\n  * The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt\n  * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt\n  * Code distributed by Google as part of the polymer project is also\n  * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt\n  */\n  \"undefined\" == typeof WeakMap && !function () {\n    var t = Object.defineProperty,\n        e = Date.now() % 1e9,\n        n = function n() {\n      this.name = \"__st\" + (1e9 * Math.random() >>> 0) + (e++ + \"__\");\n    };\n\n    n.prototype = {\n      set: function set(e, n) {\n        var i = e[this.name];\n        return i && i[0] === e ? i[1] = n : t(e, this.name, {\n          value: [e, n],\n          writable: !0\n        }), this;\n      },\n      get: function get(t) {\n        var e;\n        return (e = t[this.name]) && e[0] === t ? e[1] : void 0;\n      },\n      \"delete\": function _delete(t) {\n        var e = t[this.name];\n        return e && e[0] === t ? (e[0] = e[1] = void 0, !0) : !1;\n      },\n      has: function has(t) {\n        var e = t[this.name];\n        return e ? e[0] === t : !1;\n      }\n    }, window.WeakMap = n;\n  }(), function (t) {\n    function e(t) {\n      A.push(t), b || (b = !0, g(i));\n    }\n\n    function n(t) {\n      return window.ShadowDOMPolyfill && window.ShadowDOMPolyfill.wrapIfNeeded(t) || t;\n    }\n\n    function i() {\n      b = !1;\n      var t = A;\n      A = [], t.sort(function (t, e) {\n        return t.uid_ - e.uid_;\n      });\n      var e = !1;\n      t.forEach(function (t) {\n        var n = t.takeRecords();\n        o(t), n.length && (t.callback_(n, t), e = !0);\n      }), e && i();\n    }\n\n    function o(t) {\n      t.nodes_.forEach(function (e) {\n        var n = m.get(e);\n        n && n.forEach(function (e) {\n          e.observer === t && e.removeTransientObservers();\n        });\n      });\n    }\n\n    function r(t, e) {\n      for (var n = t; n; n = n.parentNode) {\n        var i = m.get(n);\n        if (i) for (var o = 0; o < i.length; o++) {\n          var r = i[o],\n              s = r.options;\n\n          if (n === t || s.subtree) {\n            var a = e(s);\n            a && r.enqueue(a);\n          }\n        }\n      }\n    }\n\n    function s(t) {\n      this.callback_ = t, this.nodes_ = [], this.records_ = [], this.uid_ = ++C;\n    }\n\n    function a(t, e) {\n      this.type = t, this.target = e, this.addedNodes = [], this.removedNodes = [], this.previousSibling = null, this.nextSibling = null, this.attributeName = null, this.attributeNamespace = null, this.oldValue = null;\n    }\n\n    function u(t) {\n      var e = new a(t.type, t.target);\n      return e.addedNodes = t.addedNodes.slice(), e.removedNodes = t.removedNodes.slice(), e.previousSibling = t.previousSibling, e.nextSibling = t.nextSibling, e.attributeName = t.attributeName, e.attributeNamespace = t.attributeNamespace, e.oldValue = t.oldValue, e;\n    }\n\n    function c(t, e) {\n      return x = new a(t, e);\n    }\n\n    function l(t) {\n      return w ? w : (w = u(x), w.oldValue = t, w);\n    }\n\n    function h() {\n      x = w = void 0;\n    }\n\n    function p(t) {\n      return t === w || t === x;\n    }\n\n    function d(t, e) {\n      return t === e ? t : w && p(t) ? w : null;\n    }\n\n    function f(t, e, n) {\n      this.observer = t, this.target = e, this.options = n, this.transientObservedNodes = [];\n    }\n\n    if (!t.JsMutationObserver) {\n      var g,\n          m = new WeakMap();\n      if (/Trident|Edge/.test(navigator.userAgent)) g = setTimeout;else if (window.setImmediate) g = window.setImmediate;else {\n        var v = [],\n            y = String(Math.random());\n        window.addEventListener(\"message\", function (t) {\n          if (t.data === y) {\n            var e = v;\n            v = [], e.forEach(function (t) {\n              t();\n            });\n          }\n        }), g = function g(t) {\n          v.push(t), window.postMessage(y, \"*\");\n        };\n      }\n      var b = !1,\n          A = [],\n          C = 0;\n      s.prototype = {\n        observe: function observe(t, e) {\n          if (t = n(t), !e.childList && !e.attributes && !e.characterData || e.attributeOldValue && !e.attributes || e.attributeFilter && e.attributeFilter.length && !e.attributes || e.characterDataOldValue && !e.characterData) throw new SyntaxError();\n          var i = m.get(t);\n          i || m.set(t, i = []);\n\n          for (var o, r = 0; r < i.length; r++) {\n            if (i[r].observer === this) {\n              o = i[r], o.removeListeners(), o.options = e;\n              break;\n            }\n          }\n\n          o || (o = new f(this, t, e), i.push(o), this.nodes_.push(t)), o.addListeners();\n        },\n        disconnect: function disconnect() {\n          this.nodes_.forEach(function (t) {\n            for (var e = m.get(t), n = 0; n < e.length; n++) {\n              var i = e[n];\n\n              if (i.observer === this) {\n                i.removeListeners(), e.splice(n, 1);\n                break;\n              }\n            }\n          }, this), this.records_ = [];\n        },\n        takeRecords: function takeRecords() {\n          var t = this.records_;\n          return this.records_ = [], t;\n        }\n      };\n      var x, w;\n      f.prototype = {\n        enqueue: function enqueue(t) {\n          var n = this.observer.records_,\n              i = n.length;\n\n          if (n.length > 0) {\n            var o = n[i - 1],\n                r = d(o, t);\n            if (r) return void (n[i - 1] = r);\n          } else e(this.observer);\n\n          n[i] = t;\n        },\n        addListeners: function addListeners() {\n          this.addListeners_(this.target);\n        },\n        addListeners_: function addListeners_(t) {\n          var e = this.options;\n          e.attributes && t.addEventListener(\"DOMAttrModified\", this, !0), e.characterData && t.addEventListener(\"DOMCharacterDataModified\", this, !0), e.childList && t.addEventListener(\"DOMNodeInserted\", this, !0), (e.childList || e.subtree) && t.addEventListener(\"DOMNodeRemoved\", this, !0);\n        },\n        removeListeners: function removeListeners() {\n          this.removeListeners_(this.target);\n        },\n        removeListeners_: function removeListeners_(t) {\n          var e = this.options;\n          e.attributes && t.removeEventListener(\"DOMAttrModified\", this, !0), e.characterData && t.removeEventListener(\"DOMCharacterDataModified\", this, !0), e.childList && t.removeEventListener(\"DOMNodeInserted\", this, !0), (e.childList || e.subtree) && t.removeEventListener(\"DOMNodeRemoved\", this, !0);\n        },\n        addTransientObserver: function addTransientObserver(t) {\n          if (t !== this.target) {\n            this.addListeners_(t), this.transientObservedNodes.push(t);\n            var e = m.get(t);\n            e || m.set(t, e = []), e.push(this);\n          }\n        },\n        removeTransientObservers: function removeTransientObservers() {\n          var t = this.transientObservedNodes;\n          this.transientObservedNodes = [], t.forEach(function (t) {\n            this.removeListeners_(t);\n\n            for (var e = m.get(t), n = 0; n < e.length; n++) {\n              if (e[n] === this) {\n                e.splice(n, 1);\n                break;\n              }\n            }\n          }, this);\n        },\n        handleEvent: function handleEvent(t) {\n          switch (t.stopImmediatePropagation(), t.type) {\n            case \"DOMAttrModified\":\n              var e = t.attrName,\n                  n = t.relatedNode.namespaceURI,\n                  i = t.target,\n                  o = new c(\"attributes\", i);\n              o.attributeName = e, o.attributeNamespace = n;\n              var s = t.attrChange === MutationEvent.ADDITION ? null : t.prevValue;\n              r(i, function (t) {\n                return !t.attributes || t.attributeFilter && t.attributeFilter.length && -1 === t.attributeFilter.indexOf(e) && -1 === t.attributeFilter.indexOf(n) ? void 0 : t.attributeOldValue ? l(s) : o;\n              });\n              break;\n\n            case \"DOMCharacterDataModified\":\n              var i = t.target,\n                  o = c(\"characterData\", i),\n                  s = t.prevValue;\n              r(i, function (t) {\n                return t.characterData ? t.characterDataOldValue ? l(s) : o : void 0;\n              });\n              break;\n\n            case \"DOMNodeRemoved\":\n              this.addTransientObserver(t.target);\n\n            case \"DOMNodeInserted\":\n              var a,\n                  u,\n                  p = t.target;\n              \"DOMNodeInserted\" === t.type ? (a = [p], u = []) : (a = [], u = [p]);\n              var d = p.previousSibling,\n                  f = p.nextSibling,\n                  o = c(\"childList\", t.target.parentNode);\n              o.addedNodes = a, o.removedNodes = u, o.previousSibling = d, o.nextSibling = f, r(t.relatedNode, function (t) {\n                return t.childList ? o : void 0;\n              });\n          }\n\n          h();\n        }\n      }, t.JsMutationObserver = s, t.MutationObserver || (t.MutationObserver = s, s._isPolyfilled = !0);\n    }\n  }(self), function () {\n    \"use strict\";\n\n    if (!window.performance || !window.performance.now) {\n      var t = Date.now();\n      window.performance = {\n        now: function now() {\n          return Date.now() - t;\n        }\n      };\n    }\n\n    window.requestAnimationFrame || (window.requestAnimationFrame = function () {\n      var t = window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame;\n      return t ? function (e) {\n        return t(function () {\n          e(performance.now());\n        });\n      } : function (t) {\n        return window.setTimeout(t, 1e3 / 60);\n      };\n    }()), window.cancelAnimationFrame || (window.cancelAnimationFrame = function () {\n      return window.webkitCancelAnimationFrame || window.mozCancelAnimationFrame || function (t) {\n        clearTimeout(t);\n      };\n    }());\n\n    var e = function () {\n      var t = document.createEvent(\"Event\");\n      return t.initEvent(\"foo\", !0, !0), t.preventDefault(), t.defaultPrevented;\n    }();\n\n    if (!e) {\n      var n = Event.prototype.preventDefault;\n\n      Event.prototype.preventDefault = function () {\n        this.cancelable && (n.call(this), Object.defineProperty(this, \"defaultPrevented\", {\n          get: function get() {\n            return !0;\n          },\n          configurable: !0\n        }));\n      };\n    }\n\n    var i = /Trident/.test(navigator.userAgent);\n\n    if ((!window.CustomEvent || i && \"function\" != typeof window.CustomEvent) && (window.CustomEvent = function (t, e) {\n      e = e || {};\n      var n = document.createEvent(\"CustomEvent\");\n      return n.initCustomEvent(t, Boolean(e.bubbles), Boolean(e.cancelable), e.detail), n;\n    }, window.CustomEvent.prototype = window.Event.prototype), !window.Event || i && \"function\" != typeof window.Event) {\n      var o = window.Event;\n      window.Event = function (t, e) {\n        e = e || {};\n        var n = document.createEvent(\"Event\");\n        return n.initEvent(t, Boolean(e.bubbles), Boolean(e.cancelable)), n;\n      }, window.Event.prototype = o.prototype;\n    }\n  }(window.WebComponents), window.CustomElements = window.CustomElements || {\n    flags: {}\n  }, function (t) {\n    var e = t.flags,\n        n = [],\n        i = function i(t) {\n      n.push(t);\n    },\n        o = function o() {\n      n.forEach(function (e) {\n        e(t);\n      });\n    };\n\n    t.addModule = i, t.initializeModules = o, t.hasNative = Boolean(document.registerElement), t.isIE = /Trident/.test(navigator.userAgent), t.useNative = !e.register && t.hasNative && !window.ShadowDOMPolyfill && (!window.HTMLImports || window.HTMLImports.useNative);\n  }(window.CustomElements), window.CustomElements.addModule(function (t) {\n    function e(t, e) {\n      n(t, function (t) {\n        return e(t) ? !0 : void i(t, e);\n      }), i(t, e);\n    }\n\n    function n(t, e, i) {\n      var o = t.firstElementChild;\n      if (!o) for (o = t.firstChild; o && o.nodeType !== Node.ELEMENT_NODE;) {\n        o = o.nextSibling;\n      }\n\n      for (; o;) {\n        e(o, i) !== !0 && n(o, e, i), o = o.nextElementSibling;\n      }\n\n      return null;\n    }\n\n    function i(t, n) {\n      for (var i = t.shadowRoot; i;) {\n        e(i, n), i = i.olderShadowRoot;\n      }\n    }\n\n    function o(t, e) {\n      r(t, e, []);\n    }\n\n    function r(t, e, n) {\n      if (t = window.wrap(t), !(n.indexOf(t) >= 0)) {\n        n.push(t);\n\n        for (var i, o = t.querySelectorAll(\"link[rel=\" + s + \"]\"), a = 0, u = o.length; u > a && (i = o[a]); a++) {\n          i[\"import\"] && r(i[\"import\"], e, n);\n        }\n\n        e(t);\n      }\n    }\n\n    var s = window.HTMLImports ? window.HTMLImports.IMPORT_LINK_TYPE : \"none\";\n    t.forDocumentTree = o, t.forSubtree = e;\n  }), window.CustomElements.addModule(function (t) {\n    function e(t, e) {\n      return n(t, e) || i(t, e);\n    }\n\n    function n(e, n) {\n      return t.upgrade(e, n) ? !0 : void (n && s(e));\n    }\n\n    function i(t, e) {\n      b(t, function (t) {\n        return n(t, e) ? !0 : void 0;\n      });\n    }\n\n    function o(t) {\n      w.push(t), x || (x = !0, setTimeout(r));\n    }\n\n    function r() {\n      x = !1;\n\n      for (var t, e = w, n = 0, i = e.length; i > n && (t = e[n]); n++) {\n        t();\n      }\n\n      w = [];\n    }\n\n    function s(t) {\n      C ? o(function () {\n        a(t);\n      }) : a(t);\n    }\n\n    function a(t) {\n      t.__upgraded__ && !t.__attached && (t.__attached = !0, t.attachedCallback && t.attachedCallback());\n    }\n\n    function u(t) {\n      c(t), b(t, function (t) {\n        c(t);\n      });\n    }\n\n    function c(t) {\n      C ? o(function () {\n        l(t);\n      }) : l(t);\n    }\n\n    function l(t) {\n      t.__upgraded__ && t.__attached && (t.__attached = !1, t.detachedCallback && t.detachedCallback());\n    }\n\n    function h(t) {\n      for (var e = t, n = window.wrap(document); e;) {\n        if (e == n) return !0;\n        e = e.parentNode || e.nodeType === Node.DOCUMENT_FRAGMENT_NODE && e.host;\n      }\n    }\n\n    function p(t) {\n      if (t.shadowRoot && !t.shadowRoot.__watched) {\n        y.dom && console.log(\"watching shadow-root for: \", t.localName);\n\n        for (var e = t.shadowRoot; e;) {\n          g(e), e = e.olderShadowRoot;\n        }\n      }\n    }\n\n    function d(t, n) {\n      if (y.dom) {\n        var i = n[0];\n\n        if (i && \"childList\" === i.type && i.addedNodes && i.addedNodes) {\n          for (var o = i.addedNodes[0]; o && o !== document && !o.host;) {\n            o = o.parentNode;\n          }\n\n          var r = o && (o.URL || o._URL || o.host && o.host.localName) || \"\";\n          r = r.split(\"/?\").shift().split(\"/\").pop();\n        }\n\n        console.group(\"mutations (%d) [%s]\", n.length, r || \"\");\n      }\n\n      var s = h(t);\n      n.forEach(function (t) {\n        \"childList\" === t.type && (E(t.addedNodes, function (t) {\n          t.localName && e(t, s);\n        }), E(t.removedNodes, function (t) {\n          t.localName && u(t);\n        }));\n      }), y.dom && console.groupEnd();\n    }\n\n    function f(t) {\n      for (t = window.wrap(t), t || (t = window.wrap(document)); t.parentNode;) {\n        t = t.parentNode;\n      }\n\n      var e = t.__observer;\n      e && (d(t, e.takeRecords()), r());\n    }\n\n    function g(t) {\n      if (!t.__observer) {\n        var e = new MutationObserver(d.bind(this, t));\n        e.observe(t, {\n          childList: !0,\n          subtree: !0\n        }), t.__observer = e;\n      }\n    }\n\n    function m(t) {\n      t = window.wrap(t), y.dom && console.group(\"upgradeDocument: \", t.baseURI.split(\"/\").pop());\n      var n = t === window.wrap(document);\n      e(t, n), g(t), y.dom && console.groupEnd();\n    }\n\n    function v(t) {\n      A(t, m);\n    }\n\n    var y = t.flags,\n        b = t.forSubtree,\n        A = t.forDocumentTree,\n        C = window.MutationObserver._isPolyfilled && y[\"throttle-attached\"];\n    t.hasPolyfillMutations = C, t.hasThrottledAttached = C;\n    var x = !1,\n        w = [],\n        E = Array.prototype.forEach.call.bind(Array.prototype.forEach),\n        S = Element.prototype.createShadowRoot;\n    S && (Element.prototype.createShadowRoot = function () {\n      var t = S.call(this);\n      return window.CustomElements.watchShadow(this), t;\n    }), t.watchShadow = p, t.upgradeDocumentTree = v, t.upgradeDocument = m, t.upgradeSubtree = i, t.upgradeAll = e, t.attached = s, t.takeRecords = f;\n  }), window.CustomElements.addModule(function (t) {\n    function e(e, i) {\n      if (\"template\" === e.localName && window.HTMLTemplateElement && HTMLTemplateElement.decorate && HTMLTemplateElement.decorate(e), !e.__upgraded__ && e.nodeType === Node.ELEMENT_NODE) {\n        var o = e.getAttribute(\"is\"),\n            r = t.getRegisteredDefinition(e.localName) || t.getRegisteredDefinition(o);\n        if (r && (o && r.tag == e.localName || !o && !r[\"extends\"])) return n(e, r, i);\n      }\n    }\n\n    function n(e, n, o) {\n      return s.upgrade && console.group(\"upgrade:\", e.localName), n.is && e.setAttribute(\"is\", n.is), i(e, n), e.__upgraded__ = !0, r(e), o && t.attached(e), t.upgradeSubtree(e, o), s.upgrade && console.groupEnd(), e;\n    }\n\n    function i(t, e) {\n      Object.__proto__ ? t.__proto__ = e.prototype : (o(t, e.prototype, e[\"native\"]), t.__proto__ = e.prototype);\n    }\n\n    function o(t, e, n) {\n      for (var i = {}, o = e; o !== n && o !== HTMLElement.prototype;) {\n        for (var r, s = Object.getOwnPropertyNames(o), a = 0; r = s[a]; a++) {\n          i[r] || (Object.defineProperty(t, r, Object.getOwnPropertyDescriptor(o, r)), i[r] = 1);\n        }\n\n        o = Object.getPrototypeOf(o);\n      }\n    }\n\n    function r(t) {\n      t.createdCallback && t.createdCallback();\n    }\n\n    var s = t.flags;\n    t.upgrade = e, t.upgradeWithDefinition = n, t.implementPrototype = i;\n  }), window.CustomElements.addModule(function (t) {\n    function e(e, i) {\n      var u = i || {};\n      if (!e) throw new Error(\"document.registerElement: first argument `name` must not be empty\");\n      if (e.indexOf(\"-\") < 0) throw new Error(\"document.registerElement: first argument ('name') must contain a dash ('-'). Argument provided was '\" + String(e) + \"'.\");\n      if (o(e)) throw new Error(\"Failed to execute 'registerElement' on 'Document': Registration failed for type '\" + String(e) + \"'. The type name is invalid.\");\n      if (c(e)) throw new Error(\"DuplicateDefinitionError: a type with name '\" + String(e) + \"' is already registered\");\n      return u.prototype || (u.prototype = Object.create(HTMLElement.prototype)), u.__name = e.toLowerCase(), u[\"extends\"] && (u[\"extends\"] = u[\"extends\"].toLowerCase()), u.lifecycle = u.lifecycle || {}, u.ancestry = r(u[\"extends\"]), s(u), a(u), n(u.prototype), l(u.__name, u), u.ctor = h(u), u.ctor.prototype = u.prototype, u.prototype.constructor = u.ctor, t.ready && m(document), u.ctor;\n    }\n\n    function n(t) {\n      if (!t.setAttribute._polyfilled) {\n        var e = t.setAttribute;\n\n        t.setAttribute = function (t, n) {\n          i.call(this, t, n, e);\n        };\n\n        var n = t.removeAttribute;\n        t.removeAttribute = function (t) {\n          i.call(this, t, null, n);\n        }, t.setAttribute._polyfilled = !0;\n      }\n    }\n\n    function i(t, e, n) {\n      t = t.toLowerCase();\n      var i = this.getAttribute(t);\n      n.apply(this, arguments);\n      var o = this.getAttribute(t);\n      this.attributeChangedCallback && o !== i && this.attributeChangedCallback(t, i, o);\n    }\n\n    function o(t) {\n      for (var e = 0; e < C.length; e++) {\n        if (t === C[e]) return !0;\n      }\n    }\n\n    function r(t) {\n      var e = c(t);\n      return e ? r(e[\"extends\"]).concat([e]) : [];\n    }\n\n    function s(t) {\n      for (var e, n = t[\"extends\"], i = 0; e = t.ancestry[i]; i++) {\n        n = e.is && e.tag;\n      }\n\n      t.tag = n || t.__name, n && (t.is = t.__name);\n    }\n\n    function a(t) {\n      if (!Object.__proto__) {\n        var e = HTMLElement.prototype;\n\n        if (t.is) {\n          var n = document.createElement(t.tag);\n          e = Object.getPrototypeOf(n);\n        }\n\n        for (var i, o = t.prototype, r = !1; o;) {\n          o == e && (r = !0), i = Object.getPrototypeOf(o), i && (o.__proto__ = i), o = i;\n        }\n\n        r || console.warn(t.tag + \" prototype not found in prototype chain for \" + t.is), t[\"native\"] = e;\n      }\n    }\n\n    function u(t) {\n      return y(E(t.tag), t);\n    }\n\n    function c(t) {\n      return t ? x[t.toLowerCase()] : void 0;\n    }\n\n    function l(t, e) {\n      x[t] = e;\n    }\n\n    function h(t) {\n      return function () {\n        return u(t);\n      };\n    }\n\n    function p(t, e, n) {\n      return t === w ? d(e, n) : S(t, e);\n    }\n\n    function d(t, e) {\n      t && (t = t.toLowerCase()), e && (e = e.toLowerCase());\n      var n = c(e || t);\n\n      if (n) {\n        if (t == n.tag && e == n.is) return new n.ctor();\n        if (!e && !n.is) return new n.ctor();\n      }\n\n      var i;\n      return e ? (i = d(t), i.setAttribute(\"is\", e), i) : (i = E(t), t.indexOf(\"-\") >= 0 && b(i, HTMLElement), i);\n    }\n\n    function f(t, e) {\n      var n = t[e];\n\n      t[e] = function () {\n        var t = n.apply(this, arguments);\n        return v(t), t;\n      };\n    }\n\n    var g,\n        m = (t.isIE, t.upgradeDocumentTree),\n        v = t.upgradeAll,\n        y = t.upgradeWithDefinition,\n        b = t.implementPrototype,\n        A = t.useNative,\n        C = [\"annotation-xml\", \"color-profile\", \"font-face\", \"font-face-src\", \"font-face-uri\", \"font-face-format\", \"font-face-name\", \"missing-glyph\"],\n        x = {},\n        w = \"http://www.w3.org/1999/xhtml\",\n        E = document.createElement.bind(document),\n        S = document.createElementNS.bind(document);\n    g = Object.__proto__ || A ? function (t, e) {\n      return t instanceof e;\n    } : function (t, e) {\n      if (t instanceof e) return !0;\n\n      for (var n = t; n;) {\n        if (n === e.prototype) return !0;\n        n = n.__proto__;\n      }\n\n      return !1;\n    }, f(Node.prototype, \"cloneNode\"), f(document, \"importNode\"), document.registerElement = e, document.createElement = d, document.createElementNS = p, t.registry = x, t[\"instanceof\"] = g, t.reservedTagList = C, t.getRegisteredDefinition = c, document.register = document.registerElement;\n  }), function (t) {\n    function e() {\n      r(window.wrap(document)), window.CustomElements.ready = !0;\n\n      var t = window.requestAnimationFrame || function (t) {\n        setTimeout(t, 16);\n      };\n\n      t(function () {\n        setTimeout(function () {\n          window.CustomElements.readyTime = Date.now(), window.HTMLImports && (window.CustomElements.elapsed = window.CustomElements.readyTime - window.HTMLImports.readyTime), document.dispatchEvent(new CustomEvent(\"WebComponentsReady\", {\n            bubbles: !0\n          }));\n        });\n      });\n    }\n\n    var n = t.useNative,\n        i = t.initializeModules;\n\n    if (t.isIE, n) {\n      var o = function o() {};\n\n      t.watchShadow = o, t.upgrade = o, t.upgradeAll = o, t.upgradeDocumentTree = o, t.upgradeSubtree = o, t.takeRecords = o, t[\"instanceof\"] = function (t, e) {\n        return t instanceof e;\n      };\n    } else i();\n\n    var r = t.upgradeDocumentTree,\n        s = t.upgradeDocument;\n    if (window.wrap || (window.ShadowDOMPolyfill ? (window.wrap = window.ShadowDOMPolyfill.wrapIfNeeded, window.unwrap = window.ShadowDOMPolyfill.unwrapIfNeeded) : window.wrap = window.unwrap = function (t) {\n      return t;\n    }), window.HTMLImports && (window.HTMLImports.__importsParsingHook = function (t) {\n      t[\"import\"] && s(wrap(t[\"import\"]));\n    }), \"complete\" === document.readyState || t.flags.eager) e();else if (\"interactive\" !== document.readyState || window.attachEvent || window.HTMLImports && !window.HTMLImports.ready) {\n      var a = window.HTMLImports && !window.HTMLImports.ready ? \"HTMLImportsLoaded\" : \"DOMContentLoaded\";\n      window.addEventListener(a, e);\n    } else e();\n  }(window.CustomElements));\n}.call(this), function () {}.call(this), function () {\n  var t = this;\n  (function () {\n    (function () {\n      this.Trix = {\n        VERSION: \"1.2.0\",\n        ZERO_WIDTH_SPACE: \"\\uFEFF\",\n        NON_BREAKING_SPACE: \"\\xa0\",\n        OBJECT_REPLACEMENT_CHARACTER: \"\\uFFFC\",\n        browser: {\n          composesExistingText: /Android.*Chrome/.test(navigator.userAgent),\n          forcesObjectResizing: /Trident.*rv:11/.test(navigator.userAgent),\n          supportsInputEvents: function () {\n            var t, e, n, i;\n            if (\"undefined\" == typeof InputEvent) return !1;\n\n            for (i = [\"data\", \"getTargetRanges\", \"inputType\"], t = 0, e = i.length; e > t; t++) {\n              if (n = i[t], !(n in InputEvent.prototype)) return !1;\n            }\n\n            return !0;\n          }()\n        },\n        config: {}\n      };\n    }).call(this);\n  }).call(t);\n  var e = t.Trix;\n  (function () {\n    (function () {\n      e.BasicObject = function () {\n        function t() {}\n\n        var e, n, i;\n        return t.proxyMethod = function (t) {\n          var i, o, r, s, a;\n          return r = n(t), i = r.name, s = r.toMethod, a = r.toProperty, o = r.optional, this.prototype[i] = function () {\n            var t, n;\n            return t = null != s ? o ? \"function\" == typeof this[s] ? this[s]() : void 0 : this[s]() : null != a ? this[a] : void 0, o ? (n = null != t ? t[i] : void 0, null != n ? e.call(n, t, arguments) : void 0) : (n = t[i], e.call(n, t, arguments));\n          };\n        }, n = function n(t) {\n          var e, n;\n          if (!(n = t.match(i))) throw new Error(\"can't parse @proxyMethod expression: \" + t);\n          return e = {\n            name: n[4]\n          }, null != n[2] ? e.toMethod = n[1] : e.toProperty = n[1], null != n[3] && (e.optional = !0), e;\n        }, e = Function.prototype.apply, i = /^(.+?)(\\(\\))?(\\?)?\\.(.+?)$/, t;\n      }();\n    }).call(this), function () {\n      var t = function t(_t, e) {\n        function i() {\n          this.constructor = _t;\n        }\n\n        for (var o in e) {\n          n.call(e, o) && (_t[o] = e[o]);\n        }\n\n        return i.prototype = e.prototype, _t.prototype = new i(), _t.__super__ = e.prototype, _t;\n      },\n          n = {}.hasOwnProperty;\n\n      e.Object = function (n) {\n        function i() {\n          this.id = ++o;\n        }\n\n        var o;\n        return t(i, n), o = 0, i.fromJSONString = function (t) {\n          return this.fromJSON(JSON.parse(t));\n        }, i.prototype.hasSameConstructorAs = function (t) {\n          return this.constructor === (null != t ? t.constructor : void 0);\n        }, i.prototype.isEqualTo = function (t) {\n          return this === t;\n        }, i.prototype.inspect = function () {\n          var t, e, n;\n          return t = function () {\n            var t, i, o;\n            i = null != (t = this.contentsForInspection()) ? t : {}, o = [];\n\n            for (e in i) {\n              n = i[e], o.push(e + \"=\" + n);\n            }\n\n            return o;\n          }.call(this), \"#<\" + this.constructor.name + \":\" + this.id + (t.length ? \" \" + t.join(\", \") : \"\") + \">\";\n        }, i.prototype.contentsForInspection = function () {}, i.prototype.toJSONString = function () {\n          return JSON.stringify(this);\n        }, i.prototype.toUTF16String = function () {\n          return e.UTF16String.box(this);\n        }, i.prototype.getCacheKey = function () {\n          return this.id.toString();\n        }, i;\n      }(e.BasicObject);\n    }.call(this), function () {\n      e.extend = function (t) {\n        var e, n;\n\n        for (e in t) {\n          n = t[e], this[e] = n;\n        }\n\n        return this;\n      };\n    }.call(this), function () {\n      e.extend({\n        defer: function defer(t) {\n          return setTimeout(t, 1);\n        }\n      });\n    }.call(this), function () {\n      var t, n;\n      e.extend({\n        normalizeSpaces: function normalizeSpaces(t) {\n          return t.replace(RegExp(\"\" + e.ZERO_WIDTH_SPACE, \"g\"), \"\").replace(RegExp(\"\" + e.NON_BREAKING_SPACE, \"g\"), \" \");\n        },\n        normalizeNewlines: function normalizeNewlines(t) {\n          return t.replace(/\\r\\n/g, \"\\n\");\n        },\n        breakableWhitespacePattern: RegExp(\"[^\\\\S\" + e.NON_BREAKING_SPACE + \"]\"),\n        squishBreakableWhitespace: function squishBreakableWhitespace(t) {\n          return t.replace(RegExp(\"\" + e.breakableWhitespacePattern.source, \"g\"), \" \").replace(/\\ {2,}/g, \" \");\n        },\n        escapeHTML: function escapeHTML(t) {\n          var e;\n          return e = document.createElement(\"div\"), e.textContent = t, e.innerHTML;\n        },\n        summarizeStringChange: function summarizeStringChange(t, i) {\n          var o, r, s, a;\n          return t = e.UTF16String.box(t), i = e.UTF16String.box(i), i.length < t.length ? (r = n(t, i), a = r[0], o = r[1]) : (s = n(i, t), o = s[0], a = s[1]), {\n            added: o,\n            removed: a\n          };\n        }\n      }), n = function n(_n, i) {\n        var o, r, s, a, u;\n        return _n.isEqualTo(i) ? [\"\", \"\"] : (r = t(_n, i), a = r.utf16String.length, s = a ? (u = r.offset, r, o = _n.codepoints.slice(0, u).concat(_n.codepoints.slice(u + a)), t(i, e.UTF16String.fromCodepoints(o))) : t(i, _n), [r.utf16String.toString(), s.utf16String.toString()]);\n      }, t = function t(_t2, e) {\n        var n, i, o;\n\n        for (n = 0, i = _t2.length, o = e.length; i > n && _t2.charAt(n).isEqualTo(e.charAt(n));) {\n          n++;\n        }\n\n        for (; i > n + 1 && _t2.charAt(i - 1).isEqualTo(e.charAt(o - 1));) {\n          i--, o--;\n        }\n\n        return {\n          utf16String: _t2.slice(n, i),\n          offset: n\n        };\n      };\n    }.call(this), function () {\n      e.extend({\n        copyObject: function copyObject(t) {\n          var e, n, i;\n          null == t && (t = {}), n = {};\n\n          for (e in t) {\n            i = t[e], n[e] = i;\n          }\n\n          return n;\n        },\n        objectsAreEqual: function objectsAreEqual(t, e) {\n          var n, i;\n          if (null == t && (t = {}), null == e && (e = {}), Object.keys(t).length !== Object.keys(e).length) return !1;\n\n          for (n in t) {\n            if (i = t[n], i !== e[n]) return !1;\n          }\n\n          return !0;\n        }\n      });\n    }.call(this), function () {\n      var t = [].slice;\n      e.extend({\n        arraysAreEqual: function arraysAreEqual(t, e) {\n          var n, i, o, r;\n          if (null == t && (t = []), null == e && (e = []), t.length !== e.length) return !1;\n\n          for (i = n = 0, o = t.length; o > n; i = ++n) {\n            if (r = t[i], r !== e[i]) return !1;\n          }\n\n          return !0;\n        },\n        arrayStartsWith: function arrayStartsWith(t, n) {\n          return null == t && (t = []), null == n && (n = []), e.arraysAreEqual(t.slice(0, n.length), n);\n        },\n        spliceArray: function spliceArray() {\n          var e, n, i;\n          return n = arguments[0], e = 2 <= arguments.length ? t.call(arguments, 1) : [], i = n.slice(0), i.splice.apply(i, e), i;\n        },\n        summarizeArrayChange: function summarizeArrayChange(t, e) {\n          var n, i, o, r, s, a, u, c, l, h, p;\n\n          for (null == t && (t = []), null == e && (e = []), n = [], h = [], o = new Set(), r = 0, u = t.length; u > r; r++) {\n            p = t[r], o.add(p);\n          }\n\n          for (i = new Set(), s = 0, c = e.length; c > s; s++) {\n            p = e[s], i.add(p), o.has(p) || n.push(p);\n          }\n\n          for (a = 0, l = t.length; l > a; a++) {\n            p = t[a], i.has(p) || h.push(p);\n          }\n\n          return {\n            added: n,\n            removed: h\n          };\n        }\n      });\n    }.call(this), function () {\n      var t, n, i, o;\n      t = null, n = null, o = null, i = null, e.extend({\n        getAllAttributeNames: function getAllAttributeNames() {\n          return null != t ? t : t = e.getTextAttributeNames().concat(e.getBlockAttributeNames());\n        },\n        getBlockConfig: function getBlockConfig(t) {\n          return e.config.blockAttributes[t];\n        },\n        getBlockAttributeNames: function getBlockAttributeNames() {\n          return null != n ? n : n = Object.keys(e.config.blockAttributes);\n        },\n        getTextConfig: function getTextConfig(t) {\n          return e.config.textAttributes[t];\n        },\n        getTextAttributeNames: function getTextAttributeNames() {\n          return null != o ? o : o = Object.keys(e.config.textAttributes);\n        },\n        getListAttributeNames: function getListAttributeNames() {\n          var t, n;\n          return null != i ? i : i = function () {\n            var i, o;\n            i = e.config.blockAttributes, o = [];\n\n            for (t in i) {\n              n = i[t].listAttribute, null != n && o.push(n);\n            }\n\n            return o;\n          }();\n        }\n      });\n    }.call(this), function () {\n      var t,\n          n,\n          i,\n          o,\n          r,\n          s = [].indexOf || function (t) {\n        for (var e = 0, n = this.length; n > e; e++) {\n          if (e in this && this[e] === t) return e;\n        }\n\n        return -1;\n      };\n\n      t = document.documentElement, n = null != (i = null != (o = null != (r = t.matchesSelector) ? r : t.webkitMatchesSelector) ? o : t.msMatchesSelector) ? i : t.mozMatchesSelector, e.extend({\n        handleEvent: function handleEvent(n, i) {\n          var o, r, _s, a, u, c, l, h, p, d, f, g;\n\n          return h = null != i ? i : {}, c = h.onElement, u = h.matchingSelector, g = h.withCallback, a = h.inPhase, l = h.preventDefault, d = h.times, r = null != c ? c : t, p = u, o = g, f = \"capturing\" === a, _s = function s(t) {\n            var n;\n            return null != d && 0 === --d && _s.destroy(), n = e.findClosestElementFromNode(t.target, {\n              matchingSelector: p\n            }), null != n && (null != g && g.call(n, t, n), l) ? t.preventDefault() : void 0;\n          }, _s.destroy = function () {\n            return r.removeEventListener(n, _s, f);\n          }, r.addEventListener(n, _s, f), _s;\n        },\n        handleEventOnce: function handleEventOnce(t, n) {\n          return null == n && (n = {}), n.times = 1, e.handleEvent(t, n);\n        },\n        triggerEvent: function triggerEvent(n, i) {\n          var o, r, s, a, u, c, l;\n          return l = null != i ? i : {}, c = l.onElement, r = l.bubbles, s = l.cancelable, o = l.attributes, a = null != c ? c : t, r = r !== !1, s = s !== !1, u = document.createEvent(\"Events\"), u.initEvent(n, r, s), null != o && e.extend.call(u, o), a.dispatchEvent(u);\n        },\n        elementMatchesSelector: function elementMatchesSelector(t, e) {\n          return 1 === (null != t ? t.nodeType : void 0) ? n.call(t, e) : void 0;\n        },\n        findClosestElementFromNode: function findClosestElementFromNode(t, n) {\n          var i, o, r;\n\n          for (o = null != n ? n : {}, i = o.matchingSelector, r = o.untilNode; null != t && t.nodeType !== Node.ELEMENT_NODE;) {\n            t = t.parentNode;\n          }\n\n          if (null != t) {\n            if (null == i) return t;\n            if (t.closest && null == r) return t.closest(i);\n\n            for (; t && t !== r;) {\n              if (e.elementMatchesSelector(t, i)) return t;\n              t = t.parentNode;\n            }\n          }\n        },\n        findInnerElement: function findInnerElement(t) {\n          for (; null != t ? t.firstElementChild : void 0;) {\n            t = t.firstElementChild;\n          }\n\n          return t;\n        },\n        innerElementIsActive: function innerElementIsActive(t) {\n          return document.activeElement !== t && e.elementContainsNode(t, document.activeElement);\n        },\n        elementContainsNode: function elementContainsNode(t, e) {\n          if (t && e) for (; e;) {\n            if (e === t) return !0;\n            e = e.parentNode;\n          }\n        },\n        findNodeFromContainerAndOffset: function findNodeFromContainerAndOffset(t, e) {\n          var n;\n          if (t) return t.nodeType === Node.TEXT_NODE ? t : 0 === e ? null != (n = t.firstChild) ? n : t : t.childNodes.item(e - 1);\n        },\n        findElementFromContainerAndOffset: function findElementFromContainerAndOffset(t, n) {\n          var i;\n          return i = e.findNodeFromContainerAndOffset(t, n), e.findClosestElementFromNode(i);\n        },\n        findChildIndexOfNode: function findChildIndexOfNode(t) {\n          var e;\n\n          if (null != t ? t.parentNode : void 0) {\n            for (e = 0; t = t.previousSibling;) {\n              e++;\n            }\n\n            return e;\n          }\n        },\n        removeNode: function removeNode(t) {\n          var e;\n          return null != t && null != (e = t.parentNode) ? e.removeChild(t) : void 0;\n        },\n        walkTree: function walkTree(t, e) {\n          var n, i, o, r, s;\n          return o = null != e ? e : {}, i = o.onlyNodesOfType, r = o.usingFilter, n = o.expandEntityReferences, s = function () {\n            switch (i) {\n              case \"element\":\n                return NodeFilter.SHOW_ELEMENT;\n\n              case \"text\":\n                return NodeFilter.SHOW_TEXT;\n\n              case \"comment\":\n                return NodeFilter.SHOW_COMMENT;\n\n              default:\n                return NodeFilter.SHOW_ALL;\n            }\n          }(), document.createTreeWalker(t, s, null != r ? r : null, n === !0);\n        },\n        tagName: function tagName(t) {\n          var e;\n          return null != t && null != (e = t.tagName) ? e.toLowerCase() : void 0;\n        },\n        makeElement: function makeElement(t, e) {\n          var n, i, o, r, s, a, u, c, l, h;\n\n          if (null == e && (e = {}), \"object\" == _typeof(t) ? (e = t, t = e.tagName) : e = {\n            attributes: e\n          }, i = document.createElement(t), null != e.editable && (null == e.attributes && (e.attributes = {}), e.attributes.contenteditable = e.editable), e.attributes) {\n            a = e.attributes;\n\n            for (r in a) {\n              h = a[r], i.setAttribute(r, h);\n            }\n          }\n\n          if (e.style) {\n            u = e.style;\n\n            for (r in u) {\n              h = u[r], i.style[r] = h;\n            }\n          }\n\n          if (e.data) {\n            c = e.data;\n\n            for (r in c) {\n              h = c[r], i.dataset[r] = h;\n            }\n          }\n\n          if (e.className) for (l = e.className.split(\" \"), o = 0, s = l.length; s > o; o++) {\n            n = l[o], i.classList.add(n);\n          }\n          return e.textContent && (i.textContent = e.textContent), i;\n        },\n        getBlockTagNames: function getBlockTagNames() {\n          var t, n;\n          return null != e.blockTagNames ? e.blockTagNames : e.blockTagNames = function () {\n            var i, o;\n            i = e.config.blockAttributes, o = [];\n\n            for (t in i) {\n              n = i[t].tagName, n && o.push(n);\n            }\n\n            return o;\n          }();\n        },\n        nodeIsBlockContainer: function nodeIsBlockContainer(t) {\n          return e.nodeIsBlockStartComment(null != t ? t.firstChild : void 0);\n        },\n        nodeProbablyIsBlockContainer: function nodeProbablyIsBlockContainer(t) {\n          var n, i;\n          return n = e.tagName(t), s.call(e.getBlockTagNames(), n) >= 0 && (i = e.tagName(t.firstChild), s.call(e.getBlockTagNames(), i) < 0);\n        },\n        nodeIsBlockStart: function nodeIsBlockStart(t, n) {\n          var i;\n          return i = (null != n ? n : {\n            strict: !0\n          }).strict, i ? e.nodeIsBlockStartComment(t) : e.nodeIsBlockStartComment(t) || !e.nodeIsBlockStartComment(t.firstChild) && e.nodeProbablyIsBlockContainer(t);\n        },\n        nodeIsBlockStartComment: function nodeIsBlockStartComment(t) {\n          return e.nodeIsCommentNode(t) && \"block\" === (null != t ? t.data : void 0);\n        },\n        nodeIsCommentNode: function nodeIsCommentNode(t) {\n          return (null != t ? t.nodeType : void 0) === Node.COMMENT_NODE;\n        },\n        nodeIsCursorTarget: function nodeIsCursorTarget(t, n) {\n          var i;\n          return i = (null != n ? n : {}).name, t ? e.nodeIsTextNode(t) ? t.data === e.ZERO_WIDTH_SPACE ? i ? t.parentNode.dataset.trixCursorTarget === i : !0 : void 0 : e.nodeIsCursorTarget(t.firstChild) : void 0;\n        },\n        nodeIsAttachmentElement: function nodeIsAttachmentElement(t) {\n          return e.elementMatchesSelector(t, e.AttachmentView.attachmentSelector);\n        },\n        nodeIsEmptyTextNode: function nodeIsEmptyTextNode(t) {\n          return e.nodeIsTextNode(t) && \"\" === (null != t ? t.data : void 0);\n        },\n        nodeIsTextNode: function nodeIsTextNode(t) {\n          return (null != t ? t.nodeType : void 0) === Node.TEXT_NODE;\n        }\n      });\n    }.call(this), function () {\n      var t, n, i, o, r;\n      t = e.copyObject, o = e.objectsAreEqual, e.extend({\n        normalizeRange: i = function i(t) {\n          var e;\n          if (null != t) return Array.isArray(t) || (t = [t, t]), [n(t[0]), n(null != (e = t[1]) ? e : t[0])];\n        },\n        rangeIsCollapsed: function rangeIsCollapsed(t) {\n          var e, n, o;\n          if (null != t) return n = i(t), o = n[0], e = n[1], r(o, e);\n        },\n        rangesAreEqual: function rangesAreEqual(t, e) {\n          var n, o, s, a, u, c;\n          if (null != t && null != e) return s = i(t), o = s[0], n = s[1], a = i(e), c = a[0], u = a[1], r(o, c) && r(n, u);\n        }\n      }), n = function n(e) {\n        return \"number\" == typeof e ? e : t(e);\n      }, r = function r(t, e) {\n        return \"number\" == typeof t ? t === e : o(t, e);\n      };\n    }.call(this), function () {\n      var t, n, i, o, r;\n      e.registerElement = function (t, e) {\n        var s, a;\n        return null == e && (e = {}), t = t.toLowerCase(), e = r(e), a = o(e), (s = a.defaultCSS) && (delete a.defaultCSS, n(s, t)), i(t, a);\n      }, n = function n(e, _n2) {\n        var i;\n        return i = t(_n2), i.textContent = e.replace(/%t/g, _n2);\n      }, t = function t(_t3) {\n        var e;\n        return e = document.createElement(\"style\"), e.setAttribute(\"type\", \"text/css\"), e.setAttribute(\"data-tag-name\", _t3.toLowerCase()), document.head.insertBefore(e, document.head.firstChild), e;\n      }, o = function o(t) {\n        var e, n, i;\n        n = {};\n\n        for (e in t) {\n          i = t[e], n[e] = \"function\" == typeof i ? {\n            value: i\n          } : i;\n        }\n\n        return n;\n      }, r = function () {\n        var t;\n        return t = function t(_t4) {\n          var e, n, i, o, r;\n\n          for (e = {}, r = [\"initialize\", \"connect\", \"disconnect\"], n = 0, o = r.length; o > n; n++) {\n            i = r[n], e[i] = _t4[i], delete _t4[i];\n          }\n\n          return e;\n        }, window.customElements ? function (e) {\n          var n, i, o, r, s;\n          return s = t(e), o = s.initialize, n = s.connect, i = s.disconnect, o && (r = n, n = function n() {\n            return this.initialized || (this.initialized = !0, o.call(this)), null != r ? r.call(this) : void 0;\n          }), n && (e.connectedCallback = n), i && (e.disconnectedCallback = i), e;\n        } : function (e) {\n          var n, i, o, r;\n          return r = t(e), o = r.initialize, n = r.connect, i = r.disconnect, o && (e.createdCallback = o), n && (e.attachedCallback = n), i && (e.detachedCallback = i), e;\n        };\n      }(), i = function () {\n        return window.customElements ? function (t, e) {\n          var _n3;\n\n          return _n3 = function n() {\n            return Reflect.construct(HTMLElement, [], _n3);\n          }, _n3.prototype = Object.create(HTMLElement.prototype, e), window.customElements.define(t, _n3), _n3;\n        } : function (t, e) {\n          var n, i;\n          return i = Object.create(HTMLElement.prototype, e), n = document.registerElement(t, {\n            prototype: i\n          }), Object.defineProperty(i, \"constructor\", {\n            value: n\n          }), n;\n        };\n      }();\n    }.call(this), function () {\n      var t, n;\n      e.extend({\n        getDOMSelection: function getDOMSelection() {\n          var t;\n          return t = window.getSelection(), t.rangeCount > 0 ? t : void 0;\n        },\n        getDOMRange: function getDOMRange() {\n          var n, i;\n          return (n = null != (i = e.getDOMSelection()) ? i.getRangeAt(0) : void 0) && !t(n) ? n : void 0;\n        },\n        setDOMRange: function setDOMRange(t) {\n          var n;\n          return n = window.getSelection(), n.removeAllRanges(), n.addRange(t), e.selectionChangeObserver.update();\n        }\n      }), t = function t(_t5) {\n        return n(_t5.startContainer) || n(_t5.endContainer);\n      }, n = function n(t) {\n        return !Object.getPrototypeOf(t);\n      };\n    }.call(this), function () {\n      var t;\n      t = {\n        \"application/x-trix-feature-detection\": \"test\"\n      }, e.extend({\n        dataTransferIsPlainText: function dataTransferIsPlainText(t) {\n          var e, n, i;\n          return i = t.getData(\"text/plain\"), n = t.getData(\"text/html\"), i && n ? (e = document.createElement(\"div\"), e.innerHTML = n, e.textContent === i ? !e.querySelector(\":not(meta)\") : void 0) : null != i ? i.length : void 0;\n        },\n        dataTransferIsWritable: function dataTransferIsWritable(e) {\n          var n, i;\n\n          if (null != (null != e ? e.setData : void 0)) {\n            for (n in t) {\n              if (i = t[n], !function () {\n                try {\n                  return e.setData(n, i), e.getData(n) === i;\n                } catch (t) {}\n              }()) return;\n            }\n\n            return !0;\n          }\n        },\n        keyEventIsKeyboardCommand: function () {\n          return /Mac|^iP/.test(navigator.platform) ? function (t) {\n            return t.metaKey;\n          } : function (t) {\n            return t.ctrlKey;\n          };\n        }()\n      });\n    }.call(this), function () {}.call(this), function () {\n      var t,\n          n = function n(t, e) {\n        function n() {\n          this.constructor = t;\n        }\n\n        for (var o in e) {\n          i.call(e, o) && (t[o] = e[o]);\n        }\n\n        return n.prototype = e.prototype, t.prototype = new n(), t.__super__ = e.prototype, t;\n      },\n          i = {}.hasOwnProperty;\n\n      t = e.arraysAreEqual, e.Hash = function (i) {\n        function o(t) {\n          null == t && (t = {}), this.values = s(t), o.__super__.constructor.apply(this, arguments);\n        }\n\n        var r, s, a, u, c;\n        return n(o, i), o.fromCommonAttributesOfObjects = function (t) {\n          var e, n, i, o, s, a;\n          if (null == t && (t = []), !t.length) return new this();\n\n          for (e = r(t[0]), i = e.getKeys(), a = t.slice(1), n = 0, o = a.length; o > n; n++) {\n            s = a[n], i = e.getKeysCommonToHash(r(s)), e = e.slice(i);\n          }\n\n          return e;\n        }, o.box = function (t) {\n          return r(t);\n        }, o.prototype.add = function (t, e) {\n          return this.merge(u(t, e));\n        }, o.prototype.remove = function (t) {\n          return new e.Hash(s(this.values, t));\n        }, o.prototype.get = function (t) {\n          return this.values[t];\n        }, o.prototype.has = function (t) {\n          return t in this.values;\n        }, o.prototype.merge = function (t) {\n          return new e.Hash(a(this.values, c(t)));\n        }, o.prototype.slice = function (t) {\n          var n, i, o, r;\n\n          for (r = {}, n = 0, o = t.length; o > n; n++) {\n            i = t[n], this.has(i) && (r[i] = this.values[i]);\n          }\n\n          return new e.Hash(r);\n        }, o.prototype.getKeys = function () {\n          return Object.keys(this.values);\n        }, o.prototype.getKeysCommonToHash = function (t) {\n          var e, n, i, o, s;\n\n          for (t = r(t), o = this.getKeys(), s = [], e = 0, i = o.length; i > e; e++) {\n            n = o[e], this.values[n] === t.values[n] && s.push(n);\n          }\n\n          return s;\n        }, o.prototype.isEqualTo = function (e) {\n          return t(this.toArray(), r(e).toArray());\n        }, o.prototype.isEmpty = function () {\n          return 0 === this.getKeys().length;\n        }, o.prototype.toArray = function () {\n          var t, e, n;\n          return (null != this.array ? this.array : this.array = function () {\n            var i;\n            e = [], i = this.values;\n\n            for (t in i) {\n              n = i[t], e.push(t, n);\n            }\n\n            return e;\n          }.call(this)).slice(0);\n        }, o.prototype.toObject = function () {\n          return s(this.values);\n        }, o.prototype.toJSON = function () {\n          return this.toObject();\n        }, o.prototype.contentsForInspection = function () {\n          return {\n            values: JSON.stringify(this.values)\n          };\n        }, u = function u(t, e) {\n          var n;\n          return n = {}, n[t] = e, n;\n        }, a = function a(t, e) {\n          var n, i, o;\n          i = s(t);\n\n          for (n in e) {\n            o = e[n], i[n] = o;\n          }\n\n          return i;\n        }, s = function s(t, e) {\n          var n, i, o, r, s;\n\n          for (r = {}, s = Object.keys(t).sort(), n = 0, o = s.length; o > n; n++) {\n            i = s[n], i !== e && (r[i] = t[i]);\n          }\n\n          return r;\n        }, r = function r(t) {\n          return t instanceof e.Hash ? t : new e.Hash(t);\n        }, c = function c(t) {\n          return t instanceof e.Hash ? t.values : t;\n        }, o;\n      }(e.Object);\n    }.call(this), function () {\n      e.ObjectGroup = function () {\n        function t(t, e) {\n          var n, i;\n          this.objects = null != t ? t : [], i = e.depth, n = e.asTree, n && (this.depth = i, this.objects = this.constructor.groupObjects(this.objects, {\n            asTree: n,\n            depth: this.depth + 1\n          }));\n        }\n\n        return t.groupObjects = function (t, e) {\n          var n, i, o, r, s, a, u, c, l;\n\n          for (null == t && (t = []), l = null != e ? e : {}, o = l.depth, n = l.asTree, n && null == o && (o = 0), c = [], s = 0, a = t.length; a > s; s++) {\n            if (u = t[s], r) {\n              if ((\"function\" == typeof u.canBeGrouped ? u.canBeGrouped(o) : void 0) && (\"function\" == typeof (i = r[r.length - 1]).canBeGroupedWith ? i.canBeGroupedWith(u, o) : void 0)) {\n                r.push(u);\n                continue;\n              }\n\n              c.push(new this(r, {\n                depth: o,\n                asTree: n\n              })), r = null;\n            }\n\n            (\"function\" == typeof u.canBeGrouped ? u.canBeGrouped(o) : void 0) ? r = [u] : c.push(u);\n          }\n\n          return r && c.push(new this(r, {\n            depth: o,\n            asTree: n\n          })), c;\n        }, t.prototype.getObjects = function () {\n          return this.objects;\n        }, t.prototype.getDepth = function () {\n          return this.depth;\n        }, t.prototype.getCacheKey = function () {\n          var t, e, n, i, o;\n\n          for (e = [\"objectGroup\"], o = this.getObjects(), t = 0, n = o.length; n > t; t++) {\n            i = o[t], e.push(i.getCacheKey());\n          }\n\n          return e.join(\"/\");\n        }, t;\n      }();\n    }.call(this), function () {\n      var t = function t(_t6, e) {\n        function i() {\n          this.constructor = _t6;\n        }\n\n        for (var o in e) {\n          n.call(e, o) && (_t6[o] = e[o]);\n        }\n\n        return i.prototype = e.prototype, _t6.prototype = new i(), _t6.__super__ = e.prototype, _t6;\n      },\n          n = {}.hasOwnProperty;\n\n      e.ObjectMap = function (e) {\n        function n(t) {\n          var e, n, i, o, r;\n\n          for (null == t && (t = []), this.objects = {}, i = 0, o = t.length; o > i; i++) {\n            r = t[i], n = JSON.stringify(r), null == (e = this.objects)[n] && (e[n] = r);\n          }\n        }\n\n        return t(n, e), n.prototype.find = function (t) {\n          var e;\n          return e = JSON.stringify(t), this.objects[e];\n        }, n;\n      }(e.BasicObject);\n    }.call(this), function () {\n      e.ElementStore = function () {\n        function t(t) {\n          this.reset(t);\n        }\n\n        var e;\n        return t.prototype.add = function (t) {\n          var n;\n          return n = e(t), this.elements[n] = t;\n        }, t.prototype.remove = function (t) {\n          var n, i;\n          return n = e(t), (i = this.elements[n]) ? (delete this.elements[n], i) : void 0;\n        }, t.prototype.reset = function (t) {\n          var e, n, i;\n\n          for (null == t && (t = []), this.elements = {}, n = 0, i = t.length; i > n; n++) {\n            e = t[n], this.add(e);\n          }\n\n          return t;\n        }, e = function e(t) {\n          return t.dataset.trixStoreKey;\n        }, t;\n      }();\n    }.call(this), function () {}.call(this), function () {\n      var t = function t(_t7, e) {\n        function i() {\n          this.constructor = _t7;\n        }\n\n        for (var o in e) {\n          n.call(e, o) && (_t7[o] = e[o]);\n        }\n\n        return i.prototype = e.prototype, _t7.prototype = new i(), _t7.__super__ = e.prototype, _t7;\n      },\n          n = {}.hasOwnProperty;\n\n      e.Operation = function (e) {\n        function n() {\n          return n.__super__.constructor.apply(this, arguments);\n        }\n\n        return t(n, e), n.prototype.isPerforming = function () {\n          return this.performing === !0;\n        }, n.prototype.hasPerformed = function () {\n          return this.performed === !0;\n        }, n.prototype.hasSucceeded = function () {\n          return this.performed && this.succeeded;\n        }, n.prototype.hasFailed = function () {\n          return this.performed && !this.succeeded;\n        }, n.prototype.getPromise = function () {\n          return null != this.promise ? this.promise : this.promise = new Promise(function (t) {\n            return function (e, n) {\n              return t.performing = !0, t.perform(function (i, o) {\n                return t.succeeded = i, t.performing = !1, t.performed = !0, t.succeeded ? e(o) : n(o);\n              });\n            };\n          }(this));\n        }, n.prototype.perform = function (t) {\n          return t(!1);\n        }, n.prototype.release = function () {\n          var t;\n          return null != (t = this.promise) && \"function\" == typeof t.cancel && t.cancel(), this.promise = null, this.performing = null, this.performed = null, this.succeeded = null;\n        }, n.proxyMethod(\"getPromise().then\"), n.proxyMethod(\"getPromise().catch\"), n;\n      }(e.BasicObject);\n    }.call(this), function () {\n      var t,\n          n,\n          i,\n          o,\n          r,\n          s = function s(t, e) {\n        function n() {\n          this.constructor = t;\n        }\n\n        for (var i in e) {\n          a.call(e, i) && (t[i] = e[i]);\n        }\n\n        return n.prototype = e.prototype, t.prototype = new n(), t.__super__ = e.prototype, t;\n      },\n          a = {}.hasOwnProperty;\n\n      e.UTF16String = function (t) {\n        function e(t, e) {\n          this.ucs2String = t, this.codepoints = e, this.length = this.codepoints.length, this.ucs2Length = this.ucs2String.length;\n        }\n\n        return s(e, t), e.box = function (t) {\n          return null == t && (t = \"\"), t instanceof this ? t : this.fromUCS2String(null != t ? t.toString() : void 0);\n        }, e.fromUCS2String = function (t) {\n          return new this(t, o(t));\n        }, e.fromCodepoints = function (t) {\n          return new this(r(t), t);\n        }, e.prototype.offsetToUCS2Offset = function (t) {\n          return r(this.codepoints.slice(0, Math.max(0, t))).length;\n        }, e.prototype.offsetFromUCS2Offset = function (t) {\n          return o(this.ucs2String.slice(0, Math.max(0, t))).length;\n        }, e.prototype.slice = function () {\n          var t;\n          return this.constructor.fromCodepoints((t = this.codepoints).slice.apply(t, arguments));\n        }, e.prototype.charAt = function (t) {\n          return this.slice(t, t + 1);\n        }, e.prototype.isEqualTo = function (t) {\n          return this.constructor.box(t).ucs2String === this.ucs2String;\n        }, e.prototype.toJSON = function () {\n          return this.ucs2String;\n        }, e.prototype.getCacheKey = function () {\n          return this.ucs2String;\n        }, e.prototype.toString = function () {\n          return this.ucs2String;\n        }, e;\n      }(e.BasicObject), t = 1 === (\"function\" == typeof Array.from ? Array.from(\"\\uD83D\\uDC7C\").length : void 0), n = null != (\"function\" == typeof \" \".codePointAt ? \" \".codePointAt(0) : void 0), i = \" \\uD83D\\uDC7C\" === (\"function\" == typeof String.fromCodePoint ? String.fromCodePoint(32, 128124) : void 0), o = t && n ? function (t) {\n        return Array.from(t).map(function (t) {\n          return t.codePointAt(0);\n        });\n      } : function (t) {\n        var e, n, i, o, r;\n\n        for (o = [], e = 0, i = t.length; i > e;) {\n          r = t.charCodeAt(e++), r >= 55296 && 56319 >= r && i > e && (n = t.charCodeAt(e++), 56320 === (64512 & n) ? r = ((1023 & r) << 10) + (1023 & n) + 65536 : e--), o.push(r);\n        }\n\n        return o;\n      }, r = i ? function (t) {\n        return String.fromCodePoint.apply(String, t);\n      } : function (t) {\n        var e, n, i;\n        return e = function () {\n          var e, o, r;\n\n          for (r = [], e = 0, o = t.length; o > e; e++) {\n            i = t[e], n = \"\", i > 65535 && (i -= 65536, n += String.fromCharCode(i >>> 10 & 1023 | 55296), i = 56320 | 1023 & i), r.push(n + String.fromCharCode(i));\n          }\n\n          return r;\n        }(), e.join(\"\");\n      };\n    }.call(this), function () {}.call(this), function () {}.call(this), function () {\n      e.config.lang = {\n        attachFiles: \"Attach Files\",\n        bold: \"Bold\",\n        bullets: \"Bullets\",\n        \"byte\": \"Byte\",\n        bytes: \"Bytes\",\n        captionPlaceholder: \"Add a caption\\u2026\",\n        code: \"Code\",\n        heading1: \"Heading\",\n        indent: \"Increase Level\",\n        italic: \"Italic\",\n        link: \"Link\",\n        numbers: \"Numbers\",\n        outdent: \"Decrease Level\",\n        quote: \"Quote\",\n        redo: \"Redo\",\n        remove: \"Remove\",\n        strike: \"Strikethrough\",\n        undo: \"Undo\",\n        unlink: \"Unlink\",\n        url: \"URL\",\n        urlPlaceholder: \"Enter a URL\\u2026\",\n        GB: \"GB\",\n        KB: \"KB\",\n        MB: \"MB\",\n        PB: \"PB\",\n        TB: \"TB\"\n      };\n    }.call(this), function () {\n      e.config.css = {\n        attachment: \"attachment\",\n        attachmentCaption: \"attachment__caption\",\n        attachmentCaptionEditor: \"attachment__caption-editor\",\n        attachmentMetadata: \"attachment__metadata\",\n        attachmentMetadataContainer: \"attachment__metadata-container\",\n        attachmentName: \"attachment__name\",\n        attachmentProgress: \"attachment__progress\",\n        attachmentSize: \"attachment__size\",\n        attachmentToolbar: \"attachment__toolbar\",\n        attachmentGallery: \"attachment-gallery\"\n      };\n    }.call(this), function () {\n      var t;\n      e.config.blockAttributes = t = {\n        \"default\": {\n          tagName: \"div\",\n          parse: !1\n        },\n        quote: {\n          tagName: \"blockquote\",\n          nestable: !0\n        },\n        heading1: {\n          tagName: \"h1\",\n          terminal: !0,\n          breakOnReturn: !0,\n          group: !1\n        },\n        code: {\n          tagName: \"pre\",\n          terminal: !0,\n          text: {\n            plaintext: !0\n          }\n        },\n        bulletList: {\n          tagName: \"ul\",\n          parse: !1\n        },\n        bullet: {\n          tagName: \"li\",\n          listAttribute: \"bulletList\",\n          group: !1,\n          nestable: !0,\n          test: function test(n) {\n            return e.tagName(n.parentNode) === t[this.listAttribute].tagName;\n          }\n        },\n        numberList: {\n          tagName: \"ol\",\n          parse: !1\n        },\n        number: {\n          tagName: \"li\",\n          listAttribute: \"numberList\",\n          group: !1,\n          nestable: !0,\n          test: function test(n) {\n            return e.tagName(n.parentNode) === t[this.listAttribute].tagName;\n          }\n        },\n        attachmentGallery: {\n          tagName: \"div\",\n          exclusive: !0,\n          terminal: !0,\n          parse: !1,\n          group: !1\n        }\n      };\n    }.call(this), function () {\n      var t, n;\n      t = e.config.lang, n = [t.bytes, t.KB, t.MB, t.GB, t.TB, t.PB], e.config.fileSize = {\n        prefix: \"IEC\",\n        precision: 2,\n        formatter: function formatter(e) {\n          var i, o, r, s, a;\n\n          switch (e) {\n            case 0:\n              return \"0 \" + t.bytes;\n\n            case 1:\n              return \"1 \" + t[\"byte\"];\n\n            default:\n              return i = function () {\n                switch (this.prefix) {\n                  case \"SI\":\n                    return 1e3;\n\n                  case \"IEC\":\n                    return 1024;\n                }\n              }.call(this), o = Math.floor(Math.log(e) / Math.log(i)), r = e / Math.pow(i, o), s = r.toFixed(this.precision), a = s.replace(/0*$/, \"\").replace(/\\.$/, \"\"), a + \" \" + n[o];\n          }\n        }\n      };\n    }.call(this), function () {\n      e.config.textAttributes = {\n        bold: {\n          tagName: \"strong\",\n          inheritable: !0,\n          parser: function parser(t) {\n            var e;\n            return e = window.getComputedStyle(t), \"bold\" === e.fontWeight || e.fontWeight >= 600;\n          }\n        },\n        italic: {\n          tagName: \"em\",\n          inheritable: !0,\n          parser: function parser(t) {\n            var e;\n            return e = window.getComputedStyle(t), \"italic\" === e.fontStyle;\n          }\n        },\n        href: {\n          groupTagName: \"a\",\n          parser: function parser(t) {\n            var n, i, o;\n            return n = e.AttachmentView.attachmentSelector, o = \"a:not(\" + n + \")\", (i = e.findClosestElementFromNode(t, {\n              matchingSelector: o\n            })) ? i.getAttribute(\"href\") : void 0;\n          }\n        },\n        strike: {\n          tagName: \"del\",\n          inheritable: !0\n        },\n        frozen: {\n          style: {\n            backgroundColor: \"highlight\"\n          }\n        }\n      };\n    }.call(this), function () {\n      var t, n, i, o, r;\n      r = \"[data-trix-serialize=false]\", o = [\"contenteditable\", \"data-trix-id\", \"data-trix-store-key\", \"data-trix-mutable\", \"data-trix-placeholder\", \"tabindex\"], n = \"data-trix-serialized-attributes\", i = \"[\" + n + \"]\", t = new RegExp(\"<!--block-->\", \"g\"), e.extend({\n        serializers: {\n          \"application/json\": function applicationJson(t) {\n            var n;\n            if (t instanceof e.Document) n = t;else {\n              if (!(t instanceof HTMLElement)) throw new Error(\"unserializable object\");\n              n = e.Document.fromHTML(t.innerHTML);\n            }\n            return n.toSerializableDocument().toJSONString();\n          },\n          \"text/html\": function textHtml(s) {\n            var a, u, c, l, h, p, d, f, g, m, v, y, b, A, C, x, w;\n            if (s instanceof e.Document) l = e.DocumentView.render(s);else {\n              if (!(s instanceof HTMLElement)) throw new Error(\"unserializable object\");\n              l = s.cloneNode(!0);\n            }\n\n            for (A = l.querySelectorAll(r), h = 0, g = A.length; g > h; h++) {\n              c = A[h], e.removeNode(c);\n            }\n\n            for (p = 0, m = o.length; m > p; p++) {\n              for (a = o[p], C = l.querySelectorAll(\"[\" + a + \"]\"), d = 0, v = C.length; v > d; d++) {\n                c = C[d], c.removeAttribute(a);\n              }\n            }\n\n            for (x = l.querySelectorAll(i), f = 0, y = x.length; y > f; f++) {\n              c = x[f];\n\n              try {\n                u = JSON.parse(c.getAttribute(n)), c.removeAttribute(n);\n\n                for (b in u) {\n                  w = u[b], c.setAttribute(b, w);\n                }\n              } catch (E) {}\n            }\n\n            return l.innerHTML.replace(t, \"\");\n          }\n        },\n        deserializers: {\n          \"application/json\": function applicationJson(t) {\n            return e.Document.fromJSONString(t);\n          },\n          \"text/html\": function textHtml(t) {\n            return e.Document.fromHTML(t);\n          }\n        },\n        serializeToContentType: function serializeToContentType(t, n) {\n          var i;\n          if (i = e.serializers[n]) return i(t);\n          throw new Error(\"unknown content type: \" + n);\n        },\n        deserializeFromContentType: function deserializeFromContentType(t, n) {\n          var i;\n          if (i = e.deserializers[n]) return i(t);\n          throw new Error(\"unknown content type: \" + n);\n        }\n      });\n    }.call(this), function () {\n      var t;\n      t = e.config.lang, e.config.toolbar = {\n        getDefaultHTML: function getDefaultHTML() {\n          return '<div class=\"trix-button-row\">\\n  <span class=\"trix-button-group trix-button-group--text-tools\" data-trix-button-group=\"text-tools\">\\n    <button type=\"button\" class=\"trix-button trix-button--icon trix-button--icon-bold\" data-trix-attribute=\"bold\" data-trix-key=\"b\" title=\"' + t.bold + '\" tabindex=\"-1\">' + t.bold + '</button>\\n    <button type=\"button\" class=\"trix-button trix-button--icon trix-button--icon-italic\" data-trix-attribute=\"italic\" data-trix-key=\"i\" title=\"' + t.italic + '\" tabindex=\"-1\">' + t.italic + '</button>\\n    <button type=\"button\" class=\"trix-button trix-button--icon trix-button--icon-strike\" data-trix-attribute=\"strike\" title=\"' + t.strike + '\" tabindex=\"-1\">' + t.strike + '</button>\\n    <button type=\"button\" class=\"trix-button trix-button--icon trix-button--icon-link\" data-trix-attribute=\"href\" data-trix-action=\"link\" data-trix-key=\"k\" title=\"' + t.link + '\" tabindex=\"-1\">' + t.link + '</button>\\n  </span>\\n\\n  <span class=\"trix-button-group trix-button-group--block-tools\" data-trix-button-group=\"block-tools\">\\n    <button type=\"button\" class=\"trix-button trix-button--icon trix-button--icon-heading-1\" data-trix-attribute=\"heading1\" title=\"' + t.heading1 + '\" tabindex=\"-1\">' + t.heading1 + '</button>\\n    <button type=\"button\" class=\"trix-button trix-button--icon trix-button--icon-quote\" data-trix-attribute=\"quote\" title=\"' + t.quote + '\" tabindex=\"-1\">' + t.quote + '</button>\\n    <button type=\"button\" class=\"trix-button trix-button--icon trix-button--icon-code\" data-trix-attribute=\"code\" title=\"' + t.code + '\" tabindex=\"-1\">' + t.code + '</button>\\n    <button type=\"button\" class=\"trix-button trix-button--icon trix-button--icon-bullet-list\" data-trix-attribute=\"bullet\" title=\"' + t.bullets + '\" tabindex=\"-1\">' + t.bullets + '</button>\\n    <button type=\"button\" class=\"trix-button trix-button--icon trix-button--icon-number-list\" data-trix-attribute=\"number\" title=\"' + t.numbers + '\" tabindex=\"-1\">' + t.numbers + '</button>\\n    <button type=\"button\" class=\"trix-button trix-button--icon trix-button--icon-decrease-nesting-level\" data-trix-action=\"decreaseNestingLevel\" title=\"' + t.outdent + '\" tabindex=\"-1\">' + t.outdent + '</button>\\n    <button type=\"button\" class=\"trix-button trix-button--icon trix-button--icon-increase-nesting-level\" data-trix-action=\"increaseNestingLevel\" title=\"' + t.indent + '\" tabindex=\"-1\">' + t.indent + '</button>\\n  </span>\\n\\n  <span class=\"trix-button-group trix-button-group--file-tools\" data-trix-button-group=\"file-tools\">\\n    <button type=\"button\" class=\"trix-button trix-button--icon trix-button--icon-attach\" data-trix-action=\"attachFiles\" title=\"' + t.attachFiles + '\" tabindex=\"-1\">' + t.attachFiles + '</button>\\n  </span>\\n\\n  <span class=\"trix-button-group-spacer\"></span>\\n\\n  <span class=\"trix-button-group trix-button-group--history-tools\" data-trix-button-group=\"history-tools\">\\n    <button type=\"button\" class=\"trix-button trix-button--icon trix-button--icon-undo\" data-trix-action=\"undo\" data-trix-key=\"z\" title=\"' + t.undo + '\" tabindex=\"-1\">' + t.undo + '</button>\\n    <button type=\"button\" class=\"trix-button trix-button--icon trix-button--icon-redo\" data-trix-action=\"redo\" data-trix-key=\"shift+z\" title=\"' + t.redo + '\" tabindex=\"-1\">' + t.redo + '</button>\\n  </span>\\n</div>\\n\\n<div class=\"trix-dialogs\" data-trix-dialogs>\\n  <div class=\"trix-dialog trix-dialog--link\" data-trix-dialog=\"href\" data-trix-dialog-attribute=\"href\">\\n    <div class=\"trix-dialog__link-fields\">\\n      <input type=\"url\" name=\"href\" class=\"trix-input trix-input--dialog\" placeholder=\"' + t.urlPlaceholder + '\" aria-label=\"' + t.url + '\" required data-trix-input>\\n      <div class=\"trix-button-group\">\\n        <input type=\"button\" class=\"trix-button trix-button--dialog\" value=\"' + t.link + '\" data-trix-method=\"setAttribute\">\\n        <input type=\"button\" class=\"trix-button trix-button--dialog\" value=\"' + t.unlink + '\" data-trix-method=\"removeAttribute\">\\n      </div>\\n    </div>\\n  </div>\\n</div>';\n        }\n      };\n    }.call(this), function () {\n      e.config.undoInterval = 5e3;\n    }.call(this), function () {\n      e.config.attachments = {\n        preview: {\n          presentation: \"gallery\",\n          caption: {\n            name: !0,\n            size: !0\n          }\n        },\n        file: {\n          caption: {\n            size: !0\n          }\n        }\n      };\n    }.call(this), function () {\n      e.config.keyNames = {\n        8: \"backspace\",\n        9: \"tab\",\n        13: \"return\",\n        27: \"escape\",\n        37: \"left\",\n        39: \"right\",\n        46: \"delete\",\n        68: \"d\",\n        72: \"h\",\n        79: \"o\"\n      };\n    }.call(this), function () {\n      e.config.input = {\n        level2Enabled: !0,\n        getLevel: function getLevel() {\n          return this.level2Enabled && e.browser.supportsInputEvents ? 2 : 0;\n        },\n        pickFiles: function pickFiles(t) {\n          var n;\n          return n = e.makeElement(\"input\", {\n            type: \"file\",\n            multiple: !0,\n            hidden: !0,\n            id: this.fileInputId\n          }), n.addEventListener(\"change\", function () {\n            return t(n.files), e.removeNode(n);\n          }), e.removeNode(document.getElementById(this.fileInputId)), document.body.appendChild(n), n.click();\n        },\n        fileInputId: \"trix-file-input-\" + Date.now().toString(16)\n      };\n    }.call(this), function () {}.call(this), function () {\n      e.registerElement(\"trix-toolbar\", {\n        defaultCSS: \"%t {\\n  display: block;\\n}\\n\\n%t {\\n  white-space: nowrap;\\n}\\n\\n%t [data-trix-dialog] {\\n  display: none;\\n}\\n\\n%t [data-trix-dialog][data-trix-active] {\\n  display: block;\\n}\\n\\n%t [data-trix-dialog] [data-trix-validate]:invalid {\\n  background-color: #ffdddd;\\n}\",\n        initialize: function initialize() {\n          return \"\" === this.innerHTML ? this.innerHTML = e.config.toolbar.getDefaultHTML() : void 0;\n        }\n      });\n    }.call(this), function () {\n      var t = function t(_t8, e) {\n        function i() {\n          this.constructor = _t8;\n        }\n\n        for (var o in e) {\n          n.call(e, o) && (_t8[o] = e[o]);\n        }\n\n        return i.prototype = e.prototype, _t8.prototype = new i(), _t8.__super__ = e.prototype, _t8;\n      },\n          n = {}.hasOwnProperty,\n          i = [].indexOf || function (t) {\n        for (var e = 0, n = this.length; n > e; e++) {\n          if (e in this && this[e] === t) return e;\n        }\n\n        return -1;\n      };\n\n      e.ObjectView = function (n) {\n        function o(t, e) {\n          this.object = t, this.options = null != e ? e : {}, this.childViews = [], this.rootView = this;\n        }\n\n        return t(o, n), o.prototype.getNodes = function () {\n          var t, e, n, i, o;\n\n          for (null == this.nodes && (this.nodes = this.createNodes()), i = this.nodes, o = [], t = 0, e = i.length; e > t; t++) {\n            n = i[t], o.push(n.cloneNode(!0));\n          }\n\n          return o;\n        }, o.prototype.invalidate = function () {\n          var t;\n          return this.nodes = null, null != (t = this.parentView) ? t.invalidate() : void 0;\n        }, o.prototype.invalidateViewForObject = function (t) {\n          var e;\n          return null != (e = this.findViewForObject(t)) ? e.invalidate() : void 0;\n        }, o.prototype.findOrCreateCachedChildView = function (t, e) {\n          var n;\n          return (n = this.getCachedViewForObject(e)) ? this.recordChildView(n) : (n = this.createChildView.apply(this, arguments), this.cacheViewForObject(n, e)), n;\n        }, o.prototype.createChildView = function (t, n, i) {\n          var o;\n          return null == i && (i = {}), n instanceof e.ObjectGroup && (i.viewClass = t, t = e.ObjectGroupView), o = new t(n, i), this.recordChildView(o);\n        }, o.prototype.recordChildView = function (t) {\n          return t.parentView = this, t.rootView = this.rootView, i.call(this.childViews, t) < 0 && this.childViews.push(t), t;\n        }, o.prototype.getAllChildViews = function () {\n          var t, e, n, i, o;\n\n          for (o = [], i = this.childViews, e = 0, n = i.length; n > e; e++) {\n            t = i[e], o.push(t), o = o.concat(t.getAllChildViews());\n          }\n\n          return o;\n        }, o.prototype.findElement = function () {\n          return this.findElementForObject(this.object);\n        }, o.prototype.findElementForObject = function (t) {\n          var e;\n          return (e = null != t ? t.id : void 0) ? this.rootView.element.querySelector(\"[data-trix-id='\" + e + \"']\") : void 0;\n        }, o.prototype.findViewForObject = function (t) {\n          var e, n, i, o;\n\n          for (i = this.getAllChildViews(), e = 0, n = i.length; n > e; e++) {\n            if (o = i[e], o.object === t) return o;\n          }\n        }, o.prototype.getViewCache = function () {\n          return this.rootView !== this ? this.rootView.getViewCache() : this.isViewCachingEnabled() ? null != this.viewCache ? this.viewCache : this.viewCache = {} : void 0;\n        }, o.prototype.isViewCachingEnabled = function () {\n          return this.shouldCacheViews !== !1;\n        }, o.prototype.enableViewCaching = function () {\n          return this.shouldCacheViews = !0;\n        }, o.prototype.disableViewCaching = function () {\n          return this.shouldCacheViews = !1;\n        }, o.prototype.getCachedViewForObject = function (t) {\n          var e;\n          return null != (e = this.getViewCache()) ? e[t.getCacheKey()] : void 0;\n        }, o.prototype.cacheViewForObject = function (t, e) {\n          var n;\n          return null != (n = this.getViewCache()) ? n[e.getCacheKey()] = t : void 0;\n        }, o.prototype.garbageCollectCachedViews = function () {\n          var t, e, n, o, r, s;\n\n          if (t = this.getViewCache()) {\n            s = this.getAllChildViews().concat(this), n = function () {\n              var t, e, n;\n\n              for (n = [], t = 0, e = s.length; e > t; t++) {\n                r = s[t], n.push(r.object.getCacheKey());\n              }\n\n              return n;\n            }(), o = [];\n\n            for (e in t) {\n              i.call(n, e) < 0 && o.push(delete t[e]);\n            }\n\n            return o;\n          }\n        }, o;\n      }(e.BasicObject);\n    }.call(this), function () {\n      var t = function t(_t9, e) {\n        function i() {\n          this.constructor = _t9;\n        }\n\n        for (var o in e) {\n          n.call(e, o) && (_t9[o] = e[o]);\n        }\n\n        return i.prototype = e.prototype, _t9.prototype = new i(), _t9.__super__ = e.prototype, _t9;\n      },\n          n = {}.hasOwnProperty;\n\n      e.ObjectGroupView = function (e) {\n        function n() {\n          n.__super__.constructor.apply(this, arguments), this.objectGroup = this.object, this.viewClass = this.options.viewClass, delete this.options.viewClass;\n        }\n\n        return t(n, e), n.prototype.getChildViews = function () {\n          var t, e, n, i;\n          if (!this.childViews.length) for (i = this.objectGroup.getObjects(), t = 0, e = i.length; e > t; t++) {\n            n = i[t], this.findOrCreateCachedChildView(this.viewClass, n, this.options);\n          }\n          return this.childViews;\n        }, n.prototype.createNodes = function () {\n          var t, e, n, i, o, r, s, a, u;\n\n          for (t = this.createContainerElement(), s = this.getChildViews(), e = 0, i = s.length; i > e; e++) {\n            for (u = s[e], a = u.getNodes(), n = 0, o = a.length; o > n; n++) {\n              r = a[n], t.appendChild(r);\n            }\n          }\n\n          return [t];\n        }, n.prototype.createContainerElement = function (t) {\n          return null == t && (t = this.objectGroup.getDepth()), this.getChildViews()[0].createContainerElement(t);\n        }, n;\n      }(e.ObjectView);\n    }.call(this), function () {\n      var t = function t(_t10, e) {\n        function i() {\n          this.constructor = _t10;\n        }\n\n        for (var o in e) {\n          n.call(e, o) && (_t10[o] = e[o]);\n        }\n\n        return i.prototype = e.prototype, _t10.prototype = new i(), _t10.__super__ = e.prototype, _t10;\n      },\n          n = {}.hasOwnProperty;\n\n      e.Controller = function (e) {\n        function n() {\n          return n.__super__.constructor.apply(this, arguments);\n        }\n\n        return t(n, e), n;\n      }(e.BasicObject);\n    }.call(this), function () {\n      var t,\n          n,\n          i,\n          o,\n          r,\n          s,\n          a = function a(t, e) {\n        return function () {\n          return t.apply(e, arguments);\n        };\n      },\n          u = function u(t, e) {\n        function n() {\n          this.constructor = t;\n        }\n\n        for (var i in e) {\n          c.call(e, i) && (t[i] = e[i]);\n        }\n\n        return n.prototype = e.prototype, t.prototype = new n(), t.__super__ = e.prototype, t;\n      },\n          c = {}.hasOwnProperty,\n          l = [].indexOf || function (t) {\n        for (var e = 0, n = this.length; n > e; e++) {\n          if (e in this && this[e] === t) return e;\n        }\n\n        return -1;\n      };\n\n      t = e.findClosestElementFromNode, i = e.nodeIsEmptyTextNode, n = e.nodeIsBlockStartComment, o = e.normalizeSpaces, r = e.summarizeStringChange, s = e.tagName, e.MutationObserver = function (e) {\n        function c(t) {\n          this.element = t, this.didMutate = a(this.didMutate, this), this.observer = new window.MutationObserver(this.didMutate), this.start();\n        }\n\n        var _h, p, d, f;\n\n        return u(c, e), p = \"data-trix-mutable\", d = \"[\" + p + \"]\", f = {\n          attributes: !0,\n          childList: !0,\n          characterData: !0,\n          characterDataOldValue: !0,\n          subtree: !0\n        }, c.prototype.start = function () {\n          return this.reset(), this.observer.observe(this.element, f);\n        }, c.prototype.stop = function () {\n          return this.observer.disconnect();\n        }, c.prototype.didMutate = function (t) {\n          var e, n;\n          return (e = this.mutations).push.apply(e, this.findSignificantMutations(t)), this.mutations.length ? (null != (n = this.delegate) && \"function\" == typeof n.elementDidMutate && n.elementDidMutate(this.getMutationSummary()), this.reset()) : void 0;\n        }, c.prototype.reset = function () {\n          return this.mutations = [];\n        }, c.prototype.findSignificantMutations = function (t) {\n          var e, n, i, o;\n\n          for (o = [], e = 0, n = t.length; n > e; e++) {\n            i = t[e], this.mutationIsSignificant(i) && o.push(i);\n          }\n\n          return o;\n        }, c.prototype.mutationIsSignificant = function (t) {\n          var e, n, i, o;\n          if (this.nodeIsMutable(t.target)) return !1;\n\n          for (o = this.nodesModifiedByMutation(t), e = 0, n = o.length; n > e; e++) {\n            if (i = o[e], this.nodeIsSignificant(i)) return !0;\n          }\n\n          return !1;\n        }, c.prototype.nodeIsSignificant = function (t) {\n          return t !== this.element && !this.nodeIsMutable(t) && !i(t);\n        }, c.prototype.nodeIsMutable = function (e) {\n          return t(e, {\n            matchingSelector: d\n          });\n        }, c.prototype.nodesModifiedByMutation = function (t) {\n          var e;\n\n          switch (e = [], t.type) {\n            case \"attributes\":\n              t.attributeName !== p && e.push(t.target);\n              break;\n\n            case \"characterData\":\n              e.push(t.target.parentNode), e.push(t.target);\n              break;\n\n            case \"childList\":\n              e.push.apply(e, t.addedNodes), e.push.apply(e, t.removedNodes);\n          }\n\n          return e;\n        }, c.prototype.getMutationSummary = function () {\n          return this.getTextMutationSummary();\n        }, c.prototype.getTextMutationSummary = function () {\n          var t, e, n, i, o, r, s, a, u, c, h;\n\n          for (a = this.getTextChangesFromCharacterData(), n = a.additions, o = a.deletions, h = this.getTextChangesFromChildList(), u = h.additions, r = 0, s = u.length; s > r; r++) {\n            e = u[r], l.call(n, e) < 0 && n.push(e);\n          }\n\n          return o.push.apply(o, h.deletions), c = {}, (t = n.join(\"\")) && (c.textAdded = t), (i = o.join(\"\")) && (c.textDeleted = i), c;\n        }, c.prototype.getMutationsByType = function (t) {\n          var e, n, i, o, r;\n\n          for (o = this.mutations, r = [], e = 0, n = o.length; n > e; e++) {\n            i = o[e], i.type === t && r.push(i);\n          }\n\n          return r;\n        }, c.prototype.getTextChangesFromChildList = function () {\n          var t, e, i, r, s, a, u, c, l, p, d;\n\n          for (t = [], u = [], a = this.getMutationsByType(\"childList\"), e = 0, r = a.length; r > e; e++) {\n            s = a[e], t.push.apply(t, s.addedNodes), u.push.apply(u, s.removedNodes);\n          }\n\n          return c = 0 === t.length && 1 === u.length && n(u[0]), c ? (p = [], d = [\"\\n\"]) : (p = _h(t), d = _h(u)), {\n            additions: function () {\n              var t, e, n;\n\n              for (n = [], i = t = 0, e = p.length; e > t; i = ++t) {\n                l = p[i], l !== d[i] && n.push(o(l));\n              }\n\n              return n;\n            }(),\n            deletions: function () {\n              var t, e, n;\n\n              for (n = [], i = t = 0, e = d.length; e > t; i = ++t) {\n                l = d[i], l !== p[i] && n.push(o(l));\n              }\n\n              return n;\n            }()\n          };\n        }, c.prototype.getTextChangesFromCharacterData = function () {\n          var t, e, n, i, s, a, u, c;\n          return e = this.getMutationsByType(\"characterData\"), e.length && (c = e[0], n = e[e.length - 1], s = o(c.oldValue), i = o(n.target.data), a = r(s, i), t = a.added, u = a.removed), {\n            additions: t ? [t] : [],\n            deletions: u ? [u] : []\n          };\n        }, _h = function h(t) {\n          var e, n, i, o;\n\n          for (null == t && (t = []), o = [], e = 0, n = t.length; n > e; e++) {\n            switch (i = t[e], i.nodeType) {\n              case Node.TEXT_NODE:\n                o.push(i.data);\n                break;\n\n              case Node.ELEMENT_NODE:\n                \"br\" === s(i) ? o.push(\"\\n\") : o.push.apply(o, _h(i.childNodes));\n            }\n          }\n\n          return o;\n        }, c;\n      }(e.BasicObject);\n    }.call(this), function () {\n      var t = function t(_t11, e) {\n        function i() {\n          this.constructor = _t11;\n        }\n\n        for (var o in e) {\n          n.call(e, o) && (_t11[o] = e[o]);\n        }\n\n        return i.prototype = e.prototype, _t11.prototype = new i(), _t11.__super__ = e.prototype, _t11;\n      },\n          n = {}.hasOwnProperty;\n\n      e.FileVerificationOperation = function (e) {\n        function n(t) {\n          this.file = t;\n        }\n\n        return t(n, e), n.prototype.perform = function (t) {\n          var e;\n          return e = new FileReader(), e.onerror = function () {\n            return t(!1);\n          }, e.onload = function (n) {\n            return function () {\n              e.onerror = null;\n\n              try {\n                e.abort();\n              } catch (i) {}\n\n              return t(!0, n.file);\n            };\n          }(this), e.readAsArrayBuffer(this.file);\n        }, n;\n      }(e.Operation);\n    }.call(this), function () {\n      var t,\n          n,\n          i = function i(t, e) {\n        function n() {\n          this.constructor = t;\n        }\n\n        for (var i in e) {\n          o.call(e, i) && (t[i] = e[i]);\n        }\n\n        return n.prototype = e.prototype, t.prototype = new n(), t.__super__ = e.prototype, t;\n      },\n          o = {}.hasOwnProperty;\n\n      t = e.handleEvent, n = e.innerElementIsActive, e.InputController = function (o) {\n        function r(n) {\n          var i;\n          this.element = n, this.mutationObserver = new e.MutationObserver(this.element), this.mutationObserver.delegate = this;\n\n          for (i in this.events) {\n            t(i, {\n              onElement: this.element,\n              withCallback: this.handlerFor(i)\n            });\n          }\n        }\n\n        return i(r, o), r.prototype.events = {}, r.prototype.elementDidMutate = function () {}, r.prototype.editorWillSyncDocumentView = function () {\n          return this.mutationObserver.stop();\n        }, r.prototype.editorDidSyncDocumentView = function () {\n          return this.mutationObserver.start();\n        }, r.prototype.requestRender = function () {\n          var t;\n          return null != (t = this.delegate) && \"function\" == typeof t.inputControllerDidRequestRender ? t.inputControllerDidRequestRender() : void 0;\n        }, r.prototype.requestReparse = function () {\n          var t;\n          return null != (t = this.delegate) && \"function\" == typeof t.inputControllerDidRequestReparse && t.inputControllerDidRequestReparse(), this.requestRender();\n        }, r.prototype.attachFiles = function (t) {\n          var n, i;\n          return i = function () {\n            var i, o, r;\n\n            for (r = [], i = 0, o = t.length; o > i; i++) {\n              n = t[i], r.push(new e.FileVerificationOperation(n));\n            }\n\n            return r;\n          }(), Promise.all(i).then(function (t) {\n            return function (e) {\n              return t.handleInput(function () {\n                var t, n;\n                return null != (t = this.delegate) && t.inputControllerWillAttachFiles(), null != (n = this.responder) && n.insertFiles(e), this.requestRender();\n              });\n            };\n          }(this));\n        }, r.prototype.handlerFor = function (t) {\n          return function (e) {\n            return function (i) {\n              return i.defaultPrevented ? void 0 : e.handleInput(function () {\n                return n(this.element) ? void 0 : (this.eventName = t, this.events[t].call(this, i));\n              });\n            };\n          }(this);\n        }, r.prototype.handleInput = function (t) {\n          var e, n;\n\n          try {\n            return null != (e = this.delegate) && e.inputControllerWillHandleInput(), t.call(this);\n          } finally {\n            null != (n = this.delegate) && n.inputControllerDidHandleInput();\n          }\n        }, r;\n      }(e.BasicObject);\n    }.call(this), function () {\n      var t,\n          n,\n          i,\n          o,\n          r,\n          s,\n          a,\n          u,\n          c,\n          l,\n          h,\n          p,\n          d,\n          f = function f(t, e) {\n        function n() {\n          this.constructor = t;\n        }\n\n        for (var i in e) {\n          g.call(e, i) && (t[i] = e[i]);\n        }\n\n        return n.prototype = e.prototype, t.prototype = new n(), t.__super__ = e.prototype, t;\n      },\n          g = {}.hasOwnProperty,\n          m = [].indexOf || function (t) {\n        for (var e = 0, n = this.length; n > e; e++) {\n          if (e in this && this[e] === t) return e;\n        }\n\n        return -1;\n      };\n\n      c = e.makeElement, l = e.objectsAreEqual, d = e.tagName, n = e.browser, a = e.keyEventIsKeyboardCommand, o = e.dataTransferIsWritable, i = e.dataTransferIsPlainText, u = e.config.keyNames, e.Level0InputController = function (n) {\n        function s() {\n          s.__super__.constructor.apply(this, arguments), this.resetInputSummary();\n        }\n\n        var d;\n        return f(s, n), d = 0, s.prototype.setInputSummary = function (t) {\n          var e, n;\n          null == t && (t = {}), this.inputSummary.eventName = this.eventName;\n\n          for (e in t) {\n            n = t[e], this.inputSummary[e] = n;\n          }\n\n          return this.inputSummary;\n        }, s.prototype.resetInputSummary = function () {\n          return this.inputSummary = {};\n        }, s.prototype.reset = function () {\n          return this.resetInputSummary(), e.selectionChangeObserver.reset();\n        }, s.prototype.elementDidMutate = function (t) {\n          var e;\n          return this.isComposing() ? null != (e = this.delegate) && \"function\" == typeof e.inputControllerDidAllowUnhandledInput ? e.inputControllerDidAllowUnhandledInput() : void 0 : this.handleInput(function () {\n            return this.mutationIsSignificant(t) && (this.mutationIsExpected(t) ? this.requestRender() : this.requestReparse()), this.reset();\n          });\n        }, s.prototype.mutationIsExpected = function (t) {\n          var e, n, i, o, r, s, a, u, c, l;\n          return a = t.textAdded, u = t.textDeleted, this.inputSummary.preferDocument ? !0 : (e = null != a ? a === this.inputSummary.textAdded : !this.inputSummary.textAdded, n = null != u ? this.inputSummary.didDelete : !this.inputSummary.didDelete, c = (\"\\n\" === a || \" \\n\" === a) && !e, l = \"\\n\" === u && !n, s = c && !l || l && !c, s && (o = this.getSelectedRange()) && (i = c ? a.replace(/\\n$/, \"\").length || -1 : (null != a ? a.length : void 0) || 1, null != (r = this.responder) ? r.positionIsBlockBreak(o[1] + i) : void 0) ? !0 : e && n);\n        }, s.prototype.mutationIsSignificant = function (t) {\n          var e, n, i;\n          return i = Object.keys(t).length > 0, e = \"\" === (null != (n = this.compositionInput) ? n.getEndData() : void 0), i || !e;\n        }, s.prototype.events = {\n          keydown: function keydown(t) {\n            var n, i, o, r, s, c, l, h, p;\n\n            if (this.isComposing() || this.resetInputSummary(), this.inputSummary.didInput = !0, r = u[t.keyCode]) {\n              for (i = this.keys, h = [\"ctrl\", \"alt\", \"shift\", \"meta\"], o = 0, c = h.length; c > o; o++) {\n                l = h[o], t[l + \"Key\"] && (\"ctrl\" === l && (l = \"control\"), i = null != i ? i[l] : void 0);\n              }\n\n              null != (null != i ? i[r] : void 0) && (this.setInputSummary({\n                keyName: r\n              }), e.selectionChangeObserver.reset(), i[r].call(this, t));\n            }\n\n            return a(t) && (n = String.fromCharCode(t.keyCode).toLowerCase()) && (s = function () {\n              var e, n, i, o;\n\n              for (i = [\"alt\", \"shift\"], o = [], e = 0, n = i.length; n > e; e++) {\n                l = i[e], t[l + \"Key\"] && o.push(l);\n              }\n\n              return o;\n            }(), s.push(n), null != (p = this.delegate) ? p.inputControllerDidReceiveKeyboardCommand(s) : void 0) ? t.preventDefault() : void 0;\n          },\n          keypress: function keypress(t) {\n            var e, n, i;\n            if (null == this.inputSummary.eventName && !t.metaKey && (!t.ctrlKey || t.altKey)) return (i = p(t)) ? (null != (e = this.delegate) && e.inputControllerWillPerformTyping(), null != (n = this.responder) && n.insertString(i), this.setInputSummary({\n              textAdded: i,\n              didDelete: this.selectionIsExpanded()\n            })) : void 0;\n          },\n          textInput: function textInput(t) {\n            var e, n, i, o;\n            return e = t.data, o = this.inputSummary.textAdded, o && o !== e && o.toUpperCase() === e ? (n = this.getSelectedRange(), this.setSelectedRange([n[0], n[1] + o.length]), null != (i = this.responder) && i.insertString(e), this.setInputSummary({\n              textAdded: e\n            }), this.setSelectedRange(n)) : void 0;\n          },\n          dragenter: function dragenter(t) {\n            return t.preventDefault();\n          },\n          dragstart: function dragstart(t) {\n            var e, n;\n            return n = t.target, this.serializeSelectionToDataTransfer(t.dataTransfer), this.draggedRange = this.getSelectedRange(), null != (e = this.delegate) && \"function\" == typeof e.inputControllerDidStartDrag ? e.inputControllerDidStartDrag() : void 0;\n          },\n          dragover: function dragover(t) {\n            var e, n;\n            return !this.draggedRange && !this.canAcceptDataTransfer(t.dataTransfer) || (t.preventDefault(), e = {\n              x: t.clientX,\n              y: t.clientY\n            }, l(e, this.draggingPoint)) ? void 0 : (this.draggingPoint = e, null != (n = this.delegate) && \"function\" == typeof n.inputControllerDidReceiveDragOverPoint ? n.inputControllerDidReceiveDragOverPoint(this.draggingPoint) : void 0);\n          },\n          dragend: function dragend() {\n            var t;\n            return null != (t = this.delegate) && \"function\" == typeof t.inputControllerDidCancelDrag && t.inputControllerDidCancelDrag(), this.draggedRange = null, this.draggingPoint = null;\n          },\n          drop: function drop(t) {\n            var n, i, o, r, s, a, u, c, l;\n            return t.preventDefault(), o = null != (s = t.dataTransfer) ? s.files : void 0, r = {\n              x: t.clientX,\n              y: t.clientY\n            }, null != (a = this.responder) && a.setLocationRangeFromPointRange(r), (null != o ? o.length : void 0) ? this.attachFiles(o) : this.draggedRange ? (null != (u = this.delegate) && u.inputControllerWillMoveText(), null != (c = this.responder) && c.moveTextFromRange(this.draggedRange), this.draggedRange = null, this.requestRender()) : (i = t.dataTransfer.getData(\"application/x-trix-document\")) && (n = e.Document.fromJSONString(i), null != (l = this.responder) && l.insertDocument(n), this.requestRender()), this.draggedRange = null, this.draggingPoint = null;\n          },\n          cut: function cut(t) {\n            var e, n;\n            return (null != (e = this.responder) ? e.selectionIsExpanded() : void 0) && (this.serializeSelectionToDataTransfer(t.clipboardData) && t.preventDefault(), null != (n = this.delegate) && n.inputControllerWillCutText(), this.deleteInDirection(\"backward\"), t.defaultPrevented) ? this.requestRender() : void 0;\n          },\n          copy: function copy(t) {\n            var e;\n            return (null != (e = this.responder) ? e.selectionIsExpanded() : void 0) && this.serializeSelectionToDataTransfer(t.clipboardData) ? t.preventDefault() : void 0;\n          },\n          paste: function paste(t) {\n            var n, o, s, a, u, c, l, p, f, g, v, y, b, A, C, x, w, E, S, R, k, D;\n            return n = null != (p = t.clipboardData) ? p : t.testClipboardData, l = {\n              clipboard: n\n            }, null == n || h(t) ? void this.getPastedHTMLUsingHiddenElement(function (t) {\n              return function (e) {\n                var n, i, o;\n                return l.type = \"text/html\", l.html = e, null != (n = t.delegate) && n.inputControllerWillPaste(l), null != (i = t.responder) && i.insertHTML(l.html), t.requestRender(), null != (o = t.delegate) ? o.inputControllerDidPaste(l) : void 0;\n              };\n            }(this)) : ((a = n.getData(\"URL\")) ? (l.type = \"URL\", l.href = a, l.string = (c = n.getData(\"public.url-name\")) ? e.squishBreakableWhitespace(c).trim() : a, null != (f = this.delegate) && f.inputControllerWillPaste(l), this.setInputSummary({\n              textAdded: l.string,\n              didDelete: this.selectionIsExpanded()\n            }), null != (C = this.responder) && C.insertText(e.Text.textForStringWithAttributes(l.string, {\n              href: l.href\n            })), this.requestRender(), null != (x = this.delegate) && x.inputControllerDidPaste(l)) : i(n) ? (l.type = \"text/plain\", l.string = n.getData(\"text/plain\"), null != (w = this.delegate) && w.inputControllerWillPaste(l), this.setInputSummary({\n              textAdded: l.string,\n              didDelete: this.selectionIsExpanded()\n            }), null != (E = this.responder) && E.insertString(l.string), this.requestRender(), null != (S = this.delegate) && S.inputControllerDidPaste(l)) : (u = n.getData(\"text/html\")) ? (l.type = \"text/html\", l.html = u, null != (R = this.delegate) && R.inputControllerWillPaste(l), null != (k = this.responder) && k.insertHTML(l.html), this.requestRender(), null != (D = this.delegate) && D.inputControllerDidPaste(l)) : m.call(n.types, \"Files\") >= 0 && (s = null != (g = n.items) && null != (v = g[0]) && \"function\" == typeof v.getAsFile ? v.getAsFile() : void 0) && (!s.name && (o = r(s)) && (s.name = \"pasted-file-\" + ++d + \".\" + o), l.type = \"File\", l.file = s, null != (y = this.delegate) && y.inputControllerWillAttachFiles(), null != (b = this.responder) && b.insertFile(l.file), this.requestRender(), null != (A = this.delegate) && A.inputControllerDidPaste(l)), t.preventDefault());\n          },\n          compositionstart: function compositionstart(t) {\n            return this.getCompositionInput().start(t.data);\n          },\n          compositionupdate: function compositionupdate(t) {\n            return this.getCompositionInput().update(t.data);\n          },\n          compositionend: function compositionend(t) {\n            return this.getCompositionInput().end(t.data);\n          },\n          beforeinput: function beforeinput() {\n            return this.inputSummary.didInput = !0;\n          },\n          input: function input(t) {\n            return this.inputSummary.didInput = !0, t.stopPropagation();\n          }\n        }, s.prototype.keys = {\n          backspace: function backspace(t) {\n            var e;\n            return null != (e = this.delegate) && e.inputControllerWillPerformTyping(), this.deleteInDirection(\"backward\", t);\n          },\n          \"delete\": function _delete(t) {\n            var e;\n            return null != (e = this.delegate) && e.inputControllerWillPerformTyping(), this.deleteInDirection(\"forward\", t);\n          },\n          \"return\": function _return() {\n            var t, e;\n            return this.setInputSummary({\n              preferDocument: !0\n            }), null != (t = this.delegate) && t.inputControllerWillPerformTyping(), null != (e = this.responder) ? e.insertLineBreak() : void 0;\n          },\n          tab: function tab(t) {\n            var e, n;\n            return (null != (e = this.responder) ? e.canIncreaseNestingLevel() : void 0) ? (null != (n = this.responder) && n.increaseNestingLevel(), this.requestRender(), t.preventDefault()) : void 0;\n          },\n          left: function left(t) {\n            var e;\n            return this.selectionIsInCursorTarget() ? (t.preventDefault(), null != (e = this.responder) ? e.moveCursorInDirection(\"backward\") : void 0) : void 0;\n          },\n          right: function right(t) {\n            var e;\n            return this.selectionIsInCursorTarget() ? (t.preventDefault(), null != (e = this.responder) ? e.moveCursorInDirection(\"forward\") : void 0) : void 0;\n          },\n          control: {\n            d: function d(t) {\n              var e;\n              return null != (e = this.delegate) && e.inputControllerWillPerformTyping(), this.deleteInDirection(\"forward\", t);\n            },\n            h: function h(t) {\n              var e;\n              return null != (e = this.delegate) && e.inputControllerWillPerformTyping(), this.deleteInDirection(\"backward\", t);\n            },\n            o: function o(t) {\n              var e, n;\n              return t.preventDefault(), null != (e = this.delegate) && e.inputControllerWillPerformTyping(), null != (n = this.responder) && n.insertString(\"\\n\", {\n                updatePosition: !1\n              }), this.requestRender();\n            }\n          },\n          shift: {\n            \"return\": function _return(t) {\n              var e, n;\n              return null != (e = this.delegate) && e.inputControllerWillPerformTyping(), null != (n = this.responder) && n.insertString(\"\\n\"), this.requestRender(), t.preventDefault();\n            },\n            tab: function tab(t) {\n              var e, n;\n              return (null != (e = this.responder) ? e.canDecreaseNestingLevel() : void 0) ? (null != (n = this.responder) && n.decreaseNestingLevel(), this.requestRender(), t.preventDefault()) : void 0;\n            },\n            left: function left(t) {\n              return this.selectionIsInCursorTarget() ? (t.preventDefault(), this.expandSelectionInDirection(\"backward\")) : void 0;\n            },\n            right: function right(t) {\n              return this.selectionIsInCursorTarget() ? (t.preventDefault(), this.expandSelectionInDirection(\"forward\")) : void 0;\n            }\n          },\n          alt: {\n            backspace: function backspace() {\n              var t;\n              return this.setInputSummary({\n                preferDocument: !1\n              }), null != (t = this.delegate) ? t.inputControllerWillPerformTyping() : void 0;\n            }\n          },\n          meta: {\n            backspace: function backspace() {\n              var t;\n              return this.setInputSummary({\n                preferDocument: !1\n              }), null != (t = this.delegate) ? t.inputControllerWillPerformTyping() : void 0;\n            }\n          }\n        }, s.prototype.getCompositionInput = function () {\n          return this.isComposing() ? this.compositionInput : this.compositionInput = new t(this);\n        }, s.prototype.isComposing = function () {\n          return null != this.compositionInput && !this.compositionInput.isEnded();\n        }, s.prototype.deleteInDirection = function (t, e) {\n          var n;\n          return (null != (n = this.responder) ? n.deleteInDirection(t) : void 0) !== !1 ? this.setInputSummary({\n            didDelete: !0\n          }) : e ? (e.preventDefault(), this.requestRender()) : void 0;\n        }, s.prototype.serializeSelectionToDataTransfer = function (t) {\n          var n, i;\n          if (o(t)) return n = null != (i = this.responder) ? i.getSelectedDocument().toSerializableDocument() : void 0, t.setData(\"application/x-trix-document\", JSON.stringify(n)), t.setData(\"text/html\", e.DocumentView.render(n).innerHTML), t.setData(\"text/plain\", n.toString().replace(/\\n$/, \"\")), !0;\n        }, s.prototype.canAcceptDataTransfer = function (t) {\n          var e, n, i, o, r, s;\n\n          for (s = {}, o = null != (i = null != t ? t.types : void 0) ? i : [], e = 0, n = o.length; n > e; e++) {\n            r = o[e], s[r] = !0;\n          }\n\n          return s.Files || s[\"application/x-trix-document\"] || s[\"text/html\"] || s[\"text/plain\"];\n        }, s.prototype.getPastedHTMLUsingHiddenElement = function (t) {\n          var n, i, o;\n          return i = this.getSelectedRange(), o = {\n            position: \"absolute\",\n            left: window.pageXOffset + \"px\",\n            top: window.pageYOffset + \"px\",\n            opacity: 0\n          }, n = c({\n            style: o,\n            tagName: \"div\",\n            editable: !0\n          }), document.body.appendChild(n), n.focus(), requestAnimationFrame(function (o) {\n            return function () {\n              var r;\n              return r = n.innerHTML, e.removeNode(n), o.setSelectedRange(i), t(r);\n            };\n          }(this));\n        }, s.proxyMethod(\"responder?.getSelectedRange\"), s.proxyMethod(\"responder?.setSelectedRange\"), s.proxyMethod(\"responder?.expandSelectionInDirection\"), s.proxyMethod(\"responder?.selectionIsInCursorTarget\"), s.proxyMethod(\"responder?.selectionIsExpanded\"), s;\n      }(e.InputController), r = function r(t) {\n        var e, n;\n        return null != (e = t.type) && null != (n = e.match(/\\/(\\w+)$/)) ? n[1] : void 0;\n      }, s = null != (\"function\" == typeof \" \".codePointAt ? \" \".codePointAt(0) : void 0), p = function p(t) {\n        var n;\n        return t.key && s && t.key.codePointAt(0) === t.keyCode ? t.key : (null === t.which ? n = t.keyCode : 0 !== t.which && 0 !== t.charCode && (n = t.charCode), null != n && \"escape\" !== u[n] ? e.UTF16String.fromCodepoints([n]).toString() : void 0);\n      }, h = function h(t) {\n        var e, n, i, o, r, s, a, u, c, l;\n\n        if (u = t.clipboardData) {\n          if (m.call(u.types, \"text/html\") >= 0) {\n            for (c = u.types, i = 0, s = c.length; s > i; i++) {\n              if (l = c[i], e = /^CorePasteboardFlavorType/.test(l), n = /^dyn\\./.test(l) && u.getData(l), a = e || n) return !0;\n            }\n\n            return !1;\n          }\n\n          return o = m.call(u.types, \"com.apple.webarchive\") >= 0, r = m.call(u.types, \"com.apple.flat-rtfd\") >= 0, o || r;\n        }\n      }, t = function (t) {\n        function e(t) {\n          var e;\n          this.inputController = t, e = this.inputController, this.responder = e.responder, this.delegate = e.delegate, this.inputSummary = e.inputSummary, this.data = {};\n        }\n\n        return f(e, t), e.prototype.start = function (t) {\n          var e, n;\n          return this.data.start = t, this.isSignificant() ? (\"keypress\" === this.inputSummary.eventName && this.inputSummary.textAdded && null != (e = this.responder) && e.deleteInDirection(\"left\"), this.selectionIsExpanded() || (this.insertPlaceholder(), this.requestRender()), this.range = null != (n = this.responder) ? n.getSelectedRange() : void 0) : void 0;\n        }, e.prototype.update = function (t) {\n          var e;\n          return this.data.update = t, this.isSignificant() && (e = this.selectPlaceholder()) ? (this.forgetPlaceholder(), this.range = e) : void 0;\n        }, e.prototype.end = function (t) {\n          var e, n, i, o;\n          return this.data.end = t, this.isSignificant() ? (this.forgetPlaceholder(), this.canApplyToDocument() ? (this.setInputSummary({\n            preferDocument: !0,\n            didInput: !1\n          }), null != (e = this.delegate) && e.inputControllerWillPerformTyping(), null != (n = this.responder) && n.setSelectedRange(this.range), null != (i = this.responder) && i.insertString(this.data.end), null != (o = this.responder) ? o.setSelectedRange(this.range[0] + this.data.end.length) : void 0) : null != this.data.start || null != this.data.update ? (this.requestReparse(), this.inputController.reset()) : void 0) : this.inputController.reset();\n        }, e.prototype.getEndData = function () {\n          return this.data.end;\n        }, e.prototype.isEnded = function () {\n          return null != this.getEndData();\n        }, e.prototype.isSignificant = function () {\n          return n.composesExistingText ? this.inputSummary.didInput : !0;\n        }, e.prototype.canApplyToDocument = function () {\n          var t, e;\n          return 0 === (null != (t = this.data.start) ? t.length : void 0) && (null != (e = this.data.end) ? e.length : void 0) > 0 && null != this.range;\n        }, e.proxyMethod(\"inputController.setInputSummary\"), e.proxyMethod(\"inputController.requestRender\"), e.proxyMethod(\"inputController.requestReparse\"), e.proxyMethod(\"responder?.selectionIsExpanded\"), e.proxyMethod(\"responder?.insertPlaceholder\"), e.proxyMethod(\"responder?.selectPlaceholder\"), e.proxyMethod(\"responder?.forgetPlaceholder\"), e;\n      }(e.BasicObject);\n    }.call(this), function () {\n      var t,\n          n,\n          i,\n          o = function o(t, e) {\n        return function () {\n          return t.apply(e, arguments);\n        };\n      },\n          r = function r(t, e) {\n        function n() {\n          this.constructor = t;\n        }\n\n        for (var i in e) {\n          s.call(e, i) && (t[i] = e[i]);\n        }\n\n        return n.prototype = e.prototype, t.prototype = new n(), t.__super__ = e.prototype, t;\n      },\n          s = {}.hasOwnProperty,\n          a = [].indexOf || function (t) {\n        for (var e = 0, n = this.length; n > e; e++) {\n          if (e in this && this[e] === t) return e;\n        }\n\n        return -1;\n      };\n\n      t = e.dataTransferIsPlainText, n = e.keyEventIsKeyboardCommand, i = e.objectsAreEqual, e.Level2InputController = function (s) {\n        function u() {\n          return this.render = o(this.render, this), u.__super__.constructor.apply(this, arguments);\n        }\n\n        var c, l, h, p, d, f;\n        return r(u, s), u.prototype.elementDidMutate = function () {\n          var t;\n          return this.scheduledRender ? this.composing && null != (t = this.delegate) && \"function\" == typeof t.inputControllerDidAllowUnhandledInput ? t.inputControllerDidAllowUnhandledInput() : void 0 : this.reparse();\n        }, u.prototype.scheduleRender = function () {\n          return null != this.scheduledRender ? this.scheduledRender : this.scheduledRender = requestAnimationFrame(this.render);\n        }, u.prototype.render = function () {\n          var t;\n          return cancelAnimationFrame(this.scheduledRender), this.scheduledRender = null, this.composing || null != (t = this.delegate) && t.render(), \"function\" == typeof this.afterRender && this.afterRender(), this.afterRender = null;\n        }, u.prototype.reparse = function () {\n          var t;\n          return null != (t = this.delegate) ? t.reparse() : void 0;\n        }, u.prototype.events = {\n          keydown: function keydown(t) {\n            var e, i, o, r;\n\n            if (n(t)) {\n              if (e = l(t), null != (r = this.delegate) ? r.inputControllerDidReceiveKeyboardCommand(e) : void 0) return t.preventDefault();\n            } else if (o = t.key, t.altKey && (o += \"+Alt\"), t.shiftKey && (o += \"+Shift\"), i = this.keys[o]) return this.withEvent(t, i);\n          },\n          paste: function paste(t) {\n            var n, i, o, r, s, a, u, c, l;\n            return h(t) ? (t.preventDefault(), this.attachFiles(t.clipboardData.files)) : p(t) ? (t.preventDefault(), i = {\n              type: \"text/plain\",\n              string: t.clipboardData.getData(\"text/plain\")\n            }, null != (o = this.delegate) && o.inputControllerWillPaste(i), null != (r = this.responder) && r.insertString(i.string), this.render(), null != (s = this.delegate) ? s.inputControllerDidPaste(i) : void 0) : (n = null != (a = t.clipboardData) ? a.getData(\"URL\") : void 0) ? (t.preventDefault(), i = {\n              type: \"URL\",\n              href: n,\n              string: n\n            }, null != (u = this.delegate) && u.inputControllerWillPaste(i), null != (c = this.responder) && c.insertText(e.Text.textForStringWithAttributes(i.string, {\n              href: i.href\n            })), this.render(), null != (l = this.delegate) ? l.inputControllerDidPaste(i) : void 0) : void 0;\n          },\n          beforeinput: function beforeinput(t) {\n            var e;\n            return (e = this.inputTypes[t.inputType]) ? (this.withEvent(t, e), this.scheduleRender()) : void 0;\n          },\n          input: function input() {\n            return e.selectionChangeObserver.reset();\n          },\n          dragstart: function dragstart(t) {\n            var e, n;\n            return (null != (e = this.responder) ? e.selectionContainsAttachments() : void 0) ? (t.dataTransfer.setData(\"application/x-trix-dragging\", !0), this.dragging = {\n              range: null != (n = this.responder) ? n.getSelectedRange() : void 0,\n              point: d(t)\n            }) : void 0;\n          },\n          dragenter: function dragenter(t) {\n            return c(t) ? t.preventDefault() : void 0;\n          },\n          dragover: function dragover(t) {\n            var e, n;\n            return this.dragging && (t.preventDefault(), e = d(t), !i(e, this.dragging.point)) ? (this.dragging.point = e, null != (n = this.responder) ? n.setLocationRangeFromPointRange(e) : void 0) : void 0;\n          },\n          drop: function drop(t) {\n            var e, n, i, o;\n            return this.dragging ? (t.preventDefault(), null != (n = this.delegate) && n.inputControllerWillMoveText(), null != (i = this.responder) && i.moveTextFromRange(this.dragging.range), this.dragging = null, this.scheduleRender()) : c(t) ? (t.preventDefault(), e = d(t), null != (o = this.responder) && o.setLocationRangeFromPointRange(e), this.attachFiles(t.dataTransfer.files)) : void 0;\n          },\n          dragend: function dragend() {\n            var t;\n            return this.dragging ? (null != (t = this.responder) && t.setSelectedRange(this.dragging.range), this.dragging = null) : void 0;\n          },\n          compositionend: function compositionend() {\n            return this.composing ? (this.composing = !1, this.scheduleRender()) : void 0;\n          }\n        }, u.prototype.keys = {\n          ArrowLeft: function ArrowLeft() {\n            var t, e;\n            return (null != (t = this.responder) ? t.shouldManageMovingCursorInDirection(\"backward\") : void 0) ? (this.event.preventDefault(), null != (e = this.responder) ? e.moveCursorInDirection(\"backward\") : void 0) : void 0;\n          },\n          ArrowRight: function ArrowRight() {\n            var t, e;\n            return (null != (t = this.responder) ? t.shouldManageMovingCursorInDirection(\"forward\") : void 0) ? (this.event.preventDefault(), null != (e = this.responder) ? e.moveCursorInDirection(\"forward\") : void 0) : void 0;\n          },\n          Backspace: function Backspace() {\n            var t, e, n;\n            return (null != (t = this.responder) ? t.shouldManageDeletingInDirection(\"backward\") : void 0) ? (this.event.preventDefault(), null != (e = this.delegate) && e.inputControllerWillPerformTyping(), null != (n = this.responder) && n.deleteInDirection(\"backward\"), this.render()) : void 0;\n          },\n          Tab: function Tab() {\n            var t, e;\n            return (null != (t = this.responder) ? t.canIncreaseNestingLevel() : void 0) ? (this.event.preventDefault(), null != (e = this.responder) && e.increaseNestingLevel(), this.render()) : void 0;\n          },\n          \"Tab+Shift\": function TabShift() {\n            var t, e;\n            return (null != (t = this.responder) ? t.canDecreaseNestingLevel() : void 0) ? (this.event.preventDefault(), null != (e = this.responder) && e.decreaseNestingLevel(), this.render()) : void 0;\n          }\n        }, u.prototype.inputTypes = {\n          deleteByComposition: function deleteByComposition() {\n            return this.deleteInDirection(\"backward\", {\n              recordUndoEntry: !1\n            });\n          },\n          deleteByCut: function deleteByCut() {\n            return this.deleteInDirection(\"backward\");\n          },\n          deleteByDrag: function deleteByDrag() {\n            return this.event.preventDefault(), this.withTargetDOMRange(function () {\n              var t;\n              return this.deleteByDragRange = null != (t = this.responder) ? t.getSelectedRange() : void 0;\n            });\n          },\n          deleteCompositionText: function deleteCompositionText() {\n            return this.deleteInDirection(\"backward\", {\n              recordUndoEntry: !1\n            });\n          },\n          deleteContent: function deleteContent() {\n            return this.deleteInDirection(\"backward\");\n          },\n          deleteContentBackward: function deleteContentBackward() {\n            return this.deleteInDirection(\"backward\");\n          },\n          deleteContentForward: function deleteContentForward() {\n            return this.deleteInDirection(\"forward\");\n          },\n          deleteEntireSoftLine: function deleteEntireSoftLine() {\n            return this.deleteInDirection(\"forward\");\n          },\n          deleteHardLineBackward: function deleteHardLineBackward() {\n            return this.deleteInDirection(\"backward\");\n          },\n          deleteHardLineForward: function deleteHardLineForward() {\n            return this.deleteInDirection(\"forward\");\n          },\n          deleteSoftLineBackward: function deleteSoftLineBackward() {\n            return this.deleteInDirection(\"backward\");\n          },\n          deleteSoftLineForward: function deleteSoftLineForward() {\n            return this.deleteInDirection(\"forward\");\n          },\n          deleteWordBackward: function deleteWordBackward() {\n            return this.deleteInDirection(\"backward\");\n          },\n          deleteWordForward: function deleteWordForward() {\n            return this.deleteInDirection(\"forward\");\n          },\n          formatBackColor: function formatBackColor() {\n            return this.activateAttributeIfSupported(\"backgroundColor\", this.event.data);\n          },\n          formatBold: function formatBold() {\n            return this.toggleAttributeIfSupported(\"bold\");\n          },\n          formatFontColor: function formatFontColor() {\n            return this.activateAttributeIfSupported(\"color\", this.event.data);\n          },\n          formatFontName: function formatFontName() {\n            return this.activateAttributeIfSupported(\"font\", this.event.data);\n          },\n          formatIndent: function formatIndent() {\n            var t;\n            return (null != (t = this.responder) ? t.canIncreaseNestingLevel() : void 0) ? this.withTargetDOMRange(function () {\n              var t;\n              return null != (t = this.responder) ? t.increaseNestingLevel() : void 0;\n            }) : void 0;\n          },\n          formatItalic: function formatItalic() {\n            return this.toggleAttributeIfSupported(\"italic\");\n          },\n          formatJustifyCenter: function formatJustifyCenter() {\n            return this.toggleAttributeIfSupported(\"justifyCenter\");\n          },\n          formatJustifyFull: function formatJustifyFull() {\n            return this.toggleAttributeIfSupported(\"justifyFull\");\n          },\n          formatJustifyLeft: function formatJustifyLeft() {\n            return this.toggleAttributeIfSupported(\"justifyLeft\");\n          },\n          formatJustifyRight: function formatJustifyRight() {\n            return this.toggleAttributeIfSupported(\"justifyRight\");\n          },\n          formatOutdent: function formatOutdent() {\n            var t;\n            return (null != (t = this.responder) ? t.canDecreaseNestingLevel() : void 0) ? this.withTargetDOMRange(function () {\n              var t;\n              return null != (t = this.responder) ? t.decreaseNestingLevel() : void 0;\n            }) : void 0;\n          },\n          formatRemove: function formatRemove() {\n            return this.withTargetDOMRange(function () {\n              var t, e, n, i;\n              i = [];\n\n              for (t in null != (e = this.responder) ? e.getCurrentAttributes() : void 0) {\n                i.push(null != (n = this.responder) ? n.removeCurrentAttribute(t) : void 0);\n              }\n\n              return i;\n            });\n          },\n          formatSetBlockTextDirection: function formatSetBlockTextDirection() {\n            return this.activateAttributeIfSupported(\"blockDir\", this.event.data);\n          },\n          formatSetInlineTextDirection: function formatSetInlineTextDirection() {\n            return this.activateAttributeIfSupported(\"textDir\", this.event.data);\n          },\n          formatStrikeThrough: function formatStrikeThrough() {\n            return this.toggleAttributeIfSupported(\"strike\");\n          },\n          formatSubscript: function formatSubscript() {\n            return this.toggleAttributeIfSupported(\"sub\");\n          },\n          formatSuperscript: function formatSuperscript() {\n            return this.toggleAttributeIfSupported(\"sup\");\n          },\n          formatUnderline: function formatUnderline() {\n            return this.toggleAttributeIfSupported(\"underline\");\n          },\n          historyRedo: function historyRedo() {\n            var t;\n            return null != (t = this.delegate) ? t.inputControllerWillPerformRedo() : void 0;\n          },\n          historyUndo: function historyUndo() {\n            var t;\n            return null != (t = this.delegate) ? t.inputControllerWillPerformUndo() : void 0;\n          },\n          insertCompositionText: function insertCompositionText() {\n            return this.composing = !0, this.insertString(this.event.data);\n          },\n          insertFromComposition: function insertFromComposition() {\n            return this.composing = !1, this.insertString(this.event.data);\n          },\n          insertFromDrop: function insertFromDrop() {\n            var t, e;\n            return (t = this.deleteByDragRange) ? (this.deleteByDragRange = null, null != (e = this.delegate) && e.inputControllerWillMoveText(), this.withTargetDOMRange(function () {\n              var e;\n              return null != (e = this.responder) ? e.moveTextFromRange(t) : void 0;\n            })) : void 0;\n          },\n          insertFromPaste: function insertFromPaste() {\n            var n, i, o, r, s, a, u, c, l, h;\n            return n = this.event.dataTransfer, s = {\n              dataTransfer: n\n            }, (i = n.getData(\"URL\")) ? (s.type = \"URL\", s.href = i, s.string = (r = n.getData(\"public.url-name\")) ? e.squishBreakableWhitespace(r).trim() : i, null != (a = this.delegate) && a.inputControllerWillPaste(s), this.withTargetDOMRange(function () {\n              var t;\n              return null != (t = this.responder) ? t.insertText(e.Text.textForStringWithAttributes(s.string, {\n                href: s.href\n              })) : void 0;\n            }), this.afterRender = function (t) {\n              return function () {\n                var e;\n                return null != (e = t.delegate) ? e.inputControllerDidPaste(s) : void 0;\n              };\n            }(this)) : t(n) ? (s.type = \"text/plain\", s.string = n.getData(\"text/plain\"), null != (u = this.delegate) && u.inputControllerWillPaste(s), this.withTargetDOMRange(function () {\n              var t;\n              return null != (t = this.responder) ? t.insertString(s.string) : void 0;\n            }), this.afterRender = function (t) {\n              return function () {\n                var e;\n                return null != (e = t.delegate) ? e.inputControllerDidPaste(s) : void 0;\n              };\n            }(this)) : (o = n.getData(\"text/html\")) ? (s.type = \"text/html\", s.html = o, null != (c = this.delegate) && c.inputControllerWillPaste(s), this.withTargetDOMRange(function () {\n              var t;\n              return null != (t = this.responder) ? t.insertHTML(s.html) : void 0;\n            }), this.afterRender = function (t) {\n              return function () {\n                var e;\n                return null != (e = t.delegate) ? e.inputControllerDidPaste(s) : void 0;\n              };\n            }(this)) : (null != (l = n.files) ? l.length : void 0) ? (s.type = \"File\", s.file = n.files[0], null != (h = this.delegate) && h.inputControllerWillPaste(s), this.withTargetDOMRange(function () {\n              var t;\n              return null != (t = this.responder) ? t.insertFile(s.file) : void 0;\n            }), this.afterRender = function (t) {\n              return function () {\n                var e;\n                return null != (e = t.delegate) ? e.inputControllerDidPaste(s) : void 0;\n              };\n            }(this)) : void 0;\n          },\n          insertFromYank: function insertFromYank() {\n            return this.insertString(this.event.data);\n          },\n          insertLineBreak: function insertLineBreak() {\n            return this.insertString(\"\\n\");\n          },\n          insertLink: function insertLink() {\n            return this.activateAttributeIfSupported(\"href\", this.event.data);\n          },\n          insertOrderedList: function insertOrderedList() {\n            return this.toggleAttributeIfSupported(\"number\");\n          },\n          insertParagraph: function insertParagraph() {\n            var t;\n            return null != (t = this.delegate) && t.inputControllerWillPerformTyping(), this.withTargetDOMRange(function () {\n              var t;\n              return null != (t = this.responder) ? t.insertLineBreak() : void 0;\n            });\n          },\n          insertReplacementText: function insertReplacementText() {\n            return this.insertString(this.event.dataTransfer.getData(\"text/plain\"), {\n              updatePosition: !1\n            });\n          },\n          insertText: function insertText() {\n            var t, e;\n            return this.insertString(null != (t = this.event.data) ? t : null != (e = this.event.dataTransfer) ? e.getData(\"text/plain\") : void 0);\n          },\n          insertTranspose: function insertTranspose() {\n            return this.insertString(this.event.data);\n          },\n          insertUnorderedList: function insertUnorderedList() {\n            return this.toggleAttributeIfSupported(\"bullet\");\n          }\n        }, u.prototype.insertString = function (t, e) {\n          var n;\n          return null == t && (t = \"\"), null != (n = this.delegate) && n.inputControllerWillPerformTyping(), this.withTargetDOMRange(function () {\n            var n;\n            return null != (n = this.responder) ? n.insertString(t, e) : void 0;\n          });\n        }, u.prototype.toggleAttributeIfSupported = function (t) {\n          var n;\n          return a.call(e.getAllAttributeNames(), t) >= 0 ? (null != (n = this.delegate) && n.inputControllerWillPerformFormatting(t), this.withTargetDOMRange(function () {\n            var e;\n            return null != (e = this.responder) ? e.toggleCurrentAttribute(t) : void 0;\n          })) : void 0;\n        }, u.prototype.activateAttributeIfSupported = function (t, n) {\n          var i;\n          return a.call(e.getAllAttributeNames(), t) >= 0 ? (null != (i = this.delegate) && i.inputControllerWillPerformFormatting(t), this.withTargetDOMRange(function () {\n            var e;\n            return null != (e = this.responder) ? e.setCurrentAttribute(t, n) : void 0;\n          })) : void 0;\n        }, u.prototype.deleteInDirection = function (t, e) {\n          var n, i, o, r;\n          return o = (null != e ? e : {\n            recordUndoEntry: !0\n          }).recordUndoEntry, o && null != (r = this.delegate) && r.inputControllerWillPerformTyping(), i = function (e) {\n            return function () {\n              var n;\n              return null != (n = e.responder) ? n.deleteInDirection(t) : void 0;\n            };\n          }(this), (n = this.getTargetDOMRange({\n            minLength: 2\n          })) ? this.withTargetDOMRange(n, i) : i();\n        }, u.prototype.withTargetDOMRange = function (t, n) {\n          var i;\n          return \"function\" == typeof t && (n = t, t = this.getTargetDOMRange()), t ? null != (i = this.responder) ? i.withTargetDOMRange(t, n.bind(this)) : void 0 : (e.selectionChangeObserver.reset(), n.call(this));\n        }, u.prototype.getTargetDOMRange = function (t) {\n          var e, n, i, o;\n          return i = (null != t ? t : {\n            minLength: 0\n          }).minLength, (o = \"function\" == typeof (e = this.event).getTargetRanges ? e.getTargetRanges() : void 0) && o.length && (n = f(o[0]), 0 === i || n.toString().length >= i) ? n : void 0;\n        }, f = function f(t) {\n          var e;\n          return e = document.createRange(), e.setStart(t.startContainer, t.startOffset), e.setEnd(t.endContainer, t.endOffset), e;\n        }, u.prototype.withEvent = function (t, e) {\n          var n;\n          this.event = t;\n\n          try {\n            n = e.call(this);\n          } finally {\n            this.event = null;\n          }\n\n          return n;\n        }, c = function c(t) {\n          var e, n;\n          return a.call(null != (e = null != (n = t.dataTransfer) ? n.types : void 0) ? e : [], \"Files\") >= 0;\n        }, h = function h(t) {\n          var e;\n          return (e = t.clipboardData) ? a.call(e.types, \"Files\") >= 0 && 1 === e.types.length && e.files.length >= 1 : void 0;\n        }, p = function p(t) {\n          var e;\n          return (e = t.clipboardData) ? a.call(e.types, \"text/plain\") >= 0 && 1 === e.types.length : void 0;\n        }, l = function l(t) {\n          var e;\n          return e = [], t.altKey && e.push(\"alt\"), t.shiftKey && e.push(\"shift\"), e.push(t.key), e;\n        }, d = function d(t) {\n          return {\n            x: t.clientX,\n            y: t.clientY\n          };\n        }, u;\n      }(e.InputController);\n    }.call(this), function () {\n      var t,\n          n,\n          i,\n          o,\n          r,\n          s,\n          a,\n          u,\n          c,\n          l = function l(t, e) {\n        return function () {\n          return t.apply(e, arguments);\n        };\n      },\n          h = function h(t, e) {\n        function n() {\n          this.constructor = t;\n        }\n\n        for (var i in e) {\n          p.call(e, i) && (t[i] = e[i]);\n        }\n\n        return n.prototype = e.prototype, t.prototype = new n(), t.__super__ = e.prototype, t;\n      },\n          p = {}.hasOwnProperty;\n\n      n = e.defer, i = e.escapeHTML, o = e.handleEvent, a = e.makeElement, c = e.tagName, u = e.config, s = u.lang, t = u.css, r = u.keyNames, e.AttachmentEditorController = function (u) {\n        function p(t, e, n, i) {\n          this.attachmentPiece = t, this.element = e, this.container = n, this.options = null != i ? i : {}, this.didBlurCaption = l(this.didBlurCaption, this), this.didChangeCaption = l(this.didChangeCaption, this), this.didInputCaption = l(this.didInputCaption, this), this.didKeyDownCaption = l(this.didKeyDownCaption, this), this.didClickActionButton = l(this.didClickActionButton, this), this.didClickToolbar = l(this.didClickToolbar, this), this.attachment = this.attachmentPiece.attachment, \"a\" === c(this.element) && (this.element = this.element.firstChild), this.install();\n        }\n\n        var d;\n        return h(p, u), d = function d(t) {\n          return function () {\n            var e;\n            return e = t.apply(this, arguments), e[\"do\"](), null == this.undos && (this.undos = []), this.undos.push(e.undo);\n          };\n        }, p.prototype.install = function () {\n          return this.makeElementMutable(), this.addToolbar(), this.attachment.isPreviewable() ? this.installCaptionEditor() : void 0;\n        }, p.prototype.uninstall = function () {\n          var t, e;\n\n          for (this.savePendingCaption(); e = this.undos.pop();) {\n            e();\n          }\n\n          return null != (t = this.delegate) ? t.didUninstallAttachmentEditor(this) : void 0;\n        }, p.prototype.savePendingCaption = function () {\n          var t, e, n;\n          return null != this.pendingCaption ? (t = this.pendingCaption, this.pendingCaption = null, t ? null != (e = this.delegate) && \"function\" == typeof e.attachmentEditorDidRequestUpdatingAttributesForAttachment ? e.attachmentEditorDidRequestUpdatingAttributesForAttachment({\n            caption: t\n          }, this.attachment) : void 0 : null != (n = this.delegate) && \"function\" == typeof n.attachmentEditorDidRequestRemovingAttributeForAttachment ? n.attachmentEditorDidRequestRemovingAttributeForAttachment(\"caption\", this.attachment) : void 0) : void 0;\n        }, p.prototype.makeElementMutable = d(function () {\n          return {\n            \"do\": function (t) {\n              return function () {\n                return t.element.dataset.trixMutable = !0;\n              };\n            }(this),\n            undo: function (t) {\n              return function () {\n                return delete t.element.dataset.trixMutable;\n              };\n            }(this)\n          };\n        }), p.prototype.addToolbar = d(function () {\n          var n, r, u;\n          return n = a({\n            tagName: \"div\",\n            className: t.attachmentToolbar,\n            data: {\n              trixMutable: !0\n            }\n          }), n.innerHTML = '<div class=\"trix-button-row\">\\n  <span class=\"trix-button-group trix-button-group--actions\">\\n    <button type=\"button\" data-trix-action=\"remove\" class=\"trix-button trix-button--remove\" title=\"' + s.remove + '\">' + s.remove + \"</button>\\n  </span>\\n</div>\", this.attachment.isPreviewable() && (r = i(this.attachment.getFilename()), u = i(this.attachment.getFormattedFilesize()), n.innerHTML += '<div class=\"' + t.attachmentMetadataContainer + '\">\\n  <span class=\"' + t.attachmentMetadata + '\">\\n    <span class=\"' + t.attachmentName + '\" title=\"' + r + '\">' + r + '</span>\\n    <span class=\"' + t.attachmentSize + '\">' + u + \"</span>\\n  </span>\\n</div>\"), o(\"click\", {\n            onElement: n,\n            withCallback: this.didClickToolbar\n          }), o(\"click\", {\n            onElement: n,\n            matchingSelector: \"[data-trix-action]\",\n            withCallback: this.didClickActionButton\n          }), {\n            \"do\": function (t) {\n              return function () {\n                return t.element.appendChild(n);\n              };\n            }(this),\n            undo: function () {\n              return function () {\n                return e.removeNode(n);\n              };\n            }(this)\n          };\n        }), p.prototype.installCaptionEditor = d(function () {\n          var i, r, u, c, l;\n          return c = a({\n            tagName: \"textarea\",\n            className: t.attachmentCaptionEditor,\n            attributes: {\n              placeholder: s.captionPlaceholder\n            },\n            data: {\n              trixMutable: !0\n            }\n          }), c.value = this.attachmentPiece.getCaption(), l = c.cloneNode(), l.classList.add(\"trix-autoresize-clone\"), l.tabIndex = -1, i = function i() {\n            return l.value = c.value, c.style.height = l.scrollHeight + \"px\";\n          }, o(\"input\", {\n            onElement: c,\n            withCallback: i\n          }), o(\"input\", {\n            onElement: c,\n            withCallback: this.didInputCaption\n          }), o(\"keydown\", {\n            onElement: c,\n            withCallback: this.didKeyDownCaption\n          }), o(\"change\", {\n            onElement: c,\n            withCallback: this.didChangeCaption\n          }), o(\"blur\", {\n            onElement: c,\n            withCallback: this.didBlurCaption\n          }), u = this.element.querySelector(\"figcaption\"), r = u.cloneNode(), {\n            \"do\": function (e) {\n              return function () {\n                return u.style.display = \"none\", r.appendChild(c), r.appendChild(l), r.classList.add(t.attachmentCaption + \"--editing\"), u.parentElement.insertBefore(r, u), i(), e.options.editCaption ? n(function () {\n                  return c.focus();\n                }) : void 0;\n              };\n            }(this),\n            undo: function undo() {\n              return e.removeNode(r), u.style.display = null;\n            }\n          };\n        }), p.prototype.didClickToolbar = function (t) {\n          return t.preventDefault(), t.stopPropagation();\n        }, p.prototype.didClickActionButton = function (t) {\n          var e, n;\n\n          switch (e = t.target.getAttribute(\"data-trix-action\")) {\n            case \"remove\":\n              return null != (n = this.delegate) ? n.attachmentEditorDidRequestRemovalOfAttachment(this.attachment) : void 0;\n          }\n        }, p.prototype.didKeyDownCaption = function (t) {\n          var e;\n          return \"return\" === r[t.keyCode] ? (t.preventDefault(), this.savePendingCaption(), null != (e = this.delegate) && \"function\" == typeof e.attachmentEditorDidRequestDeselectingAttachment ? e.attachmentEditorDidRequestDeselectingAttachment(this.attachment) : void 0) : void 0;\n        }, p.prototype.didInputCaption = function (t) {\n          return this.pendingCaption = t.target.value.replace(/\\s/g, \" \").trim();\n        }, p.prototype.didChangeCaption = function () {\n          return this.savePendingCaption();\n        }, p.prototype.didBlurCaption = function () {\n          return this.savePendingCaption();\n        }, p;\n      }(e.BasicObject);\n    }.call(this), function () {\n      var t,\n          n,\n          i,\n          o = function o(t, e) {\n        function n() {\n          this.constructor = t;\n        }\n\n        for (var i in e) {\n          r.call(e, i) && (t[i] = e[i]);\n        }\n\n        return n.prototype = e.prototype, t.prototype = new n(), t.__super__ = e.prototype, t;\n      },\n          r = {}.hasOwnProperty;\n\n      i = e.makeElement, t = e.config.css, e.AttachmentView = function (r) {\n        function s() {\n          s.__super__.constructor.apply(this, arguments), this.attachment = this.object, this.attachment.uploadProgressDelegate = this, this.attachmentPiece = this.options.piece;\n        }\n\n        var a;\n        return o(s, r), s.attachmentSelector = \"[data-trix-attachment]\", s.prototype.createContentNodes = function () {\n          return [];\n        }, s.prototype.createNodes = function () {\n          var e, n, o, r, s, u, c;\n          if (e = r = i({\n            tagName: \"figure\",\n            className: this.getClassName(),\n            data: this.getData(),\n            editable: !1\n          }), (n = this.getHref()) && (r = i({\n            tagName: \"a\",\n            editable: !1,\n            attributes: {\n              href: n,\n              tabindex: -1\n            }\n          }), e.appendChild(r)), this.attachment.hasContent()) r.innerHTML = this.attachment.getContent();else for (c = this.createContentNodes(), o = 0, s = c.length; s > o; o++) {\n            u = c[o], r.appendChild(u);\n          }\n          return r.appendChild(this.createCaptionElement()), this.attachment.isPending() && (this.progressElement = i({\n            tagName: \"progress\",\n            attributes: {\n              \"class\": t.attachmentProgress,\n              value: this.attachment.getUploadProgress(),\n              max: 100\n            },\n            data: {\n              trixMutable: !0,\n              trixStoreKey: [\"progressElement\", this.attachment.id].join(\"/\")\n            }\n          }), e.appendChild(this.progressElement)), [a(\"left\"), e, a(\"right\")];\n        }, s.prototype.createCaptionElement = function () {\n          var e, n, o, r, s, a, u;\n          return o = i({\n            tagName: \"figcaption\",\n            className: t.attachmentCaption\n          }), (e = this.attachmentPiece.getCaption()) ? (o.classList.add(t.attachmentCaption + \"--edited\"), o.textContent = e) : (n = this.getCaptionConfig(), n.name && (r = this.attachment.getFilename()), n.size && (a = this.attachment.getFormattedFilesize()), r && (s = i({\n            tagName: \"span\",\n            className: t.attachmentName,\n            textContent: r\n          }), o.appendChild(s)), a && (r && o.appendChild(document.createTextNode(\" \")), u = i({\n            tagName: \"span\",\n            className: t.attachmentSize,\n            textContent: a\n          }), o.appendChild(u))), o;\n        }, s.prototype.getClassName = function () {\n          var e, n;\n          return n = [t.attachment, t.attachment + \"--\" + this.attachment.getType()], (e = this.attachment.getExtension()) && n.push(t.attachment + \"--\" + e), n.join(\" \");\n        }, s.prototype.getData = function () {\n          var t, e;\n          return e = {\n            trixAttachment: JSON.stringify(this.attachment),\n            trixContentType: this.attachment.getContentType(),\n            trixId: this.attachment.id\n          }, t = this.attachmentPiece.attributes, t.isEmpty() || (e.trixAttributes = JSON.stringify(t)), this.attachment.isPending() && (e.trixSerialize = !1), e;\n        }, s.prototype.getHref = function () {\n          return n(this.attachment.getContent(), \"a\") ? void 0 : this.attachment.getHref();\n        }, s.prototype.getCaptionConfig = function () {\n          var t, n, i;\n          return i = this.attachment.getType(), t = e.copyObject(null != (n = e.config.attachments[i]) ? n.caption : void 0), \"file\" === i && (t.name = !0), t;\n        }, s.prototype.findProgressElement = function () {\n          var t;\n          return null != (t = this.findElement()) ? t.querySelector(\"progress\") : void 0;\n        }, a = function a(t) {\n          return i({\n            tagName: \"span\",\n            textContent: e.ZERO_WIDTH_SPACE,\n            data: {\n              trixCursorTarget: t,\n              trixSerialize: !1\n            }\n          });\n        }, s.prototype.attachmentDidChangeUploadProgress = function () {\n          var t, e;\n          return e = this.attachment.getUploadProgress(), null != (t = this.findProgressElement()) ? t.value = e : void 0;\n        }, s;\n      }(e.ObjectView), n = function n(t, e) {\n        var n;\n        return n = i(\"div\"), n.innerHTML = null != t ? t : \"\", n.querySelector(e);\n      };\n    }.call(this), function () {\n      var t,\n          n = function n(t, e) {\n        function n() {\n          this.constructor = t;\n        }\n\n        for (var o in e) {\n          i.call(e, o) && (t[o] = e[o]);\n        }\n\n        return n.prototype = e.prototype, t.prototype = new n(), t.__super__ = e.prototype, t;\n      },\n          i = {}.hasOwnProperty;\n\n      t = e.makeElement, e.PreviewableAttachmentView = function (i) {\n        function o() {\n          o.__super__.constructor.apply(this, arguments), this.attachment.previewDelegate = this;\n        }\n\n        return n(o, i), o.prototype.createContentNodes = function () {\n          return this.image = t({\n            tagName: \"img\",\n            attributes: {\n              src: \"\"\n            },\n            data: {\n              trixMutable: !0\n            }\n          }), this.refresh(this.image), [this.image];\n        }, o.prototype.createCaptionElement = function () {\n          var t;\n          return t = o.__super__.createCaptionElement.apply(this, arguments), t.textContent || t.setAttribute(\"data-trix-placeholder\", e.config.lang.captionPlaceholder), t;\n        }, o.prototype.refresh = function (t) {\n          var e;\n          return null == t && (t = null != (e = this.findElement()) ? e.querySelector(\"img\") : void 0), t ? this.updateAttributesForImage(t) : void 0;\n        }, o.prototype.updateAttributesForImage = function (t) {\n          var e, n, i, o, r, s;\n          return r = this.attachment.getURL(), n = this.attachment.getPreviewURL(), t.src = n || r, n === r ? t.removeAttribute(\"data-trix-serialized-attributes\") : (i = JSON.stringify({\n            src: r\n          }), t.setAttribute(\"data-trix-serialized-attributes\", i)), s = this.attachment.getWidth(), e = this.attachment.getHeight(), null != s && (t.width = s), null != e && (t.height = e), o = [\"imageElement\", this.attachment.id, t.src, t.width, t.height].join(\"/\"), t.dataset.trixStoreKey = o;\n        }, o.prototype.attachmentDidChangeAttributes = function () {\n          return this.refresh(this.image), this.refresh();\n        }, o;\n      }(e.AttachmentView);\n    }.call(this), function () {\n      var t,\n          n,\n          i,\n          o = function o(t, e) {\n        function n() {\n          this.constructor = t;\n        }\n\n        for (var i in e) {\n          r.call(e, i) && (t[i] = e[i]);\n        }\n\n        return n.prototype = e.prototype, t.prototype = new n(), t.__super__ = e.prototype, t;\n      },\n          r = {}.hasOwnProperty;\n\n      i = e.makeElement, t = e.findInnerElement, n = e.getTextConfig, e.PieceView = function (r) {\n        function s() {\n          var t;\n          s.__super__.constructor.apply(this, arguments), this.piece = this.object, this.attributes = this.piece.getAttributes(), t = this.options, this.textConfig = t.textConfig, this.context = t.context, this.piece.attachment ? this.attachment = this.piece.attachment : this.string = this.piece.toString();\n        }\n\n        var a;\n        return o(s, r), s.prototype.createNodes = function () {\n          var e, n, i, o, r, s;\n\n          if (s = this.attachment ? this.createAttachmentNodes() : this.createStringNodes(), e = this.createElement()) {\n            for (i = t(e), n = 0, o = s.length; o > n; n++) {\n              r = s[n], i.appendChild(r);\n            }\n\n            s = [e];\n          }\n\n          return s;\n        }, s.prototype.createAttachmentNodes = function () {\n          var t, n;\n          return t = this.attachment.isPreviewable() ? e.PreviewableAttachmentView : e.AttachmentView, n = this.createChildView(t, this.piece.attachment, {\n            piece: this.piece\n          }), n.getNodes();\n        }, s.prototype.createStringNodes = function () {\n          var t, e, n, o, r, s, a, u, c, l;\n          if (null != (u = this.textConfig) ? u.plaintext : void 0) return [document.createTextNode(this.string)];\n\n          for (a = [], c = this.string.split(\"\\n\"), n = e = 0, o = c.length; o > e; n = ++e) {\n            l = c[n], n > 0 && (t = i(\"br\"), a.push(t)), (r = l.length) && (s = document.createTextNode(this.preserveSpaces(l)), a.push(s));\n          }\n\n          return a;\n        }, s.prototype.createElement = function () {\n          var t, e, o, r, s, a, u, c, l;\n          c = {}, a = this.attributes;\n\n          for (r in a) {\n            if (l = a[r], (t = n(r)) && (t.tagName && (s = i(t.tagName), o ? (o.appendChild(s), o = s) : e = o = s), t.styleProperty && (c[t.styleProperty] = l), t.style)) {\n              u = t.style;\n\n              for (r in u) {\n                l = u[r], c[r] = l;\n              }\n            }\n          }\n\n          if (Object.keys(c).length) {\n            null == e && (e = i(\"span\"));\n\n            for (r in c) {\n              l = c[r], e.style[r] = l;\n            }\n          }\n\n          return e;\n        }, s.prototype.createContainerElement = function () {\n          var t, e, o, r, s;\n          r = this.attributes;\n\n          for (o in r) {\n            if (s = r[o], (e = n(o)) && e.groupTagName) return t = {}, t[o] = s, i(e.groupTagName, t);\n          }\n        }, a = e.NON_BREAKING_SPACE, s.prototype.preserveSpaces = function (t) {\n          return this.context.isLast && (t = t.replace(/\\ $/, a)), t = t.replace(/(\\S)\\ {3}(\\S)/g, \"$1 \" + a + \" $2\").replace(/\\ {2}/g, a + \" \").replace(/\\ {2}/g, \" \" + a), (this.context.isFirst || this.context.followsWhitespace) && (t = t.replace(/^\\ /, a)), t;\n        }, s;\n      }(e.ObjectView);\n    }.call(this), function () {\n      var t = function t(_t12, e) {\n        function i() {\n          this.constructor = _t12;\n        }\n\n        for (var o in e) {\n          n.call(e, o) && (_t12[o] = e[o]);\n        }\n\n        return i.prototype = e.prototype, _t12.prototype = new i(), _t12.__super__ = e.prototype, _t12;\n      },\n          n = {}.hasOwnProperty;\n\n      e.TextView = function (n) {\n        function i() {\n          i.__super__.constructor.apply(this, arguments), this.text = this.object, this.textConfig = this.options.textConfig;\n        }\n\n        var o;\n        return t(i, n), i.prototype.createNodes = function () {\n          var t, n, i, r, s, a, u, c, l, h;\n\n          for (a = [], c = e.ObjectGroup.groupObjects(this.getPieces()), r = c.length - 1, i = n = 0, s = c.length; s > n; i = ++n) {\n            u = c[i], t = {}, 0 === i && (t.isFirst = !0), i === r && (t.isLast = !0), o(l) && (t.followsWhitespace = !0), h = this.findOrCreateCachedChildView(e.PieceView, u, {\n              textConfig: this.textConfig,\n              context: t\n            }), a.push.apply(a, h.getNodes()), l = u;\n          }\n\n          return a;\n        }, i.prototype.getPieces = function () {\n          var t, e, n, i, o;\n\n          for (i = this.text.getPieces(), o = [], t = 0, e = i.length; e > t; t++) {\n            n = i[t], n.hasAttribute(\"blockBreak\") || o.push(n);\n          }\n\n          return o;\n        }, o = function o(t) {\n          return /\\s$/.test(null != t ? t.toString() : void 0);\n        }, i;\n      }(e.ObjectView);\n    }.call(this), function () {\n      var t,\n          n,\n          i,\n          o = function o(t, e) {\n        function n() {\n          this.constructor = t;\n        }\n\n        for (var i in e) {\n          r.call(e, i) && (t[i] = e[i]);\n        }\n\n        return n.prototype = e.prototype, t.prototype = new n(), t.__super__ = e.prototype, t;\n      },\n          r = {}.hasOwnProperty;\n\n      i = e.makeElement, n = e.getBlockConfig, t = e.config.css, e.BlockView = function (r) {\n        function s() {\n          s.__super__.constructor.apply(this, arguments), this.block = this.object, this.attributes = this.block.getAttributes();\n        }\n\n        return o(s, r), s.prototype.createNodes = function () {\n          var t, o, r, s, a, u, c, l, h;\n          if (t = document.createComment(\"block\"), u = [t], this.block.isEmpty() ? u.push(i(\"br\")) : (l = null != (c = n(this.block.getLastAttribute())) ? c.text : void 0, h = this.findOrCreateCachedChildView(e.TextView, this.block.text, {\n            textConfig: l\n          }), u.push.apply(u, h.getNodes()), this.shouldAddExtraNewlineElement() && u.push(i(\"br\"))), this.attributes.length) return u;\n\n          for (o = i(e.config.blockAttributes[\"default\"].tagName), r = 0, s = u.length; s > r; r++) {\n            a = u[r], o.appendChild(a);\n          }\n\n          return [o];\n        }, s.prototype.createContainerElement = function (e) {\n          var o, r, s, a;\n          return o = this.attributes[e], a = n(o).tagName, r = {\n            tagName: a\n          }, \"attachmentGallery\" === o && (s = this.block.getBlockBreakPosition(), r.className = t.attachmentGallery + \" \" + t.attachmentGallery + \"--\" + s), i(r);\n        }, s.prototype.shouldAddExtraNewlineElement = function () {\n          return /\\n\\n$/.test(this.block.toString());\n        }, s;\n      }(e.ObjectView);\n    }.call(this), function () {\n      var t,\n          n,\n          i = function i(t, e) {\n        function n() {\n          this.constructor = t;\n        }\n\n        for (var i in e) {\n          o.call(e, i) && (t[i] = e[i]);\n        }\n\n        return n.prototype = e.prototype, t.prototype = new n(), t.__super__ = e.prototype, t;\n      },\n          o = {}.hasOwnProperty;\n\n      t = e.defer, n = e.makeElement, e.DocumentView = function (o) {\n        function r() {\n          r.__super__.constructor.apply(this, arguments), this.element = this.options.element, this.elementStore = new e.ElementStore(), this.setDocument(this.object);\n        }\n\n        var s, a, u;\n        return i(r, o), r.render = function (t) {\n          var e, i;\n          return e = n(\"div\"), i = new this(t, {\n            element: e\n          }), i.render(), i.sync(), e;\n        }, r.prototype.setDocument = function (t) {\n          return t.isEqualTo(this.document) ? void 0 : this.document = this.object = t;\n        }, r.prototype.render = function () {\n          var t, i, o, r, s, a, u;\n\n          if (this.childViews = [], this.shadowElement = n(\"div\"), !this.document.isEmpty()) {\n            for (s = e.ObjectGroup.groupObjects(this.document.getBlocks(), {\n              asTree: !0\n            }), a = [], t = 0, i = s.length; i > t; t++) {\n              r = s[t], u = this.findOrCreateCachedChildView(e.BlockView, r), a.push(function () {\n                var t, e, n, i;\n\n                for (n = u.getNodes(), i = [], t = 0, e = n.length; e > t; t++) {\n                  o = n[t], i.push(this.shadowElement.appendChild(o));\n                }\n\n                return i;\n              }.call(this));\n            }\n\n            return a;\n          }\n        }, r.prototype.isSynced = function () {\n          return s(this.shadowElement, this.element);\n        }, r.prototype.sync = function () {\n          var t;\n\n          for (t = this.createDocumentFragmentForSync(); this.element.lastChild;) {\n            this.element.removeChild(this.element.lastChild);\n          }\n\n          return this.element.appendChild(t), this.didSync();\n        }, r.prototype.didSync = function () {\n          return this.elementStore.reset(a(this.element)), t(function (t) {\n            return function () {\n              return t.garbageCollectCachedViews();\n            };\n          }(this));\n        }, r.prototype.createDocumentFragmentForSync = function () {\n          var t, e, n, i, o, r, s, u, c, l;\n\n          for (e = document.createDocumentFragment(), u = this.shadowElement.childNodes, n = 0, o = u.length; o > n; n++) {\n            s = u[n], e.appendChild(s.cloneNode(!0));\n          }\n\n          for (c = a(e), i = 0, r = c.length; r > i; i++) {\n            t = c[i], (l = this.elementStore.remove(t)) && t.parentNode.replaceChild(l, t);\n          }\n\n          return e;\n        }, a = function a(t) {\n          return t.querySelectorAll(\"[data-trix-store-key]\");\n        }, s = function s(t, e) {\n          return u(t.innerHTML) === u(e.innerHTML);\n        }, u = function u(t) {\n          return t.replace(/&nbsp;/g, \" \");\n        }, r;\n      }(e.ObjectView);\n    }.call(this), function () {\n      var t,\n          n,\n          i,\n          o,\n          r,\n          s = function s(t, e) {\n        return function () {\n          return t.apply(e, arguments);\n        };\n      },\n          a = function a(t, e) {\n        function n() {\n          this.constructor = t;\n        }\n\n        for (var i in e) {\n          u.call(e, i) && (t[i] = e[i]);\n        }\n\n        return n.prototype = e.prototype, t.prototype = new n(), t.__super__ = e.prototype, t;\n      },\n          u = {}.hasOwnProperty;\n\n      i = e.findClosestElementFromNode, o = e.handleEvent, r = e.innerElementIsActive, n = e.defer, t = e.AttachmentView.attachmentSelector, e.CompositionController = function (u) {\n        function c(n, i) {\n          this.element = n, this.composition = i, this.didClickAttachment = s(this.didClickAttachment, this), this.didBlur = s(this.didBlur, this), this.didFocus = s(this.didFocus, this), this.documentView = new e.DocumentView(this.composition.document, {\n            element: this.element\n          }), o(\"focus\", {\n            onElement: this.element,\n            withCallback: this.didFocus\n          }), o(\"blur\", {\n            onElement: this.element,\n            withCallback: this.didBlur\n          }), o(\"click\", {\n            onElement: this.element,\n            matchingSelector: \"a[contenteditable=false]\",\n            preventDefault: !0\n          }), o(\"mousedown\", {\n            onElement: this.element,\n            matchingSelector: t,\n            withCallback: this.didClickAttachment\n          }), o(\"click\", {\n            onElement: this.element,\n            matchingSelector: \"a\" + t,\n            preventDefault: !0\n          });\n        }\n\n        return a(c, u), c.prototype.didFocus = function () {\n          var t, e, n;\n          return t = function (t) {\n            return function () {\n              var e;\n              return t.focused ? void 0 : (t.focused = !0, null != (e = t.delegate) && \"function\" == typeof e.compositionControllerDidFocus ? e.compositionControllerDidFocus() : void 0);\n            };\n          }(this), null != (e = null != (n = this.blurPromise) ? n.then(t) : void 0) ? e : t();\n        }, c.prototype.didBlur = function () {\n          return this.blurPromise = new Promise(function (t) {\n            return function (e) {\n              return n(function () {\n                var n;\n                return r(t.element) || (t.focused = null, null != (n = t.delegate) && \"function\" == typeof n.compositionControllerDidBlur && n.compositionControllerDidBlur()), t.blurPromise = null, e();\n              });\n            };\n          }(this));\n        }, c.prototype.didClickAttachment = function (t, e) {\n          var n, o, r;\n          return n = this.findAttachmentForElement(e), o = null != i(t.target, {\n            matchingSelector: \"figcaption\"\n          }), null != (r = this.delegate) && \"function\" == typeof r.compositionControllerDidSelectAttachment ? r.compositionControllerDidSelectAttachment(n, {\n            editCaption: o\n          }) : void 0;\n        }, c.prototype.getSerializableElement = function () {\n          return this.isEditingAttachment() ? this.documentView.shadowElement : this.element;\n        }, c.prototype.render = function () {\n          var t, e, n;\n          return this.revision !== this.composition.revision && (this.documentView.setDocument(this.composition.document), this.documentView.render(), this.revision = this.composition.revision), this.canSyncDocumentView() && !this.documentView.isSynced() && (null != (t = this.delegate) && \"function\" == typeof t.compositionControllerWillSyncDocumentView && t.compositionControllerWillSyncDocumentView(), this.documentView.sync(), null != (e = this.delegate) && \"function\" == typeof e.compositionControllerDidSyncDocumentView && e.compositionControllerDidSyncDocumentView()), null != (n = this.delegate) && \"function\" == typeof n.compositionControllerDidRender ? n.compositionControllerDidRender() : void 0;\n        }, c.prototype.rerenderViewForObject = function (t) {\n          return this.invalidateViewForObject(t), this.render();\n        }, c.prototype.invalidateViewForObject = function (t) {\n          return this.documentView.invalidateViewForObject(t);\n        }, c.prototype.isViewCachingEnabled = function () {\n          return this.documentView.isViewCachingEnabled();\n        }, c.prototype.enableViewCaching = function () {\n          return this.documentView.enableViewCaching();\n        }, c.prototype.disableViewCaching = function () {\n          return this.documentView.disableViewCaching();\n        }, c.prototype.refreshViewCache = function () {\n          return this.documentView.garbageCollectCachedViews();\n        }, c.prototype.isEditingAttachment = function () {\n          return null != this.attachmentEditor;\n        }, c.prototype.installAttachmentEditorForAttachment = function (t, n) {\n          var i, o, r;\n          if ((null != (r = this.attachmentEditor) ? r.attachment : void 0) !== t && (o = this.documentView.findElementForObject(t))) return this.uninstallAttachmentEditor(), i = this.composition.document.getAttachmentPieceForAttachment(t), this.attachmentEditor = new e.AttachmentEditorController(i, o, this.element, n), this.attachmentEditor.delegate = this;\n        }, c.prototype.uninstallAttachmentEditor = function () {\n          var t;\n          return null != (t = this.attachmentEditor) ? t.uninstall() : void 0;\n        }, c.prototype.didUninstallAttachmentEditor = function () {\n          return this.attachmentEditor = null, this.render();\n        }, c.prototype.attachmentEditorDidRequestUpdatingAttributesForAttachment = function (t, e) {\n          var n;\n          return null != (n = this.delegate) && \"function\" == typeof n.compositionControllerWillUpdateAttachment && n.compositionControllerWillUpdateAttachment(e), this.composition.updateAttributesForAttachment(t, e);\n        }, c.prototype.attachmentEditorDidRequestRemovingAttributeForAttachment = function (t, e) {\n          var n;\n          return null != (n = this.delegate) && \"function\" == typeof n.compositionControllerWillUpdateAttachment && n.compositionControllerWillUpdateAttachment(e), this.composition.removeAttributeForAttachment(t, e);\n        }, c.prototype.attachmentEditorDidRequestRemovalOfAttachment = function (t) {\n          var e;\n          return null != (e = this.delegate) && \"function\" == typeof e.compositionControllerDidRequestRemovalOfAttachment ? e.compositionControllerDidRequestRemovalOfAttachment(t) : void 0;\n        }, c.prototype.attachmentEditorDidRequestDeselectingAttachment = function (t) {\n          var e;\n          return null != (e = this.delegate) && \"function\" == typeof e.compositionControllerDidRequestDeselectingAttachment ? e.compositionControllerDidRequestDeselectingAttachment(t) : void 0;\n        }, c.prototype.canSyncDocumentView = function () {\n          return !this.isEditingAttachment();\n        }, c.prototype.findAttachmentForElement = function (t) {\n          return this.composition.document.getAttachmentById(parseInt(t.dataset.trixId, 10));\n        }, c;\n      }(e.BasicObject);\n    }.call(this), function () {\n      var t,\n          n,\n          i,\n          o = function o(t, e) {\n        return function () {\n          return t.apply(e, arguments);\n        };\n      },\n          r = function r(t, e) {\n        function n() {\n          this.constructor = t;\n        }\n\n        for (var i in e) {\n          s.call(e, i) && (t[i] = e[i]);\n        }\n\n        return n.prototype = e.prototype, t.prototype = new n(), t.__super__ = e.prototype, t;\n      },\n          s = {}.hasOwnProperty;\n\n      n = e.handleEvent, i = e.triggerEvent, t = e.findClosestElementFromNode, e.ToolbarController = function (e) {\n        function s(t) {\n          this.element = t, this.didKeyDownDialogInput = o(this.didKeyDownDialogInput, this), this.didClickDialogButton = o(this.didClickDialogButton, this), this.didClickAttributeButton = o(this.didClickAttributeButton, this), this.didClickActionButton = o(this.didClickActionButton, this), this.attributes = {}, this.actions = {}, this.resetDialogInputs(), n(\"mousedown\", {\n            onElement: this.element,\n            matchingSelector: a,\n            withCallback: this.didClickActionButton\n          }), n(\"mousedown\", {\n            onElement: this.element,\n            matchingSelector: c,\n            withCallback: this.didClickAttributeButton\n          }), n(\"click\", {\n            onElement: this.element,\n            matchingSelector: v,\n            preventDefault: !0\n          }), n(\"click\", {\n            onElement: this.element,\n            matchingSelector: l,\n            withCallback: this.didClickDialogButton\n          }), n(\"keydown\", {\n            onElement: this.element,\n            matchingSelector: h,\n            withCallback: this.didKeyDownDialogInput\n          });\n        }\n\n        var a, u, c, l, h, p, d, f, g, m, v;\n        return r(s, e), c = \"[data-trix-attribute]\", a = \"[data-trix-action]\", v = c + \", \" + a, p = \"[data-trix-dialog]\", u = p + \"[data-trix-active]\", l = p + \" [data-trix-method]\", h = p + \" [data-trix-input]\", s.prototype.didClickActionButton = function (t, e) {\n          var n, i, o;\n          return null != (i = this.delegate) && i.toolbarDidClickButton(), t.preventDefault(), n = d(e), this.getDialog(n) ? this.toggleDialog(n) : null != (o = this.delegate) ? o.toolbarDidInvokeAction(n) : void 0;\n        }, s.prototype.didClickAttributeButton = function (t, e) {\n          var n, i, o;\n          return null != (i = this.delegate) && i.toolbarDidClickButton(), t.preventDefault(), n = f(e), this.getDialog(n) ? this.toggleDialog(n) : null != (o = this.delegate) && o.toolbarDidToggleAttribute(n), this.refreshAttributeButtons();\n        }, s.prototype.didClickDialogButton = function (e, n) {\n          var i, o;\n          return i = t(n, {\n            matchingSelector: p\n          }), o = n.getAttribute(\"data-trix-method\"), this[o].call(this, i);\n        }, s.prototype.didKeyDownDialogInput = function (t, e) {\n          var n, i;\n          return 13 === t.keyCode && (t.preventDefault(), n = e.getAttribute(\"name\"), i = this.getDialog(n), this.setAttribute(i)), 27 === t.keyCode ? (t.preventDefault(), this.hideDialog()) : void 0;\n        }, s.prototype.updateActions = function (t) {\n          return this.actions = t, this.refreshActionButtons();\n        }, s.prototype.refreshActionButtons = function () {\n          return this.eachActionButton(function (t) {\n            return function (e, n) {\n              return e.disabled = t.actions[n] === !1;\n            };\n          }(this));\n        }, s.prototype.eachActionButton = function (t) {\n          var e, n, i, o, r;\n\n          for (o = this.element.querySelectorAll(a), r = [], n = 0, i = o.length; i > n; n++) {\n            e = o[n], r.push(t(e, d(e)));\n          }\n\n          return r;\n        }, s.prototype.updateAttributes = function (t) {\n          return this.attributes = t, this.refreshAttributeButtons();\n        }, s.prototype.refreshAttributeButtons = function () {\n          return this.eachAttributeButton(function (t) {\n            return function (e, n) {\n              return e.disabled = t.attributes[n] === !1, t.attributes[n] || t.dialogIsVisible(n) ? (e.setAttribute(\"data-trix-active\", \"\"), e.classList.add(\"trix-active\")) : (e.removeAttribute(\"data-trix-active\"), e.classList.remove(\"trix-active\"));\n            };\n          }(this));\n        }, s.prototype.eachAttributeButton = function (t) {\n          var e, n, i, o, r;\n\n          for (o = this.element.querySelectorAll(c), r = [], n = 0, i = o.length; i > n; n++) {\n            e = o[n], r.push(t(e, f(e)));\n          }\n\n          return r;\n        }, s.prototype.applyKeyboardCommand = function (t) {\n          var e, n, o, r, s, a, u;\n\n          for (s = JSON.stringify(t.sort()), u = this.element.querySelectorAll(\"[data-trix-key]\"), r = 0, a = u.length; a > r; r++) {\n            if (e = u[r], o = e.getAttribute(\"data-trix-key\").split(\"+\"), n = JSON.stringify(o.sort()), n === s) return i(\"mousedown\", {\n              onElement: e\n            }), !0;\n          }\n\n          return !1;\n        }, s.prototype.dialogIsVisible = function (t) {\n          var e;\n          return (e = this.getDialog(t)) ? e.hasAttribute(\"data-trix-active\") : void 0;\n        }, s.prototype.toggleDialog = function (t) {\n          return this.dialogIsVisible(t) ? this.hideDialog() : this.showDialog(t);\n        }, s.prototype.showDialog = function (t) {\n          var e, n, i, o, r, s, a, u, c, l;\n\n          for (this.hideDialog(), null != (a = this.delegate) && a.toolbarWillShowDialog(), i = this.getDialog(t), i.setAttribute(\"data-trix-active\", \"\"), i.classList.add(\"trix-active\"), u = i.querySelectorAll(\"input[disabled]\"), o = 0, s = u.length; s > o; o++) {\n            n = u[o], n.removeAttribute(\"disabled\");\n          }\n\n          return (e = f(i)) && (r = m(i, t)) && (r.value = null != (c = this.attributes[e]) ? c : \"\", r.select()), null != (l = this.delegate) ? l.toolbarDidShowDialog(t) : void 0;\n        }, s.prototype.setAttribute = function (t) {\n          var e, n, i;\n          return e = f(t), n = m(t, e), n.willValidate && !n.checkValidity() ? (n.setAttribute(\"data-trix-validate\", \"\"), n.classList.add(\"trix-validate\"), n.focus()) : (null != (i = this.delegate) && i.toolbarDidUpdateAttribute(e, n.value), this.hideDialog());\n        }, s.prototype.removeAttribute = function (t) {\n          var e, n;\n          return e = f(t), null != (n = this.delegate) && n.toolbarDidRemoveAttribute(e), this.hideDialog();\n        }, s.prototype.hideDialog = function () {\n          var t, e;\n          return (t = this.element.querySelector(u)) ? (t.removeAttribute(\"data-trix-active\"), t.classList.remove(\"trix-active\"), this.resetDialogInputs(), null != (e = this.delegate) ? e.toolbarDidHideDialog(g(t)) : void 0) : void 0;\n        }, s.prototype.resetDialogInputs = function () {\n          var t, e, n, i, o;\n\n          for (i = this.element.querySelectorAll(h), o = [], t = 0, n = i.length; n > t; t++) {\n            e = i[t], e.setAttribute(\"disabled\", \"disabled\"), e.removeAttribute(\"data-trix-validate\"), o.push(e.classList.remove(\"trix-validate\"));\n          }\n\n          return o;\n        }, s.prototype.getDialog = function (t) {\n          return this.element.querySelector(\"[data-trix-dialog=\" + t + \"]\");\n        }, m = function m(t, e) {\n          return null == e && (e = f(t)), t.querySelector(\"[data-trix-input][name='\" + e + \"']\");\n        }, d = function d(t) {\n          return t.getAttribute(\"data-trix-action\");\n        }, f = function f(t) {\n          var e;\n          return null != (e = t.getAttribute(\"data-trix-attribute\")) ? e : t.getAttribute(\"data-trix-dialog-attribute\");\n        }, g = function g(t) {\n          return t.getAttribute(\"data-trix-dialog\");\n        }, s;\n      }(e.BasicObject);\n    }.call(this), function () {\n      var t = function t(_t13, e) {\n        function i() {\n          this.constructor = _t13;\n        }\n\n        for (var o in e) {\n          n.call(e, o) && (_t13[o] = e[o]);\n        }\n\n        return i.prototype = e.prototype, _t13.prototype = new i(), _t13.__super__ = e.prototype, _t13;\n      },\n          n = {}.hasOwnProperty;\n\n      e.ImagePreloadOperation = function (e) {\n        function n(t) {\n          this.url = t;\n        }\n\n        return t(n, e), n.prototype.perform = function (t) {\n          var e;\n          return e = new Image(), e.onload = function (n) {\n            return function () {\n              return e.width = n.width = e.naturalWidth, e.height = n.height = e.naturalHeight, t(!0, e);\n            };\n          }(this), e.onerror = function () {\n            return t(!1);\n          }, e.src = this.url;\n        }, n;\n      }(e.Operation);\n    }.call(this), function () {\n      var t = function t(_t14, e) {\n        return function () {\n          return _t14.apply(e, arguments);\n        };\n      },\n          n = function n(t, e) {\n        function n() {\n          this.constructor = t;\n        }\n\n        for (var o in e) {\n          i.call(e, o) && (t[o] = e[o]);\n        }\n\n        return n.prototype = e.prototype, t.prototype = new n(), t.__super__ = e.prototype, t;\n      },\n          i = {}.hasOwnProperty;\n\n      e.Attachment = function (i) {\n        function o(n) {\n          null == n && (n = {}), this.releaseFile = t(this.releaseFile, this), o.__super__.constructor.apply(this, arguments), this.attributes = e.Hash.box(n), this.didChangeAttributes();\n        }\n\n        return n(o, i), o.previewablePattern = /^image(\\/(gif|png|jpe?g)|$)/, o.attachmentForFile = function (t) {\n          var e, n;\n          return n = this.attributesForFile(t), e = new this(n), e.setFile(t), e;\n        }, o.attributesForFile = function (t) {\n          return new e.Hash({\n            filename: t.name,\n            filesize: t.size,\n            contentType: t.type\n          });\n        }, o.fromJSON = function (t) {\n          return new this(t);\n        }, o.prototype.getAttribute = function (t) {\n          return this.attributes.get(t);\n        }, o.prototype.hasAttribute = function (t) {\n          return this.attributes.has(t);\n        }, o.prototype.getAttributes = function () {\n          return this.attributes.toObject();\n        }, o.prototype.setAttributes = function (t) {\n          var e, n, i;\n          return null == t && (t = {}), e = this.attributes.merge(t), this.attributes.isEqualTo(e) ? void 0 : (this.attributes = e, this.didChangeAttributes(), null != (n = this.previewDelegate) && \"function\" == typeof n.attachmentDidChangeAttributes && n.attachmentDidChangeAttributes(this), null != (i = this.delegate) && \"function\" == typeof i.attachmentDidChangeAttributes ? i.attachmentDidChangeAttributes(this) : void 0);\n        }, o.prototype.didChangeAttributes = function () {\n          return this.isPreviewable() ? this.preloadURL() : void 0;\n        }, o.prototype.isPending = function () {\n          return null != this.file && !(this.getURL() || this.getHref());\n        }, o.prototype.isPreviewable = function () {\n          return this.attributes.has(\"previewable\") ? this.attributes.get(\"previewable\") : this.constructor.previewablePattern.test(this.getContentType());\n        }, o.prototype.getType = function () {\n          return this.hasContent() ? \"content\" : this.isPreviewable() ? \"preview\" : \"file\";\n        }, o.prototype.getURL = function () {\n          return this.attributes.get(\"url\");\n        }, o.prototype.getHref = function () {\n          return this.attributes.get(\"href\");\n        }, o.prototype.getFilename = function () {\n          var t;\n          return null != (t = this.attributes.get(\"filename\")) ? t : \"\";\n        }, o.prototype.getFilesize = function () {\n          return this.attributes.get(\"filesize\");\n        }, o.prototype.getFormattedFilesize = function () {\n          var t;\n          return t = this.attributes.get(\"filesize\"), \"number\" == typeof t ? e.config.fileSize.formatter(t) : \"\";\n        }, o.prototype.getExtension = function () {\n          var t;\n          return null != (t = this.getFilename().match(/\\.(\\w+)$/)) ? t[1].toLowerCase() : void 0;\n        }, o.prototype.getContentType = function () {\n          return this.attributes.get(\"contentType\");\n        }, o.prototype.hasContent = function () {\n          return this.attributes.has(\"content\");\n        }, o.prototype.getContent = function () {\n          return this.attributes.get(\"content\");\n        }, o.prototype.getWidth = function () {\n          return this.attributes.get(\"width\");\n        }, o.prototype.getHeight = function () {\n          return this.attributes.get(\"height\");\n        }, o.prototype.getFile = function () {\n          return this.file;\n        }, o.prototype.setFile = function (t) {\n          return this.file = t, this.isPreviewable() ? this.preloadFile() : void 0;\n        }, o.prototype.releaseFile = function () {\n          return this.releasePreloadedFile(), this.file = null;\n        }, o.prototype.getUploadProgress = function () {\n          var t;\n          return null != (t = this.uploadProgress) ? t : 0;\n        }, o.prototype.setUploadProgress = function (t) {\n          var e;\n          return this.uploadProgress !== t ? (this.uploadProgress = t, null != (e = this.uploadProgressDelegate) && \"function\" == typeof e.attachmentDidChangeUploadProgress ? e.attachmentDidChangeUploadProgress(this) : void 0) : void 0;\n        }, o.prototype.toJSON = function () {\n          return this.getAttributes();\n        }, o.prototype.getCacheKey = function () {\n          return [o.__super__.getCacheKey.apply(this, arguments), this.attributes.getCacheKey(), this.getPreviewURL()].join(\"/\");\n        }, o.prototype.getPreviewURL = function () {\n          return this.previewURL || this.preloadingURL;\n        }, o.prototype.setPreviewURL = function (t) {\n          var e, n;\n          return t !== this.getPreviewURL() ? (this.previewURL = t, null != (e = this.previewDelegate) && \"function\" == typeof e.attachmentDidChangeAttributes && e.attachmentDidChangeAttributes(this), null != (n = this.delegate) && \"function\" == typeof n.attachmentDidChangePreviewURL ? n.attachmentDidChangePreviewURL(this) : void 0) : void 0;\n        }, o.prototype.preloadURL = function () {\n          return this.preload(this.getURL(), this.releaseFile);\n        }, o.prototype.preloadFile = function () {\n          return this.file ? (this.fileObjectURL = URL.createObjectURL(this.file), this.preload(this.fileObjectURL)) : void 0;\n        }, o.prototype.releasePreloadedFile = function () {\n          return this.fileObjectURL ? (URL.revokeObjectURL(this.fileObjectURL), this.fileObjectURL = null) : void 0;\n        }, o.prototype.preload = function (t, n) {\n          var i;\n          return t && t !== this.getPreviewURL() ? (this.preloadingURL = t, i = new e.ImagePreloadOperation(t), i.then(function (e) {\n            return function (i) {\n              var o, r;\n              return r = i.width, o = i.height, e.setAttributes({\n                width: r,\n                height: o\n              }), e.preloadingURL = null, e.setPreviewURL(t), \"function\" == typeof n ? n() : void 0;\n            };\n          }(this))) : void 0;\n        }, o;\n      }(e.Object);\n    }.call(this), function () {\n      var t = function t(_t15, e) {\n        function i() {\n          this.constructor = _t15;\n        }\n\n        for (var o in e) {\n          n.call(e, o) && (_t15[o] = e[o]);\n        }\n\n        return i.prototype = e.prototype, _t15.prototype = new i(), _t15.__super__ = e.prototype, _t15;\n      },\n          n = {}.hasOwnProperty;\n\n      e.Piece = function (n) {\n        function i(t, n) {\n          null == n && (n = {}), i.__super__.constructor.apply(this, arguments), this.attributes = e.Hash.box(n);\n        }\n\n        return t(i, n), i.types = {}, i.registerType = function (t, e) {\n          return e.type = t, this.types[t] = e;\n        }, i.fromJSON = function (t) {\n          var e;\n          return (e = this.types[t.type]) ? e.fromJSON(t) : void 0;\n        }, i.prototype.copyWithAttributes = function (t) {\n          return new this.constructor(this.getValue(), t);\n        }, i.prototype.copyWithAdditionalAttributes = function (t) {\n          return this.copyWithAttributes(this.attributes.merge(t));\n        }, i.prototype.copyWithoutAttribute = function (t) {\n          return this.copyWithAttributes(this.attributes.remove(t));\n        }, i.prototype.copy = function () {\n          return this.copyWithAttributes(this.attributes);\n        }, i.prototype.getAttribute = function (t) {\n          return this.attributes.get(t);\n        }, i.prototype.getAttributesHash = function () {\n          return this.attributes;\n        }, i.prototype.getAttributes = function () {\n          return this.attributes.toObject();\n        }, i.prototype.getCommonAttributes = function () {\n          var t, e, n;\n          return (n = pieceList.getPieceAtIndex(0)) ? (t = n.attributes, e = t.getKeys(), pieceList.eachPiece(function (n) {\n            return e = t.getKeysCommonToHash(n.attributes), t = t.slice(e);\n          }), t.toObject()) : {};\n        }, i.prototype.hasAttribute = function (t) {\n          return this.attributes.has(t);\n        }, i.prototype.hasSameStringValueAsPiece = function (t) {\n          return null != t && this.toString() === t.toString();\n        }, i.prototype.hasSameAttributesAsPiece = function (t) {\n          return null != t && (this.attributes === t.attributes || this.attributes.isEqualTo(t.attributes));\n        }, i.prototype.isBlockBreak = function () {\n          return !1;\n        }, i.prototype.isEqualTo = function (t) {\n          return i.__super__.isEqualTo.apply(this, arguments) || this.hasSameConstructorAs(t) && this.hasSameStringValueAsPiece(t) && this.hasSameAttributesAsPiece(t);\n        }, i.prototype.isEmpty = function () {\n          return 0 === this.length;\n        }, i.prototype.isSerializable = function () {\n          return !0;\n        }, i.prototype.toJSON = function () {\n          return {\n            type: this.constructor.type,\n            attributes: this.getAttributes()\n          };\n        }, i.prototype.contentsForInspection = function () {\n          return {\n            type: this.constructor.type,\n            attributes: this.attributes.inspect()\n          };\n        }, i.prototype.canBeGrouped = function () {\n          return this.hasAttribute(\"href\");\n        }, i.prototype.canBeGroupedWith = function (t) {\n          return this.getAttribute(\"href\") === t.getAttribute(\"href\");\n        }, i.prototype.getLength = function () {\n          return this.length;\n        }, i.prototype.canBeConsolidatedWith = function () {\n          return !1;\n        }, i;\n      }(e.Object);\n    }.call(this), function () {\n      var t = function t(_t16, e) {\n        function i() {\n          this.constructor = _t16;\n        }\n\n        for (var o in e) {\n          n.call(e, o) && (_t16[o] = e[o]);\n        }\n\n        return i.prototype = e.prototype, _t16.prototype = new i(), _t16.__super__ = e.prototype, _t16;\n      },\n          n = {}.hasOwnProperty;\n\n      e.Piece.registerType(\"attachment\", e.AttachmentPiece = function (n) {\n        function i(t) {\n          this.attachment = t, i.__super__.constructor.apply(this, arguments), this.length = 1, this.ensureAttachmentExclusivelyHasAttribute(\"href\"), this.attachment.hasContent() || this.removeProhibitedAttributes();\n        }\n\n        return t(i, n), i.fromJSON = function (t) {\n          return new this(e.Attachment.fromJSON(t.attachment), t.attributes);\n        }, i.permittedAttributes = [\"caption\", \"presentation\"], i.prototype.ensureAttachmentExclusivelyHasAttribute = function (t) {\n          return this.hasAttribute(t) ? (this.attachment.hasAttribute(t) || this.attachment.setAttributes(this.attributes.slice(t)), this.attributes = this.attributes.remove(t)) : void 0;\n        }, i.prototype.removeProhibitedAttributes = function () {\n          var t;\n          return t = this.attributes.slice(this.constructor.permittedAttributes), t.isEqualTo(this.attributes) ? void 0 : this.attributes = t;\n        }, i.prototype.getValue = function () {\n          return this.attachment;\n        }, i.prototype.isSerializable = function () {\n          return !this.attachment.isPending();\n        }, i.prototype.getCaption = function () {\n          var t;\n          return null != (t = this.attributes.get(\"caption\")) ? t : \"\";\n        }, i.prototype.isEqualTo = function (t) {\n          var e;\n          return i.__super__.isEqualTo.apply(this, arguments) && this.attachment.id === (null != t && null != (e = t.attachment) ? e.id : void 0);\n        }, i.prototype.toString = function () {\n          return e.OBJECT_REPLACEMENT_CHARACTER;\n        }, i.prototype.toJSON = function () {\n          var t;\n          return t = i.__super__.toJSON.apply(this, arguments), t.attachment = this.attachment, t;\n        }, i.prototype.getCacheKey = function () {\n          return [i.__super__.getCacheKey.apply(this, arguments), this.attachment.getCacheKey()].join(\"/\");\n        }, i.prototype.toConsole = function () {\n          return JSON.stringify(this.toString());\n        }, i;\n      }(e.Piece));\n    }.call(this), function () {\n      var t,\n          n = function n(t, e) {\n        function n() {\n          this.constructor = t;\n        }\n\n        for (var o in e) {\n          i.call(e, o) && (t[o] = e[o]);\n        }\n\n        return n.prototype = e.prototype, t.prototype = new n(), t.__super__ = e.prototype, t;\n      },\n          i = {}.hasOwnProperty;\n\n      t = e.normalizeNewlines, e.Piece.registerType(\"string\", e.StringPiece = function (e) {\n        function i(e) {\n          i.__super__.constructor.apply(this, arguments), this.string = t(e), this.length = this.string.length;\n        }\n\n        return n(i, e), i.fromJSON = function (t) {\n          return new this(t.string, t.attributes);\n        }, i.prototype.getValue = function () {\n          return this.string;\n        }, i.prototype.toString = function () {\n          return this.string.toString();\n        }, i.prototype.isBlockBreak = function () {\n          return \"\\n\" === this.toString() && this.getAttribute(\"blockBreak\") === !0;\n        }, i.prototype.toJSON = function () {\n          var t;\n          return t = i.__super__.toJSON.apply(this, arguments), t.string = this.string, t;\n        }, i.prototype.canBeConsolidatedWith = function (t) {\n          return null != t && this.hasSameConstructorAs(t) && this.hasSameAttributesAsPiece(t);\n        }, i.prototype.consolidateWith = function (t) {\n          return new this.constructor(this.toString() + t.toString(), this.attributes);\n        }, i.prototype.splitAtOffset = function (t) {\n          var e, n;\n          return 0 === t ? (e = null, n = this) : t === this.length ? (e = this, n = null) : (e = new this.constructor(this.string.slice(0, t), this.attributes), n = new this.constructor(this.string.slice(t), this.attributes)), [e, n];\n        }, i.prototype.toConsole = function () {\n          var t;\n          return t = this.string, t.length > 15 && (t = t.slice(0, 14) + \"\\u2026\"), JSON.stringify(t.toString());\n        }, i;\n      }(e.Piece));\n    }.call(this), function () {\n      var t,\n          n = function n(t, e) {\n        function n() {\n          this.constructor = t;\n        }\n\n        for (var o in e) {\n          i.call(e, o) && (t[o] = e[o]);\n        }\n\n        return n.prototype = e.prototype, t.prototype = new n(), t.__super__ = e.prototype, t;\n      },\n          i = {}.hasOwnProperty,\n          o = [].slice;\n\n      t = e.spliceArray, e.SplittableList = function (e) {\n        function i(t) {\n          null == t && (t = []), i.__super__.constructor.apply(this, arguments), this.objects = t.slice(0), this.length = this.objects.length;\n        }\n\n        var r, s, a;\n        return n(i, e), i.box = function (t) {\n          return t instanceof this ? t : new this(t);\n        }, i.prototype.indexOf = function (t) {\n          return this.objects.indexOf(t);\n        }, i.prototype.splice = function () {\n          var e;\n          return e = 1 <= arguments.length ? o.call(arguments, 0) : [], new this.constructor(t.apply(null, [this.objects].concat(o.call(e))));\n        }, i.prototype.eachObject = function (t) {\n          var e, n, i, o, r, s;\n\n          for (r = this.objects, s = [], n = e = 0, i = r.length; i > e; n = ++e) {\n            o = r[n], s.push(t(o, n));\n          }\n\n          return s;\n        }, i.prototype.insertObjectAtIndex = function (t, e) {\n          return this.splice(e, 0, t);\n        }, i.prototype.insertSplittableListAtIndex = function (t, e) {\n          return this.splice.apply(this, [e, 0].concat(o.call(t.objects)));\n        }, i.prototype.insertSplittableListAtPosition = function (t, e) {\n          var n, i, o;\n          return o = this.splitObjectAtPosition(e), i = o[0], n = o[1], new this.constructor(i).insertSplittableListAtIndex(t, n);\n        }, i.prototype.editObjectAtIndex = function (t, e) {\n          return this.replaceObjectAtIndex(e(this.objects[t]), t);\n        }, i.prototype.replaceObjectAtIndex = function (t, e) {\n          return this.splice(e, 1, t);\n        }, i.prototype.removeObjectAtIndex = function (t) {\n          return this.splice(t, 1);\n        }, i.prototype.getObjectAtIndex = function (t) {\n          return this.objects[t];\n        }, i.prototype.getSplittableListInRange = function (t) {\n          var e, n, i, o;\n          return i = this.splitObjectsAtRange(t), n = i[0], e = i[1], o = i[2], new this.constructor(n.slice(e, o + 1));\n        }, i.prototype.selectSplittableList = function (t) {\n          var e, n;\n          return n = function () {\n            var n, i, o, r;\n\n            for (o = this.objects, r = [], n = 0, i = o.length; i > n; n++) {\n              e = o[n], t(e) && r.push(e);\n            }\n\n            return r;\n          }.call(this), new this.constructor(n);\n        }, i.prototype.removeObjectsInRange = function (t) {\n          var e, n, i, o;\n          return i = this.splitObjectsAtRange(t), n = i[0], e = i[1], o = i[2], new this.constructor(n).splice(e, o - e + 1);\n        }, i.prototype.transformObjectsInRange = function (t, e) {\n          var n, i, o, r, s, a, u;\n          return s = this.splitObjectsAtRange(t), r = s[0], i = s[1], a = s[2], u = function () {\n            var t, s, u;\n\n            for (u = [], n = t = 0, s = r.length; s > t; n = ++t) {\n              o = r[n], u.push(n >= i && a >= n ? e(o) : o);\n            }\n\n            return u;\n          }(), new this.constructor(u);\n        }, i.prototype.splitObjectsAtRange = function (t) {\n          var e, n, i, o, s, u;\n          return o = this.splitObjectAtPosition(a(t)), n = o[0], e = o[1], i = o[2], s = new this.constructor(n).splitObjectAtPosition(r(t) + i), n = s[0], u = s[1], [n, e, u - 1];\n        }, i.prototype.getObjectAtPosition = function (t) {\n          var e, n, i;\n          return i = this.findIndexAndOffsetAtPosition(t), e = i.index, n = i.offset, this.objects[e];\n        }, i.prototype.splitObjectAtPosition = function (t) {\n          var e, n, i, o, r, s, a, u, c, l;\n          return s = this.findIndexAndOffsetAtPosition(t), e = s.index, r = s.offset, o = this.objects.slice(0), null != e ? 0 === r ? (c = e, l = 0) : (i = this.getObjectAtIndex(e), a = i.splitAtOffset(r), n = a[0], u = a[1], o.splice(e, 1, n, u), c = e + 1, l = n.getLength() - r) : (c = o.length, l = 0), [o, c, l];\n        }, i.prototype.consolidate = function () {\n          var t, e, n, i, o, r;\n\n          for (i = [], o = this.objects[0], r = this.objects.slice(1), t = 0, e = r.length; e > t; t++) {\n            n = r[t], (\"function\" == typeof o.canBeConsolidatedWith ? o.canBeConsolidatedWith(n) : void 0) ? o = o.consolidateWith(n) : (i.push(o), o = n);\n          }\n\n          return null != o && i.push(o), new this.constructor(i);\n        }, i.prototype.consolidateFromIndexToIndex = function (t, e) {\n          var n, i, r;\n          return i = this.objects.slice(0), r = i.slice(t, e + 1), n = new this.constructor(r).consolidate().toArray(), this.splice.apply(this, [t, r.length].concat(o.call(n)));\n        }, i.prototype.findIndexAndOffsetAtPosition = function (t) {\n          var e, n, i, o, r, s, a;\n\n          for (e = 0, a = this.objects, i = n = 0, o = a.length; o > n; i = ++n) {\n            if (s = a[i], r = e + s.getLength(), t >= e && r > t) return {\n              index: i,\n              offset: t - e\n            };\n            e = r;\n          }\n\n          return {\n            index: null,\n            offset: null\n          };\n        }, i.prototype.findPositionAtIndexAndOffset = function (t, e) {\n          var n, i, o, r, s, a;\n\n          for (s = 0, a = this.objects, n = i = 0, o = a.length; o > i; n = ++i) {\n            if (r = a[n], t > n) s += r.getLength();else if (n === t) {\n              s += e;\n              break;\n            }\n          }\n\n          return s;\n        }, i.prototype.getEndPosition = function () {\n          var t, e;\n          return null != this.endPosition ? this.endPosition : this.endPosition = function () {\n            var n, i, o;\n\n            for (e = 0, o = this.objects, n = 0, i = o.length; i > n; n++) {\n              t = o[n], e += t.getLength();\n            }\n\n            return e;\n          }.call(this);\n        }, i.prototype.toString = function () {\n          return this.objects.join(\"\");\n        }, i.prototype.toArray = function () {\n          return this.objects.slice(0);\n        }, i.prototype.toJSON = function () {\n          return this.toArray();\n        }, i.prototype.isEqualTo = function (t) {\n          return i.__super__.isEqualTo.apply(this, arguments) || s(this.objects, null != t ? t.objects : void 0);\n        }, s = function s(t, e) {\n          var n, i, o, r, s;\n          if (null == e && (e = []), t.length !== e.length) return !1;\n\n          for (s = !0, i = n = 0, o = t.length; o > n; i = ++n) {\n            r = t[i], s && !r.isEqualTo(e[i]) && (s = !1);\n          }\n\n          return s;\n        }, i.prototype.contentsForInspection = function () {\n          var t;\n          return {\n            objects: \"[\" + function () {\n              var e, n, i, o;\n\n              for (i = this.objects, o = [], e = 0, n = i.length; n > e; e++) {\n                t = i[e], o.push(t.inspect());\n              }\n\n              return o;\n            }.call(this).join(\", \") + \"]\"\n          };\n        }, a = function a(t) {\n          return t[0];\n        }, r = function r(t) {\n          return t[1];\n        }, i;\n      }(e.Object);\n    }.call(this), function () {\n      var t = function t(_t17, e) {\n        function i() {\n          this.constructor = _t17;\n        }\n\n        for (var o in e) {\n          n.call(e, o) && (_t17[o] = e[o]);\n        }\n\n        return i.prototype = e.prototype, _t17.prototype = new i(), _t17.__super__ = e.prototype, _t17;\n      },\n          n = {}.hasOwnProperty;\n\n      e.Text = function (n) {\n        function i(t) {\n          var n;\n          null == t && (t = []), i.__super__.constructor.apply(this, arguments), this.pieceList = new e.SplittableList(function () {\n            var e, i, o;\n\n            for (o = [], e = 0, i = t.length; i > e; e++) {\n              n = t[e], n.isEmpty() || o.push(n);\n            }\n\n            return o;\n          }());\n        }\n\n        return t(i, n), i.textForAttachmentWithAttributes = function (t, n) {\n          var i;\n          return i = new e.AttachmentPiece(t, n), new this([i]);\n        }, i.textForStringWithAttributes = function (t, n) {\n          var i;\n          return i = new e.StringPiece(t, n), new this([i]);\n        }, i.fromJSON = function (t) {\n          var n, i;\n          return i = function () {\n            var i, o, r;\n\n            for (r = [], i = 0, o = t.length; o > i; i++) {\n              n = t[i], r.push(e.Piece.fromJSON(n));\n            }\n\n            return r;\n          }(), new this(i);\n        }, i.prototype.copy = function () {\n          return this.copyWithPieceList(this.pieceList);\n        }, i.prototype.copyWithPieceList = function (t) {\n          return new this.constructor(t.consolidate().toArray());\n        }, i.prototype.copyUsingObjectMap = function (t) {\n          var e, n;\n          return n = function () {\n            var n, i, o, r, s;\n\n            for (o = this.getPieces(), s = [], n = 0, i = o.length; i > n; n++) {\n              e = o[n], s.push(null != (r = t.find(e)) ? r : e);\n            }\n\n            return s;\n          }.call(this), new this.constructor(n);\n        }, i.prototype.appendText = function (t) {\n          return this.insertTextAtPosition(t, this.getLength());\n        }, i.prototype.insertTextAtPosition = function (t, e) {\n          return this.copyWithPieceList(this.pieceList.insertSplittableListAtPosition(t.pieceList, e));\n        }, i.prototype.removeTextAtRange = function (t) {\n          return this.copyWithPieceList(this.pieceList.removeObjectsInRange(t));\n        }, i.prototype.replaceTextAtRange = function (t, e) {\n          return this.removeTextAtRange(e).insertTextAtPosition(t, e[0]);\n        }, i.prototype.moveTextFromRangeToPosition = function (t, e) {\n          var n, i;\n          if (!(t[0] <= e && e <= t[1])) return i = this.getTextAtRange(t), n = i.getLength(), t[0] < e && (e -= n), this.removeTextAtRange(t).insertTextAtPosition(i, e);\n        }, i.prototype.addAttributeAtRange = function (t, e, n) {\n          var i;\n          return i = {}, i[t] = e, this.addAttributesAtRange(i, n);\n        }, i.prototype.addAttributesAtRange = function (t, e) {\n          return this.copyWithPieceList(this.pieceList.transformObjectsInRange(e, function (e) {\n            return e.copyWithAdditionalAttributes(t);\n          }));\n        }, i.prototype.removeAttributeAtRange = function (t, e) {\n          return this.copyWithPieceList(this.pieceList.transformObjectsInRange(e, function (e) {\n            return e.copyWithoutAttribute(t);\n          }));\n        }, i.prototype.setAttributesAtRange = function (t, e) {\n          return this.copyWithPieceList(this.pieceList.transformObjectsInRange(e, function (e) {\n            return e.copyWithAttributes(t);\n          }));\n        }, i.prototype.getAttributesAtPosition = function (t) {\n          var e, n;\n          return null != (e = null != (n = this.pieceList.getObjectAtPosition(t)) ? n.getAttributes() : void 0) ? e : {};\n        }, i.prototype.getCommonAttributes = function () {\n          var t, n;\n          return t = function () {\n            var t, e, i, o;\n\n            for (i = this.pieceList.toArray(), o = [], t = 0, e = i.length; e > t; t++) {\n              n = i[t], o.push(n.getAttributes());\n            }\n\n            return o;\n          }.call(this), e.Hash.fromCommonAttributesOfObjects(t).toObject();\n        }, i.prototype.getCommonAttributesAtRange = function (t) {\n          var e;\n          return null != (e = this.getTextAtRange(t).getCommonAttributes()) ? e : {};\n        }, i.prototype.getExpandedRangeForAttributeAtOffset = function (t, e) {\n          var n, i, o;\n\n          for (n = o = e, i = this.getLength(); n > 0 && this.getCommonAttributesAtRange([n - 1, o])[t];) {\n            n--;\n          }\n\n          for (; i > o && this.getCommonAttributesAtRange([e, o + 1])[t];) {\n            o++;\n          }\n\n          return [n, o];\n        }, i.prototype.getTextAtRange = function (t) {\n          return this.copyWithPieceList(this.pieceList.getSplittableListInRange(t));\n        }, i.prototype.getStringAtRange = function (t) {\n          return this.pieceList.getSplittableListInRange(t).toString();\n        }, i.prototype.getStringAtPosition = function (t) {\n          return this.getStringAtRange([t, t + 1]);\n        }, i.prototype.startsWithString = function (t) {\n          return this.getStringAtRange([0, t.length]) === t;\n        }, i.prototype.endsWithString = function (t) {\n          var e;\n          return e = this.getLength(), this.getStringAtRange([e - t.length, e]) === t;\n        }, i.prototype.getAttachmentPieces = function () {\n          var t, e, n, i, o;\n\n          for (i = this.pieceList.toArray(), o = [], t = 0, e = i.length; e > t; t++) {\n            n = i[t], null != n.attachment && o.push(n);\n          }\n\n          return o;\n        }, i.prototype.getAttachments = function () {\n          var t, e, n, i, o;\n\n          for (i = this.getAttachmentPieces(), o = [], t = 0, e = i.length; e > t; t++) {\n            n = i[t], o.push(n.attachment);\n          }\n\n          return o;\n        }, i.prototype.getAttachmentAndPositionById = function (t) {\n          var e, n, i, o, r, s;\n\n          for (o = 0, r = this.pieceList.toArray(), e = 0, n = r.length; n > e; e++) {\n            if (i = r[e], (null != (s = i.attachment) ? s.id : void 0) === t) return {\n              attachment: i.attachment,\n              position: o\n            };\n            o += i.length;\n          }\n\n          return {\n            attachment: null,\n            position: null\n          };\n        }, i.prototype.getAttachmentById = function (t) {\n          var e, n, i;\n          return i = this.getAttachmentAndPositionById(t), e = i.attachment, n = i.position, e;\n        }, i.prototype.getRangeOfAttachment = function (t) {\n          var e, n;\n          return n = this.getAttachmentAndPositionById(t.id), t = n.attachment, e = n.position, null != t ? [e, e + 1] : void 0;\n        }, i.prototype.updateAttributesForAttachment = function (t, e) {\n          var n;\n          return (n = this.getRangeOfAttachment(e)) ? this.addAttributesAtRange(t, n) : this;\n        }, i.prototype.getLength = function () {\n          return this.pieceList.getEndPosition();\n        }, i.prototype.isEmpty = function () {\n          return 0 === this.getLength();\n        }, i.prototype.isEqualTo = function (t) {\n          var e;\n          return i.__super__.isEqualTo.apply(this, arguments) || (null != t && null != (e = t.pieceList) ? e.isEqualTo(this.pieceList) : void 0);\n        }, i.prototype.isBlockBreak = function () {\n          return 1 === this.getLength() && this.pieceList.getObjectAtIndex(0).isBlockBreak();\n        }, i.prototype.eachPiece = function (t) {\n          return this.pieceList.eachObject(t);\n        }, i.prototype.getPieces = function () {\n          return this.pieceList.toArray();\n        }, i.prototype.getPieceAtPosition = function (t) {\n          return this.pieceList.getObjectAtPosition(t);\n        }, i.prototype.contentsForInspection = function () {\n          return {\n            pieceList: this.pieceList.inspect()\n          };\n        }, i.prototype.toSerializableText = function () {\n          var t;\n          return t = this.pieceList.selectSplittableList(function (t) {\n            return t.isSerializable();\n          }), this.copyWithPieceList(t);\n        }, i.prototype.toString = function () {\n          return this.pieceList.toString();\n        }, i.prototype.toJSON = function () {\n          return this.pieceList.toJSON();\n        }, i.prototype.toConsole = function () {\n          var t;\n          return JSON.stringify(function () {\n            var e, n, i, o;\n\n            for (i = this.pieceList.toArray(), o = [], e = 0, n = i.length; n > e; e++) {\n              t = i[e], o.push(JSON.parse(t.toConsole()));\n            }\n\n            return o;\n          }.call(this));\n        }, i;\n      }(e.Object);\n    }.call(this), function () {\n      var t,\n          n,\n          i,\n          o,\n          r,\n          s = function s(t, e) {\n        function n() {\n          this.constructor = t;\n        }\n\n        for (var i in e) {\n          a.call(e, i) && (t[i] = e[i]);\n        }\n\n        return n.prototype = e.prototype, t.prototype = new n(), t.__super__ = e.prototype, t;\n      },\n          a = {}.hasOwnProperty,\n          u = [].indexOf || function (t) {\n        for (var e = 0, n = this.length; n > e; e++) {\n          if (e in this && this[e] === t) return e;\n        }\n\n        return -1;\n      },\n          c = [].slice;\n\n      t = e.arraysAreEqual, r = e.spliceArray, i = e.getBlockConfig, n = e.getBlockAttributeNames, o = e.getListAttributeNames, e.Block = function (n) {\n        function a(t, n) {\n          null == t && (t = new e.Text()), null == n && (n = []), a.__super__.constructor.apply(this, arguments), this.text = h(t), this.attributes = n;\n        }\n\n        var l, h, p, d, f, g, m, v, y;\n        return s(a, n), a.fromJSON = function (t) {\n          var n;\n          return n = e.Text.fromJSON(t.text), new this(n, t.attributes);\n        }, a.prototype.isEmpty = function () {\n          return this.text.isBlockBreak();\n        }, a.prototype.isEqualTo = function (e) {\n          return a.__super__.isEqualTo.apply(this, arguments) || this.text.isEqualTo(null != e ? e.text : void 0) && t(this.attributes, null != e ? e.attributes : void 0);\n        }, a.prototype.copyWithText = function (t) {\n          return new this.constructor(t, this.attributes);\n        }, a.prototype.copyWithoutText = function () {\n          return this.copyWithText(null);\n        }, a.prototype.copyWithAttributes = function (t) {\n          return new this.constructor(this.text, t);\n        }, a.prototype.copyWithoutAttributes = function () {\n          return this.copyWithAttributes(null);\n        }, a.prototype.copyUsingObjectMap = function (t) {\n          var e;\n          return this.copyWithText((e = t.find(this.text)) ? e : this.text.copyUsingObjectMap(t));\n        }, a.prototype.addAttribute = function (t) {\n          var e;\n          return e = this.attributes.concat(d(t)), this.copyWithAttributes(e);\n        }, a.prototype.removeAttribute = function (t) {\n          var e, n;\n          return n = i(t).listAttribute, e = g(g(this.attributes, t), n), this.copyWithAttributes(e);\n        }, a.prototype.removeLastAttribute = function () {\n          return this.removeAttribute(this.getLastAttribute());\n        }, a.prototype.getLastAttribute = function () {\n          return f(this.attributes);\n        }, a.prototype.getAttributes = function () {\n          return this.attributes.slice(0);\n        }, a.prototype.getAttributeLevel = function () {\n          return this.attributes.length;\n        }, a.prototype.getAttributeAtLevel = function (t) {\n          return this.attributes[t - 1];\n        }, a.prototype.hasAttribute = function (t) {\n          return u.call(this.attributes, t) >= 0;\n        }, a.prototype.hasAttributes = function () {\n          return this.getAttributeLevel() > 0;\n        }, a.prototype.getLastNestableAttribute = function () {\n          return f(this.getNestableAttributes());\n        }, a.prototype.getNestableAttributes = function () {\n          var t, e, n, o, r;\n\n          for (o = this.attributes, r = [], e = 0, n = o.length; n > e; e++) {\n            t = o[e], i(t).nestable && r.push(t);\n          }\n\n          return r;\n        }, a.prototype.getNestingLevel = function () {\n          return this.getNestableAttributes().length;\n        }, a.prototype.decreaseNestingLevel = function () {\n          var t;\n          return (t = this.getLastNestableAttribute()) ? this.removeAttribute(t) : this;\n        }, a.prototype.increaseNestingLevel = function () {\n          var t, e, n;\n          return (t = this.getLastNestableAttribute()) ? (n = this.attributes.lastIndexOf(t), e = r.apply(null, [this.attributes, n + 1, 0].concat(c.call(d(t)))), this.copyWithAttributes(e)) : this;\n        }, a.prototype.getListItemAttributes = function () {\n          var t, e, n, o, r;\n\n          for (o = this.attributes, r = [], e = 0, n = o.length; n > e; e++) {\n            t = o[e], i(t).listAttribute && r.push(t);\n          }\n\n          return r;\n        }, a.prototype.isListItem = function () {\n          var t;\n          return null != (t = i(this.getLastAttribute())) ? t.listAttribute : void 0;\n        }, a.prototype.isTerminalBlock = function () {\n          var t;\n          return null != (t = i(this.getLastAttribute())) ? t.terminal : void 0;\n        }, a.prototype.breaksOnReturn = function () {\n          var t;\n          return null != (t = i(this.getLastAttribute())) ? t.breakOnReturn : void 0;\n        }, a.prototype.findLineBreakInDirectionFromPosition = function (t, e) {\n          var n, i;\n          return i = this.toString(), n = function () {\n            switch (t) {\n              case \"forward\":\n                return i.indexOf(\"\\n\", e);\n\n              case \"backward\":\n                return i.slice(0, e).lastIndexOf(\"\\n\");\n            }\n          }(), -1 !== n ? n : void 0;\n        }, a.prototype.contentsForInspection = function () {\n          return {\n            text: this.text.inspect(),\n            attributes: this.attributes\n          };\n        }, a.prototype.toString = function () {\n          return this.text.toString();\n        }, a.prototype.toJSON = function () {\n          return {\n            text: this.text,\n            attributes: this.attributes\n          };\n        }, a.prototype.getLength = function () {\n          return this.text.getLength();\n        }, a.prototype.canBeConsolidatedWith = function (t) {\n          return !this.hasAttributes() && !t.hasAttributes();\n        }, a.prototype.consolidateWith = function (t) {\n          var n, i;\n          return n = e.Text.textForStringWithAttributes(\"\\n\"), i = this.getTextWithoutBlockBreak().appendText(n), this.copyWithText(i.appendText(t.text));\n        }, a.prototype.splitAtOffset = function (t) {\n          var e, n;\n          return 0 === t ? (e = null, n = this) : t === this.getLength() ? (e = this, n = null) : (e = this.copyWithText(this.text.getTextAtRange([0, t])), n = this.copyWithText(this.text.getTextAtRange([t, this.getLength()]))), [e, n];\n        }, a.prototype.getBlockBreakPosition = function () {\n          return this.text.getLength() - 1;\n        }, a.prototype.getTextWithoutBlockBreak = function () {\n          return m(this.text) ? this.text.getTextAtRange([0, this.getBlockBreakPosition()]) : this.text.copy();\n        }, a.prototype.canBeGrouped = function (t) {\n          return this.attributes[t];\n        }, a.prototype.canBeGroupedWith = function (t, e) {\n          var n, r, s, a;\n          return s = t.getAttributes(), r = s[e], n = this.attributes[e], n === r && !(i(n).group === !1 && (a = s[e + 1], u.call(o(), a) < 0));\n        }, h = function h(t) {\n          return t = y(t), t = l(t);\n        }, y = function y(t) {\n          var n, i, o, r, s, a;\n          return r = !1, a = t.getPieces(), i = 2 <= a.length ? c.call(a, 0, n = a.length - 1) : (n = 0, []), o = a[n++], null == o ? t : (i = function () {\n            var t, e, n;\n\n            for (n = [], t = 0, e = i.length; e > t; t++) {\n              s = i[t], s.isBlockBreak() ? (r = !0, n.push(v(s))) : n.push(s);\n            }\n\n            return n;\n          }(), r ? new e.Text(c.call(i).concat([o])) : t);\n        }, p = e.Text.textForStringWithAttributes(\"\\n\", {\n          blockBreak: !0\n        }), l = function l(t) {\n          return m(t) ? t : t.appendText(p);\n        }, m = function m(t) {\n          var e, n;\n          return n = t.getLength(), 0 === n ? !1 : (e = t.getTextAtRange([n - 1, n]), e.isBlockBreak());\n        }, v = function v(t) {\n          return t.copyWithoutAttribute(\"blockBreak\");\n        }, d = function d(t) {\n          var e;\n          return e = i(t).listAttribute, null != e ? [e, t] : [t];\n        }, f = function f(t) {\n          return t.slice(-1)[0];\n        }, g = function g(t, e) {\n          var n;\n          return n = t.lastIndexOf(e), -1 === n ? t : r(t, n, 1);\n        }, a;\n      }(e.Object);\n    }.call(this), function () {\n      var t,\n          n,\n          i,\n          o = function o(t, e) {\n        function n() {\n          this.constructor = t;\n        }\n\n        for (var i in e) {\n          r.call(e, i) && (t[i] = e[i]);\n        }\n\n        return n.prototype = e.prototype, t.prototype = new n(), t.__super__ = e.prototype, t;\n      },\n          r = {}.hasOwnProperty,\n          s = [].slice,\n          a = [].indexOf || function (t) {\n        for (var e = 0, n = this.length; n > e; e++) {\n          if (e in this && this[e] === t) return e;\n        }\n\n        return -1;\n      };\n\n      n = e.tagName, i = e.walkTree, t = e.nodeIsAttachmentElement, e.HTMLSanitizer = function (r) {\n        function u(t, e) {\n          this.allowedAttributes = (null != e ? e : {}).allowedAttributes, null == this.allowedAttributes && (this.allowedAttributes = c), this.body = l(t);\n        }\n\n        var c, l, h;\n        return o(u, r), c = \"style href src width height class\".split(\" \"), u.sanitize = function (t, e) {\n          var n;\n          return n = new this(t, e), n.sanitize(), n;\n        }, u.prototype.sanitize = function () {\n          return this.sanitizeElements(), this.normalizeListElementNesting();\n        }, u.prototype.getHTML = function () {\n          return this.body.innerHTML;\n        }, u.prototype.getBody = function () {\n          return this.body;\n        }, u.prototype.sanitizeElements = function () {\n          var t, n, o, r, s;\n\n          for (s = i(this.body), r = []; s.nextNode();) {\n            switch (o = s.currentNode, o.nodeType) {\n              case Node.ELEMENT_NODE:\n                h(o) ? r.push(o) : this.sanitizeElement(o);\n                break;\n\n              case Node.COMMENT_NODE:\n                r.push(o);\n            }\n          }\n\n          for (t = 0, n = r.length; n > t; t++) {\n            o = r[t], e.removeNode(o);\n          }\n\n          return this.body;\n        }, u.prototype.sanitizeElement = function (t) {\n          var e, n, i, o;\n\n          for (o = s.call(t.attributes), e = 0, n = o.length; n > e; e++) {\n            i = o[e].name, a.call(this.allowedAttributes, i) >= 0 || 0 === i.indexOf(\"data-trix\") || t.removeAttribute(i);\n          }\n\n          return t;\n        }, u.prototype.normalizeListElementNesting = function () {\n          var t, e, i, o, r;\n\n          for (r = s.call(this.body.querySelectorAll(\"ul,ol\")), t = 0, e = r.length; e > t; t++) {\n            i = r[t], (o = i.previousElementSibling) && \"li\" === n(o) && o.appendChild(i);\n          }\n\n          return this.body;\n        }, h = function h(e) {\n          return (null != e ? e.nodeType : void 0) !== Node.ELEMENT_NODE || t(e) ? void 0 : \"script\" === n(e) || \"false\" === e.getAttribute(\"data-trix-serialize\");\n        }, l = function l(t) {\n          var e, n, i, o, r;\n\n          for (null == t && (t = \"\"), t = t.replace(/<\\/html[^>]*>[^]*$/i, \"</html>\"), e = document.implementation.createHTMLDocument(\"\"), e.documentElement.innerHTML = t, r = e.head.querySelectorAll(\"style\"), i = 0, o = r.length; o > i; i++) {\n            n = r[i], e.body.appendChild(n);\n          }\n\n          return e.body;\n        }, u;\n      }(e.BasicObject);\n    }.call(this), function () {\n      var t,\n          n,\n          i,\n          o,\n          r,\n          s,\n          a,\n          u,\n          c,\n          l,\n          h,\n          p = function p(t, e) {\n        function n() {\n          this.constructor = t;\n        }\n\n        for (var i in e) {\n          d.call(e, i) && (t[i] = e[i]);\n        }\n\n        return n.prototype = e.prototype, t.prototype = new n(), t.__super__ = e.prototype, t;\n      },\n          d = {}.hasOwnProperty,\n          f = [].indexOf || function (t) {\n        for (var e = 0, n = this.length; n > e; e++) {\n          if (e in this && this[e] === t) return e;\n        }\n\n        return -1;\n      };\n\n      t = e.arraysAreEqual, s = e.makeElement, l = e.tagName, r = e.getBlockTagNames, h = e.walkTree, o = e.findClosestElementFromNode, i = e.elementContainsNode, a = e.nodeIsAttachmentElement, u = e.normalizeSpaces, n = e.breakableWhitespacePattern, c = e.squishBreakableWhitespace, e.HTMLParser = function (d) {\n        function g(t, e) {\n          this.html = t, this.referenceElement = (null != e ? e : {}).referenceElement, this.blocks = [], this.blockElements = [], this.processedElements = [];\n        }\n\n        var m, v, y, b, A, C, x, w, E, S, R, k;\n        return p(g, d), g.parse = function (t, e) {\n          var n;\n          return n = new this(t, e), n.parse(), n;\n        }, g.prototype.getDocument = function () {\n          return e.Document.fromJSON(this.blocks);\n        }, g.prototype.parse = function () {\n          var t, n;\n\n          try {\n            for (this.createHiddenContainer(), t = e.HTMLSanitizer.sanitize(this.html).getHTML(), this.containerElement.innerHTML = t, n = h(this.containerElement, {\n              usingFilter: w\n            }); n.nextNode();) {\n              this.processNode(n.currentNode);\n            }\n\n            return this.translateBlockElementMarginsToNewlines();\n          } finally {\n            this.removeHiddenContainer();\n          }\n        }, g.prototype.createHiddenContainer = function () {\n          return this.referenceElement ? (this.containerElement = this.referenceElement.cloneNode(!1), this.containerElement.removeAttribute(\"id\"), this.containerElement.setAttribute(\"data-trix-internal\", \"\"), this.containerElement.style.display = \"none\", this.referenceElement.parentNode.insertBefore(this.containerElement, this.referenceElement.nextSibling)) : (this.containerElement = s({\n            tagName: \"div\",\n            style: {\n              display: \"none\"\n            }\n          }), document.body.appendChild(this.containerElement));\n        }, g.prototype.removeHiddenContainer = function () {\n          return e.removeNode(this.containerElement);\n        }, w = function w(t) {\n          return \"style\" === l(t) ? NodeFilter.FILTER_REJECT : NodeFilter.FILTER_ACCEPT;\n        }, g.prototype.processNode = function (t) {\n          switch (t.nodeType) {\n            case Node.TEXT_NODE:\n              return this.processTextNode(t);\n\n            case Node.ELEMENT_NODE:\n              return this.appendBlockForElement(t), this.processElement(t);\n          }\n        }, g.prototype.appendBlockForElement = function (e) {\n          var n, o, r, s;\n\n          if (r = this.isBlockElement(e), o = i(this.currentBlockElement, e), r && !this.isBlockElement(e.firstChild)) {\n            if (!(this.isInsignificantTextNode(e.firstChild) && this.isBlockElement(e.firstElementChild) || (n = this.getBlockAttributes(e), o && t(n, this.currentBlock.attributes)))) return this.currentBlock = this.appendBlockForAttributesWithElement(n, e), this.currentBlockElement = e;\n          } else if (this.currentBlockElement && !o && !r) return (s = this.findParentBlockElement(e)) ? this.appendBlockForElement(s) : (this.currentBlock = this.appendEmptyBlock(), this.currentBlockElement = null);\n        }, g.prototype.findParentBlockElement = function (t) {\n          var e;\n\n          for (e = t.parentElement; e && e !== this.containerElement;) {\n            if (this.isBlockElement(e) && f.call(this.blockElements, e) >= 0) return e;\n            e = e.parentElement;\n          }\n\n          return null;\n        }, g.prototype.processTextNode = function (t) {\n          var e, n;\n          return this.isInsignificantTextNode(t) ? void 0 : (n = t.data, v(t.parentNode) || (n = c(n), R(null != (e = t.previousSibling) ? e.textContent : void 0) && (n = C(n))), this.appendStringWithAttributes(n, this.getTextAttributes(t.parentNode)));\n        }, g.prototype.processElement = function (t) {\n          var e, n, i, o, r;\n          if (a(t)) return e = y(t), Object.keys(e).length && (o = this.getTextAttributes(t), this.appendAttachmentWithAttributes(e, o), t.innerHTML = \"\"), this.processedElements.push(t);\n\n          switch (l(t)) {\n            case \"br\":\n              return this.isExtraBR(t) || this.isBlockElement(t.nextSibling) || this.appendStringWithAttributes(\"\\n\", this.getTextAttributes(t)), this.processedElements.push(t);\n\n            case \"img\":\n              e = {\n                url: t.getAttribute(\"src\"),\n                contentType: \"image\"\n              }, i = A(t);\n\n              for (n in i) {\n                r = i[n], e[n] = r;\n              }\n\n              return this.appendAttachmentWithAttributes(e, this.getTextAttributes(t)), this.processedElements.push(t);\n\n            case \"tr\":\n              if (t.parentNode.firstChild !== t) return this.appendStringWithAttributes(\"\\n\");\n              break;\n\n            case \"td\":\n              if (t.parentNode.firstChild !== t) return this.appendStringWithAttributes(\" | \");\n          }\n        }, g.prototype.appendBlockForAttributesWithElement = function (t, e) {\n          var n;\n          return this.blockElements.push(e), n = m(t), this.blocks.push(n), n;\n        }, g.prototype.appendEmptyBlock = function () {\n          return this.appendBlockForAttributesWithElement([], null);\n        }, g.prototype.appendStringWithAttributes = function (t, e) {\n          return this.appendPiece(S(t, e));\n        }, g.prototype.appendAttachmentWithAttributes = function (t, e) {\n          return this.appendPiece(E(t, e));\n        }, g.prototype.appendPiece = function (t) {\n          return 0 === this.blocks.length && this.appendEmptyBlock(), this.blocks[this.blocks.length - 1].text.push(t);\n        }, g.prototype.appendStringToTextAtIndex = function (t, e) {\n          var n, i;\n          return i = this.blocks[e].text, n = i[i.length - 1], \"string\" === (null != n ? n.type : void 0) ? n.string += t : i.push(S(t));\n        }, g.prototype.prependStringToTextAtIndex = function (t, e) {\n          var n, i;\n          return i = this.blocks[e].text, n = i[0], \"string\" === (null != n ? n.type : void 0) ? n.string = t + n.string : i.unshift(S(t));\n        }, S = function S(t, e) {\n          var n;\n          return null == e && (e = {}), n = \"string\", t = u(t), {\n            string: t,\n            attributes: e,\n            type: n\n          };\n        }, E = function E(t, e) {\n          var n;\n          return null == e && (e = {}), n = \"attachment\", {\n            attachment: t,\n            attributes: e,\n            type: n\n          };\n        }, m = function m(t) {\n          var e;\n          return null == t && (t = {}), e = [], {\n            text: e,\n            attributes: t\n          };\n        }, g.prototype.getTextAttributes = function (t) {\n          var n, i, r, s, u, c, l, h, p, d, f, g, m;\n          r = {}, d = e.config.textAttributes;\n\n          for (n in d) {\n            if (u = d[n], u.tagName && o(t, {\n              matchingSelector: u.tagName,\n              untilNode: this.containerElement\n            })) r[n] = !0;else if (u.parser) {\n              if (m = u.parser(t)) {\n                for (i = !1, f = this.findBlockElementAncestors(t), c = 0, p = f.length; p > c; c++) {\n                  if (s = f[c], u.parser(s) === m) {\n                    i = !0;\n                    break;\n                  }\n                }\n\n                i || (r[n] = m);\n              }\n            } else u.styleProperty && (m = t.style[u.styleProperty]) && (r[n] = m);\n          }\n\n          if (a(t) && (l = t.getAttribute(\"data-trix-attributes\"))) {\n            g = JSON.parse(l);\n\n            for (h in g) {\n              m = g[h], r[h] = m;\n            }\n          }\n\n          return r;\n        }, g.prototype.getBlockAttributes = function (t) {\n          var n, i, o, r;\n\n          for (i = []; t && t !== this.containerElement;) {\n            r = e.config.blockAttributes;\n\n            for (n in r) {\n              o = r[n], o.parse !== !1 && l(t) === o.tagName && ((\"function\" == typeof o.test ? o.test(t) : void 0) || !o.test) && (i.push(n), o.listAttribute && i.push(o.listAttribute));\n            }\n\n            t = t.parentNode;\n          }\n\n          return i.reverse();\n        }, g.prototype.findBlockElementAncestors = function (t) {\n          var e, n;\n\n          for (e = []; t && t !== this.containerElement;) {\n            n = l(t), f.call(r(), n) >= 0 && e.push(t), t = t.parentNode;\n          }\n\n          return e;\n        }, y = function y(t) {\n          return JSON.parse(t.getAttribute(\"data-trix-attachment\"));\n        }, A = function A(t) {\n          var e, n, i;\n          return i = t.getAttribute(\"width\"), n = t.getAttribute(\"height\"), e = {}, i && (e.width = parseInt(i, 10)), n && (e.height = parseInt(n, 10)), e;\n        }, g.prototype.isBlockElement = function (t) {\n          var e;\n          if ((null != t ? t.nodeType : void 0) === Node.ELEMENT_NODE && !a(t) && !o(t, {\n            matchingSelector: \"td\",\n            untilNode: this.containerElement\n          })) return e = l(t), f.call(r(), e) >= 0 || \"block\" === window.getComputedStyle(t).display;\n        }, g.prototype.isInsignificantTextNode = function (t) {\n          var e, n, i;\n          if ((null != t ? t.nodeType : void 0) === Node.TEXT_NODE && k(t.data) && (n = t.parentNode, i = t.previousSibling, e = t.nextSibling, (!x(n.previousSibling) || this.isBlockElement(n.previousSibling)) && !v(n))) return !i || this.isBlockElement(i) || !e || this.isBlockElement(e);\n        }, g.prototype.isExtraBR = function (t) {\n          return \"br\" === l(t) && this.isBlockElement(t.parentNode) && t.parentNode.lastChild === t;\n        }, v = function v(t) {\n          var e;\n          return e = window.getComputedStyle(t).whiteSpace, \"pre\" === e || \"pre-wrap\" === e || \"pre-line\" === e;\n        }, x = function x(t) {\n          return t && !R(t.textContent);\n        }, g.prototype.translateBlockElementMarginsToNewlines = function () {\n          var t, e, n, i, o, r, s, a;\n\n          for (e = this.getMarginOfDefaultBlockElement(), s = this.blocks, a = [], i = n = 0, o = s.length; o > n; i = ++n) {\n            t = s[i], (r = this.getMarginOfBlockElementAtIndex(i)) && (r.top > 2 * e.top && this.prependStringToTextAtIndex(\"\\n\", i), a.push(r.bottom > 2 * e.bottom ? this.appendStringToTextAtIndex(\"\\n\", i) : void 0));\n          }\n\n          return a;\n        }, g.prototype.getMarginOfBlockElementAtIndex = function (t) {\n          var e, n;\n          return !(e = this.blockElements[t]) || !e.textContent || (n = l(e), f.call(r(), n) >= 0 || f.call(this.processedElements, e) >= 0) ? void 0 : b(e);\n        }, g.prototype.getMarginOfDefaultBlockElement = function () {\n          var t;\n          return t = s(e.config.blockAttributes[\"default\"].tagName), this.containerElement.appendChild(t), b(t);\n        }, b = function b(t) {\n          var e;\n          return e = window.getComputedStyle(t), \"block\" === e.display ? {\n            top: parseInt(e.marginTop),\n            bottom: parseInt(e.marginBottom)\n          } : void 0;\n        }, C = function C(t) {\n          return t.replace(RegExp(\"^\" + n.source + \"+\"), \"\");\n        }, k = function k(t) {\n          return RegExp(\"^\" + n.source + \"*$\").test(t);\n        }, R = function R(t) {\n          return /\\s$/.test(t);\n        }, g;\n      }(e.BasicObject);\n    }.call(this), function () {\n      var t,\n          n,\n          i,\n          o,\n          r = function r(t, e) {\n        function n() {\n          this.constructor = t;\n        }\n\n        for (var i in e) {\n          s.call(e, i) && (t[i] = e[i]);\n        }\n\n        return n.prototype = e.prototype, t.prototype = new n(), t.__super__ = e.prototype, t;\n      },\n          s = {}.hasOwnProperty,\n          a = [].slice,\n          u = [].indexOf || function (t) {\n        for (var e = 0, n = this.length; n > e; e++) {\n          if (e in this && this[e] === t) return e;\n        }\n\n        return -1;\n      };\n\n      t = e.arraysAreEqual, i = e.normalizeRange, o = e.rangeIsCollapsed, n = e.getBlockConfig, e.Document = function (s) {\n        function c(t) {\n          null == t && (t = []), c.__super__.constructor.apply(this, arguments), 0 === t.length && (t = [new e.Block()]), this.blockList = e.SplittableList.box(t);\n        }\n\n        var l;\n        return r(c, s), c.fromJSON = function (t) {\n          var n, i;\n          return i = function () {\n            var i, o, r;\n\n            for (r = [], i = 0, o = t.length; o > i; i++) {\n              n = t[i], r.push(e.Block.fromJSON(n));\n            }\n\n            return r;\n          }(), new this(i);\n        }, c.fromHTML = function (t, n) {\n          return e.HTMLParser.parse(t, n).getDocument();\n        }, c.fromString = function (t, n) {\n          var i;\n          return i = e.Text.textForStringWithAttributes(t, n), new this([new e.Block(i)]);\n        }, c.prototype.isEmpty = function () {\n          var t;\n          return 1 === this.blockList.length && (t = this.getBlockAtIndex(0), t.isEmpty() && !t.hasAttributes());\n        }, c.prototype.copy = function (t) {\n          var e;\n          return null == t && (t = {}), e = t.consolidateBlocks ? this.blockList.consolidate().toArray() : this.blockList.toArray(), new this.constructor(e);\n        }, c.prototype.copyUsingObjectsFromDocument = function (t) {\n          var n;\n          return n = new e.ObjectMap(t.getObjects()), this.copyUsingObjectMap(n);\n        }, c.prototype.copyUsingObjectMap = function (t) {\n          var e, n, i;\n          return n = function () {\n            var n, o, r, s;\n\n            for (r = this.getBlocks(), s = [], n = 0, o = r.length; o > n; n++) {\n              e = r[n], s.push((i = t.find(e)) ? i : e.copyUsingObjectMap(t));\n            }\n\n            return s;\n          }.call(this), new this.constructor(n);\n        }, c.prototype.copyWithBaseBlockAttributes = function (t) {\n          var e, n, i;\n          return null == t && (t = []), i = function () {\n            var i, o, r, s;\n\n            for (r = this.getBlocks(), s = [], i = 0, o = r.length; o > i; i++) {\n              n = r[i], e = t.concat(n.getAttributes()), s.push(n.copyWithAttributes(e));\n            }\n\n            return s;\n          }.call(this), new this.constructor(i);\n        }, c.prototype.replaceBlock = function (t, e) {\n          var n;\n          return n = this.blockList.indexOf(t), -1 === n ? this : new this.constructor(this.blockList.replaceObjectAtIndex(e, n));\n        }, c.prototype.insertDocumentAtRange = function (t, e) {\n          var n, r, s, a, u, c, l;\n          return r = t.blockList, u = (e = i(e))[0], c = this.locationFromPosition(u), s = c.index, a = c.offset, l = this, n = this.getBlockAtPosition(u), o(e) && n.isEmpty() && !n.hasAttributes() ? l = new this.constructor(l.blockList.removeObjectAtIndex(s)) : n.getBlockBreakPosition() === a && u++, l = l.removeTextAtRange(e), new this.constructor(l.blockList.insertSplittableListAtPosition(r, u));\n        }, c.prototype.mergeDocumentAtRange = function (e, n) {\n          var o, r, s, a, u, c, l, h, p, d, f, g;\n          return f = (n = i(n))[0], d = this.locationFromPosition(f), r = this.getBlockAtIndex(d.index).getAttributes(), o = e.getBaseBlockAttributes(), g = r.slice(-o.length), t(o, g) ? (l = r.slice(0, -o.length), c = e.copyWithBaseBlockAttributes(l)) : c = e.copy({\n            consolidateBlocks: !0\n          }).copyWithBaseBlockAttributes(r), s = c.getBlockCount(), a = c.getBlockAtIndex(0), t(r, a.getAttributes()) ? (u = a.getTextWithoutBlockBreak(), p = this.insertTextAtRange(u, n), s > 1 && (c = new this.constructor(c.getBlocks().slice(1)), h = f + u.getLength(), p = p.insertDocumentAtRange(c, h))) : p = this.insertDocumentAtRange(c, n), p;\n        }, c.prototype.insertTextAtRange = function (t, e) {\n          var n, o, r, s, a;\n          return a = (e = i(e))[0], s = this.locationFromPosition(a), o = s.index, r = s.offset, n = this.removeTextAtRange(e), new this.constructor(n.blockList.editObjectAtIndex(o, function (e) {\n            return e.copyWithText(e.text.insertTextAtPosition(t, r));\n          }));\n        }, c.prototype.removeTextAtRange = function (t) {\n          var e, n, r, s, a, u, c, l, h, p, d, f, g, m, v, y, b, A, C, x, w;\n          return p = t = i(t), l = p[0], A = p[1], o(t) ? this : (d = this.locationRangeFromRange(t), u = d[0], y = d[1], a = u.index, c = u.offset, s = this.getBlockAtIndex(a), v = y.index, b = y.offset, m = this.getBlockAtIndex(v), f = A - l === 1 && s.getBlockBreakPosition() === c && m.getBlockBreakPosition() !== b && \"\\n\" === m.text.getStringAtPosition(b), f ? r = this.blockList.editObjectAtIndex(v, function (t) {\n            return t.copyWithText(t.text.removeTextAtRange([b, b + 1]));\n          }) : (h = s.text.getTextAtRange([0, c]), C = m.text.getTextAtRange([b, m.getLength()]), x = h.appendText(C), g = a !== v && 0 === c, w = g && s.getAttributeLevel() >= m.getAttributeLevel(), n = w ? m.copyWithText(x) : s.copyWithText(x), e = v + 1 - a, r = this.blockList.splice(a, e, n)), new this.constructor(r));\n        }, c.prototype.moveTextFromRangeToPosition = function (t, e) {\n          var n, o, r, s, u, c, l, h, p, d;\n          return c = t = i(t), p = c[0], r = c[1], e >= p && r >= e ? this : (o = this.getDocumentAtRange(t), h = this.removeTextAtRange(t), u = e > p, u && (e -= o.getLength()), l = o.getBlocks(), s = l[0], n = 2 <= l.length ? a.call(l, 1) : [], 0 === n.length ? (d = s.getTextWithoutBlockBreak(), u && (e += 1)) : d = s.text, h = h.insertTextAtRange(d, e), 0 === n.length ? h : (o = new this.constructor(n), e += d.getLength(), h.insertDocumentAtRange(o, e)));\n        }, c.prototype.addAttributeAtRange = function (t, e, i) {\n          var o;\n          return o = this.blockList, this.eachBlockAtRange(i, function (i, r, s) {\n            return o = o.editObjectAtIndex(s, function () {\n              return n(t) ? i.addAttribute(t, e) : r[0] === r[1] ? i : i.copyWithText(i.text.addAttributeAtRange(t, e, r));\n            });\n          }), new this.constructor(o);\n        }, c.prototype.addAttribute = function (t, e) {\n          var n;\n          return n = this.blockList, this.eachBlock(function (i, o) {\n            return n = n.editObjectAtIndex(o, function () {\n              return i.addAttribute(t, e);\n            });\n          }), new this.constructor(n);\n        }, c.prototype.removeAttributeAtRange = function (t, e) {\n          var i;\n          return i = this.blockList, this.eachBlockAtRange(e, function (e, o, r) {\n            return n(t) ? i = i.editObjectAtIndex(r, function () {\n              return e.removeAttribute(t);\n            }) : o[0] !== o[1] ? i = i.editObjectAtIndex(r, function () {\n              return e.copyWithText(e.text.removeAttributeAtRange(t, o));\n            }) : void 0;\n          }), new this.constructor(i);\n        }, c.prototype.updateAttributesForAttachment = function (t, e) {\n          var n, i, o, r;\n          return o = (i = this.getRangeOfAttachment(e))[0], n = this.locationFromPosition(o).index, r = this.getTextAtIndex(n), new this.constructor(this.blockList.editObjectAtIndex(n, function (n) {\n            return n.copyWithText(r.updateAttributesForAttachment(t, e));\n          }));\n        }, c.prototype.removeAttributeForAttachment = function (t, e) {\n          var n;\n          return n = this.getRangeOfAttachment(e), this.removeAttributeAtRange(t, n);\n        }, c.prototype.insertBlockBreakAtRange = function (t) {\n          var n, o, r, s;\n          return s = (t = i(t))[0], r = this.locationFromPosition(s).offset, o = this.removeTextAtRange(t), 0 === r && (n = [new e.Block()]), new this.constructor(o.blockList.insertSplittableListAtPosition(new e.SplittableList(n), s));\n        }, c.prototype.applyBlockAttributeAtRange = function (t, e, i) {\n          var o, r, s, a;\n          return s = this.expandRangeToLineBreaksAndSplitBlocks(i), r = s.document, i = s.range, o = n(t), o.listAttribute ? (r = r.removeLastListAttributeAtRange(i, {\n            exceptAttributeName: t\n          }), a = r.convertLineBreaksToBlockBreaksInRange(i), r = a.document, i = a.range) : r = o.exclusive ? r.removeBlockAttributesAtRange(i) : o.terminal ? r.removeLastTerminalAttributeAtRange(i) : r.consolidateBlocksAtRange(i), r.addAttributeAtRange(t, e, i);\n        }, c.prototype.removeLastListAttributeAtRange = function (t, e) {\n          var i;\n          return null == e && (e = {}), i = this.blockList, this.eachBlockAtRange(t, function (t, o, r) {\n            var s;\n            if ((s = t.getLastAttribute()) && n(s).listAttribute && s !== e.exceptAttributeName) return i = i.editObjectAtIndex(r, function () {\n              return t.removeAttribute(s);\n            });\n          }), new this.constructor(i);\n        }, c.prototype.removeLastTerminalAttributeAtRange = function (t) {\n          var e;\n          return e = this.blockList, this.eachBlockAtRange(t, function (t, i, o) {\n            var r;\n            if ((r = t.getLastAttribute()) && n(r).terminal) return e = e.editObjectAtIndex(o, function () {\n              return t.removeAttribute(r);\n            });\n          }), new this.constructor(e);\n        }, c.prototype.removeBlockAttributesAtRange = function (t) {\n          var e;\n          return e = this.blockList, this.eachBlockAtRange(t, function (t, n, i) {\n            return t.hasAttributes() ? e = e.editObjectAtIndex(i, function () {\n              return t.copyWithoutAttributes();\n            }) : void 0;\n          }), new this.constructor(e);\n        }, c.prototype.expandRangeToLineBreaksAndSplitBlocks = function (t) {\n          var e, n, o, r, s, a, u, c, l;\n          return a = t = i(t), l = a[0], r = a[1], c = this.locationFromPosition(l), o = this.locationFromPosition(r), e = this, u = e.getBlockAtIndex(c.index), null != (c.offset = u.findLineBreakInDirectionFromPosition(\"backward\", c.offset)) && (s = e.positionFromLocation(c), e = e.insertBlockBreakAtRange([s, s + 1]), o.index += 1, o.offset -= e.getBlockAtIndex(c.index).getLength(), c.index += 1), c.offset = 0, 0 === o.offset && o.index > c.index ? (o.index -= 1, o.offset = e.getBlockAtIndex(o.index).getBlockBreakPosition()) : (n = e.getBlockAtIndex(o.index), \"\\n\" === n.text.getStringAtRange([o.offset - 1, o.offset]) ? o.offset -= 1 : o.offset = n.findLineBreakInDirectionFromPosition(\"forward\", o.offset), o.offset !== n.getBlockBreakPosition() && (s = e.positionFromLocation(o), e = e.insertBlockBreakAtRange([s, s + 1]))), l = e.positionFromLocation(c), r = e.positionFromLocation(o), t = i([l, r]), {\n            document: e,\n            range: t\n          };\n        }, c.prototype.convertLineBreaksToBlockBreaksInRange = function (t) {\n          var e, n, o;\n          return n = (t = i(t))[0], o = this.getStringAtRange(t).slice(0, -1), e = this, o.replace(/.*?\\n/g, function (t) {\n            return n += t.length, e = e.insertBlockBreakAtRange([n - 1, n]);\n          }), {\n            document: e,\n            range: t\n          };\n        }, c.prototype.consolidateBlocksAtRange = function (t) {\n          var e, n, o, r, s;\n          return o = t = i(t), s = o[0], n = o[1], r = this.locationFromPosition(s).index, e = this.locationFromPosition(n).index, new this.constructor(this.blockList.consolidateFromIndexToIndex(r, e));\n        }, c.prototype.getDocumentAtRange = function (t) {\n          var e;\n          return t = i(t), e = this.blockList.getSplittableListInRange(t).toArray(), new this.constructor(e);\n        }, c.prototype.getStringAtRange = function (t) {\n          var e, n, o;\n          return o = t = i(t), n = o[o.length - 1], n !== this.getLength() && (e = -1), this.getDocumentAtRange(t).toString().slice(0, e);\n        }, c.prototype.getBlockAtIndex = function (t) {\n          return this.blockList.getObjectAtIndex(t);\n        }, c.prototype.getBlockAtPosition = function (t) {\n          var e;\n          return e = this.locationFromPosition(t).index, this.getBlockAtIndex(e);\n        }, c.prototype.getTextAtIndex = function (t) {\n          var e;\n          return null != (e = this.getBlockAtIndex(t)) ? e.text : void 0;\n        }, c.prototype.getTextAtPosition = function (t) {\n          var e;\n          return e = this.locationFromPosition(t).index, this.getTextAtIndex(e);\n        }, c.prototype.getPieceAtPosition = function (t) {\n          var e, n, i;\n          return i = this.locationFromPosition(t), e = i.index, n = i.offset, this.getTextAtIndex(e).getPieceAtPosition(n);\n        }, c.prototype.getCharacterAtPosition = function (t) {\n          var e, n, i;\n          return i = this.locationFromPosition(t), e = i.index, n = i.offset, this.getTextAtIndex(e).getStringAtRange([n, n + 1]);\n        }, c.prototype.getLength = function () {\n          return this.blockList.getEndPosition();\n        }, c.prototype.getBlocks = function () {\n          return this.blockList.toArray();\n        }, c.prototype.getBlockCount = function () {\n          return this.blockList.length;\n        }, c.prototype.getEditCount = function () {\n          return this.editCount;\n        }, c.prototype.eachBlock = function (t) {\n          return this.blockList.eachObject(t);\n        }, c.prototype.eachBlockAtRange = function (t, e) {\n          var n, o, r, s, a, u, c, l, h, p, d, f;\n          if (u = t = i(t), d = u[0], r = u[1], p = this.locationFromPosition(d), o = this.locationFromPosition(r), p.index === o.index) return n = this.getBlockAtIndex(p.index), f = [p.offset, o.offset], e(n, f, p.index);\n\n          for (h = [], a = s = c = p.index, l = o.index; l >= c ? l >= s : s >= l; a = l >= c ? ++s : --s) {\n            (n = this.getBlockAtIndex(a)) ? (f = function () {\n              switch (a) {\n                case p.index:\n                  return [p.offset, n.text.getLength()];\n\n                case o.index:\n                  return [0, o.offset];\n\n                default:\n                  return [0, n.text.getLength()];\n              }\n            }(), h.push(e(n, f, a))) : h.push(void 0);\n          }\n\n          return h;\n        }, c.prototype.getCommonAttributesAtRange = function (t) {\n          var n, r, s;\n          return r = (t = i(t))[0], o(t) ? this.getCommonAttributesAtPosition(r) : (s = [], n = [], this.eachBlockAtRange(t, function (t, e) {\n            return e[0] !== e[1] ? (s.push(t.text.getCommonAttributesAtRange(e)), n.push(l(t))) : void 0;\n          }), e.Hash.fromCommonAttributesOfObjects(s).merge(e.Hash.fromCommonAttributesOfObjects(n)).toObject());\n        }, c.prototype.getCommonAttributesAtPosition = function (t) {\n          var n, i, o, r, s, a, c, h, p, d;\n          if (p = this.locationFromPosition(t), s = p.index, h = p.offset, o = this.getBlockAtIndex(s), !o) return {};\n          r = l(o), n = o.text.getAttributesAtPosition(h), i = o.text.getAttributesAtPosition(h - 1), a = function () {\n            var t, n;\n            t = e.config.textAttributes, n = [];\n\n            for (c in t) {\n              d = t[c], d.inheritable && n.push(c);\n            }\n\n            return n;\n          }();\n\n          for (c in i) {\n            d = i[c], (d === n[c] || u.call(a, c) >= 0) && (r[c] = d);\n          }\n\n          return r;\n        }, c.prototype.getRangeOfCommonAttributeAtPosition = function (t, e) {\n          var n, o, r, s, a, u, c, l, h;\n          return a = this.locationFromPosition(e), r = a.index, s = a.offset, h = this.getTextAtIndex(r), u = h.getExpandedRangeForAttributeAtOffset(t, s), l = u[0], o = u[1], c = this.positionFromLocation({\n            index: r,\n            offset: l\n          }), n = this.positionFromLocation({\n            index: r,\n            offset: o\n          }), i([c, n]);\n        }, c.prototype.getBaseBlockAttributes = function () {\n          var t, e, n, i, o, r, s;\n\n          for (t = this.getBlockAtIndex(0).getAttributes(), n = i = 1, s = this.getBlockCount(); s >= 1 ? s > i : i > s; n = s >= 1 ? ++i : --i) {\n            e = this.getBlockAtIndex(n).getAttributes(), r = Math.min(t.length, e.length), t = function () {\n              var n, i, s;\n\n              for (s = [], o = n = 0, i = r; (i >= 0 ? i > n : n > i) && e[o] === t[o]; o = i >= 0 ? ++n : --n) {\n                s.push(e[o]);\n              }\n\n              return s;\n            }();\n          }\n\n          return t;\n        }, l = function l(t) {\n          var e, n;\n          return n = {}, (e = t.getLastAttribute()) && (n[e] = !0), n;\n        }, c.prototype.getAttachmentById = function (t) {\n          var e, n, i, o;\n\n          for (o = this.getAttachments(), n = 0, i = o.length; i > n; n++) {\n            if (e = o[n], e.id === t) return e;\n          }\n        }, c.prototype.getAttachmentPieces = function () {\n          var t;\n          return t = [], this.blockList.eachObject(function (e) {\n            var n;\n            return n = e.text, t = t.concat(n.getAttachmentPieces());\n          }), t;\n        }, c.prototype.getAttachments = function () {\n          var t, e, n, i, o;\n\n          for (i = this.getAttachmentPieces(), o = [], t = 0, e = i.length; e > t; t++) {\n            n = i[t], o.push(n.attachment);\n          }\n\n          return o;\n        }, c.prototype.getRangeOfAttachment = function (t) {\n          var e, n, o, r, s, a, u;\n\n          for (r = 0, s = this.blockList.toArray(), n = e = 0, o = s.length; o > e; n = ++e) {\n            if (a = s[n].text, u = a.getRangeOfAttachment(t)) return i([r + u[0], r + u[1]]);\n            r += a.getLength();\n          }\n        }, c.prototype.getLocationRangeOfAttachment = function (t) {\n          var e;\n          return e = this.getRangeOfAttachment(t), this.locationRangeFromRange(e);\n        }, c.prototype.getAttachmentPieceForAttachment = function (t) {\n          var e, n, i, o;\n\n          for (o = this.getAttachmentPieces(), e = 0, n = o.length; n > e; e++) {\n            if (i = o[e], i.attachment === t) return i;\n          }\n        }, c.prototype.findRangesForBlockAttribute = function (t) {\n          var e, n, i, o, r, s, a;\n\n          for (r = 0, s = [], a = this.getBlocks(), n = 0, i = a.length; i > n; n++) {\n            e = a[n], o = e.getLength(), e.hasAttribute(t) && s.push([r, r + o]), r += o;\n          }\n\n          return s;\n        }, c.prototype.findRangesForTextAttribute = function (t, e) {\n          var n, i, o, r, s, a, u, c, l, h;\n\n          for (h = (null != e ? e : {}).withValue, a = 0, u = [], c = [], r = function r(e) {\n            return null != h ? e.getAttribute(t) === h : e.hasAttribute(t);\n          }, l = this.getPieces(), n = 0, i = l.length; i > n; n++) {\n            s = l[n], o = s.getLength(), r(s) && (u[1] === a ? u[1] = a + o : c.push(u = [a, a + o])), a += o;\n          }\n\n          return c;\n        }, c.prototype.locationFromPosition = function (t) {\n          var e, n;\n          return n = this.blockList.findIndexAndOffsetAtPosition(Math.max(0, t)), null != n.index ? n : (e = this.getBlocks(), {\n            index: e.length - 1,\n            offset: e[e.length - 1].getLength()\n          });\n        }, c.prototype.positionFromLocation = function (t) {\n          return this.blockList.findPositionAtIndexAndOffset(t.index, t.offset);\n        }, c.prototype.locationRangeFromPosition = function (t) {\n          return i(this.locationFromPosition(t));\n        }, c.prototype.locationRangeFromRange = function (t) {\n          var e, n, o, r;\n          if (t = i(t)) return r = t[0], n = t[1], o = this.locationFromPosition(r), e = this.locationFromPosition(n), i([o, e]);\n        }, c.prototype.rangeFromLocationRange = function (t) {\n          var e, n;\n          return t = i(t), e = this.positionFromLocation(t[0]), o(t) || (n = this.positionFromLocation(t[1])), i([e, n]);\n        }, c.prototype.isEqualTo = function (t) {\n          return this.blockList.isEqualTo(null != t ? t.blockList : void 0);\n        }, c.prototype.getTexts = function () {\n          var t, e, n, i, o;\n\n          for (i = this.getBlocks(), o = [], e = 0, n = i.length; n > e; e++) {\n            t = i[e], o.push(t.text);\n          }\n\n          return o;\n        }, c.prototype.getPieces = function () {\n          var t, e, n, i, o;\n\n          for (n = [], i = this.getTexts(), t = 0, e = i.length; e > t; t++) {\n            o = i[t], n.push.apply(n, o.getPieces());\n          }\n\n          return n;\n        }, c.prototype.getObjects = function () {\n          return this.getBlocks().concat(this.getTexts()).concat(this.getPieces());\n        }, c.prototype.toSerializableDocument = function () {\n          var t;\n          return t = [], this.blockList.eachObject(function (e) {\n            return t.push(e.copyWithText(e.text.toSerializableText()));\n          }), new this.constructor(t);\n        }, c.prototype.toString = function () {\n          return this.blockList.toString();\n        }, c.prototype.toJSON = function () {\n          return this.blockList.toJSON();\n        }, c.prototype.toConsole = function () {\n          var t;\n          return JSON.stringify(function () {\n            var e, n, i, o;\n\n            for (i = this.blockList.toArray(), o = [], e = 0, n = i.length; n > e; e++) {\n              t = i[e], o.push(JSON.parse(t.text.toConsole()));\n            }\n\n            return o;\n          }.call(this));\n        }, c;\n      }(e.Object);\n    }.call(this), function () {\n      e.LineBreakInsertion = function () {\n        function t(t) {\n          var e;\n          this.composition = t, this.document = this.composition.document, e = this.composition.getSelectedRange(), this.startPosition = e[0], this.endPosition = e[1], this.startLocation = this.document.locationFromPosition(this.startPosition), this.endLocation = this.document.locationFromPosition(this.endPosition), this.block = this.document.getBlockAtIndex(this.endLocation.index), this.breaksOnReturn = this.block.breaksOnReturn(), this.previousCharacter = this.block.text.getStringAtPosition(this.endLocation.offset - 1), this.nextCharacter = this.block.text.getStringAtPosition(this.endLocation.offset);\n        }\n\n        return t.prototype.shouldInsertBlockBreak = function () {\n          return this.block.hasAttributes() && this.block.isListItem() && !this.block.isEmpty() ? 0 !== this.startLocation.offset : this.breaksOnReturn && \"\\n\" !== this.nextCharacter;\n        }, t.prototype.shouldBreakFormattedBlock = function () {\n          return this.block.hasAttributes() && !this.block.isListItem() && (this.breaksOnReturn && \"\\n\" === this.nextCharacter || \"\\n\" === this.previousCharacter);\n        }, t.prototype.shouldDecreaseListLevel = function () {\n          return this.block.hasAttributes() && this.block.isListItem() && this.block.isEmpty();\n        }, t.prototype.shouldPrependListItem = function () {\n          return this.block.isListItem() && 0 === this.startLocation.offset && !this.block.isEmpty();\n        }, t.prototype.shouldRemoveLastBlockAttribute = function () {\n          return this.block.hasAttributes() && !this.block.isListItem() && this.block.isEmpty();\n        }, t;\n      }();\n    }.call(this), function () {\n      var t,\n          n,\n          i,\n          o,\n          r,\n          s,\n          a,\n          u,\n          c,\n          l,\n          h = function h(t, e) {\n        function n() {\n          this.constructor = t;\n        }\n\n        for (var i in e) {\n          p.call(e, i) && (t[i] = e[i]);\n        }\n\n        return n.prototype = e.prototype, t.prototype = new n(), t.__super__ = e.prototype, t;\n      },\n          p = {}.hasOwnProperty;\n\n      s = e.normalizeRange, c = e.rangesAreEqual, u = e.rangeIsCollapsed, a = e.objectsAreEqual, t = e.arrayStartsWith, l = e.summarizeArrayChange, i = e.getAllAttributeNames, o = e.getBlockConfig, r = e.getTextConfig, n = e.extend, e.Composition = function (p) {\n        function d() {\n          this.document = new e.Document(), this.attachments = [], this.currentAttributes = {}, this.revision = 0;\n        }\n\n        var f;\n        return h(d, p), d.prototype.setDocument = function (t) {\n          var e;\n          return t.isEqualTo(this.document) ? void 0 : (this.document = t, this.refreshAttachments(), this.revision++, null != (e = this.delegate) && \"function\" == typeof e.compositionDidChangeDocument ? e.compositionDidChangeDocument(t) : void 0);\n        }, d.prototype.getSnapshot = function () {\n          return {\n            document: this.document,\n            selectedRange: this.getSelectedRange()\n          };\n        }, d.prototype.loadSnapshot = function (t) {\n          var n, i, o, r;\n          return n = t.document, r = t.selectedRange, null != (i = this.delegate) && \"function\" == typeof i.compositionWillLoadSnapshot && i.compositionWillLoadSnapshot(), this.setDocument(null != n ? n : new e.Document()), this.setSelection(null != r ? r : [0, 0]), null != (o = this.delegate) && \"function\" == typeof o.compositionDidLoadSnapshot ? o.compositionDidLoadSnapshot() : void 0;\n        }, d.prototype.insertText = function (t, e) {\n          var n, i, o, r;\n          return r = (null != e ? e : {\n            updatePosition: !0\n          }).updatePosition, i = this.getSelectedRange(), this.setDocument(this.document.insertTextAtRange(t, i)), o = i[0], n = o + t.getLength(), r && this.setSelection(n), this.notifyDelegateOfInsertionAtRange([o, n]);\n        }, d.prototype.insertBlock = function (t) {\n          var n;\n          return null == t && (t = new e.Block()), n = new e.Document([t]), this.insertDocument(n);\n        }, d.prototype.insertDocument = function (t) {\n          var n, i, o;\n          return null == t && (t = new e.Document()), i = this.getSelectedRange(), this.setDocument(this.document.insertDocumentAtRange(t, i)), o = i[0], n = o + t.getLength(), this.setSelection(n), this.notifyDelegateOfInsertionAtRange([o, n]);\n        }, d.prototype.insertString = function (t, n) {\n          var i, o;\n          return i = this.getCurrentTextAttributes(), o = e.Text.textForStringWithAttributes(t, i), this.insertText(o, n);\n        }, d.prototype.insertBlockBreak = function () {\n          var t, e, n;\n          return e = this.getSelectedRange(), this.setDocument(this.document.insertBlockBreakAtRange(e)), n = e[0], t = n + 1, this.setSelection(t), this.notifyDelegateOfInsertionAtRange([n, t]);\n        }, d.prototype.insertLineBreak = function () {\n          var t, n;\n          return n = new e.LineBreakInsertion(this), n.shouldDecreaseListLevel() ? (this.decreaseListLevel(), this.setSelection(n.startPosition)) : n.shouldPrependListItem() ? (t = new e.Document([n.block.copyWithoutText()]), this.insertDocument(t)) : n.shouldInsertBlockBreak() ? this.insertBlockBreak() : n.shouldRemoveLastBlockAttribute() ? this.removeLastBlockAttribute() : n.shouldBreakFormattedBlock() ? this.breakFormattedBlock(n) : this.insertString(\"\\n\");\n        }, d.prototype.insertHTML = function (t) {\n          var n, i, o, r;\n          return n = e.Document.fromHTML(t), o = this.getSelectedRange(), this.setDocument(this.document.mergeDocumentAtRange(n, o)), r = o[0], i = r + n.getLength() - 1, this.setSelection(i), this.notifyDelegateOfInsertionAtRange([r, i]);\n        }, d.prototype.replaceHTML = function (t) {\n          var n, i, o;\n          return n = e.Document.fromHTML(t).copyUsingObjectsFromDocument(this.document), i = this.getLocationRange({\n            strict: !1\n          }), o = this.document.rangeFromLocationRange(i), this.setDocument(n), this.setSelection(o);\n        }, d.prototype.insertFile = function (t) {\n          return this.insertFiles([t]);\n        }, d.prototype.insertFiles = function (t) {\n          var n, i, o, r, s, a;\n\n          for (i = [], r = 0, s = t.length; s > r; r++) {\n            o = t[r], (null != (a = this.delegate) ? a.compositionShouldAcceptFile(o) : void 0) && (n = e.Attachment.attachmentForFile(o), i.push(n));\n          }\n\n          return this.insertAttachments(i);\n        }, d.prototype.insertAttachment = function (t) {\n          return this.insertAttachments([t]);\n        }, d.prototype.insertAttachments = function (t) {\n          var n, i, o, r, s, a, u, c, l;\n\n          for (c = new e.Text(), r = 0, s = t.length; s > r; r++) {\n            n = t[r], l = n.getType(), a = null != (u = e.config.attachments[l]) ? u.presentation : void 0, o = this.getCurrentTextAttributes(), a && (o.presentation = a), i = e.Text.textForAttachmentWithAttributes(n, o), c = c.appendText(i);\n          }\n\n          return this.insertText(c);\n        }, d.prototype.shouldManageDeletingInDirection = function (t) {\n          var e;\n\n          if (e = this.getLocationRange(), u(e)) {\n            if (\"backward\" === t && 0 === e[0].offset) return !0;\n            if (this.shouldManageMovingCursorInDirection(t)) return !0;\n          } else if (e[0].index !== e[1].index) return !0;\n\n          return !1;\n        }, d.prototype.deleteInDirection = function (t, e) {\n          var n, i, o, r, s, a, c, l;\n          return r = (null != e ? e : {}).length, s = this.getLocationRange(), a = this.getSelectedRange(), c = u(a), c ? o = \"backward\" === t && 0 === s[0].offset : l = s[0].index !== s[1].index, o && this.canDecreaseBlockAttributeLevel() && (i = this.getBlock(), i.isListItem() ? this.decreaseListLevel() : this.decreaseBlockAttributeLevel(), this.setSelection(a[0]), i.isEmpty()) ? !1 : (c && (a = this.getExpandedRangeInDirection(t, {\n            length: r\n          }), \"backward\" === t && (n = this.getAttachmentAtRange(a))), n ? (this.editAttachment(n), !1) : (this.setDocument(this.document.removeTextAtRange(a)), this.setSelection(a[0]), o || l ? !1 : void 0));\n        }, d.prototype.moveTextFromRange = function (t) {\n          var e;\n          return e = this.getSelectedRange()[0], this.setDocument(this.document.moveTextFromRangeToPosition(t, e)), this.setSelection(e);\n        }, d.prototype.removeAttachment = function (t) {\n          var e;\n          return (e = this.document.getRangeOfAttachment(t)) ? (this.stopEditingAttachment(), this.setDocument(this.document.removeTextAtRange(e)), this.setSelection(e[0])) : void 0;\n        }, d.prototype.removeLastBlockAttribute = function () {\n          var t, e, n, i;\n          return n = this.getSelectedRange(), i = n[0], e = n[1], t = this.document.getBlockAtPosition(e), this.removeCurrentAttribute(t.getLastAttribute()), this.setSelection(i);\n        }, f = \" \", d.prototype.insertPlaceholder = function () {\n          return this.placeholderPosition = this.getPosition(), this.insertString(f);\n        }, d.prototype.selectPlaceholder = function () {\n          return null != this.placeholderPosition ? (this.setSelectedRange([this.placeholderPosition, this.placeholderPosition + f.length]), this.getSelectedRange()) : void 0;\n        }, d.prototype.forgetPlaceholder = function () {\n          return this.placeholderPosition = null;\n        }, d.prototype.hasCurrentAttribute = function (t) {\n          var e;\n          return e = this.currentAttributes[t], null != e && e !== !1;\n        }, d.prototype.toggleCurrentAttribute = function (t) {\n          var e;\n          return (e = !this.currentAttributes[t]) ? this.setCurrentAttribute(t, e) : this.removeCurrentAttribute(t);\n        }, d.prototype.canSetCurrentAttribute = function (t) {\n          return o(t) ? this.canSetCurrentBlockAttribute(t) : this.canSetCurrentTextAttribute(t);\n        }, d.prototype.canSetCurrentTextAttribute = function () {\n          var t, e, n, i, o;\n\n          if (e = this.getSelectedDocument()) {\n            for (o = e.getAttachments(), n = 0, i = o.length; i > n; n++) {\n              if (t = o[n], !t.hasContent()) return !1;\n            }\n\n            return !0;\n          }\n        }, d.prototype.canSetCurrentBlockAttribute = function () {\n          var t;\n          if (t = this.getBlock()) return !t.isTerminalBlock();\n        }, d.prototype.setCurrentAttribute = function (t, e) {\n          return o(t) ? this.setBlockAttribute(t, e) : (this.setTextAttribute(t, e), this.currentAttributes[t] = e, this.notifyDelegateOfCurrentAttributesChange());\n        }, d.prototype.setTextAttribute = function (t, n) {\n          var i, o, r, s;\n          if (o = this.getSelectedRange()) return r = o[0], i = o[1], r !== i ? this.setDocument(this.document.addAttributeAtRange(t, n, o)) : \"href\" === t ? (s = e.Text.textForStringWithAttributes(n, {\n            href: n\n          }), this.insertText(s)) : void 0;\n        }, d.prototype.setBlockAttribute = function (t, e) {\n          var n, i;\n          if (i = this.getSelectedRange()) return this.canSetCurrentAttribute(t) ? (n = this.getBlock(), this.setDocument(this.document.applyBlockAttributeAtRange(t, e, i)), this.setSelection(i)) : void 0;\n        }, d.prototype.removeCurrentAttribute = function (t) {\n          return o(t) ? (this.removeBlockAttribute(t), this.updateCurrentAttributes()) : (this.removeTextAttribute(t), delete this.currentAttributes[t], this.notifyDelegateOfCurrentAttributesChange());\n        }, d.prototype.removeTextAttribute = function (t) {\n          var e;\n          if (e = this.getSelectedRange()) return this.setDocument(this.document.removeAttributeAtRange(t, e));\n        }, d.prototype.removeBlockAttribute = function (t) {\n          var e;\n          if (e = this.getSelectedRange()) return this.setDocument(this.document.removeAttributeAtRange(t, e));\n        }, d.prototype.canDecreaseNestingLevel = function () {\n          var t;\n          return (null != (t = this.getBlock()) ? t.getNestingLevel() : void 0) > 0;\n        }, d.prototype.canIncreaseNestingLevel = function () {\n          var e, n, i;\n          if (e = this.getBlock()) return (null != (i = o(e.getLastNestableAttribute())) ? i.listAttribute : 0) ? (n = this.getPreviousBlock()) ? t(n.getListItemAttributes(), e.getListItemAttributes()) : void 0 : e.getNestingLevel() > 0;\n        }, d.prototype.decreaseNestingLevel = function () {\n          var t;\n          if (t = this.getBlock()) return this.setDocument(this.document.replaceBlock(t, t.decreaseNestingLevel()));\n        }, d.prototype.increaseNestingLevel = function () {\n          var t;\n          if (t = this.getBlock()) return this.setDocument(this.document.replaceBlock(t, t.increaseNestingLevel()));\n        }, d.prototype.canDecreaseBlockAttributeLevel = function () {\n          var t;\n          return (null != (t = this.getBlock()) ? t.getAttributeLevel() : void 0) > 0;\n        }, d.prototype.decreaseBlockAttributeLevel = function () {\n          var t, e;\n          return (t = null != (e = this.getBlock()) ? e.getLastAttribute() : void 0) ? this.removeCurrentAttribute(t) : void 0;\n        }, d.prototype.decreaseListLevel = function () {\n          var t, e, n, i, o, r;\n\n          for (r = this.getSelectedRange()[0], o = this.document.locationFromPosition(r).index, n = o, t = this.getBlock().getAttributeLevel(); (e = this.document.getBlockAtIndex(n + 1)) && e.isListItem() && e.getAttributeLevel() > t;) {\n            n++;\n          }\n\n          return r = this.document.positionFromLocation({\n            index: o,\n            offset: 0\n          }), i = this.document.positionFromLocation({\n            index: n,\n            offset: 0\n          }), this.setDocument(this.document.removeLastListAttributeAtRange([r, i]));\n        }, d.prototype.updateCurrentAttributes = function () {\n          var t, e, n, o, r, s;\n\n          if (s = this.getSelectedRange({\n            ignoreLock: !0\n          })) {\n            for (e = this.document.getCommonAttributesAtRange(s), r = i(), n = 0, o = r.length; o > n; n++) {\n              t = r[n], e[t] || this.canSetCurrentAttribute(t) || (e[t] = !1);\n            }\n\n            if (!a(e, this.currentAttributes)) return this.currentAttributes = e, this.notifyDelegateOfCurrentAttributesChange();\n          }\n        }, d.prototype.getCurrentAttributes = function () {\n          return n.call({}, this.currentAttributes);\n        }, d.prototype.getCurrentTextAttributes = function () {\n          var t, e, n, i;\n          t = {}, n = this.currentAttributes;\n\n          for (e in n) {\n            i = n[e], i !== !1 && r(e) && (t[e] = i);\n          }\n\n          return t;\n        }, d.prototype.freezeSelection = function () {\n          return this.setCurrentAttribute(\"frozen\", !0);\n        }, d.prototype.thawSelection = function () {\n          return this.removeCurrentAttribute(\"frozen\");\n        }, d.prototype.hasFrozenSelection = function () {\n          return this.hasCurrentAttribute(\"frozen\");\n        }, d.proxyMethod(\"getSelectionManager().getPointRange\"), d.proxyMethod(\"getSelectionManager().setLocationRangeFromPointRange\"), d.proxyMethod(\"getSelectionManager().createLocationRangeFromDOMRange\"), d.proxyMethod(\"getSelectionManager().locationIsCursorTarget\"), d.proxyMethod(\"getSelectionManager().selectionIsExpanded\"), d.proxyMethod(\"delegate?.getSelectionManager\"), d.prototype.setSelection = function (t) {\n          var e, n;\n          return e = this.document.locationRangeFromRange(t), null != (n = this.delegate) ? n.compositionDidRequestChangingSelectionToLocationRange(e) : void 0;\n        }, d.prototype.getSelectedRange = function () {\n          var t;\n          return (t = this.getLocationRange()) ? this.document.rangeFromLocationRange(t) : void 0;\n        }, d.prototype.setSelectedRange = function (t) {\n          var e;\n          return e = this.document.locationRangeFromRange(t), this.getSelectionManager().setLocationRange(e);\n        }, d.prototype.getPosition = function () {\n          var t;\n          return (t = this.getLocationRange()) ? this.document.positionFromLocation(t[0]) : void 0;\n        }, d.prototype.getLocationRange = function (t) {\n          var e, n;\n          return null != (e = null != (n = this.targetLocationRange) ? n : this.getSelectionManager().getLocationRange(t)) ? e : s({\n            index: 0,\n            offset: 0\n          });\n        }, d.prototype.withTargetLocationRange = function (t, e) {\n          var n;\n          this.targetLocationRange = t;\n\n          try {\n            n = e();\n          } finally {\n            this.targetLocationRange = null;\n          }\n\n          return n;\n        }, d.prototype.withTargetRange = function (t, e) {\n          var n;\n          return n = this.document.locationRangeFromRange(t), this.withTargetLocationRange(n, e);\n        }, d.prototype.withTargetDOMRange = function (t, e) {\n          var n;\n          return n = this.createLocationRangeFromDOMRange(t, {\n            strict: !1\n          }), this.withTargetLocationRange(n, e);\n        }, d.prototype.getExpandedRangeInDirection = function (t, e) {\n          var n, i, o, r;\n          return i = (null != e ? e : {}).length, o = this.getSelectedRange(), r = o[0], n = o[1], \"backward\" === t ? i ? r -= i : r = this.translateUTF16PositionFromOffset(r, -1) : i ? n += i : n = this.translateUTF16PositionFromOffset(n, 1), s([r, n]);\n        }, d.prototype.shouldManageMovingCursorInDirection = function (t) {\n          var e;\n          return this.editingAttachment ? !0 : (e = this.getExpandedRangeInDirection(t), null != this.getAttachmentAtRange(e));\n        }, d.prototype.moveCursorInDirection = function (t) {\n          var e, n, i, o;\n          return this.editingAttachment ? i = this.document.getRangeOfAttachment(this.editingAttachment) : (o = this.getSelectedRange(), i = this.getExpandedRangeInDirection(t), n = !c(o, i)), this.setSelectedRange(\"backward\" === t ? i[0] : i[1]), n && (e = this.getAttachmentAtRange(i)) ? this.editAttachment(e) : void 0;\n        }, d.prototype.expandSelectionInDirection = function (t, e) {\n          var n, i;\n          return n = (null != e ? e : {}).length, i = this.getExpandedRangeInDirection(t, {\n            length: n\n          }), this.setSelectedRange(i);\n        }, d.prototype.expandSelectionForEditing = function () {\n          return this.hasCurrentAttribute(\"href\") ? this.expandSelectionAroundCommonAttribute(\"href\") : void 0;\n        }, d.prototype.expandSelectionAroundCommonAttribute = function (t) {\n          var e, n;\n          return e = this.getPosition(), n = this.document.getRangeOfCommonAttributeAtPosition(t, e), this.setSelectedRange(n);\n        }, d.prototype.selectionContainsAttachments = function () {\n          var t;\n          return (null != (t = this.getSelectedAttachments()) ? t.length : void 0) > 0;\n        }, d.prototype.selectionIsInCursorTarget = function () {\n          return this.editingAttachment || this.positionIsCursorTarget(this.getPosition());\n        }, d.prototype.positionIsCursorTarget = function (t) {\n          var e;\n          return (e = this.document.locationFromPosition(t)) ? this.locationIsCursorTarget(e) : void 0;\n        }, d.prototype.positionIsBlockBreak = function (t) {\n          var e;\n          return null != (e = this.document.getPieceAtPosition(t)) ? e.isBlockBreak() : void 0;\n        }, d.prototype.getSelectedDocument = function () {\n          var t;\n          return (t = this.getSelectedRange()) ? this.document.getDocumentAtRange(t) : void 0;\n        }, d.prototype.getSelectedAttachments = function () {\n          var t;\n          return null != (t = this.getSelectedDocument()) ? t.getAttachments() : void 0;\n        }, d.prototype.getAttachments = function () {\n          return this.attachments.slice(0);\n        }, d.prototype.refreshAttachments = function () {\n          var t, e, n, i, o, r, s, a, u, c, h, p;\n\n          for (n = this.document.getAttachments(), a = l(this.attachments, n), t = a.added, h = a.removed, this.attachments = n, i = 0, r = h.length; r > i; i++) {\n            e = h[i], e.delegate = null, null != (u = this.delegate) && \"function\" == typeof u.compositionDidRemoveAttachment && u.compositionDidRemoveAttachment(e);\n          }\n\n          for (p = [], o = 0, s = t.length; s > o; o++) {\n            e = t[o], e.delegate = this, p.push(null != (c = this.delegate) && \"function\" == typeof c.compositionDidAddAttachment ? c.compositionDidAddAttachment(e) : void 0);\n          }\n\n          return p;\n        }, d.prototype.attachmentDidChangeAttributes = function (t) {\n          var e;\n          return this.revision++, null != (e = this.delegate) && \"function\" == typeof e.compositionDidEditAttachment ? e.compositionDidEditAttachment(t) : void 0;\n        }, d.prototype.attachmentDidChangePreviewURL = function (t) {\n          var e;\n          return this.revision++, null != (e = this.delegate) && \"function\" == typeof e.compositionDidChangeAttachmentPreviewURL ? e.compositionDidChangeAttachmentPreviewURL(t) : void 0;\n        }, d.prototype.editAttachment = function (t, e) {\n          var n;\n          if (t !== this.editingAttachment) return this.stopEditingAttachment(), this.editingAttachment = t, null != (n = this.delegate) && \"function\" == typeof n.compositionDidStartEditingAttachment ? n.compositionDidStartEditingAttachment(this.editingAttachment, e) : void 0;\n        }, d.prototype.stopEditingAttachment = function () {\n          var t;\n          if (this.editingAttachment) return null != (t = this.delegate) && \"function\" == typeof t.compositionDidStopEditingAttachment && t.compositionDidStopEditingAttachment(this.editingAttachment), this.editingAttachment = null;\n        }, d.prototype.updateAttributesForAttachment = function (t, e) {\n          return this.setDocument(this.document.updateAttributesForAttachment(t, e));\n        }, d.prototype.removeAttributeForAttachment = function (t, e) {\n          return this.setDocument(this.document.removeAttributeForAttachment(t, e));\n        }, d.prototype.breakFormattedBlock = function (t) {\n          var n, i, o, r, s;\n          return i = t.document, n = t.block, r = t.startPosition, s = [r - 1, r], n.getBlockBreakPosition() === t.startLocation.offset ? (n.breaksOnReturn() && \"\\n\" === t.nextCharacter ? r += 1 : i = i.removeTextAtRange(s), s = [r, r]) : \"\\n\" === t.nextCharacter ? \"\\n\" === t.previousCharacter ? s = [r - 1, r + 1] : (s = [r, r + 1], r += 1) : t.startLocation.offset - 1 !== 0 && (r += 1), o = new e.Document([n.removeLastAttribute().copyWithoutText()]), this.setDocument(i.insertDocumentAtRange(o, s)), this.setSelection(r);\n        }, d.prototype.getPreviousBlock = function () {\n          var t, e;\n          return (e = this.getLocationRange()) && (t = e[0].index, t > 0) ? this.document.getBlockAtIndex(t - 1) : void 0;\n        }, d.prototype.getBlock = function () {\n          var t;\n          return (t = this.getLocationRange()) ? this.document.getBlockAtIndex(t[0].index) : void 0;\n        }, d.prototype.getAttachmentAtRange = function (t) {\n          var n;\n          return n = this.document.getDocumentAtRange(t), n.toString() === e.OBJECT_REPLACEMENT_CHARACTER + \"\\n\" ? n.getAttachments()[0] : void 0;\n        }, d.prototype.notifyDelegateOfCurrentAttributesChange = function () {\n          var t;\n          return null != (t = this.delegate) && \"function\" == typeof t.compositionDidChangeCurrentAttributes ? t.compositionDidChangeCurrentAttributes(this.currentAttributes) : void 0;\n        }, d.prototype.notifyDelegateOfInsertionAtRange = function (t) {\n          var e;\n          return null != (e = this.delegate) && \"function\" == typeof e.compositionDidPerformInsertionAtRange ? e.compositionDidPerformInsertionAtRange(t) : void 0;\n        }, d.prototype.translateUTF16PositionFromOffset = function (t, e) {\n          var n, i;\n          return i = this.document.toUTF16String(), n = i.offsetFromUCS2Offset(t), i.offsetToUCS2Offset(n + e);\n        }, d;\n      }(e.BasicObject);\n    }.call(this), function () {\n      var t = function t(_t18, e) {\n        function i() {\n          this.constructor = _t18;\n        }\n\n        for (var o in e) {\n          n.call(e, o) && (_t18[o] = e[o]);\n        }\n\n        return i.prototype = e.prototype, _t18.prototype = new i(), _t18.__super__ = e.prototype, _t18;\n      },\n          n = {}.hasOwnProperty;\n\n      e.UndoManager = function (e) {\n        function n(t) {\n          this.composition = t, this.undoEntries = [], this.redoEntries = [];\n        }\n\n        var i;\n        return t(n, e), n.prototype.recordUndoEntry = function (t, e) {\n          var n, o, r, s, a;\n          return s = null != e ? e : {}, o = s.context, n = s.consolidatable, r = this.undoEntries.slice(-1)[0], n && i(r, t, o) ? void 0 : (a = this.createEntry({\n            description: t,\n            context: o\n          }), this.undoEntries.push(a), this.redoEntries = []);\n        }, n.prototype.undo = function () {\n          var t, e;\n          return (e = this.undoEntries.pop()) ? (t = this.createEntry(e), this.redoEntries.push(t), this.composition.loadSnapshot(e.snapshot)) : void 0;\n        }, n.prototype.redo = function () {\n          var t, e;\n          return (t = this.redoEntries.pop()) ? (e = this.createEntry(t), this.undoEntries.push(e), this.composition.loadSnapshot(t.snapshot)) : void 0;\n        }, n.prototype.canUndo = function () {\n          return this.undoEntries.length > 0;\n        }, n.prototype.canRedo = function () {\n          return this.redoEntries.length > 0;\n        }, n.prototype.createEntry = function (t) {\n          var e, n, i;\n          return i = null != t ? t : {}, n = i.description, e = i.context, {\n            description: null != n ? n.toString() : void 0,\n            context: JSON.stringify(e),\n            snapshot: this.composition.getSnapshot()\n          };\n        }, i = function i(t, e, n) {\n          return (null != t ? t.description : void 0) === (null != e ? e.toString() : void 0) && (null != t ? t.context : void 0) === JSON.stringify(n);\n        }, n;\n      }(e.BasicObject);\n    }.call(this), function () {\n      var t;\n      e.attachmentGalleryFilter = function (e) {\n        var n;\n        return n = new t(e), n.perform(), n.getSnapshot();\n      }, t = function () {\n        function t(t) {\n          this.document = t.document, this.selectedRange = t.selectedRange;\n        }\n\n        var e, n, i;\n        return e = \"attachmentGallery\", n = \"presentation\", i = \"gallery\", t.prototype.perform = function () {\n          return this.removeBlockAttribute(), this.applyBlockAttribute();\n        }, t.prototype.getSnapshot = function () {\n          return {\n            document: this.document,\n            selectedRange: this.selectedRange\n          };\n        }, t.prototype.removeBlockAttribute = function () {\n          var t, n, i, o, r;\n\n          for (o = this.findRangesOfBlocks(), r = [], t = 0, n = o.length; n > t; t++) {\n            i = o[t], r.push(this.document = this.document.removeAttributeAtRange(e, i));\n          }\n\n          return r;\n        }, t.prototype.applyBlockAttribute = function () {\n          var t, n, i, o, r, s;\n\n          for (i = 0, r = this.findRangesOfPieces(), s = [], t = 0, n = r.length; n > t; t++) {\n            o = r[t], o[1] - o[0] > 1 && (o[0] += i, o[1] += i, \"\\n\" !== this.document.getCharacterAtPosition(o[1]) && (this.document = this.document.insertBlockBreakAtRange(o[1]), o[1] < this.selectedRange[1] && this.moveSelectedRangeForward(), o[1]++, i++), 0 !== o[0] && \"\\n\" !== this.document.getCharacterAtPosition(o[0] - 1) && (this.document = this.document.insertBlockBreakAtRange(o[0]), o[0] < this.selectedRange[0] && this.moveSelectedRangeForward(), o[0]++, i++), s.push(this.document = this.document.applyBlockAttributeAtRange(e, !0, o)));\n          }\n\n          return s;\n        }, t.prototype.findRangesOfBlocks = function () {\n          return this.document.findRangesForBlockAttribute(e);\n        }, t.prototype.findRangesOfPieces = function () {\n          return this.document.findRangesForTextAttribute(n, {\n            withValue: i\n          });\n        }, t.prototype.moveSelectedRangeForward = function () {\n          return this.selectedRange[0] += 1, this.selectedRange[1] += 1;\n        }, t;\n      }();\n    }.call(this), function () {\n      var t = function t(_t19, e) {\n        return function () {\n          return _t19.apply(e, arguments);\n        };\n      };\n\n      e.Editor = function () {\n        function n(n, o, r) {\n          this.composition = n, this.selectionManager = o, this.element = r, this.insertFiles = t(this.insertFiles, this), this.undoManager = new e.UndoManager(this.composition), this.filters = i.slice(0);\n        }\n\n        var i;\n        return i = [e.attachmentGalleryFilter], n.prototype.loadDocument = function (t) {\n          return this.loadSnapshot({\n            document: t,\n            selectedRange: [0, 0]\n          });\n        }, n.prototype.loadHTML = function (t) {\n          return null == t && (t = \"\"), this.loadDocument(e.Document.fromHTML(t, {\n            referenceElement: this.element\n          }));\n        }, n.prototype.loadJSON = function (t) {\n          var n, i;\n          return n = t.document, i = t.selectedRange, n = e.Document.fromJSON(n), this.loadSnapshot({\n            document: n,\n            selectedRange: i\n          });\n        }, n.prototype.loadSnapshot = function (t) {\n          return this.undoManager = new e.UndoManager(this.composition), this.composition.loadSnapshot(t);\n        }, n.prototype.getDocument = function () {\n          return this.composition.document;\n        }, n.prototype.getSelectedDocument = function () {\n          return this.composition.getSelectedDocument();\n        }, n.prototype.getSnapshot = function () {\n          return this.composition.getSnapshot();\n        }, n.prototype.toJSON = function () {\n          return this.getSnapshot();\n        }, n.prototype.deleteInDirection = function (t) {\n          return this.composition.deleteInDirection(t);\n        }, n.prototype.insertAttachment = function (t) {\n          return this.composition.insertAttachment(t);\n        }, n.prototype.insertDocument = function (t) {\n          return this.composition.insertDocument(t);\n        }, n.prototype.insertFile = function (t) {\n          return this.composition.insertFile(t);\n        }, n.prototype.insertFiles = function (t) {\n          return this.composition.insertFiles(t);\n        }, n.prototype.insertHTML = function (t) {\n          return this.composition.insertHTML(t);\n        }, n.prototype.insertString = function (t) {\n          return this.composition.insertString(t);\n        }, n.prototype.insertText = function (t) {\n          return this.composition.insertText(t);\n        }, n.prototype.insertLineBreak = function () {\n          return this.composition.insertLineBreak();\n        }, n.prototype.getSelectedRange = function () {\n          return this.composition.getSelectedRange();\n        }, n.prototype.getPosition = function () {\n          return this.composition.getPosition();\n        }, n.prototype.getClientRectAtPosition = function (t) {\n          var e;\n          return e = this.getDocument().locationRangeFromRange([t, t + 1]), this.selectionManager.getClientRectAtLocationRange(e);\n        }, n.prototype.expandSelectionInDirection = function (t) {\n          return this.composition.expandSelectionInDirection(t);\n        }, n.prototype.moveCursorInDirection = function (t) {\n          return this.composition.moveCursorInDirection(t);\n        }, n.prototype.setSelectedRange = function (t) {\n          return this.composition.setSelectedRange(t);\n        }, n.prototype.activateAttribute = function (t, e) {\n          return null == e && (e = !0), this.composition.setCurrentAttribute(t, e);\n        }, n.prototype.attributeIsActive = function (t) {\n          return this.composition.hasCurrentAttribute(t);\n        }, n.prototype.canActivateAttribute = function (t) {\n          return this.composition.canSetCurrentAttribute(t);\n        }, n.prototype.deactivateAttribute = function (t) {\n          return this.composition.removeCurrentAttribute(t);\n        }, n.prototype.canDecreaseNestingLevel = function () {\n          return this.composition.canDecreaseNestingLevel();\n        }, n.prototype.canIncreaseNestingLevel = function () {\n          return this.composition.canIncreaseNestingLevel();\n        }, n.prototype.decreaseNestingLevel = function () {\n          return this.canDecreaseNestingLevel() ? this.composition.decreaseNestingLevel() : void 0;\n        }, n.prototype.increaseNestingLevel = function () {\n          return this.canIncreaseNestingLevel() ? this.composition.increaseNestingLevel() : void 0;\n        }, n.prototype.canRedo = function () {\n          return this.undoManager.canRedo();\n        }, n.prototype.canUndo = function () {\n          return this.undoManager.canUndo();\n        }, n.prototype.recordUndoEntry = function (t, e) {\n          var n, i, o;\n          return o = null != e ? e : {}, i = o.context, n = o.consolidatable, this.undoManager.recordUndoEntry(t, {\n            context: i,\n            consolidatable: n\n          });\n        }, n.prototype.redo = function () {\n          return this.canRedo() ? this.undoManager.redo() : void 0;\n        }, n.prototype.undo = function () {\n          return this.canUndo() ? this.undoManager.undo() : void 0;\n        }, n;\n      }();\n    }.call(this), function () {\n      var t = function t(_t20, e) {\n        function i() {\n          this.constructor = _t20;\n        }\n\n        for (var o in e) {\n          n.call(e, o) && (_t20[o] = e[o]);\n        }\n\n        return i.prototype = e.prototype, _t20.prototype = new i(), _t20.__super__ = e.prototype, _t20;\n      },\n          n = {}.hasOwnProperty;\n\n      e.ManagedAttachment = function (e) {\n        function n(t, e) {\n          var n;\n          this.attachmentManager = t, this.attachment = e, n = this.attachment, this.id = n.id, this.file = n.file;\n        }\n\n        return t(n, e), n.prototype.remove = function () {\n          return this.attachmentManager.requestRemovalOfAttachment(this.attachment);\n        }, n.proxyMethod(\"attachment.getAttribute\"), n.proxyMethod(\"attachment.hasAttribute\"), n.proxyMethod(\"attachment.setAttribute\"), n.proxyMethod(\"attachment.getAttributes\"), n.proxyMethod(\"attachment.setAttributes\"), n.proxyMethod(\"attachment.isPending\"), n.proxyMethod(\"attachment.isPreviewable\"), n.proxyMethod(\"attachment.getURL\"), n.proxyMethod(\"attachment.getHref\"), n.proxyMethod(\"attachment.getFilename\"), n.proxyMethod(\"attachment.getFilesize\"), n.proxyMethod(\"attachment.getFormattedFilesize\"), n.proxyMethod(\"attachment.getExtension\"), n.proxyMethod(\"attachment.getContentType\"), n.proxyMethod(\"attachment.getFile\"), n.proxyMethod(\"attachment.setFile\"), n.proxyMethod(\"attachment.releaseFile\"), n.proxyMethod(\"attachment.getUploadProgress\"), n.proxyMethod(\"attachment.setUploadProgress\"), n;\n      }(e.BasicObject);\n    }.call(this), function () {\n      var t = function t(_t21, e) {\n        function i() {\n          this.constructor = _t21;\n        }\n\n        for (var o in e) {\n          n.call(e, o) && (_t21[o] = e[o]);\n        }\n\n        return i.prototype = e.prototype, _t21.prototype = new i(), _t21.__super__ = e.prototype, _t21;\n      },\n          n = {}.hasOwnProperty;\n\n      e.AttachmentManager = function (n) {\n        function i(t) {\n          var e, n, i;\n\n          for (null == t && (t = []), this.managedAttachments = {}, n = 0, i = t.length; i > n; n++) {\n            e = t[n], this.manageAttachment(e);\n          }\n        }\n\n        return t(i, n), i.prototype.getAttachments = function () {\n          var t, e, n, i;\n          n = this.managedAttachments, i = [];\n\n          for (e in n) {\n            t = n[e], i.push(t);\n          }\n\n          return i;\n        }, i.prototype.manageAttachment = function (t) {\n          var n, i;\n          return null != (n = this.managedAttachments)[i = t.id] ? n[i] : n[i] = new e.ManagedAttachment(this, t);\n        }, i.prototype.attachmentIsManaged = function (t) {\n          return t.id in this.managedAttachments;\n        }, i.prototype.requestRemovalOfAttachment = function (t) {\n          var e;\n          return this.attachmentIsManaged(t) && null != (e = this.delegate) && \"function\" == typeof e.attachmentManagerDidRequestRemovalOfAttachment ? e.attachmentManagerDidRequestRemovalOfAttachment(t) : void 0;\n        }, i.prototype.unmanageAttachment = function (t) {\n          var e;\n          return e = this.managedAttachments[t.id], delete this.managedAttachments[t.id], e;\n        }, i;\n      }(e.BasicObject);\n    }.call(this), function () {\n      var t, n, i, o, r, s, a, u, c, l, h;\n      t = e.elementContainsNode, n = e.findChildIndexOfNode, r = e.nodeIsBlockStart, s = e.nodeIsBlockStartComment, o = e.nodeIsBlockContainer, a = e.nodeIsCursorTarget, u = e.nodeIsEmptyTextNode, c = e.nodeIsTextNode, i = e.nodeIsAttachmentElement, l = e.tagName, h = e.walkTree, e.LocationMapper = function () {\n        function e(t) {\n          this.element = t;\n        }\n\n        var p, d, f, g;\n        return e.prototype.findLocationFromContainerAndOffset = function (e, i, o) {\n          var s, u, l, p, g, m, v;\n\n          for (m = (null != o ? o : {\n            strict: !0\n          }).strict, u = 0, l = !1, p = {\n            index: 0,\n            offset: 0\n          }, (s = this.findAttachmentElementParentForNode(e)) && (e = s.parentNode, i = n(s)), v = h(this.element, {\n            usingFilter: f\n          }); v.nextNode();) {\n            if (g = v.currentNode, g === e && c(e)) {\n              a(g) || (p.offset += i);\n              break;\n            }\n\n            if (g.parentNode === e) {\n              if (u++ === i) break;\n            } else if (!t(e, g) && u > 0) break;\n\n            r(g, {\n              strict: m\n            }) ? (l && p.index++, p.offset = 0, l = !0) : p.offset += d(g);\n          }\n\n          return p;\n        }, e.prototype.findContainerAndOffsetFromLocation = function (t) {\n          var e, i, s, u, l;\n\n          if (0 === t.index && 0 === t.offset) {\n            for (e = this.element, u = 0; e.firstChild;) {\n              if (e = e.firstChild, o(e)) {\n                u = 1;\n                break;\n              }\n            }\n\n            return [e, u];\n          }\n\n          if (l = this.findNodeAndOffsetFromLocation(t), i = l[0], s = l[1], i) {\n            if (c(i)) 0 === d(i) ? (e = i.parentNode.parentNode, u = n(i.parentNode), a(i, {\n              name: \"right\"\n            }) && u++) : (e = i, u = t.offset - s);else {\n              if (e = i.parentNode, !r(i.previousSibling) && !o(e)) for (; i === e.lastChild && (i = e, e = e.parentNode, !o(e));) {\n                ;\n              }\n              u = n(i), 0 !== t.offset && u++;\n            }\n            return [e, u];\n          }\n        }, e.prototype.findNodeAndOffsetFromLocation = function (t) {\n          var e, n, i, o, r, s, u, l;\n\n          for (u = 0, l = this.getSignificantNodesForIndex(t.index), n = 0, i = l.length; i > n; n++) {\n            if (e = l[n], o = d(e), t.offset <= u + o) if (c(e)) {\n              if (r = e, s = u, t.offset === s && a(r)) break;\n            } else r || (r = e, s = u);\n            if (u += o, u > t.offset) break;\n          }\n\n          return [r, s];\n        }, e.prototype.findAttachmentElementParentForNode = function (t) {\n          for (; t && t !== this.element;) {\n            if (i(t)) return t;\n            t = t.parentNode;\n          }\n        }, e.prototype.getSignificantNodesForIndex = function (t) {\n          var e, n, i, o, r;\n\n          for (i = [], r = h(this.element, {\n            usingFilter: p\n          }), o = !1; r.nextNode();) {\n            if (n = r.currentNode, s(n)) {\n              if (\"undefined\" != typeof e && null !== e ? e++ : e = 0, e === t) o = !0;else if (o) break;\n            } else o && i.push(n);\n          }\n\n          return i;\n        }, d = function d(t) {\n          var e;\n          return t.nodeType === Node.TEXT_NODE ? a(t) ? 0 : (e = t.textContent, e.length) : \"br\" === l(t) || i(t) ? 1 : 0;\n        }, p = function p(t) {\n          return g(t) === NodeFilter.FILTER_ACCEPT ? f(t) : NodeFilter.FILTER_REJECT;\n        }, g = function g(t) {\n          return u(t) ? NodeFilter.FILTER_REJECT : NodeFilter.FILTER_ACCEPT;\n        }, f = function f(t) {\n          return i(t.parentNode) ? NodeFilter.FILTER_REJECT : NodeFilter.FILTER_ACCEPT;\n        }, e;\n      }();\n    }.call(this), function () {\n      var t,\n          n,\n          i = [].slice;\n      t = e.getDOMRange, n = e.setDOMRange, e.PointMapper = function () {\n        function e() {}\n\n        return e.prototype.createDOMRangeFromPoint = function (e) {\n          var i, o, r, s, a, u, c, l;\n          if (c = e.x, l = e.y, document.caretPositionFromPoint) return a = document.caretPositionFromPoint(c, l), r = a.offsetNode, o = a.offset, i = document.createRange(), i.setStart(r, o), i;\n          if (document.caretRangeFromPoint) return document.caretRangeFromPoint(c, l);\n\n          if (document.body.createTextRange) {\n            s = t();\n\n            try {\n              u = document.body.createTextRange(), u.moveToPoint(c, l), u.select();\n            } catch (h) {}\n\n            return i = t(), n(s), i;\n          }\n        }, e.prototype.getClientRectsForDOMRange = function (t) {\n          var e, n, o;\n          return n = i.call(t.getClientRects()), o = n[0], e = n[n.length - 1], [o, e];\n        }, e;\n      }();\n    }.call(this), function () {\n      var t,\n          n = function n(t, e) {\n        return function () {\n          return t.apply(e, arguments);\n        };\n      },\n          i = function i(t, e) {\n        function n() {\n          this.constructor = t;\n        }\n\n        for (var i in e) {\n          o.call(e, i) && (t[i] = e[i]);\n        }\n\n        return n.prototype = e.prototype, t.prototype = new n(), t.__super__ = e.prototype, t;\n      },\n          o = {}.hasOwnProperty,\n          r = [].indexOf || function (t) {\n        for (var e = 0, n = this.length; n > e; e++) {\n          if (e in this && this[e] === t) return e;\n        }\n\n        return -1;\n      };\n\n      t = e.getDOMRange, e.SelectionChangeObserver = function (e) {\n        function o() {\n          this.run = n(this.run, this), this.update = n(this.update, this), this.selectionManagers = [];\n        }\n\n        var s;\n        return i(o, e), o.prototype.start = function () {\n          return this.started ? void 0 : (this.started = !0, \"onselectionchange\" in document ? document.addEventListener(\"selectionchange\", this.update, !0) : this.run());\n        }, o.prototype.stop = function () {\n          return this.started ? (this.started = !1, document.removeEventListener(\"selectionchange\", this.update, !0)) : void 0;\n        }, o.prototype.registerSelectionManager = function (t) {\n          return r.call(this.selectionManagers, t) < 0 ? (this.selectionManagers.push(t), this.start()) : void 0;\n        }, o.prototype.unregisterSelectionManager = function (t) {\n          var e;\n          return this.selectionManagers = function () {\n            var n, i, o, r;\n\n            for (o = this.selectionManagers, r = [], n = 0, i = o.length; i > n; n++) {\n              e = o[n], e !== t && r.push(e);\n            }\n\n            return r;\n          }.call(this), 0 === this.selectionManagers.length ? this.stop() : void 0;\n        }, o.prototype.notifySelectionManagersOfSelectionChange = function () {\n          var t, e, n, i, o;\n\n          for (n = this.selectionManagers, i = [], t = 0, e = n.length; e > t; t++) {\n            o = n[t], i.push(o.selectionDidChange());\n          }\n\n          return i;\n        }, o.prototype.update = function () {\n          var e;\n          return e = t(), s(e, this.domRange) ? void 0 : (this.domRange = e, this.notifySelectionManagersOfSelectionChange());\n        }, o.prototype.reset = function () {\n          return this.domRange = null, this.update();\n        }, o.prototype.run = function () {\n          return this.started ? (this.update(), requestAnimationFrame(this.run)) : void 0;\n        }, s = function s(t, e) {\n          return (null != t ? t.startContainer : void 0) === (null != e ? e.startContainer : void 0) && (null != t ? t.startOffset : void 0) === (null != e ? e.startOffset : void 0) && (null != t ? t.endContainer : void 0) === (null != e ? e.endContainer : void 0) && (null != t ? t.endOffset : void 0) === (null != e ? e.endOffset : void 0);\n        }, o;\n      }(e.BasicObject), null == e.selectionChangeObserver && (e.selectionChangeObserver = new e.SelectionChangeObserver());\n    }.call(this), function () {\n      var t,\n          n,\n          i,\n          o,\n          r,\n          s,\n          a,\n          u,\n          c,\n          l,\n          h = function h(t, e) {\n        return function () {\n          return t.apply(e, arguments);\n        };\n      },\n          p = function p(t, e) {\n        function n() {\n          this.constructor = t;\n        }\n\n        for (var i in e) {\n          d.call(e, i) && (t[i] = e[i]);\n        }\n\n        return n.prototype = e.prototype, t.prototype = new n(), t.__super__ = e.prototype, t;\n      },\n          d = {}.hasOwnProperty;\n\n      i = e.getDOMSelection, n = e.getDOMRange, l = e.setDOMRange, t = e.elementContainsNode, s = e.nodeIsCursorTarget, r = e.innerElementIsActive, o = e.handleEvent, a = e.normalizeRange, u = e.rangeIsCollapsed, c = e.rangesAreEqual, e.SelectionManager = function (d) {\n        function f(t) {\n          this.element = t, this.selectionDidChange = h(this.selectionDidChange, this), this.didMouseDown = h(this.didMouseDown, this), this.locationMapper = new e.LocationMapper(this.element), this.pointMapper = new e.PointMapper(), this.lockCount = 0, o(\"mousedown\", {\n            onElement: this.element,\n            withCallback: this.didMouseDown\n          });\n        }\n\n        return p(f, d), f.prototype.getLocationRange = function (t) {\n          var e, i;\n          return null == t && (t = {}), e = t.strict === !1 ? this.createLocationRangeFromDOMRange(n(), {\n            strict: !1\n          }) : t.ignoreLock ? this.currentLocationRange : null != (i = this.lockedLocationRange) ? i : this.currentLocationRange;\n        }, f.prototype.setLocationRange = function (t) {\n          var e;\n          if (!this.lockedLocationRange) return t = a(t), (e = this.createDOMRangeFromLocationRange(t)) ? (l(e), this.updateCurrentLocationRange(t)) : void 0;\n        }, f.prototype.setLocationRangeFromPointRange = function (t) {\n          var e, n;\n          return t = a(t), n = this.getLocationAtPoint(t[0]), e = this.getLocationAtPoint(t[1]), this.setLocationRange([n, e]);\n        }, f.prototype.getClientRectAtLocationRange = function (t) {\n          var e;\n          return (e = this.createDOMRangeFromLocationRange(t)) ? this.getClientRectsForDOMRange(e)[1] : void 0;\n        }, f.prototype.locationIsCursorTarget = function (t) {\n          var e, n, i;\n          return i = this.findNodeAndOffsetFromLocation(t), e = i[0], n = i[1], s(e);\n        }, f.prototype.lock = function () {\n          return 0 === this.lockCount++ ? (this.updateCurrentLocationRange(), this.lockedLocationRange = this.getLocationRange()) : void 0;\n        }, f.prototype.unlock = function () {\n          var t;\n          return 0 === --this.lockCount && (t = this.lockedLocationRange, this.lockedLocationRange = null, null != t) ? this.setLocationRange(t) : void 0;\n        }, f.prototype.clearSelection = function () {\n          var t;\n          return null != (t = i()) ? t.removeAllRanges() : void 0;\n        }, f.prototype.selectionIsCollapsed = function () {\n          var t;\n          return (null != (t = n()) ? t.collapsed : void 0) === !0;\n        }, f.prototype.selectionIsExpanded = function () {\n          return !this.selectionIsCollapsed();\n        }, f.prototype.createLocationRangeFromDOMRange = function (t, e) {\n          var n, i;\n          if (null != t && this.domRangeWithinElement(t) && (i = this.findLocationFromContainerAndOffset(t.startContainer, t.startOffset, e))) return t.collapsed || (n = this.findLocationFromContainerAndOffset(t.endContainer, t.endOffset, e)), a([i, n]);\n        }, f.proxyMethod(\"locationMapper.findLocationFromContainerAndOffset\"), f.proxyMethod(\"locationMapper.findContainerAndOffsetFromLocation\"), f.proxyMethod(\"locationMapper.findNodeAndOffsetFromLocation\"), f.proxyMethod(\"pointMapper.createDOMRangeFromPoint\"), f.proxyMethod(\"pointMapper.getClientRectsForDOMRange\"), f.prototype.didMouseDown = function () {\n          return this.pauseTemporarily();\n        }, f.prototype.pauseTemporarily = function () {\n          var e, n, i, r;\n          return this.paused = !0, n = function (e) {\n            return function () {\n              var n, o, s;\n\n              for (e.paused = !1, clearTimeout(r), o = 0, s = i.length; s > o; o++) {\n                n = i[o], n.destroy();\n              }\n\n              return t(document, e.element) ? e.selectionDidChange() : void 0;\n            };\n          }(this), r = setTimeout(n, 200), i = function () {\n            var t, i, r, s;\n\n            for (r = [\"mousemove\", \"keydown\"], s = [], t = 0, i = r.length; i > t; t++) {\n              e = r[t], s.push(o(e, {\n                onElement: document,\n                withCallback: n\n              }));\n            }\n\n            return s;\n          }();\n        }, f.prototype.selectionDidChange = function () {\n          return this.paused || r(this.element) ? void 0 : this.updateCurrentLocationRange();\n        }, f.prototype.updateCurrentLocationRange = function (t) {\n          var e;\n          return (null != t ? t : t = this.createLocationRangeFromDOMRange(n())) && !c(t, this.currentLocationRange) ? (this.currentLocationRange = t, null != (e = this.delegate) && \"function\" == typeof e.locationRangeDidChange ? e.locationRangeDidChange(this.currentLocationRange.slice(0)) : void 0) : void 0;\n        }, f.prototype.createDOMRangeFromLocationRange = function (t) {\n          var e, n, i, o;\n          return i = this.findContainerAndOffsetFromLocation(t[0]), n = u(t) ? i : null != (o = this.findContainerAndOffsetFromLocation(t[1])) ? o : i, null != i && null != n ? (e = document.createRange(), e.setStart.apply(e, i), e.setEnd.apply(e, n), e) : void 0;\n        }, f.prototype.getLocationAtPoint = function (t) {\n          var e, n;\n          return (e = this.createDOMRangeFromPoint(t)) && null != (n = this.createLocationRangeFromDOMRange(e)) ? n[0] : void 0;\n        }, f.prototype.domRangeWithinElement = function (e) {\n          return e.collapsed ? t(this.element, e.startContainer) : t(this.element, e.startContainer) && t(this.element, e.endContainer);\n        }, f;\n      }(e.BasicObject);\n    }.call(this), function () {\n      var t,\n          n,\n          i,\n          o,\n          r = function r(t, e) {\n        function n() {\n          this.constructor = t;\n        }\n\n        for (var i in e) {\n          s.call(e, i) && (t[i] = e[i]);\n        }\n\n        return n.prototype = e.prototype, t.prototype = new n(), t.__super__ = e.prototype, t;\n      },\n          s = {}.hasOwnProperty,\n          a = [].slice;\n\n      i = e.rangeIsCollapsed, o = e.rangesAreEqual, n = e.objectsAreEqual, t = e.getBlockConfig, e.EditorController = function (s) {\n        function u(t) {\n          var n, i;\n          this.editorElement = t.editorElement, n = t.document, i = t.html, this.selectionManager = new e.SelectionManager(this.editorElement), this.selectionManager.delegate = this, this.composition = new e.Composition(), this.composition.delegate = this, this.attachmentManager = new e.AttachmentManager(this.composition.getAttachments()), this.attachmentManager.delegate = this, this.inputController = new e[\"Level\" + e.config.input.getLevel() + \"InputController\"](this.editorElement), this.inputController.delegate = this, this.inputController.responder = this.composition, this.compositionController = new e.CompositionController(this.editorElement, this.composition), this.compositionController.delegate = this, this.toolbarController = new e.ToolbarController(this.editorElement.toolbarElement), this.toolbarController.delegate = this, this.editor = new e.Editor(this.composition, this.selectionManager, this.editorElement), null != n ? this.editor.loadDocument(n) : this.editor.loadHTML(i);\n        }\n\n        var c;\n        return r(u, s), u.prototype.registerSelectionManager = function () {\n          return e.selectionChangeObserver.registerSelectionManager(this.selectionManager);\n        }, u.prototype.unregisterSelectionManager = function () {\n          return e.selectionChangeObserver.unregisterSelectionManager(this.selectionManager);\n        }, u.prototype.render = function () {\n          return this.compositionController.render();\n        }, u.prototype.reparse = function () {\n          return this.composition.replaceHTML(this.editorElement.innerHTML);\n        }, u.prototype.compositionDidChangeDocument = function () {\n          return this.notifyEditorElement(\"document-change\"), this.handlingInput ? void 0 : this.render();\n        }, u.prototype.compositionDidChangeCurrentAttributes = function (t) {\n          return this.currentAttributes = t, this.toolbarController.updateAttributes(this.currentAttributes), this.updateCurrentActions(), this.notifyEditorElement(\"attributes-change\", {\n            attributes: this.currentAttributes\n          });\n        }, u.prototype.compositionDidPerformInsertionAtRange = function (t) {\n          return this.pasting ? this.pastedRange = t : void 0;\n        }, u.prototype.compositionShouldAcceptFile = function (t) {\n          return this.notifyEditorElement(\"file-accept\", {\n            file: t\n          });\n        }, u.prototype.compositionDidAddAttachment = function (t) {\n          var e;\n          return e = this.attachmentManager.manageAttachment(t), this.notifyEditorElement(\"attachment-add\", {\n            attachment: e\n          });\n        }, u.prototype.compositionDidEditAttachment = function (t) {\n          var e;\n          return this.compositionController.rerenderViewForObject(t), e = this.attachmentManager.manageAttachment(t), this.notifyEditorElement(\"attachment-edit\", {\n            attachment: e\n          }), this.notifyEditorElement(\"change\");\n        }, u.prototype.compositionDidChangeAttachmentPreviewURL = function (t) {\n          return this.compositionController.invalidateViewForObject(t), this.notifyEditorElement(\"change\");\n        }, u.prototype.compositionDidRemoveAttachment = function (t) {\n          var e;\n          return e = this.attachmentManager.unmanageAttachment(t), this.notifyEditorElement(\"attachment-remove\", {\n            attachment: e\n          });\n        }, u.prototype.compositionDidStartEditingAttachment = function (t, e) {\n          return this.attachmentLocationRange = this.composition.document.getLocationRangeOfAttachment(t), this.compositionController.installAttachmentEditorForAttachment(t, e), this.selectionManager.setLocationRange(this.attachmentLocationRange);\n        }, u.prototype.compositionDidStopEditingAttachment = function () {\n          return this.compositionController.uninstallAttachmentEditor(), this.attachmentLocationRange = null;\n        }, u.prototype.compositionDidRequestChangingSelectionToLocationRange = function (t) {\n          return !this.loadingSnapshot || this.isFocused() ? (this.requestedLocationRange = t, this.compositionRevisionWhenLocationRangeRequested = this.composition.revision, this.handlingInput ? void 0 : this.render()) : void 0;\n        }, u.prototype.compositionWillLoadSnapshot = function () {\n          return this.loadingSnapshot = !0;\n        }, u.prototype.compositionDidLoadSnapshot = function () {\n          return this.compositionController.refreshViewCache(), this.render(), this.loadingSnapshot = !1;\n        }, u.prototype.getSelectionManager = function () {\n          return this.selectionManager;\n        }, u.proxyMethod(\"getSelectionManager().setLocationRange\"), u.proxyMethod(\"getSelectionManager().getLocationRange\"), u.prototype.attachmentManagerDidRequestRemovalOfAttachment = function (t) {\n          return this.removeAttachment(t);\n        }, u.prototype.compositionControllerWillSyncDocumentView = function () {\n          return this.inputController.editorWillSyncDocumentView(), this.selectionManager.lock(), this.selectionManager.clearSelection();\n        }, u.prototype.compositionControllerDidSyncDocumentView = function () {\n          return this.inputController.editorDidSyncDocumentView(), this.selectionManager.unlock(), this.updateCurrentActions(), this.notifyEditorElement(\"sync\");\n        }, u.prototype.compositionControllerDidRender = function () {\n          return null != this.requestedLocationRange && (this.compositionRevisionWhenLocationRangeRequested === this.composition.revision && this.selectionManager.setLocationRange(this.requestedLocationRange), this.requestedLocationRange = null, this.compositionRevisionWhenLocationRangeRequested = null), this.renderedCompositionRevision !== this.composition.revision && (this.runEditorFilters(), this.composition.updateCurrentAttributes(), this.notifyEditorElement(\"render\")), this.renderedCompositionRevision = this.composition.revision;\n        }, u.prototype.compositionControllerDidFocus = function () {\n          return this.toolbarController.hideDialog(), this.notifyEditorElement(\"focus\");\n        }, u.prototype.compositionControllerDidBlur = function () {\n          return this.notifyEditorElement(\"blur\");\n        }, u.prototype.compositionControllerDidSelectAttachment = function (t, e) {\n          return this.composition.editAttachment(t, e);\n        }, u.prototype.compositionControllerDidRequestDeselectingAttachment = function (t) {\n          var e, n;\n          return e = null != (n = this.attachmentLocationRange) ? n : this.composition.document.getLocationRangeOfAttachment(t), this.selectionManager.setLocationRange(e[1]);\n        }, u.prototype.compositionControllerWillUpdateAttachment = function (t) {\n          return this.editor.recordUndoEntry(\"Edit Attachment\", {\n            context: t.id,\n            consolidatable: !0\n          });\n        }, u.prototype.compositionControllerDidRequestRemovalOfAttachment = function (t) {\n          return this.removeAttachment(t);\n        }, u.prototype.inputControllerWillHandleInput = function () {\n          return this.handlingInput = !0, this.requestedRender = !1;\n        }, u.prototype.inputControllerDidRequestRender = function () {\n          return this.requestedRender = !0;\n        }, u.prototype.inputControllerDidHandleInput = function () {\n          return this.handlingInput = !1, this.requestedRender ? (this.requestedRender = !1, this.render()) : void 0;\n        }, u.prototype.inputControllerDidAllowUnhandledInput = function () {\n          return this.notifyEditorElement(\"change\");\n        }, u.prototype.inputControllerDidRequestReparse = function () {\n          return this.reparse();\n        }, u.prototype.inputControllerWillPerformTyping = function () {\n          return this.recordTypingUndoEntry();\n        }, u.prototype.inputControllerWillPerformFormatting = function (t) {\n          return this.recordFormattingUndoEntry(t);\n        }, u.prototype.inputControllerWillCutText = function () {\n          return this.editor.recordUndoEntry(\"Cut\");\n        }, u.prototype.inputControllerWillPaste = function (t) {\n          return this.editor.recordUndoEntry(\"Paste\"), this.pasting = !0, this.notifyEditorElement(\"before-paste\", {\n            paste: t\n          });\n        }, u.prototype.inputControllerDidPaste = function (t) {\n          return t.range = this.pastedRange, this.pastedRange = null, this.pasting = null, this.notifyEditorElement(\"paste\", {\n            paste: t\n          });\n        }, u.prototype.inputControllerWillMoveText = function () {\n          return this.editor.recordUndoEntry(\"Move\");\n        }, u.prototype.inputControllerWillAttachFiles = function () {\n          return this.editor.recordUndoEntry(\"Drop Files\");\n        }, u.prototype.inputControllerWillPerformUndo = function () {\n          return this.editor.undo();\n        }, u.prototype.inputControllerWillPerformRedo = function () {\n          return this.editor.redo();\n        }, u.prototype.inputControllerDidReceiveKeyboardCommand = function (t) {\n          return this.toolbarController.applyKeyboardCommand(t);\n        }, u.prototype.inputControllerDidStartDrag = function () {\n          return this.locationRangeBeforeDrag = this.selectionManager.getLocationRange();\n        }, u.prototype.inputControllerDidReceiveDragOverPoint = function (t) {\n          return this.selectionManager.setLocationRangeFromPointRange(t);\n        }, u.prototype.inputControllerDidCancelDrag = function () {\n          return this.selectionManager.setLocationRange(this.locationRangeBeforeDrag), this.locationRangeBeforeDrag = null;\n        }, u.prototype.locationRangeDidChange = function (t) {\n          return this.composition.updateCurrentAttributes(), this.updateCurrentActions(), this.attachmentLocationRange && !o(this.attachmentLocationRange, t) && this.composition.stopEditingAttachment(), this.notifyEditorElement(\"selection-change\");\n        }, u.prototype.toolbarDidClickButton = function () {\n          return this.getLocationRange() ? void 0 : this.setLocationRange({\n            index: 0,\n            offset: 0\n          });\n        }, u.prototype.toolbarDidInvokeAction = function (t) {\n          return this.invokeAction(t);\n        }, u.prototype.toolbarDidToggleAttribute = function (t) {\n          return this.recordFormattingUndoEntry(t), this.composition.toggleCurrentAttribute(t), this.render(), this.selectionFrozen ? void 0 : this.editorElement.focus();\n        }, u.prototype.toolbarDidUpdateAttribute = function (t, e) {\n          return this.recordFormattingUndoEntry(t), this.composition.setCurrentAttribute(t, e), this.render(), this.selectionFrozen ? void 0 : this.editorElement.focus();\n        }, u.prototype.toolbarDidRemoveAttribute = function (t) {\n          return this.recordFormattingUndoEntry(t), this.composition.removeCurrentAttribute(t), this.render(), this.selectionFrozen ? void 0 : this.editorElement.focus();\n        }, u.prototype.toolbarWillShowDialog = function () {\n          return this.composition.expandSelectionForEditing(), this.freezeSelection();\n        }, u.prototype.toolbarDidShowDialog = function (t) {\n          return this.notifyEditorElement(\"toolbar-dialog-show\", {\n            dialogName: t\n          });\n        }, u.prototype.toolbarDidHideDialog = function (t) {\n          return this.thawSelection(), this.editorElement.focus(), this.notifyEditorElement(\"toolbar-dialog-hide\", {\n            dialogName: t\n          });\n        }, u.prototype.freezeSelection = function () {\n          return this.selectionFrozen ? void 0 : (this.selectionManager.lock(), this.composition.freezeSelection(), this.selectionFrozen = !0, this.render());\n        }, u.prototype.thawSelection = function () {\n          return this.selectionFrozen ? (this.composition.thawSelection(), this.selectionManager.unlock(), this.selectionFrozen = !1, this.render()) : void 0;\n        }, u.prototype.actions = {\n          undo: {\n            test: function test() {\n              return this.editor.canUndo();\n            },\n            perform: function perform() {\n              return this.editor.undo();\n            }\n          },\n          redo: {\n            test: function test() {\n              return this.editor.canRedo();\n            },\n            perform: function perform() {\n              return this.editor.redo();\n            }\n          },\n          link: {\n            test: function test() {\n              return this.editor.canActivateAttribute(\"href\");\n            }\n          },\n          increaseNestingLevel: {\n            test: function test() {\n              return this.editor.canIncreaseNestingLevel();\n            },\n            perform: function perform() {\n              return this.editor.increaseNestingLevel() && this.render();\n            }\n          },\n          decreaseNestingLevel: {\n            test: function test() {\n              return this.editor.canDecreaseNestingLevel();\n            },\n            perform: function perform() {\n              return this.editor.decreaseNestingLevel() && this.render();\n            }\n          },\n          attachFiles: {\n            test: function test() {\n              return !0;\n            },\n            perform: function perform() {\n              return e.config.input.pickFiles(this.editor.insertFiles);\n            }\n          }\n        }, u.prototype.canInvokeAction = function (t) {\n          var e, n;\n          return this.actionIsExternal(t) ? !0 : !!(null != (e = this.actions[t]) && null != (n = e.test) ? n.call(this) : void 0);\n        }, u.prototype.invokeAction = function (t) {\n          var e, n;\n          return this.actionIsExternal(t) ? this.notifyEditorElement(\"action-invoke\", {\n            actionName: t\n          }) : null != (e = this.actions[t]) && null != (n = e.perform) ? n.call(this) : void 0;\n        }, u.prototype.actionIsExternal = function (t) {\n          return /^x-./.test(t);\n        }, u.prototype.getCurrentActions = function () {\n          var t, e;\n          e = {};\n\n          for (t in this.actions) {\n            e[t] = this.canInvokeAction(t);\n          }\n\n          return e;\n        }, u.prototype.updateCurrentActions = function () {\n          var t;\n          return t = this.getCurrentActions(), n(t, this.currentActions) ? void 0 : (this.currentActions = t, this.toolbarController.updateActions(this.currentActions), this.notifyEditorElement(\"actions-change\", {\n            actions: this.currentActions\n          }));\n        }, u.prototype.runEditorFilters = function () {\n          var t, e, n, i, o, r, s, a;\n\n          for (a = this.composition.getSnapshot(), o = this.editor.filters, n = 0, i = o.length; i > n; n++) {\n            e = o[n], t = a.document, s = a.selectedRange, a = null != (r = e.call(this.editor, a)) ? r : {}, null == a.document && (a.document = t), null == a.selectedRange && (a.selectedRange = s);\n          }\n\n          return c(a, this.composition.getSnapshot()) ? void 0 : this.composition.loadSnapshot(a);\n        }, c = function c(t, e) {\n          return o(t.selectedRange, e.selectedRange) && t.document.isEqualTo(e.document);\n        }, u.prototype.updateInputElement = function () {\n          var t, n;\n          return t = this.compositionController.getSerializableElement(), n = e.serializeToContentType(t, \"text/html\"), this.editorElement.setInputElementValue(n);\n        }, u.prototype.notifyEditorElement = function (t, e) {\n          switch (t) {\n            case \"document-change\":\n              this.documentChangedSinceLastRender = !0;\n              break;\n\n            case \"render\":\n              this.documentChangedSinceLastRender && (this.documentChangedSinceLastRender = !1, this.notifyEditorElement(\"change\"));\n              break;\n\n            case \"change\":\n            case \"attachment-add\":\n            case \"attachment-edit\":\n            case \"attachment-remove\":\n              this.updateInputElement();\n          }\n\n          return this.editorElement.notify(t, e);\n        }, u.prototype.removeAttachment = function (t) {\n          return this.editor.recordUndoEntry(\"Delete Attachment\"), this.composition.removeAttachment(t), this.render();\n        }, u.prototype.recordFormattingUndoEntry = function (e) {\n          var n, o;\n          return n = t(e), o = this.selectionManager.getLocationRange(), n || !i(o) ? this.editor.recordUndoEntry(\"Formatting\", {\n            context: this.getUndoContext(),\n            consolidatable: !0\n          }) : void 0;\n        }, u.prototype.recordTypingUndoEntry = function () {\n          return this.editor.recordUndoEntry(\"Typing\", {\n            context: this.getUndoContext(this.currentAttributes),\n            consolidatable: !0\n          });\n        }, u.prototype.getUndoContext = function () {\n          var t;\n          return t = 1 <= arguments.length ? a.call(arguments, 0) : [], [this.getLocationContext(), this.getTimeContext()].concat(a.call(t));\n        }, u.prototype.getLocationContext = function () {\n          var t;\n          return t = this.selectionManager.getLocationRange(), i(t) ? t[0].index : t;\n        }, u.prototype.getTimeContext = function () {\n          return e.config.undoInterval > 0 ? Math.floor(new Date().getTime() / e.config.undoInterval) : 0;\n        }, u.prototype.isFocused = function () {\n          var t;\n          return this.editorElement === (null != (t = this.editorElement.ownerDocument) ? t.activeElement : void 0);\n        }, u;\n      }(e.Controller);\n    }.call(this), function () {\n      var t, n, i, o, r, s;\n      n = e.browser, r = e.makeElement, s = e.triggerEvent, i = e.handleEvent, o = e.handleEventOnce, t = e.AttachmentView.attachmentSelector, e.registerElement(\"trix-editor\", function () {\n        var a, u, c, l, h, p, d, f;\n        return p = 0, u = function u(t) {\n          return !document.querySelector(\":focus\") && t.hasAttribute(\"autofocus\") && document.querySelector(\"[autofocus]\") === t ? t.focus() : void 0;\n        }, d = function d(t) {\n          return t.hasAttribute(\"contenteditable\") ? void 0 : (t.setAttribute(\"contenteditable\", \"\"), o(\"focus\", {\n            onElement: t,\n            withCallback: function withCallback() {\n              return c(t);\n            }\n          }));\n        }, a = function a(t) {\n          return t.hasAttribute(\"role\") ? void 0 : t.setAttribute(\"role\", \"textbox\");\n        }, c = function c(t) {\n          return h(t), f(t);\n        }, h = function h(t) {\n          return (\"function\" == typeof document.queryCommandSupported ? document.queryCommandSupported(\"enableObjectResizing\") : void 0) ? (document.execCommand(\"enableObjectResizing\", !1, !1), i(\"mscontrolselect\", {\n            onElement: t,\n            preventDefault: !0\n          })) : void 0;\n        }, f = function f() {\n          var t;\n          return (\"function\" == typeof document.queryCommandSupported ? document.queryCommandSupported(\"DefaultParagraphSeparator\") : void 0) && (t = e.config.blockAttributes[\"default\"].tagName, \"div\" === t || \"p\" === t) ? document.execCommand(\"DefaultParagraphSeparator\", !1, t) : void 0;\n        }, l = function () {\n          return n.forcesObjectResizing ? {\n            display: \"inline\",\n            width: \"auto\"\n          } : {\n            display: \"inline-block\",\n            width: \"1px\"\n          };\n        }(), {\n          defaultCSS: \"%t {\\n  display: block;\\n}\\n\\n%t:empty:not(:focus)::before {\\n  content: attr(placeholder);\\n  color: graytext;\\n  cursor: text;\\n}\\n\\n%t a[contenteditable=false] {\\n  cursor: text;\\n}\\n\\n%t img {\\n  max-width: 100%;\\n  height: auto;\\n}\\n\\n%t \" + t + \" figcaption textarea {\\n  resize: none;\\n}\\n\\n%t \" + t + \" figcaption textarea.trix-autoresize-clone {\\n  position: absolute;\\n  left: -9999px;\\n  max-height: 0px;\\n}\\n\\n%t \" + t + \" figcaption[data-trix-placeholder]:empty::before {\\n  content: attr(data-trix-placeholder);\\n  color: graytext;\\n}\\n\\n%t [data-trix-cursor-target] {\\n  display: \" + l.display + \" !important;\\n  width: \" + l.width + \" !important;\\n  padding: 0 !important;\\n  margin: 0 !important;\\n  border: none !important;\\n}\\n\\n%t [data-trix-cursor-target=left] {\\n  vertical-align: top !important;\\n  margin-left: -1px !important;\\n}\\n\\n%t [data-trix-cursor-target=right] {\\n  vertical-align: bottom !important;\\n  margin-right: -1px !important;\\n}\",\n          trixId: {\n            get: function get() {\n              return this.hasAttribute(\"trix-id\") ? this.getAttribute(\"trix-id\") : (this.setAttribute(\"trix-id\", ++p), this.trixId);\n            }\n          },\n          toolbarElement: {\n            get: function get() {\n              var t, e, n;\n              return this.hasAttribute(\"toolbar\") ? null != (e = this.ownerDocument) ? e.getElementById(this.getAttribute(\"toolbar\")) : void 0 : this.parentNode ? (n = \"trix-toolbar-\" + this.trixId, this.setAttribute(\"toolbar\", n), t = r(\"trix-toolbar\", {\n                id: n\n              }), this.parentNode.insertBefore(t, this), t) : void 0;\n            }\n          },\n          inputElement: {\n            get: function get() {\n              var t, e, n;\n              return this.hasAttribute(\"input\") ? null != (n = this.ownerDocument) ? n.getElementById(this.getAttribute(\"input\")) : void 0 : this.parentNode ? (e = \"trix-input-\" + this.trixId, this.setAttribute(\"input\", e), t = r(\"input\", {\n                type: \"hidden\",\n                id: e\n              }), this.parentNode.insertBefore(t, this.nextElementSibling), t) : void 0;\n            }\n          },\n          editor: {\n            get: function get() {\n              var t;\n              return null != (t = this.editorController) ? t.editor : void 0;\n            }\n          },\n          name: {\n            get: function get() {\n              var t;\n              return null != (t = this.inputElement) ? t.name : void 0;\n            }\n          },\n          value: {\n            get: function get() {\n              var t;\n              return null != (t = this.inputElement) ? t.value : void 0;\n            },\n            set: function set(t) {\n              var e;\n              return this.defaultValue = t, null != (e = this.editor) ? e.loadHTML(this.defaultValue) : void 0;\n            }\n          },\n          notify: function notify(t, e) {\n            return this.editorController ? s(\"trix-\" + t, {\n              onElement: this,\n              attributes: e\n            }) : void 0;\n          },\n          setInputElementValue: function setInputElementValue(t) {\n            var e;\n            return null != (e = this.inputElement) ? e.value = t : void 0;\n          },\n          initialize: function initialize() {\n            return d(this), a(this);\n          },\n          connect: function connect() {\n            return this.hasAttribute(\"data-trix-internal\") ? void 0 : (this.editorController || (s(\"trix-before-initialize\", {\n              onElement: this\n            }), this.editorController = new e.EditorController({\n              editorElement: this,\n              html: this.defaultValue = this.value\n            }), requestAnimationFrame(function (t) {\n              return function () {\n                return s(\"trix-initialize\", {\n                  onElement: t\n                });\n              };\n            }(this))), this.editorController.registerSelectionManager(), this.registerResetListener(), u(this));\n          },\n          disconnect: function disconnect() {\n            var t;\n            return null != (t = this.editorController) && t.unregisterSelectionManager(), this.unregisterResetListener();\n          },\n          registerResetListener: function registerResetListener() {\n            return this.resetListener = this.resetBubbled.bind(this), window.addEventListener(\"reset\", this.resetListener, !1);\n          },\n          unregisterResetListener: function unregisterResetListener() {\n            return window.removeEventListener(\"reset\", this.resetListener, !1);\n          },\n          resetBubbled: function resetBubbled(t) {\n            var e;\n            return t.target !== (null != (e = this.inputElement) ? e.form : void 0) || t.defaultPrevented ? void 0 : this.reset();\n          },\n          reset: function reset() {\n            return this.value = this.defaultValue;\n          }\n        };\n      }());\n    }.call(this), function () {}.call(this);\n  }).call(this), \"object\" == (typeof module === \"undefined\" ? \"undefined\" : _typeof(module)) && module.exports ? module.exports = e : \"function\" == typeof define && define.amd && define(e);\n}.call(this);","function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n/*! version : 5.2.3\r\n =========================================================\r\n bootstrap-datetimejs\r\n https://github.com/Eonasdan/bootstrap-datetimepicker\r\n Copyright (c) 2015 Jonathan Peterson\r\n =========================================================\r\n */\n\n/*\r\n The MIT License (MIT)\r\n\r\n Copyright (c) 2015 Jonathan Peterson\r\n\r\n Permission is hereby granted, free of charge, to any person obtaining a copy\r\n of this software and associated documentation files (the \"Software\"), to deal\r\n in the Software without restriction, including without limitation the rights\r\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\r\n copies of the Software, and to permit persons to whom the Software is\r\n furnished to do so, subject to the following conditions:\r\n\r\n The above copyright notice and this permission notice shall be included in\r\n all copies or substantial portions of the Software.\r\n\r\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\r\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\r\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\r\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\r\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\r\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\r\n THE SOFTWARE.\r\n */\n\n/*global define:false */\n\n/*global exports:false */\n\n/*global require:false */\n\n/*global jQuery:false */\n\n/*global moment:false */\n(function (factory) {\n  'use strict';\n\n  if (typeof define === 'function' && define.amd) {\n    // AMD is used - Register as an anonymous module.\n    define(['jquery', 'moment'], factory);\n  } else if ((typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) === 'object') {\n    module.exports = factory(require('jquery'), require('moment'));\n  } else {\n    // Neither AMD nor CommonJS used. Use global variables.\n    if (typeof jQuery === 'undefined') {\n      throw 'bootstrap-datetimepicker requires jQuery to be loaded first';\n    }\n\n    if (typeof moment === 'undefined') {\n      throw 'bootstrap-datetimepicker requires Moment.js to be loaded first';\n    }\n\n    factory(jQuery, moment);\n  }\n})(function ($, moment) {\n  'use strict';\n\n  if (!moment) {\n    throw new Error('bootstrap-datetimepicker requires Moment.js to be loaded first');\n  }\n\n  var dateTimePicker = function dateTimePicker(element, options) {\n    var picker = {},\n        date,\n        viewDate,\n        unset = true,\n        input,\n        component = false,\n        widget = false,\n        use24Hours,\n        minViewModeNumber = 0,\n        actualFormat,\n        parseFormats,\n        currentViewMode,\n        datePickerModes = [{\n      clsName: 'days',\n      navFnc: 'M',\n      navStep: 1\n    }, {\n      clsName: 'months',\n      navFnc: 'y',\n      navStep: 1\n    }, {\n      clsName: 'years',\n      navFnc: 'y',\n      navStep: 10\n    }, {\n      clsName: 'decades',\n      navFnc: 'y',\n      navStep: 100\n    }],\n        viewModes = ['days', 'months', 'years', 'decades'],\n        verticalModes = ['top', 'bottom', 'auto'],\n        horizontalModes = ['left', 'right', 'auto'],\n        toolbarPlacements = ['default', 'top', 'bottom'],\n        keyMap = {\n      'up': 38,\n      38: 'up',\n      'down': 40,\n      40: 'down',\n      'left': 37,\n      37: 'left',\n      'right': 39,\n      39: 'right',\n      'tab': 9,\n      9: 'tab',\n      'escape': 27,\n      27: 'escape',\n      'enter': 13,\n      13: 'enter',\n      'pageUp': 33,\n      33: 'pageUp',\n      'pageDown': 34,\n      34: 'pageDown',\n      'shift': 16,\n      16: 'shift',\n      'control': 17,\n      17: 'control',\n      'space': 32,\n      32: 'space',\n      't': 84,\n      84: 't',\n      'delete': 46,\n      46: 'delete'\n    },\n        keyState = {},\n\n    /********************************************************************************\r\n     *\r\n     * Private functions\r\n     *\r\n     ********************************************************************************/\n    hasTimeZone = function hasTimeZone() {\n      return moment.tz !== undefined && options.timeZone !== undefined && options.timeZone !== null && options.timeZone !== '';\n    },\n        getMoment = function getMoment(d) {\n      var returnMoment;\n\n      if (d === undefined || d === null) {\n        returnMoment = moment(); //TODO should this use format? and locale?\n      } else if (moment.isDate(d) || moment.isMoment(d)) {\n        // If the date that is passed in is already a Date() or moment() object,\n        // pass it directly to moment.\n        returnMoment = moment(d);\n      } else if (hasTimeZone()) {\n        // There is a string to parse and a default time zone\n        // parse with the tz function which takes a default time zone if it is not in the format string\n        returnMoment = moment.tz(d, parseFormats, options.useStrict, options.timeZone);\n      } else {\n        returnMoment = moment(d, parseFormats, options.useStrict);\n      }\n\n      if (hasTimeZone()) {\n        returnMoment.tz(options.timeZone);\n      }\n\n      return returnMoment;\n    },\n        isEnabled = function isEnabled(granularity) {\n      if (typeof granularity !== 'string' || granularity.length > 1) {\n        throw new TypeError('isEnabled expects a single character string parameter');\n      }\n\n      switch (granularity) {\n        case 'y':\n          return actualFormat.indexOf('Y') !== -1;\n\n        case 'M':\n          return actualFormat.indexOf('M') !== -1;\n\n        case 'd':\n          return actualFormat.toLowerCase().indexOf('d') !== -1;\n\n        case 'h':\n        case 'H':\n          return actualFormat.toLowerCase().indexOf('h') !== -1;\n\n        case 'm':\n          return actualFormat.indexOf('m') !== -1;\n\n        case 's':\n          return actualFormat.indexOf('s') !== -1;\n\n        default:\n          return false;\n      }\n    },\n        hasTime = function hasTime() {\n      return isEnabled('h') || isEnabled('m') || isEnabled('s');\n    },\n        hasDate = function hasDate() {\n      return isEnabled('y') || isEnabled('M') || isEnabled('d');\n    },\n        getDatePickerTemplate = function getDatePickerTemplate() {\n      var headTemplate = $('<thead>').append($('<tr>').append($('<th>').addClass('prev').attr('data-action', 'previous').append($('<span>').addClass(options.icons.previous))).append($('<th>').addClass('picker-switch').attr('data-action', 'pickerSwitch').attr('colspan', options.calendarWeeks ? '6' : '5')).append($('<th>').addClass('next').attr('data-action', 'next').append($('<span>').addClass(options.icons.next)))),\n          contTemplate = $('<tbody>').append($('<tr>').append($('<td>').attr('colspan', options.calendarWeeks ? '8' : '7')));\n      return [$('<div>').addClass('datepicker-days').append($('<table>').addClass('table-condensed').append(headTemplate).append($('<tbody>'))), $('<div>').addClass('datepicker-months').append($('<table>').addClass('table-condensed').append(headTemplate.clone()).append(contTemplate.clone())), $('<div>').addClass('datepicker-years').append($('<table>').addClass('table-condensed').append(headTemplate.clone()).append(contTemplate.clone())), $('<div>').addClass('datepicker-decades').append($('<table>').addClass('table-condensed').append(headTemplate.clone()).append(contTemplate.clone()))];\n    },\n        getTimePickerMainTemplate = function getTimePickerMainTemplate() {\n      var topRow = $('<tr>'),\n          middleRow = $('<tr>'),\n          bottomRow = $('<tr>');\n\n      if (isEnabled('h')) {\n        topRow.append($('<td>').append($('<a>').attr({\n          href: '#',\n          tabindex: '-1',\n          'title': options.tooltips.incrementHour\n        }).addClass('btn').attr('data-action', 'incrementHours').append($('<span>').addClass(options.icons.up))));\n        middleRow.append($('<td>').append($('<span>').addClass('timepicker-hour').attr({\n          'data-time-component': 'hours',\n          'title': options.tooltips.pickHour\n        }).attr('data-action', 'showHours')));\n        bottomRow.append($('<td>').append($('<a>').attr({\n          href: '#',\n          tabindex: '-1',\n          'title': options.tooltips.decrementHour\n        }).addClass('btn').attr('data-action', 'decrementHours').append($('<span>').addClass(options.icons.down))));\n      }\n\n      if (isEnabled('m')) {\n        if (isEnabled('h')) {\n          topRow.append($('<td>').addClass('separator'));\n          middleRow.append($('<td>').addClass('separator').html(':'));\n          bottomRow.append($('<td>').addClass('separator'));\n        }\n\n        topRow.append($('<td>').append($('<a>').attr({\n          href: '#',\n          tabindex: '-1',\n          'title': options.tooltips.incrementMinute\n        }).addClass('btn').attr('data-action', 'incrementMinutes').append($('<span>').addClass(options.icons.up))));\n        middleRow.append($('<td>').append($('<span>').addClass('timepicker-minute').attr({\n          'data-time-component': 'minutes',\n          'title': options.tooltips.pickMinute\n        }).attr('data-action', 'showMinutes')));\n        bottomRow.append($('<td>').append($('<a>').attr({\n          href: '#',\n          tabindex: '-1',\n          'title': options.tooltips.decrementMinute\n        }).addClass('btn').attr('data-action', 'decrementMinutes').append($('<span>').addClass(options.icons.down))));\n      }\n\n      if (isEnabled('s')) {\n        if (isEnabled('m')) {\n          topRow.append($('<td>').addClass('separator'));\n          middleRow.append($('<td>').addClass('separator').html(':'));\n          bottomRow.append($('<td>').addClass('separator'));\n        }\n\n        topRow.append($('<td>').append($('<a>').attr({\n          href: '#',\n          tabindex: '-1',\n          'title': options.tooltips.incrementSecond\n        }).addClass('btn').attr('data-action', 'incrementSeconds').append($('<span>').addClass(options.icons.up))));\n        middleRow.append($('<td>').append($('<span>').addClass('timepicker-second').attr({\n          'data-time-component': 'seconds',\n          'title': options.tooltips.pickSecond\n        }).attr('data-action', 'showSeconds')));\n        bottomRow.append($('<td>').append($('<a>').attr({\n          href: '#',\n          tabindex: '-1',\n          'title': options.tooltips.decrementSecond\n        }).addClass('btn').attr('data-action', 'decrementSeconds').append($('<span>').addClass(options.icons.down))));\n      }\n\n      if (!use24Hours) {\n        topRow.append($('<td>').addClass('separator'));\n        middleRow.append($('<td>').append($('<button>').addClass('btn btn-primary').attr({\n          'data-action': 'togglePeriod',\n          tabindex: '-1',\n          'title': options.tooltips.togglePeriod\n        })));\n        bottomRow.append($('<td>').addClass('separator'));\n      }\n\n      return $('<div>').addClass('timepicker-picker').append($('<table>').addClass('table-condensed').append([topRow, middleRow, bottomRow]));\n    },\n        getTimePickerTemplate = function getTimePickerTemplate() {\n      var hoursView = $('<div>').addClass('timepicker-hours').append($('<table>').addClass('table-condensed')),\n          minutesView = $('<div>').addClass('timepicker-minutes').append($('<table>').addClass('table-condensed')),\n          secondsView = $('<div>').addClass('timepicker-seconds').append($('<table>').addClass('table-condensed')),\n          ret = [getTimePickerMainTemplate()];\n\n      if (isEnabled('h')) {\n        ret.push(hoursView);\n      }\n\n      if (isEnabled('m')) {\n        ret.push(minutesView);\n      }\n\n      if (isEnabled('s')) {\n        ret.push(secondsView);\n      }\n\n      return ret;\n    },\n        getToolbar = function getToolbar() {\n      var row = [];\n\n      if (options.showTodayButton) {\n        row.push($('<td>').append($('<a>').attr({\n          'data-action': 'today',\n          'title': options.tooltips.today\n        }).append($('<span>').addClass(options.icons.today))));\n      }\n\n      if (!options.sideBySide && hasDate() && hasTime()) {\n        row.push($('<td>').append($('<a>').attr({\n          'data-action': 'togglePicker',\n          'href': '#',\n          'title': options.tooltips.selectTime\n        }).append($('<span>').addClass(options.icons.time))));\n      }\n\n      if (options.showClear) {\n        row.push($('<td>').append($('<a>').attr({\n          'data-action': 'clear',\n          'title': options.tooltips.clear\n        }).append($('<span>').addClass(options.icons.clear))));\n      }\n\n      if (options.showClose) {\n        row.push($('<td>').append($('<a>').attr({\n          'data-action': 'close',\n          'title': options.tooltips.close\n        }).append($('<span>').addClass(options.icons.close))));\n      }\n\n      return $('<table>').addClass('table-condensed').append($('<tbody>').append($('<tr>').append(row)));\n    },\n        getTemplate = function getTemplate() {\n      var template = $('<div>').addClass('bootstrap-datetimepicker-widget dropdown-menu'),\n          dateView = $('<div>').addClass('datepicker').append(getDatePickerTemplate()),\n          timeView = $('<div>').addClass('timepicker').append(getTimePickerTemplate()),\n          content = $('<ul>').addClass('list-unstyled'),\n          toolbar = $('<li>').addClass('picker-switch' + (options.collapse ? ' accordion-toggle' : '')).append(getToolbar());\n\n      if (options.inline) {\n        template.removeClass('dropdown-menu');\n      }\n\n      if (use24Hours) {\n        template.addClass('usetwentyfour');\n      }\n\n      if (isEnabled('s') && !use24Hours) {\n        template.addClass('wider');\n      }\n\n      if (options.sideBySide && hasDate() && hasTime()) {\n        template.addClass('timepicker-sbs');\n\n        if (options.toolbarPlacement === 'top') {\n          template.append(toolbar);\n        }\n\n        template.append($('<div>').addClass('row').append(dateView.addClass('col-md-6')).append(timeView.addClass('col-md-6')));\n\n        if (options.toolbarPlacement === 'bottom') {\n          template.append(toolbar);\n        }\n\n        return template;\n      }\n\n      if (options.toolbarPlacement === 'top') {\n        content.append(toolbar);\n      }\n\n      if (hasDate()) {\n        content.append($('<li>').addClass(options.collapse && hasTime() ? 'collapse show' : '').append(dateView));\n      }\n\n      if (options.toolbarPlacement === 'default') {\n        content.append(toolbar);\n      }\n\n      if (hasTime()) {\n        content.append($('<li>').addClass(options.collapse && hasDate() ? 'collapse' : '').append(timeView));\n      }\n\n      if (options.toolbarPlacement === 'bottom') {\n        content.append(toolbar);\n      }\n\n      return template.append(content);\n    },\n        dataToOptions = function dataToOptions() {\n      var eData,\n          dataOptions = {};\n\n      if (element.is('input') || options.inline) {\n        eData = element.data();\n      } else {\n        eData = element.find('input').data();\n      }\n\n      if (eData.dateOptions && eData.dateOptions instanceof Object) {\n        dataOptions = $.extend(true, dataOptions, eData.dateOptions);\n      }\n\n      $.each(options, function (key) {\n        var attributeName = 'date' + key.charAt(0).toUpperCase() + key.slice(1);\n\n        if (eData[attributeName] !== undefined) {\n          dataOptions[key] = eData[attributeName];\n        }\n      });\n      return dataOptions;\n    },\n        place = function place() {\n      var position = (component || element).position(),\n          offset = (component || element).offset(),\n          vertical = options.widgetPositioning.vertical,\n          horizontal = options.widgetPositioning.horizontal,\n          parent;\n\n      if (options.widgetParent) {\n        parent = options.widgetParent.append(widget);\n      } else if (element.is('input')) {\n        parent = element.after(widget).parent();\n      } else if (options.inline) {\n        parent = element.append(widget);\n        return;\n      } else {\n        parent = element;\n        element.children().first().after(widget);\n      } // Top and bottom logic\n\n\n      if (vertical === 'auto') {\n        if (offset.top + widget.height() * 1.5 >= $(window).height() + $(window).scrollTop() && widget.height() + element.outerHeight() < offset.top) {\n          vertical = 'top';\n        } else {\n          vertical = 'bottom';\n        }\n      } // Left and right logic\n\n\n      if (horizontal === 'auto') {\n        if (parent.width() < offset.left + widget.outerWidth() / 2 && offset.left + widget.outerWidth() > $(window).width()) {\n          horizontal = 'right';\n        } else {\n          horizontal = 'left';\n        }\n      }\n\n      if (vertical === 'top') {\n        widget.addClass('top').removeClass('bottom');\n      } else {\n        widget.addClass('bottom').removeClass('top');\n      }\n\n      if (horizontal === 'right') {\n        widget.addClass('pull-right');\n      } else {\n        widget.removeClass('pull-right');\n      } // find the first parent element that has a non-static css positioning\n\n\n      if (parent.css('position') === 'static') {\n        parent = parent.parents().filter(function () {\n          return $(this).css('position') !== 'static';\n        }).first();\n      }\n\n      if (parent.length === 0) {\n        throw new Error('datetimepicker component should be placed within a non-static positioned container');\n      }\n\n      widget.css({\n        top: vertical === 'top' ? 'auto' : position.top + element.outerHeight(),\n        bottom: vertical === 'top' ? parent.outerHeight() - (parent === element ? 0 : position.top) : 'auto',\n        left: horizontal === 'left' ? parent === element ? 0 : position.left : 'auto',\n        right: horizontal === 'left' ? 'auto' : parent.outerWidth() - element.outerWidth() - (parent === element ? 0 : position.left)\n      });\n    },\n        notifyEvent = function notifyEvent(e) {\n      if (e.type === 'dp.change' && (e.date && e.date.isSame(e.oldDate) || !e.date && !e.oldDate)) {\n        return;\n      }\n\n      element.trigger(e);\n    },\n        viewUpdate = function viewUpdate(e) {\n      if (e === 'y') {\n        e = 'YYYY';\n      }\n\n      notifyEvent({\n        type: 'dp.update',\n        change: e,\n        viewDate: viewDate.clone()\n      });\n    },\n        showMode = function showMode(dir) {\n      if (!widget) {\n        return;\n      }\n\n      if (dir) {\n        currentViewMode = Math.max(minViewModeNumber, Math.min(3, currentViewMode + dir));\n      }\n\n      widget.find('.datepicker > div').hide().filter('.datepicker-' + datePickerModes[currentViewMode].clsName).show();\n    },\n        fillDow = function fillDow() {\n      var row = $('<tr>'),\n          currentDate = viewDate.clone().startOf('w').startOf('d');\n\n      if (options.calendarWeeks === true) {\n        row.append($('<th>').addClass('cw').text('#'));\n      }\n\n      while (currentDate.isBefore(viewDate.clone().endOf('w'))) {\n        row.append($('<th>').addClass('dow').text(currentDate.format('dd')));\n        currentDate.add(1, 'd');\n      }\n\n      widget.find('.datepicker-days thead').append(row);\n    },\n        isInDisabledDates = function isInDisabledDates(testDate) {\n      return options.disabledDates[testDate.format('YYYY-MM-DD')] === true;\n    },\n        isInEnabledDates = function isInEnabledDates(testDate) {\n      return options.enabledDates[testDate.format('YYYY-MM-DD')] === true;\n    },\n        isInDisabledHours = function isInDisabledHours(testDate) {\n      return options.disabledHours[testDate.format('H')] === true;\n    },\n        isInEnabledHours = function isInEnabledHours(testDate) {\n      return options.enabledHours[testDate.format('H')] === true;\n    },\n        isValid = function isValid(targetMoment, granularity) {\n      if (!targetMoment.isValid()) {\n        return false;\n      }\n\n      if (options.disabledDates && granularity === 'd' && isInDisabledDates(targetMoment)) {\n        return false;\n      }\n\n      if (options.enabledDates && granularity === 'd' && !isInEnabledDates(targetMoment)) {\n        return false;\n      }\n\n      if (options.minDate && targetMoment.isBefore(options.minDate, granularity)) {\n        return false;\n      }\n\n      if (options.maxDate && targetMoment.isAfter(options.maxDate, granularity)) {\n        return false;\n      }\n\n      if (options.daysOfWeekDisabled && granularity === 'd' && options.daysOfWeekDisabled.indexOf(targetMoment.day()) !== -1) {\n        return false;\n      }\n\n      if (options.disabledHours && (granularity === 'h' || granularity === 'm' || granularity === 's') && isInDisabledHours(targetMoment)) {\n        return false;\n      }\n\n      if (options.enabledHours && (granularity === 'h' || granularity === 'm' || granularity === 's') && !isInEnabledHours(targetMoment)) {\n        return false;\n      }\n\n      if (options.disabledTimeIntervals && (granularity === 'h' || granularity === 'm' || granularity === 's')) {\n        var found = false;\n        $.each(options.disabledTimeIntervals, function () {\n          if (targetMoment.isBetween(this[0], this[1])) {\n            found = true;\n            return false;\n          }\n        });\n\n        if (found) {\n          return false;\n        }\n      }\n\n      return true;\n    },\n        fillMonths = function fillMonths() {\n      var spans = [],\n          monthsShort = viewDate.clone().startOf('y').startOf('d');\n\n      while (monthsShort.isSame(viewDate, 'y')) {\n        spans.push($('<span>').attr('data-action', 'selectMonth').addClass('month').text(monthsShort.format('MMM')));\n        monthsShort.add(1, 'M');\n      }\n\n      widget.find('.datepicker-months td').empty().append(spans);\n    },\n        updateMonths = function updateMonths() {\n      var monthsView = widget.find('.datepicker-months'),\n          monthsViewHeader = monthsView.find('th'),\n          months = monthsView.find('tbody').find('span');\n      monthsViewHeader.eq(0).find('span').attr('title', options.tooltips.prevYear);\n      monthsViewHeader.eq(1).attr('title', options.tooltips.selectYear);\n      monthsViewHeader.eq(2).find('span').attr('title', options.tooltips.nextYear);\n      monthsView.find('.disabled').removeClass('disabled');\n\n      if (!isValid(viewDate.clone().subtract(1, 'y'), 'y')) {\n        monthsViewHeader.eq(0).addClass('disabled');\n      }\n\n      monthsViewHeader.eq(1).text(viewDate.year());\n\n      if (!isValid(viewDate.clone().add(1, 'y'), 'y')) {\n        monthsViewHeader.eq(2).addClass('disabled');\n      }\n\n      months.removeClass('active');\n\n      if (date.isSame(viewDate, 'y') && !unset) {\n        months.eq(date.month()).addClass('active');\n      }\n\n      months.each(function (index) {\n        if (!isValid(viewDate.clone().month(index), 'M')) {\n          $(this).addClass('disabled');\n        }\n      });\n    },\n        updateYears = function updateYears() {\n      var yearsView = widget.find('.datepicker-years'),\n          yearsViewHeader = yearsView.find('th'),\n          startYear = viewDate.clone().subtract(5, 'y'),\n          endYear = viewDate.clone().add(6, 'y'),\n          html = '';\n      yearsViewHeader.eq(0).find('span').attr('title', options.tooltips.prevDecade);\n      yearsViewHeader.eq(1).attr('title', options.tooltips.selectDecade);\n      yearsViewHeader.eq(2).find('span').attr('title', options.tooltips.nextDecade);\n      yearsView.find('.disabled').removeClass('disabled');\n\n      if (options.minDate && options.minDate.isAfter(startYear, 'y')) {\n        yearsViewHeader.eq(0).addClass('disabled');\n      }\n\n      yearsViewHeader.eq(1).text(startYear.year() + '-' + endYear.year());\n\n      if (options.maxDate && options.maxDate.isBefore(endYear, 'y')) {\n        yearsViewHeader.eq(2).addClass('disabled');\n      }\n\n      while (!startYear.isAfter(endYear, 'y')) {\n        html += '<span data-action=\"selectYear\" class=\"year' + (startYear.isSame(date, 'y') && !unset ? ' active' : '') + (!isValid(startYear, 'y') ? ' disabled' : '') + '\">' + startYear.year() + '</span>';\n        startYear.add(1, 'y');\n      }\n\n      yearsView.find('td').html(html);\n    },\n        updateDecades = function updateDecades() {\n      var decadesView = widget.find('.datepicker-decades'),\n          decadesViewHeader = decadesView.find('th'),\n          startDecade = moment({\n        y: viewDate.year() - viewDate.year() % 100 - 1\n      }),\n          endDecade = startDecade.clone().add(100, 'y'),\n          startedAt = startDecade.clone(),\n          minDateDecade = false,\n          maxDateDecade = false,\n          endDecadeYear,\n          html = '';\n      decadesViewHeader.eq(0).find('span').attr('title', options.tooltips.prevCentury);\n      decadesViewHeader.eq(2).find('span').attr('title', options.tooltips.nextCentury);\n      decadesView.find('.disabled').removeClass('disabled');\n\n      if (startDecade.isSame(moment({\n        y: 1900\n      })) || options.minDate && options.minDate.isAfter(startDecade, 'y')) {\n        decadesViewHeader.eq(0).addClass('disabled');\n      }\n\n      decadesViewHeader.eq(1).text(startDecade.year() + '-' + endDecade.year());\n\n      if (startDecade.isSame(moment({\n        y: 2000\n      })) || options.maxDate && options.maxDate.isBefore(endDecade, 'y')) {\n        decadesViewHeader.eq(2).addClass('disabled');\n      }\n\n      while (!startDecade.isAfter(endDecade, 'y')) {\n        endDecadeYear = startDecade.year() + 12;\n        minDateDecade = options.minDate && options.minDate.isAfter(startDecade, 'y') && options.minDate.year() <= endDecadeYear;\n        maxDateDecade = options.maxDate && options.maxDate.isAfter(startDecade, 'y') && options.maxDate.year() <= endDecadeYear;\n        html += '<span data-action=\"selectDecade\" class=\"decade' + (date.isAfter(startDecade) && date.year() <= endDecadeYear ? ' active' : '') + (!isValid(startDecade, 'y') && !minDateDecade && !maxDateDecade ? ' disabled' : '') + '\" data-selection=\"' + (startDecade.year() + 6) + '\">' + (startDecade.year() + 1) + ' - ' + (startDecade.year() + 12) + '</span>';\n        startDecade.add(12, 'y');\n      }\n\n      html += '<span></span><span></span><span></span>'; //push the dangling block over, at least this way it's even\n\n      decadesView.find('td').html(html);\n      decadesViewHeader.eq(1).text(startedAt.year() + 1 + '-' + startDecade.year());\n    },\n        fillDate = function fillDate() {\n      var daysView = widget.find('.datepicker-days'),\n          daysViewHeader = daysView.find('th'),\n          currentDate,\n          html = [],\n          row,\n          clsNames = [],\n          i;\n\n      if (!hasDate()) {\n        return;\n      }\n\n      daysViewHeader.eq(0).find('span').attr('title', options.tooltips.prevMonth);\n      daysViewHeader.eq(1).attr('title', options.tooltips.selectMonth);\n      daysViewHeader.eq(2).find('span').attr('title', options.tooltips.nextMonth);\n      daysView.find('.disabled').removeClass('disabled');\n      daysViewHeader.eq(1).text(viewDate.format(options.dayViewHeaderFormat));\n\n      if (!isValid(viewDate.clone().subtract(1, 'M'), 'M')) {\n        daysViewHeader.eq(0).addClass('disabled');\n      }\n\n      if (!isValid(viewDate.clone().add(1, 'M'), 'M')) {\n        daysViewHeader.eq(2).addClass('disabled');\n      }\n\n      currentDate = viewDate.clone().startOf('M').startOf('w').startOf('d');\n\n      for (i = 0; i < 42; i++) {\n        //always display 42 days (should show 6 weeks)\n        if (currentDate.weekday() === 0) {\n          row = $('<tr>');\n\n          if (options.calendarWeeks) {\n            row.append('<td class=\"cw\">' + currentDate.week() + '</td>');\n          }\n\n          html.push(row);\n        }\n\n        clsNames = ['day'];\n\n        if (currentDate.isBefore(viewDate, 'M')) {\n          clsNames.push('old');\n        }\n\n        if (currentDate.isAfter(viewDate, 'M')) {\n          clsNames.push('new');\n        }\n\n        if (currentDate.isSame(date, 'd') && !unset) {\n          clsNames.push('active');\n        }\n\n        if (!isValid(currentDate, 'd')) {\n          clsNames.push('disabled');\n        }\n\n        if (currentDate.isSame(getMoment(), 'd')) {\n          clsNames.push('today');\n        }\n\n        if (currentDate.day() === 0 || currentDate.day() === 6) {\n          clsNames.push('weekend');\n        }\n\n        notifyEvent({\n          type: 'dp.classify',\n          date: currentDate,\n          classNames: clsNames\n        });\n        row.append('<td data-action=\"selectDay\" data-day=\"' + currentDate.format('L') + '\" class=\"' + clsNames.join(' ') + '\">' + currentDate.date() + '</td>');\n        currentDate.add(1, 'd');\n      }\n\n      daysView.find('tbody').empty().append(html);\n      updateMonths();\n      updateYears();\n      updateDecades();\n    },\n        fillHours = function fillHours() {\n      var table = widget.find('.timepicker-hours table'),\n          currentHour = viewDate.clone().startOf('d'),\n          html = [],\n          row = $('<tr>');\n\n      if (viewDate.hour() > 11 && !use24Hours) {\n        currentHour.hour(12);\n      }\n\n      while (currentHour.isSame(viewDate, 'd') && (use24Hours || viewDate.hour() < 12 && currentHour.hour() < 12 || viewDate.hour() > 11)) {\n        if (currentHour.hour() % 4 === 0) {\n          row = $('<tr>');\n          html.push(row);\n        }\n\n        row.append('<td data-action=\"selectHour\" class=\"hour' + (!isValid(currentHour, 'h') ? ' disabled' : '') + '\">' + currentHour.format(use24Hours ? 'HH' : 'hh') + '</td>');\n        currentHour.add(1, 'h');\n      }\n\n      table.empty().append(html);\n    },\n        fillMinutes = function fillMinutes() {\n      var table = widget.find('.timepicker-minutes table'),\n          currentMinute = viewDate.clone().startOf('h'),\n          html = [],\n          row = $('<tr>'),\n          step = options.stepping === 1 ? 5 : options.stepping;\n\n      while (viewDate.isSame(currentMinute, 'h')) {\n        if (currentMinute.minute() % (step * 4) === 0) {\n          row = $('<tr>');\n          html.push(row);\n        }\n\n        row.append('<td data-action=\"selectMinute\" class=\"minute' + (!isValid(currentMinute, 'm') ? ' disabled' : '') + '\">' + currentMinute.format('mm') + '</td>');\n        currentMinute.add(step, 'm');\n      }\n\n      table.empty().append(html);\n    },\n        fillSeconds = function fillSeconds() {\n      var table = widget.find('.timepicker-seconds table'),\n          currentSecond = viewDate.clone().startOf('m'),\n          html = [],\n          row = $('<tr>');\n\n      while (viewDate.isSame(currentSecond, 'm')) {\n        if (currentSecond.second() % 20 === 0) {\n          row = $('<tr>');\n          html.push(row);\n        }\n\n        row.append('<td data-action=\"selectSecond\" class=\"second' + (!isValid(currentSecond, 's') ? ' disabled' : '') + '\">' + currentSecond.format('ss') + '</td>');\n        currentSecond.add(5, 's');\n      }\n\n      table.empty().append(html);\n    },\n        fillTime = function fillTime() {\n      var toggle,\n          newDate,\n          timeComponents = widget.find('.timepicker span[data-time-component]');\n\n      if (!use24Hours) {\n        toggle = widget.find('.timepicker [data-action=togglePeriod]');\n        newDate = date.clone().add(date.hours() >= 12 ? -12 : 12, 'h');\n        toggle.text(date.format('A'));\n\n        if (isValid(newDate, 'h')) {\n          toggle.removeClass('disabled');\n        } else {\n          toggle.addClass('disabled');\n        }\n      }\n\n      timeComponents.filter('[data-time-component=hours]').text(date.format(use24Hours ? 'HH' : 'hh'));\n      timeComponents.filter('[data-time-component=minutes]').text(date.format('mm'));\n      timeComponents.filter('[data-time-component=seconds]').text(date.format('ss'));\n      fillHours();\n      fillMinutes();\n      fillSeconds();\n    },\n        update = function update() {\n      if (!widget) {\n        return;\n      }\n\n      fillDate();\n      fillTime();\n    },\n        setValue = function setValue(targetMoment) {\n      var oldDate = unset ? null : date; // case of calling setValue(null or false)\n\n      if (!targetMoment) {\n        unset = true;\n        input.val('');\n        element.data('date', '');\n        notifyEvent({\n          type: 'dp.change',\n          date: false,\n          oldDate: oldDate\n        });\n        update();\n        return;\n      }\n\n      targetMoment = targetMoment.clone().locale(options.locale);\n\n      if (hasTimeZone()) {\n        targetMoment.tz(options.timeZone);\n      }\n\n      if (options.stepping !== 1) {\n        targetMoment.minutes(Math.round(targetMoment.minutes() / options.stepping) * options.stepping).seconds(0);\n\n        while (options.minDate && targetMoment.isBefore(options.minDate)) {\n          targetMoment.add(options.stepping, 'minutes');\n        }\n      }\n\n      if (isValid(targetMoment)) {\n        date = targetMoment;\n        viewDate = date.clone();\n        input.val(date.format(actualFormat));\n        element.data('date', date.format(actualFormat));\n        unset = false;\n        update();\n        notifyEvent({\n          type: 'dp.change',\n          date: date.clone(),\n          oldDate: oldDate\n        });\n      } else {\n        if (!options.keepInvalid) {\n          input.val(unset ? '' : date.format(actualFormat));\n        } else {\n          notifyEvent({\n            type: 'dp.change',\n            date: targetMoment,\n            oldDate: oldDate\n          });\n        }\n\n        notifyEvent({\n          type: 'dp.error',\n          date: targetMoment,\n          oldDate: oldDate\n        });\n      }\n    },\n\n    /**\r\n     * Hides the widget. Possibly will emit dp.hide\r\n     */\n    hide = function hide() {\n      var transitioning = false;\n\n      if (!widget) {\n        return picker;\n      } // Ignore event if in the middle of a picker transition\n\n\n      widget.find('.collapse').each(function () {\n        var collapseData = $(this).data('collapse');\n\n        if (collapseData && collapseData.transitioning) {\n          transitioning = true;\n          return false;\n        }\n\n        return true;\n      });\n\n      if (transitioning) {\n        return picker;\n      }\n\n      if (component && component.hasClass('btn')) {\n        component.toggleClass('active');\n      }\n\n      widget.hide();\n      $(window).off('resize', place);\n      widget.off('click', '[data-action]');\n      widget.off('mousedown', false);\n      widget.remove();\n      widget = false;\n      notifyEvent({\n        type: 'dp.hide',\n        date: date.clone()\n      });\n      input.blur();\n      viewDate = date.clone();\n      return picker;\n    },\n        clear = function clear() {\n      setValue(null);\n    },\n        parseInputDate = function parseInputDate(inputDate) {\n      if (options.parseInputDate === undefined) {\n        if (!moment.isMoment(inputDate) || inputDate instanceof Date) {\n          inputDate = getMoment(inputDate);\n        }\n      } else {\n        inputDate = options.parseInputDate(inputDate);\n      } //inputDate.locale(options.locale);\n\n\n      return inputDate;\n    },\n\n    /********************************************************************************\r\n     *\r\n     * Widget UI interaction functions\r\n     *\r\n     ********************************************************************************/\n    actions = {\n      next: function next() {\n        var navFnc = datePickerModes[currentViewMode].navFnc;\n        viewDate.add(datePickerModes[currentViewMode].navStep, navFnc);\n        fillDate();\n        viewUpdate(navFnc);\n      },\n      previous: function previous() {\n        var navFnc = datePickerModes[currentViewMode].navFnc;\n        viewDate.subtract(datePickerModes[currentViewMode].navStep, navFnc);\n        fillDate();\n        viewUpdate(navFnc);\n      },\n      pickerSwitch: function pickerSwitch() {\n        showMode(1);\n      },\n      selectMonth: function selectMonth(e) {\n        var month = $(e.target).closest('tbody').find('span').index($(e.target));\n        viewDate.month(month);\n\n        if (currentViewMode === minViewModeNumber) {\n          setValue(date.clone().year(viewDate.year()).month(viewDate.month()));\n\n          if (!options.inline) {\n            hide();\n          }\n        } else {\n          showMode(-1);\n          fillDate();\n        }\n\n        viewUpdate('M');\n      },\n      selectYear: function selectYear(e) {\n        var year = parseInt($(e.target).text(), 10) || 0;\n        viewDate.year(year);\n\n        if (currentViewMode === minViewModeNumber) {\n          setValue(date.clone().year(viewDate.year()));\n\n          if (!options.inline) {\n            hide();\n          }\n        } else {\n          showMode(-1);\n          fillDate();\n        }\n\n        viewUpdate('YYYY');\n      },\n      selectDecade: function selectDecade(e) {\n        var year = parseInt($(e.target).data('selection'), 10) || 0;\n        viewDate.year(year);\n\n        if (currentViewMode === minViewModeNumber) {\n          setValue(date.clone().year(viewDate.year()));\n\n          if (!options.inline) {\n            hide();\n          }\n        } else {\n          showMode(-1);\n          fillDate();\n        }\n\n        viewUpdate('YYYY');\n      },\n      selectDay: function selectDay(e) {\n        var day = viewDate.clone();\n\n        if ($(e.target).is('.old')) {\n          day.subtract(1, 'M');\n        }\n\n        if ($(e.target).is('.new')) {\n          day.add(1, 'M');\n        }\n\n        setValue(day.date(parseInt($(e.target).text(), 10)));\n\n        if (!hasTime() && !options.keepOpen && !options.inline) {\n          hide();\n        }\n      },\n      incrementHours: function incrementHours() {\n        var newDate = date.clone().add(1, 'h');\n\n        if (isValid(newDate, 'h')) {\n          setValue(newDate);\n        }\n      },\n      incrementMinutes: function incrementMinutes() {\n        var newDate = date.clone().add(options.stepping, 'm');\n\n        if (isValid(newDate, 'm')) {\n          setValue(newDate);\n        }\n      },\n      incrementSeconds: function incrementSeconds() {\n        var newDate = date.clone().add(1, 's');\n\n        if (isValid(newDate, 's')) {\n          setValue(newDate);\n        }\n      },\n      decrementHours: function decrementHours() {\n        var newDate = date.clone().subtract(1, 'h');\n\n        if (isValid(newDate, 'h')) {\n          setValue(newDate);\n        }\n      },\n      decrementMinutes: function decrementMinutes() {\n        var newDate = date.clone().subtract(options.stepping, 'm');\n\n        if (isValid(newDate, 'm')) {\n          setValue(newDate);\n        }\n      },\n      decrementSeconds: function decrementSeconds() {\n        var newDate = date.clone().subtract(1, 's');\n\n        if (isValid(newDate, 's')) {\n          setValue(newDate);\n        }\n      },\n      togglePeriod: function togglePeriod() {\n        setValue(date.clone().add(date.hours() >= 12 ? -12 : 12, 'h'));\n      },\n      togglePicker: function togglePicker(e) {\n        var $this = $(e.target),\n            $parent = $this.closest('ul'),\n            expanded = $parent.find('.show'),\n            closed = $parent.find('.collapse:not(.show)'),\n            collapseData;\n\n        if (expanded && expanded.length) {\n          collapseData = expanded.data('collapse');\n\n          if (collapseData && collapseData.transitioning) {\n            return;\n          }\n\n          if (expanded.collapse) {\n            // if collapse plugin is available through bootstrap.js then use it\n            expanded.collapse('hide');\n            closed.collapse('show');\n          } else {\n            // otherwise just toggle in class on the two views\n            expanded.removeClass('show');\n            closed.addClass('show');\n          }\n\n          if ($this.is('span')) {\n            $this.toggleClass(options.icons.time + ' ' + options.icons.date);\n          } else {\n            $this.find('span').toggleClass(options.icons.time + ' ' + options.icons.date);\n          } // NOTE: uncomment if toggled state will be restored in show()\n          //if (component) {\n          //    component.find('span').toggleClass(options.icons.time + ' ' + options.icons.date);\n          //}\n\n        }\n      },\n      showPicker: function showPicker() {\n        widget.find('.timepicker > div:not(.timepicker-picker)').hide();\n        widget.find('.timepicker .timepicker-picker').show();\n      },\n      showHours: function showHours() {\n        widget.find('.timepicker .timepicker-picker').hide();\n        widget.find('.timepicker .timepicker-hours').show();\n      },\n      showMinutes: function showMinutes() {\n        widget.find('.timepicker .timepicker-picker').hide();\n        widget.find('.timepicker .timepicker-minutes').show();\n      },\n      showSeconds: function showSeconds() {\n        widget.find('.timepicker .timepicker-picker').hide();\n        widget.find('.timepicker .timepicker-seconds').show();\n      },\n      selectHour: function selectHour(e) {\n        var hour = parseInt($(e.target).text(), 10);\n\n        if (!use24Hours) {\n          if (date.hours() >= 12) {\n            if (hour !== 12) {\n              hour += 12;\n            }\n          } else {\n            if (hour === 12) {\n              hour = 0;\n            }\n          }\n        }\n\n        setValue(date.clone().hours(hour));\n        actions.showPicker.call(picker);\n      },\n      selectMinute: function selectMinute(e) {\n        setValue(date.clone().minutes(parseInt($(e.target).text(), 10)));\n        actions.showPicker.call(picker);\n      },\n      selectSecond: function selectSecond(e) {\n        setValue(date.clone().seconds(parseInt($(e.target).text(), 10)));\n        actions.showPicker.call(picker);\n      },\n      clear: clear,\n      today: function today() {\n        var todaysDate = getMoment();\n\n        if (isValid(todaysDate, 'd')) {\n          setValue(todaysDate);\n        }\n      },\n      close: hide\n    },\n        doAction = function doAction(e) {\n      if ($(e.currentTarget).is('.disabled')) {\n        return false;\n      }\n\n      actions[$(e.currentTarget).data('action')].apply(picker, arguments);\n      return false;\n    },\n\n    /**\r\n     * Shows the widget. Possibly will emit dp.show and dp.change\r\n     */\n    show = function show() {\n      var currentMoment,\n          useCurrentGranularity = {\n        'year': function year(m) {\n          return m.month(0).date(1).hours(0).seconds(0).minutes(0);\n        },\n        'month': function month(m) {\n          return m.date(1).hours(0).seconds(0).minutes(0);\n        },\n        'day': function day(m) {\n          return m.hours(0).seconds(0).minutes(0);\n        },\n        'hour': function hour(m) {\n          return m.seconds(0).minutes(0);\n        },\n        'minute': function minute(m) {\n          return m.seconds(0);\n        }\n      };\n\n      if (input.prop('disabled') || !options.ignoreReadonly && input.prop('readonly') || widget) {\n        return picker;\n      }\n\n      if (input.val() !== undefined && input.val().trim().length !== 0) {\n        setValue(parseInputDate(input.val().trim()));\n      } else if (unset && options.useCurrent && (options.inline || input.is('input') && input.val().trim().length === 0)) {\n        currentMoment = getMoment();\n\n        if (typeof options.useCurrent === 'string') {\n          currentMoment = useCurrentGranularity[options.useCurrent](currentMoment);\n        }\n\n        setValue(currentMoment);\n      }\n\n      widget = getTemplate();\n      fillDow();\n      fillMonths();\n      widget.find('.timepicker-hours').hide();\n      widget.find('.timepicker-minutes').hide();\n      widget.find('.timepicker-seconds').hide();\n      update();\n      showMode();\n      $(window).on('resize', place);\n      widget.on('click', '[data-action]', doAction); // this handles clicks on the widget\n\n      widget.on('mousedown', false);\n\n      if (component && component.hasClass('btn')) {\n        component.toggleClass('active');\n      }\n\n      place();\n      widget.show();\n\n      if (options.focusOnShow && !input.is(':focus')) {\n        input.focus();\n      }\n\n      notifyEvent({\n        type: 'dp.show'\n      });\n      return picker;\n    },\n\n    /**\r\n     * Shows or hides the widget\r\n     */\n    toggle = function toggle() {\n      return widget ? hide() : show();\n    },\n        keydown = function keydown(e) {\n      var handler = null,\n          index,\n          index2,\n          pressedKeys = [],\n          pressedModifiers = {},\n          currentKey = e.which,\n          keyBindKeys,\n          allModifiersPressed,\n          pressed = 'p';\n      keyState[currentKey] = pressed;\n\n      for (index in keyState) {\n        if (keyState.hasOwnProperty(index) && keyState[index] === pressed) {\n          pressedKeys.push(index);\n\n          if (parseInt(index, 10) !== currentKey) {\n            pressedModifiers[index] = true;\n          }\n        }\n      }\n\n      for (index in options.keyBinds) {\n        if (options.keyBinds.hasOwnProperty(index) && typeof options.keyBinds[index] === 'function') {\n          keyBindKeys = index.split(' ');\n\n          if (keyBindKeys.length === pressedKeys.length && keyMap[currentKey] === keyBindKeys[keyBindKeys.length - 1]) {\n            allModifiersPressed = true;\n\n            for (index2 = keyBindKeys.length - 2; index2 >= 0; index2--) {\n              if (!(keyMap[keyBindKeys[index2]] in pressedModifiers)) {\n                allModifiersPressed = false;\n                break;\n              }\n            }\n\n            if (allModifiersPressed) {\n              handler = options.keyBinds[index];\n              break;\n            }\n          }\n        }\n      }\n\n      if (handler) {\n        handler.call(picker, widget);\n        e.stopPropagation();\n        e.preventDefault();\n      }\n    },\n        keyup = function keyup(e) {\n      keyState[e.which] = 'r';\n      e.stopPropagation();\n      e.preventDefault();\n    },\n        change = function change(e) {\n      var val = $(e.target).val().trim(),\n          parsedDate = val ? parseInputDate(val) : null;\n      setValue(parsedDate);\n      e.stopImmediatePropagation();\n      return false;\n    },\n        attachDatePickerElementEvents = function attachDatePickerElementEvents() {\n      input.on({\n        'change': change,\n        'blur': options.debug ? '' : hide,\n        'keydown': keydown,\n        'keyup': keyup,\n        'focus': options.allowInputToggle ? show : ''\n      });\n\n      if (element.is('input')) {\n        input.on({\n          'focus': show\n        });\n      } else if (component) {\n        component.on('click', toggle);\n        component.on('mousedown', false);\n      }\n    },\n        detachDatePickerElementEvents = function detachDatePickerElementEvents() {\n      input.off({\n        'change': change,\n        'blur': blur,\n        'keydown': keydown,\n        'keyup': keyup,\n        'focus': options.allowInputToggle ? hide : ''\n      });\n\n      if (element.is('input')) {\n        input.off({\n          'focus': show\n        });\n      } else if (component) {\n        component.off('click', toggle);\n        component.off('mousedown', false);\n      }\n    },\n        indexGivenDates = function indexGivenDates(givenDatesArray) {\n      // Store given enabledDates and disabledDates as keys.\n      // This way we can check their existence in O(1) time instead of looping through whole array.\n      // (for example: options.enabledDates['2014-02-27'] === true)\n      var givenDatesIndexed = {};\n      $.each(givenDatesArray, function () {\n        var dDate = parseInputDate(this);\n\n        if (dDate.isValid()) {\n          givenDatesIndexed[dDate.format('YYYY-MM-DD')] = true;\n        }\n      });\n      return Object.keys(givenDatesIndexed).length ? givenDatesIndexed : false;\n    },\n        indexGivenHours = function indexGivenHours(givenHoursArray) {\n      // Store given enabledHours and disabledHours as keys.\n      // This way we can check their existence in O(1) time instead of looping through whole array.\n      // (for example: options.enabledHours['2014-02-27'] === true)\n      var givenHoursIndexed = {};\n      $.each(givenHoursArray, function () {\n        givenHoursIndexed[this] = true;\n      });\n      return Object.keys(givenHoursIndexed).length ? givenHoursIndexed : false;\n    },\n        initFormatting = function initFormatting() {\n      var format = options.format || 'L LT';\n      actualFormat = format.replace(/(\\[[^\\[]*\\])|(\\\\)?(LTS|LT|LL?L?L?|l{1,4})/g, function (formatInput) {\n        var newinput = date.localeData().longDateFormat(formatInput) || formatInput;\n        return newinput.replace(/(\\[[^\\[]*\\])|(\\\\)?(LTS|LT|LL?L?L?|l{1,4})/g, function (formatInput2) {\n          //temp fix for #740\n          return date.localeData().longDateFormat(formatInput2) || formatInput2;\n        });\n      });\n      parseFormats = options.extraFormats ? options.extraFormats.slice() : [];\n\n      if (parseFormats.indexOf(format) < 0 && parseFormats.indexOf(actualFormat) < 0) {\n        parseFormats.push(actualFormat);\n      }\n\n      use24Hours = actualFormat.toLowerCase().indexOf('a') < 1 && actualFormat.replace(/\\[.*?\\]/g, '').indexOf('h') < 1;\n\n      if (isEnabled('y')) {\n        minViewModeNumber = 2;\n      }\n\n      if (isEnabled('M')) {\n        minViewModeNumber = 1;\n      }\n\n      if (isEnabled('d')) {\n        minViewModeNumber = 0;\n      }\n\n      currentViewMode = Math.max(minViewModeNumber, currentViewMode);\n\n      if (!unset) {\n        setValue(date);\n      }\n    };\n    /********************************************************************************\r\n     *\r\n     * Public API functions\r\n     * =====================\r\n     *\r\n     * Important: Do not expose direct references to private objects or the options\r\n     * object to the outer world. Always return a clone when returning values or make\r\n     * a clone when setting a private variable.\r\n     *\r\n     ********************************************************************************/\n\n\n    picker.destroy = function () {\n      ///<summary>Destroys the widget and removes all attached event listeners</summary>\n      hide();\n      detachDatePickerElementEvents();\n      element.removeData('DateTimePicker');\n      element.removeData('date');\n    };\n\n    picker.toggle = toggle;\n    picker.show = show;\n    picker.hide = hide;\n\n    picker.disable = function () {\n      ///<summary>Disables the input element, the component is attached to, by adding a disabled=\"true\" attribute to it.\n      ///If the widget was visible before that call it is hidden. Possibly emits dp.hide</summary>\n      hide();\n\n      if (component && component.hasClass('btn')) {\n        component.addClass('disabled');\n      }\n\n      input.prop('disabled', true);\n      return picker;\n    };\n\n    picker.enable = function () {\n      ///<summary>Enables the input element, the component is attached to, by removing disabled attribute from it.</summary>\n      if (component && component.hasClass('btn')) {\n        component.removeClass('disabled');\n      }\n\n      input.prop('disabled', false);\n      return picker;\n    };\n\n    picker.ignoreReadonly = function (ignoreReadonly) {\n      if (arguments.length === 0) {\n        return options.ignoreReadonly;\n      }\n\n      if (typeof ignoreReadonly !== 'boolean') {\n        throw new TypeError('ignoreReadonly () expects a boolean parameter');\n      }\n\n      options.ignoreReadonly = ignoreReadonly;\n      return picker;\n    };\n\n    picker.options = function (newOptions) {\n      if (arguments.length === 0) {\n        return $.extend(true, {}, options);\n      }\n\n      if (!(newOptions instanceof Object)) {\n        throw new TypeError('options() options parameter should be an object');\n      }\n\n      $.extend(true, options, newOptions);\n      $.each(options, function (key, value) {\n        if (picker[key] !== undefined) {\n          picker[key](value);\n        } else {\n          throw new TypeError('option ' + key + ' is not recognized!');\n        }\n      });\n      return picker;\n    };\n\n    picker.date = function (newDate) {\n      ///<signature helpKeyword=\"$.fn.datetimepicker.date\">\n      ///<summary>Returns the component's model current date, a moment object or null if not set.</summary>\n      ///<returns type=\"Moment\">date.clone()</returns>\n      ///</signature>\n      ///<signature>\n      ///<summary>Sets the components model current moment to it. Passing a null value unsets the components model current moment. Parsing of the newDate parameter is made using moment library with the options.format and options.useStrict components configuration.</summary>\n      ///<param name=\"newDate\" locid=\"$.fn.datetimepicker.date_p:newDate\">Takes string, Date, moment, null parameter.</param>\n      ///</signature>\n      if (arguments.length === 0) {\n        if (unset) {\n          return null;\n        }\n\n        return date.clone();\n      }\n\n      if (newDate !== null && typeof newDate !== 'string' && !moment.isMoment(newDate) && !(newDate instanceof Date)) {\n        throw new TypeError('date() parameter must be one of [null, string, moment or Date]');\n      }\n\n      setValue(newDate === null ? null : parseInputDate(newDate));\n      return picker;\n    };\n\n    picker.format = function (newFormat) {\n      ///<summary>test su</summary>\n      ///<param name=\"newFormat\">info about para</param>\n      ///<returns type=\"string|boolean\">returns foo</returns>\n      if (arguments.length === 0) {\n        return options.format;\n      }\n\n      if (typeof newFormat !== 'string' && (typeof newFormat !== 'boolean' || newFormat !== false)) {\n        throw new TypeError('format() expects a string or boolean:false parameter ' + newFormat);\n      }\n\n      options.format = newFormat;\n\n      if (actualFormat) {\n        initFormatting(); // reinit formatting\n      }\n\n      return picker;\n    };\n\n    picker.timeZone = function (newZone) {\n      if (arguments.length === 0) {\n        return options.timeZone;\n      }\n\n      if (typeof newZone !== 'string') {\n        throw new TypeError('newZone() expects a string parameter');\n      }\n\n      options.timeZone = newZone;\n      return picker;\n    };\n\n    picker.dayViewHeaderFormat = function (newFormat) {\n      if (arguments.length === 0) {\n        return options.dayViewHeaderFormat;\n      }\n\n      if (typeof newFormat !== 'string') {\n        throw new TypeError('dayViewHeaderFormat() expects a string parameter');\n      }\n\n      options.dayViewHeaderFormat = newFormat;\n      return picker;\n    };\n\n    picker.extraFormats = function (formats) {\n      if (arguments.length === 0) {\n        return options.extraFormats;\n      }\n\n      if (formats !== false && !(formats instanceof Array)) {\n        throw new TypeError('extraFormats() expects an array or false parameter');\n      }\n\n      options.extraFormats = formats;\n\n      if (parseFormats) {\n        initFormatting(); // reinit formatting\n      }\n\n      return picker;\n    };\n\n    picker.disabledDates = function (dates) {\n      ///<signature helpKeyword=\"$.fn.datetimepicker.disabledDates\">\n      ///<summary>Returns an array with the currently set disabled dates on the component.</summary>\n      ///<returns type=\"array\">options.disabledDates</returns>\n      ///</signature>\n      ///<signature>\n      ///<summary>Setting this takes precedence over options.minDate, options.maxDate configuration. Also calling this function removes the configuration of\n      ///options.enabledDates if such exist.</summary>\n      ///<param name=\"dates\" locid=\"$.fn.datetimepicker.disabledDates_p:dates\">Takes an [ string or Date or moment ] of values and allows the user to select only from those days.</param>\n      ///</signature>\n      if (arguments.length === 0) {\n        return options.disabledDates ? $.extend({}, options.disabledDates) : options.disabledDates;\n      }\n\n      if (!dates) {\n        options.disabledDates = false;\n        update();\n        return picker;\n      }\n\n      if (!(dates instanceof Array)) {\n        throw new TypeError('disabledDates() expects an array parameter');\n      }\n\n      options.disabledDates = indexGivenDates(dates);\n      options.enabledDates = false;\n      update();\n      return picker;\n    };\n\n    picker.enabledDates = function (dates) {\n      ///<signature helpKeyword=\"$.fn.datetimepicker.enabledDates\">\n      ///<summary>Returns an array with the currently set enabled dates on the component.</summary>\n      ///<returns type=\"array\">options.enabledDates</returns>\n      ///</signature>\n      ///<signature>\n      ///<summary>Setting this takes precedence over options.minDate, options.maxDate configuration. Also calling this function removes the configuration of options.disabledDates if such exist.</summary>\n      ///<param name=\"dates\" locid=\"$.fn.datetimepicker.enabledDates_p:dates\">Takes an [ string or Date or moment ] of values and allows the user to select only from those days.</param>\n      ///</signature>\n      if (arguments.length === 0) {\n        return options.enabledDates ? $.extend({}, options.enabledDates) : options.enabledDates;\n      }\n\n      if (!dates) {\n        options.enabledDates = false;\n        update();\n        return picker;\n      }\n\n      if (!(dates instanceof Array)) {\n        throw new TypeError('enabledDates() expects an array parameter');\n      }\n\n      options.enabledDates = indexGivenDates(dates);\n      options.disabledDates = false;\n      update();\n      return picker;\n    };\n\n    picker.daysOfWeekDisabled = function (daysOfWeekDisabled) {\n      if (arguments.length === 0) {\n        return options.daysOfWeekDisabled.splice(0);\n      }\n\n      if (typeof daysOfWeekDisabled === 'boolean' && !daysOfWeekDisabled) {\n        options.daysOfWeekDisabled = false;\n        update();\n        return picker;\n      }\n\n      if (!(daysOfWeekDisabled instanceof Array)) {\n        throw new TypeError('daysOfWeekDisabled() expects an array parameter');\n      }\n\n      options.daysOfWeekDisabled = daysOfWeekDisabled.reduce(function (previousValue, currentValue) {\n        currentValue = parseInt(currentValue, 10);\n\n        if (currentValue > 6 || currentValue < 0 || isNaN(currentValue)) {\n          return previousValue;\n        }\n\n        if (previousValue.indexOf(currentValue) === -1) {\n          previousValue.push(currentValue);\n        }\n\n        return previousValue;\n      }, []).sort();\n\n      if (options.useCurrent && !options.keepInvalid) {\n        var tries = 0;\n\n        while (!isValid(date, 'd')) {\n          date.add(1, 'd');\n\n          if (tries === 31) {\n            throw 'Tried 31 times to find a valid date';\n          }\n\n          tries++;\n        }\n\n        setValue(date);\n      }\n\n      update();\n      return picker;\n    };\n\n    picker.maxDate = function (maxDate) {\n      if (arguments.length === 0) {\n        return options.maxDate ? options.maxDate.clone() : options.maxDate;\n      }\n\n      if (typeof maxDate === 'boolean' && maxDate === false) {\n        options.maxDate = false;\n        update();\n        return picker;\n      }\n\n      if (typeof maxDate === 'string') {\n        if (maxDate === 'now' || maxDate === 'moment') {\n          maxDate = getMoment();\n        }\n      }\n\n      var parsedDate = parseInputDate(maxDate);\n\n      if (!parsedDate.isValid()) {\n        throw new TypeError('maxDate() Could not parse date parameter: ' + maxDate);\n      }\n\n      if (options.minDate && parsedDate.isBefore(options.minDate)) {\n        throw new TypeError('maxDate() date parameter is before options.minDate: ' + parsedDate.format(actualFormat));\n      }\n\n      options.maxDate = parsedDate;\n\n      if (options.useCurrent && !options.keepInvalid && date.isAfter(maxDate)) {\n        setValue(options.maxDate);\n      }\n\n      if (viewDate.isAfter(parsedDate)) {\n        viewDate = parsedDate.clone().subtract(options.stepping, 'm');\n      }\n\n      update();\n      return picker;\n    };\n\n    picker.minDate = function (minDate) {\n      if (arguments.length === 0) {\n        return options.minDate ? options.minDate.clone() : options.minDate;\n      }\n\n      if (typeof minDate === 'boolean' && minDate === false) {\n        options.minDate = false;\n        update();\n        return picker;\n      }\n\n      if (typeof minDate === 'string') {\n        if (minDate === 'now' || minDate === 'moment') {\n          minDate = getMoment();\n        }\n      }\n\n      var parsedDate = parseInputDate(minDate);\n\n      if (!parsedDate.isValid()) {\n        throw new TypeError('minDate() Could not parse date parameter: ' + minDate);\n      }\n\n      if (options.maxDate && parsedDate.isAfter(options.maxDate)) {\n        throw new TypeError('minDate() date parameter is after options.maxDate: ' + parsedDate.format(actualFormat));\n      }\n\n      options.minDate = parsedDate;\n\n      if (options.useCurrent && !options.keepInvalid && date.isBefore(minDate)) {\n        setValue(options.minDate);\n      }\n\n      if (viewDate.isBefore(parsedDate)) {\n        viewDate = parsedDate.clone().add(options.stepping, 'm');\n      }\n\n      update();\n      return picker;\n    };\n\n    picker.defaultDate = function (defaultDate) {\n      ///<signature helpKeyword=\"$.fn.datetimepicker.defaultDate\">\n      ///<summary>Returns a moment with the options.defaultDate option configuration or false if not set</summary>\n      ///<returns type=\"Moment\">date.clone()</returns>\n      ///</signature>\n      ///<signature>\n      ///<summary>Will set the picker's inital date. If a boolean:false value is passed the options.defaultDate parameter is cleared.</summary>\n      ///<param name=\"defaultDate\" locid=\"$.fn.datetimepicker.defaultDate_p:defaultDate\">Takes a string, Date, moment, boolean:false</param>\n      ///</signature>\n      if (arguments.length === 0) {\n        return options.defaultDate ? options.defaultDate.clone() : options.defaultDate;\n      }\n\n      if (!defaultDate) {\n        options.defaultDate = false;\n        return picker;\n      }\n\n      if (typeof defaultDate === 'string') {\n        if (defaultDate === 'now' || defaultDate === 'moment') {\n          defaultDate = getMoment();\n        } else {\n          defaultDate = getMoment(defaultDate);\n        }\n      }\n\n      var parsedDate = parseInputDate(defaultDate);\n\n      if (!parsedDate.isValid()) {\n        throw new TypeError('defaultDate() Could not parse date parameter: ' + defaultDate);\n      }\n\n      if (!isValid(parsedDate)) {\n        throw new TypeError('defaultDate() date passed is invalid according to component setup validations');\n      }\n\n      options.defaultDate = parsedDate;\n\n      if (options.defaultDate && options.inline || input.val().trim() === '') {\n        setValue(options.defaultDate);\n      }\n\n      return picker;\n    };\n\n    picker.locale = function (locale) {\n      if (arguments.length === 0) {\n        return options.locale;\n      }\n\n      if (!moment.localeData(locale)) {\n        throw new TypeError('locale() locale ' + locale + ' is not loaded from moment locales!');\n      }\n\n      options.locale = locale;\n      date.locale(options.locale);\n      viewDate.locale(options.locale);\n\n      if (actualFormat) {\n        initFormatting(); // reinit formatting\n      }\n\n      if (widget) {\n        hide();\n        show();\n      }\n\n      return picker;\n    };\n\n    picker.stepping = function (stepping) {\n      if (arguments.length === 0) {\n        return options.stepping;\n      }\n\n      stepping = parseInt(stepping, 10);\n\n      if (isNaN(stepping) || stepping < 1) {\n        stepping = 1;\n      }\n\n      options.stepping = stepping;\n      return picker;\n    };\n\n    picker.useCurrent = function (useCurrent) {\n      var useCurrentOptions = ['year', 'month', 'day', 'hour', 'minute'];\n\n      if (arguments.length === 0) {\n        return options.useCurrent;\n      }\n\n      if (typeof useCurrent !== 'boolean' && typeof useCurrent !== 'string') {\n        throw new TypeError('useCurrent() expects a boolean or string parameter');\n      }\n\n      if (typeof useCurrent === 'string' && useCurrentOptions.indexOf(useCurrent.toLowerCase()) === -1) {\n        throw new TypeError('useCurrent() expects a string parameter of ' + useCurrentOptions.join(', '));\n      }\n\n      options.useCurrent = useCurrent;\n      return picker;\n    };\n\n    picker.collapse = function (collapse) {\n      if (arguments.length === 0) {\n        return options.collapse;\n      }\n\n      if (typeof collapse !== 'boolean') {\n        throw new TypeError('collapse() expects a boolean parameter');\n      }\n\n      if (options.collapse === collapse) {\n        return picker;\n      }\n\n      options.collapse = collapse;\n\n      if (widget) {\n        hide();\n        show();\n      }\n\n      return picker;\n    };\n\n    picker.icons = function (icons) {\n      if (arguments.length === 0) {\n        return $.extend({}, options.icons);\n      }\n\n      if (!(icons instanceof Object)) {\n        throw new TypeError('icons() expects parameter to be an Object');\n      }\n\n      $.extend(options.icons, icons);\n\n      if (widget) {\n        hide();\n        show();\n      }\n\n      return picker;\n    };\n\n    picker.tooltips = function (tooltips) {\n      if (arguments.length === 0) {\n        return $.extend({}, options.tooltips);\n      }\n\n      if (!(tooltips instanceof Object)) {\n        throw new TypeError('tooltips() expects parameter to be an Object');\n      }\n\n      $.extend(options.tooltips, tooltips);\n\n      if (widget) {\n        hide();\n        show();\n      }\n\n      return picker;\n    };\n\n    picker.useStrict = function (useStrict) {\n      if (arguments.length === 0) {\n        return options.useStrict;\n      }\n\n      if (typeof useStrict !== 'boolean') {\n        throw new TypeError('useStrict() expects a boolean parameter');\n      }\n\n      options.useStrict = useStrict;\n      return picker;\n    };\n\n    picker.sideBySide = function (sideBySide) {\n      if (arguments.length === 0) {\n        return options.sideBySide;\n      }\n\n      if (typeof sideBySide !== 'boolean') {\n        throw new TypeError('sideBySide() expects a boolean parameter');\n      }\n\n      options.sideBySide = sideBySide;\n\n      if (widget) {\n        hide();\n        show();\n      }\n\n      return picker;\n    };\n\n    picker.viewMode = function (viewMode) {\n      if (arguments.length === 0) {\n        return options.viewMode;\n      }\n\n      if (typeof viewMode !== 'string') {\n        throw new TypeError('viewMode() expects a string parameter');\n      }\n\n      if (viewModes.indexOf(viewMode) === -1) {\n        throw new TypeError('viewMode() parameter must be one of (' + viewModes.join(', ') + ') value');\n      }\n\n      options.viewMode = viewMode;\n      currentViewMode = Math.max(viewModes.indexOf(viewMode), minViewModeNumber);\n      showMode();\n      return picker;\n    };\n\n    picker.toolbarPlacement = function (toolbarPlacement) {\n      if (arguments.length === 0) {\n        return options.toolbarPlacement;\n      }\n\n      if (typeof toolbarPlacement !== 'string') {\n        throw new TypeError('toolbarPlacement() expects a string parameter');\n      }\n\n      if (toolbarPlacements.indexOf(toolbarPlacement) === -1) {\n        throw new TypeError('toolbarPlacement() parameter must be one of (' + toolbarPlacements.join(', ') + ') value');\n      }\n\n      options.toolbarPlacement = toolbarPlacement;\n\n      if (widget) {\n        hide();\n        show();\n      }\n\n      return picker;\n    };\n\n    picker.widgetPositioning = function (widgetPositioning) {\n      if (arguments.length === 0) {\n        return $.extend({}, options.widgetPositioning);\n      }\n\n      if ({}.toString.call(widgetPositioning) !== '[object Object]') {\n        throw new TypeError('widgetPositioning() expects an object variable');\n      }\n\n      if (widgetPositioning.horizontal) {\n        if (typeof widgetPositioning.horizontal !== 'string') {\n          throw new TypeError('widgetPositioning() horizontal variable must be a string');\n        }\n\n        widgetPositioning.horizontal = widgetPositioning.horizontal.toLowerCase();\n\n        if (horizontalModes.indexOf(widgetPositioning.horizontal) === -1) {\n          throw new TypeError('widgetPositioning() expects horizontal parameter to be one of (' + horizontalModes.join(', ') + ')');\n        }\n\n        options.widgetPositioning.horizontal = widgetPositioning.horizontal;\n      }\n\n      if (widgetPositioning.vertical) {\n        if (typeof widgetPositioning.vertical !== 'string') {\n          throw new TypeError('widgetPositioning() vertical variable must be a string');\n        }\n\n        widgetPositioning.vertical = widgetPositioning.vertical.toLowerCase();\n\n        if (verticalModes.indexOf(widgetPositioning.vertical) === -1) {\n          throw new TypeError('widgetPositioning() expects vertical parameter to be one of (' + verticalModes.join(', ') + ')');\n        }\n\n        options.widgetPositioning.vertical = widgetPositioning.vertical;\n      }\n\n      update();\n      return picker;\n    };\n\n    picker.calendarWeeks = function (calendarWeeks) {\n      if (arguments.length === 0) {\n        return options.calendarWeeks;\n      }\n\n      if (typeof calendarWeeks !== 'boolean') {\n        throw new TypeError('calendarWeeks() expects parameter to be a boolean value');\n      }\n\n      options.calendarWeeks = calendarWeeks;\n      update();\n      return picker;\n    };\n\n    picker.showTodayButton = function (showTodayButton) {\n      if (arguments.length === 0) {\n        return options.showTodayButton;\n      }\n\n      if (typeof showTodayButton !== 'boolean') {\n        throw new TypeError('showTodayButton() expects a boolean parameter');\n      }\n\n      options.showTodayButton = showTodayButton;\n\n      if (widget) {\n        hide();\n        show();\n      }\n\n      return picker;\n    };\n\n    picker.showClear = function (showClear) {\n      if (arguments.length === 0) {\n        return options.showClear;\n      }\n\n      if (typeof showClear !== 'boolean') {\n        throw new TypeError('showClear() expects a boolean parameter');\n      }\n\n      options.showClear = showClear;\n\n      if (widget) {\n        hide();\n        show();\n      }\n\n      return picker;\n    };\n\n    picker.widgetParent = function (widgetParent) {\n      if (arguments.length === 0) {\n        return options.widgetParent;\n      }\n\n      if (typeof widgetParent === 'string') {\n        widgetParent = $(widgetParent);\n      }\n\n      if (widgetParent !== null && typeof widgetParent !== 'string' && !(widgetParent instanceof $)) {\n        throw new TypeError('widgetParent() expects a string or a jQuery object parameter');\n      }\n\n      options.widgetParent = widgetParent;\n\n      if (widget) {\n        hide();\n        show();\n      }\n\n      return picker;\n    };\n\n    picker.keepOpen = function (keepOpen) {\n      if (arguments.length === 0) {\n        return options.keepOpen;\n      }\n\n      if (typeof keepOpen !== 'boolean') {\n        throw new TypeError('keepOpen() expects a boolean parameter');\n      }\n\n      options.keepOpen = keepOpen;\n      return picker;\n    };\n\n    picker.focusOnShow = function (focusOnShow) {\n      if (arguments.length === 0) {\n        return options.focusOnShow;\n      }\n\n      if (typeof focusOnShow !== 'boolean') {\n        throw new TypeError('focusOnShow() expects a boolean parameter');\n      }\n\n      options.focusOnShow = focusOnShow;\n      return picker;\n    };\n\n    picker.inline = function (inline) {\n      if (arguments.length === 0) {\n        return options.inline;\n      }\n\n      if (typeof inline !== 'boolean') {\n        throw new TypeError('inline() expects a boolean parameter');\n      }\n\n      options.inline = inline;\n      return picker;\n    };\n\n    picker.clear = function () {\n      clear();\n      return picker;\n    };\n\n    picker.keyBinds = function (keyBinds) {\n      if (arguments.length === 0) {\n        return options.keyBinds;\n      }\n\n      options.keyBinds = keyBinds;\n      return picker;\n    };\n\n    picker.getMoment = function (d) {\n      return getMoment(d);\n    };\n\n    picker.debug = function (debug) {\n      if (typeof debug !== 'boolean') {\n        throw new TypeError('debug() expects a boolean parameter');\n      }\n\n      options.debug = debug;\n      return picker;\n    };\n\n    picker.allowInputToggle = function (allowInputToggle) {\n      if (arguments.length === 0) {\n        return options.allowInputToggle;\n      }\n\n      if (typeof allowInputToggle !== 'boolean') {\n        throw new TypeError('allowInputToggle() expects a boolean parameter');\n      }\n\n      options.allowInputToggle = allowInputToggle;\n      return picker;\n    };\n\n    picker.showClose = function (showClose) {\n      if (arguments.length === 0) {\n        return options.showClose;\n      }\n\n      if (typeof showClose !== 'boolean') {\n        throw new TypeError('showClose() expects a boolean parameter');\n      }\n\n      options.showClose = showClose;\n      return picker;\n    };\n\n    picker.keepInvalid = function (keepInvalid) {\n      if (arguments.length === 0) {\n        return options.keepInvalid;\n      }\n\n      if (typeof keepInvalid !== 'boolean') {\n        throw new TypeError('keepInvalid() expects a boolean parameter');\n      }\n\n      options.keepInvalid = keepInvalid;\n      return picker;\n    };\n\n    picker.datepickerInput = function (datepickerInput) {\n      if (arguments.length === 0) {\n        return options.datepickerInput;\n      }\n\n      if (typeof datepickerInput !== 'string') {\n        throw new TypeError('datepickerInput() expects a string parameter');\n      }\n\n      options.datepickerInput = datepickerInput;\n      return picker;\n    };\n\n    picker.parseInputDate = function (parseInputDate) {\n      if (arguments.length === 0) {\n        return options.parseInputDate;\n      }\n\n      if (typeof parseInputDate !== 'function') {\n        throw new TypeError('parseInputDate() sholud be as function');\n      }\n\n      options.parseInputDate = parseInputDate;\n      return picker;\n    };\n\n    picker.disabledTimeIntervals = function (disabledTimeIntervals) {\n      ///<signature helpKeyword=\"$.fn.datetimepicker.disabledTimeIntervals\">\n      ///<summary>Returns an array with the currently set disabled dates on the component.</summary>\n      ///<returns type=\"array\">options.disabledTimeIntervals</returns>\n      ///</signature>\n      ///<signature>\n      ///<summary>Setting this takes precedence over options.minDate, options.maxDate configuration. Also calling this function removes the configuration of\n      ///options.enabledDates if such exist.</summary>\n      ///<param name=\"dates\" locid=\"$.fn.datetimepicker.disabledTimeIntervals_p:dates\">Takes an [ string or Date or moment ] of values and allows the user to select only from those days.</param>\n      ///</signature>\n      if (arguments.length === 0) {\n        return options.disabledTimeIntervals ? $.extend({}, options.disabledTimeIntervals) : options.disabledTimeIntervals;\n      }\n\n      if (!disabledTimeIntervals) {\n        options.disabledTimeIntervals = false;\n        update();\n        return picker;\n      }\n\n      if (!(disabledTimeIntervals instanceof Array)) {\n        throw new TypeError('disabledTimeIntervals() expects an array parameter');\n      }\n\n      options.disabledTimeIntervals = disabledTimeIntervals;\n      update();\n      return picker;\n    };\n\n    picker.disabledHours = function (hours) {\n      ///<signature helpKeyword=\"$.fn.datetimepicker.disabledHours\">\n      ///<summary>Returns an array with the currently set disabled hours on the component.</summary>\n      ///<returns type=\"array\">options.disabledHours</returns>\n      ///</signature>\n      ///<signature>\n      ///<summary>Setting this takes precedence over options.minDate, options.maxDate configuration. Also calling this function removes the configuration of\n      ///options.enabledHours if such exist.</summary>\n      ///<param name=\"hours\" locid=\"$.fn.datetimepicker.disabledHours_p:hours\">Takes an [ int ] of values and disallows the user to select only from those hours.</param>\n      ///</signature>\n      if (arguments.length === 0) {\n        return options.disabledHours ? $.extend({}, options.disabledHours) : options.disabledHours;\n      }\n\n      if (!hours) {\n        options.disabledHours = false;\n        update();\n        return picker;\n      }\n\n      if (!(hours instanceof Array)) {\n        throw new TypeError('disabledHours() expects an array parameter');\n      }\n\n      options.disabledHours = indexGivenHours(hours);\n      options.enabledHours = false;\n\n      if (options.useCurrent && !options.keepInvalid) {\n        var tries = 0;\n\n        while (!isValid(date, 'h')) {\n          date.add(1, 'h');\n\n          if (tries === 24) {\n            throw 'Tried 24 times to find a valid date';\n          }\n\n          tries++;\n        }\n\n        setValue(date);\n      }\n\n      update();\n      return picker;\n    };\n\n    picker.enabledHours = function (hours) {\n      ///<signature helpKeyword=\"$.fn.datetimepicker.enabledHours\">\n      ///<summary>Returns an array with the currently set enabled hours on the component.</summary>\n      ///<returns type=\"array\">options.enabledHours</returns>\n      ///</signature>\n      ///<signature>\n      ///<summary>Setting this takes precedence over options.minDate, options.maxDate configuration. Also calling this function removes the configuration of options.disabledHours if such exist.</summary>\n      ///<param name=\"hours\" locid=\"$.fn.datetimepicker.enabledHours_p:hours\">Takes an [ int ] of values and allows the user to select only from those hours.</param>\n      ///</signature>\n      if (arguments.length === 0) {\n        return options.enabledHours ? $.extend({}, options.enabledHours) : options.enabledHours;\n      }\n\n      if (!hours) {\n        options.enabledHours = false;\n        update();\n        return picker;\n      }\n\n      if (!(hours instanceof Array)) {\n        throw new TypeError('enabledHours() expects an array parameter');\n      }\n\n      options.enabledHours = indexGivenHours(hours);\n      options.disabledHours = false;\n\n      if (options.useCurrent && !options.keepInvalid) {\n        var tries = 0;\n\n        while (!isValid(date, 'h')) {\n          date.add(1, 'h');\n\n          if (tries === 24) {\n            throw 'Tried 24 times to find a valid date';\n          }\n\n          tries++;\n        }\n\n        setValue(date);\n      }\n\n      update();\n      return picker;\n    };\n    /**\r\n     * Returns the component's model current viewDate, a moment object or null if not set. Passing a null value unsets the components model current moment. Parsing of the newDate parameter is made using moment library with the options.format and options.useStrict components configuration.\r\n     * @param {Takes string, viewDate, moment, null parameter.} newDate\r\n     * @returns {viewDate.clone()}\r\n     */\n\n\n    picker.viewDate = function (newDate) {\n      if (arguments.length === 0) {\n        return viewDate.clone();\n      }\n\n      if (!newDate) {\n        viewDate = date.clone();\n        return picker;\n      }\n\n      if (typeof newDate !== 'string' && !moment.isMoment(newDate) && !(newDate instanceof Date)) {\n        throw new TypeError('viewDate() parameter must be one of [string, moment or Date]');\n      }\n\n      viewDate = parseInputDate(newDate);\n      viewUpdate();\n      return picker;\n    }; // initializing element and component attributes\n\n\n    if (element.is('input')) {\n      input = element;\n    } else {\n      input = element.find(options.datepickerInput);\n\n      if (input.length === 0) {\n        input = element.find('input');\n      } else if (!input.is('input')) {\n        throw new Error('CSS class \"' + options.datepickerInput + '\" cannot be applied to non input element');\n      }\n    }\n\n    if (element.hasClass('input-group')) {\n      // in case there is more then one 'input-group-addon' Issue #48\n      if (element.find('.datepickerbutton').length === 0) {\n        component = element.find('.input-group-addon');\n      } else {\n        component = element.find('.datepickerbutton');\n      }\n    }\n\n    if (!options.inline && !input.is('input')) {\n      throw new Error('Could not initialize DateTimePicker without an input element');\n    } // Set defaults for date here now instead of in var declaration\n\n\n    date = getMoment();\n    viewDate = date.clone();\n    $.extend(true, options, dataToOptions());\n    picker.options(options);\n    initFormatting();\n    attachDatePickerElementEvents();\n\n    if (input.prop('disabled')) {\n      picker.disable();\n    }\n\n    if (input.is('input') && input.val().trim().length !== 0) {\n      setValue(parseInputDate(input.val().trim()));\n    } else if (options.defaultDate && input.attr('placeholder') === undefined) {\n      setValue(options.defaultDate);\n    }\n\n    if (options.inline) {\n      show();\n    }\n\n    return picker;\n  };\n  /********************************************************************************\r\n   *\r\n   * jQuery plugin constructor and defaults object\r\n   *\r\n   ********************************************************************************/\n\n  /**\r\n  * See (http://jquery.com/).\r\n  * @name jQuery\r\n  * @class\r\n  * See the jQuery Library  (http://jquery.com/) for full details.  This just\r\n  * documents the function and classes that are added to jQuery by this plug-in.\r\n  */\n\n  /**\r\n   * See (http://jquery.com/)\r\n   * @name fn\r\n   * @class\r\n   * See the jQuery Library  (http://jquery.com/) for full details.  This just\r\n   * documents the function and classes that are added to jQuery by this plug-in.\r\n   * @memberOf jQuery\r\n   */\n\n  /**\r\n   * Show comments\r\n   * @class datetimepicker\r\n   * @memberOf jQuery.fn\r\n   */\n\n\n  $.fn.datetimepicker = function (options) {\n    options = options || {};\n    var args = Array.prototype.slice.call(arguments, 1),\n        isInstance = true,\n        thisMethods = ['destroy', 'hide', 'show', 'toggle'],\n        returnValue;\n\n    if (_typeof(options) === 'object') {\n      return this.each(function () {\n        var $this = $(this),\n            _options;\n\n        if (!$this.data('DateTimePicker')) {\n          // create a private copy of the defaults object\n          _options = $.extend(true, {}, $.fn.datetimepicker.defaults, options);\n          $this.data('DateTimePicker', dateTimePicker($this, _options));\n        }\n      });\n    } else if (typeof options === 'string') {\n      this.each(function () {\n        var $this = $(this),\n            instance = $this.data('DateTimePicker');\n\n        if (!instance) {\n          throw new Error('bootstrap-datetimepicker(\"' + options + '\") method was called on an element that is not using DateTimePicker');\n        }\n\n        returnValue = instance[options].apply(instance, args);\n        isInstance = returnValue === instance;\n      });\n\n      if (isInstance || $.inArray(options, thisMethods) > -1) {\n        return this;\n      }\n\n      return returnValue;\n    }\n\n    throw new TypeError('Invalid arguments for DateTimePicker: ' + options);\n  };\n\n  $.fn.datetimepicker.defaults = {\n    timeZone: '',\n    format: false,\n    dayViewHeaderFormat: 'MMMM YYYY',\n    extraFormats: false,\n    stepping: 1,\n    minDate: false,\n    maxDate: false,\n    useCurrent: true,\n    collapse: true,\n    locale: moment.locale(),\n    defaultDate: false,\n    disabledDates: false,\n    enabledDates: false,\n    icons: {\n      time: 'iconfont icon-time',\n      date: 'iconfont icon-rili',\n      up: 'iconfont icon-up',\n      down: 'iconfont icon-down',\n      previous: 'iconfont icon-prev',\n      next: 'iconfont icon-next',\n      today: 'iconfont glyphicon-screenshot',\n      clear: 'iconfont icon-trash',\n      close: 'iconfont icon-remove'\n    },\n    tooltips: {\n      today: 'Go to today',\n      clear: 'Clear selection',\n      close: 'Close the picker',\n      selectMonth: 'Select Month',\n      prevMonth: 'Previous Month',\n      nextMonth: 'Next Month',\n      selectYear: 'Select Year',\n      prevYear: 'Previous Year',\n      nextYear: 'Next Year',\n      selectDecade: 'Select Decade',\n      prevDecade: 'Previous Decade',\n      nextDecade: 'Next Decade',\n      prevCentury: 'Previous Century',\n      nextCentury: 'Next Century',\n      pickHour: 'Pick Hour',\n      incrementHour: 'Increment Hour',\n      decrementHour: 'Decrement Hour',\n      pickMinute: 'Pick Minute',\n      incrementMinute: 'Increment Minute',\n      decrementMinute: 'Decrement Minute',\n      pickSecond: 'Pick Second',\n      incrementSecond: 'Increment Second',\n      decrementSecond: 'Decrement Second',\n      togglePeriod: 'Toggle Period',\n      selectTime: 'Select Time'\n    },\n    useStrict: false,\n    sideBySide: false,\n    daysOfWeekDisabled: false,\n    calendarWeeks: false,\n    viewMode: 'days',\n    toolbarPlacement: 'default',\n    showTodayButton: false,\n    showClear: false,\n    showClose: false,\n    widgetPositioning: {\n      horizontal: 'auto',\n      vertical: 'auto'\n    },\n    widgetParent: null,\n    ignoreReadonly: false,\n    keepOpen: false,\n    focusOnShow: true,\n    inline: false,\n    keepInvalid: false,\n    datepickerInput: '.datepickerinput',\n    keyBinds: {\n      up: function up(widget) {\n        if (!widget) {\n          return;\n        }\n\n        var d = this.date() || this.getMoment();\n\n        if (widget.find('.datepicker').is(':visible')) {\n          this.date(d.clone().subtract(7, 'd'));\n        } else {\n          this.date(d.clone().add(this.stepping(), 'm'));\n        }\n      },\n      down: function down(widget) {\n        if (!widget) {\n          this.show();\n          return;\n        }\n\n        var d = this.date() || this.getMoment();\n\n        if (widget.find('.datepicker').is(':visible')) {\n          this.date(d.clone().add(7, 'd'));\n        } else {\n          this.date(d.clone().subtract(this.stepping(), 'm'));\n        }\n      },\n      'control up': function controlUp(widget) {\n        if (!widget) {\n          return;\n        }\n\n        var d = this.date() || this.getMoment();\n\n        if (widget.find('.datepicker').is(':visible')) {\n          this.date(d.clone().subtract(1, 'y'));\n        } else {\n          this.date(d.clone().add(1, 'h'));\n        }\n      },\n      'control down': function controlDown(widget) {\n        if (!widget) {\n          return;\n        }\n\n        var d = this.date() || this.getMoment();\n\n        if (widget.find('.datepicker').is(':visible')) {\n          this.date(d.clone().add(1, 'y'));\n        } else {\n          this.date(d.clone().subtract(1, 'h'));\n        }\n      },\n      left: function left(widget) {\n        if (!widget) {\n          return;\n        }\n\n        var d = this.date() || this.getMoment();\n\n        if (widget.find('.datepicker').is(':visible')) {\n          this.date(d.clone().subtract(1, 'd'));\n        }\n      },\n      right: function right(widget) {\n        if (!widget) {\n          return;\n        }\n\n        var d = this.date() || this.getMoment();\n\n        if (widget.find('.datepicker').is(':visible')) {\n          this.date(d.clone().add(1, 'd'));\n        }\n      },\n      pageUp: function pageUp(widget) {\n        if (!widget) {\n          return;\n        }\n\n        var d = this.date() || this.getMoment();\n\n        if (widget.find('.datepicker').is(':visible')) {\n          this.date(d.clone().subtract(1, 'M'));\n        }\n      },\n      pageDown: function pageDown(widget) {\n        if (!widget) {\n          return;\n        }\n\n        var d = this.date() || this.getMoment();\n\n        if (widget.find('.datepicker').is(':visible')) {\n          this.date(d.clone().add(1, 'M'));\n        }\n      },\n      enter: function enter() {\n        this.hide();\n      },\n      escape: function escape() {\n        this.hide();\n      },\n      //tab: function (widget) { //this break the flow of the form. disabling for now\n      //    var toggle = widget.find('.picker-switch a[data-action=\"togglePicker\"]');\n      //    if(toggle.length > 0) toggle.click();\n      //},\n      'control space': function controlSpace(widget) {\n        if (!widget) {\n          return;\n        }\n\n        if (widget.find('.timepicker').is(':visible')) {\n          widget.find('.btn[data-action=\"togglePeriod\"]').click();\n        }\n      },\n      t: function t() {\n        this.date(this.getMoment());\n      },\n      'delete': function _delete() {\n        this.clear();\n      }\n    },\n    debug: false,\n    allowInputToggle: false,\n    disabledTimeIntervals: false,\n    disabledHours: false,\n    enabledHours: false,\n    viewDate: false\n  };\n  return $.fn.datetimepicker;\n});","function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n/*!\n  * Bootstrap v4.3.1 (https://getbootstrap.com/)\n  * Copyright 2011-2019 The Bootstrap Authors (https://github.com/twbs/bootstrap/graphs/contributors)\n  * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n  */\n(function (global, factory) {\n  (typeof exports === \"undefined\" ? \"undefined\" : _typeof(exports)) === 'object' && typeof module !== 'undefined' ? factory(exports, require('jquery'), require('popper.js')) : typeof define === 'function' && define.amd ? define(['exports', 'jquery', 'popper.js'], factory) : (global = global || self, factory(global.bootstrap = {}, global.jQuery, global.Popper));\n})(this, function (exports, $, Popper) {\n  'use strict';\n\n  $ = $ && $.hasOwnProperty('default') ? $['default'] : $;\n  Popper = Popper && Popper.hasOwnProperty('default') ? Popper['default'] : Popper;\n\n  function _defineProperties(target, props) {\n    for (var i = 0; i < props.length; i++) {\n      var descriptor = props[i];\n      descriptor.enumerable = descriptor.enumerable || false;\n      descriptor.configurable = true;\n      if (\"value\" in descriptor) descriptor.writable = true;\n      Object.defineProperty(target, descriptor.key, descriptor);\n    }\n  }\n\n  function _createClass(Constructor, protoProps, staticProps) {\n    if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n    if (staticProps) _defineProperties(Constructor, staticProps);\n    return Constructor;\n  }\n\n  function _defineProperty(obj, key, value) {\n    if (key in obj) {\n      Object.defineProperty(obj, key, {\n        value: value,\n        enumerable: true,\n        configurable: true,\n        writable: true\n      });\n    } else {\n      obj[key] = value;\n    }\n\n    return obj;\n  }\n\n  function _objectSpread(target) {\n    for (var i = 1; i < arguments.length; i++) {\n      var source = arguments[i] != null ? arguments[i] : {};\n      var ownKeys = Object.keys(source);\n\n      if (typeof Object.getOwnPropertySymbols === 'function') {\n        ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) {\n          return Object.getOwnPropertyDescriptor(source, sym).enumerable;\n        }));\n      }\n\n      ownKeys.forEach(function (key) {\n        _defineProperty(target, key, source[key]);\n      });\n    }\n\n    return target;\n  }\n\n  function _inheritsLoose(subClass, superClass) {\n    subClass.prototype = Object.create(superClass.prototype);\n    subClass.prototype.constructor = subClass;\n    subClass.__proto__ = superClass;\n  }\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v4.3.1): util.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n\n  /**\n   * ------------------------------------------------------------------------\n   * Private TransitionEnd Helpers\n   * ------------------------------------------------------------------------\n   */\n\n\n  var TRANSITION_END = 'transitionend';\n  var MAX_UID = 1000000;\n  var MILLISECONDS_MULTIPLIER = 1000; // Shoutout AngusCroll (https://goo.gl/pxwQGp)\n\n  function toType(obj) {\n    return {}.toString.call(obj).match(/\\s([a-z]+)/i)[1].toLowerCase();\n  }\n\n  function getSpecialTransitionEndEvent() {\n    return {\n      bindType: TRANSITION_END,\n      delegateType: TRANSITION_END,\n      handle: function handle(event) {\n        if ($(event.target).is(this)) {\n          return event.handleObj.handler.apply(this, arguments); // eslint-disable-line prefer-rest-params\n        }\n\n        return undefined; // eslint-disable-line no-undefined\n      }\n    };\n  }\n\n  function transitionEndEmulator(duration) {\n    var _this = this;\n\n    var called = false;\n    $(this).one(Util.TRANSITION_END, function () {\n      called = true;\n    });\n    setTimeout(function () {\n      if (!called) {\n        Util.triggerTransitionEnd(_this);\n      }\n    }, duration);\n    return this;\n  }\n\n  function setTransitionEndSupport() {\n    $.fn.emulateTransitionEnd = transitionEndEmulator;\n    $.event.special[Util.TRANSITION_END] = getSpecialTransitionEndEvent();\n  }\n  /**\n   * --------------------------------------------------------------------------\n   * Public Util Api\n   * --------------------------------------------------------------------------\n   */\n\n\n  var Util = {\n    TRANSITION_END: 'bsTransitionEnd',\n    getUID: function getUID(prefix) {\n      do {\n        // eslint-disable-next-line no-bitwise\n        prefix += ~~(Math.random() * MAX_UID); // \"~~\" acts like a faster Math.floor() here\n      } while (document.getElementById(prefix));\n\n      return prefix;\n    },\n    getSelectorFromElement: function getSelectorFromElement(element) {\n      var selector = element.getAttribute('data-target');\n\n      if (!selector || selector === '#') {\n        var hrefAttr = element.getAttribute('href');\n        selector = hrefAttr && hrefAttr !== '#' ? hrefAttr.trim() : '';\n      }\n\n      try {\n        return document.querySelector(selector) ? selector : null;\n      } catch (err) {\n        return null;\n      }\n    },\n    getTransitionDurationFromElement: function getTransitionDurationFromElement(element) {\n      if (!element) {\n        return 0;\n      } // Get transition-duration of the element\n\n\n      var transitionDuration = $(element).css('transition-duration');\n      var transitionDelay = $(element).css('transition-delay');\n      var floatTransitionDuration = parseFloat(transitionDuration);\n      var floatTransitionDelay = parseFloat(transitionDelay); // Return 0 if element or transition duration is not found\n\n      if (!floatTransitionDuration && !floatTransitionDelay) {\n        return 0;\n      } // If multiple durations are defined, take the first\n\n\n      transitionDuration = transitionDuration.split(',')[0];\n      transitionDelay = transitionDelay.split(',')[0];\n      return (parseFloat(transitionDuration) + parseFloat(transitionDelay)) * MILLISECONDS_MULTIPLIER;\n    },\n    reflow: function reflow(element) {\n      return element.offsetHeight;\n    },\n    triggerTransitionEnd: function triggerTransitionEnd(element) {\n      $(element).trigger(TRANSITION_END);\n    },\n    // TODO: Remove in v5\n    supportsTransitionEnd: function supportsTransitionEnd() {\n      return Boolean(TRANSITION_END);\n    },\n    isElement: function isElement(obj) {\n      return (obj[0] || obj).nodeType;\n    },\n    typeCheckConfig: function typeCheckConfig(componentName, config, configTypes) {\n      for (var property in configTypes) {\n        if (Object.prototype.hasOwnProperty.call(configTypes, property)) {\n          var expectedTypes = configTypes[property];\n          var value = config[property];\n          var valueType = value && Util.isElement(value) ? 'element' : toType(value);\n\n          if (!new RegExp(expectedTypes).test(valueType)) {\n            throw new Error(componentName.toUpperCase() + \": \" + (\"Option \\\"\" + property + \"\\\" provided type \\\"\" + valueType + \"\\\" \") + (\"but expected type \\\"\" + expectedTypes + \"\\\".\"));\n          }\n        }\n      }\n    },\n    findShadowRoot: function findShadowRoot(element) {\n      if (!document.documentElement.attachShadow) {\n        return null;\n      } // Can find the shadow root otherwise it'll return the document\n\n\n      if (typeof element.getRootNode === 'function') {\n        var root = element.getRootNode();\n        return root instanceof ShadowRoot ? root : null;\n      }\n\n      if (element instanceof ShadowRoot) {\n        return element;\n      } // when we don't find a shadow root\n\n\n      if (!element.parentNode) {\n        return null;\n      }\n\n      return Util.findShadowRoot(element.parentNode);\n    }\n  };\n  setTransitionEndSupport();\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n  var NAME = 'alert';\n  var VERSION = '4.3.1';\n  var DATA_KEY = 'bs.alert';\n  var EVENT_KEY = \".\" + DATA_KEY;\n  var DATA_API_KEY = '.data-api';\n  var JQUERY_NO_CONFLICT = $.fn[NAME];\n  var Selector = {\n    DISMISS: '[data-dismiss=\"alert\"]'\n  };\n  var Event = {\n    CLOSE: \"close\" + EVENT_KEY,\n    CLOSED: \"closed\" + EVENT_KEY,\n    CLICK_DATA_API: \"click\" + EVENT_KEY + DATA_API_KEY\n  };\n  var ClassName = {\n    ALERT: 'alert',\n    FADE: 'fade',\n    SHOW: 'show'\n    /**\n     * ------------------------------------------------------------------------\n     * Class Definition\n     * ------------------------------------------------------------------------\n     */\n\n  };\n\n  var Alert =\n  /*#__PURE__*/\n  function () {\n    function Alert(element) {\n      this._element = element;\n    } // Getters\n\n\n    var _proto = Alert.prototype; // Public\n\n    _proto.close = function close(element) {\n      var rootElement = this._element;\n\n      if (element) {\n        rootElement = this._getRootElement(element);\n      }\n\n      var customEvent = this._triggerCloseEvent(rootElement);\n\n      if (customEvent.isDefaultPrevented()) {\n        return;\n      }\n\n      this._removeElement(rootElement);\n    };\n\n    _proto.dispose = function dispose() {\n      $.removeData(this._element, DATA_KEY);\n      this._element = null;\n    } // Private\n    ;\n\n    _proto._getRootElement = function _getRootElement(element) {\n      var selector = Util.getSelectorFromElement(element);\n      var parent = false;\n\n      if (selector) {\n        parent = document.querySelector(selector);\n      }\n\n      if (!parent) {\n        parent = $(element).closest(\".\" + ClassName.ALERT)[0];\n      }\n\n      return parent;\n    };\n\n    _proto._triggerCloseEvent = function _triggerCloseEvent(element) {\n      var closeEvent = $.Event(Event.CLOSE);\n      $(element).trigger(closeEvent);\n      return closeEvent;\n    };\n\n    _proto._removeElement = function _removeElement(element) {\n      var _this = this;\n\n      $(element).removeClass(ClassName.SHOW);\n\n      if (!$(element).hasClass(ClassName.FADE)) {\n        this._destroyElement(element);\n\n        return;\n      }\n\n      var transitionDuration = Util.getTransitionDurationFromElement(element);\n      $(element).one(Util.TRANSITION_END, function (event) {\n        return _this._destroyElement(element, event);\n      }).emulateTransitionEnd(transitionDuration);\n    };\n\n    _proto._destroyElement = function _destroyElement(element) {\n      $(element).detach().trigger(Event.CLOSED).remove();\n    } // Static\n    ;\n\n    Alert._jQueryInterface = function _jQueryInterface(config) {\n      return this.each(function () {\n        var $element = $(this);\n        var data = $element.data(DATA_KEY);\n\n        if (!data) {\n          data = new Alert(this);\n          $element.data(DATA_KEY, data);\n        }\n\n        if (config === 'close') {\n          data[config](this);\n        }\n      });\n    };\n\n    Alert._handleDismiss = function _handleDismiss(alertInstance) {\n      return function (event) {\n        if (event) {\n          event.preventDefault();\n        }\n\n        alertInstance.close(this);\n      };\n    };\n\n    _createClass(Alert, null, [{\n      key: \"VERSION\",\n      get: function get() {\n        return VERSION;\n      }\n    }]);\n\n    return Alert;\n  }();\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  $(document).on(Event.CLICK_DATA_API, Selector.DISMISS, Alert._handleDismiss(new Alert()));\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n  $.fn[NAME] = Alert._jQueryInterface;\n  $.fn[NAME].Constructor = Alert;\n\n  $.fn[NAME].noConflict = function () {\n    $.fn[NAME] = JQUERY_NO_CONFLICT;\n    return Alert._jQueryInterface;\n  };\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n\n  var NAME$1 = 'button';\n  var VERSION$1 = '4.3.1';\n  var DATA_KEY$1 = 'bs.button';\n  var EVENT_KEY$1 = \".\" + DATA_KEY$1;\n  var DATA_API_KEY$1 = '.data-api';\n  var JQUERY_NO_CONFLICT$1 = $.fn[NAME$1];\n  var ClassName$1 = {\n    ACTIVE: 'active',\n    BUTTON: 'btn',\n    FOCUS: 'focus'\n  };\n  var Selector$1 = {\n    DATA_TOGGLE_CARROT: '[data-toggle^=\"button\"]',\n    DATA_TOGGLE: '[data-toggle=\"buttons\"]',\n    INPUT: 'input:not([type=\"hidden\"])',\n    ACTIVE: '.active',\n    BUTTON: '.btn'\n  };\n  var Event$1 = {\n    CLICK_DATA_API: \"click\" + EVENT_KEY$1 + DATA_API_KEY$1,\n    FOCUS_BLUR_DATA_API: \"focus\" + EVENT_KEY$1 + DATA_API_KEY$1 + \" \" + (\"blur\" + EVENT_KEY$1 + DATA_API_KEY$1)\n    /**\n     * ------------------------------------------------------------------------\n     * Class Definition\n     * ------------------------------------------------------------------------\n     */\n\n  };\n\n  var Button =\n  /*#__PURE__*/\n  function () {\n    function Button(element) {\n      this._element = element;\n    } // Getters\n\n\n    var _proto = Button.prototype; // Public\n\n    _proto.toggle = function toggle() {\n      var triggerChangeEvent = true;\n      var addAriaPressed = true;\n      var rootElement = $(this._element).closest(Selector$1.DATA_TOGGLE)[0];\n\n      if (rootElement) {\n        var input = this._element.querySelector(Selector$1.INPUT);\n\n        if (input) {\n          if (input.type === 'radio') {\n            if (input.checked && this._element.classList.contains(ClassName$1.ACTIVE)) {\n              triggerChangeEvent = false;\n            } else {\n              var activeElement = rootElement.querySelector(Selector$1.ACTIVE);\n\n              if (activeElement) {\n                $(activeElement).removeClass(ClassName$1.ACTIVE);\n              }\n            }\n          }\n\n          if (triggerChangeEvent) {\n            if (input.hasAttribute('disabled') || rootElement.hasAttribute('disabled') || input.classList.contains('disabled') || rootElement.classList.contains('disabled')) {\n              return;\n            }\n\n            input.checked = !this._element.classList.contains(ClassName$1.ACTIVE);\n            $(input).trigger('change');\n          }\n\n          input.focus();\n          addAriaPressed = false;\n        }\n      }\n\n      if (addAriaPressed) {\n        this._element.setAttribute('aria-pressed', !this._element.classList.contains(ClassName$1.ACTIVE));\n      }\n\n      if (triggerChangeEvent) {\n        $(this._element).toggleClass(ClassName$1.ACTIVE);\n      }\n    };\n\n    _proto.dispose = function dispose() {\n      $.removeData(this._element, DATA_KEY$1);\n      this._element = null;\n    } // Static\n    ;\n\n    Button._jQueryInterface = function _jQueryInterface(config) {\n      return this.each(function () {\n        var data = $(this).data(DATA_KEY$1);\n\n        if (!data) {\n          data = new Button(this);\n          $(this).data(DATA_KEY$1, data);\n        }\n\n        if (config === 'toggle') {\n          data[config]();\n        }\n      });\n    };\n\n    _createClass(Button, null, [{\n      key: \"VERSION\",\n      get: function get() {\n        return VERSION$1;\n      }\n    }]);\n\n    return Button;\n  }();\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  $(document).on(Event$1.CLICK_DATA_API, Selector$1.DATA_TOGGLE_CARROT, function (event) {\n    event.preventDefault();\n    var button = event.target;\n\n    if (!$(button).hasClass(ClassName$1.BUTTON)) {\n      button = $(button).closest(Selector$1.BUTTON);\n    }\n\n    Button._jQueryInterface.call($(button), 'toggle');\n  }).on(Event$1.FOCUS_BLUR_DATA_API, Selector$1.DATA_TOGGLE_CARROT, function (event) {\n    var button = $(event.target).closest(Selector$1.BUTTON)[0];\n    $(button).toggleClass(ClassName$1.FOCUS, /^focus(in)?$/.test(event.type));\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n  $.fn[NAME$1] = Button._jQueryInterface;\n  $.fn[NAME$1].Constructor = Button;\n\n  $.fn[NAME$1].noConflict = function () {\n    $.fn[NAME$1] = JQUERY_NO_CONFLICT$1;\n    return Button._jQueryInterface;\n  };\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n\n  var NAME$2 = 'carousel';\n  var VERSION$2 = '4.3.1';\n  var DATA_KEY$2 = 'bs.carousel';\n  var EVENT_KEY$2 = \".\" + DATA_KEY$2;\n  var DATA_API_KEY$2 = '.data-api';\n  var JQUERY_NO_CONFLICT$2 = $.fn[NAME$2];\n  var ARROW_LEFT_KEYCODE = 37; // KeyboardEvent.which value for left arrow key\n\n  var ARROW_RIGHT_KEYCODE = 39; // KeyboardEvent.which value for right arrow key\n\n  var TOUCHEVENT_COMPAT_WAIT = 500; // Time for mouse compat events to fire after touch\n\n  var SWIPE_THRESHOLD = 40;\n  var Default = {\n    interval: 5000,\n    keyboard: true,\n    slide: false,\n    pause: 'hover',\n    wrap: true,\n    touch: true\n  };\n  var DefaultType = {\n    interval: '(number|boolean)',\n    keyboard: 'boolean',\n    slide: '(boolean|string)',\n    pause: '(string|boolean)',\n    wrap: 'boolean',\n    touch: 'boolean'\n  };\n  var Direction = {\n    NEXT: 'next',\n    PREV: 'prev',\n    LEFT: 'left',\n    RIGHT: 'right'\n  };\n  var Event$2 = {\n    SLIDE: \"slide\" + EVENT_KEY$2,\n    SLID: \"slid\" + EVENT_KEY$2,\n    KEYDOWN: \"keydown\" + EVENT_KEY$2,\n    MOUSEENTER: \"mouseenter\" + EVENT_KEY$2,\n    MOUSELEAVE: \"mouseleave\" + EVENT_KEY$2,\n    TOUCHSTART: \"touchstart\" + EVENT_KEY$2,\n    TOUCHMOVE: \"touchmove\" + EVENT_KEY$2,\n    TOUCHEND: \"touchend\" + EVENT_KEY$2,\n    POINTERDOWN: \"pointerdown\" + EVENT_KEY$2,\n    POINTERUP: \"pointerup\" + EVENT_KEY$2,\n    DRAG_START: \"dragstart\" + EVENT_KEY$2,\n    LOAD_DATA_API: \"load\" + EVENT_KEY$2 + DATA_API_KEY$2,\n    CLICK_DATA_API: \"click\" + EVENT_KEY$2 + DATA_API_KEY$2\n  };\n  var ClassName$2 = {\n    CAROUSEL: 'carousel',\n    ACTIVE: 'active',\n    SLIDE: 'slide',\n    RIGHT: 'carousel-item-right',\n    LEFT: 'carousel-item-left',\n    NEXT: 'carousel-item-next',\n    PREV: 'carousel-item-prev',\n    ITEM: 'carousel-item',\n    POINTER_EVENT: 'pointer-event'\n  };\n  var Selector$2 = {\n    ACTIVE: '.active',\n    ACTIVE_ITEM: '.active.carousel-item',\n    ITEM: '.carousel-item',\n    ITEM_IMG: '.carousel-item img',\n    NEXT_PREV: '.carousel-item-next, .carousel-item-prev',\n    INDICATORS: '.carousel-indicators',\n    DATA_SLIDE: '[data-slide], [data-slide-to]',\n    DATA_RIDE: '[data-ride=\"carousel\"]'\n  };\n  var PointerType = {\n    TOUCH: 'touch',\n    PEN: 'pen'\n    /**\n     * ------------------------------------------------------------------------\n     * Class Definition\n     * ------------------------------------------------------------------------\n     */\n\n  };\n\n  var Carousel =\n  /*#__PURE__*/\n  function () {\n    function Carousel(element, config) {\n      this._items = null;\n      this._interval = null;\n      this._activeElement = null;\n      this._isPaused = false;\n      this._isSliding = false;\n      this.touchTimeout = null;\n      this.touchStartX = 0;\n      this.touchDeltaX = 0;\n      this._config = this._getConfig(config);\n      this._element = element;\n      this._indicatorsElement = this._element.querySelector(Selector$2.INDICATORS);\n      this._touchSupported = 'ontouchstart' in document.documentElement || navigator.maxTouchPoints > 0;\n      this._pointerEvent = Boolean(window.PointerEvent || window.MSPointerEvent);\n\n      this._addEventListeners();\n    } // Getters\n\n\n    var _proto = Carousel.prototype; // Public\n\n    _proto.next = function next() {\n      if (!this._isSliding) {\n        this._slide(Direction.NEXT);\n      }\n    };\n\n    _proto.nextWhenVisible = function nextWhenVisible() {\n      // Don't call next when the page isn't visible\n      // or the carousel or its parent isn't visible\n      if (!document.hidden && $(this._element).is(':visible') && $(this._element).css('visibility') !== 'hidden') {\n        this.next();\n      }\n    };\n\n    _proto.prev = function prev() {\n      if (!this._isSliding) {\n        this._slide(Direction.PREV);\n      }\n    };\n\n    _proto.pause = function pause(event) {\n      if (!event) {\n        this._isPaused = true;\n      }\n\n      if (this._element.querySelector(Selector$2.NEXT_PREV)) {\n        Util.triggerTransitionEnd(this._element);\n        this.cycle(true);\n      }\n\n      clearInterval(this._interval);\n      this._interval = null;\n    };\n\n    _proto.cycle = function cycle(event) {\n      if (!event) {\n        this._isPaused = false;\n      }\n\n      if (this._interval) {\n        clearInterval(this._interval);\n        this._interval = null;\n      }\n\n      if (this._config.interval && !this._isPaused) {\n        this._interval = setInterval((document.visibilityState ? this.nextWhenVisible : this.next).bind(this), this._config.interval);\n      }\n    };\n\n    _proto.to = function to(index) {\n      var _this = this;\n\n      this._activeElement = this._element.querySelector(Selector$2.ACTIVE_ITEM);\n\n      var activeIndex = this._getItemIndex(this._activeElement);\n\n      if (index > this._items.length - 1 || index < 0) {\n        return;\n      }\n\n      if (this._isSliding) {\n        $(this._element).one(Event$2.SLID, function () {\n          return _this.to(index);\n        });\n        return;\n      }\n\n      if (activeIndex === index) {\n        this.pause();\n        this.cycle();\n        return;\n      }\n\n      var direction = index > activeIndex ? Direction.NEXT : Direction.PREV;\n\n      this._slide(direction, this._items[index]);\n    };\n\n    _proto.dispose = function dispose() {\n      $(this._element).off(EVENT_KEY$2);\n      $.removeData(this._element, DATA_KEY$2);\n      this._items = null;\n      this._config = null;\n      this._element = null;\n      this._interval = null;\n      this._isPaused = null;\n      this._isSliding = null;\n      this._activeElement = null;\n      this._indicatorsElement = null;\n    } // Private\n    ;\n\n    _proto._getConfig = function _getConfig(config) {\n      config = _objectSpread({}, Default, config);\n      Util.typeCheckConfig(NAME$2, config, DefaultType);\n      return config;\n    };\n\n    _proto._handleSwipe = function _handleSwipe() {\n      var absDeltax = Math.abs(this.touchDeltaX);\n\n      if (absDeltax <= SWIPE_THRESHOLD) {\n        return;\n      }\n\n      var direction = absDeltax / this.touchDeltaX; // swipe left\n\n      if (direction > 0) {\n        this.prev();\n      } // swipe right\n\n\n      if (direction < 0) {\n        this.next();\n      }\n    };\n\n    _proto._addEventListeners = function _addEventListeners() {\n      var _this2 = this;\n\n      if (this._config.keyboard) {\n        $(this._element).on(Event$2.KEYDOWN, function (event) {\n          return _this2._keydown(event);\n        });\n      }\n\n      if (this._config.pause === 'hover') {\n        $(this._element).on(Event$2.MOUSEENTER, function (event) {\n          return _this2.pause(event);\n        }).on(Event$2.MOUSELEAVE, function (event) {\n          return _this2.cycle(event);\n        });\n      }\n\n      if (this._config.touch) {\n        this._addTouchEventListeners();\n      }\n    };\n\n    _proto._addTouchEventListeners = function _addTouchEventListeners() {\n      var _this3 = this;\n\n      if (!this._touchSupported) {\n        return;\n      }\n\n      var start = function start(event) {\n        if (_this3._pointerEvent && PointerType[event.originalEvent.pointerType.toUpperCase()]) {\n          _this3.touchStartX = event.originalEvent.clientX;\n        } else if (!_this3._pointerEvent) {\n          _this3.touchStartX = event.originalEvent.touches[0].clientX;\n        }\n      };\n\n      var move = function move(event) {\n        // ensure swiping with one touch and not pinching\n        if (event.originalEvent.touches && event.originalEvent.touches.length > 1) {\n          _this3.touchDeltaX = 0;\n        } else {\n          _this3.touchDeltaX = event.originalEvent.touches[0].clientX - _this3.touchStartX;\n        }\n      };\n\n      var end = function end(event) {\n        if (_this3._pointerEvent && PointerType[event.originalEvent.pointerType.toUpperCase()]) {\n          _this3.touchDeltaX = event.originalEvent.clientX - _this3.touchStartX;\n        }\n\n        _this3._handleSwipe();\n\n        if (_this3._config.pause === 'hover') {\n          // If it's a touch-enabled device, mouseenter/leave are fired as\n          // part of the mouse compatibility events on first tap - the carousel\n          // would stop cycling until user tapped out of it;\n          // here, we listen for touchend, explicitly pause the carousel\n          // (as if it's the second time we tap on it, mouseenter compat event\n          // is NOT fired) and after a timeout (to allow for mouse compatibility\n          // events to fire) we explicitly restart cycling\n          _this3.pause();\n\n          if (_this3.touchTimeout) {\n            clearTimeout(_this3.touchTimeout);\n          }\n\n          _this3.touchTimeout = setTimeout(function (event) {\n            return _this3.cycle(event);\n          }, TOUCHEVENT_COMPAT_WAIT + _this3._config.interval);\n        }\n      };\n\n      $(this._element.querySelectorAll(Selector$2.ITEM_IMG)).on(Event$2.DRAG_START, function (e) {\n        return e.preventDefault();\n      });\n\n      if (this._pointerEvent) {\n        $(this._element).on(Event$2.POINTERDOWN, function (event) {\n          return start(event);\n        });\n        $(this._element).on(Event$2.POINTERUP, function (event) {\n          return end(event);\n        });\n\n        this._element.classList.add(ClassName$2.POINTER_EVENT);\n      } else {\n        $(this._element).on(Event$2.TOUCHSTART, function (event) {\n          return start(event);\n        });\n        $(this._element).on(Event$2.TOUCHMOVE, function (event) {\n          return move(event);\n        });\n        $(this._element).on(Event$2.TOUCHEND, function (event) {\n          return end(event);\n        });\n      }\n    };\n\n    _proto._keydown = function _keydown(event) {\n      if (/input|textarea/i.test(event.target.tagName)) {\n        return;\n      }\n\n      switch (event.which) {\n        case ARROW_LEFT_KEYCODE:\n          event.preventDefault();\n          this.prev();\n          break;\n\n        case ARROW_RIGHT_KEYCODE:\n          event.preventDefault();\n          this.next();\n          break;\n\n        default:\n      }\n    };\n\n    _proto._getItemIndex = function _getItemIndex(element) {\n      this._items = element && element.parentNode ? [].slice.call(element.parentNode.querySelectorAll(Selector$2.ITEM)) : [];\n      return this._items.indexOf(element);\n    };\n\n    _proto._getItemByDirection = function _getItemByDirection(direction, activeElement) {\n      var isNextDirection = direction === Direction.NEXT;\n      var isPrevDirection = direction === Direction.PREV;\n\n      var activeIndex = this._getItemIndex(activeElement);\n\n      var lastItemIndex = this._items.length - 1;\n      var isGoingToWrap = isPrevDirection && activeIndex === 0 || isNextDirection && activeIndex === lastItemIndex;\n\n      if (isGoingToWrap && !this._config.wrap) {\n        return activeElement;\n      }\n\n      var delta = direction === Direction.PREV ? -1 : 1;\n      var itemIndex = (activeIndex + delta) % this._items.length;\n      return itemIndex === -1 ? this._items[this._items.length - 1] : this._items[itemIndex];\n    };\n\n    _proto._triggerSlideEvent = function _triggerSlideEvent(relatedTarget, eventDirectionName) {\n      var targetIndex = this._getItemIndex(relatedTarget);\n\n      var fromIndex = this._getItemIndex(this._element.querySelector(Selector$2.ACTIVE_ITEM));\n\n      var slideEvent = $.Event(Event$2.SLIDE, {\n        relatedTarget: relatedTarget,\n        direction: eventDirectionName,\n        from: fromIndex,\n        to: targetIndex\n      });\n      $(this._element).trigger(slideEvent);\n      return slideEvent;\n    };\n\n    _proto._setActiveIndicatorElement = function _setActiveIndicatorElement(element) {\n      if (this._indicatorsElement) {\n        var indicators = [].slice.call(this._indicatorsElement.querySelectorAll(Selector$2.ACTIVE));\n        $(indicators).removeClass(ClassName$2.ACTIVE);\n\n        var nextIndicator = this._indicatorsElement.children[this._getItemIndex(element)];\n\n        if (nextIndicator) {\n          $(nextIndicator).addClass(ClassName$2.ACTIVE);\n        }\n      }\n    };\n\n    _proto._slide = function _slide(direction, element) {\n      var _this4 = this;\n\n      var activeElement = this._element.querySelector(Selector$2.ACTIVE_ITEM);\n\n      var activeElementIndex = this._getItemIndex(activeElement);\n\n      var nextElement = element || activeElement && this._getItemByDirection(direction, activeElement);\n\n      var nextElementIndex = this._getItemIndex(nextElement);\n\n      var isCycling = Boolean(this._interval);\n      var directionalClassName;\n      var orderClassName;\n      var eventDirectionName;\n\n      if (direction === Direction.NEXT) {\n        directionalClassName = ClassName$2.LEFT;\n        orderClassName = ClassName$2.NEXT;\n        eventDirectionName = Direction.LEFT;\n      } else {\n        directionalClassName = ClassName$2.RIGHT;\n        orderClassName = ClassName$2.PREV;\n        eventDirectionName = Direction.RIGHT;\n      }\n\n      if (nextElement && $(nextElement).hasClass(ClassName$2.ACTIVE)) {\n        this._isSliding = false;\n        return;\n      }\n\n      var slideEvent = this._triggerSlideEvent(nextElement, eventDirectionName);\n\n      if (slideEvent.isDefaultPrevented()) {\n        return;\n      }\n\n      if (!activeElement || !nextElement) {\n        // Some weirdness is happening, so we bail\n        return;\n      }\n\n      this._isSliding = true;\n\n      if (isCycling) {\n        this.pause();\n      }\n\n      this._setActiveIndicatorElement(nextElement);\n\n      var slidEvent = $.Event(Event$2.SLID, {\n        relatedTarget: nextElement,\n        direction: eventDirectionName,\n        from: activeElementIndex,\n        to: nextElementIndex\n      });\n\n      if ($(this._element).hasClass(ClassName$2.SLIDE)) {\n        $(nextElement).addClass(orderClassName);\n        Util.reflow(nextElement);\n        $(activeElement).addClass(directionalClassName);\n        $(nextElement).addClass(directionalClassName);\n        var nextElementInterval = parseInt(nextElement.getAttribute('data-interval'), 10);\n\n        if (nextElementInterval) {\n          this._config.defaultInterval = this._config.defaultInterval || this._config.interval;\n          this._config.interval = nextElementInterval;\n        } else {\n          this._config.interval = this._config.defaultInterval || this._config.interval;\n        }\n\n        var transitionDuration = Util.getTransitionDurationFromElement(activeElement);\n        $(activeElement).one(Util.TRANSITION_END, function () {\n          $(nextElement).removeClass(directionalClassName + \" \" + orderClassName).addClass(ClassName$2.ACTIVE);\n          $(activeElement).removeClass(ClassName$2.ACTIVE + \" \" + orderClassName + \" \" + directionalClassName);\n          _this4._isSliding = false;\n          setTimeout(function () {\n            return $(_this4._element).trigger(slidEvent);\n          }, 0);\n        }).emulateTransitionEnd(transitionDuration);\n      } else {\n        $(activeElement).removeClass(ClassName$2.ACTIVE);\n        $(nextElement).addClass(ClassName$2.ACTIVE);\n        this._isSliding = false;\n        $(this._element).trigger(slidEvent);\n      }\n\n      if (isCycling) {\n        this.cycle();\n      }\n    } // Static\n    ;\n\n    Carousel._jQueryInterface = function _jQueryInterface(config) {\n      return this.each(function () {\n        var data = $(this).data(DATA_KEY$2);\n\n        var _config = _objectSpread({}, Default, $(this).data());\n\n        if (_typeof(config) === 'object') {\n          _config = _objectSpread({}, _config, config);\n        }\n\n        var action = typeof config === 'string' ? config : _config.slide;\n\n        if (!data) {\n          data = new Carousel(this, _config);\n          $(this).data(DATA_KEY$2, data);\n        }\n\n        if (typeof config === 'number') {\n          data.to(config);\n        } else if (typeof action === 'string') {\n          if (typeof data[action] === 'undefined') {\n            throw new TypeError(\"No method named \\\"\" + action + \"\\\"\");\n          }\n\n          data[action]();\n        } else if (_config.interval && _config.ride) {\n          data.pause();\n          data.cycle();\n        }\n      });\n    };\n\n    Carousel._dataApiClickHandler = function _dataApiClickHandler(event) {\n      var selector = Util.getSelectorFromElement(this);\n\n      if (!selector) {\n        return;\n      }\n\n      var target = $(selector)[0];\n\n      if (!target || !$(target).hasClass(ClassName$2.CAROUSEL)) {\n        return;\n      }\n\n      var config = _objectSpread({}, $(target).data(), $(this).data());\n\n      var slideIndex = this.getAttribute('data-slide-to');\n\n      if (slideIndex) {\n        config.interval = false;\n      }\n\n      Carousel._jQueryInterface.call($(target), config);\n\n      if (slideIndex) {\n        $(target).data(DATA_KEY$2).to(slideIndex);\n      }\n\n      event.preventDefault();\n    };\n\n    _createClass(Carousel, null, [{\n      key: \"VERSION\",\n      get: function get() {\n        return VERSION$2;\n      }\n    }, {\n      key: \"Default\",\n      get: function get() {\n        return Default;\n      }\n    }]);\n\n    return Carousel;\n  }();\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  $(document).on(Event$2.CLICK_DATA_API, Selector$2.DATA_SLIDE, Carousel._dataApiClickHandler);\n  $(window).on(Event$2.LOAD_DATA_API, function () {\n    var carousels = [].slice.call(document.querySelectorAll(Selector$2.DATA_RIDE));\n\n    for (var i = 0, len = carousels.length; i < len; i++) {\n      var $carousel = $(carousels[i]);\n\n      Carousel._jQueryInterface.call($carousel, $carousel.data());\n    }\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n  $.fn[NAME$2] = Carousel._jQueryInterface;\n  $.fn[NAME$2].Constructor = Carousel;\n\n  $.fn[NAME$2].noConflict = function () {\n    $.fn[NAME$2] = JQUERY_NO_CONFLICT$2;\n    return Carousel._jQueryInterface;\n  };\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n\n  var NAME$3 = 'collapse';\n  var VERSION$3 = '4.3.1';\n  var DATA_KEY$3 = 'bs.collapse';\n  var EVENT_KEY$3 = \".\" + DATA_KEY$3;\n  var DATA_API_KEY$3 = '.data-api';\n  var JQUERY_NO_CONFLICT$3 = $.fn[NAME$3];\n  var Default$1 = {\n    toggle: true,\n    parent: ''\n  };\n  var DefaultType$1 = {\n    toggle: 'boolean',\n    parent: '(string|element)'\n  };\n  var Event$3 = {\n    SHOW: \"show\" + EVENT_KEY$3,\n    SHOWN: \"shown\" + EVENT_KEY$3,\n    HIDE: \"hide\" + EVENT_KEY$3,\n    HIDDEN: \"hidden\" + EVENT_KEY$3,\n    CLICK_DATA_API: \"click\" + EVENT_KEY$3 + DATA_API_KEY$3\n  };\n  var ClassName$3 = {\n    SHOW: 'show',\n    COLLAPSE: 'collapse',\n    COLLAPSING: 'collapsing',\n    COLLAPSED: 'collapsed'\n  };\n  var Dimension = {\n    WIDTH: 'width',\n    HEIGHT: 'height'\n  };\n  var Selector$3 = {\n    ACTIVES: '.show, .collapsing',\n    DATA_TOGGLE: '[data-toggle=\"collapse\"]'\n    /**\n     * ------------------------------------------------------------------------\n     * Class Definition\n     * ------------------------------------------------------------------------\n     */\n\n  };\n\n  var Collapse =\n  /*#__PURE__*/\n  function () {\n    function Collapse(element, config) {\n      this._isTransitioning = false;\n      this._element = element;\n      this._config = this._getConfig(config);\n      this._triggerArray = [].slice.call(document.querySelectorAll(\"[data-toggle=\\\"collapse\\\"][href=\\\"#\" + element.id + \"\\\"],\" + (\"[data-toggle=\\\"collapse\\\"][data-target=\\\"#\" + element.id + \"\\\"]\")));\n      var toggleList = [].slice.call(document.querySelectorAll(Selector$3.DATA_TOGGLE));\n\n      for (var i = 0, len = toggleList.length; i < len; i++) {\n        var elem = toggleList[i];\n        var selector = Util.getSelectorFromElement(elem);\n        var filterElement = [].slice.call(document.querySelectorAll(selector)).filter(function (foundElem) {\n          return foundElem === element;\n        });\n\n        if (selector !== null && filterElement.length > 0) {\n          this._selector = selector;\n\n          this._triggerArray.push(elem);\n        }\n      }\n\n      this._parent = this._config.parent ? this._getParent() : null;\n\n      if (!this._config.parent) {\n        this._addAriaAndCollapsedClass(this._element, this._triggerArray);\n      }\n\n      if (this._config.toggle) {\n        this.toggle();\n      }\n    } // Getters\n\n\n    var _proto = Collapse.prototype; // Public\n\n    _proto.toggle = function toggle() {\n      if ($(this._element).hasClass(ClassName$3.SHOW)) {\n        this.hide();\n      } else {\n        this.show();\n      }\n    };\n\n    _proto.show = function show() {\n      var _this = this;\n\n      if (this._isTransitioning || $(this._element).hasClass(ClassName$3.SHOW)) {\n        return;\n      }\n\n      var actives;\n      var activesData;\n\n      if (this._parent) {\n        actives = [].slice.call(this._parent.querySelectorAll(Selector$3.ACTIVES)).filter(function (elem) {\n          if (typeof _this._config.parent === 'string') {\n            return elem.getAttribute('data-parent') === _this._config.parent;\n          }\n\n          return elem.classList.contains(ClassName$3.COLLAPSE);\n        });\n\n        if (actives.length === 0) {\n          actives = null;\n        }\n      }\n\n      if (actives) {\n        activesData = $(actives).not(this._selector).data(DATA_KEY$3);\n\n        if (activesData && activesData._isTransitioning) {\n          return;\n        }\n      }\n\n      var startEvent = $.Event(Event$3.SHOW);\n      $(this._element).trigger(startEvent);\n\n      if (startEvent.isDefaultPrevented()) {\n        return;\n      }\n\n      if (actives) {\n        Collapse._jQueryInterface.call($(actives).not(this._selector), 'hide');\n\n        if (!activesData) {\n          $(actives).data(DATA_KEY$3, null);\n        }\n      }\n\n      var dimension = this._getDimension();\n\n      $(this._element).removeClass(ClassName$3.COLLAPSE).addClass(ClassName$3.COLLAPSING);\n      this._element.style[dimension] = 0;\n\n      if (this._triggerArray.length) {\n        $(this._triggerArray).removeClass(ClassName$3.COLLAPSED).attr('aria-expanded', true);\n      }\n\n      this.setTransitioning(true);\n\n      var complete = function complete() {\n        $(_this._element).removeClass(ClassName$3.COLLAPSING).addClass(ClassName$3.COLLAPSE).addClass(ClassName$3.SHOW);\n        _this._element.style[dimension] = '';\n\n        _this.setTransitioning(false);\n\n        $(_this._element).trigger(Event$3.SHOWN);\n      };\n\n      var capitalizedDimension = dimension[0].toUpperCase() + dimension.slice(1);\n      var scrollSize = \"scroll\" + capitalizedDimension;\n      var transitionDuration = Util.getTransitionDurationFromElement(this._element);\n      $(this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);\n      this._element.style[dimension] = this._element[scrollSize] + \"px\";\n    };\n\n    _proto.hide = function hide() {\n      var _this2 = this;\n\n      if (this._isTransitioning || !$(this._element).hasClass(ClassName$3.SHOW)) {\n        return;\n      }\n\n      var startEvent = $.Event(Event$3.HIDE);\n      $(this._element).trigger(startEvent);\n\n      if (startEvent.isDefaultPrevented()) {\n        return;\n      }\n\n      var dimension = this._getDimension();\n\n      this._element.style[dimension] = this._element.getBoundingClientRect()[dimension] + \"px\";\n      Util.reflow(this._element);\n      $(this._element).addClass(ClassName$3.COLLAPSING).removeClass(ClassName$3.COLLAPSE).removeClass(ClassName$3.SHOW);\n      var triggerArrayLength = this._triggerArray.length;\n\n      if (triggerArrayLength > 0) {\n        for (var i = 0; i < triggerArrayLength; i++) {\n          var trigger = this._triggerArray[i];\n          var selector = Util.getSelectorFromElement(trigger);\n\n          if (selector !== null) {\n            var $elem = $([].slice.call(document.querySelectorAll(selector)));\n\n            if (!$elem.hasClass(ClassName$3.SHOW)) {\n              $(trigger).addClass(ClassName$3.COLLAPSED).attr('aria-expanded', false);\n            }\n          }\n        }\n      }\n\n      this.setTransitioning(true);\n\n      var complete = function complete() {\n        _this2.setTransitioning(false);\n\n        $(_this2._element).removeClass(ClassName$3.COLLAPSING).addClass(ClassName$3.COLLAPSE).trigger(Event$3.HIDDEN);\n      };\n\n      this._element.style[dimension] = '';\n      var transitionDuration = Util.getTransitionDurationFromElement(this._element);\n      $(this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);\n    };\n\n    _proto.setTransitioning = function setTransitioning(isTransitioning) {\n      this._isTransitioning = isTransitioning;\n    };\n\n    _proto.dispose = function dispose() {\n      $.removeData(this._element, DATA_KEY$3);\n      this._config = null;\n      this._parent = null;\n      this._element = null;\n      this._triggerArray = null;\n      this._isTransitioning = null;\n    } // Private\n    ;\n\n    _proto._getConfig = function _getConfig(config) {\n      config = _objectSpread({}, Default$1, config);\n      config.toggle = Boolean(config.toggle); // Coerce string values\n\n      Util.typeCheckConfig(NAME$3, config, DefaultType$1);\n      return config;\n    };\n\n    _proto._getDimension = function _getDimension() {\n      var hasWidth = $(this._element).hasClass(Dimension.WIDTH);\n      return hasWidth ? Dimension.WIDTH : Dimension.HEIGHT;\n    };\n\n    _proto._getParent = function _getParent() {\n      var _this3 = this;\n\n      var parent;\n\n      if (Util.isElement(this._config.parent)) {\n        parent = this._config.parent; // It's a jQuery object\n\n        if (typeof this._config.parent.jquery !== 'undefined') {\n          parent = this._config.parent[0];\n        }\n      } else {\n        parent = document.querySelector(this._config.parent);\n      }\n\n      var selector = \"[data-toggle=\\\"collapse\\\"][data-parent=\\\"\" + this._config.parent + \"\\\"]\";\n      var children = [].slice.call(parent.querySelectorAll(selector));\n      $(children).each(function (i, element) {\n        _this3._addAriaAndCollapsedClass(Collapse._getTargetFromElement(element), [element]);\n      });\n      return parent;\n    };\n\n    _proto._addAriaAndCollapsedClass = function _addAriaAndCollapsedClass(element, triggerArray) {\n      var isOpen = $(element).hasClass(ClassName$3.SHOW);\n\n      if (triggerArray.length) {\n        $(triggerArray).toggleClass(ClassName$3.COLLAPSED, !isOpen).attr('aria-expanded', isOpen);\n      }\n    } // Static\n    ;\n\n    Collapse._getTargetFromElement = function _getTargetFromElement(element) {\n      var selector = Util.getSelectorFromElement(element);\n      return selector ? document.querySelector(selector) : null;\n    };\n\n    Collapse._jQueryInterface = function _jQueryInterface(config) {\n      return this.each(function () {\n        var $this = $(this);\n        var data = $this.data(DATA_KEY$3);\n\n        var _config = _objectSpread({}, Default$1, $this.data(), _typeof(config) === 'object' && config ? config : {});\n\n        if (!data && _config.toggle && /show|hide/.test(config)) {\n          _config.toggle = false;\n        }\n\n        if (!data) {\n          data = new Collapse(this, _config);\n          $this.data(DATA_KEY$3, data);\n        }\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n          }\n\n          data[config]();\n        }\n      });\n    };\n\n    _createClass(Collapse, null, [{\n      key: \"VERSION\",\n      get: function get() {\n        return VERSION$3;\n      }\n    }, {\n      key: \"Default\",\n      get: function get() {\n        return Default$1;\n      }\n    }]);\n\n    return Collapse;\n  }();\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  $(document).on(Event$3.CLICK_DATA_API, Selector$3.DATA_TOGGLE, function (event) {\n    // preventDefault only for <a> elements (which change the URL) not inside the collapsible element\n    if (event.currentTarget.tagName === 'A') {\n      event.preventDefault();\n    }\n\n    var $trigger = $(this);\n    var selector = Util.getSelectorFromElement(this);\n    var selectors = [].slice.call(document.querySelectorAll(selector));\n    $(selectors).each(function () {\n      var $target = $(this);\n      var data = $target.data(DATA_KEY$3);\n      var config = data ? 'toggle' : $trigger.data();\n\n      Collapse._jQueryInterface.call($target, config);\n    });\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n  $.fn[NAME$3] = Collapse._jQueryInterface;\n  $.fn[NAME$3].Constructor = Collapse;\n\n  $.fn[NAME$3].noConflict = function () {\n    $.fn[NAME$3] = JQUERY_NO_CONFLICT$3;\n    return Collapse._jQueryInterface;\n  };\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n\n  var NAME$4 = 'dropdown';\n  var VERSION$4 = '4.3.1';\n  var DATA_KEY$4 = 'bs.dropdown';\n  var EVENT_KEY$4 = \".\" + DATA_KEY$4;\n  var DATA_API_KEY$4 = '.data-api';\n  var JQUERY_NO_CONFLICT$4 = $.fn[NAME$4];\n  var ESCAPE_KEYCODE = 27; // KeyboardEvent.which value for Escape (Esc) key\n\n  var SPACE_KEYCODE = 32; // KeyboardEvent.which value for space key\n\n  var TAB_KEYCODE = 9; // KeyboardEvent.which value for tab key\n\n  var ARROW_UP_KEYCODE = 38; // KeyboardEvent.which value for up arrow key\n\n  var ARROW_DOWN_KEYCODE = 40; // KeyboardEvent.which value for down arrow key\n\n  var RIGHT_MOUSE_BUTTON_WHICH = 3; // MouseEvent.which value for the right button (assuming a right-handed mouse)\n\n  var REGEXP_KEYDOWN = new RegExp(ARROW_UP_KEYCODE + \"|\" + ARROW_DOWN_KEYCODE + \"|\" + ESCAPE_KEYCODE);\n  var Event$4 = {\n    HIDE: \"hide\" + EVENT_KEY$4,\n    HIDDEN: \"hidden\" + EVENT_KEY$4,\n    SHOW: \"show\" + EVENT_KEY$4,\n    SHOWN: \"shown\" + EVENT_KEY$4,\n    CLICK: \"click\" + EVENT_KEY$4,\n    CLICK_DATA_API: \"click\" + EVENT_KEY$4 + DATA_API_KEY$4,\n    KEYDOWN_DATA_API: \"keydown\" + EVENT_KEY$4 + DATA_API_KEY$4,\n    KEYUP_DATA_API: \"keyup\" + EVENT_KEY$4 + DATA_API_KEY$4\n  };\n  var ClassName$4 = {\n    DISABLED: 'disabled',\n    SHOW: 'show',\n    DROPUP: 'dropup',\n    DROPRIGHT: 'dropright',\n    DROPLEFT: 'dropleft',\n    MENURIGHT: 'dropdown-menu-right',\n    MENULEFT: 'dropdown-menu-left',\n    POSITION_STATIC: 'position-static'\n  };\n  var Selector$4 = {\n    DATA_TOGGLE: '[data-toggle=\"dropdown\"]',\n    FORM_CHILD: '.dropdown form',\n    MENU: '.dropdown-menu',\n    NAVBAR_NAV: '.navbar-nav',\n    VISIBLE_ITEMS: '.dropdown-menu .dropdown-item:not(.disabled):not(:disabled)'\n  };\n  var AttachmentMap = {\n    TOP: 'top-start',\n    TOPEND: 'top-end',\n    BOTTOM: 'bottom-start',\n    BOTTOMEND: 'bottom-end',\n    RIGHT: 'right-start',\n    RIGHTEND: 'right-end',\n    LEFT: 'left-start',\n    LEFTEND: 'left-end'\n  };\n  var Default$2 = {\n    offset: 0,\n    flip: true,\n    boundary: 'scrollParent',\n    reference: 'toggle',\n    display: 'dynamic'\n  };\n  var DefaultType$2 = {\n    offset: '(number|string|function)',\n    flip: 'boolean',\n    boundary: '(string|element)',\n    reference: '(string|element)',\n    display: 'string'\n    /**\n     * ------------------------------------------------------------------------\n     * Class Definition\n     * ------------------------------------------------------------------------\n     */\n\n  };\n\n  var Dropdown =\n  /*#__PURE__*/\n  function () {\n    function Dropdown(element, config) {\n      this._element = element;\n      this._popper = null;\n      this._config = this._getConfig(config);\n      this._menu = this._getMenuElement();\n      this._inNavbar = this._detectNavbar();\n\n      this._addEventListeners();\n    } // Getters\n\n\n    var _proto = Dropdown.prototype; // Public\n\n    _proto.toggle = function toggle() {\n      if (this._element.disabled || $(this._element).hasClass(ClassName$4.DISABLED)) {\n        return;\n      }\n\n      var parent = Dropdown._getParentFromElement(this._element);\n\n      var isActive = $(this._menu).hasClass(ClassName$4.SHOW);\n\n      Dropdown._clearMenus();\n\n      if (isActive) {\n        return;\n      }\n\n      var relatedTarget = {\n        relatedTarget: this._element\n      };\n      var showEvent = $.Event(Event$4.SHOW, relatedTarget);\n      $(parent).trigger(showEvent);\n\n      if (showEvent.isDefaultPrevented()) {\n        return;\n      } // Disable totally Popper.js for Dropdown in Navbar\n\n\n      if (!this._inNavbar) {\n        /**\n         * Check for Popper dependency\n         * Popper - https://popper.js.org\n         */\n        if (typeof Popper === 'undefined') {\n          throw new TypeError('Bootstrap\\'s dropdowns require Popper.js (https://popper.js.org/)');\n        }\n\n        var referenceElement = this._element;\n\n        if (this._config.reference === 'parent') {\n          referenceElement = parent;\n        } else if (Util.isElement(this._config.reference)) {\n          referenceElement = this._config.reference; // Check if it's jQuery element\n\n          if (typeof this._config.reference.jquery !== 'undefined') {\n            referenceElement = this._config.reference[0];\n          }\n        } // If boundary is not `scrollParent`, then set position to `static`\n        // to allow the menu to \"escape\" the scroll parent's boundaries\n        // https://github.com/twbs/bootstrap/issues/24251\n\n\n        if (this._config.boundary !== 'scrollParent') {\n          $(parent).addClass(ClassName$4.POSITION_STATIC);\n        }\n\n        this._popper = new Popper(referenceElement, this._menu, this._getPopperConfig());\n      } // If this is a touch-enabled device we add extra\n      // empty mouseover listeners to the body's immediate children;\n      // only needed because of broken event delegation on iOS\n      // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n\n\n      if ('ontouchstart' in document.documentElement && $(parent).closest(Selector$4.NAVBAR_NAV).length === 0) {\n        $(document.body).children().on('mouseover', null, $.noop);\n      }\n\n      this._element.focus();\n\n      this._element.setAttribute('aria-expanded', true);\n\n      $(this._menu).toggleClass(ClassName$4.SHOW);\n      $(parent).toggleClass(ClassName$4.SHOW).trigger($.Event(Event$4.SHOWN, relatedTarget));\n    };\n\n    _proto.show = function show() {\n      if (this._element.disabled || $(this._element).hasClass(ClassName$4.DISABLED) || $(this._menu).hasClass(ClassName$4.SHOW)) {\n        return;\n      }\n\n      var relatedTarget = {\n        relatedTarget: this._element\n      };\n      var showEvent = $.Event(Event$4.SHOW, relatedTarget);\n\n      var parent = Dropdown._getParentFromElement(this._element);\n\n      $(parent).trigger(showEvent);\n\n      if (showEvent.isDefaultPrevented()) {\n        return;\n      }\n\n      $(this._menu).toggleClass(ClassName$4.SHOW);\n      $(parent).toggleClass(ClassName$4.SHOW).trigger($.Event(Event$4.SHOWN, relatedTarget));\n    };\n\n    _proto.hide = function hide() {\n      if (this._element.disabled || $(this._element).hasClass(ClassName$4.DISABLED) || !$(this._menu).hasClass(ClassName$4.SHOW)) {\n        return;\n      }\n\n      var relatedTarget = {\n        relatedTarget: this._element\n      };\n      var hideEvent = $.Event(Event$4.HIDE, relatedTarget);\n\n      var parent = Dropdown._getParentFromElement(this._element);\n\n      $(parent).trigger(hideEvent);\n\n      if (hideEvent.isDefaultPrevented()) {\n        return;\n      }\n\n      $(this._menu).toggleClass(ClassName$4.SHOW);\n      $(parent).toggleClass(ClassName$4.SHOW).trigger($.Event(Event$4.HIDDEN, relatedTarget));\n    };\n\n    _proto.dispose = function dispose() {\n      $.removeData(this._element, DATA_KEY$4);\n      $(this._element).off(EVENT_KEY$4);\n      this._element = null;\n      this._menu = null;\n\n      if (this._popper !== null) {\n        this._popper.destroy();\n\n        this._popper = null;\n      }\n    };\n\n    _proto.update = function update() {\n      this._inNavbar = this._detectNavbar();\n\n      if (this._popper !== null) {\n        this._popper.scheduleUpdate();\n      }\n    } // Private\n    ;\n\n    _proto._addEventListeners = function _addEventListeners() {\n      var _this = this;\n\n      $(this._element).on(Event$4.CLICK, function (event) {\n        event.preventDefault();\n        event.stopPropagation();\n\n        _this.toggle();\n      });\n    };\n\n    _proto._getConfig = function _getConfig(config) {\n      config = _objectSpread({}, this.constructor.Default, $(this._element).data(), config);\n      Util.typeCheckConfig(NAME$4, config, this.constructor.DefaultType);\n      return config;\n    };\n\n    _proto._getMenuElement = function _getMenuElement() {\n      if (!this._menu) {\n        var parent = Dropdown._getParentFromElement(this._element);\n\n        if (parent) {\n          this._menu = parent.querySelector(Selector$4.MENU);\n        }\n      }\n\n      return this._menu;\n    };\n\n    _proto._getPlacement = function _getPlacement() {\n      var $parentDropdown = $(this._element.parentNode);\n      var placement = AttachmentMap.BOTTOM; // Handle dropup\n\n      if ($parentDropdown.hasClass(ClassName$4.DROPUP)) {\n        placement = AttachmentMap.TOP;\n\n        if ($(this._menu).hasClass(ClassName$4.MENURIGHT)) {\n          placement = AttachmentMap.TOPEND;\n        }\n      } else if ($parentDropdown.hasClass(ClassName$4.DROPRIGHT)) {\n        placement = AttachmentMap.RIGHT;\n      } else if ($parentDropdown.hasClass(ClassName$4.DROPLEFT)) {\n        placement = AttachmentMap.LEFT;\n      } else if ($(this._menu).hasClass(ClassName$4.MENURIGHT)) {\n        placement = AttachmentMap.BOTTOMEND;\n      }\n\n      return placement;\n    };\n\n    _proto._detectNavbar = function _detectNavbar() {\n      return $(this._element).closest('.navbar').length > 0;\n    };\n\n    _proto._getOffset = function _getOffset() {\n      var _this2 = this;\n\n      var offset = {};\n\n      if (typeof this._config.offset === 'function') {\n        offset.fn = function (data) {\n          data.offsets = _objectSpread({}, data.offsets, _this2._config.offset(data.offsets, _this2._element) || {});\n          return data;\n        };\n      } else {\n        offset.offset = this._config.offset;\n      }\n\n      return offset;\n    };\n\n    _proto._getPopperConfig = function _getPopperConfig() {\n      var popperConfig = {\n        placement: this._getPlacement(),\n        modifiers: {\n          offset: this._getOffset(),\n          flip: {\n            enabled: this._config.flip\n          },\n          preventOverflow: {\n            boundariesElement: this._config.boundary\n          } // Disable Popper.js if we have a static display\n\n        }\n      };\n\n      if (this._config.display === 'static') {\n        popperConfig.modifiers.applyStyle = {\n          enabled: false\n        };\n      }\n\n      return popperConfig;\n    } // Static\n    ;\n\n    Dropdown._jQueryInterface = function _jQueryInterface(config) {\n      return this.each(function () {\n        var data = $(this).data(DATA_KEY$4);\n\n        var _config = _typeof(config) === 'object' ? config : null;\n\n        if (!data) {\n          data = new Dropdown(this, _config);\n          $(this).data(DATA_KEY$4, data);\n        }\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n          }\n\n          data[config]();\n        }\n      });\n    };\n\n    Dropdown._clearMenus = function _clearMenus(event) {\n      if (event && (event.which === RIGHT_MOUSE_BUTTON_WHICH || event.type === 'keyup' && event.which !== TAB_KEYCODE)) {\n        return;\n      }\n\n      var toggles = [].slice.call(document.querySelectorAll(Selector$4.DATA_TOGGLE));\n\n      for (var i = 0, len = toggles.length; i < len; i++) {\n        var parent = Dropdown._getParentFromElement(toggles[i]);\n\n        var context = $(toggles[i]).data(DATA_KEY$4);\n        var relatedTarget = {\n          relatedTarget: toggles[i]\n        };\n\n        if (event && event.type === 'click') {\n          relatedTarget.clickEvent = event;\n        }\n\n        if (!context) {\n          continue;\n        }\n\n        var dropdownMenu = context._menu;\n\n        if (!$(parent).hasClass(ClassName$4.SHOW)) {\n          continue;\n        }\n\n        if (event && (event.type === 'click' && /input|textarea/i.test(event.target.tagName) || event.type === 'keyup' && event.which === TAB_KEYCODE) && $.contains(parent, event.target)) {\n          continue;\n        }\n\n        var hideEvent = $.Event(Event$4.HIDE, relatedTarget);\n        $(parent).trigger(hideEvent);\n\n        if (hideEvent.isDefaultPrevented()) {\n          continue;\n        } // If this is a touch-enabled device we remove the extra\n        // empty mouseover listeners we added for iOS support\n\n\n        if ('ontouchstart' in document.documentElement) {\n          $(document.body).children().off('mouseover', null, $.noop);\n        }\n\n        toggles[i].setAttribute('aria-expanded', 'false');\n        $(dropdownMenu).removeClass(ClassName$4.SHOW);\n        $(parent).removeClass(ClassName$4.SHOW).trigger($.Event(Event$4.HIDDEN, relatedTarget));\n      }\n    };\n\n    Dropdown._getParentFromElement = function _getParentFromElement(element) {\n      var parent;\n      var selector = Util.getSelectorFromElement(element);\n\n      if (selector) {\n        parent = document.querySelector(selector);\n      }\n\n      return parent || element.parentNode;\n    } // eslint-disable-next-line complexity\n    ;\n\n    Dropdown._dataApiKeydownHandler = function _dataApiKeydownHandler(event) {\n      // If not input/textarea:\n      //  - And not a key in REGEXP_KEYDOWN => not a dropdown command\n      // If input/textarea:\n      //  - If space key => not a dropdown command\n      //  - If key is other than escape\n      //    - If key is not up or down => not a dropdown command\n      //    - If trigger inside the menu => not a dropdown command\n      if (/input|textarea/i.test(event.target.tagName) ? event.which === SPACE_KEYCODE || event.which !== ESCAPE_KEYCODE && (event.which !== ARROW_DOWN_KEYCODE && event.which !== ARROW_UP_KEYCODE || $(event.target).closest(Selector$4.MENU).length) : !REGEXP_KEYDOWN.test(event.which)) {\n        return;\n      }\n\n      event.preventDefault();\n      event.stopPropagation();\n\n      if (this.disabled || $(this).hasClass(ClassName$4.DISABLED)) {\n        return;\n      }\n\n      var parent = Dropdown._getParentFromElement(this);\n\n      var isActive = $(parent).hasClass(ClassName$4.SHOW);\n\n      if (!isActive || isActive && (event.which === ESCAPE_KEYCODE || event.which === SPACE_KEYCODE)) {\n        if (event.which === ESCAPE_KEYCODE) {\n          var toggle = parent.querySelector(Selector$4.DATA_TOGGLE);\n          $(toggle).trigger('focus');\n        }\n\n        $(this).trigger('click');\n        return;\n      }\n\n      var items = [].slice.call(parent.querySelectorAll(Selector$4.VISIBLE_ITEMS));\n\n      if (items.length === 0) {\n        return;\n      }\n\n      var index = items.indexOf(event.target);\n\n      if (event.which === ARROW_UP_KEYCODE && index > 0) {\n        // Up\n        index--;\n      }\n\n      if (event.which === ARROW_DOWN_KEYCODE && index < items.length - 1) {\n        // Down\n        index++;\n      }\n\n      if (index < 0) {\n        index = 0;\n      }\n\n      items[index].focus();\n    };\n\n    _createClass(Dropdown, null, [{\n      key: \"VERSION\",\n      get: function get() {\n        return VERSION$4;\n      }\n    }, {\n      key: \"Default\",\n      get: function get() {\n        return Default$2;\n      }\n    }, {\n      key: \"DefaultType\",\n      get: function get() {\n        return DefaultType$2;\n      }\n    }]);\n\n    return Dropdown;\n  }();\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  $(document).on(Event$4.KEYDOWN_DATA_API, Selector$4.DATA_TOGGLE, Dropdown._dataApiKeydownHandler).on(Event$4.KEYDOWN_DATA_API, Selector$4.MENU, Dropdown._dataApiKeydownHandler).on(Event$4.CLICK_DATA_API + \" \" + Event$4.KEYUP_DATA_API, Dropdown._clearMenus).on(Event$4.CLICK_DATA_API, Selector$4.DATA_TOGGLE, function (event) {\n    event.preventDefault();\n    event.stopPropagation();\n\n    Dropdown._jQueryInterface.call($(this), 'toggle');\n  }).on(Event$4.CLICK_DATA_API, Selector$4.FORM_CHILD, function (e) {\n    e.stopPropagation();\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n  $.fn[NAME$4] = Dropdown._jQueryInterface;\n  $.fn[NAME$4].Constructor = Dropdown;\n\n  $.fn[NAME$4].noConflict = function () {\n    $.fn[NAME$4] = JQUERY_NO_CONFLICT$4;\n    return Dropdown._jQueryInterface;\n  };\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n\n  var NAME$5 = 'modal';\n  var VERSION$5 = '4.3.1';\n  var DATA_KEY$5 = 'bs.modal';\n  var EVENT_KEY$5 = \".\" + DATA_KEY$5;\n  var DATA_API_KEY$5 = '.data-api';\n  var JQUERY_NO_CONFLICT$5 = $.fn[NAME$5];\n  var ESCAPE_KEYCODE$1 = 27; // KeyboardEvent.which value for Escape (Esc) key\n\n  var Default$3 = {\n    backdrop: true,\n    keyboard: true,\n    focus: true,\n    show: true\n  };\n  var DefaultType$3 = {\n    backdrop: '(boolean|string)',\n    keyboard: 'boolean',\n    focus: 'boolean',\n    show: 'boolean'\n  };\n  var Event$5 = {\n    HIDE: \"hide\" + EVENT_KEY$5,\n    HIDDEN: \"hidden\" + EVENT_KEY$5,\n    SHOW: \"show\" + EVENT_KEY$5,\n    SHOWN: \"shown\" + EVENT_KEY$5,\n    FOCUSIN: \"focusin\" + EVENT_KEY$5,\n    RESIZE: \"resize\" + EVENT_KEY$5,\n    CLICK_DISMISS: \"click.dismiss\" + EVENT_KEY$5,\n    KEYDOWN_DISMISS: \"keydown.dismiss\" + EVENT_KEY$5,\n    MOUSEUP_DISMISS: \"mouseup.dismiss\" + EVENT_KEY$5,\n    MOUSEDOWN_DISMISS: \"mousedown.dismiss\" + EVENT_KEY$5,\n    CLICK_DATA_API: \"click\" + EVENT_KEY$5 + DATA_API_KEY$5\n  };\n  var ClassName$5 = {\n    SCROLLABLE: 'modal-dialog-scrollable',\n    SCROLLBAR_MEASURER: 'modal-scrollbar-measure',\n    BACKDROP: 'modal-backdrop',\n    OPEN: 'modal-open',\n    FADE: 'fade',\n    SHOW: 'show'\n  };\n  var Selector$5 = {\n    DIALOG: '.modal-dialog',\n    MODAL_BODY: '.modal-body',\n    DATA_TOGGLE: '[data-toggle=\"modal\"]',\n    DATA_DISMISS: '[data-dismiss=\"modal\"]',\n    FIXED_CONTENT: '.fixed-top, .fixed-bottom, .is-fixed, .sticky-top',\n    STICKY_CONTENT: '.sticky-top'\n    /**\n     * ------------------------------------------------------------------------\n     * Class Definition\n     * ------------------------------------------------------------------------\n     */\n\n  };\n\n  var Modal =\n  /*#__PURE__*/\n  function () {\n    function Modal(element, config) {\n      this._config = this._getConfig(config);\n      this._element = element;\n      this._dialog = element.querySelector(Selector$5.DIALOG);\n      this._backdrop = null;\n      this._isShown = false;\n      this._isBodyOverflowing = false;\n      this._ignoreBackdropClick = false;\n      this._isTransitioning = false;\n      this._scrollbarWidth = 0;\n    } // Getters\n\n\n    var _proto = Modal.prototype; // Public\n\n    _proto.toggle = function toggle(relatedTarget) {\n      return this._isShown ? this.hide() : this.show(relatedTarget);\n    };\n\n    _proto.show = function show(relatedTarget) {\n      var _this = this;\n\n      if (this._isShown || this._isTransitioning) {\n        return;\n      }\n\n      if ($(this._element).hasClass(ClassName$5.FADE)) {\n        this._isTransitioning = true;\n      }\n\n      var showEvent = $.Event(Event$5.SHOW, {\n        relatedTarget: relatedTarget\n      });\n      $(this._element).trigger(showEvent);\n\n      if (this._isShown || showEvent.isDefaultPrevented()) {\n        return;\n      }\n\n      this._isShown = true;\n\n      this._checkScrollbar();\n\n      this._setScrollbar();\n\n      this._adjustDialog();\n\n      this._setEscapeEvent();\n\n      this._setResizeEvent();\n\n      $(this._element).on(Event$5.CLICK_DISMISS, Selector$5.DATA_DISMISS, function (event) {\n        return _this.hide(event);\n      });\n      $(this._dialog).on(Event$5.MOUSEDOWN_DISMISS, function () {\n        $(_this._element).one(Event$5.MOUSEUP_DISMISS, function (event) {\n          if ($(event.target).is(_this._element)) {\n            _this._ignoreBackdropClick = true;\n          }\n        });\n      });\n\n      this._showBackdrop(function () {\n        return _this._showElement(relatedTarget);\n      });\n    };\n\n    _proto.hide = function hide(event) {\n      var _this2 = this;\n\n      if (event) {\n        event.preventDefault();\n      }\n\n      if (!this._isShown || this._isTransitioning) {\n        return;\n      }\n\n      var hideEvent = $.Event(Event$5.HIDE);\n      $(this._element).trigger(hideEvent);\n\n      if (!this._isShown || hideEvent.isDefaultPrevented()) {\n        return;\n      }\n\n      this._isShown = false;\n      var transition = $(this._element).hasClass(ClassName$5.FADE);\n\n      if (transition) {\n        this._isTransitioning = true;\n      }\n\n      this._setEscapeEvent();\n\n      this._setResizeEvent();\n\n      $(document).off(Event$5.FOCUSIN);\n      $(this._element).removeClass(ClassName$5.SHOW);\n      $(this._element).off(Event$5.CLICK_DISMISS);\n      $(this._dialog).off(Event$5.MOUSEDOWN_DISMISS);\n\n      if (transition) {\n        var transitionDuration = Util.getTransitionDurationFromElement(this._element);\n        $(this._element).one(Util.TRANSITION_END, function (event) {\n          return _this2._hideModal(event);\n        }).emulateTransitionEnd(transitionDuration);\n      } else {\n        this._hideModal();\n      }\n    };\n\n    _proto.dispose = function dispose() {\n      [window, this._element, this._dialog].forEach(function (htmlElement) {\n        return $(htmlElement).off(EVENT_KEY$5);\n      });\n      /**\n       * `document` has 2 events `Event.FOCUSIN` and `Event.CLICK_DATA_API`\n       * Do not move `document` in `htmlElements` array\n       * It will remove `Event.CLICK_DATA_API` event that should remain\n       */\n\n      $(document).off(Event$5.FOCUSIN);\n      $.removeData(this._element, DATA_KEY$5);\n      this._config = null;\n      this._element = null;\n      this._dialog = null;\n      this._backdrop = null;\n      this._isShown = null;\n      this._isBodyOverflowing = null;\n      this._ignoreBackdropClick = null;\n      this._isTransitioning = null;\n      this._scrollbarWidth = null;\n    };\n\n    _proto.handleUpdate = function handleUpdate() {\n      this._adjustDialog();\n    } // Private\n    ;\n\n    _proto._getConfig = function _getConfig(config) {\n      config = _objectSpread({}, Default$3, config);\n      Util.typeCheckConfig(NAME$5, config, DefaultType$3);\n      return config;\n    };\n\n    _proto._showElement = function _showElement(relatedTarget) {\n      var _this3 = this;\n\n      var transition = $(this._element).hasClass(ClassName$5.FADE);\n\n      if (!this._element.parentNode || this._element.parentNode.nodeType !== Node.ELEMENT_NODE) {\n        // Don't move modal's DOM position\n        document.body.appendChild(this._element);\n      }\n\n      this._element.style.display = 'block';\n\n      this._element.removeAttribute('aria-hidden');\n\n      this._element.setAttribute('aria-modal', true);\n\n      if ($(this._dialog).hasClass(ClassName$5.SCROLLABLE)) {\n        this._dialog.querySelector(Selector$5.MODAL_BODY).scrollTop = 0;\n      } else {\n        this._element.scrollTop = 0;\n      }\n\n      if (transition) {\n        Util.reflow(this._element);\n      }\n\n      $(this._element).addClass(ClassName$5.SHOW);\n\n      if (this._config.focus) {\n        this._enforceFocus();\n      }\n\n      var shownEvent = $.Event(Event$5.SHOWN, {\n        relatedTarget: relatedTarget\n      });\n\n      var transitionComplete = function transitionComplete() {\n        if (_this3._config.focus) {\n          _this3._element.focus();\n        }\n\n        _this3._isTransitioning = false;\n        $(_this3._element).trigger(shownEvent);\n      };\n\n      if (transition) {\n        var transitionDuration = Util.getTransitionDurationFromElement(this._dialog);\n        $(this._dialog).one(Util.TRANSITION_END, transitionComplete).emulateTransitionEnd(transitionDuration);\n      } else {\n        transitionComplete();\n      }\n    };\n\n    _proto._enforceFocus = function _enforceFocus() {\n      var _this4 = this;\n\n      $(document).off(Event$5.FOCUSIN) // Guard against infinite focus loop\n      .on(Event$5.FOCUSIN, function (event) {\n        if (document !== event.target && _this4._element !== event.target && $(_this4._element).has(event.target).length === 0) {\n          _this4._element.focus();\n        }\n      });\n    };\n\n    _proto._setEscapeEvent = function _setEscapeEvent() {\n      var _this5 = this;\n\n      if (this._isShown && this._config.keyboard) {\n        $(this._element).on(Event$5.KEYDOWN_DISMISS, function (event) {\n          if (event.which === ESCAPE_KEYCODE$1) {\n            event.preventDefault();\n\n            _this5.hide();\n          }\n        });\n      } else if (!this._isShown) {\n        $(this._element).off(Event$5.KEYDOWN_DISMISS);\n      }\n    };\n\n    _proto._setResizeEvent = function _setResizeEvent() {\n      var _this6 = this;\n\n      if (this._isShown) {\n        $(window).on(Event$5.RESIZE, function (event) {\n          return _this6.handleUpdate(event);\n        });\n      } else {\n        $(window).off(Event$5.RESIZE);\n      }\n    };\n\n    _proto._hideModal = function _hideModal() {\n      var _this7 = this;\n\n      this._element.style.display = 'none';\n\n      this._element.setAttribute('aria-hidden', true);\n\n      this._element.removeAttribute('aria-modal');\n\n      this._isTransitioning = false;\n\n      this._showBackdrop(function () {\n        $(document.body).removeClass(ClassName$5.OPEN);\n\n        _this7._resetAdjustments();\n\n        _this7._resetScrollbar();\n\n        $(_this7._element).trigger(Event$5.HIDDEN);\n      });\n    };\n\n    _proto._removeBackdrop = function _removeBackdrop() {\n      if (this._backdrop) {\n        $(this._backdrop).remove();\n        this._backdrop = null;\n      }\n    };\n\n    _proto._showBackdrop = function _showBackdrop(callback) {\n      var _this8 = this;\n\n      var animate = $(this._element).hasClass(ClassName$5.FADE) ? ClassName$5.FADE : '';\n\n      if (this._isShown && this._config.backdrop) {\n        this._backdrop = document.createElement('div');\n        this._backdrop.className = ClassName$5.BACKDROP;\n\n        if (animate) {\n          this._backdrop.classList.add(animate);\n        }\n\n        $(this._backdrop).appendTo(document.body);\n        $(this._element).on(Event$5.CLICK_DISMISS, function (event) {\n          if (_this8._ignoreBackdropClick) {\n            _this8._ignoreBackdropClick = false;\n            return;\n          }\n\n          if (event.target !== event.currentTarget) {\n            return;\n          }\n\n          if (_this8._config.backdrop === 'static') {\n            _this8._element.focus();\n          } else {\n            _this8.hide();\n          }\n        });\n\n        if (animate) {\n          Util.reflow(this._backdrop);\n        }\n\n        $(this._backdrop).addClass(ClassName$5.SHOW);\n\n        if (!callback) {\n          return;\n        }\n\n        if (!animate) {\n          callback();\n          return;\n        }\n\n        var backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop);\n        $(this._backdrop).one(Util.TRANSITION_END, callback).emulateTransitionEnd(backdropTransitionDuration);\n      } else if (!this._isShown && this._backdrop) {\n        $(this._backdrop).removeClass(ClassName$5.SHOW);\n\n        var callbackRemove = function callbackRemove() {\n          _this8._removeBackdrop();\n\n          if (callback) {\n            callback();\n          }\n        };\n\n        if ($(this._element).hasClass(ClassName$5.FADE)) {\n          var _backdropTransitionDuration = Util.getTransitionDurationFromElement(this._backdrop);\n\n          $(this._backdrop).one(Util.TRANSITION_END, callbackRemove).emulateTransitionEnd(_backdropTransitionDuration);\n        } else {\n          callbackRemove();\n        }\n      } else if (callback) {\n        callback();\n      }\n    } // ----------------------------------------------------------------------\n    // the following methods are used to handle overflowing modals\n    // todo (fat): these should probably be refactored out of modal.js\n    // ----------------------------------------------------------------------\n    ;\n\n    _proto._adjustDialog = function _adjustDialog() {\n      var isModalOverflowing = this._element.scrollHeight > document.documentElement.clientHeight;\n\n      if (!this._isBodyOverflowing && isModalOverflowing) {\n        this._element.style.paddingLeft = this._scrollbarWidth + \"px\";\n      }\n\n      if (this._isBodyOverflowing && !isModalOverflowing) {\n        this._element.style.paddingRight = this._scrollbarWidth + \"px\";\n      }\n    };\n\n    _proto._resetAdjustments = function _resetAdjustments() {\n      this._element.style.paddingLeft = '';\n      this._element.style.paddingRight = '';\n    };\n\n    _proto._checkScrollbar = function _checkScrollbar() {\n      var rect = document.body.getBoundingClientRect();\n      this._isBodyOverflowing = rect.left + rect.right < window.innerWidth;\n      this._scrollbarWidth = this._getScrollbarWidth();\n    };\n\n    _proto._setScrollbar = function _setScrollbar() {\n      var _this9 = this;\n\n      if (this._isBodyOverflowing) {\n        // Note: DOMNode.style.paddingRight returns the actual value or '' if not set\n        //   while $(DOMNode).css('padding-right') returns the calculated value or 0 if not set\n        var fixedContent = [].slice.call(document.querySelectorAll(Selector$5.FIXED_CONTENT));\n        var stickyContent = [].slice.call(document.querySelectorAll(Selector$5.STICKY_CONTENT)); // Adjust fixed content padding\n\n        $(fixedContent).each(function (index, element) {\n          var actualPadding = element.style.paddingRight;\n          var calculatedPadding = $(element).css('padding-right');\n          $(element).data('padding-right', actualPadding).css('padding-right', parseFloat(calculatedPadding) + _this9._scrollbarWidth + \"px\");\n        }); // Adjust sticky content margin\n\n        $(stickyContent).each(function (index, element) {\n          var actualMargin = element.style.marginRight;\n          var calculatedMargin = $(element).css('margin-right');\n          $(element).data('margin-right', actualMargin).css('margin-right', parseFloat(calculatedMargin) - _this9._scrollbarWidth + \"px\");\n        }); // Adjust body padding\n\n        var actualPadding = document.body.style.paddingRight;\n        var calculatedPadding = $(document.body).css('padding-right');\n        $(document.body).data('padding-right', actualPadding).css('padding-right', parseFloat(calculatedPadding) + this._scrollbarWidth + \"px\");\n      }\n\n      $(document.body).addClass(ClassName$5.OPEN);\n    };\n\n    _proto._resetScrollbar = function _resetScrollbar() {\n      // Restore fixed content padding\n      var fixedContent = [].slice.call(document.querySelectorAll(Selector$5.FIXED_CONTENT));\n      $(fixedContent).each(function (index, element) {\n        var padding = $(element).data('padding-right');\n        $(element).removeData('padding-right');\n        element.style.paddingRight = padding ? padding : '';\n      }); // Restore sticky content\n\n      var elements = [].slice.call(document.querySelectorAll(\"\" + Selector$5.STICKY_CONTENT));\n      $(elements).each(function (index, element) {\n        var margin = $(element).data('margin-right');\n\n        if (typeof margin !== 'undefined') {\n          $(element).css('margin-right', margin).removeData('margin-right');\n        }\n      }); // Restore body padding\n\n      var padding = $(document.body).data('padding-right');\n      $(document.body).removeData('padding-right');\n      document.body.style.paddingRight = padding ? padding : '';\n    };\n\n    _proto._getScrollbarWidth = function _getScrollbarWidth() {\n      // thx d.walsh\n      var scrollDiv = document.createElement('div');\n      scrollDiv.className = ClassName$5.SCROLLBAR_MEASURER;\n      document.body.appendChild(scrollDiv);\n      var scrollbarWidth = scrollDiv.getBoundingClientRect().width - scrollDiv.clientWidth;\n      document.body.removeChild(scrollDiv);\n      return scrollbarWidth;\n    } // Static\n    ;\n\n    Modal._jQueryInterface = function _jQueryInterface(config, relatedTarget) {\n      return this.each(function () {\n        var data = $(this).data(DATA_KEY$5);\n\n        var _config = _objectSpread({}, Default$3, $(this).data(), _typeof(config) === 'object' && config ? config : {});\n\n        if (!data) {\n          data = new Modal(this, _config);\n          $(this).data(DATA_KEY$5, data);\n        }\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n          }\n\n          data[config](relatedTarget);\n        } else if (_config.show) {\n          data.show(relatedTarget);\n        }\n      });\n    };\n\n    _createClass(Modal, null, [{\n      key: \"VERSION\",\n      get: function get() {\n        return VERSION$5;\n      }\n    }, {\n      key: \"Default\",\n      get: function get() {\n        return Default$3;\n      }\n    }]);\n\n    return Modal;\n  }();\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  $(document).on(Event$5.CLICK_DATA_API, Selector$5.DATA_TOGGLE, function (event) {\n    var _this10 = this;\n\n    var target;\n    var selector = Util.getSelectorFromElement(this);\n\n    if (selector) {\n      target = document.querySelector(selector);\n    }\n\n    var config = $(target).data(DATA_KEY$5) ? 'toggle' : _objectSpread({}, $(target).data(), $(this).data());\n\n    if (this.tagName === 'A' || this.tagName === 'AREA') {\n      event.preventDefault();\n    }\n\n    var $target = $(target).one(Event$5.SHOW, function (showEvent) {\n      if (showEvent.isDefaultPrevented()) {\n        // Only register focus restorer if modal will actually get shown\n        return;\n      }\n\n      $target.one(Event$5.HIDDEN, function () {\n        if ($(_this10).is(':visible')) {\n          _this10.focus();\n        }\n      });\n    });\n\n    Modal._jQueryInterface.call($(target), config, this);\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n  $.fn[NAME$5] = Modal._jQueryInterface;\n  $.fn[NAME$5].Constructor = Modal;\n\n  $.fn[NAME$5].noConflict = function () {\n    $.fn[NAME$5] = JQUERY_NO_CONFLICT$5;\n    return Modal._jQueryInterface;\n  };\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v4.3.1): tools/sanitizer.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n\n\n  var uriAttrs = ['background', 'cite', 'href', 'itemtype', 'longdesc', 'poster', 'src', 'xlink:href'];\n  var ARIA_ATTRIBUTE_PATTERN = /^aria-[\\w-]*$/i;\n  var DefaultWhitelist = {\n    // Global attributes allowed on any supplied element below.\n    '*': ['class', 'dir', 'id', 'lang', 'role', ARIA_ATTRIBUTE_PATTERN],\n    a: ['target', 'href', 'title', 'rel'],\n    area: [],\n    b: [],\n    br: [],\n    col: [],\n    code: [],\n    div: [],\n    em: [],\n    hr: [],\n    h1: [],\n    h2: [],\n    h3: [],\n    h4: [],\n    h5: [],\n    h6: [],\n    i: [],\n    img: ['src', 'alt', 'title', 'width', 'height'],\n    li: [],\n    ol: [],\n    p: [],\n    pre: [],\n    s: [],\n    small: [],\n    span: [],\n    sub: [],\n    sup: [],\n    strong: [],\n    u: [],\n    ul: []\n    /**\n     * A pattern that recognizes a commonly useful subset of URLs that are safe.\n     *\n     * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n     */\n\n  };\n  var SAFE_URL_PATTERN = /^(?:(?:https?|mailto|ftp|tel|file):|[^&:/?#]*(?:[/?#]|$))/gi;\n  /**\n   * A pattern that matches safe data URLs. Only matches image, video and audio types.\n   *\n   * Shoutout to Angular 7 https://github.com/angular/angular/blob/7.2.4/packages/core/src/sanitization/url_sanitizer.ts\n   */\n\n  var DATA_URL_PATTERN = /^data:(?:image\\/(?:bmp|gif|jpeg|jpg|png|tiff|webp)|video\\/(?:mpeg|mp4|ogg|webm)|audio\\/(?:mp3|oga|ogg|opus));base64,[a-z0-9+/]+=*$/i;\n\n  function allowedAttribute(attr, allowedAttributeList) {\n    var attrName = attr.nodeName.toLowerCase();\n\n    if (allowedAttributeList.indexOf(attrName) !== -1) {\n      if (uriAttrs.indexOf(attrName) !== -1) {\n        return Boolean(attr.nodeValue.match(SAFE_URL_PATTERN) || attr.nodeValue.match(DATA_URL_PATTERN));\n      }\n\n      return true;\n    }\n\n    var regExp = allowedAttributeList.filter(function (attrRegex) {\n      return attrRegex instanceof RegExp;\n    }); // Check if a regular expression validates the attribute.\n\n    for (var i = 0, l = regExp.length; i < l; i++) {\n      if (attrName.match(regExp[i])) {\n        return true;\n      }\n    }\n\n    return false;\n  }\n\n  function sanitizeHtml(unsafeHtml, whiteList, sanitizeFn) {\n    if (unsafeHtml.length === 0) {\n      return unsafeHtml;\n    }\n\n    if (sanitizeFn && typeof sanitizeFn === 'function') {\n      return sanitizeFn(unsafeHtml);\n    }\n\n    var domParser = new window.DOMParser();\n    var createdDocument = domParser.parseFromString(unsafeHtml, 'text/html');\n    var whitelistKeys = Object.keys(whiteList);\n    var elements = [].slice.call(createdDocument.body.querySelectorAll('*'));\n\n    var _loop = function _loop(i, len) {\n      var el = elements[i];\n      var elName = el.nodeName.toLowerCase();\n\n      if (whitelistKeys.indexOf(el.nodeName.toLowerCase()) === -1) {\n        el.parentNode.removeChild(el);\n        return \"continue\";\n      }\n\n      var attributeList = [].slice.call(el.attributes);\n      var whitelistedAttributes = [].concat(whiteList['*'] || [], whiteList[elName] || []);\n      attributeList.forEach(function (attr) {\n        if (!allowedAttribute(attr, whitelistedAttributes)) {\n          el.removeAttribute(attr.nodeName);\n        }\n      });\n    };\n\n    for (var i = 0, len = elements.length; i < len; i++) {\n      var _ret = _loop(i, len);\n\n      if (_ret === \"continue\") continue;\n    }\n\n    return createdDocument.body.innerHTML;\n  }\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n\n  var NAME$6 = 'tooltip';\n  var VERSION$6 = '4.3.1';\n  var DATA_KEY$6 = 'bs.tooltip';\n  var EVENT_KEY$6 = \".\" + DATA_KEY$6;\n  var JQUERY_NO_CONFLICT$6 = $.fn[NAME$6];\n  var CLASS_PREFIX = 'bs-tooltip';\n  var BSCLS_PREFIX_REGEX = new RegExp(\"(^|\\\\s)\" + CLASS_PREFIX + \"\\\\S+\", 'g');\n  var DISALLOWED_ATTRIBUTES = ['sanitize', 'whiteList', 'sanitizeFn'];\n  var DefaultType$4 = {\n    animation: 'boolean',\n    template: 'string',\n    title: '(string|element|function)',\n    trigger: 'string',\n    delay: '(number|object)',\n    html: 'boolean',\n    selector: '(string|boolean)',\n    placement: '(string|function)',\n    offset: '(number|string|function)',\n    container: '(string|element|boolean)',\n    fallbackPlacement: '(string|array)',\n    boundary: '(string|element)',\n    sanitize: 'boolean',\n    sanitizeFn: '(null|function)',\n    whiteList: 'object'\n  };\n  var AttachmentMap$1 = {\n    AUTO: 'auto',\n    TOP: 'top',\n    RIGHT: 'right',\n    BOTTOM: 'bottom',\n    LEFT: 'left'\n  };\n  var Default$4 = {\n    animation: true,\n    template: '<div class=\"tooltip\" role=\"tooltip\">' + '<div class=\"arrow\"></div>' + '<div class=\"tooltip-inner\"></div></div>',\n    trigger: 'hover focus',\n    title: '',\n    delay: 0,\n    html: false,\n    selector: false,\n    placement: 'top',\n    offset: 0,\n    container: false,\n    fallbackPlacement: 'flip',\n    boundary: 'scrollParent',\n    sanitize: true,\n    sanitizeFn: null,\n    whiteList: DefaultWhitelist\n  };\n  var HoverState = {\n    SHOW: 'show',\n    OUT: 'out'\n  };\n  var Event$6 = {\n    HIDE: \"hide\" + EVENT_KEY$6,\n    HIDDEN: \"hidden\" + EVENT_KEY$6,\n    SHOW: \"show\" + EVENT_KEY$6,\n    SHOWN: \"shown\" + EVENT_KEY$6,\n    INSERTED: \"inserted\" + EVENT_KEY$6,\n    CLICK: \"click\" + EVENT_KEY$6,\n    FOCUSIN: \"focusin\" + EVENT_KEY$6,\n    FOCUSOUT: \"focusout\" + EVENT_KEY$6,\n    MOUSEENTER: \"mouseenter\" + EVENT_KEY$6,\n    MOUSELEAVE: \"mouseleave\" + EVENT_KEY$6\n  };\n  var ClassName$6 = {\n    FADE: 'fade',\n    SHOW: 'show'\n  };\n  var Selector$6 = {\n    TOOLTIP: '.tooltip',\n    TOOLTIP_INNER: '.tooltip-inner',\n    ARROW: '.arrow'\n  };\n  var Trigger = {\n    HOVER: 'hover',\n    FOCUS: 'focus',\n    CLICK: 'click',\n    MANUAL: 'manual'\n    /**\n     * ------------------------------------------------------------------------\n     * Class Definition\n     * ------------------------------------------------------------------------\n     */\n\n  };\n\n  var Tooltip =\n  /*#__PURE__*/\n  function () {\n    function Tooltip(element, config) {\n      /**\n       * Check for Popper dependency\n       * Popper - https://popper.js.org\n       */\n      if (typeof Popper === 'undefined') {\n        throw new TypeError('Bootstrap\\'s tooltips require Popper.js (https://popper.js.org/)');\n      } // private\n\n\n      this._isEnabled = true;\n      this._timeout = 0;\n      this._hoverState = '';\n      this._activeTrigger = {};\n      this._popper = null; // Protected\n\n      this.element = element;\n      this.config = this._getConfig(config);\n      this.tip = null;\n\n      this._setListeners();\n    } // Getters\n\n\n    var _proto = Tooltip.prototype; // Public\n\n    _proto.enable = function enable() {\n      this._isEnabled = true;\n    };\n\n    _proto.disable = function disable() {\n      this._isEnabled = false;\n    };\n\n    _proto.toggleEnabled = function toggleEnabled() {\n      this._isEnabled = !this._isEnabled;\n    };\n\n    _proto.toggle = function toggle(event) {\n      if (!this._isEnabled) {\n        return;\n      }\n\n      if (event) {\n        var dataKey = this.constructor.DATA_KEY;\n        var context = $(event.currentTarget).data(dataKey);\n\n        if (!context) {\n          context = new this.constructor(event.currentTarget, this._getDelegateConfig());\n          $(event.currentTarget).data(dataKey, context);\n        }\n\n        context._activeTrigger.click = !context._activeTrigger.click;\n\n        if (context._isWithActiveTrigger()) {\n          context._enter(null, context);\n        } else {\n          context._leave(null, context);\n        }\n      } else {\n        if ($(this.getTipElement()).hasClass(ClassName$6.SHOW)) {\n          this._leave(null, this);\n\n          return;\n        }\n\n        this._enter(null, this);\n      }\n    };\n\n    _proto.dispose = function dispose() {\n      clearTimeout(this._timeout);\n      $.removeData(this.element, this.constructor.DATA_KEY);\n      $(this.element).off(this.constructor.EVENT_KEY);\n      $(this.element).closest('.modal').off('hide.bs.modal');\n\n      if (this.tip) {\n        $(this.tip).remove();\n      }\n\n      this._isEnabled = null;\n      this._timeout = null;\n      this._hoverState = null;\n      this._activeTrigger = null;\n\n      if (this._popper !== null) {\n        this._popper.destroy();\n      }\n\n      this._popper = null;\n      this.element = null;\n      this.config = null;\n      this.tip = null;\n    };\n\n    _proto.show = function show() {\n      var _this = this;\n\n      if ($(this.element).css('display') === 'none') {\n        throw new Error('Please use show on visible elements');\n      }\n\n      var showEvent = $.Event(this.constructor.Event.SHOW);\n\n      if (this.isWithContent() && this._isEnabled) {\n        $(this.element).trigger(showEvent);\n        var shadowRoot = Util.findShadowRoot(this.element);\n        var isInTheDom = $.contains(shadowRoot !== null ? shadowRoot : this.element.ownerDocument.documentElement, this.element);\n\n        if (showEvent.isDefaultPrevented() || !isInTheDom) {\n          return;\n        }\n\n        var tip = this.getTipElement();\n        var tipId = Util.getUID(this.constructor.NAME);\n        tip.setAttribute('id', tipId);\n        this.element.setAttribute('aria-describedby', tipId);\n        this.setContent();\n\n        if (this.config.animation) {\n          $(tip).addClass(ClassName$6.FADE);\n        }\n\n        var placement = typeof this.config.placement === 'function' ? this.config.placement.call(this, tip, this.element) : this.config.placement;\n\n        var attachment = this._getAttachment(placement);\n\n        this.addAttachmentClass(attachment);\n\n        var container = this._getContainer();\n\n        $(tip).data(this.constructor.DATA_KEY, this);\n\n        if (!$.contains(this.element.ownerDocument.documentElement, this.tip)) {\n          $(tip).appendTo(container);\n        }\n\n        $(this.element).trigger(this.constructor.Event.INSERTED);\n        this._popper = new Popper(this.element, tip, {\n          placement: attachment,\n          modifiers: {\n            offset: this._getOffset(),\n            flip: {\n              behavior: this.config.fallbackPlacement\n            },\n            arrow: {\n              element: Selector$6.ARROW\n            },\n            preventOverflow: {\n              boundariesElement: this.config.boundary\n            }\n          },\n          onCreate: function onCreate(data) {\n            if (data.originalPlacement !== data.placement) {\n              _this._handlePopperPlacementChange(data);\n            }\n          },\n          onUpdate: function onUpdate(data) {\n            return _this._handlePopperPlacementChange(data);\n          }\n        });\n        $(tip).addClass(ClassName$6.SHOW); // If this is a touch-enabled device we add extra\n        // empty mouseover listeners to the body's immediate children;\n        // only needed because of broken event delegation on iOS\n        // https://www.quirksmode.org/blog/archives/2014/02/mouse_event_bub.html\n\n        if ('ontouchstart' in document.documentElement) {\n          $(document.body).children().on('mouseover', null, $.noop);\n        }\n\n        var complete = function complete() {\n          if (_this.config.animation) {\n            _this._fixTransition();\n          }\n\n          var prevHoverState = _this._hoverState;\n          _this._hoverState = null;\n          $(_this.element).trigger(_this.constructor.Event.SHOWN);\n\n          if (prevHoverState === HoverState.OUT) {\n            _this._leave(null, _this);\n          }\n        };\n\n        if ($(this.tip).hasClass(ClassName$6.FADE)) {\n          var transitionDuration = Util.getTransitionDurationFromElement(this.tip);\n          $(this.tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);\n        } else {\n          complete();\n        }\n      }\n    };\n\n    _proto.hide = function hide(callback) {\n      var _this2 = this;\n\n      var tip = this.getTipElement();\n      var hideEvent = $.Event(this.constructor.Event.HIDE);\n\n      var complete = function complete() {\n        if (_this2._hoverState !== HoverState.SHOW && tip.parentNode) {\n          tip.parentNode.removeChild(tip);\n        }\n\n        _this2._cleanTipClass();\n\n        _this2.element.removeAttribute('aria-describedby');\n\n        $(_this2.element).trigger(_this2.constructor.Event.HIDDEN);\n\n        if (_this2._popper !== null) {\n          _this2._popper.destroy();\n        }\n\n        if (callback) {\n          callback();\n        }\n      };\n\n      $(this.element).trigger(hideEvent);\n\n      if (hideEvent.isDefaultPrevented()) {\n        return;\n      }\n\n      $(tip).removeClass(ClassName$6.SHOW); // If this is a touch-enabled device we remove the extra\n      // empty mouseover listeners we added for iOS support\n\n      if ('ontouchstart' in document.documentElement) {\n        $(document.body).children().off('mouseover', null, $.noop);\n      }\n\n      this._activeTrigger[Trigger.CLICK] = false;\n      this._activeTrigger[Trigger.FOCUS] = false;\n      this._activeTrigger[Trigger.HOVER] = false;\n\n      if ($(this.tip).hasClass(ClassName$6.FADE)) {\n        var transitionDuration = Util.getTransitionDurationFromElement(tip);\n        $(tip).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);\n      } else {\n        complete();\n      }\n\n      this._hoverState = '';\n    };\n\n    _proto.update = function update() {\n      if (this._popper !== null) {\n        this._popper.scheduleUpdate();\n      }\n    } // Protected\n    ;\n\n    _proto.isWithContent = function isWithContent() {\n      return Boolean(this.getTitle());\n    };\n\n    _proto.addAttachmentClass = function addAttachmentClass(attachment) {\n      $(this.getTipElement()).addClass(CLASS_PREFIX + \"-\" + attachment);\n    };\n\n    _proto.getTipElement = function getTipElement() {\n      this.tip = this.tip || $(this.config.template)[0];\n      return this.tip;\n    };\n\n    _proto.setContent = function setContent() {\n      var tip = this.getTipElement();\n      this.setElementContent($(tip.querySelectorAll(Selector$6.TOOLTIP_INNER)), this.getTitle());\n      $(tip).removeClass(ClassName$6.FADE + \" \" + ClassName$6.SHOW);\n    };\n\n    _proto.setElementContent = function setElementContent($element, content) {\n      if (_typeof(content) === 'object' && (content.nodeType || content.jquery)) {\n        // Content is a DOM node or a jQuery\n        if (this.config.html) {\n          if (!$(content).parent().is($element)) {\n            $element.empty().append(content);\n          }\n        } else {\n          $element.text($(content).text());\n        }\n\n        return;\n      }\n\n      if (this.config.html) {\n        if (this.config.sanitize) {\n          content = sanitizeHtml(content, this.config.whiteList, this.config.sanitizeFn);\n        }\n\n        $element.html(content);\n      } else {\n        $element.text(content);\n      }\n    };\n\n    _proto.getTitle = function getTitle() {\n      var title = this.element.getAttribute('data-original-title');\n\n      if (!title) {\n        title = typeof this.config.title === 'function' ? this.config.title.call(this.element) : this.config.title;\n      }\n\n      return title;\n    } // Private\n    ;\n\n    _proto._getOffset = function _getOffset() {\n      var _this3 = this;\n\n      var offset = {};\n\n      if (typeof this.config.offset === 'function') {\n        offset.fn = function (data) {\n          data.offsets = _objectSpread({}, data.offsets, _this3.config.offset(data.offsets, _this3.element) || {});\n          return data;\n        };\n      } else {\n        offset.offset = this.config.offset;\n      }\n\n      return offset;\n    };\n\n    _proto._getContainer = function _getContainer() {\n      if (this.config.container === false) {\n        return document.body;\n      }\n\n      if (Util.isElement(this.config.container)) {\n        return $(this.config.container);\n      }\n\n      return $(document).find(this.config.container);\n    };\n\n    _proto._getAttachment = function _getAttachment(placement) {\n      return AttachmentMap$1[placement.toUpperCase()];\n    };\n\n    _proto._setListeners = function _setListeners() {\n      var _this4 = this;\n\n      var triggers = this.config.trigger.split(' ');\n      triggers.forEach(function (trigger) {\n        if (trigger === 'click') {\n          $(_this4.element).on(_this4.constructor.Event.CLICK, _this4.config.selector, function (event) {\n            return _this4.toggle(event);\n          });\n        } else if (trigger !== Trigger.MANUAL) {\n          var eventIn = trigger === Trigger.HOVER ? _this4.constructor.Event.MOUSEENTER : _this4.constructor.Event.FOCUSIN;\n          var eventOut = trigger === Trigger.HOVER ? _this4.constructor.Event.MOUSELEAVE : _this4.constructor.Event.FOCUSOUT;\n          $(_this4.element).on(eventIn, _this4.config.selector, function (event) {\n            return _this4._enter(event);\n          }).on(eventOut, _this4.config.selector, function (event) {\n            return _this4._leave(event);\n          });\n        }\n      });\n      $(this.element).closest('.modal').on('hide.bs.modal', function () {\n        if (_this4.element) {\n          _this4.hide();\n        }\n      });\n\n      if (this.config.selector) {\n        this.config = _objectSpread({}, this.config, {\n          trigger: 'manual',\n          selector: ''\n        });\n      } else {\n        this._fixTitle();\n      }\n    };\n\n    _proto._fixTitle = function _fixTitle() {\n      var titleType = _typeof(this.element.getAttribute('data-original-title'));\n\n      if (this.element.getAttribute('title') || titleType !== 'string') {\n        this.element.setAttribute('data-original-title', this.element.getAttribute('title') || '');\n        this.element.setAttribute('title', '');\n      }\n    };\n\n    _proto._enter = function _enter(event, context) {\n      var dataKey = this.constructor.DATA_KEY;\n      context = context || $(event.currentTarget).data(dataKey);\n\n      if (!context) {\n        context = new this.constructor(event.currentTarget, this._getDelegateConfig());\n        $(event.currentTarget).data(dataKey, context);\n      }\n\n      if (event) {\n        context._activeTrigger[event.type === 'focusin' ? Trigger.FOCUS : Trigger.HOVER] = true;\n      }\n\n      if ($(context.getTipElement()).hasClass(ClassName$6.SHOW) || context._hoverState === HoverState.SHOW) {\n        context._hoverState = HoverState.SHOW;\n        return;\n      }\n\n      clearTimeout(context._timeout);\n      context._hoverState = HoverState.SHOW;\n\n      if (!context.config.delay || !context.config.delay.show) {\n        context.show();\n        return;\n      }\n\n      context._timeout = setTimeout(function () {\n        if (context._hoverState === HoverState.SHOW) {\n          context.show();\n        }\n      }, context.config.delay.show);\n    };\n\n    _proto._leave = function _leave(event, context) {\n      var dataKey = this.constructor.DATA_KEY;\n      context = context || $(event.currentTarget).data(dataKey);\n\n      if (!context) {\n        context = new this.constructor(event.currentTarget, this._getDelegateConfig());\n        $(event.currentTarget).data(dataKey, context);\n      }\n\n      if (event) {\n        context._activeTrigger[event.type === 'focusout' ? Trigger.FOCUS : Trigger.HOVER] = false;\n      }\n\n      if (context._isWithActiveTrigger()) {\n        return;\n      }\n\n      clearTimeout(context._timeout);\n      context._hoverState = HoverState.OUT;\n\n      if (!context.config.delay || !context.config.delay.hide) {\n        context.hide();\n        return;\n      }\n\n      context._timeout = setTimeout(function () {\n        if (context._hoverState === HoverState.OUT) {\n          context.hide();\n        }\n      }, context.config.delay.hide);\n    };\n\n    _proto._isWithActiveTrigger = function _isWithActiveTrigger() {\n      for (var trigger in this._activeTrigger) {\n        if (this._activeTrigger[trigger]) {\n          return true;\n        }\n      }\n\n      return false;\n    };\n\n    _proto._getConfig = function _getConfig(config) {\n      var dataAttributes = $(this.element).data();\n      Object.keys(dataAttributes).forEach(function (dataAttr) {\n        if (DISALLOWED_ATTRIBUTES.indexOf(dataAttr) !== -1) {\n          delete dataAttributes[dataAttr];\n        }\n      });\n      config = _objectSpread({}, this.constructor.Default, dataAttributes, _typeof(config) === 'object' && config ? config : {});\n\n      if (typeof config.delay === 'number') {\n        config.delay = {\n          show: config.delay,\n          hide: config.delay\n        };\n      }\n\n      if (typeof config.title === 'number') {\n        config.title = config.title.toString();\n      }\n\n      if (typeof config.content === 'number') {\n        config.content = config.content.toString();\n      }\n\n      Util.typeCheckConfig(NAME$6, config, this.constructor.DefaultType);\n\n      if (config.sanitize) {\n        config.template = sanitizeHtml(config.template, config.whiteList, config.sanitizeFn);\n      }\n\n      return config;\n    };\n\n    _proto._getDelegateConfig = function _getDelegateConfig() {\n      var config = {};\n\n      if (this.config) {\n        for (var key in this.config) {\n          if (this.constructor.Default[key] !== this.config[key]) {\n            config[key] = this.config[key];\n          }\n        }\n      }\n\n      return config;\n    };\n\n    _proto._cleanTipClass = function _cleanTipClass() {\n      var $tip = $(this.getTipElement());\n      var tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX);\n\n      if (tabClass !== null && tabClass.length) {\n        $tip.removeClass(tabClass.join(''));\n      }\n    };\n\n    _proto._handlePopperPlacementChange = function _handlePopperPlacementChange(popperData) {\n      var popperInstance = popperData.instance;\n      this.tip = popperInstance.popper;\n\n      this._cleanTipClass();\n\n      this.addAttachmentClass(this._getAttachment(popperData.placement));\n    };\n\n    _proto._fixTransition = function _fixTransition() {\n      var tip = this.getTipElement();\n      var initConfigAnimation = this.config.animation;\n\n      if (tip.getAttribute('x-placement') !== null) {\n        return;\n      }\n\n      $(tip).removeClass(ClassName$6.FADE);\n      this.config.animation = false;\n      this.hide();\n      this.show();\n      this.config.animation = initConfigAnimation;\n    } // Static\n    ;\n\n    Tooltip._jQueryInterface = function _jQueryInterface(config) {\n      return this.each(function () {\n        var data = $(this).data(DATA_KEY$6);\n\n        var _config = _typeof(config) === 'object' && config;\n\n        if (!data && /dispose|hide/.test(config)) {\n          return;\n        }\n\n        if (!data) {\n          data = new Tooltip(this, _config);\n          $(this).data(DATA_KEY$6, data);\n        }\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n          }\n\n          data[config]();\n        }\n      });\n    };\n\n    _createClass(Tooltip, null, [{\n      key: \"VERSION\",\n      get: function get() {\n        return VERSION$6;\n      }\n    }, {\n      key: \"Default\",\n      get: function get() {\n        return Default$4;\n      }\n    }, {\n      key: \"NAME\",\n      get: function get() {\n        return NAME$6;\n      }\n    }, {\n      key: \"DATA_KEY\",\n      get: function get() {\n        return DATA_KEY$6;\n      }\n    }, {\n      key: \"Event\",\n      get: function get() {\n        return Event$6;\n      }\n    }, {\n      key: \"EVENT_KEY\",\n      get: function get() {\n        return EVENT_KEY$6;\n      }\n    }, {\n      key: \"DefaultType\",\n      get: function get() {\n        return DefaultType$4;\n      }\n    }]);\n\n    return Tooltip;\n  }();\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n\n  $.fn[NAME$6] = Tooltip._jQueryInterface;\n  $.fn[NAME$6].Constructor = Tooltip;\n\n  $.fn[NAME$6].noConflict = function () {\n    $.fn[NAME$6] = JQUERY_NO_CONFLICT$6;\n    return Tooltip._jQueryInterface;\n  };\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n\n  var NAME$7 = 'popover';\n  var VERSION$7 = '4.3.1';\n  var DATA_KEY$7 = 'bs.popover';\n  var EVENT_KEY$7 = \".\" + DATA_KEY$7;\n  var JQUERY_NO_CONFLICT$7 = $.fn[NAME$7];\n  var CLASS_PREFIX$1 = 'bs-popover';\n  var BSCLS_PREFIX_REGEX$1 = new RegExp(\"(^|\\\\s)\" + CLASS_PREFIX$1 + \"\\\\S+\", 'g');\n\n  var Default$5 = _objectSpread({}, Tooltip.Default, {\n    placement: 'right',\n    trigger: 'click',\n    content: '',\n    template: '<div class=\"popover\" role=\"tooltip\">' + '<div class=\"arrow\"></div>' + '<h3 class=\"popover-header\"></h3>' + '<div class=\"popover-body\"></div></div>'\n  });\n\n  var DefaultType$5 = _objectSpread({}, Tooltip.DefaultType, {\n    content: '(string|element|function)'\n  });\n\n  var ClassName$7 = {\n    FADE: 'fade',\n    SHOW: 'show'\n  };\n  var Selector$7 = {\n    TITLE: '.popover-header',\n    CONTENT: '.popover-body'\n  };\n  var Event$7 = {\n    HIDE: \"hide\" + EVENT_KEY$7,\n    HIDDEN: \"hidden\" + EVENT_KEY$7,\n    SHOW: \"show\" + EVENT_KEY$7,\n    SHOWN: \"shown\" + EVENT_KEY$7,\n    INSERTED: \"inserted\" + EVENT_KEY$7,\n    CLICK: \"click\" + EVENT_KEY$7,\n    FOCUSIN: \"focusin\" + EVENT_KEY$7,\n    FOCUSOUT: \"focusout\" + EVENT_KEY$7,\n    MOUSEENTER: \"mouseenter\" + EVENT_KEY$7,\n    MOUSELEAVE: \"mouseleave\" + EVENT_KEY$7\n    /**\n     * ------------------------------------------------------------------------\n     * Class Definition\n     * ------------------------------------------------------------------------\n     */\n\n  };\n\n  var Popover =\n  /*#__PURE__*/\n  function (_Tooltip) {\n    _inheritsLoose(Popover, _Tooltip);\n\n    function Popover() {\n      return _Tooltip.apply(this, arguments) || this;\n    }\n\n    var _proto = Popover.prototype; // Overrides\n\n    _proto.isWithContent = function isWithContent() {\n      return this.getTitle() || this._getContent();\n    };\n\n    _proto.addAttachmentClass = function addAttachmentClass(attachment) {\n      $(this.getTipElement()).addClass(CLASS_PREFIX$1 + \"-\" + attachment);\n    };\n\n    _proto.getTipElement = function getTipElement() {\n      this.tip = this.tip || $(this.config.template)[0];\n      return this.tip;\n    };\n\n    _proto.setContent = function setContent() {\n      var $tip = $(this.getTipElement()); // We use append for html objects to maintain js events\n\n      this.setElementContent($tip.find(Selector$7.TITLE), this.getTitle());\n\n      var content = this._getContent();\n\n      if (typeof content === 'function') {\n        content = content.call(this.element);\n      }\n\n      this.setElementContent($tip.find(Selector$7.CONTENT), content);\n      $tip.removeClass(ClassName$7.FADE + \" \" + ClassName$7.SHOW);\n    } // Private\n    ;\n\n    _proto._getContent = function _getContent() {\n      return this.element.getAttribute('data-content') || this.config.content;\n    };\n\n    _proto._cleanTipClass = function _cleanTipClass() {\n      var $tip = $(this.getTipElement());\n      var tabClass = $tip.attr('class').match(BSCLS_PREFIX_REGEX$1);\n\n      if (tabClass !== null && tabClass.length > 0) {\n        $tip.removeClass(tabClass.join(''));\n      }\n    } // Static\n    ;\n\n    Popover._jQueryInterface = function _jQueryInterface(config) {\n      return this.each(function () {\n        var data = $(this).data(DATA_KEY$7);\n\n        var _config = _typeof(config) === 'object' ? config : null;\n\n        if (!data && /dispose|hide/.test(config)) {\n          return;\n        }\n\n        if (!data) {\n          data = new Popover(this, _config);\n          $(this).data(DATA_KEY$7, data);\n        }\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n          }\n\n          data[config]();\n        }\n      });\n    };\n\n    _createClass(Popover, null, [{\n      key: \"VERSION\",\n      // Getters\n      get: function get() {\n        return VERSION$7;\n      }\n    }, {\n      key: \"Default\",\n      get: function get() {\n        return Default$5;\n      }\n    }, {\n      key: \"NAME\",\n      get: function get() {\n        return NAME$7;\n      }\n    }, {\n      key: \"DATA_KEY\",\n      get: function get() {\n        return DATA_KEY$7;\n      }\n    }, {\n      key: \"Event\",\n      get: function get() {\n        return Event$7;\n      }\n    }, {\n      key: \"EVENT_KEY\",\n      get: function get() {\n        return EVENT_KEY$7;\n      }\n    }, {\n      key: \"DefaultType\",\n      get: function get() {\n        return DefaultType$5;\n      }\n    }]);\n\n    return Popover;\n  }(Tooltip);\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n\n  $.fn[NAME$7] = Popover._jQueryInterface;\n  $.fn[NAME$7].Constructor = Popover;\n\n  $.fn[NAME$7].noConflict = function () {\n    $.fn[NAME$7] = JQUERY_NO_CONFLICT$7;\n    return Popover._jQueryInterface;\n  };\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n\n  var NAME$8 = 'scrollspy';\n  var VERSION$8 = '4.3.1';\n  var DATA_KEY$8 = 'bs.scrollspy';\n  var EVENT_KEY$8 = \".\" + DATA_KEY$8;\n  var DATA_API_KEY$6 = '.data-api';\n  var JQUERY_NO_CONFLICT$8 = $.fn[NAME$8];\n  var Default$6 = {\n    offset: 10,\n    method: 'auto',\n    target: ''\n  };\n  var DefaultType$6 = {\n    offset: 'number',\n    method: 'string',\n    target: '(string|element)'\n  };\n  var Event$8 = {\n    ACTIVATE: \"activate\" + EVENT_KEY$8,\n    SCROLL: \"scroll\" + EVENT_KEY$8,\n    LOAD_DATA_API: \"load\" + EVENT_KEY$8 + DATA_API_KEY$6\n  };\n  var ClassName$8 = {\n    DROPDOWN_ITEM: 'dropdown-item',\n    DROPDOWN_MENU: 'dropdown-menu',\n    ACTIVE: 'active'\n  };\n  var Selector$8 = {\n    DATA_SPY: '[data-spy=\"scroll\"]',\n    ACTIVE: '.active',\n    NAV_LIST_GROUP: '.nav, .list-group',\n    NAV_LINKS: '.nav-link',\n    NAV_ITEMS: '.nav-item',\n    LIST_ITEMS: '.list-group-item',\n    DROPDOWN: '.dropdown',\n    DROPDOWN_ITEMS: '.dropdown-item',\n    DROPDOWN_TOGGLE: '.dropdown-toggle'\n  };\n  var OffsetMethod = {\n    OFFSET: 'offset',\n    POSITION: 'position'\n    /**\n     * ------------------------------------------------------------------------\n     * Class Definition\n     * ------------------------------------------------------------------------\n     */\n\n  };\n\n  var ScrollSpy =\n  /*#__PURE__*/\n  function () {\n    function ScrollSpy(element, config) {\n      var _this = this;\n\n      this._element = element;\n      this._scrollElement = element.tagName === 'BODY' ? window : element;\n      this._config = this._getConfig(config);\n      this._selector = this._config.target + \" \" + Selector$8.NAV_LINKS + \",\" + (this._config.target + \" \" + Selector$8.LIST_ITEMS + \",\") + (this._config.target + \" \" + Selector$8.DROPDOWN_ITEMS);\n      this._offsets = [];\n      this._targets = [];\n      this._activeTarget = null;\n      this._scrollHeight = 0;\n      $(this._scrollElement).on(Event$8.SCROLL, function (event) {\n        return _this._process(event);\n      });\n      this.refresh();\n\n      this._process();\n    } // Getters\n\n\n    var _proto = ScrollSpy.prototype; // Public\n\n    _proto.refresh = function refresh() {\n      var _this2 = this;\n\n      var autoMethod = this._scrollElement === this._scrollElement.window ? OffsetMethod.OFFSET : OffsetMethod.POSITION;\n      var offsetMethod = this._config.method === 'auto' ? autoMethod : this._config.method;\n      var offsetBase = offsetMethod === OffsetMethod.POSITION ? this._getScrollTop() : 0;\n      this._offsets = [];\n      this._targets = [];\n      this._scrollHeight = this._getScrollHeight();\n      var targets = [].slice.call(document.querySelectorAll(this._selector));\n      targets.map(function (element) {\n        var target;\n        var targetSelector = Util.getSelectorFromElement(element);\n\n        if (targetSelector) {\n          target = document.querySelector(targetSelector);\n        }\n\n        if (target) {\n          var targetBCR = target.getBoundingClientRect();\n\n          if (targetBCR.width || targetBCR.height) {\n            // TODO (fat): remove sketch reliance on jQuery position/offset\n            return [$(target)[offsetMethod]().top + offsetBase, targetSelector];\n          }\n        }\n\n        return null;\n      }).filter(function (item) {\n        return item;\n      }).sort(function (a, b) {\n        return a[0] - b[0];\n      }).forEach(function (item) {\n        _this2._offsets.push(item[0]);\n\n        _this2._targets.push(item[1]);\n      });\n    };\n\n    _proto.dispose = function dispose() {\n      $.removeData(this._element, DATA_KEY$8);\n      $(this._scrollElement).off(EVENT_KEY$8);\n      this._element = null;\n      this._scrollElement = null;\n      this._config = null;\n      this._selector = null;\n      this._offsets = null;\n      this._targets = null;\n      this._activeTarget = null;\n      this._scrollHeight = null;\n    } // Private\n    ;\n\n    _proto._getConfig = function _getConfig(config) {\n      config = _objectSpread({}, Default$6, _typeof(config) === 'object' && config ? config : {});\n\n      if (typeof config.target !== 'string') {\n        var id = $(config.target).attr('id');\n\n        if (!id) {\n          id = Util.getUID(NAME$8);\n          $(config.target).attr('id', id);\n        }\n\n        config.target = \"#\" + id;\n      }\n\n      Util.typeCheckConfig(NAME$8, config, DefaultType$6);\n      return config;\n    };\n\n    _proto._getScrollTop = function _getScrollTop() {\n      return this._scrollElement === window ? this._scrollElement.pageYOffset : this._scrollElement.scrollTop;\n    };\n\n    _proto._getScrollHeight = function _getScrollHeight() {\n      return this._scrollElement.scrollHeight || Math.max(document.body.scrollHeight, document.documentElement.scrollHeight);\n    };\n\n    _proto._getOffsetHeight = function _getOffsetHeight() {\n      return this._scrollElement === window ? window.innerHeight : this._scrollElement.getBoundingClientRect().height;\n    };\n\n    _proto._process = function _process() {\n      var scrollTop = this._getScrollTop() + this._config.offset;\n\n      var scrollHeight = this._getScrollHeight();\n\n      var maxScroll = this._config.offset + scrollHeight - this._getOffsetHeight();\n\n      if (this._scrollHeight !== scrollHeight) {\n        this.refresh();\n      }\n\n      if (scrollTop >= maxScroll) {\n        var target = this._targets[this._targets.length - 1];\n\n        if (this._activeTarget !== target) {\n          this._activate(target);\n        }\n\n        return;\n      }\n\n      if (this._activeTarget && scrollTop < this._offsets[0] && this._offsets[0] > 0) {\n        this._activeTarget = null;\n\n        this._clear();\n\n        return;\n      }\n\n      var offsetLength = this._offsets.length;\n\n      for (var i = offsetLength; i--;) {\n        var isActiveTarget = this._activeTarget !== this._targets[i] && scrollTop >= this._offsets[i] && (typeof this._offsets[i + 1] === 'undefined' || scrollTop < this._offsets[i + 1]);\n\n        if (isActiveTarget) {\n          this._activate(this._targets[i]);\n        }\n      }\n    };\n\n    _proto._activate = function _activate(target) {\n      this._activeTarget = target;\n\n      this._clear();\n\n      var queries = this._selector.split(',').map(function (selector) {\n        return selector + \"[data-target=\\\"\" + target + \"\\\"],\" + selector + \"[href=\\\"\" + target + \"\\\"]\";\n      });\n\n      var $link = $([].slice.call(document.querySelectorAll(queries.join(','))));\n\n      if ($link.hasClass(ClassName$8.DROPDOWN_ITEM)) {\n        $link.closest(Selector$8.DROPDOWN).find(Selector$8.DROPDOWN_TOGGLE).addClass(ClassName$8.ACTIVE);\n        $link.addClass(ClassName$8.ACTIVE);\n      } else {\n        // Set triggered link as active\n        $link.addClass(ClassName$8.ACTIVE); // Set triggered links parents as active\n        // With both <ul> and <nav> markup a parent is the previous sibling of any nav ancestor\n\n        $link.parents(Selector$8.NAV_LIST_GROUP).prev(Selector$8.NAV_LINKS + \", \" + Selector$8.LIST_ITEMS).addClass(ClassName$8.ACTIVE); // Handle special case when .nav-link is inside .nav-item\n\n        $link.parents(Selector$8.NAV_LIST_GROUP).prev(Selector$8.NAV_ITEMS).children(Selector$8.NAV_LINKS).addClass(ClassName$8.ACTIVE);\n      }\n\n      $(this._scrollElement).trigger(Event$8.ACTIVATE, {\n        relatedTarget: target\n      });\n    };\n\n    _proto._clear = function _clear() {\n      [].slice.call(document.querySelectorAll(this._selector)).filter(function (node) {\n        return node.classList.contains(ClassName$8.ACTIVE);\n      }).forEach(function (node) {\n        return node.classList.remove(ClassName$8.ACTIVE);\n      });\n    } // Static\n    ;\n\n    ScrollSpy._jQueryInterface = function _jQueryInterface(config) {\n      return this.each(function () {\n        var data = $(this).data(DATA_KEY$8);\n\n        var _config = _typeof(config) === 'object' && config;\n\n        if (!data) {\n          data = new ScrollSpy(this, _config);\n          $(this).data(DATA_KEY$8, data);\n        }\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n          }\n\n          data[config]();\n        }\n      });\n    };\n\n    _createClass(ScrollSpy, null, [{\n      key: \"VERSION\",\n      get: function get() {\n        return VERSION$8;\n      }\n    }, {\n      key: \"Default\",\n      get: function get() {\n        return Default$6;\n      }\n    }]);\n\n    return ScrollSpy;\n  }();\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  $(window).on(Event$8.LOAD_DATA_API, function () {\n    var scrollSpys = [].slice.call(document.querySelectorAll(Selector$8.DATA_SPY));\n    var scrollSpysLength = scrollSpys.length;\n\n    for (var i = scrollSpysLength; i--;) {\n      var $spy = $(scrollSpys[i]);\n\n      ScrollSpy._jQueryInterface.call($spy, $spy.data());\n    }\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n  $.fn[NAME$8] = ScrollSpy._jQueryInterface;\n  $.fn[NAME$8].Constructor = ScrollSpy;\n\n  $.fn[NAME$8].noConflict = function () {\n    $.fn[NAME$8] = JQUERY_NO_CONFLICT$8;\n    return ScrollSpy._jQueryInterface;\n  };\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n\n  var NAME$9 = 'tab';\n  var VERSION$9 = '4.3.1';\n  var DATA_KEY$9 = 'bs.tab';\n  var EVENT_KEY$9 = \".\" + DATA_KEY$9;\n  var DATA_API_KEY$7 = '.data-api';\n  var JQUERY_NO_CONFLICT$9 = $.fn[NAME$9];\n  var Event$9 = {\n    HIDE: \"hide\" + EVENT_KEY$9,\n    HIDDEN: \"hidden\" + EVENT_KEY$9,\n    SHOW: \"show\" + EVENT_KEY$9,\n    SHOWN: \"shown\" + EVENT_KEY$9,\n    CLICK_DATA_API: \"click\" + EVENT_KEY$9 + DATA_API_KEY$7\n  };\n  var ClassName$9 = {\n    DROPDOWN_MENU: 'dropdown-menu',\n    ACTIVE: 'active',\n    DISABLED: 'disabled',\n    FADE: 'fade',\n    SHOW: 'show'\n  };\n  var Selector$9 = {\n    DROPDOWN: '.dropdown',\n    NAV_LIST_GROUP: '.nav, .list-group',\n    ACTIVE: '.active',\n    ACTIVE_UL: '> li > .active',\n    DATA_TOGGLE: '[data-toggle=\"tab\"], [data-toggle=\"pill\"], [data-toggle=\"list\"]',\n    DROPDOWN_TOGGLE: '.dropdown-toggle',\n    DROPDOWN_ACTIVE_CHILD: '> .dropdown-menu .active'\n    /**\n     * ------------------------------------------------------------------------\n     * Class Definition\n     * ------------------------------------------------------------------------\n     */\n\n  };\n\n  var Tab =\n  /*#__PURE__*/\n  function () {\n    function Tab(element) {\n      this._element = element;\n    } // Getters\n\n\n    var _proto = Tab.prototype; // Public\n\n    _proto.show = function show() {\n      var _this = this;\n\n      if (this._element.parentNode && this._element.parentNode.nodeType === Node.ELEMENT_NODE && $(this._element).hasClass(ClassName$9.ACTIVE) || $(this._element).hasClass(ClassName$9.DISABLED)) {\n        return;\n      }\n\n      var target;\n      var previous;\n      var listElement = $(this._element).closest(Selector$9.NAV_LIST_GROUP)[0];\n      var selector = Util.getSelectorFromElement(this._element);\n\n      if (listElement) {\n        var itemSelector = listElement.nodeName === 'UL' || listElement.nodeName === 'OL' ? Selector$9.ACTIVE_UL : Selector$9.ACTIVE;\n        previous = $.makeArray($(listElement).find(itemSelector));\n        previous = previous[previous.length - 1];\n      }\n\n      var hideEvent = $.Event(Event$9.HIDE, {\n        relatedTarget: this._element\n      });\n      var showEvent = $.Event(Event$9.SHOW, {\n        relatedTarget: previous\n      });\n\n      if (previous) {\n        $(previous).trigger(hideEvent);\n      }\n\n      $(this._element).trigger(showEvent);\n\n      if (showEvent.isDefaultPrevented() || hideEvent.isDefaultPrevented()) {\n        return;\n      }\n\n      if (selector) {\n        target = document.querySelector(selector);\n      }\n\n      this._activate(this._element, listElement);\n\n      var complete = function complete() {\n        var hiddenEvent = $.Event(Event$9.HIDDEN, {\n          relatedTarget: _this._element\n        });\n        var shownEvent = $.Event(Event$9.SHOWN, {\n          relatedTarget: previous\n        });\n        $(previous).trigger(hiddenEvent);\n        $(_this._element).trigger(shownEvent);\n      };\n\n      if (target) {\n        this._activate(target, target.parentNode, complete);\n      } else {\n        complete();\n      }\n    };\n\n    _proto.dispose = function dispose() {\n      $.removeData(this._element, DATA_KEY$9);\n      this._element = null;\n    } // Private\n    ;\n\n    _proto._activate = function _activate(element, container, callback) {\n      var _this2 = this;\n\n      var activeElements = container && (container.nodeName === 'UL' || container.nodeName === 'OL') ? $(container).find(Selector$9.ACTIVE_UL) : $(container).children(Selector$9.ACTIVE);\n      var active = activeElements[0];\n      var isTransitioning = callback && active && $(active).hasClass(ClassName$9.FADE);\n\n      var complete = function complete() {\n        return _this2._transitionComplete(element, active, callback);\n      };\n\n      if (active && isTransitioning) {\n        var transitionDuration = Util.getTransitionDurationFromElement(active);\n        $(active).removeClass(ClassName$9.SHOW).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);\n      } else {\n        complete();\n      }\n    };\n\n    _proto._transitionComplete = function _transitionComplete(element, active, callback) {\n      if (active) {\n        $(active).removeClass(ClassName$9.ACTIVE);\n        var dropdownChild = $(active.parentNode).find(Selector$9.DROPDOWN_ACTIVE_CHILD)[0];\n\n        if (dropdownChild) {\n          $(dropdownChild).removeClass(ClassName$9.ACTIVE);\n        }\n\n        if (active.getAttribute('role') === 'tab') {\n          active.setAttribute('aria-selected', false);\n        }\n      }\n\n      $(element).addClass(ClassName$9.ACTIVE);\n\n      if (element.getAttribute('role') === 'tab') {\n        element.setAttribute('aria-selected', true);\n      }\n\n      Util.reflow(element);\n\n      if (element.classList.contains(ClassName$9.FADE)) {\n        element.classList.add(ClassName$9.SHOW);\n      }\n\n      if (element.parentNode && $(element.parentNode).hasClass(ClassName$9.DROPDOWN_MENU)) {\n        var dropdownElement = $(element).closest(Selector$9.DROPDOWN)[0];\n\n        if (dropdownElement) {\n          var dropdownToggleList = [].slice.call(dropdownElement.querySelectorAll(Selector$9.DROPDOWN_TOGGLE));\n          $(dropdownToggleList).addClass(ClassName$9.ACTIVE);\n        }\n\n        element.setAttribute('aria-expanded', true);\n      }\n\n      if (callback) {\n        callback();\n      }\n    } // Static\n    ;\n\n    Tab._jQueryInterface = function _jQueryInterface(config) {\n      return this.each(function () {\n        var $this = $(this);\n        var data = $this.data(DATA_KEY$9);\n\n        if (!data) {\n          data = new Tab(this);\n          $this.data(DATA_KEY$9, data);\n        }\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n          }\n\n          data[config]();\n        }\n      });\n    };\n\n    _createClass(Tab, null, [{\n      key: \"VERSION\",\n      get: function get() {\n        return VERSION$9;\n      }\n    }]);\n\n    return Tab;\n  }();\n  /**\n   * ------------------------------------------------------------------------\n   * Data Api implementation\n   * ------------------------------------------------------------------------\n   */\n\n\n  $(document).on(Event$9.CLICK_DATA_API, Selector$9.DATA_TOGGLE, function (event) {\n    event.preventDefault();\n\n    Tab._jQueryInterface.call($(this), 'show');\n  });\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n  $.fn[NAME$9] = Tab._jQueryInterface;\n  $.fn[NAME$9].Constructor = Tab;\n\n  $.fn[NAME$9].noConflict = function () {\n    $.fn[NAME$9] = JQUERY_NO_CONFLICT$9;\n    return Tab._jQueryInterface;\n  };\n  /**\n   * ------------------------------------------------------------------------\n   * Constants\n   * ------------------------------------------------------------------------\n   */\n\n\n  var NAME$a = 'toast';\n  var VERSION$a = '4.3.1';\n  var DATA_KEY$a = 'bs.toast';\n  var EVENT_KEY$a = \".\" + DATA_KEY$a;\n  var JQUERY_NO_CONFLICT$a = $.fn[NAME$a];\n  var Event$a = {\n    CLICK_DISMISS: \"click.dismiss\" + EVENT_KEY$a,\n    HIDE: \"hide\" + EVENT_KEY$a,\n    HIDDEN: \"hidden\" + EVENT_KEY$a,\n    SHOW: \"show\" + EVENT_KEY$a,\n    SHOWN: \"shown\" + EVENT_KEY$a\n  };\n  var ClassName$a = {\n    FADE: 'fade',\n    HIDE: 'hide',\n    SHOW: 'show',\n    SHOWING: 'showing'\n  };\n  var DefaultType$7 = {\n    animation: 'boolean',\n    autohide: 'boolean',\n    delay: 'number'\n  };\n  var Default$7 = {\n    animation: true,\n    autohide: true,\n    delay: 500\n  };\n  var Selector$a = {\n    DATA_DISMISS: '[data-dismiss=\"toast\"]'\n    /**\n     * ------------------------------------------------------------------------\n     * Class Definition\n     * ------------------------------------------------------------------------\n     */\n\n  };\n\n  var Toast =\n  /*#__PURE__*/\n  function () {\n    function Toast(element, config) {\n      this._element = element;\n      this._config = this._getConfig(config);\n      this._timeout = null;\n\n      this._setListeners();\n    } // Getters\n\n\n    var _proto = Toast.prototype; // Public\n\n    _proto.show = function show() {\n      var _this = this;\n\n      $(this._element).trigger(Event$a.SHOW);\n\n      if (this._config.animation) {\n        this._element.classList.add(ClassName$a.FADE);\n      }\n\n      var complete = function complete() {\n        _this._element.classList.remove(ClassName$a.SHOWING);\n\n        _this._element.classList.add(ClassName$a.SHOW);\n\n        $(_this._element).trigger(Event$a.SHOWN);\n\n        if (_this._config.autohide) {\n          _this.hide();\n        }\n      };\n\n      this._element.classList.remove(ClassName$a.HIDE);\n\n      this._element.classList.add(ClassName$a.SHOWING);\n\n      if (this._config.animation) {\n        var transitionDuration = Util.getTransitionDurationFromElement(this._element);\n        $(this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);\n      } else {\n        complete();\n      }\n    };\n\n    _proto.hide = function hide(withoutTimeout) {\n      var _this2 = this;\n\n      if (!this._element.classList.contains(ClassName$a.SHOW)) {\n        return;\n      }\n\n      $(this._element).trigger(Event$a.HIDE);\n\n      if (withoutTimeout) {\n        this._close();\n      } else {\n        this._timeout = setTimeout(function () {\n          _this2._close();\n        }, this._config.delay);\n      }\n    };\n\n    _proto.dispose = function dispose() {\n      clearTimeout(this._timeout);\n      this._timeout = null;\n\n      if (this._element.classList.contains(ClassName$a.SHOW)) {\n        this._element.classList.remove(ClassName$a.SHOW);\n      }\n\n      $(this._element).off(Event$a.CLICK_DISMISS);\n      $.removeData(this._element, DATA_KEY$a);\n      this._element = null;\n      this._config = null;\n    } // Private\n    ;\n\n    _proto._getConfig = function _getConfig(config) {\n      config = _objectSpread({}, Default$7, $(this._element).data(), _typeof(config) === 'object' && config ? config : {});\n      Util.typeCheckConfig(NAME$a, config, this.constructor.DefaultType);\n      return config;\n    };\n\n    _proto._setListeners = function _setListeners() {\n      var _this3 = this;\n\n      $(this._element).on(Event$a.CLICK_DISMISS, Selector$a.DATA_DISMISS, function () {\n        return _this3.hide(true);\n      });\n    };\n\n    _proto._close = function _close() {\n      var _this4 = this;\n\n      var complete = function complete() {\n        _this4._element.classList.add(ClassName$a.HIDE);\n\n        $(_this4._element).trigger(Event$a.HIDDEN);\n      };\n\n      this._element.classList.remove(ClassName$a.SHOW);\n\n      if (this._config.animation) {\n        var transitionDuration = Util.getTransitionDurationFromElement(this._element);\n        $(this._element).one(Util.TRANSITION_END, complete).emulateTransitionEnd(transitionDuration);\n      } else {\n        complete();\n      }\n    } // Static\n    ;\n\n    Toast._jQueryInterface = function _jQueryInterface(config) {\n      return this.each(function () {\n        var $element = $(this);\n        var data = $element.data(DATA_KEY$a);\n\n        var _config = _typeof(config) === 'object' && config;\n\n        if (!data) {\n          data = new Toast(this, _config);\n          $element.data(DATA_KEY$a, data);\n        }\n\n        if (typeof config === 'string') {\n          if (typeof data[config] === 'undefined') {\n            throw new TypeError(\"No method named \\\"\" + config + \"\\\"\");\n          }\n\n          data[config](this);\n        }\n      });\n    };\n\n    _createClass(Toast, null, [{\n      key: \"VERSION\",\n      get: function get() {\n        return VERSION$a;\n      }\n    }, {\n      key: \"DefaultType\",\n      get: function get() {\n        return DefaultType$7;\n      }\n    }, {\n      key: \"Default\",\n      get: function get() {\n        return Default$7;\n      }\n    }]);\n\n    return Toast;\n  }();\n  /**\n   * ------------------------------------------------------------------------\n   * jQuery\n   * ------------------------------------------------------------------------\n   */\n\n\n  $.fn[NAME$a] = Toast._jQueryInterface;\n  $.fn[NAME$a].Constructor = Toast;\n\n  $.fn[NAME$a].noConflict = function () {\n    $.fn[NAME$a] = JQUERY_NO_CONFLICT$a;\n    return Toast._jQueryInterface;\n  };\n  /**\n   * --------------------------------------------------------------------------\n   * Bootstrap (v4.3.1): index.js\n   * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n   * --------------------------------------------------------------------------\n   */\n\n\n  (function () {\n    if (typeof $ === 'undefined') {\n      throw new TypeError('Bootstrap\\'s JavaScript requires jQuery. jQuery must be included before Bootstrap\\'s JavaScript.');\n    }\n\n    var version = $.fn.jquery.split(' ')[0].split('.');\n    var minMajor = 1;\n    var ltMajor = 2;\n    var minMinor = 9;\n    var minPatch = 1;\n    var maxMajor = 4;\n\n    if (version[0] < ltMajor && version[1] < minMinor || version[0] === minMajor && version[1] === minMinor && version[2] < minPatch || version[0] >= maxMajor) {\n      throw new Error('Bootstrap\\'s JavaScript requires at least jQuery v1.9.1 but less than v4.0.0');\n    }\n  })();\n\n  exports.Util = Util;\n  exports.Alert = Alert;\n  exports.Button = Button;\n  exports.Carousel = Carousel;\n  exports.Collapse = Collapse;\n  exports.Dropdown = Dropdown;\n  exports.Modal = Modal;\n  exports.Popover = Popover;\n  exports.Scrollspy = ScrollSpy;\n  exports.Tab = Tab;\n  exports.Toast = Toast;\n  exports.Tooltip = Tooltip;\n  Object.defineProperty(exports, '__esModule', {\n    value: true\n  });\n});","function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n/*\n     _ _      _       _\n ___| (_) ___| | __  (_)___\n/ __| | |/ __| |/ /  | / __|\n\\__ \\ | | (__|   < _ | \\__ \\\n|___/_|_|\\___|_|\\_(_)/ |___/\n                   |__/\n\n Version: 1.8.1\n  Author: Ken Wheeler\n Website: http://kenwheeler.github.io\n    Docs: http://kenwheeler.github.io/slick\n    Repo: http://github.com/kenwheeler/slick\n  Issues: http://github.com/kenwheeler/slick/issues\n\n */\n\n/* global window, document, define, jQuery, setInterval, clearInterval */\n;\n\n(function (factory) {\n  'use strict';\n\n  if (typeof define === 'function' && define.amd) {\n    define(['jquery'], factory);\n  } else if (typeof exports !== 'undefined') {\n    module.exports = factory(require('jquery'));\n  } else {\n    factory(jQuery);\n  }\n})(function ($) {\n  'use strict';\n\n  var Slick = window.Slick || {};\n\n  Slick = function () {\n    var instanceUid = 0;\n\n    function Slick(element, settings) {\n      var _ = this,\n          dataSettings;\n\n      _.defaults = {\n        accessibility: true,\n        adaptiveHeight: false,\n        appendArrows: $(element),\n        appendDots: $(element),\n        arrows: true,\n        asNavFor: null,\n        prevArrow: '<button class=\"slick-prev\" aria-label=\"Previous\" type=\"button\">Previous</button>',\n        nextArrow: '<button class=\"slick-next\" aria-label=\"Next\" type=\"button\">Next</button>',\n        autoplay: false,\n        autoplaySpeed: 3000,\n        centerMode: false,\n        centerPadding: '50px',\n        cssEase: 'ease',\n        customPaging: function customPaging(slider, i) {\n          return $('<button type=\"button\" />').text(i + 1);\n        },\n        dots: false,\n        dotsClass: 'slick-dots',\n        draggable: true,\n        easing: 'linear',\n        edgeFriction: 0.35,\n        fade: false,\n        focusOnSelect: false,\n        focusOnChange: false,\n        infinite: true,\n        initialSlide: 0,\n        lazyLoad: 'ondemand',\n        mobileFirst: false,\n        pauseOnHover: true,\n        pauseOnFocus: true,\n        pauseOnDotsHover: false,\n        respondTo: 'window',\n        responsive: null,\n        rows: 1,\n        rtl: false,\n        slide: '',\n        slidesPerRow: 1,\n        slidesToShow: 1,\n        slidesToScroll: 1,\n        speed: 500,\n        swipe: true,\n        swipeToSlide: false,\n        touchMove: true,\n        touchThreshold: 5,\n        useCSS: true,\n        useTransform: true,\n        variableWidth: false,\n        vertical: false,\n        verticalSwiping: false,\n        waitForAnimate: true,\n        zIndex: 1000\n      };\n      _.initials = {\n        animating: false,\n        dragging: false,\n        autoPlayTimer: null,\n        currentDirection: 0,\n        currentLeft: null,\n        currentSlide: 0,\n        direction: 1,\n        $dots: null,\n        listWidth: null,\n        listHeight: null,\n        loadIndex: 0,\n        $nextArrow: null,\n        $prevArrow: null,\n        scrolling: false,\n        slideCount: null,\n        slideWidth: null,\n        $slideTrack: null,\n        $slides: null,\n        sliding: false,\n        slideOffset: 0,\n        swipeLeft: null,\n        swiping: false,\n        $list: null,\n        touchObject: {},\n        transformsEnabled: false,\n        unslicked: false\n      };\n      $.extend(_, _.initials);\n      _.activeBreakpoint = null;\n      _.animType = null;\n      _.animProp = null;\n      _.breakpoints = [];\n      _.breakpointSettings = [];\n      _.cssTransitions = false;\n      _.focussed = false;\n      _.interrupted = false;\n      _.hidden = 'hidden';\n      _.paused = true;\n      _.positionProp = null;\n      _.respondTo = null;\n      _.rowCount = 1;\n      _.shouldClick = true;\n      _.$slider = $(element);\n      _.$slidesCache = null;\n      _.transformType = null;\n      _.transitionType = null;\n      _.visibilityChange = 'visibilitychange';\n      _.windowWidth = 0;\n      _.windowTimer = null;\n      dataSettings = $(element).data('slick') || {};\n      _.options = $.extend({}, _.defaults, settings, dataSettings);\n      _.currentSlide = _.options.initialSlide;\n      _.originalSettings = _.options;\n\n      if (typeof document.mozHidden !== 'undefined') {\n        _.hidden = 'mozHidden';\n        _.visibilityChange = 'mozvisibilitychange';\n      } else if (typeof document.webkitHidden !== 'undefined') {\n        _.hidden = 'webkitHidden';\n        _.visibilityChange = 'webkitvisibilitychange';\n      }\n\n      _.autoPlay = $.proxy(_.autoPlay, _);\n      _.autoPlayClear = $.proxy(_.autoPlayClear, _);\n      _.autoPlayIterator = $.proxy(_.autoPlayIterator, _);\n      _.changeSlide = $.proxy(_.changeSlide, _);\n      _.clickHandler = $.proxy(_.clickHandler, _);\n      _.selectHandler = $.proxy(_.selectHandler, _);\n      _.setPosition = $.proxy(_.setPosition, _);\n      _.swipeHandler = $.proxy(_.swipeHandler, _);\n      _.dragHandler = $.proxy(_.dragHandler, _);\n      _.keyHandler = $.proxy(_.keyHandler, _);\n      _.instanceUid = instanceUid++; // A simple way to check for HTML strings\n      // Strict HTML recognition (must start with <)\n      // Extracted from jQuery v1.11 source\n\n      _.htmlExpr = /^(?:\\s*(<[\\w\\W]+>)[^>]*)$/;\n\n      _.registerBreakpoints();\n\n      _.init(true);\n    }\n\n    return Slick;\n  }();\n\n  Slick.prototype.activateADA = function () {\n    var _ = this;\n\n    _.$slideTrack.find('.slick-active').attr({\n      'aria-hidden': 'false'\n    }).find('a, input, button, select').attr({\n      'tabindex': '0'\n    });\n  };\n\n  Slick.prototype.addSlide = Slick.prototype.slickAdd = function (markup, index, addBefore) {\n    var _ = this;\n\n    if (typeof index === 'boolean') {\n      addBefore = index;\n      index = null;\n    } else if (index < 0 || index >= _.slideCount) {\n      return false;\n    }\n\n    _.unload();\n\n    if (typeof index === 'number') {\n      if (index === 0 && _.$slides.length === 0) {\n        $(markup).appendTo(_.$slideTrack);\n      } else if (addBefore) {\n        $(markup).insertBefore(_.$slides.eq(index));\n      } else {\n        $(markup).insertAfter(_.$slides.eq(index));\n      }\n    } else {\n      if (addBefore === true) {\n        $(markup).prependTo(_.$slideTrack);\n      } else {\n        $(markup).appendTo(_.$slideTrack);\n      }\n    }\n\n    _.$slides = _.$slideTrack.children(this.options.slide);\n\n    _.$slideTrack.children(this.options.slide).detach();\n\n    _.$slideTrack.append(_.$slides);\n\n    _.$slides.each(function (index, element) {\n      $(element).attr('data-slick-index', index);\n    });\n\n    _.$slidesCache = _.$slides;\n\n    _.reinit();\n  };\n\n  Slick.prototype.animateHeight = function () {\n    var _ = this;\n\n    if (_.options.slidesToShow === 1 && _.options.adaptiveHeight === true && _.options.vertical === false) {\n      var targetHeight = _.$slides.eq(_.currentSlide).outerHeight(true);\n\n      _.$list.animate({\n        height: targetHeight\n      }, _.options.speed);\n    }\n  };\n\n  Slick.prototype.animateSlide = function (targetLeft, callback) {\n    var animProps = {},\n        _ = this;\n\n    _.animateHeight();\n\n    if (_.options.rtl === true && _.options.vertical === false) {\n      targetLeft = -targetLeft;\n    }\n\n    if (_.transformsEnabled === false) {\n      if (_.options.vertical === false) {\n        _.$slideTrack.animate({\n          left: targetLeft\n        }, _.options.speed, _.options.easing, callback);\n      } else {\n        _.$slideTrack.animate({\n          top: targetLeft\n        }, _.options.speed, _.options.easing, callback);\n      }\n    } else {\n      if (_.cssTransitions === false) {\n        if (_.options.rtl === true) {\n          _.currentLeft = -_.currentLeft;\n        }\n\n        $({\n          animStart: _.currentLeft\n        }).animate({\n          animStart: targetLeft\n        }, {\n          duration: _.options.speed,\n          easing: _.options.easing,\n          step: function step(now) {\n            now = Math.ceil(now);\n\n            if (_.options.vertical === false) {\n              animProps[_.animType] = 'translate(' + now + 'px, 0px)';\n\n              _.$slideTrack.css(animProps);\n            } else {\n              animProps[_.animType] = 'translate(0px,' + now + 'px)';\n\n              _.$slideTrack.css(animProps);\n            }\n          },\n          complete: function complete() {\n            if (callback) {\n              callback.call();\n            }\n          }\n        });\n      } else {\n        _.applyTransition();\n\n        targetLeft = Math.ceil(targetLeft);\n\n        if (_.options.vertical === false) {\n          animProps[_.animType] = 'translate3d(' + targetLeft + 'px, 0px, 0px)';\n        } else {\n          animProps[_.animType] = 'translate3d(0px,' + targetLeft + 'px, 0px)';\n        }\n\n        _.$slideTrack.css(animProps);\n\n        if (callback) {\n          setTimeout(function () {\n            _.disableTransition();\n\n            callback.call();\n          }, _.options.speed);\n        }\n      }\n    }\n  };\n\n  Slick.prototype.getNavTarget = function () {\n    var _ = this,\n        asNavFor = _.options.asNavFor;\n\n    if (asNavFor && asNavFor !== null) {\n      asNavFor = $(asNavFor).not(_.$slider);\n    }\n\n    return asNavFor;\n  };\n\n  Slick.prototype.asNavFor = function (index) {\n    var _ = this,\n        asNavFor = _.getNavTarget();\n\n    if (asNavFor !== null && _typeof(asNavFor) === 'object') {\n      asNavFor.each(function () {\n        var target = $(this).slick('getSlick');\n\n        if (!target.unslicked) {\n          target.slideHandler(index, true);\n        }\n      });\n    }\n  };\n\n  Slick.prototype.applyTransition = function (slide) {\n    var _ = this,\n        transition = {};\n\n    if (_.options.fade === false) {\n      transition[_.transitionType] = _.transformType + ' ' + _.options.speed + 'ms ' + _.options.cssEase;\n    } else {\n      transition[_.transitionType] = 'opacity ' + _.options.speed + 'ms ' + _.options.cssEase;\n    }\n\n    if (_.options.fade === false) {\n      _.$slideTrack.css(transition);\n    } else {\n      _.$slides.eq(slide).css(transition);\n    }\n  };\n\n  Slick.prototype.autoPlay = function () {\n    var _ = this;\n\n    _.autoPlayClear();\n\n    if (_.slideCount > _.options.slidesToShow) {\n      _.autoPlayTimer = setInterval(_.autoPlayIterator, _.options.autoplaySpeed);\n    }\n  };\n\n  Slick.prototype.autoPlayClear = function () {\n    var _ = this;\n\n    if (_.autoPlayTimer) {\n      clearInterval(_.autoPlayTimer);\n    }\n  };\n\n  Slick.prototype.autoPlayIterator = function () {\n    var _ = this,\n        slideTo = _.currentSlide + _.options.slidesToScroll;\n\n    if (!_.paused && !_.interrupted && !_.focussed) {\n      if (_.options.infinite === false) {\n        if (_.direction === 1 && _.currentSlide + 1 === _.slideCount - 1) {\n          _.direction = 0;\n        } else if (_.direction === 0) {\n          slideTo = _.currentSlide - _.options.slidesToScroll;\n\n          if (_.currentSlide - 1 === 0) {\n            _.direction = 1;\n          }\n        }\n      }\n\n      _.slideHandler(slideTo);\n    }\n  };\n\n  Slick.prototype.buildArrows = function () {\n    var _ = this;\n\n    if (_.options.arrows === true) {\n      _.$prevArrow = $(_.options.prevArrow).addClass('slick-arrow');\n      _.$nextArrow = $(_.options.nextArrow).addClass('slick-arrow');\n\n      if (_.slideCount > _.options.slidesToShow) {\n        _.$prevArrow.removeClass('slick-hidden').removeAttr('aria-hidden tabindex');\n\n        _.$nextArrow.removeClass('slick-hidden').removeAttr('aria-hidden tabindex');\n\n        if (_.htmlExpr.test(_.options.prevArrow)) {\n          _.$prevArrow.prependTo(_.options.appendArrows);\n        }\n\n        if (_.htmlExpr.test(_.options.nextArrow)) {\n          _.$nextArrow.appendTo(_.options.appendArrows);\n        }\n\n        if (_.options.infinite !== true) {\n          _.$prevArrow.addClass('slick-disabled').attr('aria-disabled', 'true');\n        }\n      } else {\n        _.$prevArrow.add(_.$nextArrow).addClass('slick-hidden').attr({\n          'aria-disabled': 'true',\n          'tabindex': '-1'\n        });\n      }\n    }\n  };\n\n  Slick.prototype.buildDots = function () {\n    var _ = this,\n        i,\n        dot;\n\n    if (_.options.dots === true && _.slideCount > _.options.slidesToShow) {\n      _.$slider.addClass('slick-dotted');\n\n      dot = $('<ul />').addClass(_.options.dotsClass);\n\n      for (i = 0; i <= _.getDotCount(); i += 1) {\n        dot.append($('<li />').append(_.options.customPaging.call(this, _, i)));\n      }\n\n      _.$dots = dot.appendTo(_.options.appendDots);\n\n      _.$dots.find('li').first().addClass('slick-active');\n    }\n  };\n\n  Slick.prototype.buildOut = function () {\n    var _ = this;\n\n    _.$slides = _.$slider.children(_.options.slide + ':not(.slick-cloned)').addClass('slick-slide');\n    _.slideCount = _.$slides.length;\n\n    _.$slides.each(function (index, element) {\n      $(element).attr('data-slick-index', index).data('originalStyling', $(element).attr('style') || '');\n    });\n\n    _.$slider.addClass('slick-slider');\n\n    _.$slideTrack = _.slideCount === 0 ? $('<div class=\"slick-track\"/>').appendTo(_.$slider) : _.$slides.wrapAll('<div class=\"slick-track\"/>').parent();\n    _.$list = _.$slideTrack.wrap('<div class=\"slick-list\"/>').parent();\n\n    _.$slideTrack.css('opacity', 0);\n\n    if (_.options.centerMode === true || _.options.swipeToSlide === true) {\n      _.options.slidesToScroll = 1;\n    }\n\n    $('img[data-lazy]', _.$slider).not('[src]').addClass('slick-loading');\n\n    _.setupInfinite();\n\n    _.buildArrows();\n\n    _.buildDots();\n\n    _.updateDots();\n\n    _.setSlideClasses(typeof _.currentSlide === 'number' ? _.currentSlide : 0);\n\n    if (_.options.draggable === true) {\n      _.$list.addClass('draggable');\n    }\n  };\n\n  Slick.prototype.buildRows = function () {\n    var _ = this,\n        a,\n        b,\n        c,\n        newSlides,\n        numOfSlides,\n        originalSlides,\n        slidesPerSection;\n\n    newSlides = document.createDocumentFragment();\n    originalSlides = _.$slider.children();\n\n    if (_.options.rows > 0) {\n      slidesPerSection = _.options.slidesPerRow * _.options.rows;\n      numOfSlides = Math.ceil(originalSlides.length / slidesPerSection);\n\n      for (a = 0; a < numOfSlides; a++) {\n        var slide = document.createElement('div');\n\n        for (b = 0; b < _.options.rows; b++) {\n          var row = document.createElement('div');\n\n          for (c = 0; c < _.options.slidesPerRow; c++) {\n            var target = a * slidesPerSection + (b * _.options.slidesPerRow + c);\n\n            if (originalSlides.get(target)) {\n              row.appendChild(originalSlides.get(target));\n            }\n          }\n\n          slide.appendChild(row);\n        }\n\n        newSlides.appendChild(slide);\n      }\n\n      _.$slider.empty().append(newSlides);\n\n      _.$slider.children().children().children().css({\n        'width': 100 / _.options.slidesPerRow + '%',\n        'display': 'inline-block'\n      });\n    }\n  };\n\n  Slick.prototype.checkResponsive = function (initial, forceUpdate) {\n    var _ = this,\n        breakpoint,\n        targetBreakpoint,\n        respondToWidth,\n        triggerBreakpoint = false;\n\n    var sliderWidth = _.$slider.width();\n\n    var windowWidth = window.innerWidth || $(window).width();\n\n    if (_.respondTo === 'window') {\n      respondToWidth = windowWidth;\n    } else if (_.respondTo === 'slider') {\n      respondToWidth = sliderWidth;\n    } else if (_.respondTo === 'min') {\n      respondToWidth = Math.min(windowWidth, sliderWidth);\n    }\n\n    if (_.options.responsive && _.options.responsive.length && _.options.responsive !== null) {\n      targetBreakpoint = null;\n\n      for (breakpoint in _.breakpoints) {\n        if (_.breakpoints.hasOwnProperty(breakpoint)) {\n          if (_.originalSettings.mobileFirst === false) {\n            if (respondToWidth < _.breakpoints[breakpoint]) {\n              targetBreakpoint = _.breakpoints[breakpoint];\n            }\n          } else {\n            if (respondToWidth > _.breakpoints[breakpoint]) {\n              targetBreakpoint = _.breakpoints[breakpoint];\n            }\n          }\n        }\n      }\n\n      if (targetBreakpoint !== null) {\n        if (_.activeBreakpoint !== null) {\n          if (targetBreakpoint !== _.activeBreakpoint || forceUpdate) {\n            _.activeBreakpoint = targetBreakpoint;\n\n            if (_.breakpointSettings[targetBreakpoint] === 'unslick') {\n              _.unslick(targetBreakpoint);\n            } else {\n              _.options = $.extend({}, _.originalSettings, _.breakpointSettings[targetBreakpoint]);\n\n              if (initial === true) {\n                _.currentSlide = _.options.initialSlide;\n              }\n\n              _.refresh(initial);\n            }\n\n            triggerBreakpoint = targetBreakpoint;\n          }\n        } else {\n          _.activeBreakpoint = targetBreakpoint;\n\n          if (_.breakpointSettings[targetBreakpoint] === 'unslick') {\n            _.unslick(targetBreakpoint);\n          } else {\n            _.options = $.extend({}, _.originalSettings, _.breakpointSettings[targetBreakpoint]);\n\n            if (initial === true) {\n              _.currentSlide = _.options.initialSlide;\n            }\n\n            _.refresh(initial);\n          }\n\n          triggerBreakpoint = targetBreakpoint;\n        }\n      } else {\n        if (_.activeBreakpoint !== null) {\n          _.activeBreakpoint = null;\n          _.options = _.originalSettings;\n\n          if (initial === true) {\n            _.currentSlide = _.options.initialSlide;\n          }\n\n          _.refresh(initial);\n\n          triggerBreakpoint = targetBreakpoint;\n        }\n      } // only trigger breakpoints during an actual break. not on initialize.\n\n\n      if (!initial && triggerBreakpoint !== false) {\n        _.$slider.trigger('breakpoint', [_, triggerBreakpoint]);\n      }\n    }\n  };\n\n  Slick.prototype.changeSlide = function (event, dontAnimate) {\n    var _ = this,\n        $target = $(event.currentTarget),\n        indexOffset,\n        slideOffset,\n        unevenOffset; // If target is a link, prevent default action.\n\n\n    if ($target.is('a')) {\n      event.preventDefault();\n    } // If target is not the <li> element (ie: a child), find the <li>.\n\n\n    if (!$target.is('li')) {\n      $target = $target.closest('li');\n    }\n\n    unevenOffset = _.slideCount % _.options.slidesToScroll !== 0;\n    indexOffset = unevenOffset ? 0 : (_.slideCount - _.currentSlide) % _.options.slidesToScroll;\n\n    switch (event.data.message) {\n      case 'previous':\n        slideOffset = indexOffset === 0 ? _.options.slidesToScroll : _.options.slidesToShow - indexOffset;\n\n        if (_.slideCount > _.options.slidesToShow) {\n          _.slideHandler(_.currentSlide - slideOffset, false, dontAnimate);\n        }\n\n        break;\n\n      case 'next':\n        slideOffset = indexOffset === 0 ? _.options.slidesToScroll : indexOffset;\n\n        if (_.slideCount > _.options.slidesToShow) {\n          _.slideHandler(_.currentSlide + slideOffset, false, dontAnimate);\n        }\n\n        break;\n\n      case 'index':\n        var index = event.data.index === 0 ? 0 : event.data.index || $target.index() * _.options.slidesToScroll;\n\n        _.slideHandler(_.checkNavigable(index), false, dontAnimate);\n\n        $target.children().trigger('focus');\n        break;\n\n      default:\n        return;\n    }\n  };\n\n  Slick.prototype.checkNavigable = function (index) {\n    var _ = this,\n        navigables,\n        prevNavigable;\n\n    navigables = _.getNavigableIndexes();\n    prevNavigable = 0;\n\n    if (index > navigables[navigables.length - 1]) {\n      index = navigables[navigables.length - 1];\n    } else {\n      for (var n in navigables) {\n        if (index < navigables[n]) {\n          index = prevNavigable;\n          break;\n        }\n\n        prevNavigable = navigables[n];\n      }\n    }\n\n    return index;\n  };\n\n  Slick.prototype.cleanUpEvents = function () {\n    var _ = this;\n\n    if (_.options.dots && _.$dots !== null) {\n      $('li', _.$dots).off('click.slick', _.changeSlide).off('mouseenter.slick', $.proxy(_.interrupt, _, true)).off('mouseleave.slick', $.proxy(_.interrupt, _, false));\n\n      if (_.options.accessibility === true) {\n        _.$dots.off('keydown.slick', _.keyHandler);\n      }\n    }\n\n    _.$slider.off('focus.slick blur.slick');\n\n    if (_.options.arrows === true && _.slideCount > _.options.slidesToShow) {\n      _.$prevArrow && _.$prevArrow.off('click.slick', _.changeSlide);\n      _.$nextArrow && _.$nextArrow.off('click.slick', _.changeSlide);\n\n      if (_.options.accessibility === true) {\n        _.$prevArrow && _.$prevArrow.off('keydown.slick', _.keyHandler);\n        _.$nextArrow && _.$nextArrow.off('keydown.slick', _.keyHandler);\n      }\n    }\n\n    _.$list.off('touchstart.slick mousedown.slick', _.swipeHandler);\n\n    _.$list.off('touchmove.slick mousemove.slick', _.swipeHandler);\n\n    _.$list.off('touchend.slick mouseup.slick', _.swipeHandler);\n\n    _.$list.off('touchcancel.slick mouseleave.slick', _.swipeHandler);\n\n    _.$list.off('click.slick', _.clickHandler);\n\n    $(document).off(_.visibilityChange, _.visibility);\n\n    _.cleanUpSlideEvents();\n\n    if (_.options.accessibility === true) {\n      _.$list.off('keydown.slick', _.keyHandler);\n    }\n\n    if (_.options.focusOnSelect === true) {\n      $(_.$slideTrack).children().off('click.slick', _.selectHandler);\n    }\n\n    $(window).off('orientationchange.slick.slick-' + _.instanceUid, _.orientationChange);\n    $(window).off('resize.slick.slick-' + _.instanceUid, _.resize);\n    $('[draggable!=true]', _.$slideTrack).off('dragstart', _.preventDefault);\n    $(window).off('load.slick.slick-' + _.instanceUid, _.setPosition);\n  };\n\n  Slick.prototype.cleanUpSlideEvents = function () {\n    var _ = this;\n\n    _.$list.off('mouseenter.slick', $.proxy(_.interrupt, _, true));\n\n    _.$list.off('mouseleave.slick', $.proxy(_.interrupt, _, false));\n  };\n\n  Slick.prototype.cleanUpRows = function () {\n    var _ = this,\n        originalSlides;\n\n    if (_.options.rows > 0) {\n      originalSlides = _.$slides.children().children();\n      originalSlides.removeAttr('style');\n\n      _.$slider.empty().append(originalSlides);\n    }\n  };\n\n  Slick.prototype.clickHandler = function (event) {\n    var _ = this;\n\n    if (_.shouldClick === false) {\n      event.stopImmediatePropagation();\n      event.stopPropagation();\n      event.preventDefault();\n    }\n  };\n\n  Slick.prototype.destroy = function (refresh) {\n    var _ = this;\n\n    _.autoPlayClear();\n\n    _.touchObject = {};\n\n    _.cleanUpEvents();\n\n    $('.slick-cloned', _.$slider).detach();\n\n    if (_.$dots) {\n      _.$dots.remove();\n    }\n\n    if (_.$prevArrow && _.$prevArrow.length) {\n      _.$prevArrow.removeClass('slick-disabled slick-arrow slick-hidden').removeAttr('aria-hidden aria-disabled tabindex').css('display', '');\n\n      if (_.htmlExpr.test(_.options.prevArrow)) {\n        _.$prevArrow.remove();\n      }\n    }\n\n    if (_.$nextArrow && _.$nextArrow.length) {\n      _.$nextArrow.removeClass('slick-disabled slick-arrow slick-hidden').removeAttr('aria-hidden aria-disabled tabindex').css('display', '');\n\n      if (_.htmlExpr.test(_.options.nextArrow)) {\n        _.$nextArrow.remove();\n      }\n    }\n\n    if (_.$slides) {\n      _.$slides.removeClass('slick-slide slick-active slick-center slick-visible slick-current').removeAttr('aria-hidden').removeAttr('data-slick-index').each(function () {\n        $(this).attr('style', $(this).data('originalStyling'));\n      });\n\n      _.$slideTrack.children(this.options.slide).detach();\n\n      _.$slideTrack.detach();\n\n      _.$list.detach();\n\n      _.$slider.append(_.$slides);\n    }\n\n    _.cleanUpRows();\n\n    _.$slider.removeClass('slick-slider');\n\n    _.$slider.removeClass('slick-initialized');\n\n    _.$slider.removeClass('slick-dotted');\n\n    _.unslicked = true;\n\n    if (!refresh) {\n      _.$slider.trigger('destroy', [_]);\n    }\n  };\n\n  Slick.prototype.disableTransition = function (slide) {\n    var _ = this,\n        transition = {};\n\n    transition[_.transitionType] = '';\n\n    if (_.options.fade === false) {\n      _.$slideTrack.css(transition);\n    } else {\n      _.$slides.eq(slide).css(transition);\n    }\n  };\n\n  Slick.prototype.fadeSlide = function (slideIndex, callback) {\n    var _ = this;\n\n    if (_.cssTransitions === false) {\n      _.$slides.eq(slideIndex).css({\n        zIndex: _.options.zIndex\n      });\n\n      _.$slides.eq(slideIndex).animate({\n        opacity: 1\n      }, _.options.speed, _.options.easing, callback);\n    } else {\n      _.applyTransition(slideIndex);\n\n      _.$slides.eq(slideIndex).css({\n        opacity: 1,\n        zIndex: _.options.zIndex\n      });\n\n      if (callback) {\n        setTimeout(function () {\n          _.disableTransition(slideIndex);\n\n          callback.call();\n        }, _.options.speed);\n      }\n    }\n  };\n\n  Slick.prototype.fadeSlideOut = function (slideIndex) {\n    var _ = this;\n\n    if (_.cssTransitions === false) {\n      _.$slides.eq(slideIndex).animate({\n        opacity: 0,\n        zIndex: _.options.zIndex - 2\n      }, _.options.speed, _.options.easing);\n    } else {\n      _.applyTransition(slideIndex);\n\n      _.$slides.eq(slideIndex).css({\n        opacity: 0,\n        zIndex: _.options.zIndex - 2\n      });\n    }\n  };\n\n  Slick.prototype.filterSlides = Slick.prototype.slickFilter = function (filter) {\n    var _ = this;\n\n    if (filter !== null) {\n      _.$slidesCache = _.$slides;\n\n      _.unload();\n\n      _.$slideTrack.children(this.options.slide).detach();\n\n      _.$slidesCache.filter(filter).appendTo(_.$slideTrack);\n\n      _.reinit();\n    }\n  };\n\n  Slick.prototype.focusHandler = function () {\n    var _ = this;\n\n    _.$slider.off('focus.slick blur.slick').on('focus.slick blur.slick', '*', function (event) {\n      event.stopImmediatePropagation();\n      var $sf = $(this);\n      setTimeout(function () {\n        if (_.options.pauseOnFocus) {\n          _.focussed = $sf.is(':focus');\n\n          _.autoPlay();\n        }\n      }, 0);\n    });\n  };\n\n  Slick.prototype.getCurrent = Slick.prototype.slickCurrentSlide = function () {\n    var _ = this;\n\n    return _.currentSlide;\n  };\n\n  Slick.prototype.getDotCount = function () {\n    var _ = this;\n\n    var breakPoint = 0;\n    var counter = 0;\n    var pagerQty = 0;\n\n    if (_.options.infinite === true) {\n      if (_.slideCount <= _.options.slidesToShow) {\n        ++pagerQty;\n      } else {\n        while (breakPoint < _.slideCount) {\n          ++pagerQty;\n          breakPoint = counter + _.options.slidesToScroll;\n          counter += _.options.slidesToScroll <= _.options.slidesToShow ? _.options.slidesToScroll : _.options.slidesToShow;\n        }\n      }\n    } else if (_.options.centerMode === true) {\n      pagerQty = _.slideCount;\n    } else if (!_.options.asNavFor) {\n      pagerQty = 1 + Math.ceil((_.slideCount - _.options.slidesToShow) / _.options.slidesToScroll);\n    } else {\n      while (breakPoint < _.slideCount) {\n        ++pagerQty;\n        breakPoint = counter + _.options.slidesToScroll;\n        counter += _.options.slidesToScroll <= _.options.slidesToShow ? _.options.slidesToScroll : _.options.slidesToShow;\n      }\n    }\n\n    return pagerQty - 1;\n  };\n\n  Slick.prototype.getLeft = function (slideIndex) {\n    var _ = this,\n        targetLeft,\n        verticalHeight,\n        verticalOffset = 0,\n        targetSlide,\n        coef;\n\n    _.slideOffset = 0;\n    verticalHeight = _.$slides.first().outerHeight(true);\n\n    if (_.options.infinite === true) {\n      if (_.slideCount > _.options.slidesToShow) {\n        _.slideOffset = _.slideWidth * _.options.slidesToShow * -1;\n        coef = -1;\n\n        if (_.options.vertical === true && _.options.centerMode === true) {\n          if (_.options.slidesToShow === 2) {\n            coef = -1.5;\n          } else if (_.options.slidesToShow === 1) {\n            coef = -2;\n          }\n        }\n\n        verticalOffset = verticalHeight * _.options.slidesToShow * coef;\n      }\n\n      if (_.slideCount % _.options.slidesToScroll !== 0) {\n        if (slideIndex + _.options.slidesToScroll > _.slideCount && _.slideCount > _.options.slidesToShow) {\n          if (slideIndex > _.slideCount) {\n            _.slideOffset = (_.options.slidesToShow - (slideIndex - _.slideCount)) * _.slideWidth * -1;\n            verticalOffset = (_.options.slidesToShow - (slideIndex - _.slideCount)) * verticalHeight * -1;\n          } else {\n            _.slideOffset = _.slideCount % _.options.slidesToScroll * _.slideWidth * -1;\n            verticalOffset = _.slideCount % _.options.slidesToScroll * verticalHeight * -1;\n          }\n        }\n      }\n    } else {\n      if (slideIndex + _.options.slidesToShow > _.slideCount) {\n        _.slideOffset = (slideIndex + _.options.slidesToShow - _.slideCount) * _.slideWidth;\n        verticalOffset = (slideIndex + _.options.slidesToShow - _.slideCount) * verticalHeight;\n      }\n    }\n\n    if (_.slideCount <= _.options.slidesToShow) {\n      _.slideOffset = 0;\n      verticalOffset = 0;\n    }\n\n    if (_.options.centerMode === true && _.slideCount <= _.options.slidesToShow) {\n      _.slideOffset = _.slideWidth * Math.floor(_.options.slidesToShow) / 2 - _.slideWidth * _.slideCount / 2;\n    } else if (_.options.centerMode === true && _.options.infinite === true) {\n      _.slideOffset += _.slideWidth * Math.floor(_.options.slidesToShow / 2) - _.slideWidth;\n    } else if (_.options.centerMode === true) {\n      _.slideOffset = 0;\n      _.slideOffset += _.slideWidth * Math.floor(_.options.slidesToShow / 2);\n    }\n\n    if (_.options.vertical === false) {\n      targetLeft = slideIndex * _.slideWidth * -1 + _.slideOffset;\n    } else {\n      targetLeft = slideIndex * verticalHeight * -1 + verticalOffset;\n    }\n\n    if (_.options.variableWidth === true) {\n      if (_.slideCount <= _.options.slidesToShow || _.options.infinite === false) {\n        targetSlide = _.$slideTrack.children('.slick-slide').eq(slideIndex);\n      } else {\n        targetSlide = _.$slideTrack.children('.slick-slide').eq(slideIndex + _.options.slidesToShow);\n      }\n\n      if (_.options.rtl === true) {\n        if (targetSlide[0]) {\n          targetLeft = (_.$slideTrack.width() - targetSlide[0].offsetLeft - targetSlide.width()) * -1;\n        } else {\n          targetLeft = 0;\n        }\n      } else {\n        targetLeft = targetSlide[0] ? targetSlide[0].offsetLeft * -1 : 0;\n      }\n\n      if (_.options.centerMode === true) {\n        if (_.slideCount <= _.options.slidesToShow || _.options.infinite === false) {\n          targetSlide = _.$slideTrack.children('.slick-slide').eq(slideIndex);\n        } else {\n          targetSlide = _.$slideTrack.children('.slick-slide').eq(slideIndex + _.options.slidesToShow + 1);\n        }\n\n        if (_.options.rtl === true) {\n          if (targetSlide[0]) {\n            targetLeft = (_.$slideTrack.width() - targetSlide[0].offsetLeft - targetSlide.width()) * -1;\n          } else {\n            targetLeft = 0;\n          }\n        } else {\n          targetLeft = targetSlide[0] ? targetSlide[0].offsetLeft * -1 : 0;\n        }\n\n        targetLeft += (_.$list.width() - targetSlide.outerWidth()) / 2;\n      }\n    }\n\n    return targetLeft;\n  };\n\n  Slick.prototype.getOption = Slick.prototype.slickGetOption = function (option) {\n    var _ = this;\n\n    return _.options[option];\n  };\n\n  Slick.prototype.getNavigableIndexes = function () {\n    var _ = this,\n        breakPoint = 0,\n        counter = 0,\n        indexes = [],\n        max;\n\n    if (_.options.infinite === false) {\n      max = _.slideCount;\n    } else {\n      breakPoint = _.options.slidesToScroll * -1;\n      counter = _.options.slidesToScroll * -1;\n      max = _.slideCount * 2;\n    }\n\n    while (breakPoint < max) {\n      indexes.push(breakPoint);\n      breakPoint = counter + _.options.slidesToScroll;\n      counter += _.options.slidesToScroll <= _.options.slidesToShow ? _.options.slidesToScroll : _.options.slidesToShow;\n    }\n\n    return indexes;\n  };\n\n  Slick.prototype.getSlick = function () {\n    return this;\n  };\n\n  Slick.prototype.getSlideCount = function () {\n    var _ = this,\n        slidesTraversed,\n        swipedSlide,\n        centerOffset;\n\n    centerOffset = _.options.centerMode === true ? _.slideWidth * Math.floor(_.options.slidesToShow / 2) : 0;\n\n    if (_.options.swipeToSlide === true) {\n      _.$slideTrack.find('.slick-slide').each(function (index, slide) {\n        if (slide.offsetLeft - centerOffset + $(slide).outerWidth() / 2 > _.swipeLeft * -1) {\n          swipedSlide = slide;\n          return false;\n        }\n      });\n\n      slidesTraversed = Math.abs($(swipedSlide).attr('data-slick-index') - _.currentSlide) || 1;\n      return slidesTraversed;\n    } else {\n      return _.options.slidesToScroll;\n    }\n  };\n\n  Slick.prototype.goTo = Slick.prototype.slickGoTo = function (slide, dontAnimate) {\n    var _ = this;\n\n    _.changeSlide({\n      data: {\n        message: 'index',\n        index: parseInt(slide)\n      }\n    }, dontAnimate);\n  };\n\n  Slick.prototype.init = function (creation) {\n    var _ = this;\n\n    if (!$(_.$slider).hasClass('slick-initialized')) {\n      $(_.$slider).addClass('slick-initialized');\n\n      _.buildRows();\n\n      _.buildOut();\n\n      _.setProps();\n\n      _.startLoad();\n\n      _.loadSlider();\n\n      _.initializeEvents();\n\n      _.updateArrows();\n\n      _.updateDots();\n\n      _.checkResponsive(true);\n\n      _.focusHandler();\n    }\n\n    if (creation) {\n      _.$slider.trigger('init', [_]);\n    }\n\n    if (_.options.accessibility === true) {\n      _.initADA();\n    }\n\n    if (_.options.autoplay) {\n      _.paused = false;\n\n      _.autoPlay();\n    }\n  };\n\n  Slick.prototype.initADA = function () {\n    var _ = this,\n        numDotGroups = Math.ceil(_.slideCount / _.options.slidesToShow),\n        tabControlIndexes = _.getNavigableIndexes().filter(function (val) {\n      return val >= 0 && val < _.slideCount;\n    });\n\n    _.$slides.add(_.$slideTrack.find('.slick-cloned')).attr({\n      'aria-hidden': 'true',\n      'tabindex': '-1'\n    }).find('a, input, button, select').attr({\n      'tabindex': '-1'\n    });\n\n    if (_.$dots !== null) {\n      _.$slides.not(_.$slideTrack.find('.slick-cloned')).each(function (i) {\n        var slideControlIndex = tabControlIndexes.indexOf(i);\n        $(this).attr({\n          'role': 'tabpanel',\n          'id': 'slick-slide' + _.instanceUid + i,\n          'tabindex': -1\n        });\n\n        if (slideControlIndex !== -1) {\n          var ariaButtonControl = 'slick-slide-control' + _.instanceUid + slideControlIndex;\n\n          if ($('#' + ariaButtonControl).length) {\n            $(this).attr({\n              'aria-describedby': ariaButtonControl\n            });\n          }\n        }\n      });\n\n      _.$dots.attr('role', 'tablist').find('li').each(function (i) {\n        var mappedSlideIndex = tabControlIndexes[i];\n        $(this).attr({\n          'role': 'presentation'\n        });\n        $(this).find('button').first().attr({\n          'role': 'tab',\n          'id': 'slick-slide-control' + _.instanceUid + i,\n          'aria-controls': 'slick-slide' + _.instanceUid + mappedSlideIndex,\n          'aria-label': i + 1 + ' of ' + numDotGroups,\n          'aria-selected': null,\n          'tabindex': '-1'\n        });\n      }).eq(_.currentSlide).find('button').attr({\n        'aria-selected': 'true',\n        'tabindex': '0'\n      }).end();\n    }\n\n    for (var i = _.currentSlide, max = i + _.options.slidesToShow; i < max; i++) {\n      if (_.options.focusOnChange) {\n        _.$slides.eq(i).attr({\n          'tabindex': '0'\n        });\n      } else {\n        _.$slides.eq(i).removeAttr('tabindex');\n      }\n    }\n\n    _.activateADA();\n  };\n\n  Slick.prototype.initArrowEvents = function () {\n    var _ = this;\n\n    if (_.options.arrows === true && _.slideCount > _.options.slidesToShow) {\n      _.$prevArrow.off('click.slick').on('click.slick', {\n        message: 'previous'\n      }, _.changeSlide);\n\n      _.$nextArrow.off('click.slick').on('click.slick', {\n        message: 'next'\n      }, _.changeSlide);\n\n      if (_.options.accessibility === true) {\n        _.$prevArrow.on('keydown.slick', _.keyHandler);\n\n        _.$nextArrow.on('keydown.slick', _.keyHandler);\n      }\n    }\n  };\n\n  Slick.prototype.initDotEvents = function () {\n    var _ = this;\n\n    if (_.options.dots === true && _.slideCount > _.options.slidesToShow) {\n      $('li', _.$dots).on('click.slick', {\n        message: 'index'\n      }, _.changeSlide);\n\n      if (_.options.accessibility === true) {\n        _.$dots.on('keydown.slick', _.keyHandler);\n      }\n    }\n\n    if (_.options.dots === true && _.options.pauseOnDotsHover === true && _.slideCount > _.options.slidesToShow) {\n      $('li', _.$dots).on('mouseenter.slick', $.proxy(_.interrupt, _, true)).on('mouseleave.slick', $.proxy(_.interrupt, _, false));\n    }\n  };\n\n  Slick.prototype.initSlideEvents = function () {\n    var _ = this;\n\n    if (_.options.pauseOnHover) {\n      _.$list.on('mouseenter.slick', $.proxy(_.interrupt, _, true));\n\n      _.$list.on('mouseleave.slick', $.proxy(_.interrupt, _, false));\n    }\n  };\n\n  Slick.prototype.initializeEvents = function () {\n    var _ = this;\n\n    _.initArrowEvents();\n\n    _.initDotEvents();\n\n    _.initSlideEvents();\n\n    _.$list.on('touchstart.slick mousedown.slick', {\n      action: 'start'\n    }, _.swipeHandler);\n\n    _.$list.on('touchmove.slick mousemove.slick', {\n      action: 'move'\n    }, _.swipeHandler);\n\n    _.$list.on('touchend.slick mouseup.slick', {\n      action: 'end'\n    }, _.swipeHandler);\n\n    _.$list.on('touchcancel.slick mouseleave.slick', {\n      action: 'end'\n    }, _.swipeHandler);\n\n    _.$list.on('click.slick', _.clickHandler);\n\n    $(document).on(_.visibilityChange, $.proxy(_.visibility, _));\n\n    if (_.options.accessibility === true) {\n      _.$list.on('keydown.slick', _.keyHandler);\n    }\n\n    if (_.options.focusOnSelect === true) {\n      $(_.$slideTrack).children().on('click.slick', _.selectHandler);\n    }\n\n    $(window).on('orientationchange.slick.slick-' + _.instanceUid, $.proxy(_.orientationChange, _));\n    $(window).on('resize.slick.slick-' + _.instanceUid, $.proxy(_.resize, _));\n    $('[draggable!=true]', _.$slideTrack).on('dragstart', _.preventDefault);\n    $(window).on('load.slick.slick-' + _.instanceUid, _.setPosition);\n    $(_.setPosition);\n  };\n\n  Slick.prototype.initUI = function () {\n    var _ = this;\n\n    if (_.options.arrows === true && _.slideCount > _.options.slidesToShow) {\n      _.$prevArrow.show();\n\n      _.$nextArrow.show();\n    }\n\n    if (_.options.dots === true && _.slideCount > _.options.slidesToShow) {\n      _.$dots.show();\n    }\n  };\n\n  Slick.prototype.keyHandler = function (event) {\n    var _ = this; //Dont slide if the cursor is inside the form fields and arrow keys are pressed\n\n\n    if (!event.target.tagName.match('TEXTAREA|INPUT|SELECT')) {\n      if (event.keyCode === 37 && _.options.accessibility === true) {\n        _.changeSlide({\n          data: {\n            message: _.options.rtl === true ? 'next' : 'previous'\n          }\n        });\n      } else if (event.keyCode === 39 && _.options.accessibility === true) {\n        _.changeSlide({\n          data: {\n            message: _.options.rtl === true ? 'previous' : 'next'\n          }\n        });\n      }\n    }\n  };\n\n  Slick.prototype.lazyLoad = function () {\n    var _ = this,\n        loadRange,\n        cloneRange,\n        rangeStart,\n        rangeEnd;\n\n    function loadImages(imagesScope) {\n      $('img[data-lazy]', imagesScope).each(function () {\n        var image = $(this),\n            imageSource = $(this).attr('data-lazy'),\n            imageSrcSet = $(this).attr('data-srcset'),\n            imageSizes = $(this).attr('data-sizes') || _.$slider.attr('data-sizes'),\n            imageToLoad = document.createElement('img');\n\n        imageToLoad.onload = function () {\n          image.animate({\n            opacity: 0\n          }, 100, function () {\n            if (imageSrcSet) {\n              image.attr('srcset', imageSrcSet);\n\n              if (imageSizes) {\n                image.attr('sizes', imageSizes);\n              }\n            }\n\n            image.attr('src', imageSource).animate({\n              opacity: 1\n            }, 200, function () {\n              image.removeAttr('data-lazy data-srcset data-sizes').removeClass('slick-loading');\n            });\n\n            _.$slider.trigger('lazyLoaded', [_, image, imageSource]);\n          });\n        };\n\n        imageToLoad.onerror = function () {\n          image.removeAttr('data-lazy').removeClass('slick-loading').addClass('slick-lazyload-error');\n\n          _.$slider.trigger('lazyLoadError', [_, image, imageSource]);\n        };\n\n        imageToLoad.src = imageSource;\n      });\n    }\n\n    if (_.options.centerMode === true) {\n      if (_.options.infinite === true) {\n        rangeStart = _.currentSlide + (_.options.slidesToShow / 2 + 1);\n        rangeEnd = rangeStart + _.options.slidesToShow + 2;\n      } else {\n        rangeStart = Math.max(0, _.currentSlide - (_.options.slidesToShow / 2 + 1));\n        rangeEnd = 2 + (_.options.slidesToShow / 2 + 1) + _.currentSlide;\n      }\n    } else {\n      rangeStart = _.options.infinite ? _.options.slidesToShow + _.currentSlide : _.currentSlide;\n      rangeEnd = Math.ceil(rangeStart + _.options.slidesToShow);\n\n      if (_.options.fade === true) {\n        if (rangeStart > 0) rangeStart--;\n        if (rangeEnd <= _.slideCount) rangeEnd++;\n      }\n    }\n\n    loadRange = _.$slider.find('.slick-slide').slice(rangeStart, rangeEnd);\n\n    if (_.options.lazyLoad === 'anticipated') {\n      var prevSlide = rangeStart - 1,\n          nextSlide = rangeEnd,\n          $slides = _.$slider.find('.slick-slide');\n\n      for (var i = 0; i < _.options.slidesToScroll; i++) {\n        if (prevSlide < 0) prevSlide = _.slideCount - 1;\n        loadRange = loadRange.add($slides.eq(prevSlide));\n        loadRange = loadRange.add($slides.eq(nextSlide));\n        prevSlide--;\n        nextSlide++;\n      }\n    }\n\n    loadImages(loadRange);\n\n    if (_.slideCount <= _.options.slidesToShow) {\n      cloneRange = _.$slider.find('.slick-slide');\n      loadImages(cloneRange);\n    } else if (_.currentSlide >= _.slideCount - _.options.slidesToShow) {\n      cloneRange = _.$slider.find('.slick-cloned').slice(0, _.options.slidesToShow);\n      loadImages(cloneRange);\n    } else if (_.currentSlide === 0) {\n      cloneRange = _.$slider.find('.slick-cloned').slice(_.options.slidesToShow * -1);\n      loadImages(cloneRange);\n    }\n  };\n\n  Slick.prototype.loadSlider = function () {\n    var _ = this;\n\n    _.setPosition();\n\n    _.$slideTrack.css({\n      opacity: 1\n    });\n\n    _.$slider.removeClass('slick-loading');\n\n    _.initUI();\n\n    if (_.options.lazyLoad === 'progressive') {\n      _.progressiveLazyLoad();\n    }\n  };\n\n  Slick.prototype.next = Slick.prototype.slickNext = function () {\n    var _ = this;\n\n    _.changeSlide({\n      data: {\n        message: 'next'\n      }\n    });\n  };\n\n  Slick.prototype.orientationChange = function () {\n    var _ = this;\n\n    _.checkResponsive();\n\n    _.setPosition();\n  };\n\n  Slick.prototype.pause = Slick.prototype.slickPause = function () {\n    var _ = this;\n\n    _.autoPlayClear();\n\n    _.paused = true;\n  };\n\n  Slick.prototype.play = Slick.prototype.slickPlay = function () {\n    var _ = this;\n\n    _.autoPlay();\n\n    _.options.autoplay = true;\n    _.paused = false;\n    _.focussed = false;\n    _.interrupted = false;\n  };\n\n  Slick.prototype.postSlide = function (index) {\n    var _ = this;\n\n    if (!_.unslicked) {\n      _.$slider.trigger('afterChange', [_, index]);\n\n      _.animating = false;\n\n      if (_.slideCount > _.options.slidesToShow) {\n        _.setPosition();\n      }\n\n      _.swipeLeft = null;\n\n      if (_.options.autoplay) {\n        _.autoPlay();\n      }\n\n      if (_.options.accessibility === true) {\n        _.initADA();\n\n        if (_.options.focusOnChange) {\n          var $currentSlide = $(_.$slides.get(_.currentSlide));\n          $currentSlide.attr('tabindex', 0).focus();\n        }\n      }\n    }\n  };\n\n  Slick.prototype.prev = Slick.prototype.slickPrev = function () {\n    var _ = this;\n\n    _.changeSlide({\n      data: {\n        message: 'previous'\n      }\n    });\n  };\n\n  Slick.prototype.preventDefault = function (event) {\n    event.preventDefault();\n  };\n\n  Slick.prototype.progressiveLazyLoad = function (tryCount) {\n    tryCount = tryCount || 1;\n\n    var _ = this,\n        $imgsToLoad = $('img[data-lazy]', _.$slider),\n        image,\n        imageSource,\n        imageSrcSet,\n        imageSizes,\n        imageToLoad;\n\n    if ($imgsToLoad.length) {\n      image = $imgsToLoad.first();\n      imageSource = image.attr('data-lazy');\n      imageSrcSet = image.attr('data-srcset');\n      imageSizes = image.attr('data-sizes') || _.$slider.attr('data-sizes');\n      imageToLoad = document.createElement('img');\n\n      imageToLoad.onload = function () {\n        if (imageSrcSet) {\n          image.attr('srcset', imageSrcSet);\n\n          if (imageSizes) {\n            image.attr('sizes', imageSizes);\n          }\n        }\n\n        image.attr('src', imageSource).removeAttr('data-lazy data-srcset data-sizes').removeClass('slick-loading');\n\n        if (_.options.adaptiveHeight === true) {\n          _.setPosition();\n        }\n\n        _.$slider.trigger('lazyLoaded', [_, image, imageSource]);\n\n        _.progressiveLazyLoad();\n      };\n\n      imageToLoad.onerror = function () {\n        if (tryCount < 3) {\n          /**\n           * try to load the image 3 times,\n           * leave a slight delay so we don't get\n           * servers blocking the request.\n           */\n          setTimeout(function () {\n            _.progressiveLazyLoad(tryCount + 1);\n          }, 500);\n        } else {\n          image.removeAttr('data-lazy').removeClass('slick-loading').addClass('slick-lazyload-error');\n\n          _.$slider.trigger('lazyLoadError', [_, image, imageSource]);\n\n          _.progressiveLazyLoad();\n        }\n      };\n\n      imageToLoad.src = imageSource;\n    } else {\n      _.$slider.trigger('allImagesLoaded', [_]);\n    }\n  };\n\n  Slick.prototype.refresh = function (initializing) {\n    var _ = this,\n        currentSlide,\n        lastVisibleIndex;\n\n    lastVisibleIndex = _.slideCount - _.options.slidesToShow; // in non-infinite sliders, we don't want to go past the\n    // last visible index.\n\n    if (!_.options.infinite && _.currentSlide > lastVisibleIndex) {\n      _.currentSlide = lastVisibleIndex;\n    } // if less slides than to show, go to start.\n\n\n    if (_.slideCount <= _.options.slidesToShow) {\n      _.currentSlide = 0;\n    }\n\n    currentSlide = _.currentSlide;\n\n    _.destroy(true);\n\n    $.extend(_, _.initials, {\n      currentSlide: currentSlide\n    });\n\n    _.init();\n\n    if (!initializing) {\n      _.changeSlide({\n        data: {\n          message: 'index',\n          index: currentSlide\n        }\n      }, false);\n    }\n  };\n\n  Slick.prototype.registerBreakpoints = function () {\n    var _ = this,\n        breakpoint,\n        currentBreakpoint,\n        l,\n        responsiveSettings = _.options.responsive || null;\n\n    if ($.type(responsiveSettings) === 'array' && responsiveSettings.length) {\n      _.respondTo = _.options.respondTo || 'window';\n\n      for (breakpoint in responsiveSettings) {\n        l = _.breakpoints.length - 1;\n\n        if (responsiveSettings.hasOwnProperty(breakpoint)) {\n          currentBreakpoint = responsiveSettings[breakpoint].breakpoint; // loop through the breakpoints and cut out any existing\n          // ones with the same breakpoint number, we don't want dupes.\n\n          while (l >= 0) {\n            if (_.breakpoints[l] && _.breakpoints[l] === currentBreakpoint) {\n              _.breakpoints.splice(l, 1);\n            }\n\n            l--;\n          }\n\n          _.breakpoints.push(currentBreakpoint);\n\n          _.breakpointSettings[currentBreakpoint] = responsiveSettings[breakpoint].settings;\n        }\n      }\n\n      _.breakpoints.sort(function (a, b) {\n        return _.options.mobileFirst ? a - b : b - a;\n      });\n    }\n  };\n\n  Slick.prototype.reinit = function () {\n    var _ = this;\n\n    _.$slides = _.$slideTrack.children(_.options.slide).addClass('slick-slide');\n    _.slideCount = _.$slides.length;\n\n    if (_.currentSlide >= _.slideCount && _.currentSlide !== 0) {\n      _.currentSlide = _.currentSlide - _.options.slidesToScroll;\n    }\n\n    if (_.slideCount <= _.options.slidesToShow) {\n      _.currentSlide = 0;\n    }\n\n    _.registerBreakpoints();\n\n    _.setProps();\n\n    _.setupInfinite();\n\n    _.buildArrows();\n\n    _.updateArrows();\n\n    _.initArrowEvents();\n\n    _.buildDots();\n\n    _.updateDots();\n\n    _.initDotEvents();\n\n    _.cleanUpSlideEvents();\n\n    _.initSlideEvents();\n\n    _.checkResponsive(false, true);\n\n    if (_.options.focusOnSelect === true) {\n      $(_.$slideTrack).children().on('click.slick', _.selectHandler);\n    }\n\n    _.setSlideClasses(typeof _.currentSlide === 'number' ? _.currentSlide : 0);\n\n    _.setPosition();\n\n    _.focusHandler();\n\n    _.paused = !_.options.autoplay;\n\n    _.autoPlay();\n\n    _.$slider.trigger('reInit', [_]);\n  };\n\n  Slick.prototype.resize = function () {\n    var _ = this;\n\n    if ($(window).width() !== _.windowWidth) {\n      clearTimeout(_.windowDelay);\n      _.windowDelay = window.setTimeout(function () {\n        _.windowWidth = $(window).width();\n\n        _.checkResponsive();\n\n        if (!_.unslicked) {\n          _.setPosition();\n        }\n      }, 50);\n    }\n  };\n\n  Slick.prototype.removeSlide = Slick.prototype.slickRemove = function (index, removeBefore, removeAll) {\n    var _ = this;\n\n    if (typeof index === 'boolean') {\n      removeBefore = index;\n      index = removeBefore === true ? 0 : _.slideCount - 1;\n    } else {\n      index = removeBefore === true ? --index : index;\n    }\n\n    if (_.slideCount < 1 || index < 0 || index > _.slideCount - 1) {\n      return false;\n    }\n\n    _.unload();\n\n    if (removeAll === true) {\n      _.$slideTrack.children().remove();\n    } else {\n      _.$slideTrack.children(this.options.slide).eq(index).remove();\n    }\n\n    _.$slides = _.$slideTrack.children(this.options.slide);\n\n    _.$slideTrack.children(this.options.slide).detach();\n\n    _.$slideTrack.append(_.$slides);\n\n    _.$slidesCache = _.$slides;\n\n    _.reinit();\n  };\n\n  Slick.prototype.setCSS = function (position) {\n    var _ = this,\n        positionProps = {},\n        x,\n        y;\n\n    if (_.options.rtl === true) {\n      position = -position;\n    }\n\n    x = _.positionProp == 'left' ? Math.ceil(position) + 'px' : '0px';\n    y = _.positionProp == 'top' ? Math.ceil(position) + 'px' : '0px';\n    positionProps[_.positionProp] = position;\n\n    if (_.transformsEnabled === false) {\n      _.$slideTrack.css(positionProps);\n    } else {\n      positionProps = {};\n\n      if (_.cssTransitions === false) {\n        positionProps[_.animType] = 'translate(' + x + ', ' + y + ')';\n\n        _.$slideTrack.css(positionProps);\n      } else {\n        positionProps[_.animType] = 'translate3d(' + x + ', ' + y + ', 0px)';\n\n        _.$slideTrack.css(positionProps);\n      }\n    }\n  };\n\n  Slick.prototype.setDimensions = function () {\n    var _ = this;\n\n    if (_.options.vertical === false) {\n      if (_.options.centerMode === true) {\n        _.$list.css({\n          padding: '0px ' + _.options.centerPadding\n        });\n      }\n    } else {\n      _.$list.height(_.$slides.first().outerHeight(true) * _.options.slidesToShow);\n\n      if (_.options.centerMode === true) {\n        _.$list.css({\n          padding: _.options.centerPadding + ' 0px'\n        });\n      }\n    }\n\n    _.listWidth = _.$list.width();\n    _.listHeight = _.$list.height();\n\n    if (_.options.vertical === false && _.options.variableWidth === false) {\n      _.slideWidth = Math.ceil(_.listWidth / _.options.slidesToShow);\n\n      _.$slideTrack.width(Math.ceil(_.slideWidth * _.$slideTrack.children('.slick-slide').length));\n    } else if (_.options.variableWidth === true) {\n      _.$slideTrack.width(5000 * _.slideCount);\n    } else {\n      _.slideWidth = Math.ceil(_.listWidth);\n\n      _.$slideTrack.height(Math.ceil(_.$slides.first().outerHeight(true) * _.$slideTrack.children('.slick-slide').length));\n    }\n\n    var offset = _.$slides.first().outerWidth(true) - _.$slides.first().width();\n\n    if (_.options.variableWidth === false) _.$slideTrack.children('.slick-slide').width(_.slideWidth - offset);\n  };\n\n  Slick.prototype.setFade = function () {\n    var _ = this,\n        targetLeft;\n\n    _.$slides.each(function (index, element) {\n      targetLeft = _.slideWidth * index * -1;\n\n      if (_.options.rtl === true) {\n        $(element).css({\n          position: 'relative',\n          right: targetLeft,\n          top: 0,\n          zIndex: _.options.zIndex - 2,\n          opacity: 0\n        });\n      } else {\n        $(element).css({\n          position: 'relative',\n          left: targetLeft,\n          top: 0,\n          zIndex: _.options.zIndex - 2,\n          opacity: 0\n        });\n      }\n    });\n\n    _.$slides.eq(_.currentSlide).css({\n      zIndex: _.options.zIndex - 1,\n      opacity: 1\n    });\n  };\n\n  Slick.prototype.setHeight = function () {\n    var _ = this;\n\n    if (_.options.slidesToShow === 1 && _.options.adaptiveHeight === true && _.options.vertical === false) {\n      var targetHeight = _.$slides.eq(_.currentSlide).outerHeight(true);\n\n      _.$list.css('height', targetHeight);\n    }\n  };\n\n  Slick.prototype.setOption = Slick.prototype.slickSetOption = function () {\n    /**\n     * accepts arguments in format of:\n     *\n     *  - for changing a single option's value:\n     *     .slick(\"setOption\", option, value, refresh )\n     *\n     *  - for changing a set of responsive options:\n     *     .slick(\"setOption\", 'responsive', [{}, ...], refresh )\n     *\n     *  - for updating multiple values at once (not responsive)\n     *     .slick(\"setOption\", { 'option': value, ... }, refresh )\n     */\n    var _ = this,\n        l,\n        item,\n        option,\n        value,\n        refresh = false,\n        type;\n\n    if ($.type(arguments[0]) === 'object') {\n      option = arguments[0];\n      refresh = arguments[1];\n      type = 'multiple';\n    } else if ($.type(arguments[0]) === 'string') {\n      option = arguments[0];\n      value = arguments[1];\n      refresh = arguments[2];\n\n      if (arguments[0] === 'responsive' && $.type(arguments[1]) === 'array') {\n        type = 'responsive';\n      } else if (typeof arguments[1] !== 'undefined') {\n        type = 'single';\n      }\n    }\n\n    if (type === 'single') {\n      _.options[option] = value;\n    } else if (type === 'multiple') {\n      $.each(option, function (opt, val) {\n        _.options[opt] = val;\n      });\n    } else if (type === 'responsive') {\n      for (item in value) {\n        if ($.type(_.options.responsive) !== 'array') {\n          _.options.responsive = [value[item]];\n        } else {\n          l = _.options.responsive.length - 1; // loop through the responsive object and splice out duplicates.\n\n          while (l >= 0) {\n            if (_.options.responsive[l].breakpoint === value[item].breakpoint) {\n              _.options.responsive.splice(l, 1);\n            }\n\n            l--;\n          }\n\n          _.options.responsive.push(value[item]);\n        }\n      }\n    }\n\n    if (refresh) {\n      _.unload();\n\n      _.reinit();\n    }\n  };\n\n  Slick.prototype.setPosition = function () {\n    var _ = this;\n\n    _.setDimensions();\n\n    _.setHeight();\n\n    if (_.options.fade === false) {\n      _.setCSS(_.getLeft(_.currentSlide));\n    } else {\n      _.setFade();\n    }\n\n    _.$slider.trigger('setPosition', [_]);\n  };\n\n  Slick.prototype.setProps = function () {\n    var _ = this,\n        bodyStyle = document.body.style;\n\n    _.positionProp = _.options.vertical === true ? 'top' : 'left';\n\n    if (_.positionProp === 'top') {\n      _.$slider.addClass('slick-vertical');\n    } else {\n      _.$slider.removeClass('slick-vertical');\n    }\n\n    if (bodyStyle.WebkitTransition !== undefined || bodyStyle.MozTransition !== undefined || bodyStyle.msTransition !== undefined) {\n      if (_.options.useCSS === true) {\n        _.cssTransitions = true;\n      }\n    }\n\n    if (_.options.fade) {\n      if (typeof _.options.zIndex === 'number') {\n        if (_.options.zIndex < 3) {\n          _.options.zIndex = 3;\n        }\n      } else {\n        _.options.zIndex = _.defaults.zIndex;\n      }\n    }\n\n    if (bodyStyle.OTransform !== undefined) {\n      _.animType = 'OTransform';\n      _.transformType = '-o-transform';\n      _.transitionType = 'OTransition';\n      if (bodyStyle.perspectiveProperty === undefined && bodyStyle.webkitPerspective === undefined) _.animType = false;\n    }\n\n    if (bodyStyle.MozTransform !== undefined) {\n      _.animType = 'MozTransform';\n      _.transformType = '-moz-transform';\n      _.transitionType = 'MozTransition';\n      if (bodyStyle.perspectiveProperty === undefined && bodyStyle.MozPerspective === undefined) _.animType = false;\n    }\n\n    if (bodyStyle.webkitTransform !== undefined) {\n      _.animType = 'webkitTransform';\n      _.transformType = '-webkit-transform';\n      _.transitionType = 'webkitTransition';\n      if (bodyStyle.perspectiveProperty === undefined && bodyStyle.webkitPerspective === undefined) _.animType = false;\n    }\n\n    if (bodyStyle.msTransform !== undefined) {\n      _.animType = 'msTransform';\n      _.transformType = '-ms-transform';\n      _.transitionType = 'msTransition';\n      if (bodyStyle.msTransform === undefined) _.animType = false;\n    }\n\n    if (bodyStyle.transform !== undefined && _.animType !== false) {\n      _.animType = 'transform';\n      _.transformType = 'transform';\n      _.transitionType = 'transition';\n    }\n\n    _.transformsEnabled = _.options.useTransform && _.animType !== null && _.animType !== false;\n  };\n\n  Slick.prototype.setSlideClasses = function (index) {\n    var _ = this,\n        centerOffset,\n        allSlides,\n        indexOffset,\n        remainder;\n\n    allSlides = _.$slider.find('.slick-slide').removeClass('slick-active slick-center slick-current').attr('aria-hidden', 'true');\n\n    _.$slides.eq(index).addClass('slick-current');\n\n    if (_.options.centerMode === true) {\n      var evenCoef = _.options.slidesToShow % 2 === 0 ? 1 : 0;\n      centerOffset = Math.floor(_.options.slidesToShow / 2);\n\n      if (_.options.infinite === true) {\n        if (index >= centerOffset && index <= _.slideCount - 1 - centerOffset) {\n          _.$slides.slice(index - centerOffset + evenCoef, index + centerOffset + 1).addClass('slick-active').attr('aria-hidden', 'false');\n        } else {\n          indexOffset = _.options.slidesToShow + index;\n          allSlides.slice(indexOffset - centerOffset + 1 + evenCoef, indexOffset + centerOffset + 2).addClass('slick-active').attr('aria-hidden', 'false');\n        }\n\n        if (index === 0) {\n          allSlides.eq(allSlides.length - 1 - _.options.slidesToShow).addClass('slick-center');\n        } else if (index === _.slideCount - 1) {\n          allSlides.eq(_.options.slidesToShow).addClass('slick-center');\n        }\n      }\n\n      _.$slides.eq(index).addClass('slick-center');\n    } else {\n      if (index >= 0 && index <= _.slideCount - _.options.slidesToShow) {\n        _.$slides.slice(index, index + _.options.slidesToShow).addClass('slick-active').attr('aria-hidden', 'false');\n      } else if (allSlides.length <= _.options.slidesToShow) {\n        allSlides.addClass('slick-active').attr('aria-hidden', 'false');\n      } else {\n        remainder = _.slideCount % _.options.slidesToShow;\n        indexOffset = _.options.infinite === true ? _.options.slidesToShow + index : index;\n\n        if (_.options.slidesToShow == _.options.slidesToScroll && _.slideCount - index < _.options.slidesToShow) {\n          allSlides.slice(indexOffset - (_.options.slidesToShow - remainder), indexOffset + remainder).addClass('slick-active').attr('aria-hidden', 'false');\n        } else {\n          allSlides.slice(indexOffset, indexOffset + _.options.slidesToShow).addClass('slick-active').attr('aria-hidden', 'false');\n        }\n      }\n    }\n\n    if (_.options.lazyLoad === 'ondemand' || _.options.lazyLoad === 'anticipated') {\n      _.lazyLoad();\n    }\n  };\n\n  Slick.prototype.setupInfinite = function () {\n    var _ = this,\n        i,\n        slideIndex,\n        infiniteCount;\n\n    if (_.options.fade === true) {\n      _.options.centerMode = false;\n    }\n\n    if (_.options.infinite === true && _.options.fade === false) {\n      slideIndex = null;\n\n      if (_.slideCount > _.options.slidesToShow) {\n        if (_.options.centerMode === true) {\n          infiniteCount = _.options.slidesToShow + 1;\n        } else {\n          infiniteCount = _.options.slidesToShow;\n        }\n\n        for (i = _.slideCount; i > _.slideCount - infiniteCount; i -= 1) {\n          slideIndex = i - 1;\n          $(_.$slides[slideIndex]).clone(true).attr('id', '').attr('data-slick-index', slideIndex - _.slideCount).prependTo(_.$slideTrack).addClass('slick-cloned');\n        }\n\n        for (i = 0; i < infiniteCount + _.slideCount; i += 1) {\n          slideIndex = i;\n          $(_.$slides[slideIndex]).clone(true).attr('id', '').attr('data-slick-index', slideIndex + _.slideCount).appendTo(_.$slideTrack).addClass('slick-cloned');\n        }\n\n        _.$slideTrack.find('.slick-cloned').find('[id]').each(function () {\n          $(this).attr('id', '');\n        });\n      }\n    }\n  };\n\n  Slick.prototype.interrupt = function (toggle) {\n    var _ = this;\n\n    if (!toggle) {\n      _.autoPlay();\n    }\n\n    _.interrupted = toggle;\n  };\n\n  Slick.prototype.selectHandler = function (event) {\n    var _ = this;\n\n    var targetElement = $(event.target).is('.slick-slide') ? $(event.target) : $(event.target).parents('.slick-slide');\n    var index = parseInt(targetElement.attr('data-slick-index'));\n    if (!index) index = 0;\n\n    if (_.slideCount <= _.options.slidesToShow) {\n      _.slideHandler(index, false, true);\n\n      return;\n    }\n\n    _.slideHandler(index);\n  };\n\n  Slick.prototype.slideHandler = function (index, sync, dontAnimate) {\n    var targetSlide,\n        animSlide,\n        oldSlide,\n        slideLeft,\n        targetLeft = null,\n        _ = this,\n        navTarget;\n\n    sync = sync || false;\n\n    if (_.animating === true && _.options.waitForAnimate === true) {\n      return;\n    }\n\n    if (_.options.fade === true && _.currentSlide === index) {\n      return;\n    }\n\n    if (sync === false) {\n      _.asNavFor(index);\n    }\n\n    targetSlide = index;\n    targetLeft = _.getLeft(targetSlide);\n    slideLeft = _.getLeft(_.currentSlide);\n    _.currentLeft = _.swipeLeft === null ? slideLeft : _.swipeLeft;\n\n    if (_.options.infinite === false && _.options.centerMode === false && (index < 0 || index > _.getDotCount() * _.options.slidesToScroll)) {\n      if (_.options.fade === false) {\n        targetSlide = _.currentSlide;\n\n        if (dontAnimate !== true && _.slideCount > _.options.slidesToShow) {\n          _.animateSlide(slideLeft, function () {\n            _.postSlide(targetSlide);\n          });\n        } else {\n          _.postSlide(targetSlide);\n        }\n      }\n\n      return;\n    } else if (_.options.infinite === false && _.options.centerMode === true && (index < 0 || index > _.slideCount - _.options.slidesToScroll)) {\n      if (_.options.fade === false) {\n        targetSlide = _.currentSlide;\n\n        if (dontAnimate !== true && _.slideCount > _.options.slidesToShow) {\n          _.animateSlide(slideLeft, function () {\n            _.postSlide(targetSlide);\n          });\n        } else {\n          _.postSlide(targetSlide);\n        }\n      }\n\n      return;\n    }\n\n    if (_.options.autoplay) {\n      clearInterval(_.autoPlayTimer);\n    }\n\n    if (targetSlide < 0) {\n      if (_.slideCount % _.options.slidesToScroll !== 0) {\n        animSlide = _.slideCount - _.slideCount % _.options.slidesToScroll;\n      } else {\n        animSlide = _.slideCount + targetSlide;\n      }\n    } else if (targetSlide >= _.slideCount) {\n      if (_.slideCount % _.options.slidesToScroll !== 0) {\n        animSlide = 0;\n      } else {\n        animSlide = targetSlide - _.slideCount;\n      }\n    } else {\n      animSlide = targetSlide;\n    }\n\n    _.animating = true;\n\n    _.$slider.trigger('beforeChange', [_, _.currentSlide, animSlide]);\n\n    oldSlide = _.currentSlide;\n    _.currentSlide = animSlide;\n\n    _.setSlideClasses(_.currentSlide);\n\n    if (_.options.asNavFor) {\n      navTarget = _.getNavTarget();\n      navTarget = navTarget.slick('getSlick');\n\n      if (navTarget.slideCount <= navTarget.options.slidesToShow) {\n        navTarget.setSlideClasses(_.currentSlide);\n      }\n    }\n\n    _.updateDots();\n\n    _.updateArrows();\n\n    if (_.options.fade === true) {\n      if (dontAnimate !== true) {\n        _.fadeSlideOut(oldSlide);\n\n        _.fadeSlide(animSlide, function () {\n          _.postSlide(animSlide);\n        });\n      } else {\n        _.postSlide(animSlide);\n      }\n\n      _.animateHeight();\n\n      return;\n    }\n\n    if (dontAnimate !== true && _.slideCount > _.options.slidesToShow) {\n      _.animateSlide(targetLeft, function () {\n        _.postSlide(animSlide);\n      });\n    } else {\n      _.postSlide(animSlide);\n    }\n  };\n\n  Slick.prototype.startLoad = function () {\n    var _ = this;\n\n    if (_.options.arrows === true && _.slideCount > _.options.slidesToShow) {\n      _.$prevArrow.hide();\n\n      _.$nextArrow.hide();\n    }\n\n    if (_.options.dots === true && _.slideCount > _.options.slidesToShow) {\n      _.$dots.hide();\n    }\n\n    _.$slider.addClass('slick-loading');\n  };\n\n  Slick.prototype.swipeDirection = function () {\n    var xDist,\n        yDist,\n        r,\n        swipeAngle,\n        _ = this;\n\n    xDist = _.touchObject.startX - _.touchObject.curX;\n    yDist = _.touchObject.startY - _.touchObject.curY;\n    r = Math.atan2(yDist, xDist);\n    swipeAngle = Math.round(r * 180 / Math.PI);\n\n    if (swipeAngle < 0) {\n      swipeAngle = 360 - Math.abs(swipeAngle);\n    }\n\n    if (swipeAngle <= 45 && swipeAngle >= 0) {\n      return _.options.rtl === false ? 'left' : 'right';\n    }\n\n    if (swipeAngle <= 360 && swipeAngle >= 315) {\n      return _.options.rtl === false ? 'left' : 'right';\n    }\n\n    if (swipeAngle >= 135 && swipeAngle <= 225) {\n      return _.options.rtl === false ? 'right' : 'left';\n    }\n\n    if (_.options.verticalSwiping === true) {\n      if (swipeAngle >= 35 && swipeAngle <= 135) {\n        return 'down';\n      } else {\n        return 'up';\n      }\n    }\n\n    return 'vertical';\n  };\n\n  Slick.prototype.swipeEnd = function (event) {\n    var _ = this,\n        slideCount,\n        direction;\n\n    _.dragging = false;\n    _.swiping = false;\n\n    if (_.scrolling) {\n      _.scrolling = false;\n      return false;\n    }\n\n    _.interrupted = false;\n    _.shouldClick = _.touchObject.swipeLength > 10 ? false : true;\n\n    if (_.touchObject.curX === undefined) {\n      return false;\n    }\n\n    if (_.touchObject.edgeHit === true) {\n      _.$slider.trigger('edge', [_, _.swipeDirection()]);\n    }\n\n    if (_.touchObject.swipeLength >= _.touchObject.minSwipe) {\n      direction = _.swipeDirection();\n\n      switch (direction) {\n        case 'left':\n        case 'down':\n          slideCount = _.options.swipeToSlide ? _.checkNavigable(_.currentSlide + _.getSlideCount()) : _.currentSlide + _.getSlideCount();\n          _.currentDirection = 0;\n          break;\n\n        case 'right':\n        case 'up':\n          slideCount = _.options.swipeToSlide ? _.checkNavigable(_.currentSlide - _.getSlideCount()) : _.currentSlide - _.getSlideCount();\n          _.currentDirection = 1;\n          break;\n\n        default:\n      }\n\n      if (direction != 'vertical') {\n        _.slideHandler(slideCount);\n\n        _.touchObject = {};\n\n        _.$slider.trigger('swipe', [_, direction]);\n      }\n    } else {\n      if (_.touchObject.startX !== _.touchObject.curX) {\n        _.slideHandler(_.currentSlide);\n\n        _.touchObject = {};\n      }\n    }\n  };\n\n  Slick.prototype.swipeHandler = function (event) {\n    var _ = this;\n\n    if (_.options.swipe === false || 'ontouchend' in document && _.options.swipe === false) {\n      return;\n    } else if (_.options.draggable === false && event.type.indexOf('mouse') !== -1) {\n      return;\n    }\n\n    _.touchObject.fingerCount = event.originalEvent && event.originalEvent.touches !== undefined ? event.originalEvent.touches.length : 1;\n    _.touchObject.minSwipe = _.listWidth / _.options.touchThreshold;\n\n    if (_.options.verticalSwiping === true) {\n      _.touchObject.minSwipe = _.listHeight / _.options.touchThreshold;\n    }\n\n    switch (event.data.action) {\n      case 'start':\n        _.swipeStart(event);\n\n        break;\n\n      case 'move':\n        _.swipeMove(event);\n\n        break;\n\n      case 'end':\n        _.swipeEnd(event);\n\n        break;\n    }\n  };\n\n  Slick.prototype.swipeMove = function (event) {\n    var _ = this,\n        edgeWasHit = false,\n        curLeft,\n        swipeDirection,\n        swipeLength,\n        positionOffset,\n        touches,\n        verticalSwipeLength;\n\n    touches = event.originalEvent !== undefined ? event.originalEvent.touches : null;\n\n    if (!_.dragging || _.scrolling || touches && touches.length !== 1) {\n      return false;\n    }\n\n    curLeft = _.getLeft(_.currentSlide);\n    _.touchObject.curX = touches !== undefined ? touches[0].pageX : event.clientX;\n    _.touchObject.curY = touches !== undefined ? touches[0].pageY : event.clientY;\n    _.touchObject.swipeLength = Math.round(Math.sqrt(Math.pow(_.touchObject.curX - _.touchObject.startX, 2)));\n    verticalSwipeLength = Math.round(Math.sqrt(Math.pow(_.touchObject.curY - _.touchObject.startY, 2)));\n\n    if (!_.options.verticalSwiping && !_.swiping && verticalSwipeLength > 4) {\n      _.scrolling = true;\n      return false;\n    }\n\n    if (_.options.verticalSwiping === true) {\n      _.touchObject.swipeLength = verticalSwipeLength;\n    }\n\n    swipeDirection = _.swipeDirection();\n\n    if (event.originalEvent !== undefined && _.touchObject.swipeLength > 4) {\n      _.swiping = true;\n      event.preventDefault();\n    }\n\n    positionOffset = (_.options.rtl === false ? 1 : -1) * (_.touchObject.curX > _.touchObject.startX ? 1 : -1);\n\n    if (_.options.verticalSwiping === true) {\n      positionOffset = _.touchObject.curY > _.touchObject.startY ? 1 : -1;\n    }\n\n    swipeLength = _.touchObject.swipeLength;\n    _.touchObject.edgeHit = false;\n\n    if (_.options.infinite === false) {\n      if (_.currentSlide === 0 && swipeDirection === 'right' || _.currentSlide >= _.getDotCount() && swipeDirection === 'left') {\n        swipeLength = _.touchObject.swipeLength * _.options.edgeFriction;\n        _.touchObject.edgeHit = true;\n      }\n    }\n\n    if (_.options.vertical === false) {\n      _.swipeLeft = curLeft + swipeLength * positionOffset;\n    } else {\n      _.swipeLeft = curLeft + swipeLength * (_.$list.height() / _.listWidth) * positionOffset;\n    }\n\n    if (_.options.verticalSwiping === true) {\n      _.swipeLeft = curLeft + swipeLength * positionOffset;\n    }\n\n    if (_.options.fade === true || _.options.touchMove === false) {\n      return false;\n    }\n\n    if (_.animating === true) {\n      _.swipeLeft = null;\n      return false;\n    }\n\n    _.setCSS(_.swipeLeft);\n  };\n\n  Slick.prototype.swipeStart = function (event) {\n    var _ = this,\n        touches;\n\n    _.interrupted = true;\n\n    if (_.touchObject.fingerCount !== 1 || _.slideCount <= _.options.slidesToShow) {\n      _.touchObject = {};\n      return false;\n    }\n\n    if (event.originalEvent !== undefined && event.originalEvent.touches !== undefined) {\n      touches = event.originalEvent.touches[0];\n    }\n\n    _.touchObject.startX = _.touchObject.curX = touches !== undefined ? touches.pageX : event.clientX;\n    _.touchObject.startY = _.touchObject.curY = touches !== undefined ? touches.pageY : event.clientY;\n    _.dragging = true;\n  };\n\n  Slick.prototype.unfilterSlides = Slick.prototype.slickUnfilter = function () {\n    var _ = this;\n\n    if (_.$slidesCache !== null) {\n      _.unload();\n\n      _.$slideTrack.children(this.options.slide).detach();\n\n      _.$slidesCache.appendTo(_.$slideTrack);\n\n      _.reinit();\n    }\n  };\n\n  Slick.prototype.unload = function () {\n    var _ = this;\n\n    $('.slick-cloned', _.$slider).remove();\n\n    if (_.$dots) {\n      _.$dots.remove();\n    }\n\n    if (_.$prevArrow && _.htmlExpr.test(_.options.prevArrow)) {\n      _.$prevArrow.remove();\n    }\n\n    if (_.$nextArrow && _.htmlExpr.test(_.options.nextArrow)) {\n      _.$nextArrow.remove();\n    }\n\n    _.$slides.removeClass('slick-slide slick-active slick-visible slick-current').attr('aria-hidden', 'true').css('width', '');\n  };\n\n  Slick.prototype.unslick = function (fromBreakpoint) {\n    var _ = this;\n\n    _.$slider.trigger('unslick', [_, fromBreakpoint]);\n\n    _.destroy();\n  };\n\n  Slick.prototype.updateArrows = function () {\n    var _ = this,\n        centerOffset;\n\n    centerOffset = Math.floor(_.options.slidesToShow / 2);\n\n    if (_.options.arrows === true && _.slideCount > _.options.slidesToShow && !_.options.infinite) {\n      _.$prevArrow.removeClass('slick-disabled').attr('aria-disabled', 'false');\n\n      _.$nextArrow.removeClass('slick-disabled').attr('aria-disabled', 'false');\n\n      if (_.currentSlide === 0) {\n        _.$prevArrow.addClass('slick-disabled').attr('aria-disabled', 'true');\n\n        _.$nextArrow.removeClass('slick-disabled').attr('aria-disabled', 'false');\n      } else if (_.currentSlide >= _.slideCount - _.options.slidesToShow && _.options.centerMode === false) {\n        _.$nextArrow.addClass('slick-disabled').attr('aria-disabled', 'true');\n\n        _.$prevArrow.removeClass('slick-disabled').attr('aria-disabled', 'false');\n      } else if (_.currentSlide >= _.slideCount - 1 && _.options.centerMode === true) {\n        _.$nextArrow.addClass('slick-disabled').attr('aria-disabled', 'true');\n\n        _.$prevArrow.removeClass('slick-disabled').attr('aria-disabled', 'false');\n      }\n    }\n  };\n\n  Slick.prototype.updateDots = function () {\n    var _ = this;\n\n    if (_.$dots !== null) {\n      _.$dots.find('li').removeClass('slick-active').end();\n\n      _.$dots.find('li').eq(Math.floor(_.currentSlide / _.options.slidesToScroll)).addClass('slick-active');\n    }\n  };\n\n  Slick.prototype.visibility = function () {\n    var _ = this;\n\n    if (_.options.autoplay) {\n      if (document[_.hidden]) {\n        _.interrupted = true;\n      } else {\n        _.interrupted = false;\n      }\n    }\n  };\n\n  $.fn.slick = function () {\n    var _ = this,\n        opt = arguments[0],\n        args = Array.prototype.slice.call(arguments, 1),\n        l = _.length,\n        i,\n        ret;\n\n    for (i = 0; i < l; i++) {\n      if (_typeof(opt) == 'object' || typeof opt == 'undefined') _[i].slick = new Slick(_[i], opt);else ret = _[i].slick[opt].apply(_[i].slick, args);\n      if (typeof ret != 'undefined') return ret;\n    }\n\n    return _;\n  };\n});","function _typeof(obj) { if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") { _typeof = function _typeof(obj) { return typeof obj; }; } else { _typeof = function _typeof(obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; }; } return _typeof(obj); }\n\n/*!\n * Select2 4.0.13\n * https://select2.github.io\n *\n * Released under the MIT license\n * https://github.com/select2/select2/blob/master/LICENSE.md\n */\n;\n\n(function (factory) {\n  if (typeof define === 'function' && define.amd) {\n    // AMD. Register as an anonymous module.\n    define(['jquery'], factory);\n  } else if ((typeof module === \"undefined\" ? \"undefined\" : _typeof(module)) === 'object' && module.exports) {\n    // Node/CommonJS\n    module.exports = function (root, jQuery) {\n      if (jQuery === undefined) {\n        // require('jQuery') returns a factory that requires window to\n        // build a jQuery instance, we normalize how we use modules\n        // that require this pattern but the window provided is a noop\n        // if it's defined (how jquery works)\n        if (typeof window !== 'undefined') {\n          jQuery = require('jquery');\n        } else {\n          jQuery = require('jquery')(root);\n        }\n      }\n\n      factory(jQuery);\n      return jQuery;\n    };\n  } else {\n    // Browser globals\n    factory(jQuery);\n  }\n})(function (jQuery) {\n  // This is needed so we can catch the AMD loader configuration and use it\n  // The inner file should be wrapped (by `banner.start.js`) in a function that\n  // returns the AMD loader references.\n  var S2 = function () {\n    // Restore the Select2 AMD loader so it can be used\n    // Needed mostly in the language files, where the loader is not inserted\n    if (jQuery && jQuery.fn && jQuery.fn.select2 && jQuery.fn.select2.amd) {\n      var S2 = jQuery.fn.select2.amd;\n    }\n\n    var S2;\n\n    (function () {\n      if (!S2 || !S2.requirejs) {\n        if (!S2) {\n          S2 = {};\n        } else {\n          require = S2;\n        }\n        /**\n         * @license almond 0.3.3 Copyright jQuery Foundation and other contributors.\n         * Released under MIT license, http://github.com/requirejs/almond/LICENSE\n         */\n        //Going sloppy to avoid 'use strict' string cost, but strict practices should\n        //be followed.\n\n        /*global setTimeout: false */\n\n\n        var requirejs, require, define;\n\n        (function (undef) {\n          var main,\n              _req,\n              makeMap,\n              handlers,\n              defined = {},\n              waiting = {},\n              config = {},\n              defining = {},\n              hasOwn = Object.prototype.hasOwnProperty,\n              aps = [].slice,\n              jsSuffixRegExp = /\\.js$/;\n\n          function hasProp(obj, prop) {\n            return hasOwn.call(obj, prop);\n          }\n          /**\n           * Given a relative module name, like ./something, normalize it to\n           * a real name that can be mapped to a path.\n           * @param {String} name the relative name\n           * @param {String} baseName a real name that the name arg is relative\n           * to.\n           * @returns {String} normalized name\n           */\n\n\n          function normalize(name, baseName) {\n            var nameParts,\n                nameSegment,\n                mapValue,\n                foundMap,\n                lastIndex,\n                foundI,\n                foundStarMap,\n                starI,\n                i,\n                j,\n                part,\n                normalizedBaseParts,\n                baseParts = baseName && baseName.split(\"/\"),\n                map = config.map,\n                starMap = map && map['*'] || {}; //Adjust any relative paths.\n\n            if (name) {\n              name = name.split('/');\n              lastIndex = name.length - 1; // If wanting node ID compatibility, strip .js from end\n              // of IDs. Have to do this here, and not in nameToUrl\n              // because node allows either .js or non .js to map\n              // to same file.\n\n              if (config.nodeIdCompat && jsSuffixRegExp.test(name[lastIndex])) {\n                name[lastIndex] = name[lastIndex].replace(jsSuffixRegExp, '');\n              } // Starts with a '.' so need the baseName\n\n\n              if (name[0].charAt(0) === '.' && baseParts) {\n                //Convert baseName to array, and lop off the last part,\n                //so that . matches that 'directory' and not name of the baseName's\n                //module. For instance, baseName of 'one/two/three', maps to\n                //'one/two/three.js', but we want the directory, 'one/two' for\n                //this normalization.\n                normalizedBaseParts = baseParts.slice(0, baseParts.length - 1);\n                name = normalizedBaseParts.concat(name);\n              } //start trimDots\n\n\n              for (i = 0; i < name.length; i++) {\n                part = name[i];\n\n                if (part === '.') {\n                  name.splice(i, 1);\n                  i -= 1;\n                } else if (part === '..') {\n                  // If at the start, or previous value is still ..,\n                  // keep them so that when converted to a path it may\n                  // still work when converted to a path, even though\n                  // as an ID it is less than ideal. In larger point\n                  // releases, may be better to just kick out an error.\n                  if (i === 0 || i === 1 && name[2] === '..' || name[i - 1] === '..') {\n                    continue;\n                  } else if (i > 0) {\n                    name.splice(i - 1, 2);\n                    i -= 2;\n                  }\n                }\n              } //end trimDots\n\n\n              name = name.join('/');\n            } //Apply map config if available.\n\n\n            if ((baseParts || starMap) && map) {\n              nameParts = name.split('/');\n\n              for (i = nameParts.length; i > 0; i -= 1) {\n                nameSegment = nameParts.slice(0, i).join(\"/\");\n\n                if (baseParts) {\n                  //Find the longest baseName segment match in the config.\n                  //So, do joins on the biggest to smallest lengths of baseParts.\n                  for (j = baseParts.length; j > 0; j -= 1) {\n                    mapValue = map[baseParts.slice(0, j).join('/')]; //baseName segment has  config, find if it has one for\n                    //this name.\n\n                    if (mapValue) {\n                      mapValue = mapValue[nameSegment];\n\n                      if (mapValue) {\n                        //Match, update name to the new value.\n                        foundMap = mapValue;\n                        foundI = i;\n                        break;\n                      }\n                    }\n                  }\n                }\n\n                if (foundMap) {\n                  break;\n                } //Check for a star map match, but just hold on to it,\n                //if there is a shorter segment match later in a matching\n                //config, then favor over this star map.\n\n\n                if (!foundStarMap && starMap && starMap[nameSegment]) {\n                  foundStarMap = starMap[nameSegment];\n                  starI = i;\n                }\n              }\n\n              if (!foundMap && foundStarMap) {\n                foundMap = foundStarMap;\n                foundI = starI;\n              }\n\n              if (foundMap) {\n                nameParts.splice(0, foundI, foundMap);\n                name = nameParts.join('/');\n              }\n            }\n\n            return name;\n          }\n\n          function makeRequire(relName, forceSync) {\n            return function () {\n              //A version of a require function that passes a moduleName\n              //value for items that may need to\n              //look up paths relative to the moduleName\n              var args = aps.call(arguments, 0); //If first arg is not require('string'), and there is only\n              //one arg, it is the array form without a callback. Insert\n              //a null so that the following concat is correct.\n\n              if (typeof args[0] !== 'string' && args.length === 1) {\n                args.push(null);\n              }\n\n              return _req.apply(undef, args.concat([relName, forceSync]));\n            };\n          }\n\n          function makeNormalize(relName) {\n            return function (name) {\n              return normalize(name, relName);\n            };\n          }\n\n          function makeLoad(depName) {\n            return function (value) {\n              defined[depName] = value;\n            };\n          }\n\n          function callDep(name) {\n            if (hasProp(waiting, name)) {\n              var args = waiting[name];\n              delete waiting[name];\n              defining[name] = true;\n              main.apply(undef, args);\n            }\n\n            if (!hasProp(defined, name) && !hasProp(defining, name)) {\n              throw new Error('No ' + name);\n            }\n\n            return defined[name];\n          } //Turns a plugin!resource to [plugin, resource]\n          //with the plugin being undefined if the name\n          //did not have a plugin prefix.\n\n\n          function splitPrefix(name) {\n            var prefix,\n                index = name ? name.indexOf('!') : -1;\n\n            if (index > -1) {\n              prefix = name.substring(0, index);\n              name = name.substring(index + 1, name.length);\n            }\n\n            return [prefix, name];\n          } //Creates a parts array for a relName where first part is plugin ID,\n          //second part is resource ID. Assumes relName has already been normalized.\n\n\n          function makeRelParts(relName) {\n            return relName ? splitPrefix(relName) : [];\n          }\n          /**\n           * Makes a name map, normalizing the name, and using a plugin\n           * for normalization if necessary. Grabs a ref to plugin\n           * too, as an optimization.\n           */\n\n\n          makeMap = function makeMap(name, relParts) {\n            var plugin,\n                parts = splitPrefix(name),\n                prefix = parts[0],\n                relResourceName = relParts[1];\n            name = parts[1];\n\n            if (prefix) {\n              prefix = normalize(prefix, relResourceName);\n              plugin = callDep(prefix);\n            } //Normalize according\n\n\n            if (prefix) {\n              if (plugin && plugin.normalize) {\n                name = plugin.normalize(name, makeNormalize(relResourceName));\n              } else {\n                name = normalize(name, relResourceName);\n              }\n            } else {\n              name = normalize(name, relResourceName);\n              parts = splitPrefix(name);\n              prefix = parts[0];\n              name = parts[1];\n\n              if (prefix) {\n                plugin = callDep(prefix);\n              }\n            } //Using ridiculous property names for space reasons\n\n\n            return {\n              f: prefix ? prefix + '!' + name : name,\n              //fullName\n              n: name,\n              pr: prefix,\n              p: plugin\n            };\n          };\n\n          function makeConfig(name) {\n            return function () {\n              return config && config.config && config.config[name] || {};\n            };\n          }\n\n          handlers = {\n            require: function require(name) {\n              return makeRequire(name);\n            },\n            exports: function exports(name) {\n              var e = defined[name];\n\n              if (typeof e !== 'undefined') {\n                return e;\n              } else {\n                return defined[name] = {};\n              }\n            },\n            module: function module(name) {\n              return {\n                id: name,\n                uri: '',\n                exports: defined[name],\n                config: makeConfig(name)\n              };\n            }\n          };\n\n          main = function main(name, deps, callback, relName) {\n            var cjsModule,\n                depName,\n                ret,\n                map,\n                i,\n                relParts,\n                args = [],\n                callbackType = _typeof(callback),\n                usingExports; //Use name if no relName\n\n\n            relName = relName || name;\n            relParts = makeRelParts(relName); //Call the callback to define the module, if necessary.\n\n            if (callbackType === 'undefined' || callbackType === 'function') {\n              //Pull out the defined dependencies and pass the ordered\n              //values to the callback.\n              //Default to [require, exports, module] if no deps\n              deps = !deps.length && callback.length ? ['require', 'exports', 'module'] : deps;\n\n              for (i = 0; i < deps.length; i += 1) {\n                map = makeMap(deps[i], relParts);\n                depName = map.f; //Fast path CommonJS standard dependencies.\n\n                if (depName === \"require\") {\n                  args[i] = handlers.require(name);\n                } else if (depName === \"exports\") {\n                  //CommonJS module spec 1.1\n                  args[i] = handlers.exports(name);\n                  usingExports = true;\n                } else if (depName === \"module\") {\n                  //CommonJS module spec 1.1\n                  cjsModule = args[i] = handlers.module(name);\n                } else if (hasProp(defined, depName) || hasProp(waiting, depName) || hasProp(defining, depName)) {\n                  args[i] = callDep(depName);\n                } else if (map.p) {\n                  map.p.load(map.n, makeRequire(relName, true), makeLoad(depName), {});\n                  args[i] = defined[depName];\n                } else {\n                  throw new Error(name + ' missing ' + depName);\n                }\n              }\n\n              ret = callback ? callback.apply(defined[name], args) : undefined;\n\n              if (name) {\n                //If setting exports via \"module\" is in play,\n                //favor that over return value and exports. After that,\n                //favor a non-undefined return value over exports use.\n                if (cjsModule && cjsModule.exports !== undef && cjsModule.exports !== defined[name]) {\n                  defined[name] = cjsModule.exports;\n                } else if (ret !== undef || !usingExports) {\n                  //Use the return value from the function.\n                  defined[name] = ret;\n                }\n              }\n            } else if (name) {\n              //May just be an object definition for the module. Only\n              //worry about defining if have a module name.\n              defined[name] = callback;\n            }\n          };\n\n          requirejs = require = _req = function req(deps, callback, relName, forceSync, alt) {\n            if (typeof deps === \"string\") {\n              if (handlers[deps]) {\n                //callback in this case is really relName\n                return handlers[deps](callback);\n              } //Just return the module wanted. In this scenario, the\n              //deps arg is the module name, and second arg (if passed)\n              //is just the relName.\n              //Normalize module name, if it contains . or ..\n\n\n              return callDep(makeMap(deps, makeRelParts(callback)).f);\n            } else if (!deps.splice) {\n              //deps is a config object, not an array.\n              config = deps;\n\n              if (config.deps) {\n                _req(config.deps, config.callback);\n              }\n\n              if (!callback) {\n                return;\n              }\n\n              if (callback.splice) {\n                //callback is an array, which means it is a dependency list.\n                //Adjust args if there are dependencies\n                deps = callback;\n                callback = relName;\n                relName = null;\n              } else {\n                deps = undef;\n              }\n            } //Support require(['a'])\n\n\n            callback = callback || function () {}; //If relName is a function, it is an errback handler,\n            //so remove it.\n\n\n            if (typeof relName === 'function') {\n              relName = forceSync;\n              forceSync = alt;\n            } //Simulate async callback;\n\n\n            if (forceSync) {\n              main(undef, deps, callback, relName);\n            } else {\n              //Using a non-zero value because of concern for what old browsers\n              //do, and latest browsers \"upgrade\" to 4 if lower value is used:\n              //http://www.whatwg.org/specs/web-apps/current-work/multipage/timers.html#dom-windowtimers-settimeout:\n              //If want a value immediately, use require('id') instead -- something\n              //that works in almond on the global level, but not guaranteed and\n              //unlikely to work in other AMD implementations.\n              setTimeout(function () {\n                main(undef, deps, callback, relName);\n              }, 4);\n            }\n\n            return _req;\n          };\n          /**\n           * Just drops the config on the floor, but returns req in case\n           * the config return value is used.\n           */\n\n\n          _req.config = function (cfg) {\n            return _req(cfg);\n          };\n          /**\n           * Expose module registry for debugging and tooling\n           */\n\n\n          requirejs._defined = defined;\n\n          define = function define(name, deps, callback) {\n            if (typeof name !== 'string') {\n              throw new Error('See almond README: incorrect module build, no module name');\n            } //This module may not have dependencies\n\n\n            if (!deps.splice) {\n              //deps is not an array, so probably means\n              //an object literal or factory function for\n              //the value. Adjust args.\n              callback = deps;\n              deps = [];\n            }\n\n            if (!hasProp(defined, name) && !hasProp(waiting, name)) {\n              waiting[name] = [name, deps, callback];\n            }\n          };\n\n          define.amd = {\n            jQuery: true\n          };\n        })();\n\n        S2.requirejs = requirejs;\n        S2.require = require;\n        S2.define = define;\n      }\n    })();\n\n    S2.define(\"almond\", function () {});\n    /* global jQuery:false, $:false */\n\n    S2.define('jquery', [], function () {\n      var _$ = jQuery || $;\n\n      if (_$ == null && console && console.error) {\n        console.error('Select2: An instance of jQuery or a jQuery-compatible library was not ' + 'found. Make sure that you are including jQuery before Select2 on your ' + 'web page.');\n      }\n\n      return _$;\n    });\n    S2.define('select2/utils', ['jquery'], function ($) {\n      var Utils = {};\n\n      Utils.Extend = function (ChildClass, SuperClass) {\n        var __hasProp = {}.hasOwnProperty;\n\n        function BaseConstructor() {\n          this.constructor = ChildClass;\n        }\n\n        for (var key in SuperClass) {\n          if (__hasProp.call(SuperClass, key)) {\n            ChildClass[key] = SuperClass[key];\n          }\n        }\n\n        BaseConstructor.prototype = SuperClass.prototype;\n        ChildClass.prototype = new BaseConstructor();\n        ChildClass.__super__ = SuperClass.prototype;\n        return ChildClass;\n      };\n\n      function getMethods(theClass) {\n        var proto = theClass.prototype;\n        var methods = [];\n\n        for (var methodName in proto) {\n          var m = proto[methodName];\n\n          if (typeof m !== 'function') {\n            continue;\n          }\n\n          if (methodName === 'constructor') {\n            continue;\n          }\n\n          methods.push(methodName);\n        }\n\n        return methods;\n      }\n\n      Utils.Decorate = function (SuperClass, DecoratorClass) {\n        var decoratedMethods = getMethods(DecoratorClass);\n        var superMethods = getMethods(SuperClass);\n\n        function DecoratedClass() {\n          var unshift = Array.prototype.unshift;\n          var argCount = DecoratorClass.prototype.constructor.length;\n          var calledConstructor = SuperClass.prototype.constructor;\n\n          if (argCount > 0) {\n            unshift.call(arguments, SuperClass.prototype.constructor);\n            calledConstructor = DecoratorClass.prototype.constructor;\n          }\n\n          calledConstructor.apply(this, arguments);\n        }\n\n        DecoratorClass.displayName = SuperClass.displayName;\n\n        function ctr() {\n          this.constructor = DecoratedClass;\n        }\n\n        DecoratedClass.prototype = new ctr();\n\n        for (var m = 0; m < superMethods.length; m++) {\n          var superMethod = superMethods[m];\n          DecoratedClass.prototype[superMethod] = SuperClass.prototype[superMethod];\n        }\n\n        var calledMethod = function calledMethod(methodName) {\n          // Stub out the original method if it's not decorating an actual method\n          var originalMethod = function originalMethod() {};\n\n          if (methodName in DecoratedClass.prototype) {\n            originalMethod = DecoratedClass.prototype[methodName];\n          }\n\n          var decoratedMethod = DecoratorClass.prototype[methodName];\n          return function () {\n            var unshift = Array.prototype.unshift;\n            unshift.call(arguments, originalMethod);\n            return decoratedMethod.apply(this, arguments);\n          };\n        };\n\n        for (var d = 0; d < decoratedMethods.length; d++) {\n          var decoratedMethod = decoratedMethods[d];\n          DecoratedClass.prototype[decoratedMethod] = calledMethod(decoratedMethod);\n        }\n\n        return DecoratedClass;\n      };\n\n      var Observable = function Observable() {\n        this.listeners = {};\n      };\n\n      Observable.prototype.on = function (event, callback) {\n        this.listeners = this.listeners || {};\n\n        if (event in this.listeners) {\n          this.listeners[event].push(callback);\n        } else {\n          this.listeners[event] = [callback];\n        }\n      };\n\n      Observable.prototype.trigger = function (event) {\n        var slice = Array.prototype.slice;\n        var params = slice.call(arguments, 1);\n        this.listeners = this.listeners || {}; // Params should always come in as an array\n\n        if (params == null) {\n          params = [];\n        } // If there are no arguments to the event, use a temporary object\n\n\n        if (params.length === 0) {\n          params.push({});\n        } // Set the `_type` of the first object to the event\n\n\n        params[0]._type = event;\n\n        if (event in this.listeners) {\n          this.invoke(this.listeners[event], slice.call(arguments, 1));\n        }\n\n        if ('*' in this.listeners) {\n          this.invoke(this.listeners['*'], arguments);\n        }\n      };\n\n      Observable.prototype.invoke = function (listeners, params) {\n        for (var i = 0, len = listeners.length; i < len; i++) {\n          listeners[i].apply(this, params);\n        }\n      };\n\n      Utils.Observable = Observable;\n\n      Utils.generateChars = function (length) {\n        var chars = '';\n\n        for (var i = 0; i < length; i++) {\n          var randomChar = Math.floor(Math.random() * 36);\n          chars += randomChar.toString(36);\n        }\n\n        return chars;\n      };\n\n      Utils.bind = function (func, context) {\n        return function () {\n          func.apply(context, arguments);\n        };\n      };\n\n      Utils._convertData = function (data) {\n        for (var originalKey in data) {\n          var keys = originalKey.split('-');\n          var dataLevel = data;\n\n          if (keys.length === 1) {\n            continue;\n          }\n\n          for (var k = 0; k < keys.length; k++) {\n            var key = keys[k]; // Lowercase the first letter\n            // By default, dash-separated becomes camelCase\n\n            key = key.substring(0, 1).toLowerCase() + key.substring(1);\n\n            if (!(key in dataLevel)) {\n              dataLevel[key] = {};\n            }\n\n            if (k == keys.length - 1) {\n              dataLevel[key] = data[originalKey];\n            }\n\n            dataLevel = dataLevel[key];\n          }\n\n          delete data[originalKey];\n        }\n\n        return data;\n      };\n\n      Utils.hasScroll = function (index, el) {\n        // Adapted from the function created by @ShadowScripter\n        // and adapted by @BillBarry on the Stack Exchange Code Review website.\n        // The original code can be found at\n        // http://codereview.stackexchange.com/q/13338\n        // and was designed to be used with the Sizzle selector engine.\n        var $el = $(el);\n        var overflowX = el.style.overflowX;\n        var overflowY = el.style.overflowY; //Check both x and y declarations\n\n        if (overflowX === overflowY && (overflowY === 'hidden' || overflowY === 'visible')) {\n          return false;\n        }\n\n        if (overflowX === 'scroll' || overflowY === 'scroll') {\n          return true;\n        }\n\n        return $el.innerHeight() < el.scrollHeight || $el.innerWidth() < el.scrollWidth;\n      };\n\n      Utils.escapeMarkup = function (markup) {\n        var replaceMap = {\n          '\\\\': '&#92;',\n          '&': '&amp;',\n          '<': '&lt;',\n          '>': '&gt;',\n          '\"': '&quot;',\n          '\\'': '&#39;',\n          '/': '&#47;'\n        }; // Do not try to escape the markup if it's not a string\n\n        if (typeof markup !== 'string') {\n          return markup;\n        }\n\n        return String(markup).replace(/[&<>\"'\\/\\\\]/g, function (match) {\n          return replaceMap[match];\n        });\n      }; // Append an array of jQuery nodes to a given element.\n\n\n      Utils.appendMany = function ($element, $nodes) {\n        // jQuery 1.7.x does not support $.fn.append() with an array\n        // Fall back to a jQuery object collection using $.fn.add()\n        if ($.fn.jquery.substr(0, 3) === '1.7') {\n          var $jqNodes = $();\n          $.map($nodes, function (node) {\n            $jqNodes = $jqNodes.add(node);\n          });\n          $nodes = $jqNodes;\n        }\n\n        $element.append($nodes);\n      }; // Cache objects in Utils.__cache instead of $.data (see #4346)\n\n\n      Utils.__cache = {};\n      var id = 0;\n\n      Utils.GetUniqueElementId = function (element) {\n        // Get a unique element Id. If element has no id,\n        // creates a new unique number, stores it in the id\n        // attribute and returns the new id.\n        // If an id already exists, it simply returns it.\n        var select2Id = element.getAttribute('data-select2-id');\n\n        if (select2Id == null) {\n          // If element has id, use it.\n          if (element.id) {\n            select2Id = element.id;\n            element.setAttribute('data-select2-id', select2Id);\n          } else {\n            element.setAttribute('data-select2-id', ++id);\n            select2Id = id.toString();\n          }\n        }\n\n        return select2Id;\n      };\n\n      Utils.StoreData = function (element, name, value) {\n        // Stores an item in the cache for a specified element.\n        // name is the cache key.\n        var id = Utils.GetUniqueElementId(element);\n\n        if (!Utils.__cache[id]) {\n          Utils.__cache[id] = {};\n        }\n\n        Utils.__cache[id][name] = value;\n      };\n\n      Utils.GetData = function (element, name) {\n        // Retrieves a value from the cache by its key (name)\n        // name is optional. If no name specified, return\n        // all cache items for the specified element.\n        // and for a specified element.\n        var id = Utils.GetUniqueElementId(element);\n\n        if (name) {\n          if (Utils.__cache[id]) {\n            if (Utils.__cache[id][name] != null) {\n              return Utils.__cache[id][name];\n            }\n\n            return $(element).data(name); // Fallback to HTML5 data attribs.\n          }\n\n          return $(element).data(name); // Fallback to HTML5 data attribs.\n        } else {\n          return Utils.__cache[id];\n        }\n      };\n\n      Utils.RemoveData = function (element) {\n        // Removes all cached items for a specified element.\n        var id = Utils.GetUniqueElementId(element);\n\n        if (Utils.__cache[id] != null) {\n          delete Utils.__cache[id];\n        }\n\n        element.removeAttribute('data-select2-id');\n      };\n\n      return Utils;\n    });\n    S2.define('select2/results', ['jquery', './utils'], function ($, Utils) {\n      function Results($element, options, dataAdapter) {\n        this.$element = $element;\n        this.data = dataAdapter;\n        this.options = options;\n\n        Results.__super__.constructor.call(this);\n      }\n\n      Utils.Extend(Results, Utils.Observable);\n\n      Results.prototype.render = function () {\n        var $results = $('<ul class=\"select2-results__options\" role=\"listbox\"></ul>');\n\n        if (this.options.get('multiple')) {\n          $results.attr('aria-multiselectable', 'true');\n        }\n\n        this.$results = $results;\n        return $results;\n      };\n\n      Results.prototype.clear = function () {\n        this.$results.empty();\n      };\n\n      Results.prototype.displayMessage = function (params) {\n        var escapeMarkup = this.options.get('escapeMarkup');\n        this.clear();\n        this.hideLoading();\n        var $message = $('<li role=\"alert\" aria-live=\"assertive\"' + ' class=\"select2-results__option\"></li>');\n        var message = this.options.get('translations').get(params.message);\n        $message.append(escapeMarkup(message(params.args)));\n        $message[0].className += ' select2-results__message';\n        this.$results.append($message);\n      };\n\n      Results.prototype.hideMessages = function () {\n        this.$results.find('.select2-results__message').remove();\n      };\n\n      Results.prototype.append = function (data) {\n        this.hideLoading();\n        var $options = [];\n\n        if (data.results == null || data.results.length === 0) {\n          if (this.$results.children().length === 0) {\n            this.trigger('results:message', {\n              message: 'noResults'\n            });\n          }\n\n          return;\n        }\n\n        data.results = this.sort(data.results);\n\n        for (var d = 0; d < data.results.length; d++) {\n          var item = data.results[d];\n          var $option = this.option(item);\n          $options.push($option);\n        }\n\n        this.$results.append($options);\n      };\n\n      Results.prototype.position = function ($results, $dropdown) {\n        var $resultsContainer = $dropdown.find('.select2-results');\n        $resultsContainer.append($results);\n      };\n\n      Results.prototype.sort = function (data) {\n        var sorter = this.options.get('sorter');\n        return sorter(data);\n      };\n\n      Results.prototype.highlightFirstItem = function () {\n        var $options = this.$results.find('.select2-results__option[aria-selected]');\n        var $selected = $options.filter('[aria-selected=true]'); // Check if there are any selected options\n\n        if ($selected.length > 0) {\n          // If there are selected options, highlight the first\n          $selected.first().trigger('mouseenter');\n        } else {\n          // If there are no selected options, highlight the first option\n          // in the dropdown\n          $options.first().trigger('mouseenter');\n        }\n\n        this.ensureHighlightVisible();\n      };\n\n      Results.prototype.setClasses = function () {\n        var self = this;\n        this.data.current(function (selected) {\n          var selectedIds = $.map(selected, function (s) {\n            return s.id.toString();\n          });\n          var $options = self.$results.find('.select2-results__option[aria-selected]');\n          $options.each(function () {\n            var $option = $(this);\n            var item = Utils.GetData(this, 'data'); // id needs to be converted to a string when comparing\n\n            var id = '' + item.id;\n\n            if (item.element != null && item.element.selected || item.element == null && $.inArray(id, selectedIds) > -1) {\n              $option.attr('aria-selected', 'true');\n            } else {\n              $option.attr('aria-selected', 'false');\n            }\n          });\n        });\n      };\n\n      Results.prototype.showLoading = function (params) {\n        this.hideLoading();\n        var loadingMore = this.options.get('translations').get('searching');\n        var loading = {\n          disabled: true,\n          loading: true,\n          text: loadingMore(params)\n        };\n        var $loading = this.option(loading);\n        $loading.className += ' loading-results';\n        this.$results.prepend($loading);\n      };\n\n      Results.prototype.hideLoading = function () {\n        this.$results.find('.loading-results').remove();\n      };\n\n      Results.prototype.option = function (data) {\n        var option = document.createElement('li');\n        option.className = 'select2-results__option';\n        var attrs = {\n          'role': 'option',\n          'aria-selected': 'false'\n        };\n        var matches = window.Element.prototype.matches || window.Element.prototype.msMatchesSelector || window.Element.prototype.webkitMatchesSelector;\n\n        if (data.element != null && matches.call(data.element, ':disabled') || data.element == null && data.disabled) {\n          delete attrs['aria-selected'];\n          attrs['aria-disabled'] = 'true';\n        }\n\n        if (data.id == null) {\n          delete attrs['aria-selected'];\n        }\n\n        if (data._resultId != null) {\n          option.id = data._resultId;\n        }\n\n        if (data.title) {\n          option.title = data.title;\n        }\n\n        if (data.children) {\n          attrs.role = 'group';\n          attrs['aria-label'] = data.text;\n          delete attrs['aria-selected'];\n        }\n\n        for (var attr in attrs) {\n          var val = attrs[attr];\n          option.setAttribute(attr, val);\n        }\n\n        if (data.children) {\n          var $option = $(option);\n          var label = document.createElement('strong');\n          label.className = 'select2-results__group';\n          var $label = $(label);\n          this.template(data, label);\n          var $children = [];\n\n          for (var c = 0; c < data.children.length; c++) {\n            var child = data.children[c];\n            var $child = this.option(child);\n            $children.push($child);\n          }\n\n          var $childrenContainer = $('<ul></ul>', {\n            'class': 'select2-results__options select2-results__options--nested'\n          });\n          $childrenContainer.append($children);\n          $option.append(label);\n          $option.append($childrenContainer);\n        } else {\n          this.template(data, option);\n        }\n\n        Utils.StoreData(option, 'data', data);\n        return option;\n      };\n\n      Results.prototype.bind = function (container, $container) {\n        var self = this;\n        var id = container.id + '-results';\n        this.$results.attr('id', id);\n        container.on('results:all', function (params) {\n          self.clear();\n          self.append(params.data);\n\n          if (container.isOpen()) {\n            self.setClasses();\n            self.highlightFirstItem();\n          }\n        });\n        container.on('results:append', function (params) {\n          self.append(params.data);\n\n          if (container.isOpen()) {\n            self.setClasses();\n          }\n        });\n        container.on('query', function (params) {\n          self.hideMessages();\n          self.showLoading(params);\n        });\n        container.on('select', function () {\n          if (!container.isOpen()) {\n            return;\n          }\n\n          self.setClasses();\n\n          if (self.options.get('scrollAfterSelect')) {\n            self.highlightFirstItem();\n          }\n        });\n        container.on('unselect', function () {\n          if (!container.isOpen()) {\n            return;\n          }\n\n          self.setClasses();\n\n          if (self.options.get('scrollAfterSelect')) {\n            self.highlightFirstItem();\n          }\n        });\n        container.on('open', function () {\n          // When the dropdown is open, aria-expended=\"true\"\n          self.$results.attr('aria-expanded', 'true');\n          self.$results.attr('aria-hidden', 'false');\n          self.setClasses();\n          self.ensureHighlightVisible();\n        });\n        container.on('close', function () {\n          // When the dropdown is closed, aria-expended=\"false\"\n          self.$results.attr('aria-expanded', 'false');\n          self.$results.attr('aria-hidden', 'true');\n          self.$results.removeAttr('aria-activedescendant');\n        });\n        container.on('results:toggle', function () {\n          var $highlighted = self.getHighlightedResults();\n\n          if ($highlighted.length === 0) {\n            return;\n          }\n\n          $highlighted.trigger('mouseup');\n        });\n        container.on('results:select', function () {\n          var $highlighted = self.getHighlightedResults();\n\n          if ($highlighted.length === 0) {\n            return;\n          }\n\n          var data = Utils.GetData($highlighted[0], 'data');\n\n          if ($highlighted.attr('aria-selected') == 'true') {\n            self.trigger('close', {});\n          } else {\n            self.trigger('select', {\n              data: data\n            });\n          }\n        });\n        container.on('results:previous', function () {\n          var $highlighted = self.getHighlightedResults();\n          var $options = self.$results.find('[aria-selected]');\n          var currentIndex = $options.index($highlighted); // If we are already at the top, don't move further\n          // If no options, currentIndex will be -1\n\n          if (currentIndex <= 0) {\n            return;\n          }\n\n          var nextIndex = currentIndex - 1; // If none are highlighted, highlight the first\n\n          if ($highlighted.length === 0) {\n            nextIndex = 0;\n          }\n\n          var $next = $options.eq(nextIndex);\n          $next.trigger('mouseenter');\n          var currentOffset = self.$results.offset().top;\n          var nextTop = $next.offset().top;\n          var nextOffset = self.$results.scrollTop() + (nextTop - currentOffset);\n\n          if (nextIndex === 0) {\n            self.$results.scrollTop(0);\n          } else if (nextTop - currentOffset < 0) {\n            self.$results.scrollTop(nextOffset);\n          }\n        });\n        container.on('results:next', function () {\n          var $highlighted = self.getHighlightedResults();\n          var $options = self.$results.find('[aria-selected]');\n          var currentIndex = $options.index($highlighted);\n          var nextIndex = currentIndex + 1; // If we are at the last option, stay there\n\n          if (nextIndex >= $options.length) {\n            return;\n          }\n\n          var $next = $options.eq(nextIndex);\n          $next.trigger('mouseenter');\n          var currentOffset = self.$results.offset().top + self.$results.outerHeight(false);\n          var nextBottom = $next.offset().top + $next.outerHeight(false);\n          var nextOffset = self.$results.scrollTop() + nextBottom - currentOffset;\n\n          if (nextIndex === 0) {\n            self.$results.scrollTop(0);\n          } else if (nextBottom > currentOffset) {\n            self.$results.scrollTop(nextOffset);\n          }\n        });\n        container.on('results:focus', function (params) {\n          params.element.addClass('select2-results__option--highlighted');\n        });\n        container.on('results:message', function (params) {\n          self.displayMessage(params);\n        });\n\n        if ($.fn.mousewheel) {\n          this.$results.on('mousewheel', function (e) {\n            var top = self.$results.scrollTop();\n            var bottom = self.$results.get(0).scrollHeight - top + e.deltaY;\n            var isAtTop = e.deltaY > 0 && top - e.deltaY <= 0;\n            var isAtBottom = e.deltaY < 0 && bottom <= self.$results.height();\n\n            if (isAtTop) {\n              self.$results.scrollTop(0);\n              e.preventDefault();\n              e.stopPropagation();\n            } else if (isAtBottom) {\n              self.$results.scrollTop(self.$results.get(0).scrollHeight - self.$results.height());\n              e.preventDefault();\n              e.stopPropagation();\n            }\n          });\n        }\n\n        this.$results.on('mouseup', '.select2-results__option[aria-selected]', function (evt) {\n          var $this = $(this);\n          var data = Utils.GetData(this, 'data');\n\n          if ($this.attr('aria-selected') === 'true') {\n            if (self.options.get('multiple')) {\n              self.trigger('unselect', {\n                originalEvent: evt,\n                data: data\n              });\n            } else {\n              self.trigger('close', {});\n            }\n\n            return;\n          }\n\n          self.trigger('select', {\n            originalEvent: evt,\n            data: data\n          });\n        });\n        this.$results.on('mouseenter', '.select2-results__option[aria-selected]', function (evt) {\n          var data = Utils.GetData(this, 'data');\n          self.getHighlightedResults().removeClass('select2-results__option--highlighted');\n          self.trigger('results:focus', {\n            data: data,\n            element: $(this)\n          });\n        });\n      };\n\n      Results.prototype.getHighlightedResults = function () {\n        var $highlighted = this.$results.find('.select2-results__option--highlighted');\n        return $highlighted;\n      };\n\n      Results.prototype.destroy = function () {\n        this.$results.remove();\n      };\n\n      Results.prototype.ensureHighlightVisible = function () {\n        var $highlighted = this.getHighlightedResults();\n\n        if ($highlighted.length === 0) {\n          return;\n        }\n\n        var $options = this.$results.find('[aria-selected]');\n        var currentIndex = $options.index($highlighted);\n        var currentOffset = this.$results.offset().top;\n        var nextTop = $highlighted.offset().top;\n        var nextOffset = this.$results.scrollTop() + (nextTop - currentOffset);\n        var offsetDelta = nextTop - currentOffset;\n        nextOffset -= $highlighted.outerHeight(false) * 2;\n\n        if (currentIndex <= 2) {\n          this.$results.scrollTop(0);\n        } else if (offsetDelta > this.$results.outerHeight() || offsetDelta < 0) {\n          this.$results.scrollTop(nextOffset);\n        }\n      };\n\n      Results.prototype.template = function (result, container) {\n        var template = this.options.get('templateResult');\n        var escapeMarkup = this.options.get('escapeMarkup');\n        var content = template(result, container);\n\n        if (content == null) {\n          container.style.display = 'none';\n        } else if (typeof content === 'string') {\n          container.innerHTML = escapeMarkup(content);\n        } else {\n          $(container).append(content);\n        }\n      };\n\n      return Results;\n    });\n    S2.define('select2/keys', [], function () {\n      var KEYS = {\n        BACKSPACE: 8,\n        TAB: 9,\n        ENTER: 13,\n        SHIFT: 16,\n        CTRL: 17,\n        ALT: 18,\n        ESC: 27,\n        SPACE: 32,\n        PAGE_UP: 33,\n        PAGE_DOWN: 34,\n        END: 35,\n        HOME: 36,\n        LEFT: 37,\n        UP: 38,\n        RIGHT: 39,\n        DOWN: 40,\n        DELETE: 46\n      };\n      return KEYS;\n    });\n    S2.define('select2/selection/base', ['jquery', '../utils', '../keys'], function ($, Utils, KEYS) {\n      function BaseSelection($element, options) {\n        this.$element = $element;\n        this.options = options;\n\n        BaseSelection.__super__.constructor.call(this);\n      }\n\n      Utils.Extend(BaseSelection, Utils.Observable);\n\n      BaseSelection.prototype.render = function () {\n        var $selection = $('<span class=\"select2-selection\" role=\"combobox\" ' + ' aria-haspopup=\"true\" aria-expanded=\"false\">' + '</span>');\n        this._tabindex = 0;\n\n        if (Utils.GetData(this.$element[0], 'old-tabindex') != null) {\n          this._tabindex = Utils.GetData(this.$element[0], 'old-tabindex');\n        } else if (this.$element.attr('tabindex') != null) {\n          this._tabindex = this.$element.attr('tabindex');\n        }\n\n        $selection.attr('title', this.$element.attr('title'));\n        $selection.attr('tabindex', this._tabindex);\n        $selection.attr('aria-disabled', 'false');\n        this.$selection = $selection;\n        return $selection;\n      };\n\n      BaseSelection.prototype.bind = function (container, $container) {\n        var self = this;\n        var resultsId = container.id + '-results';\n        this.container = container;\n        this.$selection.on('focus', function (evt) {\n          self.trigger('focus', evt);\n        });\n        this.$selection.on('blur', function (evt) {\n          self._handleBlur(evt);\n        });\n        this.$selection.on('keydown', function (evt) {\n          self.trigger('keypress', evt);\n\n          if (evt.which === KEYS.SPACE) {\n            evt.preventDefault();\n          }\n        });\n        container.on('results:focus', function (params) {\n          self.$selection.attr('aria-activedescendant', params.data._resultId);\n        });\n        container.on('selection:update', function (params) {\n          self.update(params.data);\n        });\n        container.on('open', function () {\n          // When the dropdown is open, aria-expanded=\"true\"\n          self.$selection.attr('aria-expanded', 'true');\n          self.$selection.attr('aria-owns', resultsId);\n\n          self._attachCloseHandler(container);\n        });\n        container.on('close', function () {\n          // When the dropdown is closed, aria-expanded=\"false\"\n          self.$selection.attr('aria-expanded', 'false');\n          self.$selection.removeAttr('aria-activedescendant');\n          self.$selection.removeAttr('aria-owns');\n          self.$selection.trigger('focus');\n\n          self._detachCloseHandler(container);\n        });\n        container.on('enable', function () {\n          self.$selection.attr('tabindex', self._tabindex);\n          self.$selection.attr('aria-disabled', 'false');\n        });\n        container.on('disable', function () {\n          self.$selection.attr('tabindex', '-1');\n          self.$selection.attr('aria-disabled', 'true');\n        });\n      };\n\n      BaseSelection.prototype._handleBlur = function (evt) {\n        var self = this; // This needs to be delayed as the active element is the body when the tab\n        // key is pressed, possibly along with others.\n\n        window.setTimeout(function () {\n          // Don't trigger `blur` if the focus is still in the selection\n          if (document.activeElement == self.$selection[0] || $.contains(self.$selection[0], document.activeElement)) {\n            return;\n          }\n\n          self.trigger('blur', evt);\n        }, 1);\n      };\n\n      BaseSelection.prototype._attachCloseHandler = function (container) {\n        $(document.body).on('mousedown.select2.' + container.id, function (e) {\n          var $target = $(e.target);\n          var $select = $target.closest('.select2');\n          var $all = $('.select2.select2-container--open');\n          $all.each(function () {\n            if (this == $select[0]) {\n              return;\n            }\n\n            var $element = Utils.GetData(this, 'element');\n            $element.select2('close');\n          });\n        });\n      };\n\n      BaseSelection.prototype._detachCloseHandler = function (container) {\n        $(document.body).off('mousedown.select2.' + container.id);\n      };\n\n      BaseSelection.prototype.position = function ($selection, $container) {\n        var $selectionContainer = $container.find('.selection');\n        $selectionContainer.append($selection);\n      };\n\n      BaseSelection.prototype.destroy = function () {\n        this._detachCloseHandler(this.container);\n      };\n\n      BaseSelection.prototype.update = function (data) {\n        throw new Error('The `update` method must be defined in child classes.');\n      };\n      /**\n       * Helper method to abstract the \"enabled\" (not \"disabled\") state of this\n       * object.\n       *\n       * @return {true} if the instance is not disabled.\n       * @return {false} if the instance is disabled.\n       */\n\n\n      BaseSelection.prototype.isEnabled = function () {\n        return !this.isDisabled();\n      };\n      /**\n       * Helper method to abstract the \"disabled\" state of this object.\n       *\n       * @return {true} if the disabled option is true.\n       * @return {false} if the disabled option is false.\n       */\n\n\n      BaseSelection.prototype.isDisabled = function () {\n        return this.options.get('disabled');\n      };\n\n      return BaseSelection;\n    });\n    S2.define('select2/selection/single', ['jquery', './base', '../utils', '../keys'], function ($, BaseSelection, Utils, KEYS) {\n      function SingleSelection() {\n        SingleSelection.__super__.constructor.apply(this, arguments);\n      }\n\n      Utils.Extend(SingleSelection, BaseSelection);\n\n      SingleSelection.prototype.render = function () {\n        var $selection = SingleSelection.__super__.render.call(this);\n\n        $selection.addClass('select2-selection--single');\n        $selection.html('<span class=\"select2-selection__rendered\"></span>' + '<span class=\"select2-selection__arrow\" role=\"presentation\">' + '<b role=\"presentation\"></b>' + '</span>');\n        return $selection;\n      };\n\n      SingleSelection.prototype.bind = function (container, $container) {\n        var self = this;\n\n        SingleSelection.__super__.bind.apply(this, arguments);\n\n        var id = container.id + '-container';\n        this.$selection.find('.select2-selection__rendered').attr('id', id).attr('role', 'textbox').attr('aria-readonly', 'true');\n        this.$selection.attr('aria-labelledby', id);\n        this.$selection.on('mousedown', function (evt) {\n          // Only respond to left clicks\n          if (evt.which !== 1) {\n            return;\n          }\n\n          self.trigger('toggle', {\n            originalEvent: evt\n          });\n        });\n        this.$selection.on('focus', function (evt) {// User focuses on the container\n        });\n        this.$selection.on('blur', function (evt) {// User exits the container\n        });\n        container.on('focus', function (evt) {\n          if (!container.isOpen()) {\n            self.$selection.trigger('focus');\n          }\n        });\n      };\n\n      SingleSelection.prototype.clear = function () {\n        var $rendered = this.$selection.find('.select2-selection__rendered');\n        $rendered.empty();\n        $rendered.removeAttr('title'); // clear tooltip on empty\n      };\n\n      SingleSelection.prototype.display = function (data, container) {\n        var template = this.options.get('templateSelection');\n        var escapeMarkup = this.options.get('escapeMarkup');\n        return escapeMarkup(template(data, container));\n      };\n\n      SingleSelection.prototype.selectionContainer = function () {\n        return $('<span></span>');\n      };\n\n      SingleSelection.prototype.update = function (data) {\n        if (data.length === 0) {\n          this.clear();\n          return;\n        }\n\n        var selection = data[0];\n        var $rendered = this.$selection.find('.select2-selection__rendered');\n        var formatted = this.display(selection, $rendered);\n        $rendered.empty().append(formatted);\n        var title = selection.title || selection.text;\n\n        if (title) {\n          $rendered.attr('title', title);\n        } else {\n          $rendered.removeAttr('title');\n        }\n      };\n\n      return SingleSelection;\n    });\n    S2.define('select2/selection/multiple', ['jquery', './base', '../utils'], function ($, BaseSelection, Utils) {\n      function MultipleSelection($element, options) {\n        MultipleSelection.__super__.constructor.apply(this, arguments);\n      }\n\n      Utils.Extend(MultipleSelection, BaseSelection);\n\n      MultipleSelection.prototype.render = function () {\n        var $selection = MultipleSelection.__super__.render.call(this);\n\n        $selection.addClass('select2-selection--multiple');\n        $selection.html('<ul class=\"select2-selection__rendered\"></ul>');\n        return $selection;\n      };\n\n      MultipleSelection.prototype.bind = function (container, $container) {\n        var self = this;\n\n        MultipleSelection.__super__.bind.apply(this, arguments);\n\n        this.$selection.on('click', function (evt) {\n          self.trigger('toggle', {\n            originalEvent: evt\n          });\n        });\n        this.$selection.on('click', '.select2-selection__choice__remove', function (evt) {\n          // Ignore the event if it is disabled\n          if (self.isDisabled()) {\n            return;\n          }\n\n          var $remove = $(this);\n          var $selection = $remove.parent();\n          var data = Utils.GetData($selection[0], 'data');\n          self.trigger('unselect', {\n            originalEvent: evt,\n            data: data\n          });\n        });\n      };\n\n      MultipleSelection.prototype.clear = function () {\n        var $rendered = this.$selection.find('.select2-selection__rendered');\n        $rendered.empty();\n        $rendered.removeAttr('title');\n      };\n\n      MultipleSelection.prototype.display = function (data, container) {\n        var template = this.options.get('templateSelection');\n        var escapeMarkup = this.options.get('escapeMarkup');\n        return escapeMarkup(template(data, container));\n      };\n\n      MultipleSelection.prototype.selectionContainer = function () {\n        var $container = $('<li class=\"select2-selection__choice\">' + '<span class=\"select2-selection__choice__remove\" role=\"presentation\">' + '&times;' + '</span>' + '</li>');\n        return $container;\n      };\n\n      MultipleSelection.prototype.update = function (data) {\n        this.clear();\n\n        if (data.length === 0) {\n          return;\n        }\n\n        var $selections = [];\n\n        for (var d = 0; d < data.length; d++) {\n          var selection = data[d];\n          var $selection = this.selectionContainer();\n          var formatted = this.display(selection, $selection);\n          $selection.append(formatted);\n          var title = selection.title || selection.text;\n\n          if (title) {\n            $selection.attr('title', title);\n          }\n\n          Utils.StoreData($selection[0], 'data', selection);\n          $selections.push($selection);\n        }\n\n        var $rendered = this.$selection.find('.select2-selection__rendered');\n        Utils.appendMany($rendered, $selections);\n      };\n\n      return MultipleSelection;\n    });\n    S2.define('select2/selection/placeholder', ['../utils'], function (Utils) {\n      function Placeholder(decorated, $element, options) {\n        this.placeholder = this.normalizePlaceholder(options.get('placeholder'));\n        decorated.call(this, $element, options);\n      }\n\n      Placeholder.prototype.normalizePlaceholder = function (_, placeholder) {\n        if (typeof placeholder === 'string') {\n          placeholder = {\n            id: '',\n            text: placeholder\n          };\n        }\n\n        return placeholder;\n      };\n\n      Placeholder.prototype.createPlaceholder = function (decorated, placeholder) {\n        var $placeholder = this.selectionContainer();\n        $placeholder.html(this.display(placeholder));\n        $placeholder.addClass('select2-selection__placeholder').removeClass('select2-selection__choice');\n        return $placeholder;\n      };\n\n      Placeholder.prototype.update = function (decorated, data) {\n        var singlePlaceholder = data.length == 1 && data[0].id != this.placeholder.id;\n        var multipleSelections = data.length > 1;\n\n        if (multipleSelections || singlePlaceholder) {\n          return decorated.call(this, data);\n        }\n\n        this.clear();\n        var $placeholder = this.createPlaceholder(this.placeholder);\n        this.$selection.find('.select2-selection__rendered').append($placeholder);\n      };\n\n      return Placeholder;\n    });\n    S2.define('select2/selection/allowClear', ['jquery', '../keys', '../utils'], function ($, KEYS, Utils) {\n      function AllowClear() {}\n\n      AllowClear.prototype.bind = function (decorated, container, $container) {\n        var self = this;\n        decorated.call(this, container, $container);\n\n        if (this.placeholder == null) {\n          if (this.options.get('debug') && window.console && console.error) {\n            console.error('Select2: The `allowClear` option should be used in combination ' + 'with the `placeholder` option.');\n          }\n        }\n\n        this.$selection.on('mousedown', '.select2-selection__clear', function (evt) {\n          self._handleClear(evt);\n        });\n        container.on('keypress', function (evt) {\n          self._handleKeyboardClear(evt, container);\n        });\n      };\n\n      AllowClear.prototype._handleClear = function (_, evt) {\n        // Ignore the event if it is disabled\n        if (this.isDisabled()) {\n          return;\n        }\n\n        var $clear = this.$selection.find('.select2-selection__clear'); // Ignore the event if nothing has been selected\n\n        if ($clear.length === 0) {\n          return;\n        }\n\n        evt.stopPropagation();\n        var data = Utils.GetData($clear[0], 'data');\n        var previousVal = this.$element.val();\n        this.$element.val(this.placeholder.id);\n        var unselectData = {\n          data: data\n        };\n        this.trigger('clear', unselectData);\n\n        if (unselectData.prevented) {\n          this.$element.val(previousVal);\n          return;\n        }\n\n        for (var d = 0; d < data.length; d++) {\n          unselectData = {\n            data: data[d]\n          }; // Trigger the `unselect` event, so people can prevent it from being\n          // cleared.\n\n          this.trigger('unselect', unselectData); // If the event was prevented, don't clear it out.\n\n          if (unselectData.prevented) {\n            this.$element.val(previousVal);\n            return;\n          }\n        }\n\n        this.$element.trigger('input').trigger('change');\n        this.trigger('toggle', {});\n      };\n\n      AllowClear.prototype._handleKeyboardClear = function (_, evt, container) {\n        if (container.isOpen()) {\n          return;\n        }\n\n        if (evt.which == KEYS.DELETE || evt.which == KEYS.BACKSPACE) {\n          this._handleClear(evt);\n        }\n      };\n\n      AllowClear.prototype.update = function (decorated, data) {\n        decorated.call(this, data);\n\n        if (this.$selection.find('.select2-selection__placeholder').length > 0 || data.length === 0) {\n          return;\n        }\n\n        var removeAll = this.options.get('translations').get('removeAllItems');\n        var $remove = $('<span class=\"select2-selection__clear\" title=\"' + removeAll() + '\">' + '&times;' + '</span>');\n        Utils.StoreData($remove[0], 'data', data);\n        this.$selection.find('.select2-selection__rendered').prepend($remove);\n      };\n\n      return AllowClear;\n    });\n    S2.define('select2/selection/search', ['jquery', '../utils', '../keys'], function ($, Utils, KEYS) {\n      function Search(decorated, $element, options) {\n        decorated.call(this, $element, options);\n      }\n\n      Search.prototype.render = function (decorated) {\n        var $search = $('<li class=\"select2-search select2-search--inline\">' + '<input class=\"select2-search__field\" type=\"search\" tabindex=\"-1\"' + ' autocomplete=\"off\" autocorrect=\"off\" autocapitalize=\"none\"' + ' spellcheck=\"false\" role=\"searchbox\" aria-autocomplete=\"list\" />' + '</li>');\n        this.$searchContainer = $search;\n        this.$search = $search.find('input');\n        var $rendered = decorated.call(this);\n\n        this._transferTabIndex();\n\n        return $rendered;\n      };\n\n      Search.prototype.bind = function (decorated, container, $container) {\n        var self = this;\n        var resultsId = container.id + '-results';\n        decorated.call(this, container, $container);\n        container.on('open', function () {\n          self.$search.attr('aria-controls', resultsId);\n          self.$search.trigger('focus');\n        });\n        container.on('close', function () {\n          self.$search.val('');\n          self.$search.removeAttr('aria-controls');\n          self.$search.removeAttr('aria-activedescendant');\n          self.$search.trigger('focus');\n        });\n        container.on('enable', function () {\n          self.$search.prop('disabled', false);\n\n          self._transferTabIndex();\n        });\n        container.on('disable', function () {\n          self.$search.prop('disabled', true);\n        });\n        container.on('focus', function (evt) {\n          self.$search.trigger('focus');\n        });\n        container.on('results:focus', function (params) {\n          if (params.data._resultId) {\n            self.$search.attr('aria-activedescendant', params.data._resultId);\n          } else {\n            self.$search.removeAttr('aria-activedescendant');\n          }\n        });\n        this.$selection.on('focusin', '.select2-search--inline', function (evt) {\n          self.trigger('focus', evt);\n        });\n        this.$selection.on('focusout', '.select2-search--inline', function (evt) {\n          self._handleBlur(evt);\n        });\n        this.$selection.on('keydown', '.select2-search--inline', function (evt) {\n          evt.stopPropagation();\n          self.trigger('keypress', evt);\n          self._keyUpPrevented = evt.isDefaultPrevented();\n          var key = evt.which;\n\n          if (key === KEYS.BACKSPACE && self.$search.val() === '') {\n            var $previousChoice = self.$searchContainer.prev('.select2-selection__choice');\n\n            if ($previousChoice.length > 0) {\n              var item = Utils.GetData($previousChoice[0], 'data');\n              self.searchRemoveChoice(item);\n              evt.preventDefault();\n            }\n          }\n        });\n        this.$selection.on('click', '.select2-search--inline', function (evt) {\n          if (self.$search.val()) {\n            evt.stopPropagation();\n          }\n        }); // Try to detect the IE version should the `documentMode` property that\n        // is stored on the document. This is only implemented in IE and is\n        // slightly cleaner than doing a user agent check.\n        // This property is not available in Edge, but Edge also doesn't have\n        // this bug.\n\n        var msie = document.documentMode;\n        var disableInputEvents = msie && msie <= 11; // Workaround for browsers which do not support the `input` event\n        // This will prevent double-triggering of events for browsers which support\n        // both the `keyup` and `input` events.\n\n        this.$selection.on('input.searchcheck', '.select2-search--inline', function (evt) {\n          // IE will trigger the `input` event when a placeholder is used on a\n          // search box. To get around this issue, we are forced to ignore all\n          // `input` events in IE and keep using `keyup`.\n          if (disableInputEvents) {\n            self.$selection.off('input.search input.searchcheck');\n            return;\n          } // Unbind the duplicated `keyup` event\n\n\n          self.$selection.off('keyup.search');\n        });\n        this.$selection.on('keyup.search input.search', '.select2-search--inline', function (evt) {\n          // IE will trigger the `input` event when a placeholder is used on a\n          // search box. To get around this issue, we are forced to ignore all\n          // `input` events in IE and keep using `keyup`.\n          if (disableInputEvents && evt.type === 'input') {\n            self.$selection.off('input.search input.searchcheck');\n            return;\n          }\n\n          var key = evt.which; // We can freely ignore events from modifier keys\n\n          if (key == KEYS.SHIFT || key == KEYS.CTRL || key == KEYS.ALT) {\n            return;\n          } // Tabbing will be handled during the `keydown` phase\n\n\n          if (key == KEYS.TAB) {\n            return;\n          }\n\n          self.handleSearch(evt);\n        });\n      };\n      /**\n       * This method will transfer the tabindex attribute from the rendered\n       * selection to the search box. This allows for the search box to be used as\n       * the primary focus instead of the selection container.\n       *\n       * @private\n       */\n\n\n      Search.prototype._transferTabIndex = function (decorated) {\n        this.$search.attr('tabindex', this.$selection.attr('tabindex'));\n        this.$selection.attr('tabindex', '-1');\n      };\n\n      Search.prototype.createPlaceholder = function (decorated, placeholder) {\n        this.$search.attr('placeholder', placeholder.text);\n      };\n\n      Search.prototype.update = function (decorated, data) {\n        var searchHadFocus = this.$search[0] == document.activeElement;\n        this.$search.attr('placeholder', '');\n        decorated.call(this, data);\n        this.$selection.find('.select2-selection__rendered').append(this.$searchContainer);\n        this.resizeSearch();\n\n        if (searchHadFocus) {\n          this.$search.trigger('focus');\n        }\n      };\n\n      Search.prototype.handleSearch = function () {\n        this.resizeSearch();\n\n        if (!this._keyUpPrevented) {\n          var input = this.$search.val();\n          this.trigger('query', {\n            term: input\n          });\n        }\n\n        this._keyUpPrevented = false;\n      };\n\n      Search.prototype.searchRemoveChoice = function (decorated, item) {\n        this.trigger('unselect', {\n          data: item\n        });\n        this.$search.val(item.text);\n        this.handleSearch();\n      };\n\n      Search.prototype.resizeSearch = function () {\n        this.$search.css('width', '25px');\n        var width = '';\n\n        if (this.$search.attr('placeholder') !== '') {\n          width = this.$selection.find('.select2-selection__rendered').width();\n        } else {\n          var minimumWidth = this.$search.val().length + 1;\n          width = minimumWidth * 0.75 + 'em';\n        }\n\n        this.$search.css('width', width);\n      };\n\n      return Search;\n    });\n    S2.define('select2/selection/eventRelay', ['jquery'], function ($) {\n      function EventRelay() {}\n\n      EventRelay.prototype.bind = function (decorated, container, $container) {\n        var self = this;\n        var relayEvents = ['open', 'opening', 'close', 'closing', 'select', 'selecting', 'unselect', 'unselecting', 'clear', 'clearing'];\n        var preventableEvents = ['opening', 'closing', 'selecting', 'unselecting', 'clearing'];\n        decorated.call(this, container, $container);\n        container.on('*', function (name, params) {\n          // Ignore events that should not be relayed\n          if ($.inArray(name, relayEvents) === -1) {\n            return;\n          } // The parameters should always be an object\n\n\n          params = params || {}; // Generate the jQuery event for the Select2 event\n\n          var evt = $.Event('select2:' + name, {\n            params: params\n          });\n          self.$element.trigger(evt); // Only handle preventable events if it was one\n\n          if ($.inArray(name, preventableEvents) === -1) {\n            return;\n          }\n\n          params.prevented = evt.isDefaultPrevented();\n        });\n      };\n\n      return EventRelay;\n    });\n    S2.define('select2/translation', ['jquery', 'require'], function ($, require) {\n      function Translation(dict) {\n        this.dict = dict || {};\n      }\n\n      Translation.prototype.all = function () {\n        return this.dict;\n      };\n\n      Translation.prototype.get = function (key) {\n        return this.dict[key];\n      };\n\n      Translation.prototype.extend = function (translation) {\n        this.dict = $.extend({}, translation.all(), this.dict);\n      }; // Static functions\n\n\n      Translation._cache = {};\n\n      Translation.loadPath = function (path) {\n        if (!(path in Translation._cache)) {\n          var translations = require(path);\n\n          Translation._cache[path] = translations;\n        }\n\n        return new Translation(Translation._cache[path]);\n      };\n\n      return Translation;\n    });\n    S2.define('select2/diacritics', [], function () {\n      var diacritics = {\n        \"\\u24B6\": 'A',\n        \"\\uFF21\": 'A',\n        \"\\xC0\": 'A',\n        \"\\xC1\": 'A',\n        \"\\xC2\": 'A',\n        \"\\u1EA6\": 'A',\n        \"\\u1EA4\": 'A',\n        \"\\u1EAA\": 'A',\n        \"\\u1EA8\": 'A',\n        \"\\xC3\": 'A',\n        \"\\u0100\": 'A',\n        \"\\u0102\": 'A',\n        \"\\u1EB0\": 'A',\n        \"\\u1EAE\": 'A',\n        \"\\u1EB4\": 'A',\n        \"\\u1EB2\": 'A',\n        \"\\u0226\": 'A',\n        \"\\u01E0\": 'A',\n        \"\\xC4\": 'A',\n        \"\\u01DE\": 'A',\n        \"\\u1EA2\": 'A',\n        \"\\xC5\": 'A',\n        \"\\u01FA\": 'A',\n        \"\\u01CD\": 'A',\n        \"\\u0200\": 'A',\n        \"\\u0202\": 'A',\n        \"\\u1EA0\": 'A',\n        \"\\u1EAC\": 'A',\n        \"\\u1EB6\": 'A',\n        \"\\u1E00\": 'A',\n        \"\\u0104\": 'A',\n        \"\\u023A\": 'A',\n        \"\\u2C6F\": 'A',\n        \"\\uA732\": 'AA',\n        \"\\xC6\": 'AE',\n        \"\\u01FC\": 'AE',\n        \"\\u01E2\": 'AE',\n        \"\\uA734\": 'AO',\n        \"\\uA736\": 'AU',\n        \"\\uA738\": 'AV',\n        \"\\uA73A\": 'AV',\n        \"\\uA73C\": 'AY',\n        \"\\u24B7\": 'B',\n        \"\\uFF22\": 'B',\n        \"\\u1E02\": 'B',\n        \"\\u1E04\": 'B',\n        \"\\u1E06\": 'B',\n        \"\\u0243\": 'B',\n        \"\\u0182\": 'B',\n        \"\\u0181\": 'B',\n        \"\\u24B8\": 'C',\n        \"\\uFF23\": 'C',\n        \"\\u0106\": 'C',\n        \"\\u0108\": 'C',\n        \"\\u010A\": 'C',\n        \"\\u010C\": 'C',\n        \"\\xC7\": 'C',\n        \"\\u1E08\": 'C',\n        \"\\u0187\": 'C',\n        \"\\u023B\": 'C',\n        \"\\uA73E\": 'C',\n        \"\\u24B9\": 'D',\n        \"\\uFF24\": 'D',\n        \"\\u1E0A\": 'D',\n        \"\\u010E\": 'D',\n        \"\\u1E0C\": 'D',\n        \"\\u1E10\": 'D',\n        \"\\u1E12\": 'D',\n        \"\\u1E0E\": 'D',\n        \"\\u0110\": 'D',\n        \"\\u018B\": 'D',\n        \"\\u018A\": 'D',\n        \"\\u0189\": 'D',\n        \"\\uA779\": 'D',\n        \"\\u01F1\": 'DZ',\n        \"\\u01C4\": 'DZ',\n        \"\\u01F2\": 'Dz',\n        \"\\u01C5\": 'Dz',\n        \"\\u24BA\": 'E',\n        \"\\uFF25\": 'E',\n        \"\\xC8\": 'E',\n        \"\\xC9\": 'E',\n        \"\\xCA\": 'E',\n        \"\\u1EC0\": 'E',\n        \"\\u1EBE\": 'E',\n        \"\\u1EC4\": 'E',\n        \"\\u1EC2\": 'E',\n        \"\\u1EBC\": 'E',\n        \"\\u0112\": 'E',\n        \"\\u1E14\": 'E',\n        \"\\u1E16\": 'E',\n        \"\\u0114\": 'E',\n        \"\\u0116\": 'E',\n        \"\\xCB\": 'E',\n        \"\\u1EBA\": 'E',\n        \"\\u011A\": 'E',\n        \"\\u0204\": 'E',\n        \"\\u0206\": 'E',\n        \"\\u1EB8\": 'E',\n        \"\\u1EC6\": 'E',\n        \"\\u0228\": 'E',\n        \"\\u1E1C\": 'E',\n        \"\\u0118\": 'E',\n        \"\\u1E18\": 'E',\n        \"\\u1E1A\": 'E',\n        \"\\u0190\": 'E',\n        \"\\u018E\": 'E',\n        \"\\u24BB\": 'F',\n        \"\\uFF26\": 'F',\n        \"\\u1E1E\": 'F',\n        \"\\u0191\": 'F',\n        \"\\uA77B\": 'F',\n        \"\\u24BC\": 'G',\n        \"\\uFF27\": 'G',\n        \"\\u01F4\": 'G',\n        \"\\u011C\": 'G',\n        \"\\u1E20\": 'G',\n        \"\\u011E\": 'G',\n        \"\\u0120\": 'G',\n        \"\\u01E6\": 'G',\n        \"\\u0122\": 'G',\n        \"\\u01E4\": 'G',\n        \"\\u0193\": 'G',\n        \"\\uA7A0\": 'G',\n        \"\\uA77D\": 'G',\n        \"\\uA77E\": 'G',\n        \"\\u24BD\": 'H',\n        \"\\uFF28\": 'H',\n        \"\\u0124\": 'H',\n        \"\\u1E22\": 'H',\n        \"\\u1E26\": 'H',\n        \"\\u021E\": 'H',\n        \"\\u1E24\": 'H',\n        \"\\u1E28\": 'H',\n        \"\\u1E2A\": 'H',\n        \"\\u0126\": 'H',\n        \"\\u2C67\": 'H',\n        \"\\u2C75\": 'H',\n        \"\\uA78D\": 'H',\n        \"\\u24BE\": 'I',\n        \"\\uFF29\": 'I',\n        \"\\xCC\": 'I',\n        \"\\xCD\": 'I',\n        \"\\xCE\": 'I',\n        \"\\u0128\": 'I',\n        \"\\u012A\": 'I',\n        \"\\u012C\": 'I',\n        \"\\u0130\": 'I',\n        \"\\xCF\": 'I',\n        \"\\u1E2E\": 'I',\n        \"\\u1EC8\": 'I',\n        \"\\u01CF\": 'I',\n        \"\\u0208\": 'I',\n        \"\\u020A\": 'I',\n        \"\\u1ECA\": 'I',\n        \"\\u012E\": 'I',\n        \"\\u1E2C\": 'I',\n        \"\\u0197\": 'I',\n        \"\\u24BF\": 'J',\n        \"\\uFF2A\": 'J',\n        \"\\u0134\": 'J',\n        \"\\u0248\": 'J',\n        \"\\u24C0\": 'K',\n        \"\\uFF2B\": 'K',\n        \"\\u1E30\": 'K',\n        \"\\u01E8\": 'K',\n        \"\\u1E32\": 'K',\n        \"\\u0136\": 'K',\n        \"\\u1E34\": 'K',\n        \"\\u0198\": 'K',\n        \"\\u2C69\": 'K',\n        \"\\uA740\": 'K',\n        \"\\uA742\": 'K',\n        \"\\uA744\": 'K',\n        \"\\uA7A2\": 'K',\n        \"\\u24C1\": 'L',\n        \"\\uFF2C\": 'L',\n        \"\\u013F\": 'L',\n        \"\\u0139\": 'L',\n        \"\\u013D\": 'L',\n        \"\\u1E36\": 'L',\n        \"\\u1E38\": 'L',\n        \"\\u013B\": 'L',\n        \"\\u1E3C\": 'L',\n        \"\\u1E3A\": 'L',\n        \"\\u0141\": 'L',\n        \"\\u023D\": 'L',\n        \"\\u2C62\": 'L',\n        \"\\u2C60\": 'L',\n        \"\\uA748\": 'L',\n        \"\\uA746\": 'L',\n        \"\\uA780\": 'L',\n        \"\\u01C7\": 'LJ',\n        \"\\u01C8\": 'Lj',\n        \"\\u24C2\": 'M',\n        \"\\uFF2D\": 'M',\n        \"\\u1E3E\": 'M',\n        \"\\u1E40\": 'M',\n        \"\\u1E42\": 'M',\n        \"\\u2C6E\": 'M',\n        \"\\u019C\": 'M',\n        \"\\u24C3\": 'N',\n        \"\\uFF2E\": 'N',\n        \"\\u01F8\": 'N',\n        \"\\u0143\": 'N',\n        \"\\xD1\": 'N',\n        \"\\u1E44\": 'N',\n        \"\\u0147\": 'N',\n        \"\\u1E46\": 'N',\n        \"\\u0145\": 'N',\n        \"\\u1E4A\": 'N',\n        \"\\u1E48\": 'N',\n        \"\\u0220\": 'N',\n        \"\\u019D\": 'N',\n        \"\\uA790\": 'N',\n        \"\\uA7A4\": 'N',\n        \"\\u01CA\": 'NJ',\n        \"\\u01CB\": 'Nj',\n        \"\\u24C4\": 'O',\n        \"\\uFF2F\": 'O',\n        \"\\xD2\": 'O',\n        \"\\xD3\": 'O',\n        \"\\xD4\": 'O',\n        \"\\u1ED2\": 'O',\n        \"\\u1ED0\": 'O',\n        \"\\u1ED6\": 'O',\n        \"\\u1ED4\": 'O',\n        \"\\xD5\": 'O',\n        \"\\u1E4C\": 'O',\n        \"\\u022C\": 'O',\n        \"\\u1E4E\": 'O',\n        \"\\u014C\": 'O',\n        \"\\u1E50\": 'O',\n        \"\\u1E52\": 'O',\n        \"\\u014E\": 'O',\n        \"\\u022E\": 'O',\n        \"\\u0230\": 'O',\n        \"\\xD6\": 'O',\n        \"\\u022A\": 'O',\n        \"\\u1ECE\": 'O',\n        \"\\u0150\": 'O',\n        \"\\u01D1\": 'O',\n        \"\\u020C\": 'O',\n        \"\\u020E\": 'O',\n        \"\\u01A0\": 'O',\n        \"\\u1EDC\": 'O',\n        \"\\u1EDA\": 'O',\n        \"\\u1EE0\": 'O',\n        \"\\u1EDE\": 'O',\n        \"\\u1EE2\": 'O',\n        \"\\u1ECC\": 'O',\n        \"\\u1ED8\": 'O',\n        \"\\u01EA\": 'O',\n        \"\\u01EC\": 'O',\n        \"\\xD8\": 'O',\n        \"\\u01FE\": 'O',\n        \"\\u0186\": 'O',\n        \"\\u019F\": 'O',\n        \"\\uA74A\": 'O',\n        \"\\uA74C\": 'O',\n        \"\\u0152\": 'OE',\n        \"\\u01A2\": 'OI',\n        \"\\uA74E\": 'OO',\n        \"\\u0222\": 'OU',\n        \"\\u24C5\": 'P',\n        \"\\uFF30\": 'P',\n        \"\\u1E54\": 'P',\n        \"\\u1E56\": 'P',\n        \"\\u01A4\": 'P',\n        \"\\u2C63\": 'P',\n        \"\\uA750\": 'P',\n        \"\\uA752\": 'P',\n        \"\\uA754\": 'P',\n        \"\\u24C6\": 'Q',\n        \"\\uFF31\": 'Q',\n        \"\\uA756\": 'Q',\n        \"\\uA758\": 'Q',\n        \"\\u024A\": 'Q',\n        \"\\u24C7\": 'R',\n        \"\\uFF32\": 'R',\n        \"\\u0154\": 'R',\n        \"\\u1E58\": 'R',\n        \"\\u0158\": 'R',\n        \"\\u0210\": 'R',\n        \"\\u0212\": 'R',\n        \"\\u1E5A\": 'R',\n        \"\\u1E5C\": 'R',\n        \"\\u0156\": 'R',\n        \"\\u1E5E\": 'R',\n        \"\\u024C\": 'R',\n        \"\\u2C64\": 'R',\n        \"\\uA75A\": 'R',\n        \"\\uA7A6\": 'R',\n        \"\\uA782\": 'R',\n        \"\\u24C8\": 'S',\n        \"\\uFF33\": 'S',\n        \"\\u1E9E\": 'S',\n        \"\\u015A\": 'S',\n        \"\\u1E64\": 'S',\n        \"\\u015C\": 'S',\n        \"\\u1E60\": 'S',\n        \"\\u0160\": 'S',\n        \"\\u1E66\": 'S',\n        \"\\u1E62\": 'S',\n        \"\\u1E68\": 'S',\n        \"\\u0218\": 'S',\n        \"\\u015E\": 'S',\n        \"\\u2C7E\": 'S',\n        \"\\uA7A8\": 'S',\n        \"\\uA784\": 'S',\n        \"\\u24C9\": 'T',\n        \"\\uFF34\": 'T',\n        \"\\u1E6A\": 'T',\n        \"\\u0164\": 'T',\n        \"\\u1E6C\": 'T',\n        \"\\u021A\": 'T',\n        \"\\u0162\": 'T',\n        \"\\u1E70\": 'T',\n        \"\\u1E6E\": 'T',\n        \"\\u0166\": 'T',\n        \"\\u01AC\": 'T',\n        \"\\u01AE\": 'T',\n        \"\\u023E\": 'T',\n        \"\\uA786\": 'T',\n        \"\\uA728\": 'TZ',\n        \"\\u24CA\": 'U',\n        \"\\uFF35\": 'U',\n        \"\\xD9\": 'U',\n        \"\\xDA\": 'U',\n        \"\\xDB\": 'U',\n        \"\\u0168\": 'U',\n        \"\\u1E78\": 'U',\n        \"\\u016A\": 'U',\n        \"\\u1E7A\": 'U',\n        \"\\u016C\": 'U',\n        \"\\xDC\": 'U',\n        \"\\u01DB\": 'U',\n        \"\\u01D7\": 'U',\n        \"\\u01D5\": 'U',\n        \"\\u01D9\": 'U',\n        \"\\u1EE6\": 'U',\n        \"\\u016E\": 'U',\n        \"\\u0170\": 'U',\n        \"\\u01D3\": 'U',\n        \"\\u0214\": 'U',\n        \"\\u0216\": 'U',\n        \"\\u01AF\": 'U',\n        \"\\u1EEA\": 'U',\n        \"\\u1EE8\": 'U',\n        \"\\u1EEE\": 'U',\n        \"\\u1EEC\": 'U',\n        \"\\u1EF0\": 'U',\n        \"\\u1EE4\": 'U',\n        \"\\u1E72\": 'U',\n        \"\\u0172\": 'U',\n        \"\\u1E76\": 'U',\n        \"\\u1E74\": 'U',\n        \"\\u0244\": 'U',\n        \"\\u24CB\": 'V',\n        \"\\uFF36\": 'V',\n        \"\\u1E7C\": 'V',\n        \"\\u1E7E\": 'V',\n        \"\\u01B2\": 'V',\n        \"\\uA75E\": 'V',\n        \"\\u0245\": 'V',\n        \"\\uA760\": 'VY',\n        \"\\u24CC\": 'W',\n        \"\\uFF37\": 'W',\n        \"\\u1E80\": 'W',\n        \"\\u1E82\": 'W',\n        \"\\u0174\": 'W',\n        \"\\u1E86\": 'W',\n        \"\\u1E84\": 'W',\n        \"\\u1E88\": 'W',\n        \"\\u2C72\": 'W',\n        \"\\u24CD\": 'X',\n        \"\\uFF38\": 'X',\n        \"\\u1E8A\": 'X',\n        \"\\u1E8C\": 'X',\n        \"\\u24CE\": 'Y',\n        \"\\uFF39\": 'Y',\n        \"\\u1EF2\": 'Y',\n        \"\\xDD\": 'Y',\n        \"\\u0176\": 'Y',\n        \"\\u1EF8\": 'Y',\n        \"\\u0232\": 'Y',\n        \"\\u1E8E\": 'Y',\n        \"\\u0178\": 'Y',\n        \"\\u1EF6\": 'Y',\n        \"\\u1EF4\": 'Y',\n        \"\\u01B3\": 'Y',\n        \"\\u024E\": 'Y',\n        \"\\u1EFE\": 'Y',\n        \"\\u24CF\": 'Z',\n        \"\\uFF3A\": 'Z',\n        \"\\u0179\": 'Z',\n        \"\\u1E90\": 'Z',\n        \"\\u017B\": 'Z',\n        \"\\u017D\": 'Z',\n        \"\\u1E92\": 'Z',\n        \"\\u1E94\": 'Z',\n        \"\\u01B5\": 'Z',\n        \"\\u0224\": 'Z',\n        \"\\u2C7F\": 'Z',\n        \"\\u2C6B\": 'Z',\n        \"\\uA762\": 'Z',\n        \"\\u24D0\": 'a',\n        \"\\uFF41\": 'a',\n        \"\\u1E9A\": 'a',\n        \"\\xE0\": 'a',\n        \"\\xE1\": 'a',\n        \"\\xE2\": 'a',\n        \"\\u1EA7\": 'a',\n        \"\\u1EA5\": 'a',\n        \"\\u1EAB\": 'a',\n        \"\\u1EA9\": 'a',\n        \"\\xE3\": 'a',\n        \"\\u0101\": 'a',\n        \"\\u0103\": 'a',\n        \"\\u1EB1\": 'a',\n        \"\\u1EAF\": 'a',\n        \"\\u1EB5\": 'a',\n        \"\\u1EB3\": 'a',\n        \"\\u0227\": 'a',\n        \"\\u01E1\": 'a',\n        \"\\xE4\": 'a',\n        \"\\u01DF\": 'a',\n        \"\\u1EA3\": 'a',\n        \"\\xE5\": 'a',\n        \"\\u01FB\": 'a',\n        \"\\u01CE\": 'a',\n        \"\\u0201\": 'a',\n        \"\\u0203\": 'a',\n        \"\\u1EA1\": 'a',\n        \"\\u1EAD\": 'a',\n        \"\\u1EB7\": 'a',\n        \"\\u1E01\": 'a',\n        \"\\u0105\": 'a',\n        \"\\u2C65\": 'a',\n        \"\\u0250\": 'a',\n        \"\\uA733\": 'aa',\n        \"\\xE6\": 'ae',\n        \"\\u01FD\": 'ae',\n        \"\\u01E3\": 'ae',\n        \"\\uA735\": 'ao',\n        \"\\uA737\": 'au',\n        \"\\uA739\": 'av',\n        \"\\uA73B\": 'av',\n        \"\\uA73D\": 'ay',\n        \"\\u24D1\": 'b',\n        \"\\uFF42\": 'b',\n        \"\\u1E03\": 'b',\n        \"\\u1E05\": 'b',\n        \"\\u1E07\": 'b',\n        \"\\u0180\": 'b',\n        \"\\u0183\": 'b',\n        \"\\u0253\": 'b',\n        \"\\u24D2\": 'c',\n        \"\\uFF43\": 'c',\n        \"\\u0107\": 'c',\n        \"\\u0109\": 'c',\n        \"\\u010B\": 'c',\n        \"\\u010D\": 'c',\n        \"\\xE7\": 'c',\n        \"\\u1E09\": 'c',\n        \"\\u0188\": 'c',\n        \"\\u023C\": 'c',\n        \"\\uA73F\": 'c',\n        \"\\u2184\": 'c',\n        \"\\u24D3\": 'd',\n        \"\\uFF44\": 'd',\n        \"\\u1E0B\": 'd',\n        \"\\u010F\": 'd',\n        \"\\u1E0D\": 'd',\n        \"\\u1E11\": 'd',\n        \"\\u1E13\": 'd',\n        \"\\u1E0F\": 'd',\n        \"\\u0111\": 'd',\n        \"\\u018C\": 'd',\n        \"\\u0256\": 'd',\n        \"\\u0257\": 'd',\n        \"\\uA77A\": 'd',\n        \"\\u01F3\": 'dz',\n        \"\\u01C6\": 'dz',\n        \"\\u24D4\": 'e',\n        \"\\uFF45\": 'e',\n        \"\\xE8\": 'e',\n        \"\\xE9\": 'e',\n        \"\\xEA\": 'e',\n        \"\\u1EC1\": 'e',\n        \"\\u1EBF\": 'e',\n        \"\\u1EC5\": 'e',\n        \"\\u1EC3\": 'e',\n        \"\\u1EBD\": 'e',\n        \"\\u0113\": 'e',\n        \"\\u1E15\": 'e',\n        \"\\u1E17\": 'e',\n        \"\\u0115\": 'e',\n        \"\\u0117\": 'e',\n        \"\\xEB\": 'e',\n        \"\\u1EBB\": 'e',\n        \"\\u011B\": 'e',\n        \"\\u0205\": 'e',\n        \"\\u0207\": 'e',\n        \"\\u1EB9\": 'e',\n        \"\\u1EC7\": 'e',\n        \"\\u0229\": 'e',\n        \"\\u1E1D\": 'e',\n        \"\\u0119\": 'e',\n        \"\\u1E19\": 'e',\n        \"\\u1E1B\": 'e',\n        \"\\u0247\": 'e',\n        \"\\u025B\": 'e',\n        \"\\u01DD\": 'e',\n        \"\\u24D5\": 'f',\n        \"\\uFF46\": 'f',\n        \"\\u1E1F\": 'f',\n        \"\\u0192\": 'f',\n        \"\\uA77C\": 'f',\n        \"\\u24D6\": 'g',\n        \"\\uFF47\": 'g',\n        \"\\u01F5\": 'g',\n        \"\\u011D\": 'g',\n        \"\\u1E21\": 'g',\n        \"\\u011F\": 'g',\n        \"\\u0121\": 'g',\n        \"\\u01E7\": 'g',\n        \"\\u0123\": 'g',\n        \"\\u01E5\": 'g',\n        \"\\u0260\": 'g',\n        \"\\uA7A1\": 'g',\n        \"\\u1D79\": 'g',\n        \"\\uA77F\": 'g',\n        \"\\u24D7\": 'h',\n        \"\\uFF48\": 'h',\n        \"\\u0125\": 'h',\n        \"\\u1E23\": 'h',\n        \"\\u1E27\": 'h',\n        \"\\u021F\": 'h',\n        \"\\u1E25\": 'h',\n        \"\\u1E29\": 'h',\n        \"\\u1E2B\": 'h',\n        \"\\u1E96\": 'h',\n        \"\\u0127\": 'h',\n        \"\\u2C68\": 'h',\n        \"\\u2C76\": 'h',\n        \"\\u0265\": 'h',\n        \"\\u0195\": 'hv',\n        \"\\u24D8\": 'i',\n        \"\\uFF49\": 'i',\n        \"\\xEC\": 'i',\n        \"\\xED\": 'i',\n        \"\\xEE\": 'i',\n        \"\\u0129\": 'i',\n        \"\\u012B\": 'i',\n        \"\\u012D\": 'i',\n        \"\\xEF\": 'i',\n        \"\\u1E2F\": 'i',\n        \"\\u1EC9\": 'i',\n        \"\\u01D0\": 'i',\n        \"\\u0209\": 'i',\n        \"\\u020B\": 'i',\n        \"\\u1ECB\": 'i',\n        \"\\u012F\": 'i',\n        \"\\u1E2D\": 'i',\n        \"\\u0268\": 'i',\n        \"\\u0131\": 'i',\n        \"\\u24D9\": 'j',\n        \"\\uFF4A\": 'j',\n        \"\\u0135\": 'j',\n        \"\\u01F0\": 'j',\n        \"\\u0249\": 'j',\n        \"\\u24DA\": 'k',\n        \"\\uFF4B\": 'k',\n        \"\\u1E31\": 'k',\n        \"\\u01E9\": 'k',\n        \"\\u1E33\": 'k',\n        \"\\u0137\": 'k',\n        \"\\u1E35\": 'k',\n        \"\\u0199\": 'k',\n        \"\\u2C6A\": 'k',\n        \"\\uA741\": 'k',\n        \"\\uA743\": 'k',\n        \"\\uA745\": 'k',\n        \"\\uA7A3\": 'k',\n        \"\\u24DB\": 'l',\n        \"\\uFF4C\": 'l',\n        \"\\u0140\": 'l',\n        \"\\u013A\": 'l',\n        \"\\u013E\": 'l',\n        \"\\u1E37\": 'l',\n        \"\\u1E39\": 'l',\n        \"\\u013C\": 'l',\n        \"\\u1E3D\": 'l',\n        \"\\u1E3B\": 'l',\n        \"\\u017F\": 'l',\n        \"\\u0142\": 'l',\n        \"\\u019A\": 'l',\n        \"\\u026B\": 'l',\n        \"\\u2C61\": 'l',\n        \"\\uA749\": 'l',\n        \"\\uA781\": 'l',\n        \"\\uA747\": 'l',\n        \"\\u01C9\": 'lj',\n        \"\\u24DC\": 'm',\n        \"\\uFF4D\": 'm',\n        \"\\u1E3F\": 'm',\n        \"\\u1E41\": 'm',\n        \"\\u1E43\": 'm',\n        \"\\u0271\": 'm',\n        \"\\u026F\": 'm',\n        \"\\u24DD\": 'n',\n        \"\\uFF4E\": 'n',\n        \"\\u01F9\": 'n',\n        \"\\u0144\": 'n',\n        \"\\xF1\": 'n',\n        \"\\u1E45\": 'n',\n        \"\\u0148\": 'n',\n        \"\\u1E47\": 'n',\n        \"\\u0146\": 'n',\n        \"\\u1E4B\": 'n',\n        \"\\u1E49\": 'n',\n        \"\\u019E\": 'n',\n        \"\\u0272\": 'n',\n        \"\\u0149\": 'n',\n        \"\\uA791\": 'n',\n        \"\\uA7A5\": 'n',\n        \"\\u01CC\": 'nj',\n        \"\\u24DE\": 'o',\n        \"\\uFF4F\": 'o',\n        \"\\xF2\": 'o',\n        \"\\xF3\": 'o',\n        \"\\xF4\": 'o',\n        \"\\u1ED3\": 'o',\n        \"\\u1ED1\": 'o',\n        \"\\u1ED7\": 'o',\n        \"\\u1ED5\": 'o',\n        \"\\xF5\": 'o',\n        \"\\u1E4D\": 'o',\n        \"\\u022D\": 'o',\n        \"\\u1E4F\": 'o',\n        \"\\u014D\": 'o',\n        \"\\u1E51\": 'o',\n        \"\\u1E53\": 'o',\n        \"\\u014F\": 'o',\n        \"\\u022F\": 'o',\n        \"\\u0231\": 'o',\n        \"\\xF6\": 'o',\n        \"\\u022B\": 'o',\n        \"\\u1ECF\": 'o',\n        \"\\u0151\": 'o',\n        \"\\u01D2\": 'o',\n        \"\\u020D\": 'o',\n        \"\\u020F\": 'o',\n        \"\\u01A1\": 'o',\n        \"\\u1EDD\": 'o',\n        \"\\u1EDB\": 'o',\n        \"\\u1EE1\": 'o',\n        \"\\u1EDF\": 'o',\n        \"\\u1EE3\": 'o',\n        \"\\u1ECD\": 'o',\n        \"\\u1ED9\": 'o',\n        \"\\u01EB\": 'o',\n        \"\\u01ED\": 'o',\n        \"\\xF8\": 'o',\n        \"\\u01FF\": 'o',\n        \"\\u0254\": 'o',\n        \"\\uA74B\": 'o',\n        \"\\uA74D\": 'o',\n        \"\\u0275\": 'o',\n        \"\\u0153\": 'oe',\n        \"\\u01A3\": 'oi',\n        \"\\u0223\": 'ou',\n        \"\\uA74F\": 'oo',\n        \"\\u24DF\": 'p',\n        \"\\uFF50\": 'p',\n        \"\\u1E55\": 'p',\n        \"\\u1E57\": 'p',\n        \"\\u01A5\": 'p',\n        \"\\u1D7D\": 'p',\n        \"\\uA751\": 'p',\n        \"\\uA753\": 'p',\n        \"\\uA755\": 'p',\n        \"\\u24E0\": 'q',\n        \"\\uFF51\": 'q',\n        \"\\u024B\": 'q',\n        \"\\uA757\": 'q',\n        \"\\uA759\": 'q',\n        \"\\u24E1\": 'r',\n        \"\\uFF52\": 'r',\n        \"\\u0155\": 'r',\n        \"\\u1E59\": 'r',\n        \"\\u0159\": 'r',\n        \"\\u0211\": 'r',\n        \"\\u0213\": 'r',\n        \"\\u1E5B\": 'r',\n        \"\\u1E5D\": 'r',\n        \"\\u0157\": 'r',\n        \"\\u1E5F\": 'r',\n        \"\\u024D\": 'r',\n        \"\\u027D\": 'r',\n        \"\\uA75B\": 'r',\n        \"\\uA7A7\": 'r',\n        \"\\uA783\": 'r',\n        \"\\u24E2\": 's',\n        \"\\uFF53\": 's',\n        \"\\xDF\": 's',\n        \"\\u015B\": 's',\n        \"\\u1E65\": 's',\n        \"\\u015D\": 's',\n        \"\\u1E61\": 's',\n        \"\\u0161\": 's',\n        \"\\u1E67\": 's',\n        \"\\u1E63\": 's',\n        \"\\u1E69\": 's',\n        \"\\u0219\": 's',\n        \"\\u015F\": 's',\n        \"\\u023F\": 's',\n        \"\\uA7A9\": 's',\n        \"\\uA785\": 's',\n        \"\\u1E9B\": 's',\n        \"\\u24E3\": 't',\n        \"\\uFF54\": 't',\n        \"\\u1E6B\": 't',\n        \"\\u1E97\": 't',\n        \"\\u0165\": 't',\n        \"\\u1E6D\": 't',\n        \"\\u021B\": 't',\n        \"\\u0163\": 't',\n        \"\\u1E71\": 't',\n        \"\\u1E6F\": 't',\n        \"\\u0167\": 't',\n        \"\\u01AD\": 't',\n        \"\\u0288\": 't',\n        \"\\u2C66\": 't',\n        \"\\uA787\": 't',\n        \"\\uA729\": 'tz',\n        \"\\u24E4\": 'u',\n        \"\\uFF55\": 'u',\n        \"\\xF9\": 'u',\n        \"\\xFA\": 'u',\n        \"\\xFB\": 'u',\n        \"\\u0169\": 'u',\n        \"\\u1E79\": 'u',\n        \"\\u016B\": 'u',\n        \"\\u1E7B\": 'u',\n        \"\\u016D\": 'u',\n        \"\\xFC\": 'u',\n        \"\\u01DC\": 'u',\n        \"\\u01D8\": 'u',\n        \"\\u01D6\": 'u',\n        \"\\u01DA\": 'u',\n        \"\\u1EE7\": 'u',\n        \"\\u016F\": 'u',\n        \"\\u0171\": 'u',\n        \"\\u01D4\": 'u',\n        \"\\u0215\": 'u',\n        \"\\u0217\": 'u',\n        \"\\u01B0\": 'u',\n        \"\\u1EEB\": 'u',\n        \"\\u1EE9\": 'u',\n        \"\\u1EEF\": 'u',\n        \"\\u1EED\": 'u',\n        \"\\u1EF1\": 'u',\n        \"\\u1EE5\": 'u',\n        \"\\u1E73\": 'u',\n        \"\\u0173\": 'u',\n        \"\\u1E77\": 'u',\n        \"\\u1E75\": 'u',\n        \"\\u0289\": 'u',\n        \"\\u24E5\": 'v',\n        \"\\uFF56\": 'v',\n        \"\\u1E7D\": 'v',\n        \"\\u1E7F\": 'v',\n        \"\\u028B\": 'v',\n        \"\\uA75F\": 'v',\n        \"\\u028C\": 'v',\n        \"\\uA761\": 'vy',\n        \"\\u24E6\": 'w',\n        \"\\uFF57\": 'w',\n        \"\\u1E81\": 'w',\n        \"\\u1E83\": 'w',\n        \"\\u0175\": 'w',\n        \"\\u1E87\": 'w',\n        \"\\u1E85\": 'w',\n        \"\\u1E98\": 'w',\n        \"\\u1E89\": 'w',\n        \"\\u2C73\": 'w',\n        \"\\u24E7\": 'x',\n        \"\\uFF58\": 'x',\n        \"\\u1E8B\": 'x',\n        \"\\u1E8D\": 'x',\n        \"\\u24E8\": 'y',\n        \"\\uFF59\": 'y',\n        \"\\u1EF3\": 'y',\n        \"\\xFD\": 'y',\n        \"\\u0177\": 'y',\n        \"\\u1EF9\": 'y',\n        \"\\u0233\": 'y',\n        \"\\u1E8F\": 'y',\n        \"\\xFF\": 'y',\n        \"\\u1EF7\": 'y',\n        \"\\u1E99\": 'y',\n        \"\\u1EF5\": 'y',\n        \"\\u01B4\": 'y',\n        \"\\u024F\": 'y',\n        \"\\u1EFF\": 'y',\n        \"\\u24E9\": 'z',\n        \"\\uFF5A\": 'z',\n        \"\\u017A\": 'z',\n        \"\\u1E91\": 'z',\n        \"\\u017C\": 'z',\n        \"\\u017E\": 'z',\n        \"\\u1E93\": 'z',\n        \"\\u1E95\": 'z',\n        \"\\u01B6\": 'z',\n        \"\\u0225\": 'z',\n        \"\\u0240\": 'z',\n        \"\\u2C6C\": 'z',\n        \"\\uA763\": 'z',\n        \"\\u0386\": \"\\u0391\",\n        \"\\u0388\": \"\\u0395\",\n        \"\\u0389\": \"\\u0397\",\n        \"\\u038A\": \"\\u0399\",\n        \"\\u03AA\": \"\\u0399\",\n        \"\\u038C\": \"\\u039F\",\n        \"\\u038E\": \"\\u03A5\",\n        \"\\u03AB\": \"\\u03A5\",\n        \"\\u038F\": \"\\u03A9\",\n        \"\\u03AC\": \"\\u03B1\",\n        \"\\u03AD\": \"\\u03B5\",\n        \"\\u03AE\": \"\\u03B7\",\n        \"\\u03AF\": \"\\u03B9\",\n        \"\\u03CA\": \"\\u03B9\",\n        \"\\u0390\": \"\\u03B9\",\n        \"\\u03CC\": \"\\u03BF\",\n        \"\\u03CD\": \"\\u03C5\",\n        \"\\u03CB\": \"\\u03C5\",\n        \"\\u03B0\": \"\\u03C5\",\n        \"\\u03CE\": \"\\u03C9\",\n        \"\\u03C2\": \"\\u03C3\",\n        \"\\u2019\": '\\''\n      };\n      return diacritics;\n    });\n    S2.define('select2/data/base', ['../utils'], function (Utils) {\n      function BaseAdapter($element, options) {\n        BaseAdapter.__super__.constructor.call(this);\n      }\n\n      Utils.Extend(BaseAdapter, Utils.Observable);\n\n      BaseAdapter.prototype.current = function (callback) {\n        throw new Error('The `current` method must be defined in child classes.');\n      };\n\n      BaseAdapter.prototype.query = function (params, callback) {\n        throw new Error('The `query` method must be defined in child classes.');\n      };\n\n      BaseAdapter.prototype.bind = function (container, $container) {// Can be implemented in subclasses\n      };\n\n      BaseAdapter.prototype.destroy = function () {// Can be implemented in subclasses\n      };\n\n      BaseAdapter.prototype.generateResultId = function (container, data) {\n        var id = container.id + '-result-';\n        id += Utils.generateChars(4);\n\n        if (data.id != null) {\n          id += '-' + data.id.toString();\n        } else {\n          id += '-' + Utils.generateChars(4);\n        }\n\n        return id;\n      };\n\n      return BaseAdapter;\n    });\n    S2.define('select2/data/select', ['./base', '../utils', 'jquery'], function (BaseAdapter, Utils, $) {\n      function SelectAdapter($element, options) {\n        this.$element = $element;\n        this.options = options;\n\n        SelectAdapter.__super__.constructor.call(this);\n      }\n\n      Utils.Extend(SelectAdapter, BaseAdapter);\n\n      SelectAdapter.prototype.current = function (callback) {\n        var data = [];\n        var self = this;\n        this.$element.find(':selected').each(function () {\n          var $option = $(this);\n          var option = self.item($option);\n          data.push(option);\n        });\n        callback(data);\n      };\n\n      SelectAdapter.prototype.select = function (data) {\n        var self = this;\n        data.selected = true; // If data.element is a DOM node, use it instead\n\n        if ($(data.element).is('option')) {\n          data.element.selected = true;\n          this.$element.trigger('input').trigger('change');\n          return;\n        }\n\n        if (this.$element.prop('multiple')) {\n          this.current(function (currentData) {\n            var val = [];\n            data = [data];\n            data.push.apply(data, currentData);\n\n            for (var d = 0; d < data.length; d++) {\n              var id = data[d].id;\n\n              if ($.inArray(id, val) === -1) {\n                val.push(id);\n              }\n            }\n\n            self.$element.val(val);\n            self.$element.trigger('input').trigger('change');\n          });\n        } else {\n          var val = data.id;\n          this.$element.val(val);\n          this.$element.trigger('input').trigger('change');\n        }\n      };\n\n      SelectAdapter.prototype.unselect = function (data) {\n        var self = this;\n\n        if (!this.$element.prop('multiple')) {\n          return;\n        }\n\n        data.selected = false;\n\n        if ($(data.element).is('option')) {\n          data.element.selected = false;\n          this.$element.trigger('input').trigger('change');\n          return;\n        }\n\n        this.current(function (currentData) {\n          var val = [];\n\n          for (var d = 0; d < currentData.length; d++) {\n            var id = currentData[d].id;\n\n            if (id !== data.id && $.inArray(id, val) === -1) {\n              val.push(id);\n            }\n          }\n\n          self.$element.val(val);\n          self.$element.trigger('input').trigger('change');\n        });\n      };\n\n      SelectAdapter.prototype.bind = function (container, $container) {\n        var self = this;\n        this.container = container;\n        container.on('select', function (params) {\n          self.select(params.data);\n        });\n        container.on('unselect', function (params) {\n          self.unselect(params.data);\n        });\n      };\n\n      SelectAdapter.prototype.destroy = function () {\n        // Remove anything added to child elements\n        this.$element.find('*').each(function () {\n          // Remove any custom data set by Select2\n          Utils.RemoveData(this);\n        });\n      };\n\n      SelectAdapter.prototype.query = function (params, callback) {\n        var data = [];\n        var self = this;\n        var $options = this.$element.children();\n        $options.each(function () {\n          var $option = $(this);\n\n          if (!$option.is('option') && !$option.is('optgroup')) {\n            return;\n          }\n\n          var option = self.item($option);\n          var matches = self.matches(params, option);\n\n          if (matches !== null) {\n            data.push(matches);\n          }\n        });\n        callback({\n          results: data\n        });\n      };\n\n      SelectAdapter.prototype.addOptions = function ($options) {\n        Utils.appendMany(this.$element, $options);\n      };\n\n      SelectAdapter.prototype.option = function (data) {\n        var option;\n\n        if (data.children) {\n          option = document.createElement('optgroup');\n          option.label = data.text;\n        } else {\n          option = document.createElement('option');\n\n          if (option.textContent !== undefined) {\n            option.textContent = data.text;\n          } else {\n            option.innerText = data.text;\n          }\n        }\n\n        if (data.id !== undefined) {\n          option.value = data.id;\n        }\n\n        if (data.disabled) {\n          option.disabled = true;\n        }\n\n        if (data.selected) {\n          option.selected = true;\n        }\n\n        if (data.title) {\n          option.title = data.title;\n        }\n\n        var $option = $(option);\n\n        var normalizedData = this._normalizeItem(data);\n\n        normalizedData.element = option; // Override the option's data with the combined data\n\n        Utils.StoreData(option, 'data', normalizedData);\n        return $option;\n      };\n\n      SelectAdapter.prototype.item = function ($option) {\n        var data = {};\n        data = Utils.GetData($option[0], 'data');\n\n        if (data != null) {\n          return data;\n        }\n\n        if ($option.is('option')) {\n          data = {\n            id: $option.val(),\n            text: $option.text(),\n            disabled: $option.prop('disabled'),\n            selected: $option.prop('selected'),\n            title: $option.prop('title')\n          };\n        } else if ($option.is('optgroup')) {\n          data = {\n            text: $option.prop('label'),\n            children: [],\n            title: $option.prop('title')\n          };\n          var $children = $option.children('option');\n          var children = [];\n\n          for (var c = 0; c < $children.length; c++) {\n            var $child = $($children[c]);\n            var child = this.item($child);\n            children.push(child);\n          }\n\n          data.children = children;\n        }\n\n        data = this._normalizeItem(data);\n        data.element = $option[0];\n        Utils.StoreData($option[0], 'data', data);\n        return data;\n      };\n\n      SelectAdapter.prototype._normalizeItem = function (item) {\n        if (item !== Object(item)) {\n          item = {\n            id: item,\n            text: item\n          };\n        }\n\n        item = $.extend({}, {\n          text: ''\n        }, item);\n        var defaults = {\n          selected: false,\n          disabled: false\n        };\n\n        if (item.id != null) {\n          item.id = item.id.toString();\n        }\n\n        if (item.text != null) {\n          item.text = item.text.toString();\n        }\n\n        if (item._resultId == null && item.id && this.container != null) {\n          item._resultId = this.generateResultId(this.container, item);\n        }\n\n        return $.extend({}, defaults, item);\n      };\n\n      SelectAdapter.prototype.matches = function (params, data) {\n        var matcher = this.options.get('matcher');\n        return matcher(params, data);\n      };\n\n      return SelectAdapter;\n    });\n    S2.define('select2/data/array', ['./select', '../utils', 'jquery'], function (SelectAdapter, Utils, $) {\n      function ArrayAdapter($element, options) {\n        this._dataToConvert = options.get('data') || [];\n\n        ArrayAdapter.__super__.constructor.call(this, $element, options);\n      }\n\n      Utils.Extend(ArrayAdapter, SelectAdapter);\n\n      ArrayAdapter.prototype.bind = function (container, $container) {\n        ArrayAdapter.__super__.bind.call(this, container, $container);\n\n        this.addOptions(this.convertToOptions(this._dataToConvert));\n      };\n\n      ArrayAdapter.prototype.select = function (data) {\n        var $option = this.$element.find('option').filter(function (i, elm) {\n          return elm.value == data.id.toString();\n        });\n\n        if ($option.length === 0) {\n          $option = this.option(data);\n          this.addOptions($option);\n        }\n\n        ArrayAdapter.__super__.select.call(this, data);\n      };\n\n      ArrayAdapter.prototype.convertToOptions = function (data) {\n        var self = this;\n        var $existing = this.$element.find('option');\n        var existingIds = $existing.map(function () {\n          return self.item($(this)).id;\n        }).get();\n        var $options = []; // Filter out all items except for the one passed in the argument\n\n        function onlyItem(item) {\n          return function () {\n            return $(this).val() == item.id;\n          };\n        }\n\n        for (var d = 0; d < data.length; d++) {\n          var item = this._normalizeItem(data[d]); // Skip items which were pre-loaded, only merge the data\n\n\n          if ($.inArray(item.id, existingIds) >= 0) {\n            var $existingOption = $existing.filter(onlyItem(item));\n            var existingData = this.item($existingOption);\n            var newData = $.extend(true, {}, item, existingData);\n            var $newOption = this.option(newData);\n            $existingOption.replaceWith($newOption);\n            continue;\n          }\n\n          var $option = this.option(item);\n\n          if (item.children) {\n            var $children = this.convertToOptions(item.children);\n            Utils.appendMany($option, $children);\n          }\n\n          $options.push($option);\n        }\n\n        return $options;\n      };\n\n      return ArrayAdapter;\n    });\n    S2.define('select2/data/ajax', ['./array', '../utils', 'jquery'], function (ArrayAdapter, Utils, $) {\n      function AjaxAdapter($element, options) {\n        this.ajaxOptions = this._applyDefaults(options.get('ajax'));\n\n        if (this.ajaxOptions.processResults != null) {\n          this.processResults = this.ajaxOptions.processResults;\n        }\n\n        AjaxAdapter.__super__.constructor.call(this, $element, options);\n      }\n\n      Utils.Extend(AjaxAdapter, ArrayAdapter);\n\n      AjaxAdapter.prototype._applyDefaults = function (options) {\n        var defaults = {\n          data: function data(params) {\n            return $.extend({}, params, {\n              q: params.term\n            });\n          },\n          transport: function transport(params, success, failure) {\n            var $request = $.ajax(params);\n            $request.then(success);\n            $request.fail(failure);\n            return $request;\n          }\n        };\n        return $.extend({}, defaults, options, true);\n      };\n\n      AjaxAdapter.prototype.processResults = function (results) {\n        return results;\n      };\n\n      AjaxAdapter.prototype.query = function (params, callback) {\n        var matches = [];\n        var self = this;\n\n        if (this._request != null) {\n          // JSONP requests cannot always be aborted\n          if ($.isFunction(this._request.abort)) {\n            this._request.abort();\n          }\n\n          this._request = null;\n        }\n\n        var options = $.extend({\n          type: 'GET'\n        }, this.ajaxOptions);\n\n        if (typeof options.url === 'function') {\n          options.url = options.url.call(this.$element, params);\n        }\n\n        if (typeof options.data === 'function') {\n          options.data = options.data.call(this.$element, params);\n        }\n\n        function request() {\n          var $request = options.transport(options, function (data) {\n            var results = self.processResults(data, params);\n\n            if (self.options.get('debug') && window.console && console.error) {\n              // Check to make sure that the response included a `results` key.\n              if (!results || !results.results || !$.isArray(results.results)) {\n                console.error('Select2: The AJAX results did not return an array in the ' + '`results` key of the response.');\n              }\n            }\n\n            callback(results);\n          }, function () {\n            // Attempt to detect if a request was aborted\n            // Only works if the transport exposes a status property\n            if ('status' in $request && ($request.status === 0 || $request.status === '0')) {\n              return;\n            }\n\n            self.trigger('results:message', {\n              message: 'errorLoading'\n            });\n          });\n          self._request = $request;\n        }\n\n        if (this.ajaxOptions.delay && params.term != null) {\n          if (this._queryTimeout) {\n            window.clearTimeout(this._queryTimeout);\n          }\n\n          this._queryTimeout = window.setTimeout(request, this.ajaxOptions.delay);\n        } else {\n          request();\n        }\n      };\n\n      return AjaxAdapter;\n    });\n    S2.define('select2/data/tags', ['jquery'], function ($) {\n      function Tags(decorated, $element, options) {\n        var tags = options.get('tags');\n        var createTag = options.get('createTag');\n\n        if (createTag !== undefined) {\n          this.createTag = createTag;\n        }\n\n        var insertTag = options.get('insertTag');\n\n        if (insertTag !== undefined) {\n          this.insertTag = insertTag;\n        }\n\n        decorated.call(this, $element, options);\n\n        if ($.isArray(tags)) {\n          for (var t = 0; t < tags.length; t++) {\n            var tag = tags[t];\n\n            var item = this._normalizeItem(tag);\n\n            var $option = this.option(item);\n            this.$element.append($option);\n          }\n        }\n      }\n\n      Tags.prototype.query = function (decorated, params, callback) {\n        var self = this;\n\n        this._removeOldTags();\n\n        if (params.term == null || params.page != null) {\n          decorated.call(this, params, callback);\n          return;\n        }\n\n        function wrapper(obj, child) {\n          var data = obj.results;\n\n          for (var i = 0; i < data.length; i++) {\n            var option = data[i];\n            var checkChildren = option.children != null && !wrapper({\n              results: option.children\n            }, true);\n            var optionText = (option.text || '').toUpperCase();\n            var paramsTerm = (params.term || '').toUpperCase();\n            var checkText = optionText === paramsTerm;\n\n            if (checkText || checkChildren) {\n              if (child) {\n                return false;\n              }\n\n              obj.data = data;\n              callback(obj);\n              return;\n            }\n          }\n\n          if (child) {\n            return true;\n          }\n\n          var tag = self.createTag(params);\n\n          if (tag != null) {\n            var $option = self.option(tag);\n            $option.attr('data-select2-tag', true);\n            self.addOptions([$option]);\n            self.insertTag(data, tag);\n          }\n\n          obj.results = data;\n          callback(obj);\n        }\n\n        decorated.call(this, params, wrapper);\n      };\n\n      Tags.prototype.createTag = function (decorated, params) {\n        var term = $.trim(params.term);\n\n        if (term === '') {\n          return null;\n        }\n\n        return {\n          id: term,\n          text: term\n        };\n      };\n\n      Tags.prototype.insertTag = function (_, data, tag) {\n        data.unshift(tag);\n      };\n\n      Tags.prototype._removeOldTags = function (_) {\n        var $options = this.$element.find('option[data-select2-tag]');\n        $options.each(function () {\n          if (this.selected) {\n            return;\n          }\n\n          $(this).remove();\n        });\n      };\n\n      return Tags;\n    });\n    S2.define('select2/data/tokenizer', ['jquery'], function ($) {\n      function Tokenizer(decorated, $element, options) {\n        var tokenizer = options.get('tokenizer');\n\n        if (tokenizer !== undefined) {\n          this.tokenizer = tokenizer;\n        }\n\n        decorated.call(this, $element, options);\n      }\n\n      Tokenizer.prototype.bind = function (decorated, container, $container) {\n        decorated.call(this, container, $container);\n        this.$search = container.dropdown.$search || container.selection.$search || $container.find('.select2-search__field');\n      };\n\n      Tokenizer.prototype.query = function (decorated, params, callback) {\n        var self = this;\n\n        function createAndSelect(data) {\n          // Normalize the data object so we can use it for checks\n          var item = self._normalizeItem(data); // Check if the data object already exists as a tag\n          // Select it if it doesn't\n\n\n          var $existingOptions = self.$element.find('option').filter(function () {\n            return $(this).val() === item.id;\n          }); // If an existing option wasn't found for it, create the option\n\n          if (!$existingOptions.length) {\n            var $option = self.option(item);\n            $option.attr('data-select2-tag', true);\n\n            self._removeOldTags();\n\n            self.addOptions([$option]);\n          } // Select the item, now that we know there is an option for it\n\n\n          select(item);\n        }\n\n        function select(data) {\n          self.trigger('select', {\n            data: data\n          });\n        }\n\n        params.term = params.term || '';\n        var tokenData = this.tokenizer(params, this.options, createAndSelect);\n\n        if (tokenData.term !== params.term) {\n          // Replace the search term if we have the search box\n          if (this.$search.length) {\n            this.$search.val(tokenData.term);\n            this.$search.trigger('focus');\n          }\n\n          params.term = tokenData.term;\n        }\n\n        decorated.call(this, params, callback);\n      };\n\n      Tokenizer.prototype.tokenizer = function (_, params, options, callback) {\n        var separators = options.get('tokenSeparators') || [];\n        var term = params.term;\n        var i = 0;\n\n        var createTag = this.createTag || function (params) {\n          return {\n            id: params.term,\n            text: params.term\n          };\n        };\n\n        while (i < term.length) {\n          var termChar = term[i];\n\n          if ($.inArray(termChar, separators) === -1) {\n            i++;\n            continue;\n          }\n\n          var part = term.substr(0, i);\n          var partParams = $.extend({}, params, {\n            term: part\n          });\n          var data = createTag(partParams);\n\n          if (data == null) {\n            i++;\n            continue;\n          }\n\n          callback(data); // Reset the term to not include the tokenized portion\n\n          term = term.substr(i + 1) || '';\n          i = 0;\n        }\n\n        return {\n          term: term\n        };\n      };\n\n      return Tokenizer;\n    });\n    S2.define('select2/data/minimumInputLength', [], function () {\n      function MinimumInputLength(decorated, $e, options) {\n        this.minimumInputLength = options.get('minimumInputLength');\n        decorated.call(this, $e, options);\n      }\n\n      MinimumInputLength.prototype.query = function (decorated, params, callback) {\n        params.term = params.term || '';\n\n        if (params.term.length < this.minimumInputLength) {\n          this.trigger('results:message', {\n            message: 'inputTooShort',\n            args: {\n              minimum: this.minimumInputLength,\n              input: params.term,\n              params: params\n            }\n          });\n          return;\n        }\n\n        decorated.call(this, params, callback);\n      };\n\n      return MinimumInputLength;\n    });\n    S2.define('select2/data/maximumInputLength', [], function () {\n      function MaximumInputLength(decorated, $e, options) {\n        this.maximumInputLength = options.get('maximumInputLength');\n        decorated.call(this, $e, options);\n      }\n\n      MaximumInputLength.prototype.query = function (decorated, params, callback) {\n        params.term = params.term || '';\n\n        if (this.maximumInputLength > 0 && params.term.length > this.maximumInputLength) {\n          this.trigger('results:message', {\n            message: 'inputTooLong',\n            args: {\n              maximum: this.maximumInputLength,\n              input: params.term,\n              params: params\n            }\n          });\n          return;\n        }\n\n        decorated.call(this, params, callback);\n      };\n\n      return MaximumInputLength;\n    });\n    S2.define('select2/data/maximumSelectionLength', [], function () {\n      function MaximumSelectionLength(decorated, $e, options) {\n        this.maximumSelectionLength = options.get('maximumSelectionLength');\n        decorated.call(this, $e, options);\n      }\n\n      MaximumSelectionLength.prototype.bind = function (decorated, container, $container) {\n        var self = this;\n        decorated.call(this, container, $container);\n        container.on('select', function () {\n          self._checkIfMaximumSelected();\n        });\n      };\n\n      MaximumSelectionLength.prototype.query = function (decorated, params, callback) {\n        var self = this;\n\n        this._checkIfMaximumSelected(function () {\n          decorated.call(self, params, callback);\n        });\n      };\n\n      MaximumSelectionLength.prototype._checkIfMaximumSelected = function (_, successCallback) {\n        var self = this;\n        this.current(function (currentData) {\n          var count = currentData != null ? currentData.length : 0;\n\n          if (self.maximumSelectionLength > 0 && count >= self.maximumSelectionLength) {\n            self.trigger('results:message', {\n              message: 'maximumSelected',\n              args: {\n                maximum: self.maximumSelectionLength\n              }\n            });\n            return;\n          }\n\n          if (successCallback) {\n            successCallback();\n          }\n        });\n      };\n\n      return MaximumSelectionLength;\n    });\n    S2.define('select2/dropdown', ['jquery', './utils'], function ($, Utils) {\n      function Dropdown($element, options) {\n        this.$element = $element;\n        this.options = options;\n\n        Dropdown.__super__.constructor.call(this);\n      }\n\n      Utils.Extend(Dropdown, Utils.Observable);\n\n      Dropdown.prototype.render = function () {\n        var $dropdown = $('<span class=\"select2-dropdown\">' + '<span class=\"select2-results\"></span>' + '</span>');\n        $dropdown.attr('dir', this.options.get('dir'));\n        this.$dropdown = $dropdown;\n        return $dropdown;\n      };\n\n      Dropdown.prototype.bind = function () {// Should be implemented in subclasses\n      };\n\n      Dropdown.prototype.position = function ($dropdown, $container) {// Should be implemented in subclasses\n      };\n\n      Dropdown.prototype.destroy = function () {\n        // Remove the dropdown from the DOM\n        this.$dropdown.remove();\n      };\n\n      return Dropdown;\n    });\n    S2.define('select2/dropdown/search', ['jquery', '../utils'], function ($, Utils) {\n      function Search() {}\n\n      Search.prototype.render = function (decorated) {\n        var $rendered = decorated.call(this);\n        var $search = $('<span class=\"select2-search select2-search--dropdown\">' + '<input class=\"select2-search__field\" type=\"search\" tabindex=\"-1\"' + ' autocomplete=\"off\" autocorrect=\"off\" autocapitalize=\"none\"' + ' spellcheck=\"false\" role=\"searchbox\" aria-autocomplete=\"list\" />' + '</span>');\n        this.$searchContainer = $search;\n        this.$search = $search.find('input');\n        $rendered.prepend($search);\n        return $rendered;\n      };\n\n      Search.prototype.bind = function (decorated, container, $container) {\n        var self = this;\n        var resultsId = container.id + '-results';\n        decorated.call(this, container, $container);\n        this.$search.on('keydown', function (evt) {\n          self.trigger('keypress', evt);\n          self._keyUpPrevented = evt.isDefaultPrevented();\n        }); // Workaround for browsers which do not support the `input` event\n        // This will prevent double-triggering of events for browsers which support\n        // both the `keyup` and `input` events.\n\n        this.$search.on('input', function (evt) {\n          // Unbind the duplicated `keyup` event\n          $(this).off('keyup');\n        });\n        this.$search.on('keyup input', function (evt) {\n          self.handleSearch(evt);\n        });\n        container.on('open', function () {\n          self.$search.attr('tabindex', 0);\n          self.$search.attr('aria-controls', resultsId);\n          self.$search.trigger('focus');\n          window.setTimeout(function () {\n            self.$search.trigger('focus');\n          }, 0);\n        });\n        container.on('close', function () {\n          self.$search.attr('tabindex', -1);\n          self.$search.removeAttr('aria-controls');\n          self.$search.removeAttr('aria-activedescendant');\n          self.$search.val('');\n          self.$search.trigger('blur');\n        });\n        container.on('focus', function () {\n          if (!container.isOpen()) {\n            self.$search.trigger('focus');\n          }\n        });\n        container.on('results:all', function (params) {\n          if (params.query.term == null || params.query.term === '') {\n            var showSearch = self.showSearch(params);\n\n            if (showSearch) {\n              self.$searchContainer.removeClass('select2-search--hide');\n            } else {\n              self.$searchContainer.addClass('select2-search--hide');\n            }\n          }\n        });\n        container.on('results:focus', function (params) {\n          if (params.data._resultId) {\n            self.$search.attr('aria-activedescendant', params.data._resultId);\n          } else {\n            self.$search.removeAttr('aria-activedescendant');\n          }\n        });\n      };\n\n      Search.prototype.handleSearch = function (evt) {\n        if (!this._keyUpPrevented) {\n          var input = this.$search.val();\n          this.trigger('query', {\n            term: input\n          });\n        }\n\n        this._keyUpPrevented = false;\n      };\n\n      Search.prototype.showSearch = function (_, params) {\n        return true;\n      };\n\n      return Search;\n    });\n    S2.define('select2/dropdown/hidePlaceholder', [], function () {\n      function HidePlaceholder(decorated, $element, options, dataAdapter) {\n        this.placeholder = this.normalizePlaceholder(options.get('placeholder'));\n        decorated.call(this, $element, options, dataAdapter);\n      }\n\n      HidePlaceholder.prototype.append = function (decorated, data) {\n        data.results = this.removePlaceholder(data.results);\n        decorated.call(this, data);\n      };\n\n      HidePlaceholder.prototype.normalizePlaceholder = function (_, placeholder) {\n        if (typeof placeholder === 'string') {\n          placeholder = {\n            id: '',\n            text: placeholder\n          };\n        }\n\n        return placeholder;\n      };\n\n      HidePlaceholder.prototype.removePlaceholder = function (_, data) {\n        var modifiedData = data.slice(0);\n\n        for (var d = data.length - 1; d >= 0; d--) {\n          var item = data[d];\n\n          if (this.placeholder.id === item.id) {\n            modifiedData.splice(d, 1);\n          }\n        }\n\n        return modifiedData;\n      };\n\n      return HidePlaceholder;\n    });\n    S2.define('select2/dropdown/infiniteScroll', ['jquery'], function ($) {\n      function InfiniteScroll(decorated, $element, options, dataAdapter) {\n        this.lastParams = {};\n        decorated.call(this, $element, options, dataAdapter);\n        this.$loadingMore = this.createLoadingMore();\n        this.loading = false;\n      }\n\n      InfiniteScroll.prototype.append = function (decorated, data) {\n        this.$loadingMore.remove();\n        this.loading = false;\n        decorated.call(this, data);\n\n        if (this.showLoadingMore(data)) {\n          this.$results.append(this.$loadingMore);\n          this.loadMoreIfNeeded();\n        }\n      };\n\n      InfiniteScroll.prototype.bind = function (decorated, container, $container) {\n        var self = this;\n        decorated.call(this, container, $container);\n        container.on('query', function (params) {\n          self.lastParams = params;\n          self.loading = true;\n        });\n        container.on('query:append', function (params) {\n          self.lastParams = params;\n          self.loading = true;\n        });\n        this.$results.on('scroll', this.loadMoreIfNeeded.bind(this));\n      };\n\n      InfiniteScroll.prototype.loadMoreIfNeeded = function () {\n        var isLoadMoreVisible = $.contains(document.documentElement, this.$loadingMore[0]);\n\n        if (this.loading || !isLoadMoreVisible) {\n          return;\n        }\n\n        var currentOffset = this.$results.offset().top + this.$results.outerHeight(false);\n        var loadingMoreOffset = this.$loadingMore.offset().top + this.$loadingMore.outerHeight(false);\n\n        if (currentOffset + 50 >= loadingMoreOffset) {\n          this.loadMore();\n        }\n      };\n\n      InfiniteScroll.prototype.loadMore = function () {\n        this.loading = true;\n        var params = $.extend({}, {\n          page: 1\n        }, this.lastParams);\n        params.page++;\n        this.trigger('query:append', params);\n      };\n\n      InfiniteScroll.prototype.showLoadingMore = function (_, data) {\n        return data.pagination && data.pagination.more;\n      };\n\n      InfiniteScroll.prototype.createLoadingMore = function () {\n        var $option = $('<li ' + 'class=\"select2-results__option select2-results__option--load-more\"' + 'role=\"option\" aria-disabled=\"true\"></li>');\n        var message = this.options.get('translations').get('loadingMore');\n        $option.html(message(this.lastParams));\n        return $option;\n      };\n\n      return InfiniteScroll;\n    });\n    S2.define('select2/dropdown/attachBody', ['jquery', '../utils'], function ($, Utils) {\n      function AttachBody(decorated, $element, options) {\n        this.$dropdownParent = $(options.get('dropdownParent') || document.body);\n        decorated.call(this, $element, options);\n      }\n\n      AttachBody.prototype.bind = function (decorated, container, $container) {\n        var self = this;\n        decorated.call(this, container, $container);\n        container.on('open', function () {\n          self._showDropdown();\n\n          self._attachPositioningHandler(container); // Must bind after the results handlers to ensure correct sizing\n\n\n          self._bindContainerResultHandlers(container);\n        });\n        container.on('close', function () {\n          self._hideDropdown();\n\n          self._detachPositioningHandler(container);\n        });\n        this.$dropdownContainer.on('mousedown', function (evt) {\n          evt.stopPropagation();\n        });\n      };\n\n      AttachBody.prototype.destroy = function (decorated) {\n        decorated.call(this);\n        this.$dropdownContainer.remove();\n      };\n\n      AttachBody.prototype.position = function (decorated, $dropdown, $container) {\n        // Clone all of the container classes\n        $dropdown.attr('class', $container.attr('class'));\n        $dropdown.removeClass('select2');\n        $dropdown.addClass('select2-container--open');\n        $dropdown.css({\n          position: 'absolute',\n          top: -999999\n        });\n        this.$container = $container;\n      };\n\n      AttachBody.prototype.render = function (decorated) {\n        var $container = $('<span></span>');\n        var $dropdown = decorated.call(this);\n        $container.append($dropdown);\n        this.$dropdownContainer = $container;\n        return $container;\n      };\n\n      AttachBody.prototype._hideDropdown = function (decorated) {\n        this.$dropdownContainer.detach();\n      };\n\n      AttachBody.prototype._bindContainerResultHandlers = function (decorated, container) {\n        // These should only be bound once\n        if (this._containerResultsHandlersBound) {\n          return;\n        }\n\n        var self = this;\n        container.on('results:all', function () {\n          self._positionDropdown();\n\n          self._resizeDropdown();\n        });\n        container.on('results:append', function () {\n          self._positionDropdown();\n\n          self._resizeDropdown();\n        });\n        container.on('results:message', function () {\n          self._positionDropdown();\n\n          self._resizeDropdown();\n        });\n        container.on('select', function () {\n          self._positionDropdown();\n\n          self._resizeDropdown();\n        });\n        container.on('unselect', function () {\n          self._positionDropdown();\n\n          self._resizeDropdown();\n        });\n        this._containerResultsHandlersBound = true;\n      };\n\n      AttachBody.prototype._attachPositioningHandler = function (decorated, container) {\n        var self = this;\n        var scrollEvent = 'scroll.select2.' + container.id;\n        var resizeEvent = 'resize.select2.' + container.id;\n        var orientationEvent = 'orientationchange.select2.' + container.id;\n        var $watchers = this.$container.parents().filter(Utils.hasScroll);\n        $watchers.each(function () {\n          Utils.StoreData(this, 'select2-scroll-position', {\n            x: $(this).scrollLeft(),\n            y: $(this).scrollTop()\n          });\n        });\n        $watchers.on(scrollEvent, function (ev) {\n          var position = Utils.GetData(this, 'select2-scroll-position');\n          $(this).scrollTop(position.y);\n        });\n        $(window).on(scrollEvent + ' ' + resizeEvent + ' ' + orientationEvent, function (e) {\n          self._positionDropdown();\n\n          self._resizeDropdown();\n        });\n      };\n\n      AttachBody.prototype._detachPositioningHandler = function (decorated, container) {\n        var scrollEvent = 'scroll.select2.' + container.id;\n        var resizeEvent = 'resize.select2.' + container.id;\n        var orientationEvent = 'orientationchange.select2.' + container.id;\n        var $watchers = this.$container.parents().filter(Utils.hasScroll);\n        $watchers.off(scrollEvent);\n        $(window).off(scrollEvent + ' ' + resizeEvent + ' ' + orientationEvent);\n      };\n\n      AttachBody.prototype._positionDropdown = function () {\n        var $window = $(window);\n        var isCurrentlyAbove = this.$dropdown.hasClass('select2-dropdown--above');\n        var isCurrentlyBelow = this.$dropdown.hasClass('select2-dropdown--below');\n        var newDirection = null;\n        var offset = this.$container.offset();\n        offset.bottom = offset.top + this.$container.outerHeight(false);\n        var container = {\n          height: this.$container.outerHeight(false)\n        };\n        container.top = offset.top;\n        container.bottom = offset.top + container.height;\n        var dropdown = {\n          height: this.$dropdown.outerHeight(false)\n        };\n        var viewport = {\n          top: $window.scrollTop(),\n          bottom: $window.scrollTop() + $window.height()\n        };\n        var enoughRoomAbove = viewport.top < offset.top - dropdown.height;\n        var enoughRoomBelow = viewport.bottom > offset.bottom + dropdown.height;\n        var css = {\n          left: offset.left,\n          top: container.bottom\n        }; // Determine what the parent element is to use for calculating the offset\n\n        var $offsetParent = this.$dropdownParent; // For statically positioned elements, we need to get the element\n        // that is determining the offset\n\n        if ($offsetParent.css('position') === 'static') {\n          $offsetParent = $offsetParent.offsetParent();\n        }\n\n        var parentOffset = {\n          top: 0,\n          left: 0\n        };\n\n        if ($.contains(document.body, $offsetParent[0]) || $offsetParent[0].isConnected) {\n          parentOffset = $offsetParent.offset();\n        }\n\n        css.top -= parentOffset.top;\n        css.left -= parentOffset.left;\n\n        if (!isCurrentlyAbove && !isCurrentlyBelow) {\n          newDirection = 'below';\n        }\n\n        if (!enoughRoomBelow && enoughRoomAbove && !isCurrentlyAbove) {\n          newDirection = 'above';\n        } else if (!enoughRoomAbove && enoughRoomBelow && isCurrentlyAbove) {\n          newDirection = 'below';\n        }\n\n        if (newDirection == 'above' || isCurrentlyAbove && newDirection !== 'below') {\n          css.top = container.top - parentOffset.top - dropdown.height;\n        }\n\n        if (newDirection != null) {\n          this.$dropdown.removeClass('select2-dropdown--below select2-dropdown--above').addClass('select2-dropdown--' + newDirection);\n          this.$container.removeClass('select2-container--below select2-container--above').addClass('select2-container--' + newDirection);\n        }\n\n        this.$dropdownContainer.css(css);\n      };\n\n      AttachBody.prototype._resizeDropdown = function () {\n        var css = {\n          width: this.$container.outerWidth(false) + 'px'\n        };\n\n        if (this.options.get('dropdownAutoWidth')) {\n          css.minWidth = css.width;\n          css.position = 'relative';\n          css.width = 'auto';\n        }\n\n        this.$dropdown.css(css);\n      };\n\n      AttachBody.prototype._showDropdown = function (decorated) {\n        this.$dropdownContainer.appendTo(this.$dropdownParent);\n\n        this._positionDropdown();\n\n        this._resizeDropdown();\n      };\n\n      return AttachBody;\n    });\n    S2.define('select2/dropdown/minimumResultsForSearch', [], function () {\n      function countResults(data) {\n        var count = 0;\n\n        for (var d = 0; d < data.length; d++) {\n          var item = data[d];\n\n          if (item.children) {\n            count += countResults(item.children);\n          } else {\n            count++;\n          }\n        }\n\n        return count;\n      }\n\n      function MinimumResultsForSearch(decorated, $element, options, dataAdapter) {\n        this.minimumResultsForSearch = options.get('minimumResultsForSearch');\n\n        if (this.minimumResultsForSearch < 0) {\n          this.minimumResultsForSearch = Infinity;\n        }\n\n        decorated.call(this, $element, options, dataAdapter);\n      }\n\n      MinimumResultsForSearch.prototype.showSearch = function (decorated, params) {\n        if (countResults(params.data.results) < this.minimumResultsForSearch) {\n          return false;\n        }\n\n        return decorated.call(this, params);\n      };\n\n      return MinimumResultsForSearch;\n    });\n    S2.define('select2/dropdown/selectOnClose', ['../utils'], function (Utils) {\n      function SelectOnClose() {}\n\n      SelectOnClose.prototype.bind = function (decorated, container, $container) {\n        var self = this;\n        decorated.call(this, container, $container);\n        container.on('close', function (params) {\n          self._handleSelectOnClose(params);\n        });\n      };\n\n      SelectOnClose.prototype._handleSelectOnClose = function (_, params) {\n        if (params && params.originalSelect2Event != null) {\n          var event = params.originalSelect2Event; // Don't select an item if the close event was triggered from a select or\n          // unselect event\n\n          if (event._type === 'select' || event._type === 'unselect') {\n            return;\n          }\n        }\n\n        var $highlightedResults = this.getHighlightedResults(); // Only select highlighted results\n\n        if ($highlightedResults.length < 1) {\n          return;\n        }\n\n        var data = Utils.GetData($highlightedResults[0], 'data'); // Don't re-select already selected resulte\n\n        if (data.element != null && data.element.selected || data.element == null && data.selected) {\n          return;\n        }\n\n        this.trigger('select', {\n          data: data\n        });\n      };\n\n      return SelectOnClose;\n    });\n    S2.define('select2/dropdown/closeOnSelect', [], function () {\n      function CloseOnSelect() {}\n\n      CloseOnSelect.prototype.bind = function (decorated, container, $container) {\n        var self = this;\n        decorated.call(this, container, $container);\n        container.on('select', function (evt) {\n          self._selectTriggered(evt);\n        });\n        container.on('unselect', function (evt) {\n          self._selectTriggered(evt);\n        });\n      };\n\n      CloseOnSelect.prototype._selectTriggered = function (_, evt) {\n        var originalEvent = evt.originalEvent; // Don't close if the control key is being held\n\n        if (originalEvent && (originalEvent.ctrlKey || originalEvent.metaKey)) {\n          return;\n        }\n\n        this.trigger('close', {\n          originalEvent: originalEvent,\n          originalSelect2Event: evt\n        });\n      };\n\n      return CloseOnSelect;\n    });\n    S2.define('select2/i18n/en', [], function () {\n      // English\n      return {\n        errorLoading: function errorLoading() {\n          return 'The results could not be loaded.';\n        },\n        inputTooLong: function inputTooLong(args) {\n          var overChars = args.input.length - args.maximum;\n          var message = 'Please delete ' + overChars + ' character';\n\n          if (overChars != 1) {\n            message += 's';\n          }\n\n          return message;\n        },\n        inputTooShort: function inputTooShort(args) {\n          var remainingChars = args.minimum - args.input.length;\n          var message = 'Please enter ' + remainingChars + ' or more characters';\n          return message;\n        },\n        loadingMore: function loadingMore() {\n          return 'Loading more results…';\n        },\n        maximumSelected: function maximumSelected(args) {\n          var message = 'You can only select ' + args.maximum + ' item';\n\n          if (args.maximum != 1) {\n            message += 's';\n          }\n\n          return message;\n        },\n        noResults: function noResults() {\n          return 'No results found';\n        },\n        searching: function searching() {\n          return 'Searching…';\n        },\n        removeAllItems: function removeAllItems() {\n          return 'Remove all items';\n        }\n      };\n    });\n    S2.define('select2/defaults', ['jquery', 'require', './results', './selection/single', './selection/multiple', './selection/placeholder', './selection/allowClear', './selection/search', './selection/eventRelay', './utils', './translation', './diacritics', './data/select', './data/array', './data/ajax', './data/tags', './data/tokenizer', './data/minimumInputLength', './data/maximumInputLength', './data/maximumSelectionLength', './dropdown', './dropdown/search', './dropdown/hidePlaceholder', './dropdown/infiniteScroll', './dropdown/attachBody', './dropdown/minimumResultsForSearch', './dropdown/selectOnClose', './dropdown/closeOnSelect', './i18n/en'], function ($, require, ResultsList, SingleSelection, MultipleSelection, Placeholder, AllowClear, SelectionSearch, EventRelay, Utils, Translation, DIACRITICS, SelectData, ArrayData, AjaxData, Tags, Tokenizer, MinimumInputLength, MaximumInputLength, MaximumSelectionLength, Dropdown, DropdownSearch, HidePlaceholder, InfiniteScroll, AttachBody, MinimumResultsForSearch, SelectOnClose, CloseOnSelect, EnglishTranslation) {\n      function Defaults() {\n        this.reset();\n      }\n\n      Defaults.prototype.apply = function (options) {\n        options = $.extend(true, {}, this.defaults, options);\n\n        if (options.dataAdapter == null) {\n          if (options.ajax != null) {\n            options.dataAdapter = AjaxData;\n          } else if (options.data != null) {\n            options.dataAdapter = ArrayData;\n          } else {\n            options.dataAdapter = SelectData;\n          }\n\n          if (options.minimumInputLength > 0) {\n            options.dataAdapter = Utils.Decorate(options.dataAdapter, MinimumInputLength);\n          }\n\n          if (options.maximumInputLength > 0) {\n            options.dataAdapter = Utils.Decorate(options.dataAdapter, MaximumInputLength);\n          }\n\n          if (options.maximumSelectionLength > 0) {\n            options.dataAdapter = Utils.Decorate(options.dataAdapter, MaximumSelectionLength);\n          }\n\n          if (options.tags) {\n            options.dataAdapter = Utils.Decorate(options.dataAdapter, Tags);\n          }\n\n          if (options.tokenSeparators != null || options.tokenizer != null) {\n            options.dataAdapter = Utils.Decorate(options.dataAdapter, Tokenizer);\n          }\n\n          if (options.query != null) {\n            var Query = require(options.amdBase + 'compat/query');\n\n            options.dataAdapter = Utils.Decorate(options.dataAdapter, Query);\n          }\n\n          if (options.initSelection != null) {\n            var InitSelection = require(options.amdBase + 'compat/initSelection');\n\n            options.dataAdapter = Utils.Decorate(options.dataAdapter, InitSelection);\n          }\n        }\n\n        if (options.resultsAdapter == null) {\n          options.resultsAdapter = ResultsList;\n\n          if (options.ajax != null) {\n            options.resultsAdapter = Utils.Decorate(options.resultsAdapter, InfiniteScroll);\n          }\n\n          if (options.placeholder != null) {\n            options.resultsAdapter = Utils.Decorate(options.resultsAdapter, HidePlaceholder);\n          }\n\n          if (options.selectOnClose) {\n            options.resultsAdapter = Utils.Decorate(options.resultsAdapter, SelectOnClose);\n          }\n        }\n\n        if (options.dropdownAdapter == null) {\n          if (options.multiple) {\n            options.dropdownAdapter = Dropdown;\n          } else {\n            var SearchableDropdown = Utils.Decorate(Dropdown, DropdownSearch);\n            options.dropdownAdapter = SearchableDropdown;\n          }\n\n          if (options.minimumResultsForSearch !== 0) {\n            options.dropdownAdapter = Utils.Decorate(options.dropdownAdapter, MinimumResultsForSearch);\n          }\n\n          if (options.closeOnSelect) {\n            options.dropdownAdapter = Utils.Decorate(options.dropdownAdapter, CloseOnSelect);\n          }\n\n          if (options.dropdownCssClass != null || options.dropdownCss != null || options.adaptDropdownCssClass != null) {\n            var DropdownCSS = require(options.amdBase + 'compat/dropdownCss');\n\n            options.dropdownAdapter = Utils.Decorate(options.dropdownAdapter, DropdownCSS);\n          }\n\n          options.dropdownAdapter = Utils.Decorate(options.dropdownAdapter, AttachBody);\n        }\n\n        if (options.selectionAdapter == null) {\n          if (options.multiple) {\n            options.selectionAdapter = MultipleSelection;\n          } else {\n            options.selectionAdapter = SingleSelection;\n          } // Add the placeholder mixin if a placeholder was specified\n\n\n          if (options.placeholder != null) {\n            options.selectionAdapter = Utils.Decorate(options.selectionAdapter, Placeholder);\n          }\n\n          if (options.allowClear) {\n            options.selectionAdapter = Utils.Decorate(options.selectionAdapter, AllowClear);\n          }\n\n          if (options.multiple) {\n            options.selectionAdapter = Utils.Decorate(options.selectionAdapter, SelectionSearch);\n          }\n\n          if (options.containerCssClass != null || options.containerCss != null || options.adaptContainerCssClass != null) {\n            var ContainerCSS = require(options.amdBase + 'compat/containerCss');\n\n            options.selectionAdapter = Utils.Decorate(options.selectionAdapter, ContainerCSS);\n          }\n\n          options.selectionAdapter = Utils.Decorate(options.selectionAdapter, EventRelay);\n        } // If the defaults were not previously applied from an element, it is\n        // possible for the language option to have not been resolved\n\n\n        options.language = this._resolveLanguage(options.language); // Always fall back to English since it will always be complete\n\n        options.language.push('en');\n        var uniqueLanguages = [];\n\n        for (var l = 0; l < options.language.length; l++) {\n          var language = options.language[l];\n\n          if (uniqueLanguages.indexOf(language) === -1) {\n            uniqueLanguages.push(language);\n          }\n        }\n\n        options.language = uniqueLanguages;\n        options.translations = this._processTranslations(options.language, options.debug);\n        return options;\n      };\n\n      Defaults.prototype.reset = function () {\n        function stripDiacritics(text) {\n          // Used 'uni range + named function' from http://jsperf.com/diacritics/18\n          function match(a) {\n            return DIACRITICS[a] || a;\n          }\n\n          return text.replace(/[^\\u0000-\\u007E]/g, match);\n        }\n\n        function matcher(params, data) {\n          // Always return the object if there is nothing to compare\n          if ($.trim(params.term) === '') {\n            return data;\n          } // Do a recursive check for options with children\n\n\n          if (data.children && data.children.length > 0) {\n            // Clone the data object if there are children\n            // This is required as we modify the object to remove any non-matches\n            var match = $.extend(true, {}, data); // Check each child of the option\n\n            for (var c = data.children.length - 1; c >= 0; c--) {\n              var child = data.children[c];\n              var matches = matcher(params, child); // If there wasn't a match, remove the object in the array\n\n              if (matches == null) {\n                match.children.splice(c, 1);\n              }\n            } // If any children matched, return the new object\n\n\n            if (match.children.length > 0) {\n              return match;\n            } // If there were no matching children, check just the plain object\n\n\n            return matcher(params, match);\n          }\n\n          var original = stripDiacritics(data.text).toUpperCase();\n          var term = stripDiacritics(params.term).toUpperCase(); // Check if the text contains the term\n\n          if (original.indexOf(term) > -1) {\n            return data;\n          } // If it doesn't contain the term, don't return anything\n\n\n          return null;\n        }\n\n        this.defaults = {\n          amdBase: './',\n          amdLanguageBase: './i18n/',\n          closeOnSelect: true,\n          debug: false,\n          dropdownAutoWidth: false,\n          escapeMarkup: Utils.escapeMarkup,\n          language: {},\n          matcher: matcher,\n          minimumInputLength: 0,\n          maximumInputLength: 0,\n          maximumSelectionLength: 0,\n          minimumResultsForSearch: 0,\n          selectOnClose: false,\n          scrollAfterSelect: false,\n          sorter: function sorter(data) {\n            return data;\n          },\n          templateResult: function templateResult(result) {\n            return result.text;\n          },\n          templateSelection: function templateSelection(selection) {\n            return selection.text;\n          },\n          theme: 'default',\n          width: 'resolve'\n        };\n      };\n\n      Defaults.prototype.applyFromElement = function (options, $element) {\n        var optionLanguage = options.language;\n        var defaultLanguage = this.defaults.language;\n        var elementLanguage = $element.prop('lang');\n        var parentLanguage = $element.closest('[lang]').prop('lang');\n        var languages = Array.prototype.concat.call(this._resolveLanguage(elementLanguage), this._resolveLanguage(optionLanguage), this._resolveLanguage(defaultLanguage), this._resolveLanguage(parentLanguage));\n        options.language = languages;\n        return options;\n      };\n\n      Defaults.prototype._resolveLanguage = function (language) {\n        if (!language) {\n          return [];\n        }\n\n        if ($.isEmptyObject(language)) {\n          return [];\n        }\n\n        if ($.isPlainObject(language)) {\n          return [language];\n        }\n\n        var languages;\n\n        if (!$.isArray(language)) {\n          languages = [language];\n        } else {\n          languages = language;\n        }\n\n        var resolvedLanguages = [];\n\n        for (var l = 0; l < languages.length; l++) {\n          resolvedLanguages.push(languages[l]);\n\n          if (typeof languages[l] === 'string' && languages[l].indexOf('-') > 0) {\n            // Extract the region information if it is included\n            var languageParts = languages[l].split('-');\n            var baseLanguage = languageParts[0];\n            resolvedLanguages.push(baseLanguage);\n          }\n        }\n\n        return resolvedLanguages;\n      };\n\n      Defaults.prototype._processTranslations = function (languages, debug) {\n        var translations = new Translation();\n\n        for (var l = 0; l < languages.length; l++) {\n          var languageData = new Translation();\n          var language = languages[l];\n\n          if (typeof language === 'string') {\n            try {\n              // Try to load it with the original name\n              languageData = Translation.loadPath(language);\n            } catch (e) {\n              try {\n                // If we couldn't load it, check if it wasn't the full path\n                language = this.defaults.amdLanguageBase + language;\n                languageData = Translation.loadPath(language);\n              } catch (ex) {\n                // The translation could not be loaded at all. Sometimes this is\n                // because of a configuration problem, other times this can be\n                // because of how Select2 helps load all possible translation files\n                if (debug && window.console && console.warn) {\n                  console.warn('Select2: The language file for \"' + language + '\" could ' + 'not be automatically loaded. A fallback will be used instead.');\n                }\n              }\n            }\n          } else if ($.isPlainObject(language)) {\n            languageData = new Translation(language);\n          } else {\n            languageData = language;\n          }\n\n          translations.extend(languageData);\n        }\n\n        return translations;\n      };\n\n      Defaults.prototype.set = function (key, value) {\n        var camelKey = $.camelCase(key);\n        var data = {};\n        data[camelKey] = value;\n\n        var convertedData = Utils._convertData(data);\n\n        $.extend(true, this.defaults, convertedData);\n      };\n\n      var defaults = new Defaults();\n      return defaults;\n    });\n    S2.define('select2/options', ['require', 'jquery', './defaults', './utils'], function (require, $, Defaults, Utils) {\n      function Options(options, $element) {\n        this.options = options;\n\n        if ($element != null) {\n          this.fromElement($element);\n        }\n\n        if ($element != null) {\n          this.options = Defaults.applyFromElement(this.options, $element);\n        }\n\n        this.options = Defaults.apply(this.options);\n\n        if ($element && $element.is('input')) {\n          var InputCompat = require(this.get('amdBase') + 'compat/inputData');\n\n          this.options.dataAdapter = Utils.Decorate(this.options.dataAdapter, InputCompat);\n        }\n      }\n\n      Options.prototype.fromElement = function ($e) {\n        var excludedData = ['select2'];\n\n        if (this.options.multiple == null) {\n          this.options.multiple = $e.prop('multiple');\n        }\n\n        if (this.options.disabled == null) {\n          this.options.disabled = $e.prop('disabled');\n        }\n\n        if (this.options.dir == null) {\n          if ($e.prop('dir')) {\n            this.options.dir = $e.prop('dir');\n          } else if ($e.closest('[dir]').prop('dir')) {\n            this.options.dir = $e.closest('[dir]').prop('dir');\n          } else {\n            this.options.dir = 'ltr';\n          }\n        }\n\n        $e.prop('disabled', this.options.disabled);\n        $e.prop('multiple', this.options.multiple);\n\n        if (Utils.GetData($e[0], 'select2Tags')) {\n          if (this.options.debug && window.console && console.warn) {\n            console.warn('Select2: The `data-select2-tags` attribute has been changed to ' + 'use the `data-data` and `data-tags=\"true\"` attributes and will be ' + 'removed in future versions of Select2.');\n          }\n\n          Utils.StoreData($e[0], 'data', Utils.GetData($e[0], 'select2Tags'));\n          Utils.StoreData($e[0], 'tags', true);\n        }\n\n        if (Utils.GetData($e[0], 'ajaxUrl')) {\n          if (this.options.debug && window.console && console.warn) {\n            console.warn('Select2: The `data-ajax-url` attribute has been changed to ' + '`data-ajax--url` and support for the old attribute will be removed' + ' in future versions of Select2.');\n          }\n\n          $e.attr('ajax--url', Utils.GetData($e[0], 'ajaxUrl'));\n          Utils.StoreData($e[0], 'ajax-Url', Utils.GetData($e[0], 'ajaxUrl'));\n        }\n\n        var dataset = {};\n\n        function upperCaseLetter(_, letter) {\n          return letter.toUpperCase();\n        } // Pre-load all of the attributes which are prefixed with `data-`\n\n\n        for (var attr = 0; attr < $e[0].attributes.length; attr++) {\n          var attributeName = $e[0].attributes[attr].name;\n          var prefix = 'data-';\n\n          if (attributeName.substr(0, prefix.length) == prefix) {\n            // Get the contents of the attribute after `data-`\n            var dataName = attributeName.substring(prefix.length); // Get the data contents from the consistent source\n            // This is more than likely the jQuery data helper\n\n            var dataValue = Utils.GetData($e[0], dataName); // camelCase the attribute name to match the spec\n\n            var camelDataName = dataName.replace(/-([a-z])/g, upperCaseLetter); // Store the data attribute contents into the dataset since\n\n            dataset[camelDataName] = dataValue;\n          }\n        } // Prefer the element's `dataset` attribute if it exists\n        // jQuery 1.x does not correctly handle data attributes with multiple dashes\n\n\n        if ($.fn.jquery && $.fn.jquery.substr(0, 2) == '1.' && $e[0].dataset) {\n          dataset = $.extend(true, {}, $e[0].dataset, dataset);\n        } // Prefer our internal data cache if it exists\n\n\n        var data = $.extend(true, {}, Utils.GetData($e[0]), dataset);\n        data = Utils._convertData(data);\n\n        for (var key in data) {\n          if ($.inArray(key, excludedData) > -1) {\n            continue;\n          }\n\n          if ($.isPlainObject(this.options[key])) {\n            $.extend(this.options[key], data[key]);\n          } else {\n            this.options[key] = data[key];\n          }\n        }\n\n        return this;\n      };\n\n      Options.prototype.get = function (key) {\n        return this.options[key];\n      };\n\n      Options.prototype.set = function (key, val) {\n        this.options[key] = val;\n      };\n\n      return Options;\n    });\n    S2.define('select2/core', ['jquery', './options', './utils', './keys'], function ($, Options, Utils, KEYS) {\n      var Select2 = function Select2($element, options) {\n        if (Utils.GetData($element[0], 'select2') != null) {\n          Utils.GetData($element[0], 'select2').destroy();\n        }\n\n        this.$element = $element;\n        this.id = this._generateId($element);\n        options = options || {};\n        this.options = new Options(options, $element);\n\n        Select2.__super__.constructor.call(this); // Set up the tabindex\n\n\n        var tabindex = $element.attr('tabindex') || 0;\n        Utils.StoreData($element[0], 'old-tabindex', tabindex);\n        $element.attr('tabindex', '-1'); // Set up containers and adapters\n\n        var DataAdapter = this.options.get('dataAdapter');\n        this.dataAdapter = new DataAdapter($element, this.options);\n        var $container = this.render();\n\n        this._placeContainer($container);\n\n        var SelectionAdapter = this.options.get('selectionAdapter');\n        this.selection = new SelectionAdapter($element, this.options);\n        this.$selection = this.selection.render();\n        this.selection.position(this.$selection, $container);\n        var DropdownAdapter = this.options.get('dropdownAdapter');\n        this.dropdown = new DropdownAdapter($element, this.options);\n        this.$dropdown = this.dropdown.render();\n        this.dropdown.position(this.$dropdown, $container);\n        var ResultsAdapter = this.options.get('resultsAdapter');\n        this.results = new ResultsAdapter($element, this.options, this.dataAdapter);\n        this.$results = this.results.render();\n        this.results.position(this.$results, this.$dropdown); // Bind events\n\n        var self = this; // Bind the container to all of the adapters\n\n        this._bindAdapters(); // Register any DOM event handlers\n\n\n        this._registerDomEvents(); // Register any internal event handlers\n\n\n        this._registerDataEvents();\n\n        this._registerSelectionEvents();\n\n        this._registerDropdownEvents();\n\n        this._registerResultsEvents();\n\n        this._registerEvents(); // Set the initial state\n\n\n        this.dataAdapter.current(function (initialData) {\n          self.trigger('selection:update', {\n            data: initialData\n          });\n        }); // Hide the original select\n\n        $element.addClass('select2-hidden-accessible');\n        $element.attr('aria-hidden', 'true'); // Synchronize any monitored attributes\n\n        this._syncAttributes();\n\n        Utils.StoreData($element[0], 'select2', this); // Ensure backwards compatibility with $element.data('select2').\n\n        $element.data('select2', this);\n      };\n\n      Utils.Extend(Select2, Utils.Observable);\n\n      Select2.prototype._generateId = function ($element) {\n        var id = '';\n\n        if ($element.attr('id') != null) {\n          id = $element.attr('id');\n        } else if ($element.attr('name') != null) {\n          id = $element.attr('name') + '-' + Utils.generateChars(2);\n        } else {\n          id = Utils.generateChars(4);\n        }\n\n        id = id.replace(/(:|\\.|\\[|\\]|,)/g, '');\n        id = 'select2-' + id;\n        return id;\n      };\n\n      Select2.prototype._placeContainer = function ($container) {\n        $container.insertAfter(this.$element);\n\n        var width = this._resolveWidth(this.$element, this.options.get('width'));\n\n        if (width != null) {\n          $container.css('width', width);\n        }\n      };\n\n      Select2.prototype._resolveWidth = function ($element, method) {\n        var WIDTH = /^width:(([-+]?([0-9]*\\.)?[0-9]+)(px|em|ex|%|in|cm|mm|pt|pc))/i;\n\n        if (method == 'resolve') {\n          var styleWidth = this._resolveWidth($element, 'style');\n\n          if (styleWidth != null) {\n            return styleWidth;\n          }\n\n          return this._resolveWidth($element, 'element');\n        }\n\n        if (method == 'element') {\n          var elementWidth = $element.outerWidth(false);\n\n          if (elementWidth <= 0) {\n            return 'auto';\n          }\n\n          return elementWidth + 'px';\n        }\n\n        if (method == 'style') {\n          var style = $element.attr('style');\n\n          if (typeof style !== 'string') {\n            return null;\n          }\n\n          var attrs = style.split(';');\n\n          for (var i = 0, l = attrs.length; i < l; i = i + 1) {\n            var attr = attrs[i].replace(/\\s/g, '');\n            var matches = attr.match(WIDTH);\n\n            if (matches !== null && matches.length >= 1) {\n              return matches[1];\n            }\n          }\n\n          return null;\n        }\n\n        if (method == 'computedstyle') {\n          var computedStyle = window.getComputedStyle($element[0]);\n          return computedStyle.width;\n        }\n\n        return method;\n      };\n\n      Select2.prototype._bindAdapters = function () {\n        this.dataAdapter.bind(this, this.$container);\n        this.selection.bind(this, this.$container);\n        this.dropdown.bind(this, this.$container);\n        this.results.bind(this, this.$container);\n      };\n\n      Select2.prototype._registerDomEvents = function () {\n        var self = this;\n        this.$element.on('change.select2', function () {\n          self.dataAdapter.current(function (data) {\n            self.trigger('selection:update', {\n              data: data\n            });\n          });\n        });\n        this.$element.on('focus.select2', function (evt) {\n          self.trigger('focus', evt);\n        });\n        this._syncA = Utils.bind(this._syncAttributes, this);\n        this._syncS = Utils.bind(this._syncSubtree, this);\n\n        if (this.$element[0].attachEvent) {\n          this.$element[0].attachEvent('onpropertychange', this._syncA);\n        }\n\n        var observer = window.MutationObserver || window.WebKitMutationObserver || window.MozMutationObserver;\n\n        if (observer != null) {\n          this._observer = new observer(function (mutations) {\n            self._syncA();\n\n            self._syncS(null, mutations);\n          });\n\n          this._observer.observe(this.$element[0], {\n            attributes: true,\n            childList: true,\n            subtree: false\n          });\n        } else if (this.$element[0].addEventListener) {\n          this.$element[0].addEventListener('DOMAttrModified', self._syncA, false);\n          this.$element[0].addEventListener('DOMNodeInserted', self._syncS, false);\n          this.$element[0].addEventListener('DOMNodeRemoved', self._syncS, false);\n        }\n      };\n\n      Select2.prototype._registerDataEvents = function () {\n        var self = this;\n        this.dataAdapter.on('*', function (name, params) {\n          self.trigger(name, params);\n        });\n      };\n\n      Select2.prototype._registerSelectionEvents = function () {\n        var self = this;\n        var nonRelayEvents = ['toggle', 'focus'];\n        this.selection.on('toggle', function () {\n          self.toggleDropdown();\n        });\n        this.selection.on('focus', function (params) {\n          self.focus(params);\n        });\n        this.selection.on('*', function (name, params) {\n          if ($.inArray(name, nonRelayEvents) !== -1) {\n            return;\n          }\n\n          self.trigger(name, params);\n        });\n      };\n\n      Select2.prototype._registerDropdownEvents = function () {\n        var self = this;\n        this.dropdown.on('*', function (name, params) {\n          self.trigger(name, params);\n        });\n      };\n\n      Select2.prototype._registerResultsEvents = function () {\n        var self = this;\n        this.results.on('*', function (name, params) {\n          self.trigger(name, params);\n        });\n      };\n\n      Select2.prototype._registerEvents = function () {\n        var self = this;\n        this.on('open', function () {\n          self.$container.addClass('select2-container--open');\n        });\n        this.on('close', function () {\n          self.$container.removeClass('select2-container--open');\n        });\n        this.on('enable', function () {\n          self.$container.removeClass('select2-container--disabled');\n        });\n        this.on('disable', function () {\n          self.$container.addClass('select2-container--disabled');\n        });\n        this.on('blur', function () {\n          self.$container.removeClass('select2-container--focus');\n        });\n        this.on('query', function (params) {\n          if (!self.isOpen()) {\n            self.trigger('open', {});\n          }\n\n          this.dataAdapter.query(params, function (data) {\n            self.trigger('results:all', {\n              data: data,\n              query: params\n            });\n          });\n        });\n        this.on('query:append', function (params) {\n          this.dataAdapter.query(params, function (data) {\n            self.trigger('results:append', {\n              data: data,\n              query: params\n            });\n          });\n        });\n        this.on('keypress', function (evt) {\n          var key = evt.which;\n\n          if (self.isOpen()) {\n            if (key === KEYS.ESC || key === KEYS.TAB || key === KEYS.UP && evt.altKey) {\n              self.close(evt);\n              evt.preventDefault();\n            } else if (key === KEYS.ENTER) {\n              self.trigger('results:select', {});\n              evt.preventDefault();\n            } else if (key === KEYS.SPACE && evt.ctrlKey) {\n              self.trigger('results:toggle', {});\n              evt.preventDefault();\n            } else if (key === KEYS.UP) {\n              self.trigger('results:previous', {});\n              evt.preventDefault();\n            } else if (key === KEYS.DOWN) {\n              self.trigger('results:next', {});\n              evt.preventDefault();\n            }\n          } else {\n            if (key === KEYS.ENTER || key === KEYS.SPACE || key === KEYS.DOWN && evt.altKey) {\n              self.open();\n              evt.preventDefault();\n            }\n          }\n        });\n      };\n\n      Select2.prototype._syncAttributes = function () {\n        this.options.set('disabled', this.$element.prop('disabled'));\n\n        if (this.isDisabled()) {\n          if (this.isOpen()) {\n            this.close();\n          }\n\n          this.trigger('disable', {});\n        } else {\n          this.trigger('enable', {});\n        }\n      };\n\n      Select2.prototype._isChangeMutation = function (evt, mutations) {\n        var changed = false;\n        var self = this; // Ignore any mutation events raised for elements that aren't options or\n        // optgroups. This handles the case when the select element is destroyed\n\n        if (evt && evt.target && evt.target.nodeName !== 'OPTION' && evt.target.nodeName !== 'OPTGROUP') {\n          return;\n        }\n\n        if (!mutations) {\n          // If mutation events aren't supported, then we can only assume that the\n          // change affected the selections\n          changed = true;\n        } else if (mutations.addedNodes && mutations.addedNodes.length > 0) {\n          for (var n = 0; n < mutations.addedNodes.length; n++) {\n            var node = mutations.addedNodes[n];\n\n            if (node.selected) {\n              changed = true;\n            }\n          }\n        } else if (mutations.removedNodes && mutations.removedNodes.length > 0) {\n          changed = true;\n        } else if ($.isArray(mutations)) {\n          $.each(mutations, function (evt, mutation) {\n            if (self._isChangeMutation(evt, mutation)) {\n              // We've found a change mutation.\n              // Let's escape from the loop and continue\n              changed = true;\n              return false;\n            }\n          });\n        }\n\n        return changed;\n      };\n\n      Select2.prototype._syncSubtree = function (evt, mutations) {\n        var changed = this._isChangeMutation(evt, mutations);\n\n        var self = this; // Only re-pull the data if we think there is a change\n\n        if (changed) {\n          this.dataAdapter.current(function (currentData) {\n            self.trigger('selection:update', {\n              data: currentData\n            });\n          });\n        }\n      };\n      /**\n       * Override the trigger method to automatically trigger pre-events when\n       * there are events that can be prevented.\n       */\n\n\n      Select2.prototype.trigger = function (name, args) {\n        var actualTrigger = Select2.__super__.trigger;\n        var preTriggerMap = {\n          'open': 'opening',\n          'close': 'closing',\n          'select': 'selecting',\n          'unselect': 'unselecting',\n          'clear': 'clearing'\n        };\n\n        if (args === undefined) {\n          args = {};\n        }\n\n        if (name in preTriggerMap) {\n          var preTriggerName = preTriggerMap[name];\n          var preTriggerArgs = {\n            prevented: false,\n            name: name,\n            args: args\n          };\n          actualTrigger.call(this, preTriggerName, preTriggerArgs);\n\n          if (preTriggerArgs.prevented) {\n            args.prevented = true;\n            return;\n          }\n        }\n\n        actualTrigger.call(this, name, args);\n      };\n\n      Select2.prototype.toggleDropdown = function () {\n        if (this.isDisabled()) {\n          return;\n        }\n\n        if (this.isOpen()) {\n          this.close();\n        } else {\n          this.open();\n        }\n      };\n\n      Select2.prototype.open = function () {\n        if (this.isOpen()) {\n          return;\n        }\n\n        if (this.isDisabled()) {\n          return;\n        }\n\n        this.trigger('query', {});\n      };\n\n      Select2.prototype.close = function (evt) {\n        if (!this.isOpen()) {\n          return;\n        }\n\n        this.trigger('close', {\n          originalEvent: evt\n        });\n      };\n      /**\n       * Helper method to abstract the \"enabled\" (not \"disabled\") state of this\n       * object.\n       *\n       * @return {true} if the instance is not disabled.\n       * @return {false} if the instance is disabled.\n       */\n\n\n      Select2.prototype.isEnabled = function () {\n        return !this.isDisabled();\n      };\n      /**\n       * Helper method to abstract the \"disabled\" state of this object.\n       *\n       * @return {true} if the disabled option is true.\n       * @return {false} if the disabled option is false.\n       */\n\n\n      Select2.prototype.isDisabled = function () {\n        return this.options.get('disabled');\n      };\n\n      Select2.prototype.isOpen = function () {\n        return this.$container.hasClass('select2-container--open');\n      };\n\n      Select2.prototype.hasFocus = function () {\n        return this.$container.hasClass('select2-container--focus');\n      };\n\n      Select2.prototype.focus = function (data) {\n        // No need to re-trigger focus events if we are already focused\n        if (this.hasFocus()) {\n          return;\n        }\n\n        this.$container.addClass('select2-container--focus');\n        this.trigger('focus', {});\n      };\n\n      Select2.prototype.enable = function (args) {\n        if (this.options.get('debug') && window.console && console.warn) {\n          console.warn('Select2: The `select2(\"enable\")` method has been deprecated and will' + ' be removed in later Select2 versions. Use $element.prop(\"disabled\")' + ' instead.');\n        }\n\n        if (args == null || args.length === 0) {\n          args = [true];\n        }\n\n        var disabled = !args[0];\n        this.$element.prop('disabled', disabled);\n      };\n\n      Select2.prototype.data = function () {\n        if (this.options.get('debug') && arguments.length > 0 && window.console && console.warn) {\n          console.warn('Select2: Data can no longer be set using `select2(\"data\")`. You ' + 'should consider setting the value instead using `$element.val()`.');\n        }\n\n        var data = [];\n        this.dataAdapter.current(function (currentData) {\n          data = currentData;\n        });\n        return data;\n      };\n\n      Select2.prototype.val = function (args) {\n        if (this.options.get('debug') && window.console && console.warn) {\n          console.warn('Select2: The `select2(\"val\")` method has been deprecated and will be' + ' removed in later Select2 versions. Use $element.val() instead.');\n        }\n\n        if (args == null || args.length === 0) {\n          return this.$element.val();\n        }\n\n        var newVal = args[0];\n\n        if ($.isArray(newVal)) {\n          newVal = $.map(newVal, function (obj) {\n            return obj.toString();\n          });\n        }\n\n        this.$element.val(newVal).trigger('input').trigger('change');\n      };\n\n      Select2.prototype.destroy = function () {\n        this.$container.remove();\n\n        if (this.$element[0].detachEvent) {\n          this.$element[0].detachEvent('onpropertychange', this._syncA);\n        }\n\n        if (this._observer != null) {\n          this._observer.disconnect();\n\n          this._observer = null;\n        } else if (this.$element[0].removeEventListener) {\n          this.$element[0].removeEventListener('DOMAttrModified', this._syncA, false);\n          this.$element[0].removeEventListener('DOMNodeInserted', this._syncS, false);\n          this.$element[0].removeEventListener('DOMNodeRemoved', this._syncS, false);\n        }\n\n        this._syncA = null;\n        this._syncS = null;\n        this.$element.off('.select2');\n        this.$element.attr('tabindex', Utils.GetData(this.$element[0], 'old-tabindex'));\n        this.$element.removeClass('select2-hidden-accessible');\n        this.$element.attr('aria-hidden', 'false');\n        Utils.RemoveData(this.$element[0]);\n        this.$element.removeData('select2');\n        this.dataAdapter.destroy();\n        this.selection.destroy();\n        this.dropdown.destroy();\n        this.results.destroy();\n        this.dataAdapter = null;\n        this.selection = null;\n        this.dropdown = null;\n        this.results = null;\n      };\n\n      Select2.prototype.render = function () {\n        var $container = $('<span class=\"select2 select2-container\">' + '<span class=\"selection\"></span>' + '<span class=\"dropdown-wrapper\" aria-hidden=\"true\"></span>' + '</span>');\n        $container.attr('dir', this.options.get('dir'));\n        this.$container = $container;\n        this.$container.addClass('select2-container--' + this.options.get('theme'));\n        Utils.StoreData($container[0], 'element', this.$element);\n        return $container;\n      };\n\n      return Select2;\n    });\n    S2.define('jquery-mousewheel', ['jquery'], function ($) {\n      // Used to shim jQuery.mousewheel for non-full builds.\n      return $;\n    });\n    S2.define('jquery.select2', ['jquery', 'jquery-mousewheel', './select2/core', './select2/defaults', './select2/utils'], function ($, _, Select2, Defaults, Utils) {\n      if ($.fn.select2 == null) {\n        // All methods that should return the element\n        var thisMethods = ['open', 'close', 'destroy'];\n\n        $.fn.select2 = function (options) {\n          options = options || {};\n\n          if (_typeof(options) === 'object') {\n            this.each(function () {\n              var instanceOptions = $.extend(true, {}, options);\n              var instance = new Select2($(this), instanceOptions);\n            });\n            return this;\n          } else if (typeof options === 'string') {\n            var ret;\n            var args = Array.prototype.slice.call(arguments, 1);\n            this.each(function () {\n              var instance = Utils.GetData(this, 'select2');\n\n              if (instance == null && window.console && console.error) {\n                console.error('The select2(\\'' + options + '\\') method was called on an ' + 'element that is not using Select2.');\n              }\n\n              ret = instance[options].apply(instance, args);\n            }); // Check if we should be returning `this`\n\n            if ($.inArray(options, thisMethods) > -1) {\n              return this;\n            }\n\n            return ret;\n          } else {\n            throw new Error('Invalid arguments for Select2: ' + options);\n          }\n        };\n      }\n\n      if ($.fn.select2.defaults == null) {\n        $.fn.select2.defaults = Defaults;\n      }\n\n      return Select2;\n    }); // Return the AMD loader configuration so it can be used outside of this file\n\n    return {\n      define: S2.define,\n      require: S2.require\n    };\n  }(); // Autoload the jQuery bindings\n  // We know that all of the modules exist above this, so we're safe\n\n\n  var select2 = S2.require('jquery.select2'); // Hold the AMD module references on the jQuery function that was just loaded\n  // This allows Select2 to use the internal loader outside of this file, such\n  // as in the language files.\n\n\n  jQuery.fn.select2.amd = S2; // Return the Select2 instance for anyone who is importing it.\n\n  return select2;\n});","function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }\n\nfunction _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }\n\nimport { DirectUpload } from \"@rails/activestorage\";\nexport var AttachmentUpload =\n/*#__PURE__*/\nfunction () {\n  function AttachmentUpload(attachment, element) {\n    _classCallCheck(this, AttachmentUpload);\n\n    this.attachment = attachment;\n    this.element = element;\n    this.directUpload = new DirectUpload(attachment.file, this.directUploadUrl, this);\n  }\n\n  _createClass(AttachmentUpload, [{\n    key: \"start\",\n    value: function start() {\n      this.directUpload.create(this.directUploadDidComplete.bind(this));\n    }\n  }, {\n    key: \"directUploadWillStoreFileWithXHR\",\n    value: function directUploadWillStoreFileWithXHR(xhr) {\n      var _this = this;\n\n      xhr.upload.addEventListener(\"progress\", function (event) {\n        var progress = event.loaded / event.total * 100;\n\n        _this.attachment.setUploadProgress(progress);\n      });\n    }\n  }, {\n    key: \"directUploadDidComplete\",\n    value: function directUploadDidComplete(error, attributes) {\n      if (error) {\n        throw new Error(\"Direct upload failed: \".concat(error));\n      }\n\n      this.attachment.setAttributes({\n        sgid: attributes.attachable_sgid,\n        url: this.createBlobUrl(attributes.signed_id, attributes.filename)\n      });\n    }\n  }, {\n    key: \"createBlobUrl\",\n    value: function createBlobUrl(signedId, filename) {\n      return this.blobUrlTemplate.replace(\":signed_id\", signedId).replace(\":filename\", encodeURIComponent(filename));\n    }\n  }, {\n    key: \"directUploadUrl\",\n    get: function get() {\n      return this.element.dataset.directUploadUrl;\n    }\n  }, {\n    key: \"blobUrlTemplate\",\n    get: function get() {\n      return this.element.dataset.blobUrlTemplate;\n    }\n  }]);\n\n  return AttachmentUpload;\n}();","import { AttachmentUpload } from \"./attachment_upload\";\naddEventListener(\"trix-attachment-add\", function (event) {\n  var attachment = event.attachment,\n      target = event.target;\n\n  if (attachment.file) {\n    var upload = new AttachmentUpload(attachment, target);\n    upload.start();\n  }\n});"],"sourceRoot":""}