This repository has been archived by the owner on Sep 14, 2022. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathapp.4f83fd8a057cf06963e5.js.map
1 lines (1 loc) · 761 KB
/
app.4f83fd8a057cf06963e5.js.map
1
{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./src/js/firebase.js","webpack:///../../src/fable-library/Util.ts","webpack:///../../src/fable-library/Types.ts","webpack:///../../src/fable-library/Reflection.ts","webpack:///../../src/fable-library/Option.ts","webpack:///../../src/fable-library/Int32.ts","webpack:///../../../src/fable-library/lib/long.js","webpack:///../../src/fable-library/Long.ts","webpack:///../../src/fable-library/Date.ts","webpack:///../../src/fable-library/DateOffset.ts","webpack:///src/BlogHelpers.fs","webpack:///../../../src/fable-library/lib/big.js","webpack:///../../src/fable-library/Decimal.ts","webpack:///../../src/fable-library/RegExp.ts","webpack:///../../src/fable-library/String.ts","webpack:///../../src/fable-library/Seq.ts","webpack:///./.fable/fable-library.2.8.1/MutableMap.js","webpack:///./.fable/fable-library.2.8.1/Map.js","webpack:///./.fable/fable-library.2.8.1/MutableSet.js","webpack:///./.fable/fable-library.2.8.1/Set.js","webpack:///./.fable/fable-library.2.8.1/Array.js","webpack:///./.fable/fable-library.2.8.1/List.js","webpack:///src/BlogLang.fs","webpack:///../../src/fable-library/AsyncBuilder.ts","webpack:///../../src/fable-library/Async.ts","webpack:///.fable/Fable.Elmish.3.0.5/cmd.fs","webpack:///.fable/Feliz.Router.2.0.0/Router.fs","webpack:///.fable/Feliz.0.74.0/Interop.fs","webpack:///.fable/Feliz.0.74.0/React.fs","webpack:///src/BlogView.fs","webpack:///.fable/Feliz.0.74.0/Properties.fs","webpack:///src/Blog.fs","webpack:///.fable/Fable.Elmish.3.0.5/ring.fs","webpack:///.fable/Fable.Elmish.3.0.5/program.fs","webpack:///src/Main.fs","webpack:///.fable/Fable.Elmish.React.3.0.1/common.fs","webpack:///.fable/Fable.Elmish.React.3.0.1/react.fs"],"names":["webpackJsonpCallback","data","moduleId","chunkId","chunkIds","moreModules","executeModules","i","resolves","length","Object","prototype","hasOwnProperty","call","installedChunks","push","modules","parentJsonpFunction","shift","deferredModules","apply","checkDeferredModules","result","deferredModule","fulfilled","j","depId","splice","__webpack_require__","s","installedModules","0","exports","module","l","m","c","d","name","getter","o","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","p","jsonpArray","window","oldJsonpFunction","slice","firebase","apiKey","authDomain","databaseURL","projectId","storageBucket","messagingSenderId","appId","measurementId","defaultAnalytics","db","storage","y","sameType","other","Long","$this","str","rep","utc","date","getUTCHours","getHours","lang","postDB","ownurl","arg0","url","string2lang","rm","P","x","e","precision","MutableMap$00602","declare","pairs","comparer","this$","FSharpRef","this","contents","hashMap","Map","iterate","pair","MutableMap$00602$$Add$$5BDDA1","MutableMap$00602$$TryFindIndex$$2B595","this$$$1","k","h","GetHashCode","matchValue","tryGetValue","findIndex","pair$$1","Equals","MutableMap$00602$$TryFind$$2B595","this$$$2","k$$1","matchValue$$1","getItemFromDict","MutableMap$00602$$Clear","this$$$4","clear","MutableMap$00602$$get_Count","this$$$5","sumBy","pairs$$2","values","GetZero","Add","$x$$2","$y$$3","this$$$8","k$$4","v$$1","matchValue$$4","msg","format","Error","set","MutableMap$00602$$Remove$$2B595","this$$$10","k$$6","matchValue$$6","iterator","this$$$11","toIterator","getEnumerator","delay","collect","pairs$$3","map","pair$$3","item","Clear","Contains","item$$1","matchValue$$7","equals","CopyTo","array","arrayIndex","iterateIndexed","i$$10","Remove","item$$2","matchValue$$8","delete","k$$7","entries","k$$8","this$$$6","k$$2","matchValue$$2","MutableMap$00602$$get_Item$$2B595","has","k$$9","this$$$9","k$$5","matchValue$$5","MutableMap$00602$$ContainsKey$$2B595","keys","pair$$5","k$$10","v$$2","this$$$7","k$$3","v","matchValue$$3","MutableMap$00602$$set_Item$$5BDDA1","pair$$6","MapTree$00602","tag","fields","Union","MapTreeModule$$$size","MapTreeModule$$$sizeAux","$acc$$5","$m$$6","acc","MapTreeModule$$$find","$comparer$$1$$23","$k$$3$$24","$m$$4$$25","comparer$$1","m$$4","Compare","c$$3","MapTreeModule$$$mem","$comparer$$10$$59","$k$$12$$60","$m$$8$$61","comparer$$10","k$$12","m$$8","c$$8","MapTreeModule$002EMapIterator$00602","arg1","arg2","stack","started","Record","MapTreeModule$$$collapseLHS","$stack$$111","tail","List","head","MapTreeModule$$$mkIterator","s$$5","MapTreeModule$$$current","i$$2","MapTreeModule$$$alreadyFinished","MapTreeModule$$$notStarted","MapTreeModule$002EmkIEnumerator$0027$00602","s$$6","MapTreeModule$$$mkIEnumerator","s$$7","MapTreeModule$002EmkIEnumerator$0027$00602$$$$002Ector$$Z26BC498C","MapTreeModule$$$toSeq","s$$8","unfold","en$$1","MoveNext","Current","i$$3","MapTreeModule$$$moveNext","Reset","Dispose","FSharpMap","comparer$$17","tree","FSharpMap$$get_Tree","__$$5","FSharpMap$$get_Item$$2B595","__$$8","k$$29","FSharpMap$$get_Count","__$$20","FSharpMap$$ContainsKey$$2B595","__$$21","k$$31","toString","join","map$$2","kv","combineHash","x$$16","y$$3","res$$3","e$$1","activePatternResult3709","structuralHash","Math","abs","that","CompareTo","obj","res$$4","finished","e1","e2","kvp1","kvp2","c$$10","compare","isDisposable","_arg1$$1","k$$34","k$$35","kv$$1","k$$36","v$$26","kv$$2","MutableSet$00601","items","MutableSet$00601$$Add$$2B595","MutableSet$00601$$TryFindIndex$$2B595","MutableSet$00601$$Clear","MutableSet$00601$$get_Count","MutableSet$00601$$Contains$$2B595","MutableSet$00601$$Remove$$2B595","values$$1","value$$2","i$$8","item$$3","add","add_","x$$1","SetTree$00601","SetTreeModule$$$SetOne","SetTreeModule$$$SetNode","l$$1","r$$1","SetTreeModule$002ESetIterator$00601","SetTreeModule$$$collapseLHS","$stack$$104","SetTreeModule$$$mkIterator","s$$13","SetTreeModule$$$current","SetTreeModule$$$alreadyFinished","SetTreeModule$$$notStarted","SetTreeModule$002EmkIEnumerator$00601","s$$14","SetTreeModule$$$mkIEnumerator","s$$15","SetTreeModule$002EmkIEnumerator$00601$$$$002Ector$$Z5B395D56","SetTreeModule$$$compare","comparer$$18","s1","s2","$comparer$$17$$112","$l1$$113","$l2$$114","SetTreeModule$$$compareStacks","$target$$115","t1$$6","t2$$6","n1k","n2k","t1$$7","t2$$7","n1k$$1","n2k$$1","n2r","t1$$8","t2$$8","emp","n1k$$2","n1r","n2k$$2","t1$$9","t2$$9","n1k$$3","n1r$$1","n2k$$3","n2r$$1","t1$$10","t2$$10","n1k$$4","t1$$11","n1k$$5","n1l","n1r$$2","t1$$12","n2k$$4","t2$$11","n2k$$5","n2l","n2r$$2","t2$$12","l1","l2","c$$7","c$$9","i$$1","SetTreeModule$$$moveNext","FSharpSet","comparer$$22","FSharpSet$$get_Comparer","__$$4","FSharpSet$$get_Tree","map$$1","x$$21","String","res","that$$1","f$$1","source$$1","cons$$2","ArrayBuffer","isView","len$$1","target$$2","i$$4","equalsWith","comparer$$13","array1$$7","array2$$7","comparer$$12","array1$$6","array2$$6","i$$40","result$$13","length1","length2","compareWith","fold","$f$$2$$19","$state$$1$$20","$xs$$8$$21","f$$2","state$$1","xs$$8","reverse","xs$$9","acc$$1","x$$6","ofSeq","xs$$12","fold$$1","acc$$3","x$$9","append","xs$$28","ys$$10","acc$$10","x$$15","f$$15","xs$$29","collect$$1","f$$16","xs$$31","acc$$11","f$$24","xs$$46","unitVar0","x$$24","ofArray","xs$$50","res$$1","i$$9","count","filter","f$$42","xs$$71","acc$$17","x$$37","path","ref","child","listAll","then","fullPath","floor","random","collection","where","querySnapshot","ret","Array","forEach","doc","post","language","clo1","setCurrentScreen","logEvent","screen_name","Language","arg10","clo2","arg20","newlang","setUserProperties","dispatch","cmd","sub","cmds","lists","state$$3","xs$$14","acc$$4","x$$10","task","arg","ofSuccess","ofError","segment","query","props","onChange","ev","urlSegments","location","hash","pathname","search","english","spanish","german","mkAttr","mkStyle","renderElement","withKey","propsWithKey","f","render","functionComponent","xs","properties","list","list2","tupledArg","mkVideo","imageDefault","maybeImage","maybeVideo","video","imgURL","header","state","selfiePath","backgroundPath","introduction","option","largeMessage","image","title","subtitle","elems","selfieSize","content","selfie","sectionHeader","langTuples","children","tuple","langTple","isActive","names","_arg1","viewPageNotFound","currentView","resource","CurView","postURL","posts","predicate$$13","find","postMSG","viewFailedPostList","viewPosts","published","background","elms","innerPage","returnsindex","maybePost","page","postControl","spinner","WholePost","mainPage","postLoadCommand","err","loadLang","pickRandomFile","projection$$5","comparer$$8","chooser$$2","cons$$30","init","shouldReload","setUserLang","Trans","Posts","value$$15","x$$5","sort","y$$6","modifiedProperties","comp","app","eventHandler","trackScreen","arg00","prop","patternInput","application","routeMode","text","ex","console","size","target","targetIndex","max","fill","__","rix'","ix","source$$6","wix'","from","wix","setState","program","rb","reentered","syncDispatch","nextMsg","view","equal","lazyView2With","placeholderId","lastRequest","model","document","getElementById","nextProps","_nextState","runWith","withReactBatchedUsing"],"mappings":"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","file":"app.4f83fd8a057cf06963e5.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tfunction webpackJsonpCallback(data) {\n \t\tvar chunkIds = data[0];\n \t\tvar moreModules = data[1];\n \t\tvar executeModules = data[2];\n\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(Object.prototype.hasOwnProperty.call(installedChunks, chunkId) && installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(data);\n\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n\n \t\t// add entry modules from loaded chunk to deferred list\n \t\tdeferredModules.push.apply(deferredModules, executeModules || []);\n\n \t\t// run deferred modules when all chunks ready\n \t\treturn checkDeferredModules();\n \t};\n \tfunction checkDeferredModules() {\n \t\tvar result;\n \t\tfor(var i = 0; i < deferredModules.length; i++) {\n \t\t\tvar deferredModule = deferredModules[i];\n \t\t\tvar fulfilled = true;\n \t\t\tfor(var j = 1; j < deferredModule.length; j++) {\n \t\t\t\tvar depId = deferredModule[j];\n \t\t\t\tif(installedChunks[depId] !== 0) fulfilled = false;\n \t\t\t}\n \t\t\tif(fulfilled) {\n \t\t\t\tdeferredModules.splice(i--, 1);\n \t\t\t\tresult = __webpack_require__(__webpack_require__.s = deferredModule[0]);\n \t\t\t}\n \t\t}\n\n \t\treturn result;\n \t}\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded and loading chunks\n \t// undefined = chunk not loaded, null = chunk preloaded/prefetched\n \t// Promise = chunk loading, 0 = chunk loaded\n \tvar installedChunks = {\n \t\t0: 0\n \t};\n\n \tvar deferredModules = [];\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 = \"\";\n\n \tvar jsonpArray = window[\"webpackJsonp\"] = window[\"webpackJsonp\"] || [];\n \tvar oldJsonpFunction = jsonpArray.push.bind(jsonpArray);\n \tjsonpArray.push = webpackJsonpCallback;\n \tjsonpArray = jsonpArray.slice();\n \tfor(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);\n \tvar parentJsonpFunction = oldJsonpFunction;\n\n\n \t// add entry module to deferred list\n \tdeferredModules.push([216,1]);\n \t// run deferred modules when ready\n \treturn checkDeferredModules();\n","import * as firebase from \"firebase/app\";\nimport \"firebase/analytics\";\nimport \"firebase/firestore\";\nimport \"firebase/storage\";\n\nconst FIREBASE_CONFIG = {\n\tapiKey: \"AIzaSyDvqxS9P7Fbh8DysO_lahAjFKlSXVvqlI4\",\n\tauthDomain: \"blog-vrescobar.firebaseapp.com\",\n\tdatabaseURL: \"https://blog-vrescobar.firebaseio.com\",\n\tprojectId: \"blog-vrescobar\",\n\tstorageBucket: \"blog-vrescobar.appspot.com\",\n\tmessagingSenderId: \"112276405256\",\n\tappId: \"1:112276405256:web:f956c2708fa8eae73225bd\",\n\tmeasurementId: \"G-RQDSY5DTGJ\"\n };\nfirebase.initializeApp(FIREBASE_CONFIG);\nvar defaultAnalytics = firebase.analytics();\nvar db = firebase.firestore();\nvar storage = firebase.storage();\n\n// Fetch posts\nexport function FetchPosts(lang) {\n\treturn db.collection(\"posts\").\n\t\twhere(\"lang\", \"==\", lang).\n\t\t// orderBy(\"posted_date\", \"asc\").\n\t\tget().\n\t\tthen((querySnapshot) => {\n\t\t\tvar ret = new Array();\n\t\t\tquerySnapshot.forEach((doc) => {\n\t\t\t\tvar post = doc.data();\n\t\t\t\tret.push(post);\n\t\t\t});\n\t\t\treturn ret;\n\t\t})\n\t}\n\n// FetchFiles\nexport function RandomFile(path) { \n\tvar storageRef = storage.ref(\"/\");\n\tvar listRef = storageRef.child(path);\n\treturn listRef.listAll().\n\t\tthen(x => x.items.map(x => x.fullPath)).\n\t\tthen(items => items[Math.floor(Math.random() * items.length)]);\n\t\n}\nexport function FilePromise(filepath) {\n\tvar pathReference = storage.ref(filepath);\n\treturn pathReference.getDownloadURL\n}\n\n// Analytics\nexport function CurrentScreen(name, language) {\n\tdefaultAnalytics.setCurrentScreen(name, language);\n\tdefaultAnalytics.logEvent('screen_view', { screen_name: name, Language: language });\n}\n\nexport function UserLang(newlang) {\n\tdefaultAnalytics.setUserProperties({ Language: newlang });\n}\n","// tslint:disable:ban-types\n// Object.assign flattens getters and setters\n// See https://stackoverflow.com/questions/37054596/js-es5-how-to-assign-objects-with-setters-and-getters\nexport function extend(target, ...sources) {\n for (const source of sources) {\n for (const key of Object.keys(source)) {\n const descr = Object.getOwnPropertyDescriptor(source, key);\n if (descr) {\n Object.defineProperty(target, key, descr);\n }\n }\n }\n return target;\n}\nexport function isIterable(x) {\n return x != null && typeof x === \"object\" && Symbol.iterator in x;\n}\nexport function isArrayLike(x) {\n return x != null && (Array.isArray(x) || ArrayBuffer.isView(x));\n}\nexport function isComparer(x) {\n return x != null && typeof x.Compare === \"function\";\n}\nexport function isComparable(x) {\n return x != null && typeof x.CompareTo === \"function\";\n}\nexport function isEquatable(x) {\n return x != null && typeof x.Equals === \"function\";\n}\nexport function isHashable(x) {\n return x != null && typeof x.GetHashCode === \"function\";\n}\nexport function isDisposable(x) {\n return x != null && typeof x.Dispose === \"function\";\n}\nexport class Comparer {\n constructor(f) {\n this.Compare = f || compare;\n }\n}\nexport function comparerFromEqualityComparer(comparer) {\n // Sometimes IEqualityComparer also implements IComparer\n if (isComparer(comparer)) {\n return new Comparer(comparer.Compare);\n }\n else {\n return new Comparer((x, y) => {\n const xhash = comparer.GetHashCode(x);\n const yhash = comparer.GetHashCode(y);\n if (xhash === yhash) {\n return comparer.Equals(x, y) ? 0 : -1;\n }\n else {\n return xhash < yhash ? -1 : 1;\n }\n });\n }\n}\n// TODO: Move these three methods to Map and Set modules\nexport function containsValue(v, map) {\n for (const kv of map) {\n if (equals(v, kv[1])) {\n return true;\n }\n }\n return false;\n}\nexport function tryGetValue(map, key, defaultValue) {\n return map.has(key) ? [true, map.get(key)] : [false, defaultValue];\n}\nexport function addToSet(v, set) {\n if (set.has(v)) {\n return false;\n }\n set.add(v);\n return true;\n}\nexport function assertEqual(actual, expected, msg) {\n if (!equals(actual, expected)) {\n throw Object.assign(new Error(msg || `Expected: ${expected} - Actual: ${actual}`), {\n actual,\n expected,\n });\n }\n}\nexport function assertNotEqual(actual, expected, msg) {\n if (equals(actual, expected)) {\n throw Object.assign(new Error(msg || `Expected: ${expected} - Actual: ${actual}`), {\n actual,\n expected,\n });\n }\n}\nexport class Lazy {\n constructor(factory) {\n this.factory = factory;\n this.isValueCreated = false;\n }\n get Value() {\n if (!this.isValueCreated) {\n this.createdValue = this.factory();\n this.isValueCreated = true;\n }\n return this.createdValue;\n }\n get IsValueCreated() {\n return this.isValueCreated;\n }\n}\nexport function lazyFromValue(v) {\n return new Lazy(() => v);\n}\nexport function padWithZeros(i, length) {\n let str = i.toString(10);\n while (str.length < length) {\n str = \"0\" + str;\n }\n return str;\n}\nexport function padLeftAndRightWithZeros(i, lengthLeft, lengthRight) {\n let str = i.toString(10);\n while (str.length < lengthLeft) {\n str = \"0\" + str;\n }\n while (str.length < lengthRight) {\n str = str + \"0\";\n }\n return str;\n}\nexport function dateOffset(date) {\n const date1 = date;\n return typeof date1.offset === \"number\"\n ? date1.offset\n : (date.kind === 1 /* UTC */\n ? 0 : date.getTimezoneOffset() * -60000);\n}\nexport function int16ToString(i, radix) {\n i = i < 0 && radix != null && radix !== 10 ? 0xFFFF + i + 1 : i;\n return i.toString(radix);\n}\nexport function int32ToString(i, radix) {\n i = i < 0 && radix != null && radix !== 10 ? 0xFFFFFFFF + i + 1 : i;\n return i.toString(radix);\n}\nexport class ObjectRef {\n static id(o) {\n if (!ObjectRef.idMap.has(o)) {\n ObjectRef.idMap.set(o, ++ObjectRef.count);\n }\n return ObjectRef.idMap.get(o);\n }\n}\nObjectRef.idMap = new WeakMap();\nObjectRef.count = 0;\nexport function stringHash(s) {\n let i = 0;\n let h = 5381;\n const len = s.length;\n while (i < len) {\n h = (h * 33) ^ s.charCodeAt(i++);\n }\n return h;\n}\nexport function numberHash(x) {\n return x * 2654435761 | 0;\n}\n// From https://stackoverflow.com/a/37449594\nexport function combineHashCodes(hashes) {\n if (hashes.length === 0) {\n return 0;\n }\n return hashes.reduce((h1, h2) => {\n return ((h1 << 5) + h1) ^ h2;\n });\n}\nexport function identityHash(x) {\n if (x == null) {\n return 0;\n }\n switch (typeof x) {\n case \"boolean\":\n return x ? 1 : 0;\n case \"number\":\n return numberHash(x);\n case \"string\":\n return stringHash(x);\n default:\n return numberHash(ObjectRef.id(x));\n }\n}\nexport function structuralHash(x) {\n if (x == null) {\n return 0;\n }\n switch (typeof x) {\n case \"boolean\":\n return x ? 1 : 0;\n case \"number\":\n return numberHash(x);\n case \"string\":\n return stringHash(x);\n default: {\n if (isHashable(x)) {\n return x.GetHashCode();\n }\n else if (isArrayLike(x)) {\n const len = x.length;\n const hashes = new Array(len);\n for (let i = 0; i < len; i++) {\n hashes[i] = structuralHash(x[i]);\n }\n return combineHashCodes(hashes);\n }\n else {\n return stringHash(String(x));\n }\n }\n }\n}\nexport function equalArraysWith(x, y, eq) {\n if (x == null) {\n return y == null;\n }\n if (y == null) {\n return false;\n }\n if (x.length !== y.length) {\n return false;\n }\n for (let i = 0; i < x.length; i++) {\n if (!eq(x[i], y[i])) {\n return false;\n }\n }\n return true;\n}\nexport function equalArrays(x, y) {\n return equalArraysWith(x, y, equals);\n}\n// export function equalObjects(x: { [k: string]: any }, y: { [k: string]: any }): boolean {\n// if (x == null) { return y == null; }\n// if (y == null) { return false; }\n// const xKeys = Object.keys(x);\n// const yKeys = Object.keys(y);\n// if (xKeys.length !== yKeys.length) {\n// return false;\n// }\n// xKeys.sort();\n// yKeys.sort();\n// for (let i = 0; i < xKeys.length; i++) {\n// if (xKeys[i] !== yKeys[i] || !equals(x[xKeys[i]], y[yKeys[i]])) {\n// return false;\n// }\n// }\n// return true;\n// }\nexport function equals(x, y) {\n if (x === y) {\n return true;\n }\n else if (x == null) {\n return y == null;\n }\n else if (y == null) {\n return false;\n }\n else if (typeof x !== \"object\") {\n return false;\n }\n else if (isEquatable(x)) {\n return x.Equals(y);\n }\n else if (isArrayLike(x)) {\n return isArrayLike(y) && equalArrays(x, y);\n }\n else if (x instanceof Date) {\n return (y instanceof Date) && compareDates(x, y) === 0;\n }\n else {\n return false;\n }\n}\nexport function compareDates(x, y) {\n let xtime;\n let ytime;\n // DateTimeOffset and DateTime deals with equality differently.\n if (\"offset\" in x && \"offset\" in y) {\n xtime = x.getTime();\n ytime = y.getTime();\n }\n else {\n xtime = x.getTime() + dateOffset(x);\n ytime = y.getTime() + dateOffset(y);\n }\n return xtime === ytime ? 0 : (xtime < ytime ? -1 : 1);\n}\nexport function comparePrimitives(x, y) {\n return x === y ? 0 : (x < y ? -1 : 1);\n}\nexport function compareArraysWith(x, y, comp) {\n if (x == null) {\n return y == null ? 0 : 1;\n }\n if (y == null) {\n return -1;\n }\n if (x.length !== y.length) {\n return x.length < y.length ? -1 : 1;\n }\n for (let i = 0, j = 0; i < x.length; i++) {\n j = comp(x[i], y[i]);\n if (j !== 0) {\n return j;\n }\n }\n return 0;\n}\nexport function compareArrays(x, y) {\n return compareArraysWith(x, y, compare);\n}\nexport function compareObjects(x, y) {\n if (x == null) {\n return y == null ? 0 : 1;\n }\n if (y == null) {\n return -1;\n }\n const xKeys = Object.keys(x);\n const yKeys = Object.keys(y);\n if (xKeys.length !== yKeys.length) {\n return xKeys.length < yKeys.length ? -1 : 1;\n }\n xKeys.sort();\n yKeys.sort();\n for (let i = 0, j = 0; i < xKeys.length; i++) {\n const key = xKeys[i];\n if (key !== yKeys[i]) {\n return key < yKeys[i] ? -1 : 1;\n }\n else {\n j = compare(x[key], y[key]);\n if (j !== 0) {\n return j;\n }\n }\n }\n return 0;\n}\nexport function compare(x, y) {\n if (x === y) {\n return 0;\n }\n else if (x == null) {\n return y == null ? 0 : -1;\n }\n else if (y == null) {\n return 1;\n }\n else if (typeof x !== \"object\") {\n return x < y ? -1 : 1;\n }\n else if (isComparable(x)) {\n return x.CompareTo(y);\n }\n else if (isArrayLike(x) && isArrayLike(y)) {\n return compareArrays(x, y);\n }\n else if (x instanceof Date && y instanceof Date) {\n return compareDates(x, y);\n }\n else {\n return 1;\n }\n}\nexport function min(comparer, x, y) {\n return comparer(x, y) < 0 ? x : y;\n}\nexport function max(comparer, x, y) {\n return comparer(x, y) > 0 ? x : y;\n}\nexport function createAtom(value) {\n let atom = value;\n return (value) => {\n if (value === void 0) {\n return atom;\n }\n else {\n atom = value;\n return void 0;\n }\n };\n}\nconst CaseRules = {\n None: 0,\n LowerFirst: 1,\n SnakeCase: 2,\n SnakeCaseAllCaps: 3,\n KebabCase: 4,\n};\nfunction dashify(str, separator) {\n return str.replace(/[a-z]?[A-Z]/g, (m) => m.length === 1\n ? m.toLowerCase()\n : m.charAt(0) + separator + m.charAt(1).toLowerCase());\n}\nfunction changeCase(str, caseRule) {\n switch (caseRule) {\n case CaseRules.LowerFirst:\n return str.charAt(0).toLowerCase() + str.slice(1);\n case CaseRules.SnakeCase:\n return dashify(str, \"_\");\n case CaseRules.SnakeCaseAllCaps:\n return dashify(str, \"_\").toUpperCase();\n case CaseRules.KebabCase:\n return dashify(str, \"-\");\n case CaseRules.None:\n default:\n return str;\n }\n}\nexport function createObj(fields, caseRule = CaseRules.None) {\n function fail(kvPair) {\n throw new Error(\"Cannot infer key and value of \" + String(kvPair));\n }\n const o = {};\n const definedCaseRule = caseRule;\n for (let kvPair of fields) {\n let caseRule = CaseRules.None;\n if (kvPair == null) {\n fail(kvPair);\n }\n // Deflate unions and use the defined case rule\n if (typeof kvPair.toJSON === \"function\") {\n kvPair = kvPair.toJSON();\n caseRule = definedCaseRule;\n }\n if (Array.isArray(kvPair)) {\n switch (kvPair.length) {\n case 0:\n fail(kvPair);\n break;\n case 1:\n o[changeCase(kvPair[0], caseRule)] = true;\n break;\n case 2:\n const value = kvPair[1];\n o[changeCase(kvPair[0], caseRule)] = value;\n break;\n default:\n o[changeCase(kvPair[0], caseRule)] = kvPair.slice(1);\n }\n }\n else if (typeof kvPair === \"string\") {\n o[changeCase(kvPair, caseRule)] = true;\n }\n else {\n fail(kvPair);\n }\n }\n return o;\n}\nexport function jsOptions(mutator) {\n const opts = {};\n mutator(opts);\n return opts;\n}\nexport function round(value, digits = 0) {\n const m = Math.pow(10, digits);\n const n = +(digits ? value * m : value).toFixed(8);\n const i = Math.floor(n);\n const f = n - i;\n const e = 1e-8;\n const r = (f > 0.5 - e && f < 0.5 + e) ? ((i % 2 === 0) ? i : i + 1) : Math.round(n);\n return digits ? r / m : r;\n}\nexport function sign(x) {\n return x > 0 ? 1 : x < 0 ? -1 : 0;\n}\nexport function randomNext(min, max) {\n return Math.floor(Math.random() * (max - min)) + min;\n}\nexport function randomBytes(buffer) {\n if (buffer == null) {\n throw new Error(\"Buffer cannot be null\");\n }\n for (let i = 0; i < buffer.length; i += 6) {\n // Pick random 48-bit number. Fill buffer in 2 24-bit chunks to avoid bitwise truncation.\n let r = Math.floor(Math.random() * 281474976710656); // Low 24 bits = chunk 1.\n const rhi = Math.floor(r / 16777216); // High 24 bits shifted via division = chunk 2.\n for (let j = 0; j < 6 && i + j < buffer.length; j++) {\n if (j === 3) {\n r = rhi;\n }\n buffer[i + j] = r & 255;\n r >>>= 8;\n }\n }\n}\nexport function unescapeDataString(s) {\n // https://stackoverflow.com/a/4458580/524236\n return decodeURIComponent((s).replace(/\\+/g, \"%20\"));\n}\nexport function escapeDataString(s) {\n return encodeURIComponent(s).replace(/!/g, \"%21\")\n .replace(/'/g, \"%27\")\n .replace(/\\(/g, \"%28\")\n .replace(/\\)/g, \"%29\")\n .replace(/\\*/g, \"%2A\");\n}\nexport function escapeUriString(s) {\n return encodeURI(s);\n}\n// ICollection.Clear and Count members can be called on Arrays\n// or Dictionaries so we need a runtime check (see #1120)\nexport function count(col) {\n if (isArrayLike(col)) {\n return col.length;\n }\n else {\n let count = 0;\n for (const _ of col) {\n count++;\n }\n return count;\n }\n}\nexport function clear(col) {\n if (isArrayLike(col)) {\n col.splice(0);\n }\n else {\n col.clear();\n }\n}\nconst CURRIED_KEY = \"__CURRIED__\";\nexport function uncurry(arity, f) {\n // f may be a function option with None value\n if (f == null) {\n return null;\n }\n // The function is already uncurried\n if (f.length > 1) {\n // if (CURRIED_KEY in f) { // This doesn't always work\n return f;\n }\n let uncurriedFn;\n switch (arity) {\n case 2:\n uncurriedFn = (a1, a2) => f(a1)(a2);\n break;\n case 3:\n uncurriedFn = (a1, a2, a3) => f(a1)(a2)(a3);\n break;\n case 4:\n uncurriedFn = (a1, a2, a3, a4) => f(a1)(a2)(a3)(a4);\n break;\n case 5:\n uncurriedFn = (a1, a2, a3, a4, a5) => f(a1)(a2)(a3)(a4)(a5);\n break;\n case 6:\n uncurriedFn = (a1, a2, a3, a4, a5, a6) => f(a1)(a2)(a3)(a4)(a5)(a6);\n break;\n case 7:\n uncurriedFn = (a1, a2, a3, a4, a5, a6, a7) => f(a1)(a2)(a3)(a4)(a5)(a6)(a7);\n break;\n case 8:\n uncurriedFn = (a1, a2, a3, a4, a5, a6, a7, a8) => f(a1)(a2)(a3)(a4)(a5)(a6)(a7)(a8);\n break;\n default:\n throw new Error(\"Uncurrying to more than 8-arity is not supported: \" + arity);\n }\n uncurriedFn[CURRIED_KEY] = f;\n return uncurriedFn;\n}\nexport function curry(arity, f) {\n if (f == null) {\n return undefined;\n }\n if (CURRIED_KEY in f) {\n return f[CURRIED_KEY];\n }\n switch (arity) {\n case 2:\n return (a1) => (a2) => f(a1, a2);\n case 3:\n return (a1) => (a2) => (a3) => f(a1, a2, a3);\n case 4:\n return (a1) => (a2) => (a3) => (a4) => f(a1, a2, a3, a4);\n case 5:\n return (a1) => (a2) => (a3) => (a4) => (a5) => f(a1, a2, a3, a4, a5);\n case 6:\n return (a1) => (a2) => (a3) => (a4) => (a5) => (a6) => f(a1, a2, a3, a4, a5, a6);\n case 7:\n return (a1) => (a2) => (a3) => (a4) => (a5) => (a6) => (a7) => f(a1, a2, a3, a4, a5, a6, a7);\n case 8:\n return (a1) => (a2) => (a3) => (a4) => (a5) => (a6) => (a7) => (a8) => f(a1, a2, a3, a4, a5, a6, a7, a8);\n default:\n throw new Error(\"Currying to more than 8-arity is not supported: \" + arity);\n }\n}\nexport function partialApply(arity, f, args) {\n if (f == null) {\n return null;\n }\n else if (CURRIED_KEY in f) {\n f = f[CURRIED_KEY];\n for (let i = 0; i < args.length; i++) {\n f = f(args[i]);\n }\n return f;\n }\n else {\n switch (arity) {\n case 1:\n // Wrap arguments to make sure .concat doesn't destruct arrays. Example\n // [1,2].concat([3,4],5) --> [1,2,3,4,5] // fails\n // [1,2].concat([[3,4],5]) --> [1,2,[3,4],5] // ok\n return (a1) => f.apply(null, args.concat([a1]));\n case 2:\n return (a1) => (a2) => f.apply(null, args.concat([a1, a2]));\n case 3:\n return (a1) => (a2) => (a3) => f.apply(null, args.concat([a1, a2, a3]));\n case 4:\n return (a1) => (a2) => (a3) => (a4) => f.apply(null, args.concat([a1, a2, a3, a4]));\n case 5:\n return (a1) => (a2) => (a3) => (a4) => (a5) => f.apply(null, args.concat([a1, a2, a3, a4, a5]));\n case 6:\n return (a1) => (a2) => (a3) => (a4) => (a5) => (a6) => f.apply(null, args.concat([a1, a2, a3, a4, a5, a6]));\n case 7:\n return (a1) => (a2) => (a3) => (a4) => (a5) => (a6) => (a7) => f.apply(null, args.concat([a1, a2, a3, a4, a5, a6, a7]));\n case 8:\n return (a1) => (a2) => (a3) => (a4) => (a5) => (a6) => (a7) => (a8) => f.apply(null, args.concat([a1, a2, a3, a4, a5, a6, a7, a8]));\n default:\n throw new Error(\"Partially applying to more than 8-arity is not supported: \" + arity);\n }\n }\n}\nexport function mapCurriedArgs(fn, mappings) {\n function mapArg(fn, arg, mappings, idx) {\n const mapping = mappings[idx];\n if (mapping !== 0) {\n const expectedArity = mapping[0];\n const actualArity = mapping[1];\n if (expectedArity > 1) {\n arg = curry(expectedArity, arg);\n }\n if (actualArity > 1) {\n arg = uncurry(actualArity, arg);\n }\n }\n const res = fn(arg);\n if (idx + 1 === mappings.length) {\n return res;\n }\n else {\n return (arg) => mapArg(res, arg, mappings, idx + 1);\n }\n }\n return (arg) => mapArg(fn, arg, mappings, 0);\n}\nexport function addToDict(dict, k, v) {\n if (dict.has(k)) {\n throw new Error(\"An item with the same key has already been added. Key: \" + k);\n }\n dict.set(k, v);\n}\nexport function getItemFromDict(map, key) {\n if (map.has(key)) {\n return map.get(key);\n }\n else {\n throw new Error(`The given key '${key}' was not present in the dictionary.`);\n }\n}\n//# sourceMappingURL=Util.js.map","// tslint:disable: space-before-function-paren\nimport { combineHashCodes, compare, compareArrays, equalArrays, equals, identityHash, numberHash, structuralHash } from \"./Util\";\nfunction sameType(x, y) {\n return y != null && Object.getPrototypeOf(x).constructor === Object.getPrototypeOf(y).constructor;\n}\n// Taken from Babel helpers\nfunction inherits(subClass, superClass) {\n // if (typeof superClass !== \"function\" && superClass !== null) {\n // throw new TypeError(\n // \"Super expression must either be null or a function, not \" +\n // typeof superClass\n // );\n // }\n subClass.prototype = Object.create(superClass && superClass.prototype, {\n constructor: {\n value: subClass,\n enumerable: false,\n writable: true,\n configurable: true,\n },\n });\n // if (superClass)\n // Object.setPrototypeOf\n // ? Object.setPrototypeOf(subClass, superClass)\n // : (subClass.__proto__ = superClass);\n}\nexport function declare(cons, superClass) {\n inherits(cons, superClass || SystemObject);\n return cons;\n}\nexport function SystemObject() {\n return;\n}\nSystemObject.prototype.toString = function () {\n return \"{\" + Object.keys(this).map((k) => k + \" = \" + String(this[k])).join(\";\\n \") + \"}\";\n};\nSystemObject.prototype.GetHashCode = function () {\n return identityHash(this);\n};\nSystemObject.prototype.Equals = function (other) {\n return this === other;\n};\nfunction compareList(self, other) {\n if (self === other) {\n return 0;\n }\n else {\n if (other == null) {\n return -1;\n }\n while (self.tail != null) {\n if (other.tail == null) {\n return 1;\n }\n const res = compare(self.head, other.head);\n if (res !== 0) {\n return res;\n }\n self = self.tail;\n other = other.tail;\n }\n return other.tail == null ? 0 : -1;\n }\n}\nexport class List {\n constructor(head, tail) {\n this.head = head;\n this.tail = tail;\n }\n toString() {\n return \"[\" + Array.from(this).join(\"; \") + \"]\";\n }\n toJSON() {\n return Array.from(this);\n }\n [Symbol.iterator]() {\n let cur = this;\n return {\n next: () => {\n const value = cur === null || cur === void 0 ? void 0 : cur.head;\n const done = (cur === null || cur === void 0 ? void 0 : cur.tail) == null;\n cur = cur === null || cur === void 0 ? void 0 : cur.tail;\n return { done, value };\n },\n };\n }\n GetHashCode() {\n const hashes = Array.from(this).map(structuralHash);\n return combineHashCodes(hashes);\n }\n Equals(other) {\n return compareList(this, other) === 0;\n }\n CompareTo(other) {\n return compareList(this, other);\n }\n}\nexport function Union(tag, name, ...fields) {\n this.tag = tag | 0;\n this.name = name;\n this.fields = fields;\n}\nUnion.prototype.toString = function () {\n const len = this.fields.length;\n if (len === 0) {\n return this.name;\n }\n else if (len === 1) {\n return this.name + \" \" + String(this.fields[0]);\n }\n else {\n return this.name + \" (\" + this.fields.map((x) => String(x)).join(\",\") + \")\";\n }\n};\nUnion.prototype.toJSON = function () {\n return this.fields.length === 0\n ? this.name\n : [this.name].concat(this.fields);\n};\nUnion.prototype.GetHashCode = function () {\n const hashes = this.fields.map((x) => structuralHash(x));\n hashes.splice(0, 0, numberHash(this.tag));\n return combineHashCodes(hashes);\n};\nUnion.prototype.Equals = function (other) {\n return this === other\n || (sameType(this, other)\n && this.tag === other.tag\n && equalArrays(this.fields, other.fields));\n};\nUnion.prototype.CompareTo = function (other) {\n if (this === other) {\n return 0;\n }\n else if (!sameType(this, other)) {\n return -1;\n }\n else if (this.tag === other.tag) {\n return compareArrays(this.fields, other.fields);\n }\n else {\n return this.tag < other.tag ? -1 : 1;\n }\n};\nfunction recordToJson(record, getFieldNames) {\n const o = {};\n const keys = getFieldNames == null ? Object.keys(record) : getFieldNames(record);\n for (let i = 0; i < keys.length; i++) {\n o[keys[i]] = record[keys[i]];\n }\n return o;\n}\nfunction recordEquals(self, other, getFieldNames) {\n if (self === other) {\n return true;\n }\n else if (!sameType(self, other)) {\n return false;\n }\n else {\n const thisNames = getFieldNames == null ? Object.keys(self) : getFieldNames(self);\n for (let i = 0; i < thisNames.length; i++) {\n if (!equals(self[thisNames[i]], other[thisNames[i]])) {\n return false;\n }\n }\n return true;\n }\n}\nfunction recordCompare(self, other, getFieldNames) {\n if (self === other) {\n return 0;\n }\n else if (!sameType(self, other)) {\n return -1;\n }\n else {\n const thisNames = getFieldNames == null ? Object.keys(self) : getFieldNames(self);\n for (let i = 0; i < thisNames.length; i++) {\n const result = compare(self[thisNames[i]], other[thisNames[i]]);\n if (result !== 0) {\n return result;\n }\n }\n return 0;\n }\n}\nexport function Record() {\n return;\n}\nRecord.prototype.toString = function () {\n return \"{\" + Object.keys(this).map((k) => k + \" = \" + String(this[k])).join(\";\\n \") + \"}\";\n};\nRecord.prototype.toJSON = function () {\n return recordToJson(this);\n};\nRecord.prototype.GetHashCode = function () {\n const hashes = Object.keys(this).map((k) => structuralHash(this[k]));\n return combineHashCodes(hashes);\n};\nRecord.prototype.Equals = function (other) {\n return recordEquals(this, other);\n};\nRecord.prototype.CompareTo = function (other) {\n return recordCompare(this, other);\n};\nexport function anonRecord(o) {\n return Object.assign(Object.create(Record.prototype), o);\n}\nexport const FSharpRef = declare(function FSharpRef(contents) {\n this.contents = contents;\n}, Record);\nexport const Exception = declare(function Exception(message) {\n this.stack = Error().stack;\n this.message = message;\n}, SystemObject);\nexport function isException(x) {\n return x instanceof Error || x instanceof Exception;\n}\nfunction getFSharpExceptionFieldNames(self) {\n return Object.keys(self).filter((k) => k !== \"message\" && k !== \"stack\");\n}\nexport const FSharpException = declare(function FSharpException() {\n Exception.call(this);\n}, Exception);\nFSharpException.prototype.toString = function () {\n const fieldNames = getFSharpExceptionFieldNames(this);\n const len = fieldNames.length;\n if (len === 0) {\n return this.message;\n }\n else if (len === 1) {\n return this.message + \" \" + String(this[fieldNames[0]]);\n }\n else {\n return this.message + \" (\" + fieldNames.map((k) => String(this[k])).join(\",\") + \")\";\n }\n};\nFSharpException.prototype.toJSON = function () {\n return recordToJson(this, getFSharpExceptionFieldNames);\n};\nFSharpException.prototype.GetHashCode = function () {\n const hashes = getFSharpExceptionFieldNames(this).map((k) => structuralHash(this[k]));\n return combineHashCodes(hashes);\n};\nFSharpException.prototype.Equals = function (other) {\n return recordEquals(this, other, getFSharpExceptionFieldNames);\n};\nFSharpException.prototype.CompareTo = function (other) {\n return recordCompare(this, other, getFSharpExceptionFieldNames);\n};\nexport const MatchFailureException = declare(function MatchFailureException(arg1, arg2, arg3) {\n this.arg1 = arg1;\n this.arg2 = arg2 | 0;\n this.arg3 = arg3 | 0;\n this.message = \"The match cases were incomplete\";\n}, FSharpException);\nexport const Attribute = declare(function Attribute() { return; }, SystemObject);\n//# sourceMappingURL=Types.js.map","import { anonRecord as makeAnonRecord, Record, Union } from \"./Types\";\nimport { compareArraysWith, equalArraysWith } from \"./Util\";\nexport class CaseInfo {\n constructor(declaringType, tag, name, fields) {\n this.declaringType = declaringType;\n this.tag = tag;\n this.name = name;\n this.fields = fields;\n }\n}\nexport class TypeInfo {\n constructor(fullname, generics, constructor, fields, cases, enumCases) {\n this.fullname = fullname;\n this.generics = generics;\n this.constructor = constructor;\n this.fields = fields;\n this.cases = cases;\n this.enumCases = enumCases;\n }\n toString() {\n return fullName(this);\n }\n Equals(other) {\n return equals(this, other);\n }\n CompareTo(other) {\n return compare(this, other);\n }\n}\nexport function getGenerics(t) {\n return t.generics != null ? t.generics : [];\n}\nexport function equals(t1, t2) {\n if (t1.fullname === \"\") { // Anonymous records\n return t2.fullname === \"\"\n && equalArraysWith(getRecordElements(t1), getRecordElements(t2), ([k1, v1], [k2, v2]) => k1 === k2 && equals(v1, v2));\n }\n else {\n return t1.fullname === t2.fullname\n && equalArraysWith(getGenerics(t1), getGenerics(t2), equals);\n }\n}\n// System.Type is not comparable in .NET, but let's implement this\n// in case users want to create a dictionary with types as keys\nexport function compare(t1, t2) {\n if (t1.fullname !== t2.fullname) {\n return t1.fullname < t2.fullname ? -1 : 1;\n }\n else {\n return compareArraysWith(getGenerics(t1), getGenerics(t2), compare);\n }\n}\nexport function type(fullname, generics) {\n return new TypeInfo(fullname, generics);\n}\nexport function record(fullname, generics, constructor, fields) {\n return new TypeInfo(fullname, generics, constructor, fields);\n}\nexport function anonRecord(...fields) {\n return new TypeInfo(\"\", undefined, undefined, () => fields);\n}\nexport function union(fullname, generics, constructor, cases) {\n const t = new TypeInfo(fullname, generics, constructor, undefined, () => cases().map((x, i) => typeof x === \"string\"\n ? new CaseInfo(t, i, x)\n : new CaseInfo(t, i, x[0], x[1])));\n return t;\n}\nexport function tuple(...generics) {\n return new TypeInfo(\"System.Tuple`\" + generics.length, generics);\n}\nexport function delegate(...generics) {\n return new TypeInfo(\"System.Func`\" + generics.length, generics);\n}\nexport function lambda(argType, returnType) {\n return new TypeInfo(\"Microsoft.FSharp.Core.FSharpFunc`2\", [argType, returnType]);\n}\nexport function option(generic) {\n return new TypeInfo(\"Microsoft.FSharp.Core.FSharpOption`1\", [generic]);\n}\nexport function list(generic) {\n return new TypeInfo(\"Microsoft.FSharp.Collections.FSharpList`1\", [generic]);\n}\nexport function array(generic) {\n return new TypeInfo(generic.fullname + \"[]\", [generic]);\n}\nexport function enumType(fullname, underlyingType, enumCases) {\n return new TypeInfo(fullname, [underlyingType], undefined, undefined, undefined, enumCases);\n}\nexport const obj = new TypeInfo(\"System.Object\");\nexport const unit = new TypeInfo(\"Microsoft.FSharp.Core.Unit\");\nexport const char = new TypeInfo(\"System.Char\");\nexport const string = new TypeInfo(\"System.String\");\nexport const bool = new TypeInfo(\"System.Boolean\");\nexport const int8 = new TypeInfo(\"System.SByte\");\nexport const uint8 = new TypeInfo(\"System.Byte\");\nexport const int16 = new TypeInfo(\"System.Int16\");\nexport const uint16 = new TypeInfo(\"System.UInt16\");\nexport const int32 = new TypeInfo(\"System.Int32\");\nexport const uint32 = new TypeInfo(\"System.UInt32\");\nexport const float32 = new TypeInfo(\"System.Single\");\nexport const float64 = new TypeInfo(\"System.Double\");\nexport const decimal = new TypeInfo(\"System.Decimal\");\nexport function name(info) {\n if (Array.isArray(info)) {\n return info[0];\n }\n else if (info instanceof CaseInfo) {\n return info.name;\n }\n else {\n const i = info.fullname.lastIndexOf(\".\");\n return i === -1 ? info.fullname : info.fullname.substr(i + 1);\n }\n}\nexport function fullName(t) {\n const gen = t.generics != null && !isArray(t) ? t.generics : [];\n if (gen.length > 0) {\n return t.fullname + \"[\" + gen.map((x) => fullName(x)).join(\",\") + \"]\";\n }\n else {\n return t.fullname;\n }\n}\nexport function namespace(t) {\n const i = t.fullname.lastIndexOf(\".\");\n return i === -1 ? \"\" : t.fullname.substr(0, i);\n}\nexport function isArray(t) {\n return t.fullname.endsWith(\"[]\");\n}\nexport function getElementType(t) {\n var _a;\n return isArray(t) ? (_a = t.generics) === null || _a === void 0 ? void 0 : _a[0] : undefined;\n}\nexport function isGenericType(t) {\n return t.generics != null && t.generics.length > 0;\n}\nexport function isEnum(t) {\n return t.enumCases != null && t.enumCases.length > 0;\n}\n/**\n * This doesn't replace types for fields (records) or cases (unions)\n * but it should be enough for type comparison purposes\n */\nexport function getGenericTypeDefinition(t) {\n return t.generics == null ? t : new TypeInfo(t.fullname, t.generics.map(() => obj));\n}\nexport function getEnumUnderlyingType(t) {\n var _a;\n return (_a = t.generics) === null || _a === void 0 ? void 0 : _a[0];\n}\nexport function getEnumValues(t) {\n if (isEnum(t) && t.enumCases != null) {\n return t.enumCases.map((kv) => kv[1]);\n }\n else {\n throw new Error(`${t.fullname} is not an enum type`);\n }\n}\nexport function getEnumNames(t) {\n if (isEnum(t) && t.enumCases != null) {\n return t.enumCases.map((kv) => kv[0]);\n }\n else {\n throw new Error(`${t.fullname} is not an enum type`);\n }\n}\nfunction getEnumCase(t, v) {\n if (t.enumCases != null) {\n if (typeof v === \"string\") {\n for (const kv of t.enumCases) {\n if (kv[0] === v) {\n return kv;\n }\n }\n throw new Error(`'${v}' was not found in ${t.fullname}`);\n }\n else {\n for (const kv of t.enumCases) {\n if (kv[1] === v) {\n return kv;\n }\n }\n // .NET returns the number even if it doesn't match any of the cases\n return [\"\", v];\n }\n }\n else {\n throw new Error(`${t.fullname} is not an enum type`);\n }\n}\nexport function parseEnum(t, str) {\n // TODO: better int parsing here, parseInt ceils floats: \"4.8\" -> 4\n const value = parseInt(str, 10);\n return getEnumCase(t, isNaN(value) ? str : value)[1];\n}\nexport function tryParseEnum(t, str) {\n try {\n const v = parseEnum(t, str);\n return [true, v];\n }\n catch (_a) {\n // supress error\n }\n return [false, NaN];\n}\nexport function getEnumName(t, v) {\n return getEnumCase(t, v)[0];\n}\nexport function isEnumDefined(t, v) {\n try {\n const kv = getEnumCase(t, v);\n return kv[0] != null && kv[0] !== \"\";\n }\n catch (_a) {\n // supress error\n }\n return false;\n}\n// FSharpType\nexport function getUnionCases(t) {\n if (t.cases != null) {\n return t.cases();\n }\n else {\n throw new Error(`${t.fullname} is not an F# union type`);\n }\n}\nexport function getRecordElements(t) {\n if (t.fields != null) {\n return t.fields();\n }\n else {\n throw new Error(`${t.fullname} is not an F# record type`);\n }\n}\nexport function getTupleElements(t) {\n if (isTuple(t) && t.generics != null) {\n return t.generics;\n }\n else {\n throw new Error(`${t.fullname} is not a tuple type`);\n }\n}\nexport function getFunctionElements(t) {\n if (isFunction(t) && t.generics != null) {\n const gen = t.generics;\n return [gen[0], gen[1]];\n }\n else {\n throw new Error(`${t.fullname} is not an F# function type`);\n }\n}\nexport function isUnion(t) {\n return t instanceof TypeInfo ? t.cases != null : t instanceof Union;\n}\nexport function isRecord(t) {\n return t instanceof TypeInfo ? t.fields != null : t instanceof Record;\n}\nexport function isTuple(t) {\n return t.fullname.startsWith(\"System.Tuple\");\n}\n// In .NET this is false for delegates\nexport function isFunction(t) {\n return t.fullname === \"Microsoft.FSharp.Core.FSharpFunc`2\";\n}\n// FSharpValue\nexport function getUnionFields(v, t) {\n const cases = getUnionCases(t);\n const case_ = cases[v.tag];\n if (case_ == null) {\n throw new Error(`Cannot find case ${v.name} in union type`);\n }\n return [case_, v.fields];\n}\nexport function getUnionCaseFields(uci) {\n return uci.fields == null ? [] : uci.fields;\n}\nexport function getRecordFields(v) {\n return Object.keys(v).map((k) => v[k]);\n}\nexport function getRecordField(v, field) {\n return v[field[0]];\n}\nexport function getTupleFields(v) {\n return v;\n}\nexport function getTupleField(v, i) {\n return v[i];\n}\nexport function makeUnion(uci, values) {\n const expectedLength = (uci.fields || []).length;\n if (values.length !== expectedLength) {\n throw new Error(`Expected an array of length ${expectedLength} but got ${values.length}`);\n }\n return uci.declaringType.constructor != null\n ? new uci.declaringType.constructor(uci.tag, uci.name, ...values)\n : {};\n}\nexport function makeRecord(t, values) {\n const fields = getRecordElements(t);\n if (fields.length !== values.length) {\n throw new Error(`Expected an array of length ${fields.length} but got ${values.length}`);\n }\n return t.constructor != null\n ? new t.constructor(...values)\n : makeAnonRecord(fields.reduce((obj, [key, _t], i) => {\n obj[key] = values[i];\n return obj;\n }, {}));\n}\nexport function makeTuple(values, _t) {\n return values;\n}\nexport function getValue(propertyInfo, v) {\n return v[propertyInfo[0]];\n}\n// Fable.Core.Reflection\nfunction assertUnion(x) {\n if (!(x instanceof Union)) {\n throw new Error(`Value is not an F# union type`);\n }\n}\nexport function getCaseTag(x) {\n assertUnion(x);\n return x.tag;\n}\nexport function getCaseName(x) {\n assertUnion(x);\n return x.name;\n}\nexport function getCaseFields(x) {\n assertUnion(x);\n return x.fields;\n}\n//# sourceMappingURL=Reflection.js.map","import { declare, Union } from \"./Types\";\nimport { compare, equals, structuralHash } from \"./Util\";\n// Using a class here for better compatibility with TS files importing Some\nexport class Some {\n constructor(value) {\n this.value = value;\n }\n // Don't add \"Some\" for consistency with erased options\n toString() {\n return String(this.value);\n }\n toJSON() {\n return this.value;\n }\n GetHashCode() {\n return structuralHash(this.value);\n }\n Equals(other) {\n if (other == null) {\n return false;\n }\n else {\n return equals(this.value, other instanceof Some ? other.value : other);\n }\n }\n CompareTo(other) {\n if (other == null) {\n return 1;\n }\n else {\n return compare(this.value, other instanceof Some ? other.value : other);\n }\n }\n}\nexport function some(x) {\n return x == null || x instanceof Some ? new Some(x) : x;\n}\nexport function value(x) {\n if (x == null) {\n throw new Error(\"Option has no value\");\n }\n else {\n return x instanceof Some ? x.value : x;\n }\n}\nexport function tryValue(x) {\n return x instanceof Some ? x.value : x;\n}\nexport function toArray(opt) {\n return (opt == null) ? [] : [value(opt)];\n}\nexport function defaultArg(opt, defaultValue) {\n return (opt != null) ? value(opt) : defaultValue;\n}\nexport function defaultArgWith(opt, defThunk) {\n return (opt != null) ? value(opt) : defThunk();\n}\nexport function filter(predicate, opt) {\n return (opt != null) ? (predicate(value(opt)) ? opt : null) : opt;\n}\nexport function map(mapping, opt) {\n return (opt != null) ? some(mapping(value(opt))) : null;\n}\nexport function map2(mapping, opt1, opt2) {\n return (opt1 != null && opt2 != null) ? mapping(value(opt1), value(opt2)) : null;\n}\nexport function map3(mapping, opt1, opt2, opt3) {\n return (opt1 != null && opt2 != null && opt3 != null) ? mapping(value(opt1), value(opt2), value(opt3)) : null;\n}\nexport function bind(binder, opt) {\n return opt != null ? binder(value(opt)) : null;\n}\nexport function tryOp(op, arg) {\n try {\n return some(op(arg));\n }\n catch (_a) {\n return null;\n }\n}\nexport const Choice = declare(function Choice(tag, name, field) {\n Union.call(this, tag, name, field);\n}, Union);\nexport function choice1(x) {\n return new Choice(0, \"Choice1Of2\", x);\n}\nexport function choice2(x) {\n return new Choice(1, \"Choice2Of2\", x);\n}\nexport function tryValueIfChoice1(x) {\n return x.tag === 0 ? some(x.fields[0]) : null;\n}\nexport function tryValueIfChoice2(x) {\n return x.tag === 1 ? some(x.fields[0]) : null;\n}\nexport const Result = declare(function Result(tag, name, field) {\n Union.call(this, tag, name, field);\n}, Union);\nexport function ok(x) {\n return new Result(0, \"Ok\", x);\n}\nexport function error(x) {\n return new Result(1, \"Error\", x);\n}\nexport function mapOk(f, result) {\n return result.tag === 0 ? ok(f(result.fields[0])) : result;\n}\nexport function mapError(f, result) {\n return result.tag === 1 ? error(f(result.fields[0])) : result;\n}\nexport function bindOk(f, result) {\n return result.tag === 0 ? f(result.fields[0]) : result;\n}\n//# sourceMappingURL=Option.js.map","// export type decimal = Decimal;\nexport var NumberStyles;\n(function (NumberStyles) {\n // None = 0x00000000,\n // AllowLeadingWhite = 0x00000001,\n // AllowTrailingWhite = 0x00000002,\n // AllowLeadingSign = 0x00000004,\n // AllowTrailingSign = 0x00000008,\n // AllowParentheses = 0x00000010,\n // AllowDecimalPoint = 0x00000020,\n // AllowThousands = 0x00000040,\n // AllowExponent = 0x00000080,\n // AllowCurrencySymbol = 0x00000100,\n NumberStyles[NumberStyles[\"AllowHexSpecifier\"] = 512] = \"AllowHexSpecifier\";\n // Integer = AllowLeadingWhite | AllowTrailingWhite | AllowLeadingSign,\n // HexNumber = AllowLeadingWhite | AllowTrailingWhite | AllowHexSpecifier,\n // Number = AllowLeadingWhite | AllowTrailingWhite | AllowLeadingSign |\n // AllowTrailingSign | AllowDecimalPoint | AllowThousands,\n // Float = AllowLeadingWhite | AllowTrailingWhite | AllowLeadingSign |\n // AllowDecimalPoint | AllowExponent,\n // Currency = AllowLeadingWhite | AllowTrailingWhite | AllowLeadingSign | AllowTrailingSign |\n // AllowParentheses | AllowDecimalPoint | AllowThousands | AllowCurrencySymbol,\n // Any = AllowLeadingWhite | AllowTrailingWhite | AllowLeadingSign | AllowTrailingSign |\n // AllowParentheses | AllowDecimalPoint | AllowThousands | AllowCurrencySymbol | AllowExponent,\n})(NumberStyles || (NumberStyles = {}));\nfunction validResponse(regexMatch, radix) {\n const [/*all*/ , sign, prefix, digits] = regexMatch;\n return {\n sign: sign || \"\",\n prefix: prefix || \"\",\n digits,\n radix,\n };\n}\nfunction getRange(unsigned, bitsize) {\n switch (bitsize) {\n case 8: return unsigned ? [0, 255] : [-128, 127];\n case 16: return unsigned ? [0, 65535] : [-32768, 32767];\n case 32: return unsigned ? [0, 4294967295] : [-2147483648, 2147483647];\n default: throw new Error(\"Invalid bit size.\");\n }\n}\nfunction getInvalidDigits(radix) {\n switch (radix) {\n case 2: return /[^0-1]/;\n case 8: return /[^0-7]/;\n case 10: return /[^0-9]/;\n case 16: return /[^0-9a-fA-F]/;\n default:\n throw new Error(\"Invalid Base.\");\n }\n}\nfunction getRadix(prefix, style) {\n if (style & NumberStyles.AllowHexSpecifier) {\n return 16;\n }\n else {\n switch (prefix) {\n case \"0b\":\n case \"0B\": return 2;\n case \"0o\":\n case \"0O\": return 8;\n case \"0x\":\n case \"0X\": return 16;\n default: return 10;\n }\n }\n}\nexport function isValid(str, style, radix) {\n const integerRegex = /^\\s*([\\+\\-])?(0[xXoObB])?([0-9a-fA-F]+)\\s*$/;\n const res = integerRegex.exec(str.replace(/_/g, \"\"));\n if (res != null) {\n const [/*all*/ , /*sign*/ , prefix, digits] = res;\n radix = radix || getRadix(prefix, style);\n const invalidDigits = getInvalidDigits(radix);\n if (!invalidDigits.test(digits)) {\n return validResponse(res, radix);\n }\n }\n return null;\n}\nexport function parse(str, style, unsigned, bitsize, radix) {\n const res = isValid(str, style, radix);\n if (res != null) {\n let v = Number.parseInt(res.sign + res.digits, res.radix);\n if (!Number.isNaN(v)) {\n const [umin, umax] = getRange(true, bitsize);\n if (!unsigned && res.radix !== 10 && v >= umin && v <= umax) {\n v = v << (32 - bitsize) >> (32 - bitsize);\n }\n const [min, max] = getRange(unsigned, bitsize);\n if (v >= min && v <= max) {\n return v;\n }\n }\n }\n throw new Error(\"Input string was not in a correct format.\");\n}\nexport function tryParse(str, style, unsigned, bitsize) {\n try {\n const v = parse(str, style, unsigned, bitsize);\n return [true, v];\n }\n catch (_a) {\n // supress error\n }\n return [false, 0];\n}\nexport function op_UnaryNegation_Int8(x) {\n return x === -128 ? x : -x;\n}\nexport function op_UnaryNegation_Int16(x) {\n return x === -32768 ? x : -x;\n}\nexport function op_UnaryNegation_Int32(x) {\n return x === -2147483648 ? x : -x;\n}\n//# sourceMappingURL=Int32.js.map","// Adapted from: https://github.com/dcodeIO/long.js/blob/master/src/long.js\n// Apache License 2.0: https://github.com/dcodeIO/long.js/blob/master/LICENSE\nexport default Long;\n/**\n * wasm optimizations, to do native i64 multiplication and divide\n */\nvar wasm = null;\ntry {\n wasm = new WebAssembly.Instance(new WebAssembly.Module(new Uint8Array([\n 0, 97, 115, 109, 1, 0, 0, 0, 1, 13, 2, 96, 0, 1, 127, 96, 4, 127, 127, 127, 127, 1, 127, 3, 7, 6, 0, 1, 1, 1, 1, 1, 6, 6, 1, 127, 1, 65, 0, 11, 7, 50, 6, 3, 109, 117, 108, 0, 1, 5, 100, 105, 118, 95, 115, 0, 2, 5, 100, 105, 118, 95, 117, 0, 3, 5, 114, 101, 109, 95, 115, 0, 4, 5, 114, 101, 109, 95, 117, 0, 5, 8, 103, 101, 116, 95, 104, 105, 103, 104, 0, 0, 10, 191, 1, 6, 4, 0, 35, 0, 11, 36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173, 32, 3, 173, 66, 32, 134, 132, 126, 34, 4, 66, 32, 135, 167, 36, 0, 32, 4, 167, 11, 36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173, 32, 3, 173, 66, 32, 134, 132, 127, 34, 4, 66, 32, 135, 167, 36, 0, 32, 4, 167, 11, 36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173, 32, 3, 173, 66, 32, 134, 132, 128, 34, 4, 66, 32, 135, 167, 36, 0, 32, 4, 167, 11, 36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173, 32, 3, 173, 66, 32, 134, 132, 129, 34, 4, 66, 32, 135, 167, 36, 0, 32, 4, 167, 11, 36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173, 32, 3, 173, 66, 32, 134, 132, 130, 34, 4, 66, 32, 135, 167, 36, 0, 32, 4, 167, 11\n ])), {}).exports;\n}\ncatch (e) {\n // no wasm support :(\n}\n/**\n * Constructs a 64 bit two's-complement integer, given its low and high 32 bit values as *signed* integers.\n * See the from* functions below for more convenient ways of constructing Longs.\n * @exports Long\n * @class A Long class for representing a 64 bit two's-complement integer value.\n * @param {number} low The low (signed) 32 bits of the long\n * @param {number} high The high (signed) 32 bits of the long\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\n * @constructor\n */\nexport function Long(low, high, unsigned) {\n /**\n * The low 32 bits as a signed value.\n * @type {number}\n */\n this.low = low | 0;\n /**\n * The high 32 bits as a signed value.\n * @type {number}\n */\n this.high = high | 0;\n /**\n * Whether unsigned or not.\n * @type {boolean}\n */\n this.unsigned = !!unsigned;\n}\nLong.prototype.GetHashCode = function () {\n let h1 = this.unsigned ? 1 : 0;\n h1 = ((h1 << 5) + h1) ^ this.high;\n h1 = ((h1 << 5) + h1) ^ this.low;\n return h1;\n};\nLong.prototype.Equals = function (x) { return equals(this, x); };\nLong.prototype.CompareTo = function (x) { return compare(this, x); };\nLong.prototype.toString = function (radix) { return toString(this, radix); };\nLong.prototype.toJSON = function () { return toString(this); };\n// The internal representation of a long is the two given signed, 32-bit values.\n// We use 32-bit pieces because these are the size of integers on which\n// Javascript performs bit-operations. For operations like addition and\n// multiplication, we split each number into 16 bit pieces, which can easily be\n// multiplied within Javascript's floating-point representation without overflow\n// or change in sign.\n//\n// In the algorithms below, we frequently reduce the negative case to the\n// positive case by negating the input(s) and then post-processing the result.\n// Note that we must ALWAYS check specially whether those values are MIN_VALUE\n// (-2^63) because -MIN_VALUE == MIN_VALUE (since 2^63 cannot be represented as\n// a positive number, it overflows back into a negative). Not handling this\n// case would often result in infinite recursion.\n//\n// Common constant values ZERO, ONE, NEG_ONE, etc. are defined below the from*\n// methods on which they depend.\n/**\n * An indicator used to reliably determine if an object is a Long or not.\n * @type {boolean}\n * @const\n * @private\n */\nLong.prototype.__isLong__;\nObject.defineProperty(Long.prototype, \"__isLong__\", { value: true });\n/**\n * @function\n * @param {*} obj Object\n * @returns {boolean}\n * @inner\n */\nexport function isLong(obj) {\n return (obj && obj[\"__isLong__\"]) === true;\n}\n/**\n * Tests if the specified object is a Long.\n * @function\n * @param {*} obj Object\n * @returns {boolean}\n */\n// Long.isLong = isLong;\n/**\n * A cache of the Long representations of small integer values.\n * @type {!Object}\n * @inner\n */\nvar INT_CACHE = {};\n/**\n * A cache of the Long representations of small unsigned integer values.\n * @type {!Object}\n * @inner\n */\nvar UINT_CACHE = {};\n/**\n * @param {number} value\n * @param {boolean=} unsigned\n * @returns {!Long}\n * @inner\n */\nexport function fromInt(value, unsigned) {\n var obj, cachedObj, cache;\n if (unsigned) {\n value >>>= 0;\n if (cache = (0 <= value && value < 256)) {\n cachedObj = UINT_CACHE[value];\n if (cachedObj)\n return cachedObj;\n }\n obj = fromBits(value, (value | 0) < 0 ? -1 : 0, true);\n if (cache)\n UINT_CACHE[value] = obj;\n return obj;\n }\n else {\n value |= 0;\n if (cache = (-128 <= value && value < 128)) {\n cachedObj = INT_CACHE[value];\n if (cachedObj)\n return cachedObj;\n }\n obj = fromBits(value, value < 0 ? -1 : 0, false);\n if (cache)\n INT_CACHE[value] = obj;\n return obj;\n }\n}\n/**\n * Returns a Long representing the given 32 bit integer value.\n * @function\n * @param {number} value The 32 bit integer in question\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\n * @returns {!Long} The corresponding Long value\n */\n// Long.fromInt = fromInt;\n/**\n * @param {number} value\n * @param {boolean=} unsigned\n * @returns {!Long}\n * @inner\n */\nexport function fromNumber(value, unsigned) {\n if (isNaN(value))\n return unsigned ? UZERO : ZERO;\n if (unsigned) {\n if (value < 0)\n return UZERO;\n if (value >= TWO_PWR_64_DBL)\n return MAX_UNSIGNED_VALUE;\n }\n else {\n if (value <= -TWO_PWR_63_DBL)\n return MIN_VALUE;\n if (value + 1 >= TWO_PWR_63_DBL)\n return MAX_VALUE;\n }\n if (value < 0)\n return negate(fromNumber(-value, unsigned));\n return fromBits((value % TWO_PWR_32_DBL) | 0, (value / TWO_PWR_32_DBL) | 0, unsigned);\n}\n/**\n * Returns a Long representing the given value, provided that it is a finite number. Otherwise, zero is returned.\n * @function\n * @param {number} value The number in question\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\n * @returns {!Long} The corresponding Long value\n */\n// Long.fromNumber = fromNumber;\n/**\n * @param {number} lowBits\n * @param {number} highBits\n * @param {boolean=} unsigned\n * @returns {!Long}\n * @inner\n */\nexport function fromBits(lowBits, highBits, unsigned) {\n return new Long(lowBits, highBits, unsigned);\n}\n/**\n * Returns a Long representing the 64 bit integer that comes by concatenating the given low and high bits. Each is\n * assumed to use 32 bits.\n * @function\n * @param {number} lowBits The low 32 bits\n * @param {number} highBits The high 32 bits\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\n * @returns {!Long} The corresponding Long value\n */\n// Long.fromBits = fromBits;\n/**\n * @function\n * @param {number} base\n * @param {number} exponent\n * @returns {number}\n * @inner\n */\nvar pow_dbl = Math.pow; // Used 4 times (4*8 to 15+4)\n/**\n * @param {string} str\n * @param {(boolean|number)=} unsigned\n * @param {number=} radix\n * @returns {!Long}\n * @inner\n */\nexport function fromString(str, unsigned, radix) {\n if (str.length === 0)\n throw Error('empty string');\n if (str === \"NaN\" || str === \"Infinity\" || str === \"+Infinity\" || str === \"-Infinity\")\n return ZERO;\n if (typeof unsigned === 'number') {\n // For goog.math.long compatibility\n radix = unsigned,\n unsigned = false;\n }\n else {\n unsigned = !!unsigned;\n }\n radix = radix || 10;\n if (radix < 2 || 36 < radix)\n throw RangeError('radix');\n var p = str.indexOf('-');\n if (p > 0)\n throw Error('interior hyphen');\n else if (p === 0) {\n return negate(fromString(str.substring(1), unsigned, radix));\n }\n // Do several (8) digits each time through the loop, so as to\n // minimize the calls to the very expensive emulated div.\n var radixToPower = fromNumber(pow_dbl(radix, 8));\n var result = ZERO;\n for (var i = 0; i < str.length; i += 8) {\n var size = Math.min(8, str.length - i), value = parseInt(str.substring(i, i + size), radix);\n if (size < 8) {\n var power = fromNumber(pow_dbl(radix, size));\n result = add(multiply(result, power), fromNumber(value));\n }\n else {\n result = multiply(result, radixToPower);\n result = add(result, fromNumber(value));\n }\n }\n result.unsigned = unsigned;\n return result;\n}\n/**\n * Returns a Long representation of the given string, written using the specified radix.\n * @function\n * @param {string} str The textual representation of the Long\n * @param {(boolean|number)=} unsigned Whether unsigned or not, defaults to signed\n * @param {number=} radix The radix in which the text is written (2-36), defaults to 10\n * @returns {!Long} The corresponding Long value\n */\n// Long.fromString = fromString;\n/**\n * @function\n * @param {!Long|number|string|!{low: number, high: number, unsigned: boolean}} val\n * @param {boolean=} unsigned\n * @returns {!Long}\n * @inner\n */\nexport function fromValue(val, unsigned) {\n if (typeof val === 'number')\n return fromNumber(val, unsigned);\n if (typeof val === 'string')\n return fromString(val, unsigned);\n // Throws for non-objects, converts non-instanceof Long:\n return fromBits(val.low, val.high, typeof unsigned === 'boolean' ? unsigned : val.unsigned);\n}\n/**\n * Converts the specified value to a Long using the appropriate from* function for its type.\n * @function\n * @param {!Long|number|string|!{low: number, high: number, unsigned: boolean}} val Value\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\n * @returns {!Long}\n */\n// Long.fromValue = fromValue;\n// NOTE: the compiler should inline these constant values below and then remove these variables, so there should be\n// no runtime penalty for these.\n/**\n * @type {number}\n * @const\n * @inner\n */\nvar TWO_PWR_16_DBL = 1 << 16;\n/**\n * @type {number}\n * @const\n * @inner\n */\nvar TWO_PWR_24_DBL = 1 << 24;\n/**\n * @type {number}\n * @const\n * @inner\n */\nvar TWO_PWR_32_DBL = TWO_PWR_16_DBL * TWO_PWR_16_DBL;\n/**\n * @type {number}\n * @const\n * @inner\n */\nvar TWO_PWR_64_DBL = TWO_PWR_32_DBL * TWO_PWR_32_DBL;\n/**\n * @type {number}\n * @const\n * @inner\n */\nvar TWO_PWR_63_DBL = TWO_PWR_64_DBL / 2;\n/**\n * @type {!Long}\n * @const\n * @inner\n */\nvar TWO_PWR_24 = fromInt(TWO_PWR_24_DBL);\n/**\n * @type {!Long}\n * @inner\n */\nexport var ZERO = fromInt(0);\n/**\n * Signed zero.\n * @type {!Long}\n */\n// Long.ZERO = ZERO;\n/**\n * @type {!Long}\n * @inner\n */\nexport var UZERO = fromInt(0, true);\n/**\n * Unsigned zero.\n * @type {!Long}\n */\n// Long.UZERO = UZERO;\n/**\n * @type {!Long}\n * @inner\n */\nexport var ONE = fromInt(1);\n/**\n * Signed one.\n * @type {!Long}\n */\n// Long.ONE = ONE;\n/**\n * @type {!Long}\n * @inner\n */\nexport var UONE = fromInt(1, true);\n/**\n * Unsigned one.\n * @type {!Long}\n */\n// Long.UONE = UONE;\n/**\n * @type {!Long}\n * @inner\n */\nexport var NEG_ONE = fromInt(-1);\n/**\n * Signed negative one.\n * @type {!Long}\n */\n// Long.NEG_ONE = NEG_ONE;\n/**\n * @type {!Long}\n * @inner\n */\nexport var MAX_VALUE = fromBits(0xFFFFFFFF | 0, 0x7FFFFFFF | 0, false);\n/**\n * Maximum signed value.\n * @type {!Long}\n */\n// Long.MAX_VALUE = MAX_VALUE;\n/**\n * @type {!Long}\n * @inner\n */\nexport var MAX_UNSIGNED_VALUE = fromBits(0xFFFFFFFF | 0, 0xFFFFFFFF | 0, true);\n/**\n * Maximum unsigned value.\n * @type {!Long}\n */\n// Long.MAX_UNSIGNED_VALUE = MAX_UNSIGNED_VALUE;\n/**\n * @type {!Long}\n * @inner\n */\nexport var MIN_VALUE = fromBits(0, 0x80000000 | 0, false);\n/**\n * Minimum signed value.\n * @type {!Long}\n */\n// Long.MIN_VALUE = MIN_VALUE;\n/**\n * @alias Long.prototype\n * @inner\n */\n// var LongPrototype = Long.prototype;\n/**\n * Converts the Long to a 32 bit integer, assuming it is a 32 bit integer.\n * @this {!Long}\n * @returns {number}\n */\nexport function toInt($this) {\n return $this.unsigned ? $this.low >>> 0 : $this.low;\n}\n;\n/**\n * Converts the Long to a the nearest floating-point representation of this value (double, 53 bit mantissa).\n * @this {!Long}\n * @returns {number}\n */\nexport function toNumber($this) {\n if ($this.unsigned)\n return (($this.high >>> 0) * TWO_PWR_32_DBL) + ($this.low >>> 0);\n return $this.high * TWO_PWR_32_DBL + ($this.low >>> 0);\n}\n;\n/**\n * Converts the Long to a string written in the specified radix.\n * @this {!Long}\n * @param {number=} radix Radix (2-36), defaults to 10\n * @returns {string}\n * @override\n * @throws {RangeError} If `radix` is out of range\n */\nexport function toString($this, radix) {\n radix = radix || 10;\n if (radix < 2 || 36 < radix)\n throw RangeError('radix');\n if (isZero($this))\n return '0';\n if (isNegative($this)) { // Unsigned Longs are never negative\n if (equals($this, MIN_VALUE)) {\n // We need to change the Long value before it can be negated, so we remove\n // the bottom-most digit in this base and then recurse to do the rest.\n var radixLong = fromNumber(radix), div = divide($this, radixLong), rem1 = subtract(multiply(div, radixLong), $this);\n return toString(div, radix) + toInt(rem1).toString(radix);\n }\n else\n return '-' + toString(negate($this), radix);\n }\n // Do several (6) digits each time through the loop, so as to\n // minimize the calls to the very expensive emulated div.\n var radixToPower = fromNumber(pow_dbl(radix, 6), $this.unsigned), rem = $this;\n var result = '';\n while (true) {\n var remDiv = divide(rem, radixToPower), intval = toInt(subtract(rem, multiply(remDiv, radixToPower))) >>> 0, digits = intval.toString(radix);\n rem = remDiv;\n if (isZero(rem))\n return digits + result;\n else {\n while (digits.length < 6)\n digits = '0' + digits;\n result = '' + digits + result;\n }\n }\n}\n;\n/**\n * Gets the high 32 bits as a signed integer.\n * @this {!Long}\n * @returns {number} Signed high bits\n */\nexport function getHighBits($this) {\n return $this.high;\n}\n;\n/**\n * Gets the high 32 bits as an unsigned integer.\n * @this {!Long}\n * @returns {number} Unsigned high bits\n */\nexport function getHighBitsUnsigned($this) {\n return $this.high >>> 0;\n}\n;\n/**\n * Gets the low 32 bits as a signed integer.\n * @this {!Long}\n * @returns {number} Signed low bits\n */\nexport function getLowBits($this) {\n return $this.low;\n}\n;\n/**\n * Gets the low 32 bits as an unsigned integer.\n * @this {!Long}\n * @returns {number} Unsigned low bits\n */\nexport function getLowBitsUnsigned($this) {\n return $this.low >>> 0;\n}\n;\n/**\n * Gets the number of bits needed to represent the absolute value of this Long.\n * @this {!Long}\n * @returns {number}\n */\nexport function getNumBitsAbs($this) {\n if (isNegative($this)) // Unsigned Longs are never negative\n return equals($this, MIN_VALUE) ? 64 : getNumBitsAbs(negate($this));\n var val = $this.high != 0 ? $this.high : $this.low;\n for (var bit = 31; bit > 0; bit--)\n if ((val & (1 << bit)) != 0)\n break;\n return $this.high != 0 ? bit + 33 : bit + 1;\n}\n;\n/**\n * Tests if this Long's value equals zero.\n * @this {!Long}\n * @returns {boolean}\n */\nexport function isZero($this) {\n return $this.high === 0 && $this.low === 0;\n}\n;\n/**\n * Tests if this Long's value equals zero. This is an alias of {@link Long#isZero}.\n * @returns {boolean}\n */\n// LongPrototype.eqz = LongPrototype.isZero;\n/**\n * Tests if this Long's value is negative.\n * @this {!Long}\n * @returns {boolean}\n */\nexport function isNegative($this) {\n return !$this.unsigned && $this.high < 0;\n}\n;\n/**\n * Tests if this Long's value is positive.\n * @this {!Long}\n * @returns {boolean}\n */\nexport function isPositive($this) {\n return $this.unsigned || $this.high >= 0;\n}\n;\n/**\n * Tests if this Long's value is odd.\n * @this {!Long}\n * @returns {boolean}\n */\nexport function isOdd($this) {\n return ($this.low & 1) === 1;\n}\n;\n/**\n * Tests if this Long's value is even.\n * @this {!Long}\n * @returns {boolean}\n */\nexport function isEven($this) {\n return ($this.low & 1) === 0;\n}\n;\n/**\n * Tests if this Long's value equals the specified's.\n * @this {!Long}\n * @param {!Long|number|string} other Other value\n * @returns {boolean}\n */\nexport function equals($this, other) {\n if (!isLong(other))\n other = fromValue(other);\n if ($this.unsigned !== other.unsigned && ($this.high >>> 31) === 1 && (other.high >>> 31) === 1)\n return false;\n return $this.high === other.high && $this.low === other.low;\n}\n;\n/**\n * Tests if this Long's value equals the specified's. This is an alias of {@link Long#equals}.\n * @function\n * @param {!Long|number|string} other Other value\n * @returns {boolean}\n */\n// LongPrototype.eq = LongPrototype.equals;\n/**\n * Tests if this Long's value differs from the specified's.\n * @this {!Long}\n * @param {!Long|number|string} other Other value\n * @returns {boolean}\n */\nexport function notEquals($this, other) {\n return !equals($this, /* validates */ other);\n}\n;\n/**\n * Tests if this Long's value differs from the specified's. This is an alias of {@link Long#notEquals}.\n * @function\n * @param {!Long|number|string} other Other value\n * @returns {boolean}\n */\n// LongPrototype.neq = LongPrototype.notEquals;\n/**\n * Tests if this Long's value differs from the specified's. This is an alias of {@link Long#notEquals}.\n * @function\n * @param {!Long|number|string} other Other value\n * @returns {boolean}\n */\n// LongPrototype.ne = LongPrototype.notEquals;\n/**\n * Tests if this Long's value is less than the specified's.\n * @this {!Long}\n * @param {!Long|number|string} other Other value\n * @returns {boolean}\n */\nexport function lessThan($this, other) {\n return compare($this, /* validates */ other) < 0;\n}\n;\n/**\n * Tests if this Long's value is less than the specified's. This is an alias of {@link Long#lessThan}.\n * @function\n * @param {!Long|number|string} other Other value\n * @returns {boolean}\n */\n// LongPrototype.lt = LongPrototype.lessThan;\n/**\n * Tests if this Long's value is less than or equal the specified's.\n * @this {!Long}\n * @param {!Long|number|string} other Other value\n * @returns {boolean}\n */\nexport function lessThanOrEqual($this, other) {\n return compare($this, /* validates */ other) <= 0;\n}\n;\n/**\n * Tests if this Long's value is less than or equal the specified's. This is an alias of {@link Long#lessThanOrEqual}.\n * @function\n * @param {!Long|number|string} other Other value\n * @returns {boolean}\n */\n// LongPrototype.lte = LongPrototype.lessThanOrEqual;\n/**\n * Tests if this Long's value is less than or equal the specified's. This is an alias of {@link Long#lessThanOrEqual}.\n * @function\n * @param {!Long|number|string} other Other value\n * @returns {boolean}\n */\n// LongPrototype.le = LongPrototype.lessThanOrEqual;\n/**\n * Tests if this Long's value is greater than the specified's.\n * @this {!Long}\n * @param {!Long|number|string} other Other value\n * @returns {boolean}\n */\nexport function greaterThan($this, other) {\n return compare($this, /* validates */ other) > 0;\n}\n;\n/**\n * Tests if this Long's value is greater than the specified's. This is an alias of {@link Long#greaterThan}.\n * @function\n * @param {!Long|number|string} other Other value\n * @returns {boolean}\n */\n// LongPrototype.gt = LongPrototype.greaterThan;\n/**\n * Tests if this Long's value is greater than or equal the specified's.\n * @this {!Long}\n * @param {!Long|number|string} other Other value\n * @returns {boolean}\n */\nexport function greaterThanOrEqual($this, other) {\n return compare($this, /* validates */ other) >= 0;\n}\n;\n/**\n * Tests if this Long's value is greater than or equal the specified's. This is an alias of {@link Long#greaterThanOrEqual}.\n * @function\n * @param {!Long|number|string} other Other value\n * @returns {boolean}\n */\n// LongPrototype.gte = LongPrototype.greaterThanOrEqual;\n/**\n * Tests if this Long's value is greater than or equal the specified's. This is an alias of {@link Long#greaterThanOrEqual}.\n * @function\n * @param {!Long|number|string} other Other value\n * @returns {boolean}\n */\n// LongPrototype.ge = LongPrototype.greaterThanOrEqual;\n/**\n * Compares this Long's value with the specified's.\n * @this {!Long}\n * @param {!Long|number|string} other Other value\n * @returns {number} 0 if they are the same, 1 if the this is greater and -1\n * if the given one is greater\n */\nexport function compare($this, other) {\n if (!isLong(other))\n other = fromValue(other);\n if (equals($this, other))\n return 0;\n var thisNeg = isNegative($this), otherNeg = isNegative(other);\n if (thisNeg && !otherNeg)\n return -1;\n if (!thisNeg && otherNeg)\n return 1;\n // At this point the sign bits are the same\n if (!$this.unsigned)\n return isNegative(subtract($this, other)) ? -1 : 1;\n // Both are positive if at least one is unsigned\n return (other.high >>> 0) > ($this.high >>> 0) || (other.high === $this.high && (other.low >>> 0) > ($this.low >>> 0)) ? -1 : 1;\n}\n;\n/**\n * Compares this Long's value with the specified's. This is an alias of {@link Long#compare}.\n * @function\n * @param {!Long|number|string} other Other value\n * @returns {number} 0 if they are the same, 1 if the this is greater and -1\n * if the given one is greater\n */\n// LongPrototype.comp = LongPrototype.compare;\n/**\n * Negates this Long's value.\n * @this {!Long}\n * @returns {!Long} Negated Long\n */\nexport function negate($this) {\n if (!$this.unsigned && equals($this, MIN_VALUE))\n return MIN_VALUE;\n return add(not($this), ONE);\n}\n;\n/**\n * Negates this Long's value. This is an alias of {@link Long#negate}.\n * @function\n * @returns {!Long} Negated Long\n */\n// LongPrototype.neg = LongPrototype.negate;\n/**\n * Returns the sum of this and the specified Long.\n * @this {!Long}\n * @param {!Long|number|string} addend Addend\n * @returns {!Long} Sum\n */\nexport function add($this, addend) {\n if (!isLong(addend))\n addend = fromValue(addend);\n // Divide each number into 4 chunks of 16 bits, and then sum the chunks.\n var a48 = $this.high >>> 16;\n var a32 = $this.high & 0xFFFF;\n var a16 = $this.low >>> 16;\n var a00 = $this.low & 0xFFFF;\n var b48 = addend.high >>> 16;\n var b32 = addend.high & 0xFFFF;\n var b16 = addend.low >>> 16;\n var b00 = addend.low & 0xFFFF;\n var c48 = 0, c32 = 0, c16 = 0, c00 = 0;\n c00 += a00 + b00;\n c16 += c00 >>> 16;\n c00 &= 0xFFFF;\n c16 += a16 + b16;\n c32 += c16 >>> 16;\n c16 &= 0xFFFF;\n c32 += a32 + b32;\n c48 += c32 >>> 16;\n c32 &= 0xFFFF;\n c48 += a48 + b48;\n c48 &= 0xFFFF;\n return fromBits((c16 << 16) | c00, (c48 << 16) | c32, $this.unsigned);\n}\n;\n/**\n * Returns the difference of this and the specified Long.\n * @this {!Long}\n * @param {!Long|number|string} subtrahend Subtrahend\n * @returns {!Long} Difference\n */\nexport function subtract($this, subtrahend) {\n if (!isLong(subtrahend))\n subtrahend = fromValue(subtrahend);\n return add($this, negate(subtrahend));\n}\n;\n/**\n * Returns the difference of this and the specified Long. This is an alias of {@link Long#subtract}.\n * @function\n * @param {!Long|number|string} subtrahend Subtrahend\n * @returns {!Long} Difference\n */\n// LongPrototype.sub = LongPrototype.subtract;\n/**\n * Returns the product of this and the specified Long.\n * @this {!Long}\n * @param {!Long|number|string} multiplier Multiplier\n * @returns {!Long} Product\n */\nexport function multiply($this, multiplier) {\n if (isZero($this))\n return $this.unsigned ? UZERO : ZERO;\n if (!isLong(multiplier))\n multiplier = fromValue(multiplier);\n // use wasm support if present\n if (wasm) {\n var low = wasm.mul($this.low, $this.high, multiplier.low, multiplier.high);\n return fromBits(low, wasm.get_high(), $this.unsigned);\n }\n if (isZero(multiplier))\n return $this.unsigned ? UZERO : ZERO;\n if (equals($this, MIN_VALUE))\n return isOdd(multiplier) ? MIN_VALUE : ZERO;\n if (equals(multiplier, MIN_VALUE))\n return isOdd($this) ? MIN_VALUE : ZERO;\n if (isNegative($this)) {\n if (isNegative(multiplier))\n return multiply(negate($this), negate(multiplier));\n else\n return negate(multiply(negate($this), multiplier));\n }\n else if (isNegative(multiplier))\n return negate(multiply($this, negate(multiplier)));\n // If both longs are small, use float multiplication\n if (lessThan($this, TWO_PWR_24) && lessThan(multiplier, TWO_PWR_24))\n return fromNumber(toNumber($this) * toNumber(multiplier), $this.unsigned);\n // Divide each long into 4 chunks of 16 bits, and then add up 4x4 products.\n // We can skip products that would overflow.\n var a48 = $this.high >>> 16;\n var a32 = $this.high & 0xFFFF;\n var a16 = $this.low >>> 16;\n var a00 = $this.low & 0xFFFF;\n var b48 = multiplier.high >>> 16;\n var b32 = multiplier.high & 0xFFFF;\n var b16 = multiplier.low >>> 16;\n var b00 = multiplier.low & 0xFFFF;\n var c48 = 0, c32 = 0, c16 = 0, c00 = 0;\n c00 += a00 * b00;\n c16 += c00 >>> 16;\n c00 &= 0xFFFF;\n c16 += a16 * b00;\n c32 += c16 >>> 16;\n c16 &= 0xFFFF;\n c16 += a00 * b16;\n c32 += c16 >>> 16;\n c16 &= 0xFFFF;\n c32 += a32 * b00;\n c48 += c32 >>> 16;\n c32 &= 0xFFFF;\n c32 += a16 * b16;\n c48 += c32 >>> 16;\n c32 &= 0xFFFF;\n c32 += a00 * b32;\n c48 += c32 >>> 16;\n c32 &= 0xFFFF;\n c48 += a48 * b00 + a32 * b16 + a16 * b32 + a00 * b48;\n c48 &= 0xFFFF;\n return fromBits((c16 << 16) | c00, (c48 << 16) | c32, $this.unsigned);\n}\n;\n/**\n * Returns the product of this and the specified Long. This is an alias of {@link Long#multiply}.\n * @function\n * @param {!Long|number|string} multiplier Multiplier\n * @returns {!Long} Product\n */\n// LongPrototype.mul = LongPrototype.multiply;\n/**\n * Returns this Long divided by the specified. The result is signed if this Long is signed or\n * unsigned if this Long is unsigned.\n * @this {!Long}\n * @param {!Long|number|string} divisor Divisor\n * @returns {!Long} Quotient\n */\nexport function divide($this, divisor) {\n if (!isLong(divisor))\n divisor = fromValue(divisor);\n if (isZero(divisor))\n throw Error('division by zero');\n // use wasm support if present\n if (wasm) {\n // guard against signed division overflow: the largest\n // negative number / -1 would be 1 larger than the largest\n // positive number, due to two's complement.\n if (!$this.unsigned &&\n $this.high === -0x80000000 &&\n divisor.low === -1 && divisor.high === -1) {\n // be consistent with non-wasm code path\n return $this;\n }\n var low = ($this.unsigned ? wasm.div_u : wasm.div_s)($this.low, $this.high, divisor.low, divisor.high);\n return fromBits(low, wasm.get_high(), $this.unsigned);\n }\n if (isZero($this))\n return $this.unsigned ? UZERO : ZERO;\n var approx, rem, res;\n if (!$this.unsigned) {\n // This section is only relevant for signed longs and is derived from the\n // closure library as a whole.\n if (equals($this, MIN_VALUE)) {\n if (equals(divisor, ONE) || equals(divisor, NEG_ONE))\n return MIN_VALUE; // recall that -MIN_VALUE == MIN_VALUE\n else if (equals(divisor, MIN_VALUE))\n return ONE;\n else {\n // At this point, we have |other| >= 2, so |this/other| < |MIN_VALUE|.\n var halfThis = shiftRight($this, 1);\n approx = shiftLeft(divide(halfThis, divisor), 1);\n if (equals(approx, ZERO)) {\n return isNegative(divisor) ? ONE : NEG_ONE;\n }\n else {\n rem = subtract($this, multiply(divisor, approx));\n res = add(approx, divide(rem, divisor));\n return res;\n }\n }\n }\n else if (equals(divisor, MIN_VALUE))\n return $this.unsigned ? UZERO : ZERO;\n if (isNegative($this)) {\n if (isNegative(divisor))\n return divide(negate($this), negate(divisor));\n return negate(divide(negate($this), divisor));\n }\n else if (isNegative(divisor))\n return negate(divide($this, negate(divisor)));\n res = ZERO;\n }\n else {\n // The algorithm below has not been made for unsigned longs. It's therefore\n // required to take special care of the MSB prior to running it.\n if (!divisor.unsigned)\n divisor = toUnsigned(divisor);\n if (greaterThan(divisor, $this))\n return UZERO;\n if (greaterThan(divisor, shiftRightUnsigned($this, 1))) // 15 >>> 1 = 7 ; with divisor = 8 ; true\n return UONE;\n res = UZERO;\n }\n // Repeat the following until the remainder is less than other: find a\n // floating-point that approximates remainder / other *from below*, add this\n // into the result, and subtract it from the remainder. It is critical that\n // the approximate value is less than or equal to the real value so that the\n // remainder never becomes negative.\n rem = $this;\n while (greaterThanOrEqual(rem, divisor)) {\n // Approximate the result of division. This may be a little greater or\n // smaller than the actual value.\n approx = Math.max(1, Math.floor(toNumber(rem) / toNumber(divisor)));\n // We will tweak the approximate result by changing it in the 48-th digit or\n // the smallest non-fractional digit, whichever is larger.\n var log2 = Math.ceil(Math.log(approx) / Math.LN2), delta = (log2 <= 48) ? 1 : pow_dbl(2, log2 - 48), \n // Decrease the approximation until it is smaller than the remainder. Note\n // that if it is too large, the product overflows and is negative.\n approxRes = fromNumber(approx), approxRem = multiply(approxRes, divisor);\n while (isNegative(approxRem) || greaterThan(approxRem, rem)) {\n approx -= delta;\n approxRes = fromNumber(approx, $this.unsigned);\n approxRem = multiply(approxRes, divisor);\n }\n // We know the answer can't be zero... and actually, zero would cause\n // infinite recursion since we would make no progress.\n if (isZero(approxRes))\n approxRes = ONE;\n res = add(res, approxRes);\n rem = subtract(rem, approxRem);\n }\n return res;\n}\n;\n/**\n * Returns this Long divided by the specified. This is an alias of {@link Long#divide}.\n * @function\n * @param {!Long|number|string} divisor Divisor\n * @returns {!Long} Quotient\n */\n// LongPrototype.div = LongPrototype.divide;\n/**\n * Returns this Long modulo the specified.\n * @this {!Long}\n * @param {!Long|number|string} divisor Divisor\n * @returns {!Long} Remainder\n */\nexport function modulo($this, divisor) {\n if (!isLong(divisor))\n divisor = fromValue(divisor);\n // use wasm support if present\n if (wasm) {\n var low = ($this.unsigned ? wasm.rem_u : wasm.rem_s)($this.low, $this.high, divisor.low, divisor.high);\n return fromBits(low, wasm.get_high(), $this.unsigned);\n }\n return subtract($this, multiply(divide($this, divisor), divisor));\n}\n;\n/**\n * Returns this Long modulo the specified. This is an alias of {@link Long#modulo}.\n * @function\n * @param {!Long|number|string} divisor Divisor\n * @returns {!Long} Remainder\n */\n// LongPrototype.mod = LongPrototype.modulo;\n/**\n * Returns this Long modulo the specified. This is an alias of {@link Long#modulo}.\n * @function\n * @param {!Long|number|string} divisor Divisor\n * @returns {!Long} Remainder\n */\n// LongPrototype.rem = LongPrototype.modulo;\n/**\n * Returns the bitwise NOT of this Long.\n * @this {!Long}\n * @returns {!Long}\n */\nexport function not($this) {\n return fromBits(~$this.low, ~$this.high, $this.unsigned);\n}\n;\n/**\n * Returns the bitwise AND of this Long and the specified.\n * @this {!Long}\n * @param {!Long|number|string} other Other Long\n * @returns {!Long}\n */\nexport function and($this, other) {\n if (!isLong(other))\n other = fromValue(other);\n return fromBits($this.low & other.low, $this.high & other.high, $this.unsigned);\n}\n;\n/**\n * Returns the bitwise OR of this Long and the specified.\n * @this {!Long}\n * @param {!Long|number|string} other Other Long\n * @returns {!Long}\n */\nexport function or($this, other) {\n if (!isLong(other))\n other = fromValue(other);\n return fromBits($this.low | other.low, $this.high | other.high, $this.unsigned);\n}\n;\n/**\n * Returns the bitwise XOR of this Long and the given one.\n * @this {!Long}\n * @param {!Long|number|string} other Other Long\n * @returns {!Long}\n */\nexport function xor($this, other) {\n if (!isLong(other))\n other = fromValue(other);\n return fromBits($this.low ^ other.low, $this.high ^ other.high, $this.unsigned);\n}\n;\n/**\n * Returns this Long with bits shifted to the left by the given amount.\n * @this {!Long}\n * @param {number|!Long} numBits Number of bits\n * @returns {!Long} Shifted Long\n */\nexport function shiftLeft($this, numBits) {\n if (isLong(numBits))\n numBits = toInt(numBits);\n if ((numBits &= 63) === 0)\n return $this;\n else if (numBits < 32)\n return fromBits($this.low << numBits, ($this.high << numBits) | ($this.low >>> (32 - numBits)), $this.unsigned);\n else\n return fromBits(0, $this.low << (numBits - 32), $this.unsigned);\n}\n;\n/**\n * Returns this Long with bits shifted to the left by the given amount. This is an alias of {@link Long#shiftLeft}.\n * @function\n * @param {number|!Long} numBits Number of bits\n * @returns {!Long} Shifted Long\n */\n// LongPrototype.shl = LongPrototype.shiftLeft;\n/**\n * Returns this Long with bits arithmetically shifted to the right by the given amount.\n * @this {!Long}\n * @param {number|!Long} numBits Number of bits\n * @returns {!Long} Shifted Long\n */\nexport function shiftRight($this, numBits) {\n if (isLong(numBits))\n numBits = toInt(numBits);\n if ((numBits &= 63) === 0)\n return $this;\n else if (numBits < 32)\n return fromBits(($this.low >>> numBits) | ($this.high << (32 - numBits)), $this.high >> numBits, $this.unsigned);\n else\n return fromBits($this.high >> (numBits - 32), $this.high >= 0 ? 0 : -1, $this.unsigned);\n}\n;\n/**\n * Returns this Long with bits arithmetically shifted to the right by the given amount. This is an alias of {@link Long#shiftRight}.\n * @function\n * @param {number|!Long} numBits Number of bits\n * @returns {!Long} Shifted Long\n */\n// LongPrototype.shr = LongPrototype.shiftRight;\n/**\n * Returns this Long with bits logically shifted to the right by the given amount.\n * @this {!Long}\n * @param {number|!Long} numBits Number of bits\n * @returns {!Long} Shifted Long\n */\nexport function shiftRightUnsigned($this, numBits) {\n if (isLong(numBits))\n numBits = toInt(numBits);\n numBits &= 63;\n if (numBits === 0)\n return $this;\n else {\n var high = $this.high;\n if (numBits < 32) {\n var low = $this.low;\n return fromBits((low >>> numBits) | (high << (32 - numBits)), high >>> numBits, $this.unsigned);\n }\n else if (numBits === 32)\n return fromBits(high, 0, $this.unsigned);\n else\n return fromBits(high >>> (numBits - 32), 0, $this.unsigned);\n }\n}\n;\n/**\n * Returns this Long with bits logically shifted to the right by the given amount. This is an alias of {@link Long#shiftRightUnsigned}.\n * @function\n * @param {number|!Long} numBits Number of bits\n * @returns {!Long} Shifted Long\n */\n// LongPrototype.shru = LongPrototype.shiftRightUnsigned;\n/**\n * Returns this Long with bits logically shifted to the right by the given amount. This is an alias of {@link Long#shiftRightUnsigned}.\n * @function\n * @param {number|!Long} numBits Number of bits\n * @returns {!Long} Shifted Long\n */\n// LongPrototype.shr_u = LongPrototype.shiftRightUnsigned;\n/**\n * Returns this Long with bits rotated to the left by the given amount.\n * @this {!Long}\n * @param {number|!Long} numBits Number of bits\n * @returns {!Long} Rotated Long\n */\nexport const rotateLeft = function rotateLeft(numBits) {\n var b;\n if (isLong(numBits))\n numBits = numBits.toInt();\n if ((numBits &= 63) === 0)\n return this;\n if (numBits === 32)\n return fromBits(this.high, this.low, this.unsigned);\n if (numBits < 32) {\n b = (32 - numBits);\n return fromBits(((this.low << numBits) | (this.high >>> b)), ((this.high << numBits) | (this.low >>> b)), this.unsigned);\n }\n numBits -= 32;\n b = (32 - numBits);\n return fromBits(((this.high << numBits) | (this.low >>> b)), ((this.low << numBits) | (this.high >>> b)), this.unsigned);\n};\n/**\n * Returns this Long with bits rotated to the left by the given amount. This is an alias of {@link Long#rotateLeft}.\n * @function\n * @param {number|!Long} numBits Number of bits\n * @returns {!Long} Rotated Long\n */\n// LongPrototype.rotl = LongPrototype.rotateLeft;\n/**\n * Returns this Long with bits rotated to the right by the given amount.\n * @this {!Long}\n * @param {number|!Long} numBits Number of bits\n * @returns {!Long} Rotated Long\n */\nexport const rotateRight = function rotateRight(numBits) {\n var b;\n if (isLong(numBits))\n numBits = numBits.toInt();\n if ((numBits &= 63) === 0)\n return this;\n if (numBits === 32)\n return fromBits(this.high, this.low, this.unsigned);\n if (numBits < 32) {\n b = (32 - numBits);\n return fromBits(((this.high << b) | (this.low >>> numBits)), ((this.low << b) | (this.high >>> numBits)), this.unsigned);\n }\n numBits -= 32;\n b = (32 - numBits);\n return fromBits(((this.low << b) | (this.high >>> numBits)), ((this.high << b) | (this.low >>> numBits)), this.unsigned);\n};\n/**\n * Returns this Long with bits rotated to the right by the given amount. This is an alias of {@link Long#rotateRight}.\n * @function\n * @param {number|!Long} numBits Number of bits\n * @returns {!Long} Rotated Long\n */\n// LongPrototype.rotr = LongPrototype.rotateRight;\n/**\n * Converts this Long to signed.\n * @this {!Long}\n * @returns {!Long} Signed long\n */\nexport function toSigned($this) {\n if (!$this.unsigned)\n return $this;\n return fromBits($this.low, $this.high, false);\n}\n;\n/**\n * Converts this Long to unsigned.\n * @this {!Long}\n * @returns {!Long} Unsigned long\n */\nexport function toUnsigned($this) {\n if ($this.unsigned)\n return $this;\n return fromBits($this.low, $this.high, true);\n}\n;\n/**\n * Converts this Long to its byte representation.\n * @param {boolean=} le Whether little or big endian, defaults to big endian\n * @this {!Long}\n * @returns {!Array.<number>} Byte representation\n */\nexport function toBytes($this, le) {\n return le ? toBytesLE($this) : toBytesBE($this);\n}\n;\n/**\n * Converts this Long to its little endian byte representation.\n * @this {!Long}\n * @returns {!Array.<number>} Little endian byte representation\n */\nexport function toBytesLE($this) {\n var hi = $this.high, lo = $this.low;\n return [\n lo & 0xff,\n lo >>> 8 & 0xff,\n lo >>> 16 & 0xff,\n lo >>> 24,\n hi & 0xff,\n hi >>> 8 & 0xff,\n hi >>> 16 & 0xff,\n hi >>> 24\n ];\n}\n;\n/**\n * Converts this Long to its big endian byte representation.\n * @this {!Long}\n * @returns {!Array.<number>} Big endian byte representation\n */\nexport function toBytesBE($this) {\n var hi = $this.high, lo = $this.low;\n return [\n hi >>> 24,\n hi >>> 16 & 0xff,\n hi >>> 8 & 0xff,\n hi & 0xff,\n lo >>> 24,\n lo >>> 16 & 0xff,\n lo >>> 8 & 0xff,\n lo & 0xff\n ];\n}\n;\n/**\n * Creates a Long from its byte representation.\n * @param {!Array.<number>} bytes Byte representation\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\n * @param {boolean=} le Whether little or big endian, defaults to big endian\n * @returns {Long} The corresponding Long value\n */\nexport function fromBytes(bytes, unsigned, le) {\n return le ? fromBytesLE(bytes, unsigned) : fromBytesBE(bytes, unsigned);\n}\n;\n/**\n * Creates a Long from its little endian byte representation.\n * @param {!Array.<number>} bytes Little endian byte representation\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\n * @returns {Long} The corresponding Long value\n */\nexport function fromBytesLE(bytes, unsigned) {\n return new Long(bytes[0] |\n bytes[1] << 8 |\n bytes[2] << 16 |\n bytes[3] << 24, bytes[4] |\n bytes[5] << 8 |\n bytes[6] << 16 |\n bytes[7] << 24, unsigned);\n}\n;\n/**\n * Creates a Long from its big endian byte representation.\n * @param {!Array.<number>} bytes Big endian byte representation\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\n * @returns {Long} The corresponding Long value\n */\nexport function fromBytesBE(bytes, unsigned) {\n return new Long(bytes[4] << 24 |\n bytes[5] << 16 |\n bytes[6] << 8 |\n bytes[7], bytes[0] << 24 |\n bytes[1] << 16 |\n bytes[2] << 8 |\n bytes[3], unsigned);\n}\n;\n//# sourceMappingURL=long.js.map","import { isValid } from \"./Int32\";\nimport * as LongLib from \"./lib/long\";\nexport default LongLib.Long;\nexport const get_Zero = LongLib.ZERO;\nexport const get_One = LongLib.ONE;\nexport const op_Addition = LongLib.add;\nexport const op_Subtraction = LongLib.subtract;\nexport const op_Multiply = LongLib.multiply;\nexport const op_Division = LongLib.divide;\nexport const op_Modulus = LongLib.modulo;\nexport const op_UnaryNegation = LongLib.negate;\nexport const op_LeftShift = LongLib.shiftLeft;\nexport const op_RightShift = LongLib.shiftRight;\nexport const op_RightShiftUnsigned = LongLib.shiftRightUnsigned;\nexport const op_BitwiseAnd = LongLib.and;\nexport const op_BitwiseOr = LongLib.or;\nexport const op_ExclusiveOr = LongLib.xor;\nexport const op_LogicalNot = LongLib.not;\nexport const op_LessThan = LongLib.lessThan;\nexport const op_LessThanOrEqual = LongLib.lessThanOrEqual;\nexport const op_GreaterThan = LongLib.greaterThan;\nexport const op_GreaterThanOrEqual = LongLib.greaterThanOrEqual;\nexport const op_Equality = LongLib.equals;\nexport const op_Inequality = LongLib.notEquals;\nexport const equals = LongLib.equals;\nexport const compare = LongLib.compare;\nexport const fromInt = LongLib.fromInt;\nexport const fromBits = LongLib.fromBits;\nexport const fromBytes = LongLib.fromBytes;\nexport const fromNumber = LongLib.fromNumber;\nexport const fromString = LongLib.fromString;\nexport const fromValue = LongLib.fromValue;\nexport const toInt = LongLib.toInt;\nexport const toBytes = LongLib.toBytes;\nexport const toNumber = LongLib.toNumber;\nexport const toString = LongLib.toString;\nexport const getLowBits = LongLib.getLowBits;\nexport const getHighBits = LongLib.getHighBits;\nexport const getLowBitsUnsigned = LongLib.getLowBitsUnsigned;\nexport const getHighBitsUnsigned = LongLib.getHighBitsUnsigned;\nfunction getMaxValue(unsigned, radix, isNegative) {\n switch (radix) {\n case 2: return unsigned ?\n \"1111111111111111111111111111111111111111111111111111111111111111\" :\n (isNegative ? \"1000000000000000000000000000000000000000000000000000000000000000\"\n : \"111111111111111111111111111111111111111111111111111111111111111\");\n case 8: return unsigned ?\n \"1777777777777777777777\" :\n (isNegative ? \"1000000000000000000000\" : \"777777777777777777777\");\n case 10: return unsigned ?\n \"18446744073709551615\" :\n (isNegative ? \"9223372036854775808\" : \"9223372036854775807\");\n case 16: return unsigned ?\n \"FFFFFFFFFFFFFFFF\" :\n (isNegative ? \"8000000000000000\" : \"7FFFFFFFFFFFFFFF\");\n default: throw new Error(\"Invalid radix.\");\n }\n}\nexport function abs(x) {\n if (!x.unsigned && LongLib.isNegative(x)) {\n return op_UnaryNegation(x);\n }\n else {\n return x;\n }\n}\nexport function fromInteger(value, unsigned, kind) {\n let x = value;\n let xh = 0;\n switch (kind) {\n case 0:\n x = value << 24 >> 24;\n xh = x;\n break;\n case 4:\n x = value << 24 >>> 24;\n break;\n case 1:\n x = value << 16 >> 16;\n xh = x;\n break;\n case 5:\n x = value << 16 >>> 16;\n break;\n case 2:\n x = value >> 0;\n xh = x;\n break;\n case 6:\n x = value >>> 0;\n break;\n }\n return LongLib.fromBits(x, xh >> 31, unsigned);\n}\nexport function parse(str, style, unsigned, _bitsize, radix) {\n const res = isValid(str, style, radix);\n if (res != null) {\n const lessOrEqual = (x, y) => {\n const len = Math.max(x.length, y.length);\n return x.padStart(len, \"0\") <= y.padStart(len, \"0\");\n };\n const isNegative = res.sign === \"-\";\n const maxValue = getMaxValue(unsigned || res.radix !== 10, res.radix, isNegative);\n if (lessOrEqual(res.digits.toUpperCase(), maxValue)) {\n str = isNegative ? res.sign + res.digits : res.digits;\n return LongLib.fromString(str, unsigned, res.radix);\n }\n }\n throw new Error(\"Input string was not in a correct format.\");\n}\nexport function tryParse(str, style, unsigned, bitsize) {\n try {\n const v = parse(str, style, unsigned, bitsize);\n return [true, v];\n }\n catch (_a) {\n // supress error\n }\n return [false, LongLib.ZERO];\n}\nexport function unixEpochMillisecondsToTicks(ms, offset) {\n return op_Multiply(op_Addition(op_Addition(LongLib.fromNumber(ms), 62135596800000), offset), 10000);\n}\nexport function ticksToUnixEpochMilliseconds(ticks) {\n return LongLib.toNumber(op_Subtraction(op_Division(ticks, 10000), 62135596800000));\n}\nexport function makeRangeStepFunction(step, last, unsigned) {\n const stepComparedWithZero = LongLib.compare(step, unsigned ? LongLib.UZERO : LongLib.ZERO);\n if (stepComparedWithZero === 0) {\n throw new Error(\"The step of a range cannot be zero\");\n }\n const stepGreaterThanZero = stepComparedWithZero > 0;\n return (x) => {\n const comparedWithLast = LongLib.compare(x, last);\n if ((stepGreaterThanZero && comparedWithLast <= 0)\n || (!stepGreaterThanZero && comparedWithLast >= 0)) {\n return [x, op_Addition(x, step)];\n }\n else {\n return null;\n }\n };\n}\n//# sourceMappingURL=Long.js.map","/**\n * DateTimeOffset functions.\n *\n * Note: Date instances are always DateObjects in local\n * timezone (because JS dates are all kinds of messed up).\n * A local date returns UTC epoc when `.getTime()` is called.\n *\n * Basically; invariant: date.getTime() always return UTC time.\n */\nimport { fromValue, ticksToUnixEpochMilliseconds, unixEpochMillisecondsToTicks } from \"./Long\";\nimport { compareDates, dateOffset, padWithZeros } from \"./Util\";\nexport const offsetRegex = /(?:Z|[+-](\\d+):?([0-5]?\\d)?)\\s*$/;\nexport function dateOffsetToString(offset) {\n const isMinus = offset < 0;\n offset = Math.abs(offset);\n const hours = ~~(offset / 3600000);\n const minutes = (offset % 3600000) / 60000;\n return (isMinus ? \"-\" : \"+\") +\n padWithZeros(hours, 2) + \":\" +\n padWithZeros(minutes, 2);\n}\nexport function dateToHalfUTCString(date, half) {\n const str = date.toISOString();\n return half === \"first\"\n ? str.substring(0, str.indexOf(\"T\"))\n : str.substring(str.indexOf(\"T\") + 1, str.length - 1);\n}\nfunction dateToISOString(d, utc) {\n if (utc) {\n return d.toISOString();\n }\n else {\n // JS Date is always local\n const printOffset = d.kind == null ? true : d.kind === 2 /* Local */;\n return padWithZeros(d.getFullYear(), 4) + \"-\" +\n padWithZeros(d.getMonth() + 1, 2) + \"-\" +\n padWithZeros(d.getDate(), 2) + \"T\" +\n padWithZeros(d.getHours(), 2) + \":\" +\n padWithZeros(d.getMinutes(), 2) + \":\" +\n padWithZeros(d.getSeconds(), 2) + \".\" +\n padWithZeros(d.getMilliseconds(), 3) +\n (printOffset ? dateOffsetToString(d.getTimezoneOffset() * -60000) : \"\");\n }\n}\nfunction dateToISOStringWithOffset(dateWithOffset, offset) {\n const str = dateWithOffset.toISOString();\n return str.substring(0, str.length - 1) + dateOffsetToString(offset);\n}\nfunction dateToStringWithCustomFormat(date, format, utc) {\n return format.replace(/(\\w)\\1*/g, (match) => {\n let rep = Number.NaN;\n switch (match.substring(0, 1)) {\n case \"y\":\n const y = utc ? date.getUTCFullYear() : date.getFullYear();\n rep = match.length < 4 ? y % 100 : y;\n break;\n case \"M\":\n rep = (utc ? date.getUTCMonth() : date.getMonth()) + 1;\n break;\n case \"d\":\n rep = utc ? date.getUTCDate() : date.getDate();\n break;\n case \"H\":\n rep = utc ? date.getUTCHours() : date.getHours();\n break;\n case \"h\":\n const h = utc ? date.getUTCHours() : date.getHours();\n rep = h > 12 ? h % 12 : h;\n break;\n case \"m\":\n rep = utc ? date.getUTCMinutes() : date.getMinutes();\n break;\n case \"s\":\n rep = utc ? date.getUTCSeconds() : date.getSeconds();\n break;\n case \"f\":\n rep = utc ? date.getUTCMilliseconds() : date.getMilliseconds();\n break;\n }\n if (Number.isNaN(rep)) {\n return match;\n }\n else {\n return (rep < 10 && match.length > 1) ? \"0\" + rep : \"\" + rep;\n }\n });\n}\nfunction dateToStringWithOffset(date, format) {\n var _a, _b, _c;\n const d = new Date(date.getTime() + ((_a = date.offset) !== null && _a !== void 0 ? _a : 0));\n if (typeof format !== \"string\") {\n return d.toISOString().replace(/\\.\\d+/, \"\").replace(/[A-Z]|\\.\\d+/g, \" \") + dateOffsetToString(((_b = date.offset) !== null && _b !== void 0 ? _b : 0));\n }\n else if (format.length === 1) {\n switch (format) {\n case \"D\":\n case \"d\": return dateToHalfUTCString(d, \"first\");\n case \"T\":\n case \"t\": return dateToHalfUTCString(d, \"second\");\n case \"O\":\n case \"o\": return dateToISOStringWithOffset(d, ((_c = date.offset) !== null && _c !== void 0 ? _c : 0));\n default: throw new Error(\"Unrecognized Date print format\");\n }\n }\n else {\n return dateToStringWithCustomFormat(d, format, true);\n }\n}\nfunction dateToStringWithKind(date, format) {\n const utc = date.kind === 1 /* UTC */;\n if (typeof format !== \"string\") {\n return utc ? date.toUTCString() : date.toLocaleString();\n }\n else if (format.length === 1) {\n switch (format) {\n case \"D\":\n case \"d\":\n return utc ? dateToHalfUTCString(date, \"first\") : date.toLocaleDateString();\n case \"T\":\n case \"t\":\n return utc ? dateToHalfUTCString(date, \"second\") : date.toLocaleTimeString();\n case \"O\":\n case \"o\":\n return dateToISOString(date, utc);\n default:\n throw new Error(\"Unrecognized Date print format\");\n }\n }\n else {\n return dateToStringWithCustomFormat(date, format, utc);\n }\n}\nexport function toString(date, format, _provider) {\n return date.offset != null\n ? dateToStringWithOffset(date, format)\n : dateToStringWithKind(date, format);\n}\nexport default function DateTime(value, kind) {\n const d = new Date(value);\n d.kind = (kind == null ? 0 /* Unspecified */ : kind) | 0;\n return d;\n}\nexport function fromTicks(ticks, kind) {\n ticks = fromValue(ticks);\n kind = kind != null ? kind : 0 /* Unspecified */;\n let date = DateTime(ticksToUnixEpochMilliseconds(ticks), kind);\n // Ticks are local to offset (in this case, either UTC or Local/Unknown).\n // If kind is anything but UTC, that means that the tick number was not\n // in utc, thus getTime() cannot return UTC, and needs to be shifted.\n if (kind !== 1 /* UTC */) {\n date = DateTime(date.getTime() - dateOffset(date), kind);\n }\n return date;\n}\nexport function fromDateTimeOffset(date, kind) {\n var _a;\n switch (kind) {\n case 1 /* UTC */: return DateTime(date.getTime(), 1 /* UTC */);\n case 2 /* Local */: return DateTime(date.getTime(), 2 /* Local */);\n default:\n const d = DateTime(date.getTime() + ((_a = date.offset) !== null && _a !== void 0 ? _a : 0), kind);\n return DateTime(d.getTime() - dateOffset(d), kind);\n }\n}\nexport function getTicks(date) {\n return unixEpochMillisecondsToTicks(date.getTime(), dateOffset(date));\n}\nexport function minValue() {\n // This is \"0001-01-01T00:00:00.000Z\", actual JS min value is -8640000000000000\n return DateTime(-62135596800000, 0 /* Unspecified */);\n}\nexport function maxValue() {\n // This is \"9999-12-31T23:59:59.999Z\", actual JS max value is 8640000000000000\n return DateTime(253402300799999, 0 /* Unspecified */);\n}\nexport function parseRaw(str) {\n let date = new Date(str);\n if (isNaN(date.getTime())) {\n // Try to check strings JS Date cannot parse (see #1045, #1422)\n // tslint:disable-next-line:max-line-length\n const m = /^\\s*(\\d+[^\\w\\s:]\\d+[^\\w\\s:]\\d+)?\\s*(\\d+:\\d+(?::\\d+(?:\\.\\d+)?)?)?\\s*([AaPp][Mm])?\\s*([+-]\\d+(?::\\d+)?)?\\s*$/.exec(str);\n if (m != null) {\n let baseDate;\n let timeInSeconds = 0;\n if (m[2] != null) {\n const timeParts = m[2].split(\":\");\n timeInSeconds =\n parseInt(timeParts[0], 10) * 3600 +\n parseInt(timeParts[1] || \"0\", 10) * 60 +\n parseFloat(timeParts[2] || \"0\");\n if (m[3] != null && m[3].toUpperCase() === \"PM\") {\n timeInSeconds += 720;\n }\n }\n if (m[4] != null) { // There's an offset, parse as UTC\n if (m[1] != null) {\n baseDate = new Date(m[1] + \" UTC\");\n }\n else {\n const d = new Date();\n baseDate = new Date(d.getUTCFullYear() + \"/\" + (d.getUTCMonth() + 1) + \"/\" + d.getUTCDate());\n }\n const offsetParts = m[4].substr(1).split(\":\");\n let offsetInMinutes = parseInt(offsetParts[0], 10) * 60 + parseInt(offsetParts[1] || \"0\", 10);\n if (m[4][0] === \"+\") {\n offsetInMinutes *= -1;\n }\n timeInSeconds += offsetInMinutes * 60;\n }\n else {\n if (m[1] != null) {\n baseDate = new Date(m[1]);\n }\n else {\n const d = new Date();\n baseDate = new Date(d.getFullYear() + \"/\" + (d.getMonth() + 1) + \"/\" + d.getDate());\n }\n }\n date = new Date(baseDate.getTime() + timeInSeconds * 1000);\n // correct for daylight savings time\n date = new Date(date.getTime() + (date.getTimezoneOffset() - baseDate.getTimezoneOffset()) * 60000);\n }\n else {\n throw new Error(\"The string is not a valid Date.\");\n }\n }\n return date;\n}\nexport function parse(str, detectUTC = false) {\n const date = parseRaw(str);\n const offset = offsetRegex.exec(str);\n // .NET always parses DateTime as Local if there's offset info (even \"Z\")\n // Newtonsoft.Json uses UTC if the offset is \"Z\"\n const kind = offset != null\n ? (detectUTC && offset[0] === \"Z\" ? 1 /* UTC */ : 2 /* Local */)\n : 0 /* Unspecified */;\n return DateTime(date.getTime(), kind);\n}\nexport function tryParse(v, _refValue) {\n try {\n // if value is null or whitespace, parsing fails\n if (v == null || v.trim() === \"\") {\n return [false, minValue()];\n }\n return [true, parse(v)];\n }\n catch (_err) {\n return [false, minValue()];\n }\n}\nexport function create(year, month, day, h = 0, m = 0, s = 0, ms = 0, kind) {\n const dateValue = kind === 1 /* UTC */\n ? Date.UTC(year, month - 1, day, h, m, s, ms)\n : new Date(year, month - 1, day, h, m, s, ms).getTime();\n if (isNaN(dateValue)) {\n throw new Error(\"The parameters describe an unrepresentable Date.\");\n }\n const date = DateTime(dateValue, kind);\n if (year <= 99) {\n date.setFullYear(year, month - 1, day);\n }\n return date;\n}\nexport function now() {\n return DateTime(Date.now(), 2 /* Local */);\n}\nexport function utcNow() {\n return DateTime(Date.now(), 1 /* UTC */);\n}\nexport function today() {\n return date(now());\n}\nexport function isLeapYear(year) {\n return year % 4 === 0 && year % 100 !== 0 || year % 400 === 0;\n}\nexport function daysInMonth(year, month) {\n return month === 2\n ? (isLeapYear(year) ? 29 : 28)\n : (month >= 8 ? (month % 2 === 0 ? 31 : 30) : (month % 2 === 0 ? 30 : 31));\n}\nexport function toUniversalTime(date) {\n return date.kind === 1 /* UTC */ ? date : DateTime(date.getTime(), 1 /* UTC */);\n}\nexport function toLocalTime(date) {\n return date.kind === 2 /* Local */ ? date : DateTime(date.getTime(), 2 /* Local */);\n}\nexport function specifyKind(d, kind) {\n return create(year(d), month(d), day(d), hour(d), minute(d), second(d), millisecond(d), kind);\n}\nexport function timeOfDay(d) {\n return hour(d) * 3600000\n + minute(d) * 60000\n + second(d) * 1000\n + millisecond(d);\n}\nexport function date(d) {\n return create(year(d), month(d), day(d), 0, 0, 0, 0, d.kind);\n}\nexport function day(d) {\n return d.kind === 1 /* UTC */ ? d.getUTCDate() : d.getDate();\n}\nexport function hour(d) {\n return d.kind === 1 /* UTC */ ? d.getUTCHours() : d.getHours();\n}\nexport function millisecond(d) {\n return d.kind === 1 /* UTC */ ? d.getUTCMilliseconds() : d.getMilliseconds();\n}\nexport function minute(d) {\n return d.kind === 1 /* UTC */ ? d.getUTCMinutes() : d.getMinutes();\n}\nexport function month(d) {\n return (d.kind === 1 /* UTC */ ? d.getUTCMonth() : d.getMonth()) + 1;\n}\nexport function second(d) {\n return d.kind === 1 /* UTC */ ? d.getUTCSeconds() : d.getSeconds();\n}\nexport function year(d) {\n return d.kind === 1 /* UTC */ ? d.getUTCFullYear() : d.getFullYear();\n}\nexport function dayOfWeek(d) {\n return d.kind === 1 /* UTC */ ? d.getUTCDay() : d.getDay();\n}\nexport function dayOfYear(d) {\n const _year = year(d);\n const _month = month(d);\n let _day = day(d);\n for (let i = 1; i < _month; i++) {\n _day += daysInMonth(_year, i);\n }\n return _day;\n}\nexport function add(d, ts) {\n const newDate = DateTime(d.getTime() + ts, d.kind);\n if (d.kind === 2 /* Local */) {\n const oldTzOffset = d.getTimezoneOffset();\n const newTzOffset = newDate.getTimezoneOffset();\n return oldTzOffset !== newTzOffset\n ? DateTime(newDate.getTime() + (newTzOffset - oldTzOffset) * 60000, d.kind)\n : newDate;\n }\n else {\n return newDate;\n }\n}\nexport function addDays(d, v) {\n return add(d, v * 86400000);\n}\nexport function addHours(d, v) {\n return add(d, v * 3600000);\n}\nexport function addMinutes(d, v) {\n return add(d, v * 60000);\n}\nexport function addSeconds(d, v) {\n return add(d, v * 1000);\n}\nexport function addMilliseconds(d, v) {\n return add(d, v);\n}\nexport function addYears(d, v) {\n const newMonth = month(d);\n const newYear = year(d) + v;\n const _daysInMonth = daysInMonth(newYear, newMonth);\n const newDay = Math.min(_daysInMonth, day(d));\n return create(newYear, newMonth, newDay, hour(d), minute(d), second(d), millisecond(d), d.kind);\n}\nexport function addMonths(d, v) {\n let newMonth = month(d) + v;\n let newMonth_ = 0;\n let yearOffset = 0;\n if (newMonth > 12) {\n newMonth_ = newMonth % 12;\n yearOffset = Math.floor(newMonth / 12);\n newMonth = newMonth_;\n }\n else if (newMonth < 1) {\n newMonth_ = 12 + newMonth % 12;\n yearOffset = Math.floor(newMonth / 12) + (newMonth_ === 12 ? -1 : 0);\n newMonth = newMonth_;\n }\n const newYear = year(d) + yearOffset;\n const _daysInMonth = daysInMonth(newYear, newMonth);\n const newDay = Math.min(_daysInMonth, day(d));\n return create(newYear, newMonth, newDay, hour(d), minute(d), second(d), millisecond(d), d.kind);\n}\nexport function subtract(d, that) {\n return typeof that === \"number\"\n ? add(d, -that)\n : d.getTime() - that.getTime();\n}\nexport function toLongDateString(d) {\n return d.toDateString();\n}\nexport function toShortDateString(d) {\n return d.toLocaleDateString();\n}\nexport function toLongTimeString(d) {\n return d.toLocaleTimeString();\n}\nexport function toShortTimeString(d) {\n return d.toLocaleTimeString().replace(/:\\d\\d(?!:)/, \"\");\n}\nexport function equals(d1, d2) {\n return d1.getTime() === d2.getTime();\n}\nexport const compare = compareDates;\nexport const compareTo = compareDates;\nexport function op_Addition(x, y) {\n return add(x, y);\n}\nexport function op_Subtraction(x, y) {\n return subtract(x, y);\n}\nexport function isDaylightSavingTime(x) {\n const jan = new Date(x.getFullYear(), 0, 1);\n const jul = new Date(x.getFullYear(), 6, 1);\n return isDST(jan.getTimezoneOffset(), jul.getTimezoneOffset(), x.getTimezoneOffset());\n}\nfunction isDST(janOffset, julOffset, tOffset) {\n return Math.min(janOffset, julOffset) === tOffset;\n}\n//# sourceMappingURL=Date.js.map","/**\n * DateTimeOffset functions.\n *\n * Note: DateOffset instances are always DateObjects in local\n * timezone (because JS dates are all kinds of messed up).\n * A local date returns UTC epoc when `.getTime()` is called.\n *\n * However, this means that in order to construct an UTC date\n * from a DateOffset with offset of +5 hours, you first need\n * to subtract those 5 hours, than add the \"local\" offset.\n * As said, all kinds of messed up.\n *\n * Basically; invariant: date.getTime() always return UTC time.\n */\nimport { create as createDate, dateOffsetToString, daysInMonth, offsetRegex, parseRaw } from \"./Date\";\nimport { fromValue, ticksToUnixEpochMilliseconds, unixEpochMillisecondsToTicks } from \"./Long\";\nimport { compareDates, padWithZeros } from \"./Util\";\nexport default function DateTimeOffset(value, offset) {\n const d = new Date(value);\n d.offset = offset != null ? offset : new Date().getTimezoneOffset() * -60000;\n return d;\n}\nexport function fromDate(date, offset) {\n const isUtc = date.kind === 1 /* UTC */;\n const offset2 = isUtc ? 0 : date.getTimezoneOffset() * -60000;\n if (offset != null && offset !== offset2) {\n throw new Error(isUtc\n ? \"The UTC Offset for Utc DateTime instances must be 0.\"\n : \"The UTC Offset of the local dateTime parameter does not match the offset argument.\");\n }\n return DateTimeOffset(date.getTime(), offset2);\n}\nexport function fromTicks(ticks, offset) {\n ticks = fromValue(ticks);\n const epoc = ticksToUnixEpochMilliseconds(ticks) - offset;\n return DateTimeOffset(epoc, offset);\n}\nexport function getUtcTicks(date) {\n return unixEpochMillisecondsToTicks(date.getTime(), 0);\n}\nexport function minValue() {\n // This is \"0001-01-01T00:00:00.000Z\", actual JS min value is -8640000000000000\n return DateTimeOffset(-62135596800000, 0);\n}\nexport function maxValue() {\n // This is \"9999-12-31T23:59:59.999Z\", actual JS max value is 8640000000000000\n return DateTimeOffset(253402300799999, 0);\n}\nexport function parse(str) {\n const date = parseRaw(str);\n const offsetMatch = offsetRegex.exec(str);\n const offset = offsetMatch == null\n ? date.getTimezoneOffset() * -60000\n : (offsetMatch[0] === \"Z\"\n ? 0\n : parseInt(offsetMatch[1], 10) * 3600000\n + parseInt(offsetMatch[2], 10) * 60000);\n return DateTimeOffset(date.getTime(), offset);\n}\nexport function tryParse(v, _refValue) {\n try {\n return [true, parse(v)];\n }\n catch (_err) {\n return [false, minValue()];\n }\n}\nexport function create(year, month, day, h, m, s, ms, offset) {\n if (offset == null) {\n offset = ms;\n ms = 0;\n }\n if (offset !== 0) {\n if (offset % 60000 !== 0) {\n throw new Error(\"Offset must be specified in whole minutes\");\n }\n if (~~(offset / 3600000) > 14) {\n throw new Error(\"Offset must be within plus or minus 14 hour\");\n }\n }\n let date;\n if (offset === 0) {\n date = new Date(Date.UTC(year, month - 1, day, h, m, s, ms));\n if (year <= 99) {\n date.setFullYear(year, month - 1, day);\n }\n }\n else {\n const str = padWithZeros(year, 4) + \"-\" +\n padWithZeros(month, 2) + \"-\" +\n padWithZeros(day, 2) + \"T\" +\n padWithZeros(h, 2) + \":\" +\n padWithZeros(m, 2) + \":\" +\n padWithZeros(s, 2) + \".\" +\n padWithZeros(ms, 3) +\n dateOffsetToString(offset);\n date = new Date(str);\n }\n const dateValue = date.getTime();\n if (isNaN(dateValue)) {\n throw new Error(\"The parameters describe an unrepresentable Date\");\n }\n return DateTimeOffset(dateValue, offset);\n}\nexport function now() {\n const date = new Date();\n const offset = date.getTimezoneOffset() * -60000;\n return DateTimeOffset(date.getTime(), offset);\n}\nexport function utcNow() {\n const date = now();\n return DateTimeOffset(date.getTime(), 0);\n}\nexport function toUniversalTime(date) {\n return DateTimeOffset(date.getTime(), 0);\n}\nexport function toLocalTime(date) {\n return DateTimeOffset(date.getTime(), date.getTimezoneOffset() * -60000);\n}\nexport function timeOfDay(d) {\n var _a;\n const d2 = new Date(d.getTime() + ((_a = d.offset) !== null && _a !== void 0 ? _a : 0));\n return d2.getUTCHours() * 3600000\n + d2.getUTCMinutes() * 60000\n + d2.getUTCSeconds() * 1000\n + d2.getUTCMilliseconds();\n}\nexport function date(d) {\n var _a;\n const d2 = new Date(d.getTime() + ((_a = d.offset) !== null && _a !== void 0 ? _a : 0));\n return createDate(d2.getUTCFullYear(), d2.getUTCMonth() + 1, d2.getUTCDate(), 0, 0, 0, 0);\n}\nexport function day(d) {\n var _a;\n return new Date(d.getTime() + ((_a = d.offset) !== null && _a !== void 0 ? _a : 0)).getUTCDate();\n}\nexport function hour(d) {\n var _a;\n return new Date(d.getTime() + ((_a = d.offset) !== null && _a !== void 0 ? _a : 0)).getUTCHours();\n}\nexport function millisecond(d) {\n var _a;\n return new Date(d.getTime() + ((_a = d.offset) !== null && _a !== void 0 ? _a : 0)).getUTCMilliseconds();\n}\nexport function minute(d) {\n var _a;\n return new Date(d.getTime() + ((_a = d.offset) !== null && _a !== void 0 ? _a : 0)).getUTCMinutes();\n}\nexport function month(d) {\n var _a;\n return new Date(d.getTime() + ((_a = d.offset) !== null && _a !== void 0 ? _a : 0)).getUTCMonth() + 1;\n}\nexport function second(d) {\n var _a;\n return new Date(d.getTime() + ((_a = d.offset) !== null && _a !== void 0 ? _a : 0)).getUTCSeconds();\n}\nexport function year(d) {\n var _a;\n return new Date(d.getTime() + ((_a = d.offset) !== null && _a !== void 0 ? _a : 0)).getUTCFullYear();\n}\nexport function dayOfWeek(d) {\n var _a;\n return new Date(d.getTime() + ((_a = d.offset) !== null && _a !== void 0 ? _a : 0)).getUTCDay();\n}\nexport function dayOfYear(d) {\n var _a;\n const d2 = new Date(d.getTime() + ((_a = d.offset) !== null && _a !== void 0 ? _a : 0));\n const _year = d2.getUTCFullYear();\n const _month = d2.getUTCMonth() + 1;\n let _day = d2.getUTCDate();\n for (let i = 1; i < _month; i++) {\n _day += daysInMonth(_year, i);\n }\n return _day;\n}\nexport function add(d, ts) {\n var _a;\n return DateTimeOffset(d.getTime() + ts, ((_a = d.offset) !== null && _a !== void 0 ? _a : 0));\n}\nexport function addDays(d, v) {\n var _a;\n return DateTimeOffset(d.getTime() + v * 86400000, ((_a = d.offset) !== null && _a !== void 0 ? _a : 0));\n}\nexport function addHours(d, v) {\n var _a;\n return DateTimeOffset(d.getTime() + v * 3600000, ((_a = d.offset) !== null && _a !== void 0 ? _a : 0));\n}\nexport function addMinutes(d, v) {\n var _a;\n return DateTimeOffset(d.getTime() + v * 60000, ((_a = d.offset) !== null && _a !== void 0 ? _a : 0));\n}\nexport function addSeconds(d, v) {\n var _a;\n return DateTimeOffset(d.getTime() + v * 1000, ((_a = d.offset) !== null && _a !== void 0 ? _a : 0));\n}\nexport function addMilliseconds(d, v) {\n var _a;\n return DateTimeOffset(d.getTime() + v, ((_a = d.offset) !== null && _a !== void 0 ? _a : 0));\n}\nexport function addYears(d, v) {\n var _a;\n const newMonth = d.getUTCMonth() + 1;\n const newYear = d.getUTCFullYear() + v;\n const _daysInMonth = daysInMonth(newYear, newMonth);\n const newDay = Math.min(_daysInMonth, d.getUTCDate());\n return create(newYear, newMonth, newDay, d.getUTCHours(), d.getUTCMinutes(), d.getUTCSeconds(), d.getUTCMilliseconds(), ((_a = d.offset) !== null && _a !== void 0 ? _a : 0));\n}\nexport function addMonths(d, v) {\n var _a, _b;\n const d2 = new Date(d.getTime() + ((_a = d.offset) !== null && _a !== void 0 ? _a : 0));\n let newMonth = d2.getUTCMonth() + 1 + v;\n let newMonth_ = 0;\n let yearOffset = 0;\n if (newMonth > 12) {\n newMonth_ = newMonth % 12;\n yearOffset = Math.floor(newMonth / 12);\n newMonth = newMonth_;\n }\n else if (newMonth < 1) {\n newMonth_ = 12 + newMonth % 12;\n yearOffset = Math.floor(newMonth / 12) + (newMonth_ === 12 ? -1 : 0);\n newMonth = newMonth_;\n }\n const newYear = d2.getUTCFullYear() + yearOffset;\n const _daysInMonth = daysInMonth(newYear, newMonth);\n const newDay = Math.min(_daysInMonth, d2.getUTCDate());\n return create(newYear, newMonth, newDay, d2.getUTCHours(), d2.getUTCMinutes(), d2.getUTCSeconds(), d2.getUTCMilliseconds(), ((_b = d.offset) !== null && _b !== void 0 ? _b : 0));\n}\nexport function subtract(d, that) {\n var _a;\n return typeof that === \"number\"\n ? DateTimeOffset(d.getTime() - that, ((_a = d.offset) !== null && _a !== void 0 ? _a : 0))\n : d.getTime() - that.getTime();\n}\nexport function equals(d1, d2) {\n return d1.getTime() === d2.getTime();\n}\nexport function equalsExact(d1, d2) {\n return d1.getTime() === d2.getTime() && d1.offset === d2.offset;\n}\nexport function compare(d1, d2) {\n return compareDates(d1, d2);\n}\nexport const compareTo = compare;\nexport function op_Addition(x, y) {\n return add(x, y);\n}\nexport function op_Subtraction(x, y) {\n return subtract(x, y);\n}\n//# sourceMappingURL=DateOffset.js.map","module BlogHelpers\n\nopen BlogTypes\nopen Fable.Core\n\nlet lang2code (lang:Language) =\n match lang with\n | English -> \"en\"\n | German -> \"de\"\n | Spanish -> \"es\"\n\nlet code2lang (code:string) =\n match code with\n | \"en\" -> Language.English\n | \"de\" -> Language.German\n | \"es\" -> Language.Spanish\n | _ -> Language.English\n\n[<Emit(\"document.querySelector(\\\"$0\\\").scrollIntoView({behavior: \\\"smooth\\\"})\")>]\nlet scrollToElement (selector:string): unit = jsNative\n\n[<Emit(\"navigator.language\")>]\nlet private browserLang (): string = jsNative\n\nlet defaultLang = \n match browserLang () with\n | txt when txt.StartsWith(\"de\") -> German\n | txt when txt.StartsWith(\"es\") -> Spanish\n | _ -> English\n \n\nlet postByUrl url posts: PostData option =\n Array.tryFind (fun post -> url = post.ownurl) posts","// https://github.com/MikeMcl/big.js/blob/01b3ce3a6b0ba7b42442ea48ec4ffc88d1669ec4/big.mjs\n/* tslint:disable */\nimport { combineHashCodes } from \"../Util\";\n// The shared prototype object.\nvar P = {\n GetHashCode() { return combineHashCodes([this.s, this.e].concat(this.c)); },\n Equals(x) { return !this.cmp(x); },\n CompareTo(x) { return this.cmp(x); },\n};\n/*\n * big.js v5.2.2\n * A small, fast, easy-to-use library for arbitrary-precision decimal arithmetic.\n * Copyright (c) 2018 Michael Mclaughlin <[email protected]>\n * https://github.com/MikeMcl/big.js/LICENCE\n */\n/************************************** EDITABLE DEFAULTS *****************************************/\n// The default values below must be integers within the stated ranges.\n/*\n * The maximum number of decimal places (DP) of the results of operations involving division:\n * div and sqrt, and pow with negative exponents.\n */\nvar DP = 28, // 0 to MAX_DP\n/*\n * The rounding mode (RM) used when rounding to the above decimal places.\n *\n * 0 Towards zero (i.e. truncate, no rounding). (ROUND_DOWN)\n * 1 To nearest neighbour. If equidistant, round up. (ROUND_HALF_UP)\n * 2 To nearest neighbour. If equidistant, to even. (ROUND_HALF_EVEN)\n * 3 Away from zero. (ROUND_UP)\n */\nRM = 1, // 0, 1, 2 or 3\n// The maximum value of DP and Big.DP.\nMAX_DP = 1E6, // 0 to 1000000\n// The maximum magnitude of the exponent argument to the pow method.\nMAX_POWER = 1E6, // 1 to 1000000\n/*\n * The negative exponent (NE) at and beneath which toString returns exponential notation.\n * (JavaScript numbers: -7)\n * -1000000 is the minimum recommended exponent value of a Big.\n */\nNE = -29, // 0 to -1000000\n/*\n * The positive exponent (PE) at and above which toString returns exponential notation.\n * (JavaScript numbers: 21)\n * 1000000 is the maximum recommended exponent value of a Big.\n * (This limit is not enforced or checked.)\n */\nPE = 29, // 0 to 1000000\n/**************************************************************************************************/\n// Error messages.\nNAME = '[big.js] ', INVALID = NAME + 'Invalid ', INVALID_DP = INVALID + 'decimal places', INVALID_RM = INVALID + 'rounding mode', DIV_BY_ZERO = NAME + 'Division by zero', UNDEFINED = void 0, NUMERIC = /^-?(\\d+(\\.\\d*)?|\\.\\d+)(e[+-]?\\d+)?$/i;\n/*\n * Create and return a Big constructor.\n *\n */\nfunction _Big_() {\n /*\n * The Big constructor and exported function.\n * Create and return a new instance of a Big number object.\n *\n * n {number|string|Big} A numeric value.\n */\n function Big(n) {\n var x = this;\n // Enable constructor usage without new.\n if (!(x instanceof Big))\n return n === UNDEFINED ? _Big_() : new Big(n);\n // Duplicate.\n if (n instanceof Big) {\n x.s = n.s;\n x.e = n.e;\n x.c = n.c.slice();\n normalize(x);\n }\n else {\n parse(x, n);\n }\n /*\n * Retain a reference to this Big constructor, and shadow Big.prototype.constructor which\n * points to Object.\n */\n x.constructor = Big;\n }\n Big.prototype = P;\n Big.DP = DP;\n Big.RM = RM;\n Big.NE = NE;\n Big.PE = PE;\n Big.version = '5.2.2';\n return Big;\n}\nfunction normalize(x) {\n x = round(x, DP, 0);\n if (x.c.length > 1 && !x.c[0]) {\n let i = x.c.findIndex(x => x);\n x.c = x.c.slice(i);\n x.e = x.e - i;\n }\n}\n/*\n * Parse the number or string value passed to a Big constructor.\n *\n * x {Big} A Big number instance.\n * n {number|string} A numeric value.\n */\nfunction parse(x, n) {\n var e, i, nl;\n // Minus zero?\n if (n === 0 && 1 / n < 0)\n n = '-0';\n else if (!NUMERIC.test(n += ''))\n throw Error(INVALID + 'number');\n // Determine sign.\n x.s = n.charAt(0) == '-' ? (n = n.slice(1), -1) : 1;\n // Decimal point?\n if ((e = n.indexOf('.')) > -1)\n n = n.replace('.', '');\n // Exponential form?\n if ((i = n.search(/e/i)) > 0) {\n // Determine exponent.\n if (e < 0)\n e = i;\n e += +n.slice(i + 1);\n n = n.substring(0, i);\n }\n else if (e < 0) {\n // Integer.\n e = n.length;\n }\n nl = n.length;\n // Determine leading zeros before decimal point.\n for (i = 0; i < e && i < nl && n.charAt(i) == '0';)\n ++i;\n // older version (ignores decimal point).\n // // Determine leading zeros.\n // for (i = 0; i < nl && n.charAt(i) == '0';) ++i;\n if (i == nl) {\n // Zero.\n x.c = [x.e = 0];\n }\n else {\n x.e = e - i - 1;\n x.c = [];\n // Convert string to array of digits without leading zeros\n for (e = 0; i < nl;)\n x.c[e++] = +n.charAt(i++);\n // older version (doesn't keep trailing zeroes).\n // // Determine trailing zeros.\n // for (; nl > 0 && n.charAt(--nl) == '0';);\n // // Convert string to array of digits without leading/trailing zeros.\n // for (e = 0; i <= nl;) x.c[e++] = +n.charAt(i++);\n }\n x = round(x, Big.DP, Big.RM);\n return x;\n}\n/*\n * Round Big x to a maximum of dp decimal places using rounding mode rm.\n * Called by stringify, P.div, P.round and P.sqrt.\n *\n * x {Big} The Big to round.\n * dp {number} Integer, 0 to MAX_DP inclusive.\n * rm {number} 0, 1, 2 or 3 (DOWN, HALF_UP, HALF_EVEN, UP)\n * [more] {boolean} Whether the result of division was truncated.\n */\nfunction round(x, dp, rm, more) {\n var xc = x.c, i = x.e + dp + 1;\n if (i < xc.length) {\n if (rm === 1) {\n // xc[i] is the digit after the digit that may be rounded up.\n more = xc[i] >= 5;\n }\n else if (rm === 2) {\n more = xc[i] > 5 || xc[i] == 5 &&\n (more || i < 0 || xc[i + 1] !== UNDEFINED || xc[i - 1] & 1);\n }\n else if (rm === 3) {\n more = more || !!xc[0];\n }\n else {\n more = false;\n if (rm !== 0)\n throw Error(INVALID_RM);\n }\n if (i < 1) {\n xc.length = 1;\n if (more) {\n // 1, 0.1, 0.01, 0.001, 0.0001 etc.\n x.e = -dp;\n xc[0] = 1;\n }\n else {\n // Zero.\n xc[0] = x.e = 0;\n }\n }\n else {\n // Remove any digits after the required decimal places.\n xc.length = i--;\n // Round up?\n if (more) {\n // Rounding up may mean the previous digit has to be rounded up.\n for (; ++xc[i] > 9;) {\n xc[i] = 0;\n if (!i--) {\n ++x.e;\n xc.unshift(1);\n }\n }\n }\n // Remove trailing zeros.\n for (i = xc.length; !xc[--i];)\n xc.pop();\n }\n }\n else if (rm < 0 || rm > 3 || rm !== ~~rm) {\n throw Error(INVALID_RM);\n }\n return x;\n}\n/*\n * Return a string representing the value of Big x in normal or exponential notation.\n * Handles P.toExponential, P.toFixed, P.toJSON, P.toPrecision, P.toString and P.valueOf.\n *\n * x {Big}\n * id? {number} Caller id.\n * 1 toExponential\n * 2 toFixed\n * 3 toPrecision\n * 4 valueOf\n * n? {number|undefined} Caller's argument.\n * k? {number|undefined}\n */\nfunction stringify(x, id, n, k) {\n var e, s, Big = x.constructor, z = !x.c[0];\n if (n !== UNDEFINED) {\n if (n !== ~~n || n < (id == 3) || n > MAX_DP) {\n throw Error(id == 3 ? INVALID + 'precision' : INVALID_DP);\n }\n x = new Big(x);\n // The index of the digit that may be rounded up.\n n = k - x.e;\n // Round?\n if (x.c.length > ++k)\n round(x, n, Big.RM);\n // toFixed: recalculate k as x.e may have changed if value rounded up.\n if (id == 2)\n k = x.e + n + 1;\n // Append zeros?\n for (; x.c.length < k;)\n x.c.push(0);\n }\n e = x.e;\n s = x.c.join('');\n n = s.length;\n // Exponential notation?\n if (id != 2 && (id == 1 || id == 3 && k <= e || e <= Big.NE || e >= Big.PE)) {\n s = s.charAt(0) + (n > 1 ? '.' + s.slice(1) : '') + (e < 0 ? 'e' : 'e+') + e;\n // Normal notation.\n }\n else if (e < 0) {\n for (; ++e;)\n s = '0' + s;\n s = '0.' + s;\n }\n else if (e > 0) {\n if (++e > n)\n for (e -= n; e--;)\n s += '0';\n else if (e < n)\n s = s.slice(0, e) + '.' + s.slice(e);\n }\n else if (n > 1) {\n s = s.charAt(0) + '.' + s.slice(1);\n }\n return x.s < 0 && (!z || id == 4) ? '-' + s : s;\n}\n// Prototype/instance methods\n/*\n * Return a new Big whose value is the absolute value of this Big.\n */\nP.abs = function () {\n var x = new this.constructor(this);\n x.s = 1;\n return x;\n};\n/*\n * Return 1 if the value of this Big is greater than the value of Big y,\n * -1 if the value of this Big is less than the value of Big y, or\n * 0 if they have the same value.\n*/\nP.cmp = function (y) {\n var isneg, Big = this.constructor, x = new Big(this), y = new Big(y), xc = x.c, yc = y.c, i = x.s, j = y.s, k = x.e, l = y.e;\n // Either zero?\n if (!xc[0] || !yc[0])\n return !xc[0] ? !yc[0] ? 0 : -j : i;\n // Signs differ?\n if (i != j)\n return i;\n isneg = i < 0;\n // Compare exponents.\n if (k != l)\n return k > l ^ isneg ? 1 : -1;\n // Compare digit by digit.\n j = Math.max(xc.length, yc.length);\n for (i = 0; i < j; i++) {\n k = i < xc.length ? xc[i] : 0;\n l = i < yc.length ? yc[i] : 0;\n if (k != l)\n return k > l ^ isneg ? 1 : -1;\n }\n return 0;\n // old version (doesn't compare well trailing zeroes, e.g. 1.0 with 1.00)\n // j = (k = xc.length) < (l = yc.length) ? k : l;\n // // Compare digit by digit.\n // for (i = -1; ++i < j;) {\n // if (xc[i] != yc[i]) return xc[i] > yc[i] ^ isneg ? 1 : -1;\n // }\n // // Compare lengths.\n // return k == l ? 0 : k > l ^ isneg ? 1 : -1;\n};\n/*\n * Return a new Big whose value is the value of this Big divided by the value of Big y, rounded,\n * if necessary, to a maximum of Big.DP decimal places using rounding mode Big.RM.\n */\nP.div = function (y) {\n var Big = this.constructor, x = new Big(this), y = new Big(y), a = x.c, // dividend\n b = y.c, // divisor\n k = x.s == y.s ? 1 : -1, dp = Big.DP;\n if (dp !== ~~dp || dp < 0 || dp > MAX_DP)\n throw Error(INVALID_DP);\n // Divisor is zero?\n if (!b[0])\n throw Error(DIV_BY_ZERO);\n // Dividend is 0? Return +-0.\n if (!a[0])\n return new Big(k * 0);\n var bl, bt, n, cmp, ri, bz = b.slice(), ai = bl = b.length, al = a.length, r = a.slice(0, bl), // remainder\n rl = r.length, q = y, // quotient\n qc = q.c = [], qi = 0, d = dp + (q.e = x.e - y.e) + 1; // number of digits of the result\n q.s = k;\n k = d < 0 ? 0 : d;\n // Create version of divisor with leading zero.\n bz.unshift(0);\n // Add zeros to make remainder as long as divisor.\n for (; rl++ < bl;)\n r.push(0);\n do {\n // n is how many times the divisor goes into current remainder.\n for (n = 0; n < 10; n++) {\n // Compare divisor and remainder.\n if (bl != (rl = r.length)) {\n cmp = bl > rl ? 1 : -1;\n }\n else {\n for (ri = -1, cmp = 0; ++ri < bl;) {\n if (b[ri] != r[ri]) {\n cmp = b[ri] > r[ri] ? 1 : -1;\n break;\n }\n }\n }\n // If divisor < remainder, subtract divisor from remainder.\n if (cmp < 0) {\n // Remainder can't be more than 1 digit longer than divisor.\n // Equalise lengths using divisor with extra leading zero?\n for (bt = rl == bl ? b : bz; rl;) {\n if (r[--rl] < bt[rl]) {\n ri = rl;\n for (; ri && !r[--ri];)\n r[ri] = 9;\n --r[ri];\n r[rl] += 10;\n }\n r[rl] -= bt[rl];\n }\n for (; !r[0];)\n r.shift();\n }\n else {\n break;\n }\n }\n // Add the digit n to the result array.\n qc[qi++] = cmp ? n : ++n;\n // Update the remainder.\n if (r[0] && cmp)\n r[rl] = a[ai] || 0;\n else\n r = [a[ai]];\n } while ((ai++ < al || r[0] !== UNDEFINED) && k--);\n // Leading zero? Do not remove if result is simply zero (qi == 1).\n if (!qc[0] && qi != 1) {\n // There can't be more than one zero.\n qc.shift();\n q.e--;\n }\n // Round?\n if (qi > d)\n round(q, dp, Big.RM, r[0] !== UNDEFINED);\n return q;\n};\n/*\n * Return true if the value of this Big is equal to the value of Big y, otherwise return false.\n */\nP.eq = function (y) {\n return !this.cmp(y);\n};\n/*\n * Return true if the value of this Big is greater than the value of Big y, otherwise return\n * false.\n */\nP.gt = function (y) {\n return this.cmp(y) > 0;\n};\n/*\n * Return true if the value of this Big is greater than or equal to the value of Big y, otherwise\n * return false.\n */\nP.gte = function (y) {\n return this.cmp(y) > -1;\n};\n/*\n * Return true if the value of this Big is less than the value of Big y, otherwise return false.\n */\nP.lt = function (y) {\n return this.cmp(y) < 0;\n};\n/*\n * Return true if the value of this Big is less than or equal to the value of Big y, otherwise\n * return false.\n */\nP.lte = function (y) {\n return this.cmp(y) < 1;\n};\n/*\n * Return a new Big whose value is the value of this Big minus the value of Big y.\n */\nP.minus = P.sub = function (y) {\n var i, j, t, xlty, Big = this.constructor, x = new Big(this), y = new Big(y), a = x.s, b = y.s;\n // Signs differ?\n if (a != b) {\n y.s = -b;\n return x.plus(y);\n }\n var xc = x.c.slice(), xe = x.e, yc = y.c, ye = y.e;\n // Either zero?\n if (!xc[0] || !yc[0]) {\n // y is non-zero? x is non-zero? Or both are zero.\n return yc[0] ? (y.s = -b, y) : new Big(xc[0] ? x : 0);\n }\n // Determine which is the bigger number. Prepend zeros to equalise exponents.\n if (a = xe - ye) {\n if (xlty = a < 0) {\n a = -a;\n t = xc;\n }\n else {\n ye = xe;\n t = yc;\n }\n t.reverse();\n for (b = a; b--;)\n t.push(0);\n t.reverse();\n }\n else {\n // Exponents equal. Check digit by digit.\n j = ((xlty = xc.length < yc.length) ? xc : yc).length;\n for (a = b = 0; b < j; b++) {\n if (xc[b] != yc[b]) {\n xlty = xc[b] < yc[b];\n break;\n }\n }\n }\n // x < y? Point xc to the array of the bigger number.\n if (xlty) {\n t = xc;\n xc = yc;\n yc = t;\n y.s = -y.s;\n }\n /*\n * Append zeros to xc if shorter. No need to add zeros to yc if shorter as subtraction only\n * needs to start at yc.length.\n */\n if ((b = (j = yc.length) - (i = xc.length)) > 0)\n for (; b--;)\n xc[i++] = 0;\n // Subtract yc from xc.\n for (b = i; j > a;) {\n if (xc[--j] < yc[j]) {\n for (i = j; i && !xc[--i];)\n xc[i] = 9;\n --xc[i];\n xc[j] += 10;\n }\n xc[j] -= yc[j];\n }\n // Remove trailing zeros.\n for (; xc[--b] === 0;)\n xc.pop();\n // Remove leading zeros and adjust exponent accordingly.\n for (; xc[0] === 0;) {\n xc.shift();\n --ye;\n }\n if (!xc[0]) {\n // n - n = +0\n y.s = 1;\n // Result must be zero.\n xc = [ye = 0];\n }\n y.c = xc;\n y.e = ye;\n return y;\n};\n/*\n * Return a new Big whose value is the value of this Big modulo the value of Big y.\n */\nP.mod = function (y) {\n var ygtx, Big = this.constructor, x = new Big(this), y = new Big(y), a = x.s, b = y.s;\n if (!y.c[0])\n throw Error(DIV_BY_ZERO);\n x.s = y.s = 1;\n ygtx = y.cmp(x) == 1;\n x.s = a;\n y.s = b;\n if (ygtx)\n return new Big(x);\n a = Big.DP;\n b = Big.RM;\n Big.DP = Big.RM = 0;\n x = x.div(y);\n Big.DP = a;\n Big.RM = b;\n return this.minus(x.times(y));\n};\n/*\n * Return a new Big whose value is the value of this Big plus the value of Big y.\n */\nP.plus = P.add = function (y) {\n var t, Big = this.constructor, x = new Big(this), y = new Big(y), a = x.s, b = y.s;\n // Signs differ?\n if (a != b) {\n y.s = -b;\n return x.minus(y);\n }\n var xe = x.e, xc = x.c, ye = y.e, yc = y.c;\n // Either zero? y is non-zero? x is non-zero? Or both are zero.\n if (!xc[0] || !yc[0])\n return yc[0] ? y : new Big(xc[0] ? x : a * 0);\n xc = xc.slice();\n // Prepend zeros to equalise exponents.\n // Note: reverse faster than unshifts.\n if (a = xe - ye) {\n if (a > 0) {\n ye = xe;\n t = yc;\n }\n else {\n a = -a;\n t = xc;\n }\n t.reverse();\n for (; a--;)\n t.push(0);\n t.reverse();\n }\n // Point xc to the longer array.\n if (xc.length - yc.length < 0) {\n t = yc;\n yc = xc;\n xc = t;\n }\n a = yc.length;\n // Only start adding at yc.length - 1 as the further digits of xc can be left as they are.\n for (b = 0; a; xc[a] %= 10)\n b = (xc[--a] = xc[a] + yc[a] + b) / 10 | 0;\n // No need to check for zero, as +x + +y != 0 && -x + -y != 0\n if (b) {\n xc.unshift(b);\n ++ye;\n }\n // Remove trailing zeros.\n for (a = xc.length; xc[--a] === 0;)\n xc.pop();\n y.c = xc;\n y.e = ye;\n return y;\n};\n/*\n * Return a Big whose value is the value of this Big raised to the power n.\n * If n is negative, round to a maximum of Big.DP decimal places using rounding\n * mode Big.RM.\n *\n * n {number} Integer, -MAX_POWER to MAX_POWER inclusive.\n */\nP.pow = function (n) {\n var Big = this.constructor, x = new Big(this), y = new Big(1), one = new Big(1), isneg = n < 0;\n if (n !== ~~n || n < -MAX_POWER || n > MAX_POWER)\n throw Error(INVALID + 'exponent');\n if (isneg)\n n = -n;\n for (;;) {\n if (n & 1)\n y = y.times(x);\n n >>= 1;\n if (!n)\n break;\n x = x.times(x);\n }\n return isneg ? one.div(y) : y;\n};\n/*\n * Return a new Big whose value is the value of this Big rounded using rounding mode rm\n * to a maximum of dp decimal places, or, if dp is negative, to an integer which is a\n * multiple of 10**-dp.\n * If dp is not specified, round to 0 decimal places.\n * If rm is not specified, use Big.RM.\n *\n * dp? {number} Integer, -MAX_DP to MAX_DP inclusive.\n * rm? 0, 1, 2 or 3 (ROUND_DOWN, ROUND_HALF_UP, ROUND_HALF_EVEN, ROUND_UP)\n */\nP.round = function (dp, rm) {\n var Big = this.constructor;\n if (dp === UNDEFINED)\n dp = 0;\n else if (dp !== ~~dp || dp < -MAX_DP || dp > MAX_DP)\n throw Error(INVALID_DP);\n return round(new Big(this), dp, rm === UNDEFINED ? Big.RM : rm);\n};\n/*\n * Return a new Big whose value is the square root of the value of this Big, rounded, if\n * necessary, to a maximum of Big.DP decimal places using rounding mode Big.RM.\n */\nP.sqrt = function () {\n var r, c, t, Big = this.constructor, x = new Big(this), s = x.s, e = x.e, half = new Big(0.5);\n // Zero?\n if (!x.c[0])\n return new Big(x);\n // Negative?\n if (s < 0)\n throw Error(NAME + 'No square root');\n // Estimate.\n s = Math.sqrt(x + '');\n // Math.sqrt underflow/overflow?\n // Re-estimate: pass x coefficient to Math.sqrt as integer, then adjust the result exponent.\n if (s === 0 || s === 1 / 0) {\n c = x.c.join('');\n if (!(c.length + e & 1))\n c += '0';\n s = Math.sqrt(c);\n e = ((e + 1) / 2 | 0) - (e < 0 || e & 1);\n r = new Big((s == 1 / 0 ? '1e' : (s = s.toExponential()).slice(0, s.indexOf('e') + 1)) + e);\n }\n else {\n r = new Big(s);\n }\n e = r.e + (Big.DP += 4);\n // Newton-Raphson iteration.\n do {\n t = r;\n r = half.times(t.plus(x.div(t)));\n } while (t.c.slice(0, e).join('') !== r.c.slice(0, e).join(''));\n return round(r, Big.DP -= 4, Big.RM);\n};\n/*\n * Return a new Big whose value is the value of this Big times the value of Big y.\n */\nP.times = P.mul = function (y) {\n var c, Big = this.constructor, x = new Big(this), y = new Big(y), xc = x.c, yc = y.c, a = xc.length, b = yc.length, i = x.e, j = y.e;\n // Determine sign of result.\n y.s = x.s == y.s ? 1 : -1;\n // Return signed 0 if either 0.\n if (!xc[0] || !yc[0])\n return new Big(y.s * 0);\n // Initialise exponent of result as x.e + y.e.\n y.e = i + j;\n // If array xc has fewer digits than yc, swap xc and yc, and lengths.\n if (a < b) {\n c = xc;\n xc = yc;\n yc = c;\n j = a;\n a = b;\n b = j;\n }\n // Initialise coefficient array of result with zeros.\n for (c = new Array(j = a + b); j--;)\n c[j] = 0;\n // Multiply.\n // i is initially xc.length.\n for (i = b; i--;) {\n b = 0;\n // a is yc.length.\n for (j = a + i; j > i;) {\n // Current sum of products at this digit position, plus carry.\n b = c[j] + yc[i] * xc[j - i - 1] + b;\n c[j--] = b % 10;\n // carry\n b = b / 10 | 0;\n }\n c[j] = (c[j] + b) % 10;\n }\n // Increment result exponent if there is a final carry, otherwise remove leading zero.\n if (b)\n ++y.e;\n else\n c.shift();\n // Remove trailing zeros.\n for (i = c.length; !c[--i];)\n c.pop();\n y.c = c;\n return y;\n};\n/*\n * Return a string representing the value of this Big in exponential notation to dp fixed decimal\n * places and rounded using Big.RM.\n *\n * dp? {number} Integer, 0 to MAX_DP inclusive.\n */\nP.toExponential = function (dp) {\n return stringify(this, 1, dp, dp);\n};\n/*\n * Return a string representing the value of this Big in normal notation to dp fixed decimal\n * places and rounded using Big.RM.\n *\n * dp? {number} Integer, 0 to MAX_DP inclusive.\n *\n * (-0).toFixed(0) is '0', but (-0.1).toFixed(0) is '-0'.\n * (-0).toFixed(1) is '0.0', but (-0.01).toFixed(1) is '-0.0'.\n */\nP.toFixed = function (dp) {\n return stringify(this, 2, dp, this.e + dp);\n};\n/*\n * Return a string representing the value of this Big rounded to sd significant digits using\n * Big.RM. Use exponential notation if sd is less than the number of digits necessary to represent\n * the integer part of the value in normal notation.\n *\n * sd {number} Integer, 1 to MAX_DP inclusive.\n */\nP.toPrecision = function (sd) {\n return stringify(this, 3, sd, sd - 1);\n};\n/*\n * Return a string representing the value of this Big.\n * Return exponential notation if this Big has a positive exponent equal to or greater than\n * Big.PE, or a negative exponent equal to or less than Big.NE.\n * Omit the sign for negative zero.\n */\nP.toString = function () {\n return stringify(this);\n};\n/*\n * Return a string representing the value of this Big.\n * Return exponential notation if this Big has a positive exponent equal to or greater than\n * Big.PE, or a negative exponent equal to or less than Big.NE.\n * Include the sign for negative zero.\n */\nP.valueOf = P.toJSON = function () {\n return stringify(this, 4);\n};\n// Export\nexport var Big = _Big_();\nexport default Big;\n//# sourceMappingURL=big.js.map","import Decimal from \"./lib/big\";\nexport default Decimal;\nexport const get_Zero = new Decimal(0);\nexport const get_One = new Decimal(1);\nexport const get_MinusOne = new Decimal(-1);\nexport const get_MaxValue = new Decimal(\"79228162514264337593543950335\");\nexport const get_MinValue = new Decimal(\"-79228162514264337593543950335\");\nexport function compare(x, y) {\n return x.cmp(y);\n}\nexport function equals(x, y) {\n return !x.cmp(y);\n}\nexport function abs(x) {\n return x.abs();\n}\nexport function round(x, digits = 0) {\n return x.round(digits, 2 /* ROUND_HALF_EVEN */);\n}\nexport function truncate(x) {\n return x.round(0, 0 /* ROUND_DOWN */);\n}\nexport function ceiling(x) {\n return x.round(0, x.cmp(0) >= 0 ? 3 /* ROUND_UP */ : 0 /* ROUND_DOWN */);\n}\nexport function floor(x) {\n return x.round(0, x.cmp(0) >= 0 ? 0 /* ROUND_DOWN */ : 3 /* ROUND_UP */);\n}\nexport function pow(x, n) {\n return x.pow(n);\n}\nexport function sqrt(x) {\n return x.sqrt();\n}\nexport function op_Addition(x, y) {\n return x.add(y);\n}\nexport function op_Subtraction(x, y) {\n return x.sub(y);\n}\nexport function op_Multiply(x, y) {\n return x.mul(y);\n}\nexport function op_Division(x, y) {\n return x.div(y);\n}\nexport function op_Modulus(x, y) {\n return x.mod(y);\n}\nexport function op_UnaryNegation(x) {\n const x2 = new Decimal(x);\n x2.s = -x2.s || 0;\n return x2;\n}\nexport const add = op_Addition;\nexport const subtract = op_Subtraction;\nexport const multiply = op_Multiply;\nexport const divide = op_Division;\nexport const remainder = op_Modulus;\nexport const negate = op_UnaryNegation;\nexport function toString(x) {\n return x.toString();\n}\nexport function tryParse(str) {\n try {\n return [true, new Decimal(str.trim())];\n }\n catch (_a) {\n return [false, get_Zero];\n }\n}\nexport function parse(str) {\n const [ok, value] = tryParse(str);\n if (ok) {\n return value;\n }\n else {\n throw new Error(\"Input string was not in a correct format.\");\n }\n}\nexport function toNumber(x) {\n return +x;\n}\nfunction decimalToHex(dec, bitSize) {\n const hex = new Uint8Array(bitSize / 4 | 0);\n let hexCount = 1;\n for (let d = 0; d < dec.length; d++) {\n let value = dec[d];\n for (let i = 0; i < hexCount; i++) {\n const digit = hex[i] * 10 + value | 0;\n hex[i] = digit & 0xF;\n value = digit >> 4;\n }\n if (value !== 0) {\n hex[hexCount++] = value;\n }\n }\n return hex.slice(0, hexCount); // digits in reverse order\n}\nfunction hexToDecimal(hex, bitSize) {\n const dec = new Uint8Array(bitSize * 301 / 1000 + 1 | 0);\n let decCount = 1;\n for (let d = hex.length - 1; d >= 0; d--) {\n let carry = hex[d];\n for (let i = 0; i < decCount; i++) {\n const val = dec[i] * 16 + carry | 0;\n dec[i] = (val % 10) | 0;\n carry = (val / 10) | 0;\n }\n while (carry > 0) {\n dec[decCount++] = (carry % 10) | 0;\n carry = (carry / 10) | 0;\n }\n }\n return dec.slice(0, decCount); // digits in reverse order\n}\nfunction setInt32Bits(hexDigits, bits, offset) {\n for (let i = 0; i < 8; i++) {\n hexDigits[offset + i] = (bits >> (i * 4)) & 0xF;\n }\n}\nfunction getInt32Bits(hexDigits, offset) {\n let bits = 0;\n for (let i = 0; i < 8; i++) {\n bits = bits | (hexDigits[offset + i] << (i * 4));\n }\n return bits;\n}\nexport function fromIntArray(bits) {\n return fromInts(bits[0], bits[1], bits[2], bits[3]);\n}\nexport function fromInts(low, mid, high, signExp) {\n const isNegative = signExp < 0;\n const scale = (signExp >> 16) & 0x7F;\n return fromParts(low, mid, high, isNegative, scale);\n}\nexport function fromParts(low, mid, high, isNegative, scale) {\n const bitSize = 96;\n const hexDigits = new Uint8Array(bitSize / 4);\n setInt32Bits(hexDigits, low, 0);\n setInt32Bits(hexDigits, mid, 8);\n setInt32Bits(hexDigits, high, 16);\n const decDigits = hexToDecimal(hexDigits, bitSize);\n scale = scale & 0x7F;\n const big = new Decimal(0);\n big.c = Array.from(decDigits.reverse());\n big.e = decDigits.length - scale - 1;\n big.s = isNegative ? -1 : 1;\n const d = new Decimal(big);\n return d;\n}\nexport function getBits(d) {\n const bitSize = 96;\n const decDigits = Uint8Array.from(d.c);\n const hexDigits = decimalToHex(decDigits, bitSize);\n const low = getInt32Bits(hexDigits, 0);\n const mid = getInt32Bits(hexDigits, 8);\n const high = getInt32Bits(hexDigits, 16);\n const decStr = d.toString();\n const dotPos = decStr.indexOf(\".\");\n const scale = dotPos < 0 ? 0 : decStr.length - dotPos - 1;\n const signExp = ((scale & 0x7F) << 16) | (d.s < 0 ? 0x80000000 : 0);\n return [low, mid, high, signExp];\n}\nexport function makeRangeStepFunction(step, last) {\n const stepComparedWithZero = step.cmp(get_Zero);\n if (stepComparedWithZero === 0) {\n throw new Error(\"The step of a range cannot be zero\");\n }\n const stepGreaterThanZero = stepComparedWithZero > 0;\n return (x) => {\n const comparedWithLast = x.cmp(last);\n if ((stepGreaterThanZero && comparedWithLast <= 0)\n || (!stepGreaterThanZero && comparedWithLast >= 0)) {\n return [x, op_Addition(x, step)];\n }\n else {\n return null;\n }\n };\n}\n//# sourceMappingURL=Decimal.js.map","export function create(pattern, options = 0) {\n // Supported RegexOptions\n // * IgnoreCase: 0x0001\n // * Multiline: 0x0002\n // * Singleline: 0x0010\n // * ECMAScript: 0x0100 (ignored)\n if ((options & ~(1 ^ 2 ^ 16 ^ 256)) !== 0) {\n throw new Error(\"RegexOptions only supports: IgnoreCase, Multiline, Singleline and ECMAScript\");\n }\n let flags = \"g\";\n flags += options & 1 ? \"i\" : \"\"; // 0x0001 RegexOptions.IgnoreCase\n flags += options & 2 ? \"m\" : \"\";\n flags += options & 16 ? \"s\" : \"\";\n return new RegExp(pattern, flags);\n}\n// From http://stackoverflow.com/questions/3446170/escape-string-for-use-in-javascript-regex\nexport function escape(str) {\n return str.replace(/[\\-\\[\\]\\/\\{\\}\\(\\)\\*\\+\\?\\.\\\\\\^\\$\\|]/g, \"\\\\$&\");\n}\nexport function unescape(str) {\n return str.replace(/\\\\([\\-\\[\\]\\/\\{\\}\\(\\)\\*\\+\\?\\.\\\\\\^\\$\\|])/g, \"$1\");\n}\nexport function isMatch(str, pattern, options = 0) {\n let reg;\n reg = str instanceof RegExp\n ? (reg = str, str = pattern, reg.lastIndex = options, reg)\n : reg = create(pattern, options);\n return reg.test(str);\n}\nexport function match(str, pattern, options = 0) {\n let reg;\n reg = str instanceof RegExp\n ? (reg = str, str = pattern, reg.lastIndex = options, reg)\n : reg = create(pattern, options);\n return reg.exec(str);\n}\nexport function matches(str, pattern, options = 0) {\n let reg;\n reg = str instanceof RegExp\n ? (reg = str, str = pattern, reg.lastIndex = options, reg)\n : reg = create(pattern, options);\n if (!reg.global) {\n throw new Error(\"Non-global RegExp\"); // Prevent infinite loop\n }\n let m = reg.exec(str);\n const matches = [];\n while (m !== null) {\n matches.push(m);\n m = reg.exec(str);\n }\n return matches;\n}\nexport function options(reg) {\n let options = 256; // ECMAScript\n options |= reg.ignoreCase ? 1 : 0;\n options |= reg.multiline ? 2 : 0;\n return options;\n}\nexport function replace(reg, input, replacement, limit, offset = 0) {\n function replacer() {\n let res = arguments[0];\n if (limit) {\n limit--;\n const match = [];\n const len = arguments.length;\n for (let i = 0; i < len - 2; i++) {\n match.push(arguments[i]);\n }\n match.index = arguments[len - 2];\n match.input = arguments[len - 1];\n res = replacement(match);\n }\n return res;\n }\n if (typeof reg === \"string\") {\n const tmp = reg;\n reg = create(input, limit !== null && limit !== void 0 ? limit : 0);\n input = tmp;\n limit = undefined;\n }\n if (typeof replacement === \"function\") {\n limit = limit == null ? -1 : limit;\n return input.substring(0, offset) + input.substring(offset).replace(reg, replacer);\n }\n else {\n // $0 doesn't work with JS regex, see #1155\n replacement = replacement.replace(/\\$0/g, (_s) => \"$&\");\n if (limit != null) {\n let m;\n const sub1 = input.substring(offset);\n const _matches = matches(reg, sub1);\n const sub2 = matches.length > limit ? (m = _matches[limit - 1], sub1.substring(0, m.index + m[0].length)) : sub1;\n return input.substring(0, offset) + sub2.replace(reg, replacement)\n + input.substring(offset + sub2.length);\n }\n else {\n return input.replace(reg, replacement);\n }\n }\n}\nexport function split(reg, input, limit, offset = 0) {\n if (typeof reg === \"string\") {\n const tmp = reg;\n reg = create(input, limit !== null && limit !== void 0 ? limit : 0);\n input = tmp;\n limit = undefined;\n }\n input = input.substring(offset);\n return input.split(reg, limit);\n}\n//# sourceMappingURL=RegExp.js.map","import { toString as dateToString } from \"./Date\";\nimport Decimal from \"./Decimal\";\nimport Long, * as _Long from \"./Long\";\nimport { escape } from \"./RegExp\";\nconst fsFormatRegExp = /(^|[^%])%([0+\\- ]*)(\\d+)?(?:\\.(\\d+))?(\\w)/;\nconst formatRegExp = /\\{(\\d+)(,-?\\d+)?(?:\\:([a-zA-Z])(\\d{0,2})|\\:(.+?))?\\}/g;\n// RFC 4122 compliant. From https://stackoverflow.com/a/13653180/3922220\n// const guidRegex = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/;\n// Relax GUID parsing, see #1637\nconst guidRegex = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/;\n// These are used for formatting and only take longs and decimals into account (no bigint)\nfunction isNumeric(x) {\n return typeof x === \"number\" || x instanceof Long || x instanceof Decimal;\n}\nfunction isLessThan(x, y) {\n if (x instanceof Long) {\n return _Long.compare(x, y) < 0;\n }\n else if (x instanceof Decimal) {\n return x.cmp(y) < 0;\n }\n else {\n return x < y;\n }\n}\nfunction multiply(x, y) {\n if (x instanceof Long) {\n return _Long.op_Multiply(x, y);\n }\n else if (x instanceof Decimal) {\n return x.mul(y);\n }\n else {\n return x * y;\n }\n}\nfunction toFixed(x, dp) {\n if (x instanceof Long) {\n return String(x) + (0).toFixed(dp).substr(1);\n }\n else {\n return x.toFixed(dp);\n }\n}\nfunction toPrecision(x, sd) {\n if (x instanceof Long) {\n return String(x) + (0).toPrecision(sd).substr(1);\n }\n else {\n return x.toPrecision(sd);\n }\n}\nfunction toExponential(x, dp) {\n if (x instanceof Long) {\n return String(x) + (0).toExponential(dp).substr(1);\n }\n else {\n return x.toExponential(dp);\n }\n}\nfunction cmp(x, y, ic) {\n function isIgnoreCase(i) {\n return i === true ||\n i === 1 /* CurrentCultureIgnoreCase */ ||\n i === 3 /* InvariantCultureIgnoreCase */ ||\n i === 5 /* OrdinalIgnoreCase */;\n }\n function isOrdinal(i) {\n return i === 4 /* Ordinal */ ||\n i === 5 /* OrdinalIgnoreCase */;\n }\n if (x == null) {\n return y == null ? 0 : -1;\n }\n if (y == null) {\n return 1;\n } // everything is bigger than null\n if (isOrdinal(ic)) {\n if (isIgnoreCase(ic)) {\n x = x.toLowerCase();\n y = y.toLowerCase();\n }\n return (x === y) ? 0 : (x < y ? -1 : 1);\n }\n else {\n if (isIgnoreCase(ic)) {\n x = x.toLocaleLowerCase();\n y = y.toLocaleLowerCase();\n }\n return x.localeCompare(y);\n }\n}\nexport function compare(...args) {\n switch (args.length) {\n case 2: return cmp(args[0], args[1], false);\n case 3: return cmp(args[0], args[1], args[2]);\n case 4: return cmp(args[0], args[1], args[2] === true);\n case 5: return cmp(args[0].substr(args[1], args[4]), args[2].substr(args[3], args[4]), false);\n case 6: return cmp(args[0].substr(args[1], args[4]), args[2].substr(args[3], args[4]), args[5]);\n case 7: return cmp(args[0].substr(args[1], args[4]), args[2].substr(args[3], args[4]), args[5] === true);\n default: throw new Error(\"String.compare: Unsupported number of parameters\");\n }\n}\nexport function compareOrdinal(x, y) {\n return cmp(x, y, 4 /* Ordinal */);\n}\nexport function compareTo(x, y) {\n return cmp(x, y, 0 /* CurrentCulture */);\n}\nexport function startsWith(str, pattern, ic) {\n if (str.length >= pattern.length) {\n return cmp(str.substr(0, pattern.length), pattern, ic) === 0;\n }\n return false;\n}\nexport function indexOfAny(str, anyOf, ...args) {\n if (str == null || str === \"\") {\n return -1;\n }\n const startIndex = (args.length > 0) ? args[0] : 0;\n if (startIndex < 0) {\n throw new Error(\"Start index cannot be negative\");\n }\n const length = (args.length > 1) ? args[1] : str.length - startIndex;\n if (length < 0) {\n throw new Error(\"Length cannot be negative\");\n }\n if (length > str.length - startIndex) {\n throw new Error(\"Invalid startIndex and length\");\n }\n str = str.substr(startIndex, length);\n for (const c of anyOf) {\n const index = str.indexOf(c);\n if (index > -1) {\n return index + startIndex;\n }\n }\n return -1;\n}\nfunction toHex(x) {\n if (x instanceof Long) {\n return _Long.toString(x.unsigned ? x : _Long.fromBytes(_Long.toBytes(x), true), 16);\n }\n else {\n return (Number(x) >>> 0).toString(16);\n }\n}\nexport function printf(input) {\n return {\n input,\n cont: fsFormat(input),\n };\n}\nexport function toConsole(arg) {\n // Don't remove the lambda here, see #1357\n return arg.cont((x) => { console.log(x); });\n}\nexport function toConsoleError(arg) {\n return arg.cont((x) => { console.error(x); });\n}\nexport function toText(arg) {\n return arg.cont((x) => x);\n}\nexport function toFail(arg) {\n return arg.cont((x) => { throw new Error(x); });\n}\nfunction formatOnce(str2, rep) {\n return str2.replace(fsFormatRegExp, (_, prefix, flags, padLength, precision, format) => {\n let sign = \"\";\n if (isNumeric(rep)) {\n if (format.toLowerCase() !== \"x\") {\n if (isLessThan(rep, 0)) {\n rep = multiply(rep, -1);\n sign = \"-\";\n }\n else {\n if (flags.indexOf(\" \") >= 0) {\n sign = \" \";\n }\n else if (flags.indexOf(\"+\") >= 0) {\n sign = \"+\";\n }\n }\n }\n precision = precision == null ? null : parseInt(precision, 10);\n switch (format) {\n case \"f\":\n case \"F\":\n precision = precision != null ? precision : 6;\n rep = toFixed(rep, precision);\n break;\n case \"g\":\n case \"G\":\n rep = precision != null ? toPrecision(rep, precision) : toPrecision(rep);\n break;\n case \"e\":\n case \"E\":\n rep = precision != null ? toExponential(rep, precision) : toExponential(rep);\n break;\n case \"x\":\n rep = toHex(rep);\n break;\n case \"X\":\n rep = toHex(rep).toUpperCase();\n break;\n default: // AOid\n rep = String(rep);\n break;\n }\n }\n padLength = parseInt(padLength, 10);\n if (!isNaN(padLength)) {\n const zeroFlag = flags.indexOf(\"0\") >= 0; // Use '0' for left padding\n const minusFlag = flags.indexOf(\"-\") >= 0; // Right padding\n const ch = minusFlag || !zeroFlag ? \" \" : \"0\";\n if (ch === \"0\") {\n rep = padLeft(rep, padLength - sign.length, ch, minusFlag);\n rep = sign + rep;\n }\n else {\n rep = padLeft(sign + rep, padLength, ch, minusFlag);\n }\n }\n else {\n rep = sign + rep;\n }\n const once = prefix + rep;\n return once.replace(/%/g, \"%%\");\n });\n}\nfunction createPrinter(str, cont) {\n return (...args) => {\n // Make a copy as the function may be used several times\n let strCopy = str;\n for (const arg of args) {\n strCopy = formatOnce(strCopy, arg);\n }\n return fsFormatRegExp.test(strCopy)\n ? createPrinter(strCopy, cont)\n : cont(strCopy.replace(/%%/g, \"%\"));\n };\n}\nexport function fsFormat(str) {\n return (cont) => {\n return fsFormatRegExp.test(str)\n ? createPrinter(str, cont)\n : cont(str);\n };\n}\nexport function format(str, ...args) {\n if (typeof str === \"object\" && args.length > 0) {\n // Called with culture info\n str = args[0];\n args.shift();\n }\n return str.replace(formatRegExp, (_, idx, padLength, format, precision, pattern) => {\n let rep = args[idx];\n if (isNumeric(rep)) {\n precision = precision == null ? null : parseInt(precision, 10);\n switch (format) {\n case \"f\":\n case \"F\":\n precision = precision != null ? precision : 2;\n rep = toFixed(rep, precision);\n break;\n case \"g\":\n case \"G\":\n rep = precision != null ? toPrecision(rep, precision) : toPrecision(rep);\n break;\n case \"e\":\n case \"E\":\n rep = precision != null ? toExponential(rep, precision) : toExponential(rep);\n break;\n case \"p\":\n case \"P\":\n precision = precision != null ? precision : 2;\n rep = toFixed(multiply(rep, 100), precision) + \" %\";\n break;\n case \"d\":\n case \"D\":\n rep = precision != null ? padLeft(String(rep), precision, \"0\") : String(rep);\n break;\n case \"x\":\n case \"X\":\n rep = precision != null ? padLeft(toHex(rep), precision, \"0\") : toHex(rep);\n if (format === \"X\") {\n rep = rep.toUpperCase();\n }\n break;\n default:\n if (pattern) {\n let sign = \"\";\n rep = pattern.replace(/(0+)(\\.0+)?/, (_, intPart, decimalPart) => {\n if (isLessThan(rep, 0)) {\n rep = multiply(rep, -1);\n sign = \"-\";\n }\n rep = toFixed(rep, decimalPart != null ? decimalPart.length - 1 : 0);\n return padLeft(rep, (intPart || \"\").length - sign.length + (decimalPart != null ? decimalPart.length : 0), \"0\");\n });\n rep = sign + rep;\n }\n }\n }\n else if (rep instanceof Date) {\n rep = dateToString(rep, pattern || format);\n }\n padLength = parseInt((padLength || \" \").substring(1), 10);\n if (!isNaN(padLength)) {\n rep = padLeft(String(rep), Math.abs(padLength), \" \", padLength < 0);\n }\n return rep;\n });\n}\nexport function endsWith(str, search) {\n const idx = str.lastIndexOf(search);\n return idx >= 0 && idx === str.length - search.length;\n}\nexport function initialize(n, f) {\n if (n < 0) {\n throw new Error(\"String length must be non-negative\");\n }\n const xs = new Array(n);\n for (let i = 0; i < n; i++) {\n xs[i] = f(i);\n }\n return xs.join(\"\");\n}\nexport function insert(str, startIndex, value) {\n if (startIndex < 0 || startIndex > str.length) {\n throw new Error(\"startIndex is negative or greater than the length of this instance.\");\n }\n return str.substring(0, startIndex) + value + str.substring(startIndex);\n}\nexport function isNullOrEmpty(str) {\n return typeof str !== \"string\" || str.length === 0;\n}\nexport function isNullOrWhiteSpace(str) {\n return typeof str !== \"string\" || /^\\s*$/.test(str);\n}\nexport function concat(...xs) {\n return xs.map((x) => String(x)).join(\"\");\n}\nexport function join(delimiter, xs) {\n if (Array.isArray(xs)) {\n return xs.join(delimiter);\n }\n else {\n return Array.from(xs).join(delimiter);\n }\n}\nexport function joinWithIndices(delimiter, xs, startIndex, count) {\n const endIndexPlusOne = startIndex + count;\n if (endIndexPlusOne > xs.length) {\n throw new Error(\"Index and count must refer to a location within the buffer.\");\n }\n return xs.slice(startIndex, endIndexPlusOne).join(delimiter);\n}\n/** Validates UUID as specified in RFC4122 (versions 1-5). Trims braces. */\nexport function validateGuid(str, doNotThrow) {\n const trimmedAndLowered = trim(str, \"{\", \"}\").toLowerCase();\n if (guidRegex.test(trimmedAndLowered)) {\n return doNotThrow ? [true, trimmedAndLowered] : trimmedAndLowered;\n }\n else if (doNotThrow) {\n return [false, \"00000000-0000-0000-0000-000000000000\"];\n }\n throw new Error(\"Guid should contain 32 digits with 4 dashes: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx\");\n}\n// From https://gist.github.com/LeverOne/1308368\nexport function newGuid() {\n let b = \"\";\n for (let a = 0; a++ < 36;) {\n b += a * 51 & 52\n ? (a ^ 15 ? 8 ^ Math.random() * (a ^ 20 ? 16 : 4) : 4).toString(16)\n : \"-\";\n }\n return b;\n}\n// Maps for number <-> hex string conversion\nlet _convertMapsInitialized = false;\nlet _byteToHex;\nlet _hexToByte;\nfunction initConvertMaps() {\n _byteToHex = new Array(256);\n _hexToByte = {};\n for (let i = 0; i < 256; i++) {\n _byteToHex[i] = (i + 0x100).toString(16).substr(1);\n _hexToByte[_byteToHex[i]] = i;\n }\n _convertMapsInitialized = true;\n}\n/** Parse a UUID into it's component bytes */\n// Adapted from https://github.com/zefferus/uuid-parse\nexport function guidToArray(s) {\n if (!_convertMapsInitialized) {\n initConvertMaps();\n }\n let i = 0;\n const buf = new Uint8Array(16);\n s.toLowerCase().replace(/[0-9a-f]{2}/g, ((oct) => {\n switch (i) {\n // .NET saves first three byte groups with different endianness\n // See https://stackoverflow.com/a/16722909/3922220\n case 0:\n case 1:\n case 2:\n case 3:\n buf[3 - i++] = _hexToByte[oct];\n break;\n case 4:\n case 5:\n buf[9 - i++] = _hexToByte[oct];\n break;\n case 6:\n case 7:\n buf[13 - i++] = _hexToByte[oct];\n break;\n case 8:\n case 9:\n case 10:\n case 11:\n case 12:\n case 13:\n case 14:\n case 15:\n buf[i++] = _hexToByte[oct];\n break;\n }\n }));\n // Zero out remaining bytes if string was short\n while (i < 16) {\n buf[i++] = 0;\n }\n return buf;\n}\n/** Convert UUID byte array into a string */\nexport function arrayToGuid(buf) {\n if (buf.length !== 16) {\n throw new Error(\"Byte array for GUID must be exactly 16 bytes long\");\n }\n if (!_convertMapsInitialized) {\n initConvertMaps();\n }\n const guid = _byteToHex[buf[3]] + _byteToHex[buf[2]] +\n _byteToHex[buf[1]] + _byteToHex[buf[0]] + \"-\" +\n _byteToHex[buf[5]] + _byteToHex[buf[4]] + \"-\" +\n _byteToHex[buf[7]] + _byteToHex[buf[6]] + \"-\" +\n _byteToHex[buf[8]] + _byteToHex[buf[9]] + \"-\" +\n _byteToHex[buf[10]] + _byteToHex[buf[11]] +\n _byteToHex[buf[12]] + _byteToHex[buf[13]] +\n _byteToHex[buf[14]] + _byteToHex[buf[15]];\n return guid;\n}\nfunction notSupported(name) {\n throw new Error(\"The environment doesn't support '\" + name + \"', please use a polyfill.\");\n}\nexport function toBase64String(inArray) {\n let str = \"\";\n for (let i = 0; i < inArray.length; i++) {\n str += String.fromCharCode(inArray[i]);\n }\n return typeof btoa === \"function\" ? btoa(str) : notSupported(\"btoa\");\n}\nexport function fromBase64String(b64Encoded) {\n const binary = typeof atob === \"function\" ? atob(b64Encoded) : notSupported(\"atob\");\n const bytes = new Uint8Array(binary.length);\n for (let i = 0; i < binary.length; i++) {\n bytes[i] = binary.charCodeAt(i);\n }\n return bytes;\n}\nexport function padLeft(str, len, ch, isRight) {\n ch = ch || \" \";\n len = len - str.length;\n for (let i = 0; i < len; i++) {\n str = isRight ? str + ch : ch + str;\n }\n return str;\n}\nexport function padRight(str, len, ch) {\n return padLeft(str, len, ch, true);\n}\nexport function remove(str, startIndex, count) {\n if (startIndex >= str.length) {\n throw new Error(\"startIndex must be less than length of string\");\n }\n if (typeof count === \"number\" && (startIndex + count) > str.length) {\n throw new Error(\"Index and count must refer to a location within the string.\");\n }\n return str.slice(0, startIndex) + (typeof count === \"number\" ? str.substr(startIndex + count) : \"\");\n}\nexport function replace(str, search, replace) {\n return str.replace(new RegExp(escape(search), \"g\"), replace);\n}\nexport function replicate(n, x) {\n return initialize(n, () => x);\n}\nexport function getCharAtIndex(input, index) {\n if (index < 0 || index >= input.length) {\n throw new Error(\"Index was outside the bounds of the array.\");\n }\n return input[index];\n}\nexport function split(str, splitters, count, removeEmpty) {\n count = typeof count === \"number\" ? count : undefined;\n removeEmpty = typeof removeEmpty === \"number\" ? removeEmpty : undefined;\n if (count && count < 0) {\n throw new Error(\"Count cannot be less than zero\");\n }\n if (count === 0) {\n return [];\n }\n if (!Array.isArray(splitters)) {\n if (removeEmpty === 0) {\n return str.split(splitters, count);\n }\n const len = arguments.length;\n splitters = Array(len - 1);\n for (let key = 1; key < len; key++) {\n splitters[key - 1] = arguments[key];\n }\n }\n splitters = splitters.map((x) => escape(x));\n splitters = splitters.length > 0 ? splitters : [\" \"];\n let i = 0;\n const splits = [];\n const reg = new RegExp(splitters.join(\"|\"), \"g\");\n while (count == null || count > 1) {\n const m = reg.exec(str);\n if (m === null) {\n break;\n }\n if (!removeEmpty || (m.index - i) > 0) {\n count = count != null ? count - 1 : count;\n splits.push(str.substring(i, m.index));\n }\n i = reg.lastIndex;\n }\n if (!removeEmpty || (str.length - i) > 0) {\n splits.push(str.substring(i));\n }\n return splits;\n}\nexport function trim(str, ...chars) {\n if (chars.length === 0) {\n return str.trim();\n }\n const pattern = \"[\" + escape(chars.join(\"\")) + \"]+\";\n return str.replace(new RegExp(\"^\" + pattern), \"\").replace(new RegExp(pattern + \"$\"), \"\");\n}\nexport function trimStart(str, ...chars) {\n return chars.length === 0\n ? str.trimStart()\n : str.replace(new RegExp(\"^[\" + escape(chars.join(\"\")) + \"]+\"), \"\");\n}\nexport function trimEnd(str, ...chars) {\n return chars.length === 0\n ? str.trimEnd()\n : str.replace(new RegExp(\"[\" + escape(chars.join(\"\")) + \"]+$\"), \"\");\n}\nexport function filter(pred, x) {\n return x.split(\"\").filter((c) => pred(c)).join(\"\");\n}\nexport function substring(str, startIndex, length) {\n if ((startIndex + (length || 0) > str.length)) {\n throw new Error(\"Invalid startIndex and/or length\");\n }\n return length != null ? str.substr(startIndex, length) : str.substr(startIndex);\n}\n//# sourceMappingURL=String.js.map","import { makeRangeStepFunction as makeDecimalRangeStepFunction } from \"./Decimal\";\nimport { makeRangeStepFunction as makeLongRangeStepFunction } from \"./Long\";\nimport { some, value } from \"./Option\";\nimport { compare, equals } from \"./Util\";\nexport class Enumerator {\n constructor(iter) {\n this.iter = iter;\n }\n MoveNext() {\n const cur = this.iter.next();\n this.current = cur.value;\n return !cur.done;\n }\n get Current() {\n return this.current;\n }\n Reset() {\n throw new Error(\"JS iterators cannot be reset\");\n }\n Dispose() {\n return;\n }\n}\nexport function getEnumerator(o) {\n return new Enumerator(o[Symbol.iterator]());\n}\nexport function toIterator(en) {\n return {\n next() {\n return en.MoveNext()\n ? { done: false, value: en.Current }\n : { done: true, value: null };\n },\n };\n}\n// export function toIterable<T>(en: IEnumerable<T>): Iterable<T> {\n// return {\n// [Symbol.iterator]() {\n// return toIterator(en.GetEnumerator());\n// },\n// };\n// }\nfunction __failIfNone(res) {\n if (res == null) {\n throw new Error(\"Seq did not contain any matching element\");\n }\n return value(res);\n}\nfunction makeSeq(f) {\n const seq = {\n [Symbol.iterator]: f,\n toString: () => \"seq [\" + Array.from(seq).join(\"; \") + \"]\",\n };\n return seq;\n}\nexport function ofArray(xs) {\n return delay(() => unfold((i) => i != null && i < xs.length ? [xs[i], i + 1] : null, 0));\n}\nexport function allPairs(xs, ys) {\n let firstEl = true;\n const ysCache = [];\n return collect((x) => {\n if (firstEl) {\n firstEl = false;\n return map((y) => {\n ysCache.push(y);\n return [x, y];\n }, ys);\n }\n else {\n return ysCache.map((y) => [x, y]);\n // return map(function (i) {\n // return [x, ysCache[i]];\n // }, rangeNumber(0, 1, ysCache.length - 1));\n }\n }, xs);\n}\nexport function append(xs, ys) {\n return delay(() => {\n let firstDone = false;\n const i = xs[Symbol.iterator]();\n let iters = [i, null];\n return unfold(() => {\n var _a, _b;\n let cur;\n if (!firstDone) {\n cur = (_a = iters[0]) === null || _a === void 0 ? void 0 : _a.next();\n if (cur != null && !cur.done) {\n return [cur.value, iters];\n }\n else {\n firstDone = true;\n iters = [null, ys[Symbol.iterator]()];\n }\n }\n cur = (_b = iters[1]) === null || _b === void 0 ? void 0 : _b.next();\n return cur != null && !cur.done ? [cur.value, iters] : null;\n }, iters);\n });\n}\nexport function average(xs, averager) {\n let count = 0;\n const total = fold((acc, x) => {\n count++;\n return averager.Add(acc, x);\n }, averager.GetZero(), xs);\n return averager.DivideByInt(total, count);\n}\nexport function averageBy(f, xs, averager) {\n let count = 0;\n const total = fold((acc, x) => {\n count++;\n return averager.Add(acc, f(x));\n }, averager.GetZero(), xs);\n return averager.DivideByInt(total, count);\n}\nexport function concat(xs) {\n return delay(() => {\n const iter = xs[Symbol.iterator]();\n let output = { value: null };\n return unfold((innerIter) => {\n let hasFinished = false;\n while (!hasFinished) {\n if (innerIter == null) {\n const cur = iter.next();\n if (!cur.done) {\n innerIter = cur.value[Symbol.iterator]();\n }\n else {\n hasFinished = true;\n }\n }\n else {\n const cur = innerIter.next();\n if (!cur.done) {\n output = { value: cur.value };\n hasFinished = true;\n }\n else {\n innerIter = null;\n }\n }\n }\n return innerIter != null && output != null ? [output.value, innerIter] : null;\n }, null);\n });\n}\nexport function collect(f, xs) {\n return concat(map(f, xs));\n}\nexport function choose(f, xs) {\n return delay(() => unfold((iter) => {\n let cur = iter.next();\n while (!cur.done) {\n const y = f(cur.value);\n if (y != null) {\n return [value(y), iter];\n }\n cur = iter.next();\n }\n return null;\n }, xs[Symbol.iterator]()));\n}\nexport function compareWith(f, xs, ys) {\n const nonZero = tryFind((i) => i !== 0, map2((x, y) => f(x, y), xs, ys));\n return nonZero != null ? value(nonZero) : length(xs) - length(ys);\n}\nexport function delay(f) {\n return makeSeq(() => f()[Symbol.iterator]());\n}\nexport function empty() {\n return unfold(() => null, undefined);\n}\nexport function enumerateFromFunctions(factory, moveNext, current) {\n return delay(() => unfold((e) => moveNext(e) ? [current(e), e] : null, factory()));\n}\nexport function enumerateWhile(cond, xs) {\n return concat(unfold(() => cond() ? [xs, true] : null, undefined));\n}\nexport function enumerateThenFinally(xs, finalFn) {\n return delay(() => {\n let iter;\n try {\n iter = xs[Symbol.iterator]();\n }\n catch (err) {\n return empty();\n }\n finally {\n finalFn();\n }\n return unfold((it) => {\n try {\n const cur = it.next();\n return !cur.done ? [cur.value, it] : null;\n }\n catch (err) {\n return null;\n }\n finally {\n finalFn();\n }\n }, iter);\n });\n}\nexport function enumerateUsing(disp, work) {\n let isDisposed = false;\n const disposeOnce = () => {\n if (!isDisposed) {\n isDisposed = true;\n disp.Dispose();\n }\n };\n try {\n return enumerateThenFinally(work(disp), disposeOnce);\n }\n catch (err) {\n return void 0;\n }\n finally {\n disposeOnce();\n }\n}\nexport function exactlyOne(xs) {\n const iter = xs[Symbol.iterator]();\n const fst = iter.next();\n if (fst.done) {\n throw new Error(\"Seq was empty\");\n }\n const snd = iter.next();\n if (!snd.done) {\n throw new Error(\"Seq had multiple items\");\n }\n return fst.value;\n}\nexport function except(itemsToExclude, source) {\n const exclusionItems = Array.from(itemsToExclude);\n const testIsNotInExclusionItems = (element) => !exclusionItems.some((excludedItem) => equals(excludedItem, element));\n return filter(testIsNotInExclusionItems, source);\n}\nexport function exists(f, xs) {\n let cur;\n for (const iter = xs[Symbol.iterator]();;) {\n cur = iter.next();\n if (cur.done) {\n break;\n }\n if (f(cur.value)) {\n return true;\n }\n }\n return false;\n}\nexport function exists2(f, xs, ys) {\n let cur1;\n let cur2;\n for (const iter1 = xs[Symbol.iterator](), iter2 = ys[Symbol.iterator]();;) {\n cur1 = iter1.next();\n cur2 = iter2.next();\n if (cur1.done || cur2.done) {\n break;\n }\n if (f(cur1.value, cur2.value)) {\n return true;\n }\n }\n return false;\n}\nexport function forAll(f, xs) {\n return !exists((x) => !f(x), xs);\n}\nexport function forAll2(f, xs, ys) {\n return !exists2((x, y) => !f(x, y), xs, ys);\n}\nexport function contains(i, xs) {\n return exists((x) => equals(x, i), xs);\n}\nexport function filter(f, xs) {\n return delay(() => unfold((iter) => {\n let cur = iter.next();\n while (!cur.done) {\n if (f(cur.value)) {\n return [cur.value, iter];\n }\n cur = iter.next();\n }\n return null;\n }, xs[Symbol.iterator]()));\n}\nexport function where(f, xs) {\n return filter(f, xs);\n}\nexport function fold(f, acc, xs) {\n if (Array.isArray(xs) || ArrayBuffer.isView(xs)) {\n return xs.reduce(f, acc);\n }\n else {\n let cur;\n for (let i = 0, iter = xs[Symbol.iterator]();; i++) {\n cur = iter.next();\n if (cur.done) {\n break;\n }\n acc = f(acc, cur.value, i);\n }\n return acc;\n }\n}\nexport function foldBack(f, xs, acc) {\n const arr = Array.isArray(xs) || ArrayBuffer.isView(xs) ? xs : Array.from(xs);\n for (let i = arr.length - 1; i >= 0; i--) {\n acc = f(arr[i], acc, i);\n }\n return acc;\n}\nexport function fold2(f, acc, xs, ys) {\n const iter1 = xs[Symbol.iterator]();\n const iter2 = ys[Symbol.iterator]();\n let cur1;\n let cur2;\n for (let i = 0;; i++) {\n cur1 = iter1.next();\n cur2 = iter2.next();\n if (cur1.done || cur2.done) {\n break;\n }\n acc = f(acc, cur1.value, cur2.value, i);\n }\n return acc;\n}\nexport function foldBack2(f, xs, ys, acc) {\n const ar1 = Array.isArray(xs) || ArrayBuffer.isView(xs) ? xs : Array.from(xs);\n const ar2 = Array.isArray(ys) || ArrayBuffer.isView(ys) ? ys : Array.from(ys);\n for (let i = ar1.length - 1; i >= 0; i--) {\n acc = f(ar1[i], ar2[i], acc, i);\n }\n return acc;\n}\nexport function tryHead(xs) {\n const iter = xs[Symbol.iterator]();\n const cur = iter.next();\n return cur.done ? null : some(cur.value);\n}\nexport function head(xs) {\n return __failIfNone(tryHead(xs));\n}\nexport function initialize(n, f) {\n return delay(() => unfold((i) => i < n ? [f(i), i + 1] : null, 0));\n}\nexport function initializeInfinite(f) {\n return delay(() => unfold((i) => [f(i), i + 1], 0));\n}\nexport function tryItem(i, xs) {\n if (i < 0) {\n return null;\n }\n if (Array.isArray(xs) || ArrayBuffer.isView(xs)) {\n return i < xs.length ? some(xs[i]) : null;\n }\n for (let j = 0, iter = xs[Symbol.iterator]();; j++) {\n const cur = iter.next();\n if (cur.done) {\n break;\n }\n if (j === i) {\n return some(cur.value);\n }\n }\n return null;\n}\nexport function item(i, xs) {\n return __failIfNone(tryItem(i, xs));\n}\nexport function iterate(f, xs) {\n fold((_, x) => (f(x), null), null, xs);\n}\nexport function iterate2(f, xs, ys) {\n fold2((_, x, y) => (f(x, y), null), null, xs, ys);\n}\nexport function iterateIndexed(f, xs) {\n fold((_, x, i) => (f(i !== null && i !== void 0 ? i : 0, x), null), null, xs);\n}\nexport function iterateIndexed2(f, xs, ys) {\n fold2((_, x, y, i) => (f(i !== null && i !== void 0 ? i : 0, x, y), null), null, xs, ys);\n}\nexport function isEmpty(xs) {\n const i = xs[Symbol.iterator]();\n return i.next().done;\n}\nexport function tryLast(xs) {\n return isEmpty(xs) ? null : some(reduce((_, x) => x, xs));\n}\nexport function last(xs) {\n return __failIfNone(tryLast(xs));\n}\nexport function length(xs) {\n return Array.isArray(xs) || ArrayBuffer.isView(xs)\n ? xs.length\n : fold((acc, _x) => acc + 1, 0, xs);\n}\nexport function map(f, xs) {\n return delay(() => unfold((iter) => {\n const cur = iter.next();\n return !cur.done ? [f(cur.value), iter] : null;\n }, xs[Symbol.iterator]()));\n}\nexport function mapIndexed(f, xs) {\n return delay(() => {\n let i = 0;\n return unfold((iter) => {\n const cur = iter.next();\n return !cur.done ? [f(i++, cur.value), iter] : null;\n }, xs[Symbol.iterator]());\n });\n}\nexport function indexed(xs) {\n return mapIndexed((i, x) => [i, x], xs);\n}\nexport function map2(f, xs, ys) {\n return delay(() => {\n const iter1 = xs[Symbol.iterator]();\n const iter2 = ys[Symbol.iterator]();\n return unfold(() => {\n const cur1 = iter1.next();\n const cur2 = iter2.next();\n return !cur1.done && !cur2.done ? [f(cur1.value, cur2.value), null] : null;\n }, undefined);\n });\n}\nexport function mapIndexed2(f, xs, ys) {\n return delay(() => {\n let i = 0;\n const iter1 = xs[Symbol.iterator]();\n const iter2 = ys[Symbol.iterator]();\n return unfold(() => {\n const cur1 = iter1.next();\n const cur2 = iter2.next();\n return !cur1.done && !cur2.done ? [f(i++, cur1.value, cur2.value), null] : null;\n }, undefined);\n });\n}\nexport function map3(f, xs, ys, zs) {\n return delay(() => {\n const iter1 = xs[Symbol.iterator]();\n const iter2 = ys[Symbol.iterator]();\n const iter3 = zs[Symbol.iterator]();\n return unfold(() => {\n const cur1 = iter1.next();\n const cur2 = iter2.next();\n const cur3 = iter3.next();\n return !cur1.done && !cur2.done && !cur3.done ? [f(cur1.value, cur2.value, cur3.value), null] : null;\n }, undefined);\n });\n}\nexport function mapFold(f, acc, xs, transform) {\n const result = [];\n let r;\n let cur;\n for (let i = 0, iter = xs[Symbol.iterator]();; i++) {\n cur = iter.next();\n if (cur.done) {\n break;\n }\n [r, acc] = f(acc, cur.value);\n result.push(r);\n }\n return transform !== void 0 ? [transform(result), acc] : [result, acc];\n}\nexport function mapFoldBack(f, xs, acc, transform) {\n const arr = Array.isArray(xs) || ArrayBuffer.isView(xs) ? xs : Array.from(xs);\n const result = [];\n let r;\n for (let i = arr.length - 1; i >= 0; i--) {\n [r, acc] = f(arr[i], acc);\n result.push(r);\n }\n return transform !== void 0 ? [transform(result), acc] : [result, acc];\n}\nexport function max(xs, comparer) {\n const compareFn = comparer != null ? comparer.Compare : compare;\n return reduce((acc, x) => compareFn(acc, x) === 1 ? acc : x, xs);\n}\nexport function maxBy(f, xs, comparer) {\n const compareFn = comparer != null ? comparer.Compare : compare;\n return reduce((acc, x) => compareFn(f(acc), f(x)) === 1 ? acc : x, xs);\n}\nexport function min(xs, comparer) {\n const compareFn = comparer != null ? comparer.Compare : compare;\n return reduce((acc, x) => compareFn(acc, x) === -1 ? acc : x, xs);\n}\nexport function minBy(f, xs, comparer) {\n const compareFn = comparer != null ? comparer.Compare : compare;\n return reduce((acc, x) => compareFn(f(acc), f(x)) === -1 ? acc : x, xs);\n}\nexport function pairwise(xs) {\n return delay(() => {\n const iter = xs[Symbol.iterator]();\n const cur = iter.next();\n if (cur.done) {\n return empty();\n }\n const hd = cur.value;\n const tl = tail(xs);\n const ys = scan(([_, last], next) => [last, next], [hd, hd], tl);\n return skip(1, ys);\n });\n}\nexport function rangeChar(first, last) {\n return delay(() => unfold((x) => x <= last ? [x, String.fromCharCode(x.charCodeAt(0) + 1)] : null, first));\n}\nexport function rangeLong(first, step, last, unsigned) {\n const stepFn = makeLongRangeStepFunction(step, last, unsigned);\n return delay(() => unfold(stepFn, first));\n}\nexport function rangeDecimal(first, step, last) {\n const stepFn = makeDecimalRangeStepFunction(step, last);\n return delay(() => unfold(stepFn, first));\n}\nexport function rangeNumber(first, step, last) {\n if (step === 0) {\n throw new Error(\"Step cannot be 0\");\n }\n return delay(() => unfold((x) => step > 0 && x <= last || step < 0 && x >= last ? [x, x + step] : null, first));\n}\nexport function readOnly(xs) {\n return map((x) => x, xs);\n}\nexport function reduce(f, xs) {\n if (Array.isArray(xs) || ArrayBuffer.isView(xs)) {\n return xs.reduce(f);\n }\n const iter = xs[Symbol.iterator]();\n let cur = iter.next();\n if (cur.done) {\n throw new Error(\"Seq was empty\");\n }\n let acc = cur.value;\n while (true) {\n cur = iter.next();\n if (cur.done) {\n break;\n }\n acc = f(acc, cur.value);\n }\n return acc;\n}\nexport function reduceBack(f, xs) {\n const ar = Array.isArray(xs) || ArrayBuffer.isView(xs) ? xs : Array.from(xs);\n if (ar.length === 0) {\n throw new Error(\"Seq was empty\");\n }\n let acc = ar[ar.length - 1];\n for (let i = ar.length - 2; i >= 0; i--) {\n acc = f(ar[i], acc, i);\n }\n return acc;\n}\nexport function replicate(n, x) {\n return initialize(n, () => x);\n}\nexport function reverse(xs) {\n const ar = Array.isArray(xs) || ArrayBuffer.isView(xs) ? xs.slice(0) : Array.from(xs);\n return ofArray(ar.reverse());\n}\nexport function scan(f, seed, xs) {\n return delay(() => {\n const iter = xs[Symbol.iterator]();\n return unfold((acc) => {\n if (acc == null) {\n return [seed, seed];\n }\n const cur = iter.next();\n if (!cur.done) {\n acc = f(acc, cur.value);\n return [acc, acc];\n }\n return null;\n }, null);\n });\n}\nexport function scanBack(f, xs, seed) {\n return reverse(scan((acc, x) => f(x, acc), seed, reverse(xs)));\n}\nexport function singleton(y) {\n return [y];\n}\nexport function skip(n, xs) {\n return makeSeq(() => {\n const iter = xs[Symbol.iterator]();\n for (let i = 1; i <= n; i++) {\n if (iter.next().done) {\n throw new Error(\"Seq has not enough elements\");\n }\n }\n return iter;\n });\n}\nexport function skipWhile(f, xs) {\n return delay(() => {\n let hasPassed = false;\n return filter((x) => hasPassed || (hasPassed = !f(x)), xs);\n });\n}\nexport function sortWith(f, xs) {\n const ys = Array.from(xs);\n return ofArray(ys.sort(f));\n}\nexport function sum(xs, adder) {\n return fold((acc, x) => adder.Add(acc, x), adder.GetZero(), xs);\n}\nexport function sumBy(f, xs, adder) {\n return fold((acc, x) => adder.Add(acc, f(x)), adder.GetZero(), xs);\n}\nexport function tail(xs) {\n return skip(1, xs);\n}\nexport function take(n, xs, truncate = false) {\n return delay(() => {\n const iter = xs[Symbol.iterator]();\n return unfold((i) => {\n if (i < n) {\n const cur = iter.next();\n if (!cur.done) {\n return [cur.value, i + 1];\n }\n if (!truncate) {\n throw new Error(\"Seq has not enough elements\");\n }\n }\n return null;\n }, 0);\n });\n}\nexport function truncate(n, xs) {\n return take(n, xs, true);\n}\nexport function takeWhile(f, xs) {\n return delay(() => {\n const iter = xs[Symbol.iterator]();\n return unfold(() => {\n const cur = iter.next();\n if (!cur.done && f(cur.value)) {\n return [cur.value, null];\n }\n return null;\n }, 0);\n });\n}\nexport function tryFind(f, xs, defaultValue) {\n for (let i = 0, iter = xs[Symbol.iterator]();; i++) {\n const cur = iter.next();\n if (cur.done) {\n break;\n }\n if (f(cur.value, i)) {\n return some(cur.value);\n }\n }\n return defaultValue === void 0 ? null : some(defaultValue);\n}\nexport function find(f, xs) {\n return __failIfNone(tryFind(f, xs));\n}\nexport function tryFindBack(f, xs, defaultValue) {\n const arr = Array.isArray(xs) || ArrayBuffer.isView(xs) ? xs.slice(0) : Array.from(xs);\n return tryFind(f, arr.reverse(), defaultValue);\n}\nexport function findBack(f, xs) {\n return __failIfNone(tryFindBack(f, xs));\n}\nexport function tryFindIndex(f, xs) {\n for (let i = 0, iter = xs[Symbol.iterator]();; i++) {\n const cur = iter.next();\n if (cur.done) {\n break;\n }\n if (f(cur.value, i)) {\n return i;\n }\n }\n return null;\n}\nexport function findIndex(f, xs) {\n return __failIfNone(tryFindIndex(f, xs));\n}\nexport function tryFindIndexBack(f, xs) {\n const arr = Array.isArray(xs) || ArrayBuffer.isView(xs) ? xs.slice(0) : Array.from(xs);\n for (let i = arr.length - 1; i >= 0; i--) {\n if (f(arr[i], i)) {\n return i;\n }\n }\n return null;\n}\nexport function findIndexBack(f, xs) {\n return __failIfNone(tryFindIndexBack(f, xs));\n}\nexport function tryPick(f, xs) {\n for (let i = 0, iter = xs[Symbol.iterator]();; i++) {\n const cur = iter.next();\n if (cur.done) {\n break;\n }\n const y = f(cur.value, i);\n if (y != null) {\n return y;\n }\n }\n return null;\n}\nexport function pick(f, xs) {\n return __failIfNone(tryPick(f, xs));\n}\nexport function unfold(f, fst) {\n return makeSeq(() => {\n // Capture a copy of the first value in the closure\n // so the sequence is restarted every time, see #1230\n let acc = fst;\n const iter = {\n next: () => {\n const res = f(acc);\n if (res != null) {\n const v = value(res);\n if (v != null) {\n acc = v[1];\n return { done: false, value: v[0] };\n }\n }\n return { done: true, value: undefined };\n },\n };\n return iter;\n });\n}\nexport function zip(xs, ys) {\n return map2((x, y) => [x, y], xs, ys);\n}\nexport function zip3(xs, ys, zs) {\n return map3((x, y, z) => [x, y, z], xs, ys, zs);\n}\nexport function windowed(windowSize, source) {\n if (windowSize <= 0) {\n throw new Error(\"windowSize must be positive\");\n }\n return makeSeq(() => {\n let window = [];\n const iter = source[Symbol.iterator]();\n const iter2 = {\n next: () => {\n let cur;\n while (window.length < windowSize) {\n if ((cur = iter.next()).done) {\n return { done: true, value: undefined };\n }\n window.push(cur.value);\n }\n const value = window;\n window = window.slice(1);\n return { done: false, value };\n },\n };\n return iter2;\n });\n}\nexport function transpose(source) {\n return makeSeq(() => {\n const iters = Array.from(source, (x) => x[Symbol.iterator]());\n const iter = {\n next: () => {\n if (iters.length === 0) {\n return { done: true, value: undefined }; // empty sequence\n }\n const results = Array.from(iters, (iter) => iter.next());\n if (results[0].done) {\n if (!results.every((x) => x.done)) {\n throw new Error(\"Sequences have different lengths\");\n }\n return { done: true, value: undefined };\n }\n else {\n if (!results.every((x) => !x.done)) {\n throw new Error(\"Sequences have different lengths\");\n }\n const values = results.map((x) => x.value);\n return { done: false, value: values };\n }\n },\n };\n return iter;\n });\n}\n//# sourceMappingURL=Seq.js.map","import { declare, FSharpRef } from \"./Types.js\";\nimport { iterateIndexed, toIterator, getEnumerator, delay, collect, map, sumBy, iterate } from \"./Seq.js\";\nimport { type } from \"./Reflection.js\";\nimport { equals, getItemFromDict, tryGetValue } from \"./Util.js\";\nimport { format } from \"./String.js\";\nexport const MutableMap$00602 = declare(function Fable_Collections_MutableMap(pairs, comparer) {\n const $this$$1 = this;\n const this$ = new FSharpRef(null);\n $this$$1.comparer = comparer;\n this$.contents = $this$$1;\n $this$$1.hashMap = new Map([]);\n $this$$1[\"init@20-1\"] = 1;\n iterate(function (pair) {\n MutableMap$00602$$Add$$5BDDA1(this$.contents, pair[0], pair[1]);\n }, pairs);\n});\nexport function MutableMap$00602$reflection($gen$$4, $gen$$5) {\n return type(\"Fable.Collections.MutableMap`2\", [$gen$$4, $gen$$5]);\n}\nexport function MutableMap$00602$$$$002Ector$$6623D9B3(pairs, comparer) {\n return this instanceof MutableMap$00602 ? MutableMap$00602.call(this, pairs, comparer) : new MutableMap$00602(pairs, comparer);\n}\n\nfunction MutableMap$00602$$TryFindIndex$$2B595(this$$$1, k) {\n const h = this$$$1.comparer.GetHashCode(k) | 0;\n const matchValue = tryGetValue(this$$$1.hashMap, h, null);\n\n if (matchValue[0]) {\n return [true, h, matchValue[1].findIndex(function (pair$$1) {\n return this$$$1.comparer.Equals(k, pair$$1[0]);\n })];\n } else {\n return [false, h, -1];\n }\n}\n\nexport function MutableMap$00602$$TryFind$$2B595(this$$$2, k$$1) {\n const matchValue$$1 = MutableMap$00602$$TryFindIndex$$2B595(this$$$2, k$$1);\n var $target$$10;\n\n if (matchValue$$1[0]) {\n if (matchValue$$1[2] > -1) {\n $target$$10 = 0;\n } else {\n $target$$10 = 1;\n }\n } else {\n $target$$10 = 1;\n }\n\n switch ($target$$10) {\n case 0:\n {\n return getItemFromDict(this$$$2.hashMap, matchValue$$1[1])[matchValue$$1[2]];\n }\n\n case 1:\n {\n return null;\n }\n }\n}\nexport function MutableMap$00602$$get_Comparer(this$$$3) {\n return this$$$3.comparer;\n}\nexport function MutableMap$00602$$Clear(this$$$4) {\n this$$$4.hashMap.clear();\n}\nexport function MutableMap$00602$$get_Count(this$$$5) {\n const source = this$$$5.hashMap.values();\n return sumBy(function projection(pairs$$2) {\n return pairs$$2.length;\n }, source, {\n GetZero() {\n return 0;\n },\n\n Add($x$$2, $y$$3) {\n return $x$$2 + $y$$3;\n }\n\n }) | 0;\n}\nexport function MutableMap$00602$$get_Item$$2B595(this$$$6, k$$2) {\n const matchValue$$2 = MutableMap$00602$$TryFind$$2B595(this$$$6, k$$2);\n\n if (matchValue$$2 != null) {\n const pair$$2 = matchValue$$2;\n return pair$$2[1];\n } else {\n throw new Error(\"The item was not found in collection\");\n }\n}\nexport function MutableMap$00602$$set_Item$$5BDDA1(this$$$7, k$$3, v) {\n const matchValue$$3 = MutableMap$00602$$TryFindIndex$$2B595(this$$$7, k$$3);\n var $target$$20;\n\n if (matchValue$$3[0]) {\n if (matchValue$$3[2] > -1) {\n $target$$20 = 0;\n } else {\n $target$$20 = 1;\n }\n } else {\n $target$$20 = 1;\n }\n\n switch ($target$$20) {\n case 0:\n {\n getItemFromDict(this$$$7.hashMap, matchValue$$3[1])[matchValue$$3[2]] = [k$$3, v];\n break;\n }\n\n case 1:\n {\n if (matchValue$$3[0]) {\n const value = void getItemFromDict(this$$$7.hashMap, matchValue$$3[1]).push([k$$3, v]);\n void null;\n } else {\n this$$$7.hashMap.set(matchValue$$3[1], [[k$$3, v]]);\n }\n\n break;\n }\n }\n}\nexport function MutableMap$00602$$Add$$5BDDA1(this$$$8, k$$4, v$$1) {\n const matchValue$$4 = MutableMap$00602$$TryFindIndex$$2B595(this$$$8, k$$4);\n var $target$$24;\n\n if (matchValue$$4[0]) {\n if (matchValue$$4[2] > -1) {\n $target$$24 = 0;\n } else {\n $target$$24 = 1;\n }\n } else {\n $target$$24 = 1;\n }\n\n switch ($target$$24) {\n case 0:\n {\n const msg = format(\"An item with the same key has already been added. Key: {0}\", k$$4);\n throw new Error(msg);\n break;\n }\n\n case 1:\n {\n if (matchValue$$4[0]) {\n const value$$1 = void getItemFromDict(this$$$8.hashMap, matchValue$$4[1]).push([k$$4, v$$1]);\n void null;\n } else {\n this$$$8.hashMap.set(matchValue$$4[1], [[k$$4, v$$1]]);\n }\n\n break;\n }\n }\n}\nexport function MutableMap$00602$$ContainsKey$$2B595(this$$$9, k$$5) {\n const matchValue$$5 = MutableMap$00602$$TryFindIndex$$2B595(this$$$9, k$$5);\n var $target$$27;\n\n if (matchValue$$5[0]) {\n if (matchValue$$5[2] > -1) {\n $target$$27 = 0;\n } else {\n $target$$27 = 1;\n }\n } else {\n $target$$27 = 1;\n }\n\n switch ($target$$27) {\n case 0:\n {\n return true;\n }\n\n case 1:\n {\n return false;\n }\n }\n}\nexport function MutableMap$00602$$Remove$$2B595(this$$$10, k$$6) {\n const matchValue$$6 = MutableMap$00602$$TryFindIndex$$2B595(this$$$10, k$$6);\n var $target$$30;\n\n if (matchValue$$6[0]) {\n if (matchValue$$6[2] > -1) {\n $target$$30 = 0;\n } else {\n $target$$30 = 1;\n }\n } else {\n $target$$30 = 1;\n }\n\n switch ($target$$30) {\n case 0:\n {\n getItemFromDict(this$$$10.hashMap, matchValue$$6[1]).splice(matchValue$$6[2], 1);\n return true;\n }\n\n case 1:\n {\n return false;\n }\n }\n}\n\nMutableMap$00602.prototype[Symbol.iterator] = function () {\n var elems;\n const this$$$11 = this;\n return toIterator((elems = delay(function () {\n return collect(function (pairs$$3) {\n return map(function (pair$$3) {\n return pair$$3;\n }, pairs$$3);\n }, this$$$11.hashMap.values());\n }), getEnumerator(elems)));\n};\n\nMutableMap$00602.prototype.Add = function (item) {\n const this$$$12 = this;\n MutableMap$00602$$Add$$5BDDA1(this$$$12, item[0], item[1]);\n};\n\nMutableMap$00602.prototype.Clear = function () {\n const this$$$13 = this;\n MutableMap$00602$$Clear(this$$$13);\n};\n\nMutableMap$00602.prototype.Contains = function (item$$1) {\n var p;\n const this$$$14 = this;\n const matchValue$$7 = MutableMap$00602$$TryFind$$2B595(this$$$14, item$$1[0]);\n var $target$$31;\n\n if (matchValue$$7 != null) {\n if (p = matchValue$$7, equals(p[1], item$$1[1])) {\n $target$$31 = 0;\n } else {\n $target$$31 = 1;\n }\n } else {\n $target$$31 = 1;\n }\n\n switch ($target$$31) {\n case 0:\n {\n return true;\n }\n\n case 1:\n {\n return false;\n }\n }\n};\n\nMutableMap$00602.prototype.CopyTo = function (array, arrayIndex) {\n const this$$$15 = this;\n iterateIndexed(function action(i$$10, e) {\n array[arrayIndex + i$$10] = e;\n }, this$$$15);\n};\n\nObject.defineProperty(MutableMap$00602.prototype, \"Count\", {\n \"get\": function () {\n const this$$$16 = this;\n return MutableMap$00602$$get_Count(this$$$16) | 0;\n }\n});\nObject.defineProperty(MutableMap$00602.prototype, \"IsReadOnly\", {\n \"get\": function () {\n return false;\n }\n});\n\nMutableMap$00602.prototype.Remove = function (item$$2) {\n const this$$$18 = this;\n const matchValue$$8 = MutableMap$00602$$TryFind$$2B595(this$$$18, item$$2[0]);\n\n if (matchValue$$8 != null) {\n const pair$$4 = matchValue$$8;\n\n if (equals(pair$$4[1], item$$2[1])) {\n const value$$2 = MutableMap$00602$$Remove$$2B595(this$$$18, item$$2[0]);\n void value$$2;\n }\n\n return true;\n } else {\n return false;\n }\n};\n\nObject.defineProperty(MutableMap$00602.prototype, \"size\", {\n \"get\": function () {\n const this$$$19 = this;\n return MutableMap$00602$$get_Count(this$$$19) | 0;\n }\n});\n\nMutableMap$00602.prototype.clear = function () {\n const this$$$20 = this;\n MutableMap$00602$$Clear(this$$$20);\n};\n\nMutableMap$00602.prototype.delete = function (k$$7) {\n const this$$$21 = this;\n return MutableMap$00602$$Remove$$2B595(this$$$21, k$$7);\n};\n\nMutableMap$00602.prototype.entries = function () {\n const this$$$22 = this;\n return map(function mapping(x) {\n return x;\n }, this$$$22);\n};\n\nMutableMap$00602.prototype.get = function (k$$8) {\n const this$$$23 = this;\n return MutableMap$00602$$get_Item$$2B595(this$$$23, k$$8);\n};\n\nMutableMap$00602.prototype.has = function (k$$9) {\n const this$$$24 = this;\n return MutableMap$00602$$ContainsKey$$2B595(this$$$24, k$$9);\n};\n\nMutableMap$00602.prototype.keys = function () {\n const this$$$25 = this;\n return map(function mapping$$1(pair$$5) {\n return pair$$5[0];\n }, this$$$25);\n};\n\nMutableMap$00602.prototype.set = function (k$$10, v$$2) {\n const this$$$26 = this;\n MutableMap$00602$$set_Item$$5BDDA1(this$$$26, k$$10, v$$2);\n return this$$$26;\n};\n\nMutableMap$00602.prototype.values = function () {\n const this$$$27 = this;\n return map(function mapping$$2(pair$$6) {\n return pair$$6[1];\n }, this$$$27);\n};","import { Record, List, declare, Union } from \"./Types.js\";\nimport { type, record, bool, list, union, int32 } from \"./Reflection.js\";\nimport { value as value$$3, some } from \"./Option.js\";\nimport { iterate as iterate$$1, empty as empty$$1, toIterator, map as map$$2, unfold, getEnumerator, fold as fold$$1 } from \"./Seq.js\";\nimport { compare, structuralHash, isDisposable } from \"./Util.js\";\nimport { join, format } from \"./String.js\";\nimport { MutableMap$00602$$$$002Ector$$6623D9B3 as MutableMap$002400602$0024$0024$0024$0024002Ector$0024$00246623D9B3 } from \"./MutableMap\";\nexport const MapTree$00602 = declare(function Map_MapTree(tag, name, ...fields) {\n Union.call(this, tag, name, ...fields);\n}, Union);\nexport function MapTree$00602$reflection($gen$$3, $gen$$4) {\n return union(\"Map.MapTree`2\", [$gen$$3, $gen$$4], MapTree$00602, () => [\"MapEmpty\", [\"MapOne\", [[\"Item1\", $gen$$3], [\"Item2\", $gen$$4]]], [\"MapNode\", [[\"Item1\", $gen$$3], [\"Item2\", $gen$$4], [\"Item3\", MapTree$00602$reflection($gen$$3, $gen$$4)], [\"Item4\", MapTree$00602$reflection($gen$$3, $gen$$4)], [\"Item5\", int32]]]]);\n}\nexport function MapTreeModule$$$sizeAux($acc$$5, $m$$6) {\n MapTreeModule$$$sizeAux: while (true) {\n const acc = $acc$$5,\n m = $m$$6;\n\n switch (m.tag) {\n case 1:\n {\n return acc + 1 | 0;\n }\n\n case 2:\n {\n $acc$$5 = MapTreeModule$$$sizeAux(acc + 1, m.fields[2]);\n $m$$6 = m.fields[3];\n continue MapTreeModule$$$sizeAux;\n }\n\n default:\n {\n return acc | 0;\n }\n }\n\n break;\n }\n}\nexport function MapTreeModule$$$size(x) {\n return MapTreeModule$$$sizeAux(0, x);\n}\nexport function MapTreeModule$$$empty() {\n return new MapTree$00602(0, \"MapEmpty\");\n}\nexport function MapTreeModule$$$height(_arg1) {\n switch (_arg1.tag) {\n case 1:\n {\n return 1;\n }\n\n case 2:\n {\n return _arg1.fields[4] | 0;\n }\n\n default:\n {\n return 0;\n }\n }\n}\nexport function MapTreeModule$$$isEmpty(m$$1) {\n if (m$$1.tag === 0) {\n return true;\n } else {\n return false;\n }\n}\nexport function MapTreeModule$$$mk(l$$1, k, v, r$$1) {\n var $target$$14;\n\n if (l$$1.tag === 0) {\n if (r$$1.tag === 0) {\n $target$$14 = 0;\n } else {\n $target$$14 = 1;\n }\n } else {\n $target$$14 = 1;\n }\n\n switch ($target$$14) {\n case 0:\n {\n return new MapTree$00602(1, \"MapOne\", k, v);\n }\n\n case 1:\n {\n const hl = MapTreeModule$$$height(l$$1) | 0;\n const hr = MapTreeModule$$$height(r$$1) | 0;\n const m$$2 = (hl < hr ? hr : hl) | 0;\n return new MapTree$00602(2, \"MapNode\", k, v, l$$1, r$$1, m$$2 + 1);\n }\n }\n}\nexport function MapTreeModule$$$rebalance(t1, k$$1, v$$1, t2) {\n const t1h = MapTreeModule$$$height(t1) | 0;\n const t2h = MapTreeModule$$$height(t2) | 0;\n\n if (t2h > t1h + 2) {\n if (t2.tag === 2) {\n if (MapTreeModule$$$height(t2.fields[2]) > t1h + 1) {\n if (t2.fields[2].tag === 2) {\n return MapTreeModule$$$mk(MapTreeModule$$$mk(t1, k$$1, v$$1, t2.fields[2].fields[2]), t2.fields[2].fields[0], t2.fields[2].fields[1], MapTreeModule$$$mk(t2.fields[2].fields[3], t2.fields[0], t2.fields[1], t2.fields[3]));\n } else {\n throw new Error(\"rebalance\");\n }\n } else {\n return MapTreeModule$$$mk(MapTreeModule$$$mk(t1, k$$1, v$$1, t2.fields[2]), t2.fields[0], t2.fields[1], t2.fields[3]);\n }\n } else {\n throw new Error(\"rebalance\");\n }\n } else if (t1h > t2h + 2) {\n if (t1.tag === 2) {\n if (MapTreeModule$$$height(t1.fields[3]) > t2h + 1) {\n if (t1.fields[3].tag === 2) {\n return MapTreeModule$$$mk(MapTreeModule$$$mk(t1.fields[2], t1.fields[0], t1.fields[1], t1.fields[3].fields[2]), t1.fields[3].fields[0], t1.fields[3].fields[1], MapTreeModule$$$mk(t1.fields[3].fields[3], k$$1, v$$1, t2));\n } else {\n throw new Error(\"re balance\");\n }\n } else {\n return MapTreeModule$$$mk(t1.fields[2], t1.fields[0], t1.fields[1], MapTreeModule$$$mk(t1.fields[3], k$$1, v$$1, t2));\n }\n } else {\n throw new Error(\"rebalance\");\n }\n } else {\n return MapTreeModule$$$mk(t1, k$$1, v$$1, t2);\n }\n}\nexport function MapTreeModule$$$add(comparer, k$$2, v$$2, m$$3) {\n switch (m$$3.tag) {\n case 1:\n {\n const c = comparer.Compare(k$$2, m$$3.fields[0]) | 0;\n\n if (c < 0) {\n return new MapTree$00602(2, \"MapNode\", k$$2, v$$2, new MapTree$00602(0, \"MapEmpty\"), m$$3, 2);\n } else if (c === 0) {\n return new MapTree$00602(1, \"MapOne\", k$$2, v$$2);\n } else {\n return new MapTree$00602(2, \"MapNode\", k$$2, v$$2, m$$3, new MapTree$00602(0, \"MapEmpty\"), 2);\n }\n }\n\n case 2:\n {\n const c$$1 = comparer.Compare(k$$2, m$$3.fields[0]) | 0;\n\n if (c$$1 < 0) {\n return MapTreeModule$$$rebalance(MapTreeModule$$$add(comparer, k$$2, v$$2, m$$3.fields[2]), m$$3.fields[0], m$$3.fields[1], m$$3.fields[3]);\n } else if (c$$1 === 0) {\n return new MapTree$00602(2, \"MapNode\", k$$2, v$$2, m$$3.fields[2], m$$3.fields[3], m$$3.fields[4]);\n } else {\n return MapTreeModule$$$rebalance(m$$3.fields[2], m$$3.fields[0], m$$3.fields[1], MapTreeModule$$$add(comparer, k$$2, v$$2, m$$3.fields[3]));\n }\n }\n\n default:\n {\n return new MapTree$00602(1, \"MapOne\", k$$2, v$$2);\n }\n }\n}\nexport function MapTreeModule$$$find($comparer$$1$$23, $k$$3$$24, $m$$4$$25) {\n MapTreeModule$$$find: while (true) {\n const comparer$$1 = $comparer$$1$$23,\n k$$3 = $k$$3$$24,\n m$$4 = $m$$4$$25;\n\n switch (m$$4.tag) {\n case 1:\n {\n const c$$2 = comparer$$1.Compare(k$$3, m$$4.fields[0]) | 0;\n\n if (c$$2 === 0) {\n return m$$4.fields[1];\n } else {\n throw new Error(\"key not found\");\n }\n }\n\n case 2:\n {\n const c$$3 = comparer$$1.Compare(k$$3, m$$4.fields[0]) | 0;\n\n if (c$$3 < 0) {\n $comparer$$1$$23 = comparer$$1;\n $k$$3$$24 = k$$3;\n $m$$4$$25 = m$$4.fields[2];\n continue MapTreeModule$$$find;\n } else if (c$$3 === 0) {\n return m$$4.fields[1];\n } else {\n $comparer$$1$$23 = comparer$$1;\n $k$$3$$24 = k$$3;\n $m$$4$$25 = m$$4.fields[3];\n continue MapTreeModule$$$find;\n }\n }\n\n default:\n {\n throw new Error(\"key not found\");\n }\n }\n\n break;\n }\n}\nexport function MapTreeModule$$$tryFind($comparer$$2$$26, $k$$4$$27, $m$$5$$28) {\n MapTreeModule$$$tryFind: while (true) {\n const comparer$$2 = $comparer$$2$$26,\n k$$4 = $k$$4$$27,\n m$$5 = $m$$5$$28;\n\n switch (m$$5.tag) {\n case 1:\n {\n const c$$4 = comparer$$2.Compare(k$$4, m$$5.fields[0]) | 0;\n\n if (c$$4 === 0) {\n return some(m$$5.fields[1]);\n } else {\n return null;\n }\n }\n\n case 2:\n {\n const c$$5 = comparer$$2.Compare(k$$4, m$$5.fields[0]) | 0;\n\n if (c$$5 < 0) {\n $comparer$$2$$26 = comparer$$2;\n $k$$4$$27 = k$$4;\n $m$$5$$28 = m$$5.fields[2];\n continue MapTreeModule$$$tryFind;\n } else if (c$$5 === 0) {\n return some(m$$5.fields[1]);\n } else {\n $comparer$$2$$26 = comparer$$2;\n $k$$4$$27 = k$$4;\n $m$$5$$28 = m$$5.fields[3];\n continue MapTreeModule$$$tryFind;\n }\n }\n\n default:\n {\n return null;\n }\n }\n\n break;\n }\n}\nexport function MapTreeModule$$$partition1(comparer$$3, f, k$$5, v$$3, acc1, acc2) {\n if (f(k$$5, v$$3)) {\n return [MapTreeModule$$$add(comparer$$3, k$$5, v$$3, acc1), acc2];\n } else {\n return [acc1, MapTreeModule$$$add(comparer$$3, k$$5, v$$3, acc2)];\n }\n}\nexport function MapTreeModule$$$partitionAux($comparer$$4$$35, $f$$1$$36, $s$$37, $acc_0$$38, $acc_1$$39) {\n MapTreeModule$$$partitionAux: while (true) {\n const comparer$$4 = $comparer$$4$$35,\n f$$1 = $f$$1$$36,\n s = $s$$37,\n acc_0 = $acc_0$$38,\n acc_1 = $acc_1$$39;\n\n switch (s.tag) {\n case 1:\n {\n return MapTreeModule$$$partition1(comparer$$4, f$$1, s.fields[0], s.fields[1], acc_0, acc_1);\n }\n\n case 2:\n {\n const acc$$2 = MapTreeModule$$$partitionAux(comparer$$4, f$$1, s.fields[3], acc_0, acc_1);\n const acc$$3 = MapTreeModule$$$partition1(comparer$$4, f$$1, s.fields[0], s.fields[1], acc$$2[0], acc$$2[1]);\n $comparer$$4$$35 = comparer$$4;\n $f$$1$$36 = f$$1;\n $s$$37 = s.fields[2];\n $acc_0$$38 = acc$$3[0];\n $acc_1$$39 = acc$$3[1];\n continue MapTreeModule$$$partitionAux;\n }\n\n default:\n {\n return [acc_0, acc_1];\n }\n }\n\n break;\n }\n}\nexport function MapTreeModule$$$partition(comparer$$5, f$$2, s$$1) {\n return MapTreeModule$$$partitionAux(comparer$$5, f$$2, s$$1, MapTreeModule$$$empty(), MapTreeModule$$$empty());\n}\nexport function MapTreeModule$$$filter1(comparer$$6, f$$3, k$$8, v$$6, acc$$4) {\n if (f$$3(k$$8, v$$6)) {\n return MapTreeModule$$$add(comparer$$6, k$$8, v$$6, acc$$4);\n } else {\n return acc$$4;\n }\n}\nexport function MapTreeModule$$$filterAux($comparer$$7$$48, $f$$4$$49, $s$$2$$50, $acc$$5$$51) {\n MapTreeModule$$$filterAux: while (true) {\n const comparer$$7 = $comparer$$7$$48,\n f$$4 = $f$$4$$49,\n s$$2 = $s$$2$$50,\n acc$$5 = $acc$$5$$51;\n\n switch (s$$2.tag) {\n case 1:\n {\n return MapTreeModule$$$filter1(comparer$$7, f$$4, s$$2.fields[0], s$$2.fields[1], acc$$5);\n }\n\n case 2:\n {\n const acc$$6 = MapTreeModule$$$filterAux(comparer$$7, f$$4, s$$2.fields[2], acc$$5);\n const acc$$7 = MapTreeModule$$$filter1(comparer$$7, f$$4, s$$2.fields[0], s$$2.fields[1], acc$$6);\n $comparer$$7$$48 = comparer$$7;\n $f$$4$$49 = f$$4;\n $s$$2$$50 = s$$2.fields[3];\n $acc$$5$$51 = acc$$7;\n continue MapTreeModule$$$filterAux;\n }\n\n default:\n {\n return acc$$5;\n }\n }\n\n break;\n }\n}\nexport function MapTreeModule$$$filter(comparer$$8, f$$5, s$$3) {\n return MapTreeModule$$$filterAux(comparer$$8, f$$5, s$$3, MapTreeModule$$$empty());\n}\nexport function MapTreeModule$$$spliceOutSuccessor(m$$6) {\n switch (m$$6.tag) {\n case 1:\n {\n return [m$$6.fields[0], m$$6.fields[1], new MapTree$00602(0, \"MapEmpty\")];\n }\n\n case 2:\n {\n if (m$$6.fields[2].tag === 0) {\n return [m$$6.fields[0], m$$6.fields[1], m$$6.fields[3]];\n } else {\n const patternInput = MapTreeModule$$$spliceOutSuccessor(m$$6.fields[2]);\n return [patternInput[0], patternInput[1], MapTreeModule$$$mk(patternInput[2], m$$6.fields[0], m$$6.fields[1], m$$6.fields[3])];\n }\n }\n\n default:\n {\n throw new Error(\"internal error: Map.spliceOutSuccessor\");\n }\n }\n}\nexport function MapTreeModule$$$remove(comparer$$9, k$$11, m$$7) {\n switch (m$$7.tag) {\n case 1:\n {\n const c$$6 = comparer$$9.Compare(k$$11, m$$7.fields[0]) | 0;\n\n if (c$$6 === 0) {\n return new MapTree$00602(0, \"MapEmpty\");\n } else {\n return m$$7;\n }\n }\n\n case 2:\n {\n const c$$7 = comparer$$9.Compare(k$$11, m$$7.fields[0]) | 0;\n\n if (c$$7 < 0) {\n return MapTreeModule$$$rebalance(MapTreeModule$$$remove(comparer$$9, k$$11, m$$7.fields[2]), m$$7.fields[0], m$$7.fields[1], m$$7.fields[3]);\n } else if (c$$7 === 0) {\n if (m$$7.fields[2].tag === 0) {\n return m$$7.fields[3];\n } else if (m$$7.fields[3].tag === 0) {\n return m$$7.fields[2];\n } else {\n const patternInput$$1 = MapTreeModule$$$spliceOutSuccessor(m$$7.fields[3]);\n return MapTreeModule$$$mk(m$$7.fields[2], patternInput$$1[0], patternInput$$1[1], patternInput$$1[2]);\n }\n } else {\n return MapTreeModule$$$rebalance(m$$7.fields[2], m$$7.fields[0], m$$7.fields[1], MapTreeModule$$$remove(comparer$$9, k$$11, m$$7.fields[3]));\n }\n }\n\n default:\n {\n return MapTreeModule$$$empty();\n }\n }\n}\nexport function MapTreeModule$$$mem($comparer$$10$$59, $k$$12$$60, $m$$8$$61) {\n MapTreeModule$$$mem: while (true) {\n const comparer$$10 = $comparer$$10$$59,\n k$$12 = $k$$12$$60,\n m$$8 = $m$$8$$61;\n\n switch (m$$8.tag) {\n case 1:\n {\n return comparer$$10.Compare(k$$12, m$$8.fields[0]) === 0;\n }\n\n case 2:\n {\n const c$$8 = comparer$$10.Compare(k$$12, m$$8.fields[0]) | 0;\n\n if (c$$8 < 0) {\n $comparer$$10$$59 = comparer$$10;\n $k$$12$$60 = k$$12;\n $m$$8$$61 = m$$8.fields[2];\n continue MapTreeModule$$$mem;\n } else if (c$$8 === 0) {\n return true;\n } else {\n $comparer$$10$$59 = comparer$$10;\n $k$$12$$60 = k$$12;\n $m$$8$$61 = m$$8.fields[3];\n continue MapTreeModule$$$mem;\n }\n }\n\n default:\n {\n return false;\n }\n }\n\n break;\n }\n}\nexport function MapTreeModule$$$iter($f$$6$$62, $m$$9$$63) {\n MapTreeModule$$$iter: while (true) {\n const f$$6 = $f$$6$$62,\n m$$9 = $m$$9$$63;\n\n switch (m$$9.tag) {\n case 1:\n {\n f$$6(m$$9.fields[0], m$$9.fields[1]);\n break;\n }\n\n case 2:\n {\n MapTreeModule$$$iter(f$$6, m$$9.fields[2]);\n f$$6(m$$9.fields[0], m$$9.fields[1]);\n $f$$6$$62 = f$$6;\n $m$$9$$63 = m$$9.fields[3];\n continue MapTreeModule$$$iter;\n break;\n }\n\n default:\n {}\n }\n\n break;\n }\n}\nexport function MapTreeModule$$$tryPick($f$$7$$64, $m$$10$$65) {\n MapTreeModule$$$tryPick: while (true) {\n const f$$7 = $f$$7$$64,\n m$$10 = $m$$10$$65;\n\n switch (m$$10.tag) {\n case 1:\n {\n return f$$7(m$$10.fields[0], m$$10.fields[1]);\n }\n\n case 2:\n {\n const matchValue$$2 = MapTreeModule$$$tryPick(f$$7, m$$10.fields[2]);\n\n if (matchValue$$2 == null) {\n const matchValue$$3 = f$$7(m$$10.fields[0], m$$10.fields[1]);\n\n if (matchValue$$3 == null) {\n $f$$7$$64 = f$$7;\n $m$$10$$65 = m$$10.fields[3];\n continue MapTreeModule$$$tryPick;\n } else {\n return matchValue$$3;\n }\n } else {\n return matchValue$$2;\n }\n }\n\n default:\n {\n return null;\n }\n }\n\n break;\n }\n}\nexport function MapTreeModule$$$exists($f$$8$$66, $m$$11$$67) {\n MapTreeModule$$$exists: while (true) {\n const f$$8 = $f$$8$$66,\n m$$11 = $m$$11$$67;\n\n switch (m$$11.tag) {\n case 1:\n {\n return f$$8(m$$11.fields[0], m$$11.fields[1]);\n }\n\n case 2:\n {\n if (MapTreeModule$$$exists(f$$8, m$$11.fields[2]) ? true : f$$8(m$$11.fields[0], m$$11.fields[1])) {\n return true;\n } else {\n $f$$8$$66 = f$$8;\n $m$$11$$67 = m$$11.fields[3];\n continue MapTreeModule$$$exists;\n }\n }\n\n default:\n {\n return false;\n }\n }\n\n break;\n }\n}\nexport function MapTreeModule$$$forall($f$$9$$68, $m$$12$$69) {\n MapTreeModule$$$forall: while (true) {\n const f$$9 = $f$$9$$68,\n m$$12 = $m$$12$$69;\n\n switch (m$$12.tag) {\n case 1:\n {\n return f$$9(m$$12.fields[0], m$$12.fields[1]);\n }\n\n case 2:\n {\n if (MapTreeModule$$$forall(f$$9, m$$12.fields[2]) ? f$$9(m$$12.fields[0], m$$12.fields[1]) : false) {\n $f$$9$$68 = f$$9;\n $m$$12$$69 = m$$12.fields[3];\n continue MapTreeModule$$$forall;\n } else {\n return false;\n }\n }\n\n default:\n {\n return true;\n }\n }\n\n break;\n }\n}\nexport function MapTreeModule$$$map(f$$10, m$$13) {\n switch (m$$13.tag) {\n case 1:\n {\n return new MapTree$00602(1, \"MapOne\", m$$13.fields[0], f$$10(m$$13.fields[1]));\n }\n\n case 2:\n {\n const l2 = MapTreeModule$$$map(f$$10, m$$13.fields[2]);\n const v2$$16 = f$$10(m$$13.fields[1]);\n const r2 = MapTreeModule$$$map(f$$10, m$$13.fields[3]);\n return new MapTree$00602(2, \"MapNode\", m$$13.fields[0], v2$$16, l2, r2, m$$13.fields[4]);\n }\n\n default:\n {\n return MapTreeModule$$$empty();\n }\n }\n}\nexport function MapTreeModule$$$mapi(f$$11, m$$14) {\n switch (m$$14.tag) {\n case 1:\n {\n return new MapTree$00602(1, \"MapOne\", m$$14.fields[0], f$$11(m$$14.fields[0], m$$14.fields[1]));\n }\n\n case 2:\n {\n const l2$$1 = MapTreeModule$$$mapi(f$$11, m$$14.fields[2]);\n const v2$$17 = f$$11(m$$14.fields[0], m$$14.fields[1]);\n const r2$$1 = MapTreeModule$$$mapi(f$$11, m$$14.fields[3]);\n return new MapTree$00602(2, \"MapNode\", m$$14.fields[0], v2$$17, l2$$1, r2$$1, m$$14.fields[4]);\n }\n\n default:\n {\n return MapTreeModule$$$empty();\n }\n }\n}\nexport function MapTreeModule$$$foldBack($f$$12$$74, $m$$15$$75, $x$$1$$76) {\n MapTreeModule$$$foldBack: while (true) {\n const f$$12 = $f$$12$$74,\n m$$15 = $m$$15$$75,\n x$$1 = $x$$1$$76;\n\n switch (m$$15.tag) {\n case 1:\n {\n return f$$12(m$$15.fields[0], m$$15.fields[1], x$$1);\n }\n\n case 2:\n {\n const x$$2 = MapTreeModule$$$foldBack(f$$12, m$$15.fields[3], x$$1);\n const x$$3 = f$$12(m$$15.fields[0], m$$15.fields[1], x$$2);\n $f$$12$$74 = f$$12;\n $m$$15$$75 = m$$15.fields[2];\n $x$$1$$76 = x$$3;\n continue MapTreeModule$$$foldBack;\n }\n\n default:\n {\n return x$$1;\n }\n }\n\n break;\n }\n}\nexport function MapTreeModule$$$fold($f$$13$$77, $x$$4$$78, $m$$16$$79) {\n MapTreeModule$$$fold: while (true) {\n const f$$13 = $f$$13$$77,\n x$$4 = $x$$4$$78,\n m$$16 = $m$$16$$79;\n\n switch (m$$16.tag) {\n case 1:\n {\n return f$$13(x$$4, m$$16.fields[0], m$$16.fields[1]);\n }\n\n case 2:\n {\n const x$$5 = MapTreeModule$$$fold(f$$13, x$$4, m$$16.fields[2]);\n const x$$6 = f$$13(x$$5, m$$16.fields[0], m$$16.fields[1]);\n $f$$13$$77 = f$$13;\n $x$$4$$78 = x$$6;\n $m$$16$$79 = m$$16.fields[3];\n continue MapTreeModule$$$fold;\n }\n\n default:\n {\n return x$$4;\n }\n }\n\n break;\n }\n}\nexport function MapTreeModule$$$foldFromTo(comparer$$11, lo, hi, f$$14, m$$17, x$$7) {\n switch (m$$17.tag) {\n case 1:\n {\n const cLoKey = comparer$$11.Compare(lo, m$$17.fields[0]) | 0;\n const cKeyHi = comparer$$11.Compare(m$$17.fields[0], hi) | 0;\n const x$$8 = (cLoKey <= 0 ? cKeyHi <= 0 : false) ? f$$14(m$$17.fields[0], m$$17.fields[1], x$$7) : x$$7;\n return x$$8;\n }\n\n case 2:\n {\n const cLoKey$$1 = comparer$$11.Compare(lo, m$$17.fields[0]) | 0;\n const cKeyHi$$1 = comparer$$11.Compare(m$$17.fields[0], hi) | 0;\n const x$$9 = cLoKey$$1 < 0 ? MapTreeModule$$$foldFromTo(comparer$$11, lo, hi, f$$14, m$$17.fields[2], x$$7) : x$$7;\n const x$$10 = (cLoKey$$1 <= 0 ? cKeyHi$$1 <= 0 : false) ? f$$14(m$$17.fields[0], m$$17.fields[1], x$$9) : x$$9;\n const x$$11 = cKeyHi$$1 < 0 ? MapTreeModule$$$foldFromTo(comparer$$11, lo, hi, f$$14, m$$17.fields[3], x$$10) : x$$10;\n return x$$11;\n }\n\n default:\n {\n return x$$7;\n }\n }\n}\nexport function MapTreeModule$$$foldSection(comparer$$12, lo$$1, hi$$1, f$$15, m$$18, x$$12) {\n if (comparer$$12.Compare(lo$$1, hi$$1) === 1) {\n return x$$12;\n } else {\n return MapTreeModule$$$foldFromTo(comparer$$12, lo$$1, hi$$1, f$$15, m$$18, x$$12);\n }\n}\nexport function MapTreeModule$$$loop($m$$19$$92, $acc$$8$$93) {\n MapTreeModule$$$loop: while (true) {\n const m$$19 = $m$$19$$92,\n acc$$8 = $acc$$8$$93;\n\n switch (m$$19.tag) {\n case 1:\n {\n return new List([m$$19.fields[0], m$$19.fields[1]], acc$$8);\n }\n\n case 2:\n {\n $m$$19$$92 = m$$19.fields[2];\n $acc$$8$$93 = new List([m$$19.fields[0], m$$19.fields[1]], MapTreeModule$$$loop(m$$19.fields[3], acc$$8));\n continue MapTreeModule$$$loop;\n }\n\n default:\n {\n return acc$$8;\n }\n }\n\n break;\n }\n}\nexport function MapTreeModule$$$toList(m$$20) {\n return MapTreeModule$$$loop(m$$20, new List());\n}\nexport function MapTreeModule$$$ofList(comparer$$13, l$$20) {\n return fold$$1(function (acc$$9, tupledArg) {\n return MapTreeModule$$$add(comparer$$13, tupledArg[0], tupledArg[1], acc$$9);\n }, MapTreeModule$$$empty(), l$$20);\n}\nexport function MapTreeModule$$$mkFromEnumerator($comparer$$14$$97, $acc$$10$$98, $e$$99) {\n MapTreeModule$$$mkFromEnumerator: while (true) {\n const comparer$$14 = $comparer$$14$$97,\n acc$$10 = $acc$$10$$98,\n e = $e$$99;\n\n if (e.MoveNext()) {\n const patternInput$$2 = e.Current;\n $comparer$$14$$97 = comparer$$14;\n $acc$$10$$98 = MapTreeModule$$$add(comparer$$14, patternInput$$2[0], patternInput$$2[1], acc$$10);\n $e$$99 = e;\n continue MapTreeModule$$$mkFromEnumerator;\n } else {\n return acc$$10;\n }\n\n break;\n }\n}\nexport function MapTreeModule$$$ofArray(comparer$$15, arr) {\n let res$$2 = MapTreeModule$$$empty();\n\n for (let i = 0; i <= arr.length - 1; i++) {\n const patternInput$$3 = arr[i];\n res$$2 = MapTreeModule$$$add(comparer$$15, patternInput$$3[0], patternInput$$3[1], res$$2);\n }\n\n return res$$2;\n}\nexport function MapTreeModule$$$ofSeq(comparer$$16, c$$9) {\n const ie = getEnumerator(c$$9);\n\n try {\n return MapTreeModule$$$mkFromEnumerator(comparer$$16, MapTreeModule$$$empty(), ie);\n } finally {\n if (isDisposable(ie)) {\n ie.Dispose();\n }\n }\n}\nexport function MapTreeModule$$$copyToArray(s$$4, arr$$1, i$$1) {\n let j = i$$1 | 0;\n MapTreeModule$$$iter(function f$$16(x$$15, y$$2) {\n arr$$1[j] = [x$$15, y$$2];\n j = j + 1;\n }, s$$4);\n}\nexport const MapTreeModule$002EMapIterator$00602 = declare(function Map_MapTreeModule_MapIterator(arg1, arg2) {\n this.stack = arg1;\n this.started = arg2;\n}, Record);\nexport function MapTreeModule$002EMapIterator$00602$reflection($gen$$109, $gen$$110) {\n return record(\"Map.MapTreeModule.MapIterator`2\", [$gen$$109, $gen$$110], MapTreeModule$002EMapIterator$00602, () => [[\"stack\", list(MapTree$00602$reflection($gen$$109, $gen$$110))], [\"started\", bool]]);\n}\nexport function MapTreeModule$$$collapseLHS($stack$$111) {\n MapTreeModule$$$collapseLHS: while (true) {\n const stack = $stack$$111;\n\n if (stack.tail != null) {\n if (stack.head.tag === 1) {\n return stack;\n } else if (stack.head.tag === 2) {\n $stack$$111 = new List(stack.head.fields[2], new List(new MapTree$00602(1, \"MapOne\", stack.head.fields[0], stack.head.fields[1]), new List(stack.head.fields[3], stack.tail)));\n continue MapTreeModule$$$collapseLHS;\n } else {\n $stack$$111 = stack.tail;\n continue MapTreeModule$$$collapseLHS;\n }\n } else {\n return new List();\n }\n\n break;\n }\n}\nexport function MapTreeModule$$$mkIterator(s$$5) {\n return new MapTreeModule$002EMapIterator$00602(MapTreeModule$$$collapseLHS(new List(s$$5, new List())), false);\n}\nexport function MapTreeModule$$$notStarted() {\n throw new Error(\"enumeration not started\");\n}\nexport function MapTreeModule$$$alreadyFinished() {\n throw new Error(\"enumeration already finished\");\n}\nexport function MapTreeModule$$$current(i$$2) {\n if (i$$2.started) {\n const matchValue$$4 = i$$2.stack;\n\n if (matchValue$$4.tail == null) {\n return MapTreeModule$$$alreadyFinished();\n } else if (matchValue$$4.head.tag === 1) {\n return [matchValue$$4.head.fields[0], matchValue$$4.head.fields[1]];\n } else {\n throw new Error(\"Please report error: Map iterator, unexpected stack for current\");\n }\n } else {\n return MapTreeModule$$$notStarted();\n }\n}\nexport function MapTreeModule$$$moveNext(i$$3) {\n if (i$$3.started) {\n const matchValue$$5 = i$$3.stack;\n\n if (matchValue$$5.tail == null) {\n return false;\n } else if (matchValue$$5.head.tag === 1) {\n i$$3.stack = MapTreeModule$$$collapseLHS(matchValue$$5.tail);\n return !(i$$3.stack.tail == null);\n } else {\n throw new Error(\"Please report error: Map iterator, unexpected stack for moveNext\");\n }\n } else {\n i$$3.started = true;\n return !(i$$3.stack.tail == null);\n }\n}\nexport const MapTreeModule$002EmkIEnumerator$0027$00602 = declare(function Map_MapTreeModule_mkIEnumerator_(s$$6) {\n const $this$$1 = this;\n $this$$1.s = s$$6;\n $this$$1.i = MapTreeModule$$$mkIterator($this$$1.s);\n});\nexport function MapTreeModule$002EmkIEnumerator$0027$00602$reflection($gen$$115, $gen$$116) {\n return type(\"Map.MapTreeModule.mkIEnumerator'`2\", [$gen$$115, $gen$$116]);\n}\nexport function MapTreeModule$002EmkIEnumerator$0027$00602$$$$002Ector$$Z26BC498C(s$$6) {\n return this instanceof MapTreeModule$002EmkIEnumerator$0027$00602 ? MapTreeModule$002EmkIEnumerator$0027$00602.call(this, s$$6) : new MapTreeModule$002EmkIEnumerator$0027$00602(s$$6);\n}\nObject.defineProperty(MapTreeModule$002EmkIEnumerator$0027$00602.prototype, \"Current\", {\n \"get\": function () {\n const __ = this;\n return MapTreeModule$$$current(__.i);\n }\n});\n\nMapTreeModule$002EmkIEnumerator$0027$00602.prototype.MoveNext = function () {\n const __$$1 = this;\n return MapTreeModule$$$moveNext(__$$1.i);\n};\n\nMapTreeModule$002EmkIEnumerator$0027$00602.prototype.Reset = function () {\n const __$$2 = this;\n __$$2.i = MapTreeModule$$$mkIterator(__$$2.s);\n};\n\nMapTreeModule$002EmkIEnumerator$0027$00602.prototype.Dispose = function () {};\n\nexport function MapTreeModule$$$mkIEnumerator(s$$7) {\n return MapTreeModule$002EmkIEnumerator$0027$00602$$$$002Ector$$Z26BC498C(s$$7);\n}\nexport function MapTreeModule$$$toSeq(s$$8) {\n const en = MapTreeModule$$$mkIEnumerator(s$$8);\n return unfold(function generator(en$$1) {\n if (en$$1.MoveNext()) {\n return [en$$1.Current, en$$1];\n } else {\n return null;\n }\n }, en);\n}\nexport const FSharpMap = declare(function Map_Map(comparer$$17, tree) {\n const $this$$2 = this;\n $this$$2.comparer = comparer$$17;\n $this$$2.tree = tree;\n});\nexport function FSharpMap$reflection($gen$$120, $gen$$121) {\n return type(\"Map.FSharpMap\", [$gen$$120, $gen$$121]);\n}\nexport function FSharpMap$$$$002Ector$$58ADD115(comparer$$17, tree) {\n return this instanceof FSharpMap ? FSharpMap.call(this, comparer$$17, tree) : new FSharpMap(comparer$$17, tree);\n}\nexport function FSharpMap$$get_Comparer(__$$4) {\n return __$$4.comparer;\n}\nexport function FSharpMap$$get_Tree(__$$5) {\n return __$$5.tree;\n}\nexport function FSharpMap$$Add$$5BDDA1(__$$6, k$$28, v$$24) {\n return FSharpMap$$$$002Ector$$58ADD115(__$$6.comparer, MapTreeModule$$$add(__$$6.comparer, k$$28, v$$24, __$$6.tree));\n}\nexport function FSharpMap$$get_IsEmpty(__$$7) {\n return MapTreeModule$$$isEmpty(__$$7.tree);\n}\nexport function FSharpMap$$get_Item$$2B595(__$$8, k$$29) {\n return MapTreeModule$$$find(__$$8.comparer, k$$29, __$$8.tree);\n}\nexport function FSharpMap$$TryGetValue$$5BDDA1(__$$9, k$$30, defValue) {\n const matchValue$$6 = MapTreeModule$$$tryFind(__$$9.comparer, k$$30, __$$9.tree);\n\n if (matchValue$$6 == null) {\n return [false, defValue];\n } else {\n const v$$25 = value$$3(matchValue$$6);\n return [true, v$$25];\n }\n}\nexport function FSharpMap$$TryPick$$72321DD7(__$$10, f$$17) {\n return MapTreeModule$$$tryPick(f$$17, __$$10.tree);\n}\nexport function FSharpMap$$Exists$$Z395DDC35(__$$11, f$$18) {\n return MapTreeModule$$$exists(f$$18, __$$11.tree);\n}\nexport function FSharpMap$$Filter$$Z395DDC35(__$$12, f$$19) {\n return FSharpMap$$$$002Ector$$58ADD115(__$$12.comparer, MapTreeModule$$$filter(__$$12.comparer, f$$19, __$$12.tree));\n}\nexport function FSharpMap$$ForAll$$Z395DDC35(__$$13, f$$20) {\n return MapTreeModule$$$forall(f$$20, __$$13.tree);\n}\nexport function FSharpMap$$Fold(__$$14, f$$21, acc$$11) {\n return MapTreeModule$$$foldBack(f$$21, __$$14.tree, acc$$11);\n}\nexport function FSharpMap$$FoldSection(__$$15, lo$$2, hi$$2, f$$22, acc$$12) {\n return MapTreeModule$$$foldSection(__$$15.comparer, lo$$2, hi$$2, f$$22, __$$15.tree, acc$$12);\n}\nexport function FSharpMap$$Iterate$$1DCFB91D(__$$16, f$$23) {\n MapTreeModule$$$iter(f$$23, __$$16.tree);\n}\nexport function FSharpMap$$MapRange$$6DC7247(__$$17, f$$24) {\n return FSharpMap$$$$002Ector$$58ADD115(__$$17.comparer, MapTreeModule$$$map(f$$24, __$$17.tree));\n}\nexport function FSharpMap$$Map$$Z6F6B671C(__$$18, f$$25) {\n return FSharpMap$$$$002Ector$$58ADD115(__$$18.comparer, MapTreeModule$$$mapi(f$$25, __$$18.tree));\n}\nexport function FSharpMap$$Partition$$Z395DDC35(__$$19, f$$26) {\n const patternInput$$4 = MapTreeModule$$$partition(__$$19.comparer, f$$26, __$$19.tree);\n return [FSharpMap$$$$002Ector$$58ADD115(__$$19.comparer, patternInput$$4[0]), FSharpMap$$$$002Ector$$58ADD115(__$$19.comparer, patternInput$$4[1])];\n}\nexport function FSharpMap$$get_Count(__$$20) {\n return MapTreeModule$$$size(__$$20.tree);\n}\nexport function FSharpMap$$ContainsKey$$2B595(__$$21, k$$31) {\n return MapTreeModule$$$mem(__$$21.comparer, k$$31, __$$21.tree);\n}\nexport function FSharpMap$$Remove$$2B595(__$$22, k$$32) {\n return FSharpMap$$$$002Ector$$58ADD115(__$$22.comparer, MapTreeModule$$$remove(__$$22.comparer, k$$32, __$$22.tree));\n}\nexport function FSharpMap$$TryFind$$2B595(__$$23, k$$33) {\n return MapTreeModule$$$tryFind(__$$23.comparer, k$$33, __$$23.tree);\n}\nexport function FSharpMap$$ToList(__$$24) {\n return MapTreeModule$$$toList(__$$24.tree);\n}\n\nFSharpMap.prototype.toString = function () {\n const this$ = this;\n let str;\n let strings;\n strings = map$$2(function toStr(kv) {\n return format(\"({0}, {1})\", kv[0], kv[1]);\n }, this$);\n str = join(\"; \", strings);\n return \"map [\" + str + \"]\";\n};\n\nFSharpMap.prototype.GetHashCode = function () {\n const this$$$1 = this;\n\n const combineHash = function combineHash(x$$16, y$$3) {\n return (x$$16 << 1) + y$$3 + 631;\n };\n\n let res$$3 = 0;\n const e$$1 = MapTreeModule$$$mkIEnumerator(FSharpMap$$get_Tree(this$$$1));\n\n while (e$$1.MoveNext()) {\n const patternInput$$5 = e$$1.Current;\n const activePatternResult3709 = patternInput$$5;\n res$$3 = combineHash(res$$3, structuralHash(activePatternResult3709[0]));\n res$$3 = combineHash(res$$3, structuralHash(activePatternResult3709[1]));\n }\n\n return Math.abs(res$$3) | 0;\n};\n\nFSharpMap.prototype.Equals = function (that) {\n const this$$$2 = this;\n return this$$$2.CompareTo(that) === 0;\n};\n\nFSharpMap.prototype[Symbol.iterator] = function () {\n const __$$25 = this;\n return toIterator(MapTreeModule$$$mkIEnumerator(__$$25.tree));\n};\n\nFSharpMap.prototype.CompareTo = function (obj) {\n const m$$22 = this;\n let res$$4 = 0;\n let finished = false;\n const e1 = MapTreeModule$$$mkIEnumerator(FSharpMap$$get_Tree(m$$22));\n\n try {\n const e2 = MapTreeModule$$$mkIEnumerator(FSharpMap$$get_Tree(obj));\n\n try {\n while (!finished ? res$$4 === 0 : false) {\n const matchValue$$7 = [e1.MoveNext(), e2.MoveNext()];\n\n if (matchValue$$7[0]) {\n if (matchValue$$7[1]) {\n const kvp1 = e1.Current;\n const kvp2 = e2.Current;\n const c$$10 = m$$22.comparer.Compare(kvp1[0], kvp2[0]) | 0;\n res$$4 = c$$10 !== 0 ? c$$10 : compare(kvp1[1], kvp2[1]);\n } else {\n res$$4 = 1;\n }\n } else if (matchValue$$7[1]) {\n res$$4 = -1;\n } else {\n finished = true;\n }\n }\n\n return res$$4 | 0;\n } finally {\n if (isDisposable(e2)) {\n e2.Dispose();\n }\n }\n } finally {\n if (isDisposable(e1)) {\n e1.Dispose();\n }\n }\n};\n\nObject.defineProperty(FSharpMap.prototype, \"size\", {\n \"get\": function () {\n const this$$$3 = this;\n return FSharpMap$$get_Count(this$$$3) | 0;\n }\n});\n\nFSharpMap.prototype.clear = function () {\n throw new Error(\"Map cannot be mutated\");\n};\n\nFSharpMap.prototype.delete = function (_arg1$$1) {\n throw new Error(\"Map cannot be mutated\");\n};\n\nFSharpMap.prototype.entries = function () {\n const this$$$4 = this;\n return MapTreeModule$$$toSeq(FSharpMap$$get_Tree(this$$$4));\n};\n\nFSharpMap.prototype.get = function (k$$34) {\n const this$$$5 = this;\n return FSharpMap$$get_Item$$2B595(this$$$5, k$$34);\n};\n\nFSharpMap.prototype.has = function (k$$35) {\n const this$$$6 = this;\n return FSharpMap$$ContainsKey$$2B595(this$$$6, k$$35);\n};\n\nFSharpMap.prototype.keys = function () {\n const this$$$7 = this;\n const source$$1 = MapTreeModule$$$toSeq(FSharpMap$$get_Tree(this$$$7));\n return map$$2(function mapping(kv$$1) {\n return kv$$1[0];\n }, source$$1);\n};\n\nFSharpMap.prototype.set = function (k$$36, v$$26) {\n throw new Error(\"Map cannot be mutated\");\n};\n\nFSharpMap.prototype.values = function () {\n const this$$$8 = this;\n const source$$2 = MapTreeModule$$$toSeq(FSharpMap$$get_Tree(this$$$8));\n return map$$2(function mapping$$1(kv$$2) {\n return kv$$2[1];\n }, source$$2);\n};\n\nexport function isEmpty(m$$23) {\n return FSharpMap$$get_IsEmpty(m$$23);\n}\nexport function add(k$$37, v$$27, m$$24) {\n return FSharpMap$$Add$$5BDDA1(m$$24, k$$37, v$$27);\n}\nexport function find(k$$38, m$$25) {\n return FSharpMap$$get_Item$$2B595(m$$25, k$$38);\n}\nexport function tryFind(k$$39, m$$26) {\n return FSharpMap$$TryFind$$2B595(m$$26, k$$39);\n}\nexport function remove(k$$40, m$$27) {\n return FSharpMap$$Remove$$2B595(m$$27, k$$40);\n}\nexport function containsKey(k$$41, m$$28) {\n return FSharpMap$$ContainsKey$$2B595(m$$28, k$$41);\n}\nexport function iterate(f$$27, m$$29) {\n FSharpMap$$Iterate$$1DCFB91D(m$$29, f$$27);\n}\nexport function tryPick(f$$28, m$$30) {\n return FSharpMap$$TryPick$$72321DD7(m$$30, f$$28);\n}\nexport function pick(f$$29, m$$31) {\n const matchValue$$8 = tryPick(f$$29, m$$31);\n\n if (matchValue$$8 != null) {\n const res$$5 = value$$3(matchValue$$8);\n return res$$5;\n } else {\n throw new Error(\"key not found\");\n }\n}\nexport function exists(f$$30, m$$32) {\n return FSharpMap$$Exists$$Z395DDC35(m$$32, f$$30);\n}\nexport function filter(f$$31, m$$33) {\n return FSharpMap$$Filter$$Z395DDC35(m$$33, f$$31);\n}\nexport function partition(f$$32, m$$34) {\n return FSharpMap$$Partition$$Z395DDC35(m$$34, f$$32);\n}\nexport function forAll(f$$33, m$$35) {\n return FSharpMap$$ForAll$$Z395DDC35(m$$35, f$$33);\n}\nexport function mapRange(f$$34, m$$36) {\n return FSharpMap$$MapRange$$6DC7247(m$$36, f$$34);\n}\nexport function map(f$$35, m$$37) {\n return FSharpMap$$Map$$Z6F6B671C(m$$37, f$$35);\n}\nexport function fold(f$$36, z, m$$38) {\n return MapTreeModule$$$fold(f$$36, z, FSharpMap$$get_Tree(m$$38));\n}\nexport function foldBack(f$$37, m$$39, z$$1) {\n return MapTreeModule$$$foldBack(f$$37, FSharpMap$$get_Tree(m$$39), z$$1);\n}\nexport function toSeq(m$$40) {\n return MapTreeModule$$$toSeq(FSharpMap$$get_Tree(m$$40));\n}\nexport function findKey(f$$38, m$$41) {\n let _arg1$$2;\n\n const m$$42 = FSharpMap$$get_Tree(m$$41);\n _arg1$$2 = MapTreeModule$$$tryPick(function f$$39(k$$42, v$$28) {\n if (f$$38(k$$42, v$$28)) {\n return some(k$$42);\n } else {\n return null;\n }\n }, m$$42);\n\n if (_arg1$$2 == null) {\n throw new Error(\"Key not found\");\n } else {\n const k$$43 = value$$3(_arg1$$2);\n return k$$43;\n }\n}\nexport function tryFindKey(f$$40, m$$43) {\n const m$$44 = FSharpMap$$get_Tree(m$$43);\n return MapTreeModule$$$tryPick(function f$$41(k$$44, v$$29) {\n if (f$$40(k$$44, v$$29)) {\n return some(k$$44);\n } else {\n return null;\n }\n }, m$$44);\n}\nexport function ofList(l$$22, comparer$$18) {\n return FSharpMap$$$$002Ector$$58ADD115(comparer$$18, MapTreeModule$$$ofList(comparer$$18, l$$22));\n}\nexport function ofSeq(l$$23, comparer$$19) {\n return FSharpMap$$$$002Ector$$58ADD115(comparer$$19, MapTreeModule$$$ofSeq(comparer$$19, l$$23));\n}\nexport function ofArray(array, comparer$$20) {\n return FSharpMap$$$$002Ector$$58ADD115(comparer$$20, MapTreeModule$$$ofArray(comparer$$20, array));\n}\nexport function toList(m$$45) {\n return FSharpMap$$ToList(m$$45);\n}\nexport function toArray(m$$46) {\n let res$$6;\n const len = FSharpMap$$get_Count(m$$46) | 0;\n res$$6 = new Array(len);\n MapTreeModule$$$copyToArray(FSharpMap$$get_Tree(m$$46), res$$6, 0);\n return res$$6;\n}\nexport function empty(comparer$$21) {\n return FSharpMap$$$$002Ector$$58ADD115(comparer$$21, new MapTree$00602(0, \"MapEmpty\"));\n}\n\nfunction createMutablePrivate(comparer$$22, tree$0027) {\n let tree$$1 = tree$0027;\n return {\n get size() {\n return MapTreeModule$$$size(tree$$1);\n },\n\n clear() {\n tree$$1 = new MapTree$00602(0, \"MapEmpty\");\n },\n\n delete(x$$18) {\n if (MapTreeModule$$$mem(comparer$$22, x$$18, tree$$1)) {\n tree$$1 = MapTreeModule$$$remove(comparer$$22, x$$18, tree$$1);\n return true;\n } else {\n return false;\n }\n },\n\n entries() {\n return MapTreeModule$$$toSeq(tree$$1);\n },\n\n get(k$$45) {\n return MapTreeModule$$$find(comparer$$22, k$$45, tree$$1);\n },\n\n has(x$$19) {\n return MapTreeModule$$$mem(comparer$$22, x$$19, tree$$1);\n },\n\n keys() {\n const source$$3 = MapTreeModule$$$toSeq(tree$$1);\n return map$$2(function mapping$$2(kv$$3) {\n return kv$$3[0];\n }, source$$3);\n },\n\n set(k$$46, v$$30) {\n const this$$$9 = this;\n tree$$1 = MapTreeModule$$$add(comparer$$22, k$$46, v$$30, tree$$1);\n return this$$$9;\n },\n\n values() {\n const source$$4 = MapTreeModule$$$toSeq(tree$$1);\n return map$$2(function mapping$$3(kv$$4) {\n return kv$$4[1];\n }, source$$4);\n },\n\n [Symbol.iterator]() {\n return toIterator(MapTreeModule$$$mkIEnumerator(tree$$1));\n },\n\n GetEnumerator() {\n return MapTreeModule$$$mkIEnumerator(tree$$1);\n }\n\n };\n}\n\nexport function createMutable(source$$5, comparer$$23) {\n const map$$1 = MutableMap$002400602$0024$0024$0024$0024002Ector$0024$00246623D9B3(source$$5, comparer$$23);\n return map$$1;\n}\nexport function groupBy(projection, xs, comparer$$24) {\n const dict = createMutable(empty$$1(), comparer$$24);\n iterate$$1(function (v$$31) {\n const key = projection(v$$31);\n\n if (dict.has(key)) {\n void dict.get(key).push(v$$31);\n } else {\n const value = dict.set(key, [v$$31]);\n void value;\n }\n }, xs);\n return map$$2(function mapping$$4(kv$$5) {\n return [kv$$5[0], kv$$5[1]];\n }, dict);\n}\nexport function countBy(projection$$1, xs$$1, comparer$$25) {\n const dict$$1 = createMutable(empty$$1(), comparer$$25);\n iterate$$1(function (value$$1) {\n const key$$1 = projection$$1(value$$1);\n const value$$2 = dict$$1.has(key$$1) ? dict$$1.set(key$$1, dict$$1.get(key$$1) + 1) : dict$$1.set(key$$1, 1);\n void value$$2;\n }, xs$$1);\n return map$$2(function mapping$$5(kv$$6) {\n return [kv$$6[0], kv$$6[1]];\n }, dict$$1);\n}\nexport function count(m$$47) {\n return FSharpMap$$get_Count(m$$47);\n}","import { declare, FSharpRef } from \"./Types.js\";\nimport { iterateIndexed, toIterator, getEnumerator, delay, collect, map, sumBy, iterate } from \"./Seq.js\";\nimport { type } from \"./Reflection.js\";\nimport { getItemFromDict, tryGetValue } from \"./Util.js\";\nimport { some } from \"./Option.js\";\nexport const MutableSet$00601 = declare(function Fable_Collections_MutableSet(items, comparer) {\n const $this$$1 = this;\n const this$ = new FSharpRef(null);\n $this$$1.comparer = comparer;\n this$.contents = $this$$1;\n $this$$1.hashMap = new Map([]);\n $this$$1[\"init@21-2\"] = 1;\n iterate(function (item) {\n const value = MutableSet$00601$$Add$$2B595(this$.contents, item);\n void value;\n }, items);\n});\nexport function MutableSet$00601$reflection($gen$$4) {\n return type(\"Fable.Collections.MutableSet`1\", [$gen$$4]);\n}\nexport function MutableSet$00601$$$$002Ector$$Z6150332D(items, comparer) {\n return this instanceof MutableSet$00601 ? MutableSet$00601.call(this, items, comparer) : new MutableSet$00601(items, comparer);\n}\n\nfunction MutableSet$00601$$TryFindIndex$$2B595(this$$$1, k) {\n const h = this$$$1.comparer.GetHashCode(k) | 0;\n const matchValue = tryGetValue(this$$$1.hashMap, h, null);\n\n if (matchValue[0]) {\n return [true, h, matchValue[1].findIndex(function (v) {\n return this$$$1.comparer.Equals(k, v);\n })];\n } else {\n return [false, h, -1];\n }\n}\n\nfunction MutableSet$00601$$TryFind$$2B595(this$$$2, k$$1) {\n const matchValue$$1 = MutableSet$00601$$TryFindIndex$$2B595(this$$$2, k$$1);\n var $target$$9;\n\n if (matchValue$$1[0]) {\n if (matchValue$$1[2] > -1) {\n $target$$9 = 0;\n } else {\n $target$$9 = 1;\n }\n } else {\n $target$$9 = 1;\n }\n\n switch ($target$$9) {\n case 0:\n {\n return some(getItemFromDict(this$$$2.hashMap, matchValue$$1[1])[matchValue$$1[2]]);\n }\n\n case 1:\n {\n return null;\n }\n }\n}\n\nexport function MutableSet$00601$$get_Comparer(this$$$3) {\n return this$$$3.comparer;\n}\nexport function MutableSet$00601$$Clear(this$$$4) {\n this$$$4.hashMap.clear();\n}\nexport function MutableSet$00601$$get_Count(this$$$5) {\n const source = this$$$5.hashMap.values();\n return sumBy(function projection(pairs) {\n return pairs.length;\n }, source, {\n GetZero() {\n return 0;\n },\n\n Add($x$$2, $y$$3) {\n return $x$$2 + $y$$3;\n }\n\n }) | 0;\n}\nexport function MutableSet$00601$$Add$$2B595(this$$$6, k$$2) {\n const matchValue$$2 = MutableSet$00601$$TryFindIndex$$2B595(this$$$6, k$$2);\n var $target$$16;\n\n if (matchValue$$2[0]) {\n if (matchValue$$2[2] > -1) {\n $target$$16 = 0;\n } else {\n $target$$16 = 1;\n }\n } else {\n $target$$16 = 1;\n }\n\n switch ($target$$16) {\n case 0:\n {\n return false;\n }\n\n case 1:\n {\n if (matchValue$$2[0]) {\n const value$$1 = void getItemFromDict(this$$$6.hashMap, matchValue$$2[1]).push(k$$2);\n void null;\n return true;\n } else {\n this$$$6.hashMap.set(matchValue$$2[1], [k$$2]);\n return true;\n }\n }\n }\n}\nexport function MutableSet$00601$$Contains$$2B595(this$$$7, k$$3) {\n const matchValue$$3 = MutableSet$00601$$TryFindIndex$$2B595(this$$$7, k$$3);\n var $target$$19;\n\n if (matchValue$$3[0]) {\n if (matchValue$$3[2] > -1) {\n $target$$19 = 0;\n } else {\n $target$$19 = 1;\n }\n } else {\n $target$$19 = 1;\n }\n\n switch ($target$$19) {\n case 0:\n {\n return true;\n }\n\n case 1:\n {\n return false;\n }\n }\n}\nexport function MutableSet$00601$$Remove$$2B595(this$$$8, k$$4) {\n const matchValue$$4 = MutableSet$00601$$TryFindIndex$$2B595(this$$$8, k$$4);\n var $target$$22;\n\n if (matchValue$$4[0]) {\n if (matchValue$$4[2] > -1) {\n $target$$22 = 0;\n } else {\n $target$$22 = 1;\n }\n } else {\n $target$$22 = 1;\n }\n\n switch ($target$$22) {\n case 0:\n {\n getItemFromDict(this$$$8.hashMap, matchValue$$4[1]).splice(matchValue$$4[2], 1);\n return true;\n }\n\n case 1:\n {\n return false;\n }\n }\n}\n\nMutableSet$00601.prototype[Symbol.iterator] = function () {\n var elems;\n const this$$$9 = this;\n return toIterator((elems = delay(function () {\n return collect(function (values$$1) {\n return map(function (value$$2) {\n return value$$2;\n }, values$$1);\n }, this$$$9.hashMap.values());\n }), getEnumerator(elems)));\n};\n\nMutableSet$00601.prototype.Add = function (item$$1) {\n const this$$$10 = this;\n const value$$3 = MutableSet$00601$$Add$$2B595(this$$$10, item$$1);\n void value$$3;\n};\n\nMutableSet$00601.prototype.Clear = function () {\n const this$$$11 = this;\n MutableSet$00601$$Clear(this$$$11);\n};\n\nMutableSet$00601.prototype.Contains = function (item$$2) {\n const this$$$12 = this;\n return MutableSet$00601$$Contains$$2B595(this$$$12, item$$2);\n};\n\nMutableSet$00601.prototype.CopyTo = function (array, arrayIndex) {\n const this$$$13 = this;\n iterateIndexed(function action(i$$8, e) {\n array[arrayIndex + i$$8] = e;\n }, this$$$13);\n};\n\nObject.defineProperty(MutableSet$00601.prototype, \"Count\", {\n \"get\": function () {\n const this$$$14 = this;\n return MutableSet$00601$$get_Count(this$$$14) | 0;\n }\n});\nObject.defineProperty(MutableSet$00601.prototype, \"IsReadOnly\", {\n \"get\": function () {\n return false;\n }\n});\n\nMutableSet$00601.prototype.Remove = function (item$$3) {\n const this$$$16 = this;\n return MutableSet$00601$$Remove$$2B595(this$$$16, item$$3);\n};\n\nObject.defineProperty(MutableSet$00601.prototype, \"size\", {\n \"get\": function () {\n const this$$$17 = this;\n return MutableSet$00601$$get_Count(this$$$17) | 0;\n }\n});\n\nMutableSet$00601.prototype.add = function (k$$5) {\n const this$$$18 = this;\n const value$$4 = MutableSet$00601$$Add$$2B595(this$$$18, k$$5);\n void value$$4;\n return this$$$18;\n};\n\nMutableSet$00601.prototype.add_ = function (k$$6) {\n const this$$$19 = this;\n return MutableSet$00601$$Add$$2B595(this$$$19, k$$6);\n};\n\nMutableSet$00601.prototype.clear = function () {\n const this$$$20 = this;\n MutableSet$00601$$Clear(this$$$20);\n};\n\nMutableSet$00601.prototype.delete = function (k$$7) {\n const this$$$21 = this;\n return MutableSet$00601$$Remove$$2B595(this$$$21, k$$7);\n};\n\nMutableSet$00601.prototype.has = function (k$$8) {\n const this$$$22 = this;\n return MutableSet$00601$$Contains$$2B595(this$$$22, k$$8);\n};\n\nMutableSet$00601.prototype.keys = function () {\n const this$$$23 = this;\n return map(function mapping(x) {\n return x;\n }, this$$$23);\n};\n\nMutableSet$00601.prototype.values = function () {\n const this$$$24 = this;\n return map(function mapping$$1(x$$1) {\n return x$$1;\n }, this$$$24);\n};\n\nMutableSet$00601.prototype.entries = function () {\n const this$$$25 = this;\n return map(function mapping$$2(v$$1) {\n return [v$$1, v$$1];\n }, this$$$25);\n};","import { List, Record, declare, Union } from \"./Types.js\";\nimport { type, record, bool, list, union as union$$1, int32 } from \"./Reflection.js\";\nimport { value as value$$2, some, Choice } from \"./Option.js\";\nimport { iterate as iterate$$1, delay, collect, singleton as singleton$$1, empty as empty$$1, fold as fold$$1, toIterator, map as map$$1, reduce, getEnumerator, unfold } from \"./Seq.js\";\nimport { structuralHash, isDisposable } from \"./Util.js\";\nimport { join } from \"./String.js\";\nimport { MutableSet$00601$$Add$$2B595 as MutableSet$002400601$0024$0024Add$0024$00242B595, MutableSet$00601$$$$002Ector$$Z6150332D as MutableSet$002400601$0024$0024$0024$0024002Ector$0024$0024Z6150332D } from \"./MutableSet\";\nexport const SetTree$00601 = declare(function Set_SetTree(tag, name, ...fields) {\n Union.call(this, tag, name, ...fields);\n}, Union);\nexport function SetTree$00601$reflection($gen$$3) {\n return union$$1(\"Set.SetTree`1\", [$gen$$3], SetTree$00601, () => [\"SetEmpty\", [\"SetNode\", [[\"Item1\", $gen$$3], [\"Item2\", SetTree$00601$reflection($gen$$3)], [\"Item3\", SetTree$00601$reflection($gen$$3)], [\"Item4\", int32]]], [\"SetOne\", [[\"Item\", $gen$$3]]]]);\n}\nexport function SetTreeModule$$$countAux($s$$4, $acc$$5) {\n SetTreeModule$$$countAux: while (true) {\n const s = $s$$4,\n acc = $acc$$5;\n\n switch (s.tag) {\n case 2:\n {\n return acc + 1 | 0;\n }\n\n case 0:\n {\n return acc | 0;\n }\n\n default:\n {\n $s$$4 = s.fields[1];\n $acc$$5 = SetTreeModule$$$countAux(s.fields[2], acc + 1);\n continue SetTreeModule$$$countAux;\n }\n }\n\n break;\n }\n}\nexport function SetTreeModule$$$count(s$$1) {\n return SetTreeModule$$$countAux(s$$1, 0);\n}\nexport function SetTreeModule$$$SetOne(n) {\n return new SetTree$00601(2, \"SetOne\", n);\n}\nexport function SetTreeModule$$$SetNode(x, l$$1, r$$1, h) {\n return new SetTree$00601(1, \"SetNode\", x, l$$1, r$$1, h);\n}\nexport function SetTreeModule$$$height(t) {\n switch (t.tag) {\n case 2:\n {\n return 1;\n }\n\n case 1:\n {\n return t.fields[3] | 0;\n }\n\n default:\n {\n return 0;\n }\n }\n}\nexport const SetTreeModule$$$tolerance = 2;\nexport function SetTreeModule$$$mk(l$$2, k, r$$2) {\n var $target$$16;\n\n if (l$$2.tag === 0) {\n if (r$$2.tag === 0) {\n $target$$16 = 0;\n } else {\n $target$$16 = 1;\n }\n } else {\n $target$$16 = 1;\n }\n\n switch ($target$$16) {\n case 0:\n {\n return SetTreeModule$$$SetOne(k);\n }\n\n case 1:\n {\n const hl = SetTreeModule$$$height(l$$2) | 0;\n const hr = SetTreeModule$$$height(r$$2) | 0;\n const m = (hl < hr ? hr : hl) | 0;\n return SetTreeModule$$$SetNode(k, l$$2, r$$2, m + 1);\n }\n }\n}\nexport function SetTreeModule$$$rebalance(t1, k$$1, t2) {\n const t1h = SetTreeModule$$$height(t1) | 0;\n const t2h = SetTreeModule$$$height(t2) | 0;\n\n if (t2h > t1h + SetTreeModule$$$tolerance) {\n if (t2.tag === 1) {\n if (SetTreeModule$$$height(t2.fields[1]) > t1h + 1) {\n if (t2.fields[1].tag === 1) {\n return SetTreeModule$$$mk(SetTreeModule$$$mk(t1, k$$1, t2.fields[1].fields[1]), t2.fields[1].fields[0], SetTreeModule$$$mk(t2.fields[1].fields[2], t2.fields[0], t2.fields[2]));\n } else {\n throw new Error(\"rebalance\");\n }\n } else {\n return SetTreeModule$$$mk(SetTreeModule$$$mk(t1, k$$1, t2.fields[1]), t2.fields[0], t2.fields[2]);\n }\n } else {\n throw new Error(\"rebalance\");\n }\n } else if (t1h > t2h + SetTreeModule$$$tolerance) {\n if (t1.tag === 1) {\n if (SetTreeModule$$$height(t1.fields[2]) > t2h + 1) {\n if (t1.fields[2].tag === 1) {\n return SetTreeModule$$$mk(SetTreeModule$$$mk(t1.fields[1], t1.fields[0], t1.fields[2].fields[1]), t1.fields[2].fields[0], SetTreeModule$$$mk(t1.fields[2].fields[2], k$$1, t2));\n } else {\n throw new Error(\"rebalance\");\n }\n } else {\n return SetTreeModule$$$mk(t1.fields[1], t1.fields[0], SetTreeModule$$$mk(t1.fields[2], k$$1, t2));\n }\n } else {\n throw new Error(\"rebalance\");\n }\n } else {\n return SetTreeModule$$$mk(t1, k$$1, t2);\n }\n}\nexport function SetTreeModule$$$add(comparer, k$$2, t$$1) {\n switch (t$$1.tag) {\n case 2:\n {\n const c$$1 = comparer.Compare(k$$2, t$$1.fields[0]) | 0;\n\n if (c$$1 < 0) {\n return SetTreeModule$$$SetNode(k$$2, new SetTree$00601(0, \"SetEmpty\"), t$$1, 2);\n } else if (c$$1 === 0) {\n return t$$1;\n } else {\n return SetTreeModule$$$SetNode(k$$2, t$$1, new SetTree$00601(0, \"SetEmpty\"), 2);\n }\n }\n\n case 0:\n {\n return SetTreeModule$$$SetOne(k$$2);\n }\n\n default:\n {\n const c = comparer.Compare(k$$2, t$$1.fields[0]) | 0;\n\n if (c < 0) {\n return SetTreeModule$$$rebalance(SetTreeModule$$$add(comparer, k$$2, t$$1.fields[1]), t$$1.fields[0], t$$1.fields[2]);\n } else if (c === 0) {\n return t$$1;\n } else {\n return SetTreeModule$$$rebalance(t$$1.fields[1], t$$1.fields[0], SetTreeModule$$$add(comparer, k$$2, t$$1.fields[2]));\n }\n }\n }\n}\nexport function SetTreeModule$$$balance(comparer$$1, t1$$1, k$$3, t2$$1) {\n var $target$$27, t2$$2, t1$$2, k1, t2$$3, k2$$2, t1$$3, h1, h2, k1$$1, k2$$3, t11, t12, t21, t22;\n\n if (t1$$1.tag === 2) {\n if (t2$$1.tag === 0) {\n $target$$27 = 1;\n t1$$2 = t1$$1;\n } else if (t2$$1.tag === 2) {\n $target$$27 = 2;\n k1 = t1$$1.fields[0];\n t2$$3 = t2$$1;\n } else {\n $target$$27 = 2;\n k1 = t1$$1.fields[0];\n t2$$3 = t2$$1;\n }\n } else if (t1$$1.tag === 1) {\n if (t2$$1.tag === 2) {\n $target$$27 = 3;\n k2$$2 = t2$$1.fields[0];\n t1$$3 = t1$$1;\n } else if (t2$$1.tag === 1) {\n $target$$27 = 4;\n h1 = t1$$1.fields[3];\n h2 = t2$$1.fields[3];\n k1$$1 = t1$$1.fields[0];\n k2$$3 = t2$$1.fields[0];\n t11 = t1$$1.fields[1];\n t12 = t1$$1.fields[2];\n t21 = t2$$1.fields[1];\n t22 = t2$$1.fields[2];\n } else {\n $target$$27 = 1;\n t1$$2 = t1$$1;\n }\n } else {\n $target$$27 = 0;\n t2$$2 = t2$$1;\n }\n\n switch ($target$$27) {\n case 0:\n {\n return SetTreeModule$$$add(comparer$$1, k$$3, t2$$2);\n }\n\n case 1:\n {\n return SetTreeModule$$$add(comparer$$1, k$$3, t1$$2);\n }\n\n case 2:\n {\n return SetTreeModule$$$add(comparer$$1, k$$3, SetTreeModule$$$add(comparer$$1, k1, t2$$3));\n }\n\n case 3:\n {\n return SetTreeModule$$$add(comparer$$1, k$$3, SetTreeModule$$$add(comparer$$1, k2$$2, t1$$3));\n }\n\n case 4:\n {\n if (h1 + SetTreeModule$$$tolerance < h2) {\n return SetTreeModule$$$rebalance(SetTreeModule$$$balance(comparer$$1, t1$$1, k$$3, t21), k2$$3, t22);\n } else if (h2 + SetTreeModule$$$tolerance < h1) {\n return SetTreeModule$$$rebalance(t11, k1$$1, SetTreeModule$$$balance(comparer$$1, t12, k$$3, t2$$1));\n } else {\n return SetTreeModule$$$mk(t1$$1, k$$3, t2$$1);\n }\n }\n }\n}\nexport function SetTreeModule$$$split(comparer$$2, pivot, t$$2) {\n switch (t$$2.tag) {\n case 2:\n {\n const c$$3 = comparer$$2.Compare(t$$2.fields[0], pivot) | 0;\n\n if (c$$3 < 0) {\n return [t$$2, false, new SetTree$00601(0, \"SetEmpty\")];\n } else if (c$$3 === 0) {\n return [new SetTree$00601(0, \"SetEmpty\"), true, new SetTree$00601(0, \"SetEmpty\")];\n } else {\n return [new SetTree$00601(0, \"SetEmpty\"), false, t$$2];\n }\n }\n\n case 0:\n {\n return [new SetTree$00601(0, \"SetEmpty\"), false, new SetTree$00601(0, \"SetEmpty\")];\n }\n\n default:\n {\n const c$$2 = comparer$$2.Compare(pivot, t$$2.fields[0]) | 0;\n\n if (c$$2 < 0) {\n const patternInput = SetTreeModule$$$split(comparer$$2, pivot, t$$2.fields[1]);\n return [patternInput[0], patternInput[1], SetTreeModule$$$balance(comparer$$2, patternInput[2], t$$2.fields[0], t$$2.fields[2])];\n } else if (c$$2 === 0) {\n return [t$$2.fields[1], true, t$$2.fields[2]];\n } else {\n const patternInput$$1 = SetTreeModule$$$split(comparer$$2, pivot, t$$2.fields[2]);\n return [SetTreeModule$$$balance(comparer$$2, t$$2.fields[1], t$$2.fields[0], patternInput$$1[0]), patternInput$$1[1], patternInput$$1[2]];\n }\n }\n }\n}\nexport function SetTreeModule$$$spliceOutSuccessor(t$$3) {\n switch (t$$3.tag) {\n case 2:\n {\n return [t$$3.fields[0], new SetTree$00601(0, \"SetEmpty\")];\n }\n\n case 1:\n {\n if (t$$3.fields[1].tag === 0) {\n return [t$$3.fields[0], t$$3.fields[2]];\n } else {\n const patternInput$$2 = SetTreeModule$$$spliceOutSuccessor(t$$3.fields[1]);\n return [patternInput$$2[0], SetTreeModule$$$mk(patternInput$$2[1], t$$3.fields[0], t$$3.fields[2])];\n }\n }\n\n default:\n {\n throw new Error(\"internal error: Set.spliceOutSuccessor\");\n }\n }\n}\nexport function SetTreeModule$$$remove(comparer$$3, k$$4, t$$4) {\n switch (t$$4.tag) {\n case 2:\n {\n const c$$4 = comparer$$3.Compare(k$$4, t$$4.fields[0]) | 0;\n\n if (c$$4 === 0) {\n return new SetTree$00601(0, \"SetEmpty\");\n } else {\n return t$$4;\n }\n }\n\n case 1:\n {\n const c$$5 = comparer$$3.Compare(k$$4, t$$4.fields[0]) | 0;\n\n if (c$$5 < 0) {\n return SetTreeModule$$$rebalance(SetTreeModule$$$remove(comparer$$3, k$$4, t$$4.fields[1]), t$$4.fields[0], t$$4.fields[2]);\n } else if (c$$5 === 0) {\n if (t$$4.fields[1].tag === 0) {\n return t$$4.fields[2];\n } else if (t$$4.fields[2].tag === 0) {\n return t$$4.fields[1];\n } else {\n const patternInput$$3 = SetTreeModule$$$spliceOutSuccessor(t$$4.fields[2]);\n return SetTreeModule$$$mk(t$$4.fields[1], patternInput$$3[0], patternInput$$3[1]);\n }\n } else {\n return SetTreeModule$$$rebalance(t$$4.fields[1], t$$4.fields[0], SetTreeModule$$$remove(comparer$$3, k$$4, t$$4.fields[2]));\n }\n }\n\n default:\n {\n return t$$4;\n }\n }\n}\nexport function SetTreeModule$$$mem($comparer$$4$$35, $k$$5$$36, $t$$5$$37) {\n SetTreeModule$$$mem: while (true) {\n const comparer$$4 = $comparer$$4$$35,\n k$$5 = $k$$5$$36,\n t$$5 = $t$$5$$37;\n\n switch (t$$5.tag) {\n case 2:\n {\n return comparer$$4.Compare(k$$5, t$$5.fields[0]) === 0;\n }\n\n case 0:\n {\n return false;\n }\n\n default:\n {\n const c$$6 = comparer$$4.Compare(k$$5, t$$5.fields[0]) | 0;\n\n if (c$$6 < 0) {\n $comparer$$4$$35 = comparer$$4;\n $k$$5$$36 = k$$5;\n $t$$5$$37 = t$$5.fields[1];\n continue SetTreeModule$$$mem;\n } else if (c$$6 === 0) {\n return true;\n } else {\n $comparer$$4$$35 = comparer$$4;\n $k$$5$$36 = k$$5;\n $t$$5$$37 = t$$5.fields[2];\n continue SetTreeModule$$$mem;\n }\n }\n }\n\n break;\n }\n}\nexport function SetTreeModule$$$iter($f$$38, $t$$6$$39) {\n SetTreeModule$$$iter: while (true) {\n const f = $f$$38,\n t$$6 = $t$$6$$39;\n\n switch (t$$6.tag) {\n case 2:\n {\n f(t$$6.fields[0]);\n break;\n }\n\n case 0:\n {\n break;\n }\n\n default:\n {\n SetTreeModule$$$iter(f, t$$6.fields[1]);\n f(t$$6.fields[0]);\n $f$$38 = f;\n $t$$6$$39 = t$$6.fields[2];\n continue SetTreeModule$$$iter;\n }\n }\n\n break;\n }\n}\nexport function SetTreeModule$$$foldBack($f$$1$$40, $m$$1$$41, $x$$1$$42) {\n SetTreeModule$$$foldBack: while (true) {\n const f$$1 = $f$$1$$40,\n m$$1 = $m$$1$$41,\n x$$1 = $x$$1$$42;\n\n switch (m$$1.tag) {\n case 2:\n {\n return f$$1(m$$1.fields[0], x$$1);\n }\n\n case 0:\n {\n return x$$1;\n }\n\n default:\n {\n $f$$1$$40 = f$$1;\n $m$$1$$41 = m$$1.fields[1];\n $x$$1$$42 = f$$1(m$$1.fields[0], SetTreeModule$$$foldBack(f$$1, m$$1.fields[2], x$$1));\n continue SetTreeModule$$$foldBack;\n }\n }\n\n break;\n }\n}\nexport function SetTreeModule$$$fold($f$$2$$43, $x$$2$$44, $m$$2$$45) {\n SetTreeModule$$$fold: while (true) {\n const f$$2 = $f$$2$$43,\n x$$2 = $x$$2$$44,\n m$$2 = $m$$2$$45;\n\n switch (m$$2.tag) {\n case 2:\n {\n return f$$2(x$$2, m$$2.fields[0]);\n }\n\n case 0:\n {\n return x$$2;\n }\n\n default:\n {\n const x$$3 = SetTreeModule$$$fold(f$$2, x$$2, m$$2.fields[1]);\n const x$$4 = f$$2(x$$3, m$$2.fields[0]);\n $f$$2$$43 = f$$2;\n $x$$2$$44 = x$$4;\n $m$$2$$45 = m$$2.fields[2];\n continue SetTreeModule$$$fold;\n }\n }\n\n break;\n }\n}\nexport function SetTreeModule$$$forall($f$$3$$46, $m$$3$$47) {\n SetTreeModule$$$forall: while (true) {\n const f$$3 = $f$$3$$46,\n m$$3 = $m$$3$$47;\n\n switch (m$$3.tag) {\n case 2:\n {\n return f$$3(m$$3.fields[0]);\n }\n\n case 0:\n {\n return true;\n }\n\n default:\n {\n if (f$$3(m$$3.fields[0]) ? SetTreeModule$$$forall(f$$3, m$$3.fields[1]) : false) {\n $f$$3$$46 = f$$3;\n $m$$3$$47 = m$$3.fields[2];\n continue SetTreeModule$$$forall;\n } else {\n return false;\n }\n }\n }\n\n break;\n }\n}\nexport function SetTreeModule$$$exists($f$$4$$48, $m$$4$$49) {\n SetTreeModule$$$exists: while (true) {\n const f$$4 = $f$$4$$48,\n m$$4 = $m$$4$$49;\n\n switch (m$$4.tag) {\n case 2:\n {\n return f$$4(m$$4.fields[0]);\n }\n\n case 0:\n {\n return false;\n }\n\n default:\n {\n if (f$$4(m$$4.fields[0]) ? true : SetTreeModule$$$exists(f$$4, m$$4.fields[1])) {\n return true;\n } else {\n $f$$4$$48 = f$$4;\n $m$$4$$49 = m$$4.fields[2];\n continue SetTreeModule$$$exists;\n }\n }\n }\n\n break;\n }\n}\nexport function SetTreeModule$$$isEmpty(m$$5) {\n if (m$$5.tag === 0) {\n return true;\n } else {\n return false;\n }\n}\nexport function SetTreeModule$$$subset(comparer$$5, a, b) {\n return SetTreeModule$$$forall(function (x$$5) {\n return SetTreeModule$$$mem(comparer$$5, x$$5, b);\n }, a);\n}\nexport function SetTreeModule$$$psubset(comparer$$6, a$$1, b$$1) {\n if (SetTreeModule$$$forall(function (x$$6) {\n return SetTreeModule$$$mem(comparer$$6, x$$6, b$$1);\n }, a$$1)) {\n return SetTreeModule$$$exists(function (x$$7) {\n return !SetTreeModule$$$mem(comparer$$6, x$$7, a$$1);\n }, b$$1);\n } else {\n return false;\n }\n}\nexport function SetTreeModule$$$filterAux($comparer$$7$$57, $f$$5$$58, $s$$2$$59, $acc$$1$$60) {\n SetTreeModule$$$filterAux: while (true) {\n const comparer$$7 = $comparer$$7$$57,\n f$$5 = $f$$5$$58,\n s$$2 = $s$$2$$59,\n acc$$1 = $acc$$1$$60;\n\n switch (s$$2.tag) {\n case 2:\n {\n if (f$$5(s$$2.fields[0])) {\n return SetTreeModule$$$add(comparer$$7, s$$2.fields[0], acc$$1);\n } else {\n return acc$$1;\n }\n }\n\n case 0:\n {\n return acc$$1;\n }\n\n default:\n {\n const acc$$2 = f$$5(s$$2.fields[0]) ? SetTreeModule$$$add(comparer$$7, s$$2.fields[0], acc$$1) : acc$$1;\n $comparer$$7$$57 = comparer$$7;\n $f$$5$$58 = f$$5;\n $s$$2$$59 = s$$2.fields[1];\n $acc$$1$$60 = SetTreeModule$$$filterAux(comparer$$7, f$$5, s$$2.fields[2], acc$$2);\n continue SetTreeModule$$$filterAux;\n }\n }\n\n break;\n }\n}\nexport function SetTreeModule$$$filter(comparer$$8, f$$6, s$$3) {\n return SetTreeModule$$$filterAux(comparer$$8, f$$6, s$$3, new SetTree$00601(0, \"SetEmpty\"));\n}\nexport function SetTreeModule$$$diffAux($comparer$$9$$64, $m$$6$$65, $acc$$3$$66) {\n SetTreeModule$$$diffAux: while (true) {\n const comparer$$9 = $comparer$$9$$64,\n m$$6 = $m$$6$$65,\n acc$$3 = $acc$$3$$66;\n\n switch (m$$6.tag) {\n case 2:\n {\n return SetTreeModule$$$remove(comparer$$9, m$$6.fields[0], acc$$3);\n }\n\n case 0:\n {\n return acc$$3;\n }\n\n default:\n {\n $comparer$$9$$64 = comparer$$9;\n $m$$6$$65 = m$$6.fields[1];\n $acc$$3$$66 = SetTreeModule$$$diffAux(comparer$$9, m$$6.fields[2], SetTreeModule$$$remove(comparer$$9, m$$6.fields[0], acc$$3));\n continue SetTreeModule$$$diffAux;\n }\n }\n\n break;\n }\n}\nexport function SetTreeModule$$$diff(comparer$$10, a$$2, b$$2) {\n return SetTreeModule$$$diffAux(comparer$$10, b$$2, a$$2);\n}\nexport function SetTreeModule$$$union(comparer$$11, t1$$4, t2$$4) {\n var $target$$73, h1$$1, h2$$1, k1$$4, k2$$16, t11$$2, t12$$2, t21$$1, t22$$1, t$$7, t$$8, k1$$5, t2$$5, k2$$17, t1$$5;\n\n if (t1$$4.tag === 0) {\n $target$$73 = 1;\n t$$7 = t2$$4;\n } else if (t1$$4.tag === 2) {\n if (t2$$4.tag === 0) {\n $target$$73 = 2;\n t$$8 = t1$$4;\n } else if (t2$$4.tag === 2) {\n $target$$73 = 3;\n k1$$5 = t1$$4.fields[0];\n t2$$5 = t2$$4;\n } else {\n $target$$73 = 3;\n k1$$5 = t1$$4.fields[0];\n t2$$5 = t2$$4;\n }\n } else if (t2$$4.tag === 0) {\n $target$$73 = 2;\n t$$8 = t1$$4;\n } else if (t2$$4.tag === 2) {\n $target$$73 = 4;\n k2$$17 = t2$$4.fields[0];\n t1$$5 = t1$$4;\n } else {\n $target$$73 = 0;\n h1$$1 = t1$$4.fields[3];\n h2$$1 = t2$$4.fields[3];\n k1$$4 = t1$$4.fields[0];\n k2$$16 = t2$$4.fields[0];\n t11$$2 = t1$$4.fields[1];\n t12$$2 = t1$$4.fields[2];\n t21$$1 = t2$$4.fields[1];\n t22$$1 = t2$$4.fields[2];\n }\n\n switch ($target$$73) {\n case 0:\n {\n if (h1$$1 > h2$$1) {\n const patternInput$$4 = SetTreeModule$$$split(comparer$$11, k1$$4, t2$$4);\n return SetTreeModule$$$balance(comparer$$11, SetTreeModule$$$union(comparer$$11, t11$$2, patternInput$$4[0]), k1$$4, SetTreeModule$$$union(comparer$$11, t12$$2, patternInput$$4[2]));\n } else {\n const patternInput$$5 = SetTreeModule$$$split(comparer$$11, k2$$16, t1$$4);\n return SetTreeModule$$$balance(comparer$$11, SetTreeModule$$$union(comparer$$11, t21$$1, patternInput$$5[0]), k2$$16, SetTreeModule$$$union(comparer$$11, t22$$1, patternInput$$5[2]));\n }\n }\n\n case 1:\n {\n return t$$7;\n }\n\n case 2:\n {\n return t$$8;\n }\n\n case 3:\n {\n return SetTreeModule$$$add(comparer$$11, k1$$5, t2$$5);\n }\n\n case 4:\n {\n return SetTreeModule$$$add(comparer$$11, k2$$17, t1$$5);\n }\n }\n}\nexport function SetTreeModule$$$intersectionAux($comparer$$12$$74, $b$$3$$75, $m$$7$$76, $acc$$4$$77) {\n SetTreeModule$$$intersectionAux: while (true) {\n const comparer$$12 = $comparer$$12$$74,\n b$$3 = $b$$3$$75,\n m$$7 = $m$$7$$76,\n acc$$4 = $acc$$4$$77;\n\n switch (m$$7.tag) {\n case 2:\n {\n if (SetTreeModule$$$mem(comparer$$12, m$$7.fields[0], b$$3)) {\n return SetTreeModule$$$add(comparer$$12, m$$7.fields[0], acc$$4);\n } else {\n return acc$$4;\n }\n }\n\n case 0:\n {\n return acc$$4;\n }\n\n default:\n {\n const acc$$5 = SetTreeModule$$$intersectionAux(comparer$$12, b$$3, m$$7.fields[2], acc$$4);\n const acc$$6 = SetTreeModule$$$mem(comparer$$12, m$$7.fields[0], b$$3) ? SetTreeModule$$$add(comparer$$12, m$$7.fields[0], acc$$5) : acc$$5;\n $comparer$$12$$74 = comparer$$12;\n $b$$3$$75 = b$$3;\n $m$$7$$76 = m$$7.fields[1];\n $acc$$4$$77 = acc$$6;\n continue SetTreeModule$$$intersectionAux;\n }\n }\n\n break;\n }\n}\nexport function SetTreeModule$$$intersection(comparer$$13, a$$3, b$$4) {\n return SetTreeModule$$$intersectionAux(comparer$$13, b$$4, a$$3, new SetTree$00601(0, \"SetEmpty\"));\n}\nexport function SetTreeModule$$$partition1(comparer$$14, f$$7, k$$16, acc1, acc2) {\n if (f$$7(k$$16)) {\n return [SetTreeModule$$$add(comparer$$14, k$$16, acc1), acc2];\n } else {\n return [acc1, SetTreeModule$$$add(comparer$$14, k$$16, acc2)];\n }\n}\nexport function SetTreeModule$$$partitionAux($comparer$$15$$86, $f$$8$$87, $s$$4$$88, $acc_0$$89, $acc_1$$90) {\n SetTreeModule$$$partitionAux: while (true) {\n const comparer$$15 = $comparer$$15$$86,\n f$$8 = $f$$8$$87,\n s$$4 = $s$$4$$88,\n acc_0 = $acc_0$$89,\n acc_1 = $acc_1$$90;\n\n switch (s$$4.tag) {\n case 2:\n {\n return SetTreeModule$$$partition1(comparer$$15, f$$8, s$$4.fields[0], acc_0, acc_1);\n }\n\n case 0:\n {\n return [acc_0, acc_1];\n }\n\n default:\n {\n const acc$$8 = SetTreeModule$$$partitionAux(comparer$$15, f$$8, s$$4.fields[2], acc_0, acc_1);\n const acc$$9 = SetTreeModule$$$partition1(comparer$$15, f$$8, s$$4.fields[0], acc$$8[0], acc$$8[1]);\n $comparer$$15$$86 = comparer$$15;\n $f$$8$$87 = f$$8;\n $s$$4$$88 = s$$4.fields[1];\n $acc_0$$89 = acc$$9[0];\n $acc_1$$90 = acc$$9[1];\n continue SetTreeModule$$$partitionAux;\n }\n }\n\n break;\n }\n}\nexport function SetTreeModule$$$partition(comparer$$16, f$$9, s$$5) {\n const seed = [new SetTree$00601(0, \"SetEmpty\"), new SetTree$00601(0, \"SetEmpty\")];\n return SetTreeModule$$$partitionAux(comparer$$16, f$$9, s$$5, seed[0], seed[1]);\n}\nexport function SetTreeModule$$$$007CMatchSetNode$007CMatchSetEmpty$007C(s$$6) {\n switch (s$$6.tag) {\n case 2:\n {\n return new Choice(0, \"Choice1Of2\", [s$$6.fields[0], new SetTree$00601(0, \"SetEmpty\"), new SetTree$00601(0, \"SetEmpty\")]);\n }\n\n case 0:\n {\n return new Choice(1, \"Choice2Of2\", null);\n }\n\n default:\n {\n return new Choice(0, \"Choice1Of2\", [s$$6.fields[0], s$$6.fields[1], s$$6.fields[2]]);\n }\n }\n}\nexport function SetTreeModule$$$minimumElementAux($s$$7$$95, $n$$1$$96) {\n SetTreeModule$$$minimumElementAux: while (true) {\n const s$$7 = $s$$7$$95,\n n$$1 = $n$$1$$96;\n\n switch (s$$7.tag) {\n case 2:\n {\n return s$$7.fields[0];\n }\n\n case 0:\n {\n return n$$1;\n }\n\n default:\n {\n $s$$7$$95 = s$$7.fields[1];\n $n$$1$$96 = s$$7.fields[0];\n continue SetTreeModule$$$minimumElementAux;\n }\n }\n\n break;\n }\n}\nexport function SetTreeModule$$$minimumElementOpt(s$$8) {\n switch (s$$8.tag) {\n case 2:\n {\n return some(s$$8.fields[0]);\n }\n\n case 0:\n {\n return null;\n }\n\n default:\n {\n return some(SetTreeModule$$$minimumElementAux(s$$8.fields[1], s$$8.fields[0]));\n }\n }\n}\nexport function SetTreeModule$$$maximumElementAux($s$$9$$98, $n$$2$$99) {\n SetTreeModule$$$maximumElementAux: while (true) {\n const s$$9 = $s$$9$$98,\n n$$2 = $n$$2$$99;\n\n switch (s$$9.tag) {\n case 2:\n {\n return s$$9.fields[0];\n }\n\n case 0:\n {\n return n$$2;\n }\n\n default:\n {\n $s$$9$$98 = s$$9.fields[2];\n $n$$2$$99 = s$$9.fields[0];\n continue SetTreeModule$$$maximumElementAux;\n }\n }\n\n break;\n }\n}\nexport function SetTreeModule$$$maximumElementOpt(s$$10) {\n switch (s$$10.tag) {\n case 2:\n {\n return some(s$$10.fields[0]);\n }\n\n case 0:\n {\n return null;\n }\n\n default:\n {\n return some(SetTreeModule$$$maximumElementAux(s$$10.fields[2], s$$10.fields[0]));\n }\n }\n}\nexport function SetTreeModule$$$minimumElement(s$$11) {\n const matchValue$$4 = SetTreeModule$$$minimumElementOpt(s$$11);\n\n if (matchValue$$4 == null) {\n throw new Error(\"Set contains no elements\");\n } else {\n const k$$27 = value$$2(matchValue$$4);\n return k$$27;\n }\n}\nexport function SetTreeModule$$$maximumElement(s$$12) {\n const matchValue$$5 = SetTreeModule$$$maximumElementOpt(s$$12);\n\n if (matchValue$$5 == null) {\n throw new Error(\"Set contains no elements\");\n } else {\n const k$$28 = value$$2(matchValue$$5);\n return k$$28;\n }\n}\nexport const SetTreeModule$002ESetIterator$00601 = declare(function Set_SetTreeModule_SetIterator(arg1, arg2) {\n this.stack = arg1;\n this.started = arg2;\n}, Record);\nexport function SetTreeModule$002ESetIterator$00601$reflection($gen$$103) {\n return record(\"Set.SetTreeModule.SetIterator`1\", [$gen$$103], SetTreeModule$002ESetIterator$00601, () => [[\"stack\", list(SetTree$00601$reflection($gen$$103))], [\"started\", bool]]);\n}\nexport function SetTreeModule$$$collapseLHS($stack$$104) {\n SetTreeModule$$$collapseLHS: while (true) {\n const stack = $stack$$104;\n\n if (stack.tail != null) {\n if (stack.head.tag === 2) {\n return stack;\n } else if (stack.head.tag === 1) {\n $stack$$104 = new List(stack.head.fields[1], new List(SetTreeModule$$$SetOne(stack.head.fields[0]), new List(stack.head.fields[2], stack.tail)));\n continue SetTreeModule$$$collapseLHS;\n } else {\n $stack$$104 = stack.tail;\n continue SetTreeModule$$$collapseLHS;\n }\n } else {\n return new List();\n }\n\n break;\n }\n}\nexport function SetTreeModule$$$mkIterator(s$$13) {\n return new SetTreeModule$002ESetIterator$00601(SetTreeModule$$$collapseLHS(new List(s$$13, new List())), false);\n}\nexport function SetTreeModule$$$notStarted() {\n throw new Error(\"Enumeration not started\");\n}\nexport function SetTreeModule$$$alreadyFinished() {\n throw new Error(\"Enumeration already started\");\n}\nexport function SetTreeModule$$$current(i) {\n if (i.started) {\n const matchValue$$6 = i.stack;\n\n if (matchValue$$6.tail == null) {\n return SetTreeModule$$$alreadyFinished();\n } else if (matchValue$$6.head.tag === 2) {\n return matchValue$$6.head.fields[0];\n } else {\n throw new Error(\"Please report error: Set iterator, unexpected stack for current\");\n }\n } else {\n return SetTreeModule$$$notStarted();\n }\n}\nexport function SetTreeModule$$$moveNext(i$$1) {\n if (i$$1.started) {\n const matchValue$$7 = i$$1.stack;\n\n if (matchValue$$7.tail == null) {\n return false;\n } else if (matchValue$$7.head.tag === 2) {\n i$$1.stack = SetTreeModule$$$collapseLHS(matchValue$$7.tail);\n return !(i$$1.stack.tail == null);\n } else {\n throw new Error(\"Please report error: Set iterator, unexpected stack for moveNext\");\n }\n } else {\n i$$1.started = true;\n return !(i$$1.stack.tail == null);\n }\n}\nexport const SetTreeModule$002EmkIEnumerator$00601 = declare(function Set_SetTreeModule_mkIEnumerator(s$$14) {\n const $this$$1 = this;\n $this$$1.s = s$$14;\n $this$$1.i = SetTreeModule$$$mkIterator($this$$1.s);\n});\nexport function SetTreeModule$002EmkIEnumerator$00601$reflection($gen$$108) {\n return type(\"Set.SetTreeModule.mkIEnumerator`1\", [$gen$$108]);\n}\nexport function SetTreeModule$002EmkIEnumerator$00601$$$$002Ector$$Z5B395D56(s$$14) {\n return this instanceof SetTreeModule$002EmkIEnumerator$00601 ? SetTreeModule$002EmkIEnumerator$00601.call(this, s$$14) : new SetTreeModule$002EmkIEnumerator$00601(s$$14);\n}\nObject.defineProperty(SetTreeModule$002EmkIEnumerator$00601.prototype, \"Current\", {\n \"get\": function () {\n const __ = this;\n return SetTreeModule$$$current(__.i);\n }\n});\n\nSetTreeModule$002EmkIEnumerator$00601.prototype.MoveNext = function () {\n const __$$1 = this;\n return SetTreeModule$$$moveNext(__$$1.i);\n};\n\nSetTreeModule$002EmkIEnumerator$00601.prototype.Reset = function () {\n const __$$2 = this;\n __$$2.i = SetTreeModule$$$mkIterator(__$$2.s);\n};\n\nSetTreeModule$002EmkIEnumerator$00601.prototype.Dispose = function () {};\n\nexport function SetTreeModule$$$mkIEnumerator(s$$15) {\n return SetTreeModule$002EmkIEnumerator$00601$$$$002Ector$$Z5B395D56(s$$15);\n}\nexport function SetTreeModule$$$toSeq(s$$16) {\n const en = SetTreeModule$$$mkIEnumerator(s$$16);\n return unfold(function generator(en$$1) {\n if (en$$1.MoveNext()) {\n return [en$$1.Current, en$$1];\n } else {\n return null;\n }\n }, en);\n}\nexport function SetTreeModule$$$compareStacks($comparer$$17$$112, $l1$$113, $l2$$114) {\n SetTreeModule$$$compareStacks: while (true) {\n const comparer$$17 = $comparer$$17$$112,\n l1 = $l1$$113,\n l2 = $l2$$114;\n var $target$$115, t1$$6, t2$$6, n1k, n2k, t1$$7, t2$$7, n1k$$1, n2k$$1, n2r, t1$$8, t2$$8, emp, n1k$$2, n1r, n2k$$2, t1$$9, t2$$9, n1k$$3, n1r$$1, n2k$$3, n2r$$1, t1$$10, t2$$10, n1k$$4, t1$$11, n1k$$5, n1l, n1r$$2, t1$$12, n2k$$4, t2$$11, n2k$$5, n2l, n2r$$2, t2$$12;\n\n if (l1.tail != null) {\n if (l2.tail != null) {\n if (l2.head.tag === 2) {\n if (l1.head.tag === 2) {\n $target$$115 = 4;\n n1k = l1.head.fields[0];\n n2k = l2.head.fields[0];\n t1$$7 = l1.tail;\n t2$$7 = l2.tail;\n } else if (l1.head.tag === 1) {\n if (l1.head.fields[1].tag === 0) {\n $target$$115 = 6;\n emp = l1.head.fields[1];\n n1k$$2 = l1.head.fields[0];\n n1r = l1.head.fields[2];\n n2k$$2 = l2.head.fields[0];\n t1$$9 = l1.tail;\n t2$$9 = l2.tail;\n } else {\n $target$$115 = 9;\n n1k$$5 = l1.head.fields[0];\n n1l = l1.head.fields[1];\n n1r$$2 = l1.head.fields[2];\n t1$$12 = l1.tail;\n }\n } else {\n $target$$115 = 10;\n n2k$$4 = l2.head.fields[0];\n t2$$11 = l2.tail;\n }\n } else if (l2.head.tag === 1) {\n if (l2.head.fields[1].tag === 0) {\n if (l1.head.tag === 2) {\n $target$$115 = 5;\n n1k$$1 = l1.head.fields[0];\n n2k$$1 = l2.head.fields[0];\n n2r = l2.head.fields[2];\n t1$$8 = l1.tail;\n t2$$8 = l2.tail;\n } else if (l1.head.tag === 1) {\n if (l1.head.fields[1].tag === 0) {\n $target$$115 = 7;\n n1k$$3 = l1.head.fields[0];\n n1r$$1 = l1.head.fields[2];\n n2k$$3 = l2.head.fields[0];\n n2r$$1 = l2.head.fields[2];\n t1$$10 = l1.tail;\n t2$$10 = l2.tail;\n } else {\n $target$$115 = 9;\n n1k$$5 = l1.head.fields[0];\n n1l = l1.head.fields[1];\n n1r$$2 = l1.head.fields[2];\n t1$$12 = l1.tail;\n }\n } else {\n $target$$115 = 11;\n n2k$$5 = l2.head.fields[0];\n n2l = l2.head.fields[1];\n n2r$$2 = l2.head.fields[2];\n t2$$12 = l2.tail;\n }\n } else if (l1.head.tag === 2) {\n $target$$115 = 8;\n n1k$$4 = l1.head.fields[0];\n t1$$11 = l1.tail;\n } else if (l1.head.tag === 1) {\n $target$$115 = 9;\n n1k$$5 = l1.head.fields[0];\n n1l = l1.head.fields[1];\n n1r$$2 = l1.head.fields[2];\n t1$$12 = l1.tail;\n } else {\n $target$$115 = 11;\n n2k$$5 = l2.head.fields[0];\n n2l = l2.head.fields[1];\n n2r$$2 = l2.head.fields[2];\n t2$$12 = l2.tail;\n }\n } else if (l1.head.tag === 2) {\n $target$$115 = 8;\n n1k$$4 = l1.head.fields[0];\n t1$$11 = l1.tail;\n } else if (l1.head.tag === 1) {\n $target$$115 = 9;\n n1k$$5 = l1.head.fields[0];\n n1l = l1.head.fields[1];\n n1r$$2 = l1.head.fields[2];\n t1$$12 = l1.tail;\n } else {\n $target$$115 = 3;\n t1$$6 = l1.tail;\n t2$$6 = l2.tail;\n }\n } else {\n $target$$115 = 2;\n }\n } else if (l2.tail != null) {\n $target$$115 = 1;\n } else {\n $target$$115 = 0;\n }\n\n switch ($target$$115) {\n case 0:\n {\n return 0;\n }\n\n case 1:\n {\n return -1 | 0;\n }\n\n case 2:\n {\n return 1;\n }\n\n case 3:\n {\n $comparer$$17$$112 = comparer$$17;\n $l1$$113 = t1$$6;\n $l2$$114 = t2$$6;\n continue SetTreeModule$$$compareStacks;\n }\n\n case 4:\n {\n const c$$7 = comparer$$17.Compare(n1k, n2k) | 0;\n\n if (c$$7 !== 0) {\n return c$$7 | 0;\n } else {\n $comparer$$17$$112 = comparer$$17;\n $l1$$113 = t1$$7;\n $l2$$114 = t2$$7;\n continue SetTreeModule$$$compareStacks;\n }\n }\n\n case 5:\n {\n const c$$8 = comparer$$17.Compare(n1k$$1, n2k$$1) | 0;\n\n if (c$$8 !== 0) {\n return c$$8 | 0;\n } else {\n $comparer$$17$$112 = comparer$$17;\n $l1$$113 = new List(new SetTree$00601(0, \"SetEmpty\"), t1$$8);\n $l2$$114 = new List(n2r, t2$$8);\n continue SetTreeModule$$$compareStacks;\n }\n }\n\n case 6:\n {\n const c$$9 = comparer$$17.Compare(n1k$$2, n2k$$2) | 0;\n\n if (c$$9 !== 0) {\n return c$$9 | 0;\n } else {\n $comparer$$17$$112 = comparer$$17;\n $l1$$113 = new List(n1r, t1$$9);\n $l2$$114 = new List(emp, t2$$9);\n continue SetTreeModule$$$compareStacks;\n }\n }\n\n case 7:\n {\n const c$$10 = comparer$$17.Compare(n1k$$3, n2k$$3) | 0;\n\n if (c$$10 !== 0) {\n return c$$10 | 0;\n } else {\n $comparer$$17$$112 = comparer$$17;\n $l1$$113 = new List(n1r$$1, t1$$10);\n $l2$$114 = new List(n2r$$1, t2$$10);\n continue SetTreeModule$$$compareStacks;\n }\n }\n\n case 8:\n {\n $comparer$$17$$112 = comparer$$17;\n $l1$$113 = new List(new SetTree$00601(0, \"SetEmpty\"), new List(SetTreeModule$$$SetOne(n1k$$4), t1$$11));\n $l2$$114 = l2;\n continue SetTreeModule$$$compareStacks;\n }\n\n case 9:\n {\n $comparer$$17$$112 = comparer$$17;\n $l1$$113 = new List(n1l, new List(SetTreeModule$$$SetNode(n1k$$5, new SetTree$00601(0, \"SetEmpty\"), n1r$$2, 0), t1$$12));\n $l2$$114 = l2;\n continue SetTreeModule$$$compareStacks;\n }\n\n case 10:\n {\n $comparer$$17$$112 = comparer$$17;\n $l1$$113 = l1;\n $l2$$114 = new List(new SetTree$00601(0, \"SetEmpty\"), new List(SetTreeModule$$$SetOne(n2k$$4), t2$$11));\n continue SetTreeModule$$$compareStacks;\n }\n\n case 11:\n {\n $comparer$$17$$112 = comparer$$17;\n $l1$$113 = l1;\n $l2$$114 = new List(n2l, new List(SetTreeModule$$$SetNode(n2k$$5, new SetTree$00601(0, \"SetEmpty\"), n2r$$2, 0), t2$$12));\n continue SetTreeModule$$$compareStacks;\n }\n }\n\n break;\n }\n}\nexport function SetTreeModule$$$compare(comparer$$18, s1, s2) {\n if (s1.tag === 0) {\n if (s2.tag === 0) {\n return 0;\n } else {\n return -1 | 0;\n }\n } else if (s2.tag === 0) {\n return 1;\n } else {\n return SetTreeModule$$$compareStacks(comparer$$18, new List(s1, new List()), new List(s2, new List())) | 0;\n }\n}\nexport function SetTreeModule$$$choose(s$$17) {\n return SetTreeModule$$$minimumElement(s$$17);\n}\nexport function SetTreeModule$$$loop($m$$8$$120, $acc$$10$$121) {\n SetTreeModule$$$loop: while (true) {\n const m$$8 = $m$$8$$120,\n acc$$10 = $acc$$10$$121;\n\n switch (m$$8.tag) {\n case 2:\n {\n return new List(m$$8.fields[0], acc$$10);\n }\n\n case 0:\n {\n return acc$$10;\n }\n\n default:\n {\n $m$$8$$120 = m$$8.fields[1];\n $acc$$10$$121 = new List(m$$8.fields[0], SetTreeModule$$$loop(m$$8.fields[2], acc$$10));\n continue SetTreeModule$$$loop;\n }\n }\n\n break;\n }\n}\nexport function SetTreeModule$$$toList(s$$18) {\n return SetTreeModule$$$loop(s$$18, new List());\n}\nexport function SetTreeModule$$$copyToArray(s$$19, arr, i$$2) {\n let j = i$$2 | 0;\n SetTreeModule$$$iter(function (x$$8) {\n arr[j] = x$$8;\n j = j + 1;\n }, s$$19);\n}\nexport function SetTreeModule$$$mkFromEnumerator($comparer$$19$$126, $acc$$11$$127, $e$$128) {\n SetTreeModule$$$mkFromEnumerator: while (true) {\n const comparer$$19 = $comparer$$19$$126,\n acc$$11 = $acc$$11$$127,\n e = $e$$128;\n\n if (e.MoveNext()) {\n $comparer$$19$$126 = comparer$$19;\n $acc$$11$$127 = SetTreeModule$$$add(comparer$$19, e.Current, acc$$11);\n $e$$128 = e;\n continue SetTreeModule$$$mkFromEnumerator;\n } else {\n return acc$$11;\n }\n\n break;\n }\n}\nexport function SetTreeModule$$$ofSeq(comparer$$20, c$$11) {\n const ie = getEnumerator(c$$11);\n\n try {\n return SetTreeModule$$$mkFromEnumerator(comparer$$20, new SetTree$00601(0, \"SetEmpty\"), ie);\n } finally {\n if (isDisposable(ie)) {\n ie.Dispose();\n }\n }\n}\nexport function SetTreeModule$$$ofArray(comparer$$21, arr$$1) {\n let acc$$12 = new SetTree$00601(0, \"SetEmpty\");\n\n for (let i$$3 = 0; i$$3 <= arr$$1.length - 1; i$$3++) {\n acc$$12 = SetTreeModule$$$add(comparer$$21, arr$$1[i$$3], acc$$12);\n }\n\n return acc$$12;\n}\nexport const FSharpSet = declare(function Set_Set(comparer$$22, tree) {\n const $this$$2 = this;\n $this$$2.comparer = comparer$$22;\n $this$$2.tree = tree;\n});\nexport function FSharpSet$reflection($gen$$133) {\n return type(\"Set.FSharpSet\", [$gen$$133]);\n}\nexport function FSharpSet$$$$002Ector$$2528C5CB(comparer$$22, tree) {\n return this instanceof FSharpSet ? FSharpSet.call(this, comparer$$22, tree) : new FSharpSet(comparer$$22, tree);\n}\nexport function FSharpSet$$get_Comparer(__$$4) {\n return __$$4.comparer;\n}\nexport function FSharpSet$$get_Tree(__$$5) {\n return __$$5.tree;\n}\nexport function FSharpSet$$Add$$2B595(s$$20, x$$9) {\n return FSharpSet$$$$002Ector$$2528C5CB(FSharpSet$$get_Comparer(s$$20), SetTreeModule$$$add(FSharpSet$$get_Comparer(s$$20), x$$9, FSharpSet$$get_Tree(s$$20)));\n}\nexport function FSharpSet$$Remove$$2B595(s$$21, x$$10) {\n return FSharpSet$$$$002Ector$$2528C5CB(FSharpSet$$get_Comparer(s$$21), SetTreeModule$$$remove(FSharpSet$$get_Comparer(s$$21), x$$10, FSharpSet$$get_Tree(s$$21)));\n}\nexport function FSharpSet$$get_Count(s$$22) {\n return SetTreeModule$$$count(FSharpSet$$get_Tree(s$$22));\n}\nexport function FSharpSet$$Contains$$2B595(s$$23, x$$11) {\n return SetTreeModule$$$mem(FSharpSet$$get_Comparer(s$$23), x$$11, FSharpSet$$get_Tree(s$$23));\n}\nexport function FSharpSet$$Iterate$$5028453F(s$$24, x$$12) {\n SetTreeModule$$$iter(x$$12, FSharpSet$$get_Tree(s$$24));\n}\nexport function FSharpSet$$Fold(s$$25, f$$10, z) {\n return SetTreeModule$$$fold(function (x$$13, z$$1) {\n return f$$10(z$$1, x$$13);\n }, z, FSharpSet$$get_Tree(s$$25));\n}\nexport function FSharpSet$$get_IsEmpty(s$$26) {\n return SetTreeModule$$$isEmpty(FSharpSet$$get_Tree(s$$26));\n}\nexport function FSharpSet$$Partition$$Z1D55A0D7(s$$27, f$$11) {\n const matchValue$$10 = FSharpSet$$get_Tree(s$$27);\n\n if (matchValue$$10.tag === 0) {\n return [s$$27, s$$27];\n } else {\n const patternInput$$6 = SetTreeModule$$$partition(FSharpSet$$get_Comparer(s$$27), f$$11, FSharpSet$$get_Tree(s$$27));\n return [FSharpSet$$$$002Ector$$2528C5CB(FSharpSet$$get_Comparer(s$$27), patternInput$$6[0]), FSharpSet$$$$002Ector$$2528C5CB(FSharpSet$$get_Comparer(s$$27), patternInput$$6[1])];\n }\n}\nexport function FSharpSet$$Filter$$Z1D55A0D7(s$$28, f$$12) {\n const matchValue$$11 = FSharpSet$$get_Tree(s$$28);\n\n if (matchValue$$11.tag === 0) {\n return s$$28;\n } else {\n return FSharpSet$$$$002Ector$$2528C5CB(FSharpSet$$get_Comparer(s$$28), SetTreeModule$$$filter(FSharpSet$$get_Comparer(s$$28), f$$12, FSharpSet$$get_Tree(s$$28)));\n }\n}\nexport function FSharpSet$$Map$$7597B8F7(s$$29, f$$13, comparer$$23) {\n return FSharpSet$$$$002Ector$$2528C5CB(comparer$$23, SetTreeModule$$$fold(function (acc$$13, k$$33) {\n return SetTreeModule$$$add(comparer$$23, f$$13(k$$33), acc$$13);\n }, new SetTree$00601(0, \"SetEmpty\"), FSharpSet$$get_Tree(s$$29)));\n}\nexport function FSharpSet$$Exists$$Z1D55A0D7(s$$30, f$$14) {\n return SetTreeModule$$$exists(f$$14, FSharpSet$$get_Tree(s$$30));\n}\nexport function FSharpSet$$ForAll$$Z1D55A0D7(s$$31, f$$15) {\n return SetTreeModule$$$forall(f$$15, FSharpSet$$get_Tree(s$$31));\n}\nexport function FSharpSet$$$op_Subtraction(a$$4, b$$5) {\n const matchValue$$12 = FSharpSet$$get_Tree(a$$4);\n\n if (matchValue$$12.tag === 0) {\n return a$$4;\n } else {\n const matchValue$$13 = FSharpSet$$get_Tree(b$$5);\n\n if (matchValue$$13.tag === 0) {\n return a$$4;\n } else {\n return FSharpSet$$$$002Ector$$2528C5CB(FSharpSet$$get_Comparer(a$$4), SetTreeModule$$$diff(FSharpSet$$get_Comparer(a$$4), FSharpSet$$get_Tree(a$$4), FSharpSet$$get_Tree(b$$5)));\n }\n }\n}\nexport function FSharpSet$$$op_Addition(a$$5, b$$6) {\n const matchValue$$14 = FSharpSet$$get_Tree(b$$6);\n\n if (matchValue$$14.tag === 0) {\n return a$$5;\n } else {\n const matchValue$$15 = FSharpSet$$get_Tree(a$$5);\n\n if (matchValue$$15.tag === 0) {\n return b$$6;\n } else {\n return FSharpSet$$$$002Ector$$2528C5CB(FSharpSet$$get_Comparer(a$$5), SetTreeModule$$$union(FSharpSet$$get_Comparer(a$$5), FSharpSet$$get_Tree(a$$5), FSharpSet$$get_Tree(b$$6)));\n }\n }\n}\nexport function FSharpSet$$$Intersection$$Z3BE9BFE0(a$$6, b$$7) {\n const matchValue$$16 = FSharpSet$$get_Tree(b$$7);\n\n if (matchValue$$16.tag === 0) {\n return b$$7;\n } else {\n const matchValue$$17 = FSharpSet$$get_Tree(a$$6);\n\n if (matchValue$$17.tag === 0) {\n return a$$6;\n } else {\n return FSharpSet$$$$002Ector$$2528C5CB(FSharpSet$$get_Comparer(a$$6), SetTreeModule$$$intersection(FSharpSet$$get_Comparer(a$$6), FSharpSet$$get_Tree(a$$6), FSharpSet$$get_Tree(b$$7)));\n }\n }\n}\nexport function FSharpSet$$$IntersectionMany$$Z15B59630(sets) {\n return reduce(FSharpSet$$$Intersection$$Z3BE9BFE0, sets);\n}\nexport function FSharpSet$$$Equality$$Z3BE9BFE0(a$$7, b$$8) {\n return SetTreeModule$$$compare(FSharpSet$$get_Comparer(a$$7), FSharpSet$$get_Tree(a$$7), FSharpSet$$get_Tree(b$$8)) === 0;\n}\nexport function FSharpSet$$$Compare$$Z3BE9BFE0(a$$8, b$$9) {\n return SetTreeModule$$$compare(FSharpSet$$get_Comparer(a$$8), FSharpSet$$get_Tree(a$$8), FSharpSet$$get_Tree(b$$9));\n}\nexport function FSharpSet$$get_Choose(x$$14) {\n return SetTreeModule$$$choose(FSharpSet$$get_Tree(x$$14));\n}\nexport function FSharpSet$$get_MinimumElement(x$$15) {\n return SetTreeModule$$$minimumElement(FSharpSet$$get_Tree(x$$15));\n}\nexport function FSharpSet$$get_MaximumElement(x$$16) {\n return SetTreeModule$$$maximumElement(FSharpSet$$get_Tree(x$$16));\n}\nexport function FSharpSet$$IsSubsetOf$$6A20B1FF(x$$17, y) {\n return SetTreeModule$$$subset(FSharpSet$$get_Comparer(x$$17), FSharpSet$$get_Tree(x$$17), FSharpSet$$get_Tree(y));\n}\nexport function FSharpSet$$IsSupersetOf$$6A20B1FF(x$$18, y$$1) {\n return SetTreeModule$$$subset(FSharpSet$$get_Comparer(x$$18), FSharpSet$$get_Tree(y$$1), FSharpSet$$get_Tree(x$$18));\n}\nexport function FSharpSet$$IsProperSubsetOf$$6A20B1FF(x$$19, y$$2) {\n return SetTreeModule$$$psubset(FSharpSet$$get_Comparer(x$$19), FSharpSet$$get_Tree(x$$19), FSharpSet$$get_Tree(y$$2));\n}\nexport function FSharpSet$$IsProperSupersetOf$$6A20B1FF(x$$20, y$$3) {\n return SetTreeModule$$$psubset(FSharpSet$$get_Comparer(x$$20), FSharpSet$$get_Tree(y$$3), FSharpSet$$get_Tree(x$$20));\n}\n\nFSharpSet.prototype.toString = function () {\n var strings;\n const this$ = this;\n return \"set [\" + (strings = map$$1(function (x$$21) {\n let copyOfStruct = x$$21;\n return String(copyOfStruct);\n }, this$), (join(\"; \", strings))) + \"]\";\n};\n\nFSharpSet.prototype.GetHashCode = function () {\n const this$$$1 = this;\n let res = 0;\n const e$$1 = SetTreeModule$$$mkIEnumerator(FSharpSet$$get_Tree(this$$$1));\n\n while (e$$1.MoveNext()) {\n const x$$22 = res | 0;\n const y$$4 = structuralHash(e$$1.Current) | 0;\n res = (x$$22 << 1) + y$$4 + 631;\n }\n\n return Math.abs(res) | 0;\n};\n\nFSharpSet.prototype.Equals = function (that) {\n const this$$$2 = this;\n return SetTreeModule$$$compare(FSharpSet$$get_Comparer(this$$$2), FSharpSet$$get_Tree(this$$$2), FSharpSet$$get_Tree(that)) === 0;\n};\n\nFSharpSet.prototype.CompareTo = function (that$$1) {\n const this$$$3 = this;\n return SetTreeModule$$$compare(FSharpSet$$get_Comparer(this$$$3), FSharpSet$$get_Tree(this$$$3), FSharpSet$$get_Tree(that$$1)) | 0;\n};\n\nFSharpSet.prototype[Symbol.iterator] = function () {\n const s$$32 = this;\n return toIterator(SetTreeModule$$$mkIEnumerator(FSharpSet$$get_Tree(s$$32)));\n};\n\nexport function isEmpty(s$$33) {\n return FSharpSet$$get_IsEmpty(s$$33);\n}\nexport function contains(x$$23, s$$34) {\n return FSharpSet$$Contains$$2B595(s$$34, x$$23);\n}\nexport function add(x$$24, s$$35) {\n return FSharpSet$$Add$$2B595(s$$35, x$$24);\n}\nexport function singleton(x$$25, comparer$$24) {\n return FSharpSet$$$$002Ector$$2528C5CB(comparer$$24, new SetTree$00601(2, \"SetOne\", x$$25));\n}\nexport function remove(x$$26, s$$36) {\n return FSharpSet$$Remove$$2B595(s$$36, x$$26);\n}\nexport function union(s1$$2, s2$$2) {\n return FSharpSet$$$op_Addition(s1$$2, s2$$2);\n}\nexport function unionMany(sets$$1, comparer$$25) {\n return fold$$1(FSharpSet$$$op_Addition, FSharpSet$$$$002Ector$$2528C5CB(comparer$$25, new SetTree$00601(0, \"SetEmpty\")), sets$$1);\n}\nexport function intersect(s1$$3, s2$$3) {\n return FSharpSet$$$Intersection$$Z3BE9BFE0(s1$$3, s2$$3);\n}\nexport function intersectMany(sets$$2) {\n return FSharpSet$$$IntersectionMany$$Z15B59630(sets$$2);\n}\nexport function iterate(f$$16, s$$37) {\n FSharpSet$$Iterate$$5028453F(s$$37, f$$16);\n}\nexport function empty(comparer$$26) {\n return FSharpSet$$$$002Ector$$2528C5CB(comparer$$26, new SetTree$00601(0, \"SetEmpty\"));\n}\nexport function forAll(f$$17, s$$38) {\n return FSharpSet$$ForAll$$Z1D55A0D7(s$$38, f$$17);\n}\nexport function exists(f$$18, s$$39) {\n return FSharpSet$$Exists$$Z1D55A0D7(s$$39, f$$18);\n}\nexport function filter(f$$19, s$$40) {\n return FSharpSet$$Filter$$Z1D55A0D7(s$$40, f$$19);\n}\nexport function partition(f$$20, s$$41) {\n return FSharpSet$$Partition$$Z1D55A0D7(s$$41, f$$20);\n}\nexport function fold(f$$21, z$$2, s$$42) {\n return SetTreeModule$$$fold(f$$21, z$$2, FSharpSet$$get_Tree(s$$42));\n}\nexport function foldBack(f$$22, s$$43, z$$3) {\n return SetTreeModule$$$foldBack(f$$22, FSharpSet$$get_Tree(s$$43), z$$3);\n}\nexport function map(f$$23, s$$44, comparer$$27) {\n return FSharpSet$$Map$$7597B8F7(s$$44, f$$23, comparer$$27);\n}\nexport function count(s$$45) {\n return FSharpSet$$get_Count(s$$45);\n}\nexport function minimumElement(s$$46) {\n return FSharpSet$$get_MinimumElement(s$$46);\n}\nexport function maximumElement(s$$47) {\n return FSharpSet$$get_MaximumElement(s$$47);\n}\nexport function ofList(li, comparer$$28) {\n return FSharpSet$$$$002Ector$$2528C5CB(comparer$$28, SetTreeModule$$$ofSeq(comparer$$28, li));\n}\nexport function ofArray(arr$$2, comparer$$29) {\n return FSharpSet$$$$002Ector$$2528C5CB(comparer$$29, SetTreeModule$$$ofArray(comparer$$29, arr$$2));\n}\nexport function toList(s$$48) {\n return SetTreeModule$$$toList(FSharpSet$$get_Tree(s$$48));\n}\nexport function toArray(s$$49, cons) {\n const n$$3 = count(s$$49) | 0;\n const res$$1 = new cons(n$$3);\n SetTreeModule$$$copyToArray(FSharpSet$$get_Tree(s$$49), res$$1, 0);\n return res$$1;\n}\nexport function toSeq(s$$50) {\n return SetTreeModule$$$toSeq(FSharpSet$$get_Tree(s$$50));\n}\nexport function ofSeq(elements, comparer$$30) {\n return FSharpSet$$$$002Ector$$2528C5CB(comparer$$30, SetTreeModule$$$ofSeq(comparer$$30, elements));\n}\nexport function difference(x$$28, y$$6) {\n return FSharpSet$$$op_Subtraction(x$$28, y$$6);\n}\nexport function isSubset(x$$29, y$$7) {\n return FSharpSet$$IsSubsetOf$$6A20B1FF(x$$29, y$$7);\n}\nexport function isSuperset(x$$30, y$$8) {\n return FSharpSet$$IsSupersetOf$$6A20B1FF(x$$30, y$$8);\n}\nexport function isProperSubset(x$$31, y$$9) {\n return FSharpSet$$IsProperSubsetOf$$6A20B1FF(x$$31, y$$9);\n}\nexport function isProperSuperset(x$$32, y$$10) {\n return FSharpSet$$IsProperSupersetOf$$6A20B1FF(x$$32, y$$10);\n}\nexport function minElement(s$$51) {\n return FSharpSet$$get_MinimumElement(s$$51);\n}\nexport function maxElement(s$$52) {\n return FSharpSet$$get_MaximumElement(s$$52);\n}\n\nfunction createMutablePrivate(comparer$$31, tree$0027) {\n let tree$$1 = tree$0027;\n return {\n get size() {\n return SetTreeModule$$$count(tree$$1);\n },\n\n add(x$$33) {\n const this$$$4 = this;\n tree$$1 = SetTreeModule$$$add(comparer$$31, x$$33, tree$$1);\n return this$$$4;\n },\n\n add_(x$$34) {\n if (SetTreeModule$$$mem(comparer$$31, x$$34, tree$$1)) {\n return false;\n } else {\n tree$$1 = SetTreeModule$$$add(comparer$$31, x$$34, tree$$1);\n return true;\n }\n },\n\n clear() {\n tree$$1 = new SetTree$00601(0, \"SetEmpty\");\n },\n\n delete(x$$35) {\n if (SetTreeModule$$$mem(comparer$$31, x$$35, tree$$1)) {\n tree$$1 = SetTreeModule$$$remove(comparer$$31, x$$35, tree$$1);\n return true;\n } else {\n return false;\n }\n },\n\n has(x$$36) {\n return SetTreeModule$$$mem(comparer$$31, x$$36, tree$$1);\n },\n\n keys() {\n return SetTreeModule$$$toSeq(tree$$1);\n },\n\n values() {\n return SetTreeModule$$$toSeq(tree$$1);\n },\n\n entries() {\n const source = SetTreeModule$$$toSeq(tree$$1);\n return map$$1(function mapping(v) {\n return [v, v];\n }, source);\n },\n\n [Symbol.iterator]() {\n return toIterator(SetTreeModule$$$mkIEnumerator(tree$$1));\n },\n\n GetEnumerator() {\n return SetTreeModule$$$mkIEnumerator(tree$$1);\n }\n\n };\n}\n\nexport function createMutable(source$$1, comparer$$32) {\n const set = MutableSet$002400601$0024$0024$0024$0024002Ector$0024$0024Z6150332D(source$$1, comparer$$32);\n return set;\n}\nexport function distinct(xs, comparer$$33) {\n return delay(function () {\n const set$$1 = MutableSet$002400601$0024$0024$0024$0024002Ector$0024$0024Z6150332D(empty$$1(), comparer$$33);\n return collect(function (x$$37) {\n return MutableSet$002400601$0024$0024Add$0024$00242B595(set$$1, x$$37) ? singleton$$1(x$$37) : empty$$1();\n }, xs);\n });\n}\nexport function distinctBy(projection, xs$$1, comparer$$34) {\n return delay(function () {\n const set$$2 = MutableSet$002400601$0024$0024$0024$0024002Ector$0024$0024Z6150332D(empty$$1(), comparer$$34);\n return collect(function (x$$38) {\n return MutableSet$002400601$0024$0024Add$0024$00242B595(set$$2, projection(x$$38)) ? singleton$$1(x$$38) : empty$$1();\n }, xs$$1);\n });\n}\nexport function unionWith(s1$$4, s2$$4) {\n return fold$$1(function folder(acc$$14, x$$39) {\n return acc$$14.add(x$$39);\n }, s1$$4, s2$$4);\n}\nexport function intersectWith(s1$$5, s2$$5, comparer$$35) {\n const s2$$6 = ofSeq(s2$$5, comparer$$35);\n iterate$$1(function (x$$40) {\n if (!FSharpSet$$Contains$$2B595(s2$$6, x$$40)) {\n const value = s1$$5.delete(x$$40);\n void value;\n }\n }, s1$$5);\n}\nexport function exceptWith(s1$$6, s2$$7) {\n iterate$$1(function (x$$41) {\n const value$$1 = s1$$6.delete(x$$41);\n void value$$1;\n }, s2$$7);\n}\nexport function isSubsetOf(s1$$7, s2$$8, comparer$$36) {\n return isSubset(ofSeq(s1$$7, comparer$$36), ofSeq(s2$$8, comparer$$36));\n}\nexport function isSupersetOf(s1$$8, s2$$9, comparer$$37) {\n return isSuperset(ofSeq(s1$$8, comparer$$37), ofSeq(s2$$9, comparer$$37));\n}\nexport function isProperSubsetOf(s1$$9, s2$$10, comparer$$38) {\n return isProperSubset(ofSeq(s1$$9, comparer$$38), ofSeq(s2$$10, comparer$$38));\n}\nexport function isProperSupersetOf(s1$$10, s2$$11, comparer$$39) {\n return isProperSuperset(ofSeq(s1$$10, comparer$$39), ofSeq(s2$$11, comparer$$39));\n}","import { defaultArg, value as value$$15, some } from \"./Option.js\";\nimport { min as min$$1, compare, addToDict, addToSet, getItemFromDict, tryGetValue, max as max$$1, comparePrimitives } from \"./Util.js\";\nimport { createMutable } from \"./Map.js\";\nimport { createMutable as createMutable$$1 } from \"./Set.js\";\nimport { List } from \"./Types.js\";\nimport { iterate as iterate$$1 } from \"./Seq.js\";\nconst indexNotFoundMsg = \"An index satisfying the predicate was not found in the collection.\";\nexport function append(array1, array2, cons) {\n if (ArrayBuffer.isView(array1)) {\n const len1 = array1.length | 0;\n const len2 = array2.length | 0;\n const newArray = new cons(len1 + len2);\n\n for (let i = 0; i <= len1 - 1; i++) {\n newArray[i] = array1[i];\n }\n\n for (let i$$1 = 0; i$$1 <= len2 - 1; i$$1++) {\n newArray[i$$1 + len1] = array2[i$$1];\n }\n\n return newArray;\n } else {\n return array1.concat(array2);\n }\n}\nexport function filter(predicate, array) {\n return array.filter(predicate);\n}\nexport function fill(target, targetIndex, count, value) {\n target.fill(value, targetIndex, targetIndex + count);\n return target;\n}\nexport function getSubArray(array$$3, start$$1, count$$2) {\n return array$$3.slice(start$$1, start$$1 + count$$2);\n}\nexport function last(array$$5) {\n if (array$$5.length === 0) {\n throw new Error(\"The input array was empty\\\\nParameter name: array\");\n }\n\n return array$$5[array$$5.length - 1];\n}\nexport function tryLast(array$$6) {\n if (array$$6.length === 0) {\n return null;\n } else {\n return some(array$$6[array$$6.length - 1]);\n }\n}\nexport function mapIndexed(f, source, cons$$1) {\n if (ArrayBuffer.isView(source)) {\n const len = source.length | 0;\n const target$$1 = new cons$$1(len);\n\n for (let i$$2 = 0; i$$2 <= len - 1; i$$2++) {\n target$$1[i$$2] = f(i$$2, source[i$$2]);\n }\n\n return target$$1;\n } else {\n return source.map(function (delegateArg0, delegateArg1) {\n return f(delegateArg1, delegateArg0);\n });\n }\n}\nexport function map(f$$1, source$$1, cons$$2) {\n if (ArrayBuffer.isView(source$$1)) {\n const len$$1 = source$$1.length | 0;\n const target$$2 = new cons$$2(len$$1);\n\n for (let i$$4 = 0; i$$4 <= len$$1 - 1; i$$4++) {\n target$$2[i$$4] = f$$1(source$$1[i$$4]);\n }\n\n return target$$2;\n } else {\n return source$$1.map(function mapping$$1(x$$1) {\n return f$$1(x$$1);\n });\n }\n}\nexport function mapIndexed2(f$$2, source1, source2, cons$$3) {\n if (source1.length !== source2.length) {\n throw new Error(\"Arrays had different lengths\");\n }\n\n const result = new cons$$3(source1.length);\n\n for (let i$$5 = 0; i$$5 <= source1.length - 1; i$$5++) {\n result[i$$5] = f$$2(i$$5, source1[i$$5], source2[i$$5]);\n }\n\n return result;\n}\nexport function map2(f$$3, source1$$1, source2$$1, cons$$4) {\n if (source1$$1.length !== source2$$1.length) {\n throw new Error(\"Arrays had different lengths\");\n }\n\n const result$$1 = new cons$$4(source1$$1.length);\n\n for (let i$$6 = 0; i$$6 <= source1$$1.length - 1; i$$6++) {\n result$$1[i$$6] = f$$3(source1$$1[i$$6], source2$$1[i$$6]);\n }\n\n return result$$1;\n}\nexport function mapIndexed3(f$$4, source1$$2, source2$$2, source3, cons$$5) {\n if (source1$$2.length !== source2$$2.length ? true : source2$$2.length !== source3.length) {\n throw new Error(\"Arrays had different lengths\");\n }\n\n const result$$2 = new cons$$5(source1$$2.length);\n\n for (let i$$7 = 0; i$$7 <= source1$$2.length - 1; i$$7++) {\n result$$2[i$$7] = f$$4(i$$7, source1$$2[i$$7], source2$$2[i$$7], source3[i$$7]);\n }\n\n return result$$2;\n}\nexport function map3(f$$5, source1$$3, source2$$3, source3$$1, cons$$6) {\n if (source1$$3.length !== source2$$3.length ? true : source2$$3.length !== source3$$1.length) {\n throw new Error(\"Arrays had different lengths\");\n }\n\n const result$$3 = new cons$$6(source1$$3.length);\n\n for (let i$$8 = 0; i$$8 <= source1$$3.length - 1; i$$8++) {\n result$$3[i$$8] = f$$5(source1$$3[i$$8], source2$$3[i$$8], source3$$1[i$$8]);\n }\n\n return result$$3;\n}\nexport function mapFold(mapping$$2, state, array$$9, cons$$7) {\n const matchValue = array$$9.length | 0;\n\n if (matchValue === 0) {\n return [[], state];\n } else {\n let acc = state;\n const res = new cons$$7(matchValue);\n\n for (let i$$9 = 0; i$$9 <= array$$9.length - 1; i$$9++) {\n const patternInput = mapping$$2(acc, array$$9[i$$9]);\n res[i$$9] = patternInput[0];\n acc = patternInput[1];\n }\n\n return [res, acc];\n }\n}\nexport function mapFoldBack(mapping$$3, array$$10, state$$1, cons$$8) {\n const matchValue$$1 = array$$10.length | 0;\n\n if (matchValue$$1 === 0) {\n return [[], state$$1];\n } else {\n let acc$$1 = state$$1;\n const res$$1 = new cons$$8(matchValue$$1);\n\n for (let i$$10 = array$$10.length - 1; i$$10 >= 0; i$$10--) {\n const patternInput$$1 = mapping$$3(array$$10[i$$10], acc$$1);\n res$$1[i$$10] = patternInput$$1[0];\n acc$$1 = patternInput$$1[1];\n }\n\n return [res$$1, acc$$1];\n }\n}\nexport function indexed(source$$2) {\n const len$$4 = source$$2.length | 0;\n const target$$3 = new Array(len$$4);\n\n for (let i$$11 = 0; i$$11 <= len$$4 - 1; i$$11++) {\n target$$3[i$$11] = [i$$11, source$$2[i$$11]];\n }\n\n return target$$3;\n}\nexport function truncate(count$$4, array$$11) {\n const count$$5 = max$$1(comparePrimitives, 0, count$$4) | 0;\n return array$$11.slice(0, 0 + count$$5);\n}\nexport function concat(arrays, cons$$9) {\n var arr$$4;\n const arrays$$1 = Array.isArray(arrays) ? arrays : Array.from(arrays);\n const matchValue$$2 = arrays$$1.length | 0;\n\n switch (matchValue$$2) {\n case 0:\n {\n return new cons$$9(0);\n }\n\n case 1:\n {\n return arrays$$1[0];\n }\n\n default:\n {\n if (arr$$4 = arrays$$1[0], ArrayBuffer.isView(arr$$4)) {\n let totalIdx = 0;\n let totalLength = 0;\n\n for (let idx = 0; idx <= arrays$$1.length - 1; idx++) {\n const arr$$5 = arrays$$1[idx];\n totalLength = totalLength + arr$$5.length;\n }\n\n const result$$4 = new cons$$9(totalLength);\n\n for (let idx$$1 = 0; idx$$1 <= arrays$$1.length - 1; idx$$1++) {\n const arr$$6 = arrays$$1[idx$$1];\n\n for (let j = 0; j <= arr$$6.length - 1; j++) {\n result$$4[totalIdx] = arr$$6[j];\n totalIdx = totalIdx + 1;\n }\n }\n\n return result$$4;\n } else {\n return arrays$$1[0].concat(...arrays$$1.slice(1));\n }\n }\n }\n}\nexport function collect(mapping$$4, array$$14, cons$$10) {\n const mapped = map(mapping$$4, array$$14, Array);\n return concat(mapped, cons$$10);\n}\nexport function countBy(projection, array$$15, eq) {\n const dict = createMutable([], eq);\n const keys = [];\n\n for (let idx$$2 = 0; idx$$2 <= array$$15.length - 1; idx$$2++) {\n const value$$2 = array$$15[idx$$2];\n const key = projection(value$$2);\n const matchValue$$3 = tryGetValue(dict, key, 0);\n\n if (matchValue$$3[0]) {\n dict.set(key, matchValue$$3[1] + 1);\n } else {\n dict.set(key, 1);\n const value$$3 = keys.push(key);\n void value$$3;\n }\n }\n\n const result$$5 = map(function (key$$1) {\n return [key$$1, getItemFromDict(dict, key$$1)];\n }, keys, Array);\n return result$$5;\n}\nexport function distinctBy(projection$$1, array$$17, eq$$1) {\n const hashSet = createMutable$$1([], eq$$1);\n return filter(function predicate$$2($arg$$3) {\n const arg00 = projection$$1($arg$$3);\n return addToSet(arg00, hashSet);\n }, array$$17);\n}\nexport function distinct(array$$19, eq$$2) {\n return distinctBy(function (x$$2) {\n return x$$2;\n }, array$$19, eq$$2);\n}\nexport function where(predicate$$3, array$$20) {\n return array$$20.filter(predicate$$3);\n}\nexport function contains(value$$4, array$$22, eq$$3) {\n const loop = function loop($i$$12$$79) {\n loop: while (true) {\n const i$$12 = $i$$12$$79;\n\n if (i$$12 >= array$$22.length) {\n return false;\n } else if (eq$$3.Equals(value$$4, array$$22[i$$12])) {\n return true;\n } else {\n $i$$12$$79 = i$$12 + 1;\n continue loop;\n }\n\n break;\n }\n };\n\n return loop(0);\n}\nexport function except(itemsToExclude, array$$23, eq$$4) {\n if (array$$23.length === 0) {\n return array$$23;\n } else {\n const cached = createMutable$$1(itemsToExclude, eq$$4);\n return array$$23.filter(function predicate$$5(arg00$$1) {\n return addToSet(arg00$$1, cached);\n });\n }\n}\nexport function groupBy(projection$$2, array$$26, cons$$11, eq$$5) {\n const dict$$1 = createMutable([], eq$$5);\n const keys$$1 = [];\n\n for (let idx$$3 = 0; idx$$3 <= array$$26.length - 1; idx$$3++) {\n const v = array$$26[idx$$3];\n const key$$2 = projection$$2(v);\n const matchValue$$4 = tryGetValue(dict$$1, key$$2, null);\n\n if (matchValue$$4[0]) {\n dict$$1.set(key$$2, new List(v, matchValue$$4[1]));\n } else {\n addToDict(dict$$1, key$$2, new List(v, new List()));\n const value$$5 = keys$$1.push(key$$2);\n void value$$5;\n }\n }\n\n const result$$6 = map(function (key$$3) {\n var array$$28;\n return [key$$3, (array$$28 = cons$$11.from(getItemFromDict(dict$$1, key$$3)), (array$$28.reverse()))];\n }, keys$$1, Array);\n return result$$6;\n}\nexport function empty(cons$$12) {\n return new cons$$12(0);\n}\nexport function singleton(value$$6, cons$$14) {\n const ar = new cons$$14(1);\n ar[0] = value$$6;\n return ar;\n}\nexport function initialize(count$$8, initializer, cons$$15) {\n if (count$$8 < 0) {\n throw new Error(\"The input must be non-negative\\\\nParameter name: count\");\n }\n\n const result$$7 = new cons$$15(count$$8);\n\n for (let i$$13 = 0; i$$13 <= count$$8 - 1; i$$13++) {\n result$$7[i$$13] = initializer(i$$13);\n }\n\n return result$$7;\n}\nexport function pairwise(array$$30) {\n if (array$$30.length < 2) {\n return [];\n } else {\n const count$$9 = array$$30.length - 1 | 0;\n const result$$8 = new Array(count$$9);\n\n for (let i$$14 = 0; i$$14 <= count$$9 - 1; i$$14++) {\n result$$8[i$$14] = [array$$30[i$$14], array$$30[i$$14 + 1]];\n }\n\n return result$$8;\n }\n}\nexport function replicate(count$$10, initial, cons$$16) {\n if (count$$10 < 0) {\n throw new Error(\"The input must be non-negative\\\\nParameter name: count\");\n }\n\n const result$$9 = new cons$$16(count$$10);\n\n for (let i$$15 = 0; i$$15 <= result$$9.length - 1; i$$15++) {\n result$$9[i$$15] = initial;\n }\n\n return result$$9;\n}\nexport function copy(array$$31, cons$$17) {\n return array$$31.slice();\n}\nexport function reverse(array$$33, cons$$18) {\n const array$$35 = array$$33.slice();\n return array$$35.reverse();\n}\nexport function scan(folder, state$$2, array$$37, cons$$19) {\n const res$$2 = new cons$$19(array$$37.length + 1);\n res$$2[0] = state$$2;\n\n for (let i$$16 = 0; i$$16 <= array$$37.length - 1; i$$16++) {\n res$$2[i$$16 + 1] = folder(res$$2[i$$16], array$$37[i$$16]);\n }\n\n return res$$2;\n}\nexport function scanBack(folder$$1, array$$38, state$$3, cons$$20) {\n const res$$3 = new cons$$20(array$$38.length + 1);\n res$$3[array$$38.length] = state$$3;\n\n for (let i$$17 = array$$38.length - 1; i$$17 >= 0; i$$17--) {\n res$$3[i$$17] = folder$$1(array$$38[i$$17], res$$3[i$$17 + 1]);\n }\n\n return res$$3;\n}\nexport function skip(count$$11, array$$39, cons$$21) {\n if (count$$11 > array$$39.length) {\n throw new Error(\"count is greater than array length\\\\nParameter name: count\");\n }\n\n if (count$$11 === array$$39.length) {\n return new cons$$21(0);\n } else {\n const count$$12 = (count$$11 < 0 ? 0 : count$$11) | 0;\n return array$$39.slice(count$$12);\n }\n}\nexport function skipWhile(predicate$$7, array$$41, cons$$23) {\n let count$$14 = 0;\n\n while (count$$14 < array$$41.length ? predicate$$7(array$$41[count$$14]) : false) {\n count$$14 = count$$14 + 1;\n }\n\n if (count$$14 === array$$41.length) {\n return new cons$$23(0);\n } else {\n const count$$15 = count$$14 | 0;\n return array$$41.slice(count$$15);\n }\n}\nexport function take(count$$16, array$$43, cons$$25) {\n if (count$$16 < 0) {\n throw new Error(\"The input must be non-negative\\\\nParameter name: count\");\n }\n\n if (count$$16 > array$$43.length) {\n throw new Error(\"count is greater than array length\\\\nParameter name: count\");\n }\n\n if (count$$16 === 0) {\n return new cons$$25(0);\n } else {\n return array$$43.slice(0, 0 + count$$16);\n }\n}\nexport function takeWhile(predicate$$8, array$$45, cons$$27) {\n let count$$18 = 0;\n\n while (count$$18 < array$$45.length ? predicate$$8(array$$45[count$$18]) : false) {\n count$$18 = count$$18 + 1;\n }\n\n if (count$$18 === 0) {\n return new cons$$27(0);\n } else {\n const count$$19 = count$$18 | 0;\n return array$$45.slice(0, 0 + count$$19);\n }\n}\nexport function addInPlace(x$$3, array$$47) {\n const value$$7 = array$$47.push(x$$3);\n void value$$7;\n}\nexport function addRangeInPlace(range, array$$49) {\n iterate$$1(function (x$$4) {\n const value$$8 = array$$49.push(x$$4);\n void value$$8;\n }, range);\n}\nexport function removeInPlace(item$$5, array$$51) {\n const i$$18 = array$$51.indexOf(item$$5);\n\n if (i$$18 > -1) {\n const value$$9 = array$$51.splice(i$$18, 1);\n void value$$9;\n return true;\n } else {\n return false;\n }\n}\nexport function removeAllInPlace(predicate$$9, array$$54) {\n const countRemoveAll = function countRemoveAll(count$$20) {\n const i$$19 = array$$54.findIndex(predicate$$9);\n\n if (i$$19 > -1) {\n const value$$10 = array$$54.splice(i$$19, 1);\n void value$$10;\n return countRemoveAll(count$$20) + 1 | 0;\n } else {\n return count$$20 | 0;\n }\n };\n\n return countRemoveAll(0) | 0;\n}\nexport function copyTo(source$$3, sourceIndex, target$$4, targetIndex$$1, count$$21) {\n const diff = targetIndex$$1 - sourceIndex | 0;\n\n for (let i$$20 = sourceIndex; i$$20 <= sourceIndex + count$$21 - 1; i$$20++) {\n target$$4[i$$20 + diff] = source$$3[i$$20];\n }\n}\nexport function partition(f$$6, source$$4, cons$$29) {\n const len$$7 = source$$4.length | 0;\n const res1 = new cons$$29(len$$7);\n const res2 = new cons$$29(len$$7);\n let iTrue = 0;\n let iFalse = 0;\n\n for (let i$$21 = 0; i$$21 <= len$$7 - 1; i$$21++) {\n if (f$$6(source$$4[i$$21])) {\n res1[iTrue] = source$$4[i$$21];\n iTrue = iTrue + 1;\n } else {\n res2[iFalse] = source$$4[i$$21];\n iFalse = iFalse + 1;\n }\n }\n\n return [(truncate(iTrue, res1)), (truncate(iFalse, res2))];\n}\nexport function find(predicate$$11, array$$59) {\n const matchValue$$5 = array$$59.find(predicate$$11);\n\n if (matchValue$$5 == null) {\n throw new Error(indexNotFoundMsg);\n } else {\n const res$$4 = value$$15(matchValue$$5);\n return res$$4;\n }\n}\nexport function tryFind(predicate$$13, array$$61) {\n return array$$61.find(predicate$$13);\n}\nexport function findIndex(predicate$$15, array$$63) {\n const matchValue$$6 = array$$63.findIndex(predicate$$15);\n\n if (matchValue$$6 > -1) {\n return matchValue$$6 | 0;\n } else {\n throw new Error(indexNotFoundMsg);\n }\n}\nexport function tryFindIndex(predicate$$17, array$$65) {\n const matchValue$$7 = array$$65.findIndex(predicate$$17);\n\n if (matchValue$$7 > -1) {\n return matchValue$$7;\n } else {\n return null;\n }\n}\nexport function pick(chooser, array$$67) {\n const loop$$1 = function loop$$1($i$$22$$149) {\n loop$$1: while (true) {\n const i$$22 = $i$$22$$149;\n\n if (i$$22 >= array$$67.length) {\n throw new Error(indexNotFoundMsg);\n } else {\n const matchValue$$8 = chooser(array$$67[i$$22]);\n\n if (matchValue$$8 != null) {\n const res$$5 = value$$15(matchValue$$8);\n return res$$5;\n } else {\n $i$$22$$149 = i$$22 + 1;\n continue loop$$1;\n }\n }\n\n break;\n }\n };\n\n return loop$$1(0);\n}\nexport function tryPick(chooser$$1, array$$68) {\n const loop$$2 = function loop$$2($i$$23$$152) {\n loop$$2: while (true) {\n const i$$23 = $i$$23$$152;\n\n if (i$$23 >= array$$68.length) {\n return null;\n } else {\n const matchValue$$9 = chooser$$1(array$$68[i$$23]);\n\n if (matchValue$$9 == null) {\n $i$$23$$152 = i$$23 + 1;\n continue loop$$2;\n } else {\n return matchValue$$9;\n }\n }\n\n break;\n }\n };\n\n return loop$$2(0);\n}\nexport function findBack(predicate$$19, array$$69) {\n const loop$$3 = function loop$$3($i$$24$$155) {\n loop$$3: while (true) {\n const i$$24 = $i$$24$$155;\n\n if (i$$24 < 0) {\n throw new Error(indexNotFoundMsg);\n } else if (predicate$$19(array$$69[i$$24])) {\n return array$$69[i$$24];\n } else {\n $i$$24$$155 = i$$24 - 1;\n continue loop$$3;\n }\n\n break;\n }\n };\n\n return loop$$3(array$$69.length - 1);\n}\nexport function tryFindBack(predicate$$20, array$$70) {\n const loop$$4 = function loop$$4($i$$25$$158) {\n loop$$4: while (true) {\n const i$$25 = $i$$25$$158;\n\n if (i$$25 < 0) {\n return null;\n } else if (predicate$$20(array$$70[i$$25])) {\n return some(array$$70[i$$25]);\n } else {\n $i$$25$$158 = i$$25 - 1;\n continue loop$$4;\n }\n\n break;\n }\n };\n\n return loop$$4(array$$70.length - 1);\n}\nexport function findLastIndex(predicate$$21, array$$71) {\n const loop$$5 = function loop$$5($i$$26$$161) {\n loop$$5: while (true) {\n const i$$26 = $i$$26$$161;\n\n if (i$$26 < 0) {\n return -1 | 0;\n } else if (predicate$$21(array$$71[i$$26])) {\n return i$$26 | 0;\n } else {\n $i$$26$$161 = i$$26 - 1;\n continue loop$$5;\n }\n\n break;\n }\n };\n\n return loop$$5(array$$71.length - 1) | 0;\n}\nexport function findIndexBack(predicate$$22, array$$72) {\n const loop$$6 = function loop$$6($i$$27$$164) {\n loop$$6: while (true) {\n const i$$27 = $i$$27$$164;\n\n if (i$$27 < 0) {\n throw new Error(indexNotFoundMsg);\n } else if (predicate$$22(array$$72[i$$27])) {\n return i$$27 | 0;\n } else {\n $i$$27$$164 = i$$27 - 1;\n continue loop$$6;\n }\n\n break;\n }\n };\n\n return loop$$6(array$$72.length - 1) | 0;\n}\nexport function tryFindIndexBack(predicate$$23, array$$73) {\n const loop$$7 = function loop$$7($i$$28$$167) {\n loop$$7: while (true) {\n const i$$28 = $i$$28$$167;\n\n if (i$$28 < 0) {\n return null;\n } else if (predicate$$23(array$$73[i$$28])) {\n return i$$28;\n } else {\n $i$$28$$167 = i$$28 - 1;\n continue loop$$7;\n }\n\n break;\n }\n };\n\n return loop$$7(array$$73.length - 1);\n}\nexport function choose(chooser$$2, array$$74, cons$$30) {\n const arr$$7 = array$$74.filter(function f$$7(x$$5) {\n const option = chooser$$2(x$$5);\n return option != null;\n });\n return map(function g(x$$6) {\n const option$$1 = chooser$$2(x$$6);\n return value$$15(option$$1);\n }, arr$$7, cons$$30);\n}\nexport function foldIndexed(folder$$2, state$$4, array$$76) {\n return array$$76.reduce(function (delegateArg0$$1, delegateArg1$$1, delegateArg2) {\n return folder$$2(delegateArg2, delegateArg0$$1, delegateArg1$$1);\n }, state$$4);\n}\nexport function fold(folder$$4, state$$6, array$$78) {\n return array$$78.reduce(function (delegateArg0$$2, delegateArg1$$2) {\n return folder$$4(delegateArg0$$2, delegateArg1$$2);\n }, state$$6);\n}\nexport function iterate(action, array$$80) {\n for (let i$$30 = 0; i$$30 <= array$$80.length - 1; i$$30++) {\n action(array$$80[i$$30]);\n }\n}\nexport function iterateIndexed(action$$1, array$$81) {\n for (let i$$31 = 0; i$$31 <= array$$81.length - 1; i$$31++) {\n action$$1(i$$31, array$$81[i$$31]);\n }\n}\nexport function iterate2(action$$2, array1$$2, array2$$2) {\n if (array1$$2.length !== array2$$2.length) {\n throw new Error(\"Arrays had different lengths\");\n }\n\n for (let i$$32 = 0; i$$32 <= array1$$2.length - 1; i$$32++) {\n action$$2(array1$$2[i$$32], array2$$2[i$$32]);\n }\n}\nexport function iterateIndexed2(action$$3, array1$$3, array2$$3) {\n if (array1$$3.length !== array2$$3.length) {\n throw new Error(\"Arrays had different lengths\");\n }\n\n for (let i$$33 = 0; i$$33 <= array1$$3.length - 1; i$$33++) {\n action$$3(i$$33, array1$$3[i$$33], array2$$3[i$$33]);\n }\n}\nexport function isEmpty(array$$82) {\n return array$$82.length === 0;\n}\nexport function forAll(predicate$$25, array$$83) {\n return array$$83.every(predicate$$25);\n}\nexport function permute(f$$8, array$$85) {\n const size = array$$85.length | 0;\n const res$$7 = array$$85.slice();\n const checkFlags = new Int32Array(size);\n iterateIndexed(function (i$$34, x$$9) {\n const j$$1 = f$$8(i$$34) | 0;\n\n if (j$$1 < 0 ? true : j$$1 >= size) {\n throw new Error(\"Not a valid permutation\");\n }\n\n res$$7[j$$1] = x$$9;\n checkFlags[j$$1] = 1;\n }, array$$85);\n let isValid;\n isValid = checkFlags.every(function predicate$$27(y) {\n return 1 === y;\n });\n\n if (!isValid) {\n throw new Error(\"Not a valid permutation\");\n }\n\n return res$$7;\n}\nexport function setSlice(target$$5, lower, upper, source$$5) {\n const lower$$1 = defaultArg(lower, 0) | 0;\n const upper$$1 = defaultArg(upper, 0) | 0;\n const length = (upper$$1 > 0 ? upper$$1 : target$$5.length - 1) - lower$$1 | 0;\n\n for (let i$$35 = 0; i$$35 <= length; i$$35++) {\n target$$5[i$$35 + lower$$1] = source$$5[i$$35];\n }\n}\nexport function sortInPlaceBy(projection$$3, xs, comparer) {\n xs.sort(function (x$$11, y$$1) {\n return comparer.Compare(projection$$3(x$$11), projection$$3(y$$1));\n });\n}\nexport function sortInPlace(xs$$1, comparer$$1) {\n xs$$1.sort(function (x$$12, y$$2) {\n return comparer$$1.Compare(x$$12, y$$2);\n });\n}\nexport function sort(xs$$2, comparer$$2) {\n const xs$$3 = xs$$2.slice();\n xs$$3.sort(function comparer$$3(x$$13, y$$3) {\n return comparer$$2.Compare(x$$13, y$$3);\n });\n return xs$$3;\n}\nexport function sortBy(projection$$4, xs$$4, comparer$$4) {\n const xs$$5 = xs$$4.slice();\n xs$$5.sort(function comparer$$5(x$$14, y$$4) {\n return comparer$$4.Compare(projection$$4(x$$14), projection$$4(y$$4));\n });\n return xs$$5;\n}\nexport function sortDescending(xs$$6, comparer$$6) {\n const xs$$7 = xs$$6.slice();\n xs$$7.sort(function comparer$$7(x$$15, y$$5) {\n return comparer$$6.Compare(x$$15, y$$5) * -1;\n });\n return xs$$7;\n}\nexport function sortByDescending(projection$$5, xs$$8, comparer$$8) {\n const xs$$9 = xs$$8.slice();\n xs$$9.sort(function comparer$$9(x$$16, y$$6) {\n return comparer$$8.Compare(projection$$5(x$$16), projection$$5(y$$6)) * -1;\n });\n return xs$$9;\n}\nexport function sortWith(comparer$$10, xs$$10) {\n const xs$$11 = xs$$10.slice();\n xs$$11.sort(comparer$$10);\n return xs$$11;\n}\nexport function unfold(generator, state$$8) {\n const res$$8 = [];\n\n const loop$$8 = function loop$$8($state$$9$$226) {\n loop$$8: while (true) {\n const state$$9 = $state$$9$$226;\n const matchValue$$10 = generator(state$$9);\n\n if (matchValue$$10 != null) {\n const x$$17 = matchValue$$10[0];\n const s$$2 = matchValue$$10[1];\n const value$$11 = res$$8.push(x$$17);\n void value$$11;\n $state$$9$$226 = s$$2;\n continue loop$$8;\n }\n\n break;\n }\n };\n\n loop$$8(state$$8);\n return res$$8;\n}\nexport function unzip(array$$95) {\n const len$$8 = array$$95.length | 0;\n const res1$$1 = new Array(len$$8);\n const res2$$1 = new Array(len$$8);\n iterateIndexed(function (i$$36, tupledArg) {\n res1$$1[i$$36] = tupledArg[0];\n res2$$1[i$$36] = tupledArg[1];\n }, array$$95);\n return [res1$$1, res2$$1];\n}\nexport function unzip3(array$$96) {\n const len$$11 = array$$96.length | 0;\n const res1$$2 = new Array(len$$11);\n const res2$$2 = new Array(len$$11);\n const res3 = new Array(len$$11);\n iterateIndexed(function (i$$37, tupledArg$$1) {\n res1$$2[i$$37] = tupledArg$$1[0];\n res2$$2[i$$37] = tupledArg$$1[1];\n res3[i$$37] = tupledArg$$1[2];\n }, array$$96);\n return [res1$$2, res2$$2, res3];\n}\nexport function zip(array1$$4, array2$$4) {\n if (array1$$4.length !== array2$$4.length) {\n throw new Error(\"Arrays had different lengths\");\n }\n\n let result$$10;\n const len$$15 = array1$$4.length | 0;\n result$$10 = new Array(len$$15);\n\n for (let i$$38 = 0; i$$38 <= array1$$4.length - 1; i$$38++) {\n result$$10[i$$38] = [array1$$4[i$$38], array2$$4[i$$38]];\n }\n\n return result$$10;\n}\nexport function zip3(array1$$5, array2$$5, array3) {\n if (array1$$5.length !== array2$$5.length ? true : array2$$5.length !== array3.length) {\n throw new Error(\"Arrays had different lengths\");\n }\n\n let result$$11;\n const len$$16 = array1$$5.length | 0;\n result$$11 = new Array(len$$16);\n\n for (let i$$39 = 0; i$$39 <= array1$$5.length - 1; i$$39++) {\n result$$11[i$$39] = [array1$$5[i$$39], array2$$5[i$$39], array3[i$$39]];\n }\n\n return result$$11;\n}\nexport function chunkBySize(chunkSize, array$$97) {\n if (chunkSize < 1) {\n throw new Error(\"The input must be positive.\\\\nParameter name: size\");\n }\n\n if (array$$97.length === 0) {\n return [[]];\n } else {\n const result$$12 = [];\n\n for (let x$$18 = 0; x$$18 <= ~~Math.ceil(array$$97.length / chunkSize) - 1; x$$18++) {\n const start$$8 = x$$18 * chunkSize | 0;\n const slice = array$$97.slice(start$$8, start$$8 + chunkSize);\n const value$$12 = result$$12.push(slice);\n void value$$12;\n }\n\n return result$$12;\n }\n}\nexport function splitAt(index$$4, array$$100) {\n if (index$$4 < 0) {\n throw new Error(\"The input must be non-negative\\\\nParameter name: index\");\n }\n\n if (index$$4 > array$$100.length) {\n throw new Error(\"The input sequence has an insufficient number of elements.\\\\nParameter name: index\");\n }\n\n return [array$$100.slice(0, 0 + index$$4), array$$100.slice(index$$4)];\n}\nexport function compareWith(comparer$$12, array1$$6, array2$$6) {\n if (array1$$6 == null) {\n if (array2$$6 == null) {\n return 0;\n } else {\n return -1 | 0;\n }\n } else if (array2$$6 == null) {\n return 1;\n } else {\n let i$$40 = 0;\n let result$$13 = 0;\n const length1 = array1$$6.length | 0;\n const length2 = array2$$6.length | 0;\n\n if (length1 > length2) {\n return 1;\n } else if (length1 < length2) {\n return -1 | 0;\n } else {\n while (i$$40 < length1 ? result$$13 === 0 : false) {\n result$$13 = comparer$$12(array1$$6[i$$40], array2$$6[i$$40]);\n i$$40 = i$$40 + 1;\n }\n\n return result$$13 | 0;\n }\n }\n}\nexport function equalsWith(comparer$$13, array1$$7, array2$$7) {\n return compareWith(compare, array1$$7, array2$$7) === 0;\n}\nexport function exactlyOne(array$$103) {\n if (array$$103.length === 1) {\n return array$$103[0];\n } else if (array$$103.length === 0) {\n throw new Error(\"The input sequence was empty\\\\nParameter name: array\");\n } else {\n throw new Error(\"Input array too long\\\\nParameter name: array\");\n }\n}\nexport function head(array$$104) {\n if (array$$104.length === 0) {\n throw new Error(\"The input array was empty\\\\nParameter name: array\");\n } else {\n return array$$104[0];\n }\n}\nexport function tryHead(array$$105) {\n if (array$$105.length === 0) {\n return null;\n } else {\n return some(array$$105[0]);\n }\n}\nexport function tail(array$$106) {\n if (array$$106.length === 0) {\n throw new Error(\"Not enough elements\\\\nParameter name: array\");\n }\n\n return array$$106.slice(1);\n}\nexport function item(index$$5, array$$108) {\n return array$$108[index$$5];\n}\nexport function tryItem(index$$6, array$$109) {\n if (index$$6 < 0 ? true : index$$6 >= array$$109.length) {\n return null;\n } else {\n return some(array$$109[index$$6]);\n }\n}\nexport function foldBackIndexed(folder$$6, array$$110, state$$10) {\n return array$$110.reduceRight(function (delegateArg0$$3, delegateArg1$$3, delegateArg2$$1) {\n return folder$$6(delegateArg2$$1, delegateArg1$$3, delegateArg0$$3);\n }, state$$10);\n}\nexport function foldBack(folder$$8, array$$112, state$$12) {\n return array$$112.reduceRight(function (delegateArg0$$4, delegateArg1$$4) {\n return folder$$8(delegateArg1$$4, delegateArg0$$4);\n }, state$$12);\n}\nexport function foldIndexed2(folder$$10, state$$14, array1$$8, array2$$8) {\n let acc$$6 = state$$14;\n\n if (array1$$8.length !== array2$$8.length) {\n throw new Error(\"Arrays have different lengths\");\n }\n\n for (let i$$42 = 0; i$$42 <= array1$$8.length - 1; i$$42++) {\n acc$$6 = folder$$10(i$$42, acc$$6, array1$$8[i$$42], array2$$8[i$$42]);\n }\n\n return acc$$6;\n}\nexport function fold2(folder$$11, state$$15, array1$$9, array2$$9) {\n return foldIndexed2(function (_arg1, acc$$7, x$$21, y$$7) {\n return folder$$11(acc$$7, x$$21, y$$7);\n }, state$$15, array1$$9, array2$$9);\n}\nexport function foldBackIndexed2(folder$$12, array1$$10, array2$$10, state$$16) {\n let acc$$8 = state$$16;\n\n if (array1$$10.length !== array2$$10.length) {\n throw new Error(\"Arrays had different lengths\");\n }\n\n const size$$1 = array1$$10.length | 0;\n\n for (let i$$43 = 1; i$$43 <= size$$1; i$$43++) {\n acc$$8 = folder$$12(i$$43 - 1, array1$$10[size$$1 - i$$43], array2$$10[size$$1 - i$$43], acc$$8);\n }\n\n return acc$$8;\n}\nexport function foldBack2(f$$9, array1$$11, array2$$11, state$$17) {\n return foldBackIndexed2(function (_arg1$$1, x$$22, y$$8, acc$$9) {\n return f$$9(x$$22, y$$8, acc$$9);\n }, array1$$11, array2$$11, state$$17);\n}\nexport function reduce(reduction, array$$114) {\n if (array$$114.length === 0) {\n throw new Error(\"The input array was empty\");\n }\n\n return array$$114.reduce(reduction);\n}\nexport function reduceBack(reduction$$2, array$$116) {\n if (array$$116.length === 0) {\n throw new Error(\"The input array was empty\");\n }\n\n return array$$116.reduceRight(reduction$$2);\n}\nexport function forAll2(predicate$$29, array1$$12, array2$$12) {\n return fold2(function (acc$$10, x$$23, y$$9) {\n return acc$$10 ? predicate$$29(x$$23, y$$9) : false;\n }, true, array1$$12, array2$$12);\n}\nexport function existsOffset($predicate$$30$$281, $array$$118$$282, $index$$7$$283) {\n existsOffset: while (true) {\n const predicate$$30 = $predicate$$30$$281,\n array$$118 = $array$$118$$282,\n index$$7 = $index$$7$$283;\n\n if (index$$7 === array$$118.length) {\n return false;\n } else if (predicate$$30(array$$118[index$$7])) {\n return true;\n } else {\n $predicate$$30$$281 = predicate$$30;\n $array$$118$$282 = array$$118;\n $index$$7$$283 = index$$7 + 1;\n continue existsOffset;\n }\n\n break;\n }\n}\nexport function exists(predicate$$31, array$$119) {\n return existsOffset(predicate$$31, array$$119, 0);\n}\nexport function existsOffset2($predicate$$32$$286, $array1$$13$$287, $array2$$13$$288, $index$$8$$289) {\n existsOffset2: while (true) {\n const predicate$$32 = $predicate$$32$$286,\n array1$$13 = $array1$$13$$287,\n array2$$13 = $array2$$13$$288,\n index$$8 = $index$$8$$289;\n\n if (index$$8 === array1$$13.length) {\n return false;\n } else if (predicate$$32(array1$$13[index$$8], array2$$13[index$$8])) {\n return true;\n } else {\n $predicate$$32$$286 = predicate$$32;\n $array1$$13$$287 = array1$$13;\n $array2$$13$$288 = array2$$13;\n $index$$8$$289 = index$$8 + 1;\n continue existsOffset2;\n }\n\n break;\n }\n}\nexport function exists2(predicate$$33, array1$$14, array2$$14) {\n if (array1$$14.length !== array2$$14.length) {\n throw new Error(\"Arrays had different lengths\");\n }\n\n return existsOffset2(predicate$$33, array1$$14, array2$$14, 0);\n}\nexport function sum(array$$120, adder) {\n let acc$$11 = adder.GetZero();\n\n for (let i$$44 = 0; i$$44 <= array$$120.length - 1; i$$44++) {\n acc$$11 = adder.Add(acc$$11, array$$120[i$$44]);\n }\n\n return acc$$11;\n}\nexport function sumBy(projection$$6, array$$121, adder$$1) {\n let acc$$12 = adder$$1.GetZero();\n\n for (let i$$45 = 0; i$$45 <= array$$121.length - 1; i$$45++) {\n acc$$12 = adder$$1.Add(acc$$12, projection$$6(array$$121[i$$45]));\n }\n\n return acc$$12;\n}\nexport function maxBy(projection$$7, xs$$12, comparer$$14) {\n return reduce(function (x$$24, y$$10) {\n return comparer$$14.Compare(projection$$7(y$$10), projection$$7(x$$24)) > 0 ? y$$10 : x$$24;\n }, xs$$12);\n}\nexport function max(xs$$13, comparer$$15) {\n return reduce(function (x$$25, y$$11) {\n return comparer$$15.Compare(y$$11, x$$25) > 0 ? y$$11 : x$$25;\n }, xs$$13);\n}\nexport function minBy(projection$$8, xs$$14, comparer$$16) {\n return reduce(function (x$$26, y$$12) {\n return comparer$$16.Compare(projection$$8(y$$12), projection$$8(x$$26)) > 0 ? x$$26 : y$$12;\n }, xs$$14);\n}\nexport function min(xs$$15, comparer$$17) {\n return reduce(function (x$$27, y$$13) {\n return comparer$$17.Compare(y$$13, x$$27) > 0 ? x$$27 : y$$13;\n }, xs$$15);\n}\nexport function average(array$$122, averager) {\n if (array$$122.length === 0) {\n throw new Error(\"The input array was empty\\\\nParameter name: array\");\n }\n\n let total = averager.GetZero();\n\n for (let i$$46 = 0; i$$46 <= array$$122.length - 1; i$$46++) {\n total = averager.Add(total, array$$122[i$$46]);\n }\n\n return averager.DivideByInt(total, array$$122.length);\n}\nexport function averageBy(projection$$9, array$$123, averager$$1) {\n if (array$$123.length === 0) {\n throw new Error(\"The input array was empty\\\\nParameter name: array\");\n }\n\n let total$$1 = averager$$1.GetZero();\n\n for (let i$$47 = 0; i$$47 <= array$$123.length - 1; i$$47++) {\n total$$1 = averager$$1.Add(total$$1, projection$$9(array$$123[i$$47]));\n }\n\n return averager$$1.DivideByInt(total$$1, array$$123.length);\n}\nexport function ofSeq(source$$6, cons$$31) {\n return cons$$31.from(source$$6);\n}\nexport function ofList(source$$7, cons$$32) {\n return cons$$32.from(source$$7);\n}\nexport function toList(source$$8) {\n const len$$17 = source$$8.length | 0;\n let target$$6 = new List();\n\n for (let i$$48 = len$$17 - 1; i$$48 >= 0; i$$48--) {\n target$$6 = new List(source$$8[i$$48], target$$6);\n }\n\n return target$$6;\n}\nexport function windowed(windowSize, source$$9) {\n if (windowSize <= 0) {\n throw new Error(\"windowSize must be positive\");\n }\n\n let res$$9;\n const len$$18 = max$$1(comparePrimitives, 0, source$$9.length - windowSize) | 0;\n res$$9 = new Array(len$$18);\n\n for (let i$$49 = windowSize; i$$49 <= source$$9.length; i$$49++) {\n res$$9[i$$49 - windowSize] = source$$9.slice(i$$49 - windowSize, i$$49 - 1 + 1);\n }\n\n return res$$9;\n}\nexport function splitInto(chunks, array$$124) {\n if (chunks < 1) {\n throw new Error(\"The input must be positive.\\\\nParameter name: chunks\");\n }\n\n if (array$$124.length === 0) {\n return [[]];\n } else {\n const result$$14 = [];\n const chunks$$1 = min$$1(comparePrimitives, chunks, array$$124.length) | 0;\n const minChunkSize = ~~(array$$124.length / chunks$$1) | 0;\n const chunksWithExtraItem = array$$124.length % chunks$$1 | 0;\n\n for (let i$$50 = 0; i$$50 <= chunks$$1 - 1; i$$50++) {\n const chunkSize$$1 = (i$$50 < chunksWithExtraItem ? minChunkSize + 1 : minChunkSize) | 0;\n const start$$11 = i$$50 * minChunkSize + min$$1(comparePrimitives, chunksWithExtraItem, i$$50) | 0;\n const slice$$1 = array$$124.slice(start$$11, start$$11 + chunkSize$$1);\n const value$$13 = result$$14.push(slice$$1);\n void value$$13;\n }\n\n return result$$14;\n }\n}\nexport function transpose(arrays$$2, cons$$33) {\n var value$$14;\n const arrays$$3 = Array.isArray(arrays$$2) ? arrays$$2 : Array.from(arrays$$2);\n const len$$20 = arrays$$3.length | 0;\n\n if (len$$20 === 0) {\n return new Array(0);\n } else {\n const lenInner = arrays$$3[0].length | 0;\n\n if (value$$14 = (forAll(function predicate$$34(a) {\n return a.length === lenInner;\n }, arrays$$3)), (!value$$14)) {\n throw new Error(\"Arrays had different lengths\");\n }\n\n const result$$15 = new Array(lenInner);\n\n for (let i$$51 = 0; i$$51 <= lenInner - 1; i$$51++) {\n result$$15[i$$51] = new cons$$33(len$$20);\n\n for (let j$$2 = 0; j$$2 <= len$$20 - 1; j$$2++) {\n result$$15[i$$51][j$$2] = arrays$$3[j$$2][i$$51];\n }\n }\n\n return result$$15;\n }\n}","import { defaultArg, value as value$$1, some } from \"./Option.js\";\nimport { List } from \"./Types.js\";\nimport { transpose as transpose$$1, pairwise as pairwise$$1, collect as collect$$1, scanBack as scanBack$$1, scan as scan$$1, foldBack2 as foldBack2$$1, fold2 as fold2$$1, fold as fold$$1, map as map$$1 } from \"./Seq.js\";\nimport { getItemFromDict, addToDict, tryGetValue, addToSet, count } from \"./Util.js\";\nimport { ofList } from \"./Array.js\";\nimport { splitInto as splitInto$$1, chunkBySize as chunkBySize$$1, permute as permute$$1, findIndexBack as findIndexBack$$1, tryFindIndexBack as tryFindIndexBack$$1 } from \"./Array\";\nimport { createMutable } from \"./Set.js\";\nimport { createMutable as createMutable$$1 } from \"./Map.js\";\nexport function head(_arg1) {\n if (_arg1.tail != null) {\n return _arg1.head;\n } else {\n throw new Error(\"List was empty\");\n }\n}\nexport function tryHead(_arg1$$1) {\n if (_arg1$$1.tail != null) {\n return some(_arg1$$1.head);\n } else {\n return null;\n }\n}\nexport function tail(_arg1$$2) {\n if (_arg1$$2.tail != null) {\n return _arg1$$2.tail;\n } else {\n throw new Error(\"List was empty\");\n }\n}\nexport function last($_arg1$$3$$5) {\n last: while (true) {\n const _arg1$$3 = $_arg1$$3$$5;\n\n if (_arg1$$3.tail != null) {\n if (_arg1$$3.tail.tail == null) {\n return _arg1$$3.head;\n } else {\n $_arg1$$3$$5 = _arg1$$3.tail;\n continue last;\n }\n } else {\n throw new Error(\"List was empty\");\n }\n\n break;\n }\n}\nexport function tryLast($_arg1$$4$$6) {\n tryLast: while (true) {\n const _arg1$$4 = $_arg1$$4$$6;\n\n if (_arg1$$4.tail != null) {\n if (_arg1$$4.tail.tail == null) {\n return some(_arg1$$4.head);\n } else {\n $_arg1$$4$$6 = _arg1$$4.tail;\n continue tryLast;\n }\n } else {\n return null;\n }\n\n break;\n }\n}\nexport function compareWith(comparer, xs$$3, ys) {\n if (xs$$3 === ys) {\n return 0;\n } else {\n const loop = function loop($xs$$4$$10, $ys$$1$$11) {\n loop: while (true) {\n const xs$$4 = $xs$$4$$10,\n ys$$1 = $ys$$1$$11;\n\n if (xs$$4.tail != null) {\n if (ys$$1.tail != null) {\n const matchValue$$1 = comparer(xs$$4.head, ys$$1.head) | 0;\n\n if (matchValue$$1 === 0) {\n $xs$$4$$10 = xs$$4.tail;\n $ys$$1$$11 = ys$$1.tail;\n continue loop;\n } else {\n return matchValue$$1 | 0;\n }\n } else {\n return 1;\n }\n } else if (ys$$1.tail == null) {\n return 0;\n } else {\n return -1 | 0;\n }\n\n break;\n }\n };\n\n return loop(xs$$3, ys) | 0;\n }\n}\nexport function foldIndexedAux($f$$12, $i$$13, $acc$$14, $_arg1$$5$$15) {\n foldIndexedAux: while (true) {\n const f = $f$$12,\n i = $i$$13,\n acc = $acc$$14,\n _arg1$$5 = $_arg1$$5$$15;\n\n if (_arg1$$5.tail != null) {\n $f$$12 = f;\n $i$$13 = i + 1;\n $acc$$14 = f(i, acc, _arg1$$5.head);\n $_arg1$$5$$15 = _arg1$$5.tail;\n continue foldIndexedAux;\n } else {\n return acc;\n }\n\n break;\n }\n}\nexport function foldIndexed(f$$1, state, xs$$7) {\n return foldIndexedAux(f$$1, 0, state, xs$$7);\n}\nexport function fold($f$$2$$19, $state$$1$$20, $xs$$8$$21) {\n fold: while (true) {\n const f$$2 = $f$$2$$19,\n state$$1 = $state$$1$$20,\n xs$$8 = $xs$$8$$21;\n\n if (xs$$8.tail != null) {\n $f$$2$$19 = f$$2;\n $state$$1$$20 = f$$2(state$$1, xs$$8.head);\n $xs$$8$$21 = xs$$8.tail;\n continue fold;\n } else {\n return state$$1;\n }\n\n break;\n }\n}\nexport function reverse(xs$$9) {\n return fold(function (acc$$1, x$$6) {\n return new List(x$$6, acc$$1);\n }, new List(), xs$$9);\n}\nexport function foldBack(f$$3, xs$$10, state$$2) {\n return fold(function (acc$$2, x$$7) {\n return f$$3(x$$7, acc$$2);\n }, state$$2, reverse(xs$$10));\n}\nexport function toSeq(xs$$11) {\n return map$$1(function (x$$8) {\n return x$$8;\n }, xs$$11);\n}\nexport function ofSeq(xs$$12) {\n const xs$$13 = fold$$1(function (acc$$3, x$$9) {\n return new List(x$$9, acc$$3);\n }, new List(), xs$$12);\n return reverse(xs$$13);\n}\nexport function concat(lists) {\n const xs$$15 = fold$$1(function (state$$3, xs$$14) {\n return fold(function f$$4(acc$$4, x$$10) {\n return new List(x$$10, acc$$4);\n }, state$$3, xs$$14);\n }, new List(), lists);\n return reverse(xs$$15);\n}\nexport function foldIndexed2Aux($f$$5$$31, $i$$1$$32, $acc$$5$$33, $bs$$34, $cs$$35) {\n foldIndexed2Aux: while (true) {\n const f$$5 = $f$$5$$31,\n i$$1 = $i$$1$$32,\n acc$$5 = $acc$$5$$33,\n bs = $bs$$34,\n cs = $cs$$35;\n var $target$$36, x$$11, xs$$16, y$$1, ys$$3;\n\n if (bs.tail != null) {\n if (cs.tail != null) {\n $target$$36 = 1;\n x$$11 = bs.head;\n xs$$16 = bs.tail;\n y$$1 = cs.head;\n ys$$3 = cs.tail;\n } else {\n $target$$36 = 2;\n }\n } else if (cs.tail == null) {\n $target$$36 = 0;\n } else {\n $target$$36 = 2;\n }\n\n switch ($target$$36) {\n case 0:\n {\n return acc$$5;\n }\n\n case 1:\n {\n $f$$5$$31 = f$$5;\n $i$$1$$32 = i$$1 + 1;\n $acc$$5$$33 = f$$5(i$$1, acc$$5, x$$11, y$$1);\n $bs$$34 = xs$$16;\n $cs$$35 = ys$$3;\n continue foldIndexed2Aux;\n }\n\n case 2:\n {\n throw new Error(\"Lists had different lengths\");\n }\n }\n\n break;\n }\n}\nexport function foldIndexed2(f$$6, state$$4, xs$$17, ys$$4) {\n return foldIndexed2Aux(f$$6, 0, state$$4, xs$$17, ys$$4);\n}\nexport function fold2(f$$7, state$$5, xs$$18, ys$$5) {\n return fold2$$1(f$$7, state$$5, xs$$18, ys$$5);\n}\nexport function foldBack2(f$$8, xs$$19, ys$$6, state$$6) {\n return foldBack2$$1(f$$8, xs$$19, ys$$6, state$$6);\n}\nexport function unfold(f$$9, state$$7) {\n const unfoldInner = function unfoldInner($acc$$6$$51, $state$$8$$52) {\n unfoldInner: while (true) {\n const acc$$6 = $acc$$6$$51,\n state$$8 = $state$$8$$52;\n const matchValue$$3 = f$$9(state$$8);\n\n if (matchValue$$3 != null) {\n const x$$12 = matchValue$$3[0];\n const state$$9 = matchValue$$3[1];\n $acc$$6$$51 = new List(x$$12, acc$$6);\n $state$$8$$52 = state$$9;\n continue unfoldInner;\n } else {\n return reverse(acc$$6);\n }\n\n break;\n }\n };\n\n return unfoldInner(new List(), state$$7);\n}\nexport function foldIndexed3Aux($f$$10$$53, $i$$2$$54, $acc$$7$$55, $bs$$1$$56, $cs$$1$$57, $ds$$58) {\n foldIndexed3Aux: while (true) {\n const f$$10 = $f$$10$$53,\n i$$2 = $i$$2$$54,\n acc$$7 = $acc$$7$$55,\n bs$$1 = $bs$$1$$56,\n cs$$1 = $cs$$1$$57,\n ds = $ds$$58;\n var $target$$59, x$$13, xs$$20, y$$2, ys$$7, z, zs;\n\n if (bs$$1.tail != null) {\n if (cs$$1.tail != null) {\n if (ds.tail != null) {\n $target$$59 = 1;\n x$$13 = bs$$1.head;\n xs$$20 = bs$$1.tail;\n y$$2 = cs$$1.head;\n ys$$7 = cs$$1.tail;\n z = ds.head;\n zs = ds.tail;\n } else {\n $target$$59 = 2;\n }\n } else {\n $target$$59 = 2;\n }\n } else if (cs$$1.tail == null) {\n if (ds.tail == null) {\n $target$$59 = 0;\n } else {\n $target$$59 = 2;\n }\n } else {\n $target$$59 = 2;\n }\n\n switch ($target$$59) {\n case 0:\n {\n return acc$$7;\n }\n\n case 1:\n {\n $f$$10$$53 = f$$10;\n $i$$2$$54 = i$$2 + 1;\n $acc$$7$$55 = f$$10(i$$2, acc$$7, x$$13, y$$2, z);\n $bs$$1$$56 = xs$$20;\n $cs$$1$$57 = ys$$7;\n $ds$$58 = zs;\n continue foldIndexed3Aux;\n }\n\n case 2:\n {\n throw new Error(\"Lists had different lengths\");\n }\n }\n\n break;\n }\n}\nexport function foldIndexed3(f$$11, seed, xs$$21, ys$$8, zs$$1) {\n return foldIndexed3Aux(f$$11, 0, seed, xs$$21, ys$$8, zs$$1);\n}\nexport function fold3(f$$12, state$$10, xs$$22, ys$$9, zs$$2) {\n return foldIndexed3(function (_arg1$$6, acc$$8, x$$14, y$$3, z$$1) {\n return f$$12(acc$$8, x$$14, y$$3, z$$1);\n }, state$$10, xs$$22, ys$$9, zs$$2);\n}\nexport function scan(f$$13, state$$11, xs$$23) {\n const xs$$24 = scan$$1(f$$13, state$$11, xs$$23);\n return ofSeq(xs$$24);\n}\nexport function scanBack(f$$14, xs$$25, state$$12) {\n const xs$$26 = scanBack$$1(f$$14, xs$$25, state$$12);\n return ofSeq(xs$$26);\n}\nexport function length(xs$$27) {\n return fold(function (acc$$9, _arg1$$7) {\n return acc$$9 + 1;\n }, 0, xs$$27);\n}\nexport function append(xs$$28, ys$$10) {\n return fold(function (acc$$10, x$$15) {\n return new List(x$$15, acc$$10);\n }, ys$$10, reverse(xs$$28));\n}\nexport function collect(f$$15, xs$$29) {\n const xs$$30 = collect$$1(f$$15, xs$$29);\n return ofSeq(xs$$30);\n}\nexport function map(f$$16, xs$$31) {\n const xs$$32 = fold(function (acc$$11, x$$16) {\n return new List(f$$16(x$$16), acc$$11);\n }, new List(), xs$$31);\n return reverse(xs$$32);\n}\nexport function mapIndexed(f$$17, xs$$33) {\n const xs$$34 = foldIndexed(function (i$$3, acc$$12, x$$17) {\n return new List(f$$17(i$$3, x$$17), acc$$12);\n }, new List(), xs$$33);\n return reverse(xs$$34);\n}\nexport function indexed(xs$$35) {\n return mapIndexed(function (i$$4, x$$18) {\n return [i$$4, x$$18];\n }, xs$$35);\n}\nexport function map2(f$$18, xs$$36, ys$$11) {\n const xs$$37 = fold2(function (acc$$13, x$$19, y$$4) {\n return new List(f$$18(x$$19, y$$4), acc$$13);\n }, new List(), xs$$36, ys$$11);\n return reverse(xs$$37);\n}\nexport function mapIndexed2(f$$19, xs$$38, ys$$12) {\n const xs$$39 = foldIndexed2(function (i$$5, acc$$14, x$$20, y$$5) {\n return new List(f$$19(i$$5, x$$20, y$$5), acc$$14);\n }, new List(), xs$$38, ys$$12);\n return reverse(xs$$39);\n}\nexport function map3(f$$20, xs$$40, ys$$13, zs$$3) {\n const xs$$41 = fold3(function (acc$$15, x$$21, y$$6, z$$2) {\n return new List(f$$20(x$$21, y$$6, z$$2), acc$$15);\n }, new List(), xs$$40, ys$$13, zs$$3);\n return reverse(xs$$41);\n}\nexport function mapIndexed3(f$$21, xs$$42, ys$$14, zs$$4) {\n const xs$$43 = foldIndexed3(function (i$$6, acc$$16, x$$22, y$$7, z$$3) {\n return new List(f$$21(i$$6, x$$22, y$$7, z$$3), acc$$16);\n }, new List(), xs$$42, ys$$14, zs$$4);\n return reverse(xs$$43);\n}\nexport function mapFold(f$$22, s, xs$$44) {\n const patternInput$$1 = fold(function foldFn(tupledArg, x$$23) {\n const patternInput = f$$22(tupledArg[1], x$$23);\n return [new List(patternInput[0], tupledArg[0]), patternInput[1]];\n }, [new List(), s], xs$$44);\n return [reverse(patternInput$$1[0]), patternInput$$1[1]];\n}\nexport function mapFoldBack(f$$23, xs$$45, s$$2) {\n return mapFold(function (s$$3, v) {\n return f$$23(v, s$$3);\n }, s$$2, reverse(xs$$45));\n}\nexport function iterate(f$$24, xs$$46) {\n fold(function (unitVar0, x$$24) {\n f$$24(x$$24);\n }, null, xs$$46);\n}\nexport function iterate2(f$$25, xs$$47, ys$$15) {\n fold2(function (unitVar0$$1, x$$25, y$$8) {\n f$$25(x$$25, y$$8);\n }, null, xs$$47, ys$$15);\n}\nexport function iterateIndexed(f$$26, xs$$48) {\n foldIndexed(function (i$$7, unitVar1, x$$26) {\n f$$26(i$$7, x$$26);\n }, null, xs$$48);\n}\nexport function iterateIndexed2(f$$27, xs$$49, ys$$16) {\n foldIndexed2(function (i$$8, unitVar1$$1, x$$27, y$$9) {\n f$$27(i$$8, x$$27, y$$9);\n }, null, xs$$49, ys$$16);\n}\nexport function ofArray(xs$$50) {\n let res$$1 = new List();\n\n for (let i$$9 = count(xs$$50) - 1; i$$9 >= 0; i$$9--) {\n res$$1 = new List(xs$$50[i$$9], res$$1);\n }\n\n return res$$1;\n}\nexport function empty() {\n return new List();\n}\nexport function isEmpty(_arg1$$8) {\n if (_arg1$$8.tail == null) {\n return true;\n } else {\n return false;\n }\n}\nexport function tryPickIndexedAux($f$$28$$120, $i$$10$$121, $_arg1$$9$$122) {\n tryPickIndexedAux: while (true) {\n const f$$28 = $f$$28$$120,\n i$$10 = $i$$10$$121,\n _arg1$$9 = $_arg1$$9$$122;\n\n if (_arg1$$9.tail != null) {\n const result = f$$28(i$$10, _arg1$$9.head);\n\n if (result == null) {\n $f$$28$$120 = f$$28;\n $i$$10$$121 = i$$10 + 1;\n $_arg1$$9$$122 = _arg1$$9.tail;\n continue tryPickIndexedAux;\n } else {\n return result;\n }\n } else {\n return null;\n }\n\n break;\n }\n}\nexport function tryPickIndexed(f$$29, xs$$52) {\n return tryPickIndexedAux(f$$29, 0, xs$$52);\n}\nexport function tryPick(f$$30, xs$$53) {\n return tryPickIndexed(function (_arg1$$10, x$$29) {\n return f$$30(x$$29);\n }, xs$$53);\n}\nexport function pick(f$$31, xs$$54) {\n const matchValue$$5 = tryPick(f$$31, xs$$54);\n\n if (matchValue$$5 != null) {\n const x$$30 = value$$1(matchValue$$5);\n return x$$30;\n } else {\n throw new Error(\"List did not contain any matching elements\");\n }\n}\nexport function tryFindIndexed(f$$32, xs$$55) {\n return tryPickIndexed(function (i$$11, x$$31) {\n return f$$32(i$$11, x$$31) ? some(x$$31) : null;\n }, xs$$55);\n}\nexport function tryFind(f$$33, xs$$56) {\n return tryPickIndexed(function (_arg1$$11, x$$32) {\n return f$$33(x$$32) ? some(x$$32) : null;\n }, xs$$56);\n}\nexport function findIndexed(f$$34, xs$$57) {\n const matchValue$$6 = tryFindIndexed(f$$34, xs$$57);\n\n if (matchValue$$6 != null) {\n const x$$33 = value$$1(matchValue$$6);\n return x$$33;\n } else {\n throw new Error(\"List did not contain any matching elements\");\n }\n}\nexport function find(f$$35, xs$$58) {\n return findIndexed(function (_arg1$$12, x$$34) {\n return f$$35(x$$34);\n }, xs$$58);\n}\nexport function findBack(f$$36, xs$$59) {\n let xs$$61;\n xs$$61 = reverse(xs$$59);\n return find(f$$36, xs$$61);\n}\nexport function tryFindBack(f$$37, xs$$62) {\n let xs$$64;\n xs$$64 = reverse(xs$$62);\n return tryFind(f$$37, xs$$64);\n}\nexport function tryFindIndex(f$$38, xs$$65) {\n return tryPickIndexed(function (i$$12, x$$35) {\n return f$$38(x$$35) ? i$$12 : null;\n }, xs$$65);\n}\nexport function tryFindIndexBack(f$$39, xs$$66) {\n const array = ofList(xs$$66, Array);\n return tryFindIndexBack$$1(f$$39, array);\n}\nexport function findIndex(f$$40, xs$$67) {\n const matchValue$$7 = tryFindIndex(f$$40, xs$$67);\n\n if (matchValue$$7 != null) {\n const x$$36 = matchValue$$7 | 0;\n return x$$36 | 0;\n } else {\n throw new Error(\"List did not contain any matching elements\");\n }\n}\nexport function findIndexBack(f$$41, xs$$68) {\n const array$$1 = ofList(xs$$68, Array);\n return findIndexBack$$1(f$$41, array$$1) | 0;\n}\nexport function item(n, xs$$69) {\n return findIndexed(function (i$$13, _arg1$$13) {\n return n === i$$13;\n }, xs$$69);\n}\nexport function tryItem(n$$1, xs$$70) {\n return tryFindIndexed(function (i$$14, _arg1$$14) {\n return n$$1 === i$$14;\n }, xs$$70);\n}\nexport function filter(f$$42, xs$$71) {\n const xs$$72 = fold(function (acc$$17, x$$37) {\n return f$$42(x$$37) ? new List(x$$37, acc$$17) : acc$$17;\n }, new List(), xs$$71);\n return reverse(xs$$72);\n}\nexport function partition(f$$43, xs$$73) {\n return fold(function (tupledArg$$1, x$$38) {\n return f$$43(x$$38) ? [new List(x$$38, tupledArg$$1[0]), tupledArg$$1[1]] : [tupledArg$$1[0], new List(x$$38, tupledArg$$1[1])];\n }, [new List(), new List()], reverse(xs$$73));\n}\nexport function choose(f$$44, xs$$74) {\n const xs$$75 = fold(function (acc$$18, x$$39) {\n const matchValue$$8 = f$$44(x$$39);\n\n if (matchValue$$8 == null) {\n return acc$$18;\n } else {\n const y$$10 = value$$1(matchValue$$8);\n return new List(y$$10, acc$$18);\n }\n }, new List(), xs$$74);\n return reverse(xs$$75);\n}\nexport function contains(value, list, eq) {\n const loop$$1 = function loop$$1($xs$$76$$162) {\n loop$$1: while (true) {\n const xs$$76 = $xs$$76$$162;\n\n if (xs$$76.tail != null) {\n if (eq.Equals(value, xs$$76.head)) {\n return true;\n } else {\n $xs$$76$$162 = xs$$76.tail;\n continue loop$$1;\n }\n } else {\n return false;\n }\n\n break;\n }\n };\n\n return loop$$1(list);\n}\nexport function except(itemsToExclude, array$$2, eq$$1) {\n if (isEmpty(array$$2)) {\n return array$$2;\n } else {\n const cached = createMutable(itemsToExclude, eq$$1);\n return filter(function f$$45(arg00) {\n return addToSet(arg00, cached);\n }, array$$2);\n }\n}\nexport function initialize(n$$2, f$$46) {\n let xs$$78 = new List();\n\n for (let i$$15 = 0; i$$15 <= n$$2 - 1; i$$15++) {\n xs$$78 = new List(f$$46(i$$15), xs$$78);\n }\n\n return reverse(xs$$78);\n}\nexport function replicate(n$$3, x$$40) {\n return initialize(n$$3, function (_arg1$$15) {\n return x$$40;\n });\n}\nexport function reduce(f$$47, _arg1$$16) {\n if (_arg1$$16.tail != null) {\n return fold(f$$47, _arg1$$16.head, _arg1$$16.tail);\n } else {\n throw new Error(\"List was empty\");\n }\n}\nexport function reduceBack(f$$48, _arg1$$17) {\n if (_arg1$$17.tail != null) {\n return foldBack(f$$48, _arg1$$17.tail, _arg1$$17.head);\n } else {\n throw new Error(\"List was empty\");\n }\n}\nexport function forAll(f$$49, xs$$79) {\n return fold(function (acc$$19, x$$41) {\n return acc$$19 ? f$$49(x$$41) : false;\n }, true, xs$$79);\n}\nexport function forAll2(f$$50, xs$$80, ys$$17) {\n return fold2(function (acc$$20, x$$42, y$$11) {\n return acc$$20 ? f$$50(x$$42, y$$11) : false;\n }, true, xs$$80, ys$$17);\n}\nexport function exists($f$$51$$180, $_arg1$$18$$181) {\n exists: while (true) {\n const f$$51 = $f$$51$$180,\n _arg1$$18 = $_arg1$$18$$181;\n\n if (_arg1$$18.tail != null) {\n if (f$$51(_arg1$$18.head)) {\n return true;\n } else {\n $f$$51$$180 = f$$51;\n $_arg1$$18$$181 = _arg1$$18.tail;\n continue exists;\n }\n } else {\n return false;\n }\n\n break;\n }\n}\nexport function exists2($f$$52$$182, $bs$$2$$183, $cs$$2$$184) {\n exists2: while (true) {\n const f$$52 = $f$$52$$182,\n bs$$2 = $bs$$2$$183,\n cs$$2 = $cs$$2$$184;\n var $target$$185, x$$44, xs$$82, y$$12, ys$$18;\n\n if (bs$$2.tail != null) {\n if (cs$$2.tail != null) {\n $target$$185 = 1;\n x$$44 = bs$$2.head;\n xs$$82 = bs$$2.tail;\n y$$12 = cs$$2.head;\n ys$$18 = cs$$2.tail;\n } else {\n $target$$185 = 2;\n }\n } else if (cs$$2.tail == null) {\n $target$$185 = 0;\n } else {\n $target$$185 = 2;\n }\n\n switch ($target$$185) {\n case 0:\n {\n return false;\n }\n\n case 1:\n {\n if (f$$52(x$$44, y$$12)) {\n return true;\n } else {\n $f$$52$$182 = f$$52;\n $bs$$2$$183 = xs$$82;\n $cs$$2$$184 = ys$$18;\n continue exists2;\n }\n }\n\n case 2:\n {\n throw new Error(\"Lists had different lengths\");\n }\n }\n\n break;\n }\n}\nexport function unzip(xs$$83) {\n return foldBack(function (tupledArg$$2, tupledArg$$3) {\n return [new List(tupledArg$$2[0], tupledArg$$3[0]), new List(tupledArg$$2[1], tupledArg$$3[1])];\n }, xs$$83, [new List(), new List()]);\n}\nexport function unzip3(xs$$84) {\n return foldBack(function (tupledArg$$4, tupledArg$$5) {\n return [new List(tupledArg$$4[0], tupledArg$$5[0]), new List(tupledArg$$4[1], tupledArg$$5[1]), new List(tupledArg$$4[2], tupledArg$$5[2])];\n }, xs$$84, [new List(), new List(), new List()]);\n}\nexport function zip(xs$$85, ys$$19) {\n return map2(function (x$$47, y$$15) {\n return [x$$47, y$$15];\n }, xs$$85, ys$$19);\n}\nexport function zip3(xs$$86, ys$$20, zs$$5) {\n return map3(function (x$$48, y$$16, z$$5) {\n return [x$$48, y$$16, z$$5];\n }, xs$$86, ys$$20, zs$$5);\n}\nexport function sort(xs$$87, comparer$$1) {\n let xs$$89;\n const xs$$88 = ofList(xs$$87, Array);\n xs$$88.sort(function comparer$$2(x$$49, y$$17) {\n return comparer$$1.Compare(x$$49, y$$17);\n });\n xs$$89 = xs$$88;\n return ofArray(xs$$89);\n}\nexport function sortBy(projection, xs$$90, comparer$$3) {\n let xs$$92;\n const xs$$91 = ofList(xs$$90, Array);\n xs$$91.sort(function comparer$$4(x$$50, y$$18) {\n return comparer$$3.Compare(projection(x$$50), projection(y$$18));\n });\n xs$$92 = xs$$91;\n return ofArray(xs$$92);\n}\nexport function sortDescending(xs$$93, comparer$$5) {\n let xs$$95;\n const xs$$94 = ofList(xs$$93, Array);\n xs$$94.sort(function comparer$$6(x$$51, y$$19) {\n return comparer$$5.Compare(x$$51, y$$19) * -1;\n });\n xs$$95 = xs$$94;\n return ofArray(xs$$95);\n}\nexport function sortByDescending(projection$$1, xs$$96, comparer$$7) {\n let xs$$98;\n const xs$$97 = ofList(xs$$96, Array);\n xs$$97.sort(function comparer$$8(x$$52, y$$20) {\n return comparer$$7.Compare(projection$$1(x$$52), projection$$1(y$$20)) * -1;\n });\n xs$$98 = xs$$97;\n return ofArray(xs$$98);\n}\nexport function sortWith(comparer$$9, xs$$99) {\n let xs$$101;\n const xs$$100 = ofList(xs$$99, Array);\n xs$$100.sort(comparer$$9);\n xs$$101 = xs$$100;\n return ofArray(xs$$101);\n}\nexport function sum(xs$$102, adder) {\n return fold(function (acc$$21, x$$53) {\n return adder.Add(acc$$21, x$$53);\n }, adder.GetZero(), xs$$102);\n}\nexport function sumBy(f$$53, xs$$103, adder$$1) {\n return fold(function (acc$$22, x$$54) {\n return adder$$1.Add(acc$$22, f$$53(x$$54));\n }, adder$$1.GetZero(), xs$$103);\n}\nexport function maxBy(projection$$2, xs$$104, comparer$$11) {\n return reduce(function (x$$55, y$$21) {\n return comparer$$11.Compare(projection$$2(y$$21), projection$$2(x$$55)) > 0 ? y$$21 : x$$55;\n }, xs$$104);\n}\nexport function max(li, comparer$$12) {\n return reduce(function (x$$56, y$$22) {\n return comparer$$12.Compare(y$$22, x$$56) > 0 ? y$$22 : x$$56;\n }, li);\n}\nexport function minBy(projection$$3, xs$$105, comparer$$13) {\n return reduce(function (x$$57, y$$23) {\n return comparer$$13.Compare(projection$$3(y$$23), projection$$3(x$$57)) > 0 ? x$$57 : y$$23;\n }, xs$$105);\n}\nexport function min(xs$$106, comparer$$14) {\n return reduce(function (x$$58, y$$24) {\n return comparer$$14.Compare(y$$24, x$$58) > 0 ? x$$58 : y$$24;\n }, xs$$106);\n}\nexport function average(xs$$107, averager) {\n const total = fold(function (acc$$23, x$$59) {\n return averager.Add(acc$$23, x$$59);\n }, averager.GetZero(), xs$$107);\n return averager.DivideByInt(total, length(xs$$107));\n}\nexport function averageBy(f$$54, xs$$108, averager$$1) {\n const total$$1 = fold(function (acc$$24, x$$60) {\n return averager$$1.Add(acc$$24, f$$54(x$$60));\n }, averager$$1.GetZero(), xs$$108);\n return averager$$1.DivideByInt(total$$1, length(xs$$108));\n}\nexport function permute(f$$55, xs$$109) {\n let xs$$110;\n let array$$3;\n array$$3 = ofList(xs$$109, Array);\n xs$$110 = permute$$1(f$$55, array$$3);\n return ofArray(xs$$110);\n}\nexport function chunkBySize(chunkSize, xs$$111) {\n let xs$$114;\n let xs$$112;\n let array$$4;\n array$$4 = ofList(xs$$111, Array);\n xs$$112 = chunkBySize$$1(chunkSize, array$$4);\n xs$$114 = ofArray(xs$$112);\n return map(function f$$56(xs$$113) {\n return ofArray(xs$$113);\n }, xs$$114);\n}\nexport function skip(i$$16, xs$$115) {\n const skipInner = function skipInner($i$$17$$240, $xs$$116$$241) {\n skipInner: while (true) {\n const i$$17 = $i$$17$$240,\n xs$$116 = $xs$$116$$241;\n\n if (i$$17 === 0) {\n return xs$$116;\n } else if (xs$$116.tail != null) {\n $i$$17$$240 = i$$17 - 1;\n $xs$$116$$241 = xs$$116.tail;\n continue skipInner;\n } else {\n throw new Error(\"The input sequence has an insufficient number of elements.\");\n }\n\n break;\n }\n };\n\n if (i$$16 < 0) {\n throw new Error(\"The input must be non-negative.\");\n } else {\n var $target$$242, i$$20, xs$$119;\n\n if (i$$16 === 0) {\n $target$$242 = 0;\n } else if (i$$16 === 1) {\n if (xs$$115.tail != null) {\n $target$$242 = 1;\n } else {\n $target$$242 = 2;\n i$$20 = i$$16;\n xs$$119 = xs$$115;\n }\n } else {\n $target$$242 = 2;\n i$$20 = i$$16;\n xs$$119 = xs$$115;\n }\n\n switch ($target$$242) {\n case 0:\n {\n return xs$$115;\n }\n\n case 1:\n {\n return xs$$115.tail;\n }\n\n case 2:\n {\n return skipInner(i$$20, xs$$119);\n }\n }\n }\n}\nexport function skipWhile($predicate$$243, $xs$$120$$244) {\n skipWhile: while (true) {\n const predicate = $predicate$$243,\n xs$$120 = $xs$$120$$244;\n var $target$$245, h$$4, t$$4;\n\n if (xs$$120.tail != null) {\n if (predicate(xs$$120.head)) {\n $target$$245 = 0;\n h$$4 = xs$$120.head;\n t$$4 = xs$$120.tail;\n } else {\n $target$$245 = 1;\n }\n } else {\n $target$$245 = 1;\n }\n\n switch ($target$$245) {\n case 0:\n {\n $predicate$$243 = predicate;\n $xs$$120$$244 = t$$4;\n continue skipWhile;\n }\n\n case 1:\n {\n return xs$$120;\n }\n }\n\n break;\n }\n}\nexport function takeSplitAux($error$$246, $i$$21$$247, $acc$$25$$248, $xs$$121$$249) {\n takeSplitAux: while (true) {\n const error = $error$$246,\n i$$21 = $i$$21$$247,\n acc$$25 = $acc$$25$$248,\n xs$$121 = $xs$$121$$249;\n\n if (i$$21 === 0) {\n return [reverse(acc$$25), xs$$121];\n } else if (xs$$121.tail != null) {\n $error$$246 = error;\n $i$$21$$247 = i$$21 - 1;\n $acc$$25$$248 = new List(xs$$121.head, acc$$25);\n $xs$$121$$249 = xs$$121.tail;\n continue takeSplitAux;\n } else {\n if (error) {\n throw new Error(\"The input sequence has an insufficient number of elements.\");\n } else {\n return [reverse(acc$$25), xs$$121];\n }\n }\n\n break;\n }\n}\nexport function take(i$$22, xs$$123) {\n if (i$$22 < 0) {\n throw new Error(\"The input must be non-negative.\");\n } else {\n var $target$$252, i$$25, xs$$124;\n\n if (i$$22 === 0) {\n $target$$252 = 0;\n } else if (i$$22 === 1) {\n if (xs$$123.tail != null) {\n $target$$252 = 1;\n } else {\n $target$$252 = 2;\n i$$25 = i$$22;\n xs$$124 = xs$$123;\n }\n } else {\n $target$$252 = 2;\n i$$25 = i$$22;\n xs$$124 = xs$$123;\n }\n\n switch ($target$$252) {\n case 0:\n {\n return new List();\n }\n\n case 1:\n {\n return new List(xs$$123.head, new List());\n }\n\n case 2:\n {\n const tuple = takeSplitAux(true, i$$25, new List(), xs$$124);\n return tuple[0];\n }\n }\n }\n}\nexport function takeWhile(predicate$$1, xs$$125) {\n if (xs$$125.tail != null) {\n if (xs$$125.tail.tail == null) {\n if (predicate$$1(xs$$125.head)) {\n return xs$$125;\n } else {\n return xs$$125.tail;\n }\n } else {\n if (!predicate$$1(xs$$125.head)) {\n return new List();\n } else {\n return new List(xs$$125.head, takeWhile(predicate$$1, xs$$125.tail));\n }\n }\n } else {\n return xs$$125;\n }\n}\nexport function truncate(i$$26, xs$$127) {\n if (i$$26 < 0) {\n throw new Error(\"The input must be non-negative.\");\n } else {\n var $target$$257, i$$29, xs$$128;\n\n if (i$$26 === 0) {\n $target$$257 = 0;\n } else if (i$$26 === 1) {\n if (xs$$127.tail != null) {\n $target$$257 = 1;\n } else {\n $target$$257 = 2;\n i$$29 = i$$26;\n xs$$128 = xs$$127;\n }\n } else {\n $target$$257 = 2;\n i$$29 = i$$26;\n xs$$128 = xs$$127;\n }\n\n switch ($target$$257) {\n case 0:\n {\n return new List();\n }\n\n case 1:\n {\n return new List(xs$$127.head, new List());\n }\n\n case 2:\n {\n const tuple$$1 = takeSplitAux(false, i$$29, new List(), xs$$128);\n return tuple$$1[0];\n }\n }\n }\n}\nexport function splitAt(i$$30, xs$$129) {\n if (i$$30 < 0) {\n throw new Error(\"The input must be non-negative.\");\n } else {\n var $target$$260, i$$33, xs$$131;\n\n if (i$$30 === 0) {\n $target$$260 = 0;\n } else if (i$$30 === 1) {\n if (xs$$129.tail != null) {\n $target$$260 = 1;\n } else {\n $target$$260 = 2;\n i$$33 = i$$30;\n xs$$131 = xs$$129;\n }\n } else {\n $target$$260 = 2;\n i$$33 = i$$30;\n xs$$131 = xs$$129;\n }\n\n switch ($target$$260) {\n case 0:\n {\n return [new List(), xs$$129];\n }\n\n case 1:\n {\n return [new List(xs$$129.head, new List()), xs$$129.tail];\n }\n\n case 2:\n {\n return takeSplitAux(true, i$$33, new List(), xs$$131);\n }\n }\n }\n}\nexport function outOfRange() {\n throw new Error(\"Index out of range\");\n}\nexport function slice(lower, upper, xs$$132) {\n const lower$$1 = defaultArg(lower, 0) | 0;\n const hasUpper = upper != null;\n\n if (lower$$1 < 0) {\n return outOfRange();\n } else if (hasUpper ? upper < lower$$1 : false) {\n return new List();\n } else {\n let lastIndex = -1 | 0;\n let res$$2;\n const state$$13 = new List();\n res$$2 = foldIndexed(function f$$57(i$$34, acc$$26, x$$67) {\n lastIndex = i$$34;\n\n if (lower$$1 <= i$$34 ? !hasUpper ? true : i$$34 <= upper : false) {\n return new List(x$$67, acc$$26);\n } else {\n return acc$$26;\n }\n }, state$$13, xs$$132);\n\n if (lower$$1 > lastIndex + 1 ? true : hasUpper ? upper > lastIndex : false) {\n outOfRange();\n }\n\n return reverse(res$$2);\n }\n}\nexport function distinctBy(projection$$4, xs$$134, eq$$2) {\n const hashSet = createMutable([], eq$$2);\n return filter(function f$$58($arg$$1) {\n const arg00$$1 = projection$$4($arg$$1);\n return addToSet(arg00$$1, hashSet);\n }, xs$$134);\n}\nexport function distinct(xs$$136, eq$$3) {\n return distinctBy(function (x$$68) {\n return x$$68;\n }, xs$$136, eq$$3);\n}\nexport function exactlyOne(xs$$137) {\n if (xs$$137.tail != null) {\n if (xs$$137.tail.tail != null) {\n throw new Error(\"Input list too long\\\\nParameter name: list\");\n } else {\n return xs$$137.head;\n }\n } else {\n throw new Error(\"The input sequence was empty\\\\nParameter name: list\");\n }\n}\nexport function groupBy(projection$$5, xs$$139, eq$$4) {\n const dict = createMutable$$1([], eq$$4);\n let keys = new List();\n iterate(function f$$59(v$$2) {\n const key = projection$$5(v$$2);\n const matchValue$$16 = tryGetValue(dict, key, null);\n\n if (matchValue$$16[0]) {\n dict.set(key, new List(v$$2, matchValue$$16[1]));\n } else {\n addToDict(dict, key, new List(v$$2, new List()));\n keys = new List(key, keys);\n }\n }, xs$$139);\n let result$$1 = new List();\n const xs$$141 = keys;\n iterate(function f$$60(key$$1) {\n result$$1 = new List([key$$1, reverse(getItemFromDict(dict, key$$1))], result$$1);\n }, xs$$141);\n return result$$1;\n}\nexport function countBy(projection$$6, xs$$142, eq$$5) {\n const dict$$1 = createMutable$$1([], eq$$5);\n let keys$$1 = new List();\n iterate(function f$$61(v$$3) {\n const key$$2 = projection$$6(v$$3);\n const matchValue$$17 = tryGetValue(dict$$1, key$$2, 0);\n\n if (matchValue$$17[0]) {\n dict$$1.set(key$$2, matchValue$$17[1] + 1);\n } else {\n dict$$1.set(key$$2, 1);\n keys$$1 = new List(key$$2, keys$$1);\n }\n }, xs$$142);\n let result$$2 = new List();\n const xs$$144 = keys$$1;\n iterate(function f$$62(key$$3) {\n result$$2 = new List([key$$3, getItemFromDict(dict$$1, key$$3)], result$$2);\n }, xs$$144);\n return result$$2;\n}\nexport function where(predicate$$2, source) {\n return filter(predicate$$2, source);\n}\nexport function pairwise(source$$1) {\n const xs$$145 = pairwise$$1(source$$1);\n return ofSeq(xs$$145);\n}\nexport function windowed(windowSize, source$$2) {\n if (windowSize <= 0) {\n throw new Error(\"windowSize must be positive\");\n }\n\n let res$$3 = new List();\n\n for (let i$$35 = length(source$$2); i$$35 >= windowSize; i$$35--) {\n res$$3 = new List(slice(i$$35 - windowSize, i$$35 - 1, source$$2), res$$3);\n }\n\n return res$$3;\n}\nexport function splitInto(chunks, source$$3) {\n let xs$$148;\n let xs$$146;\n let array$$5;\n array$$5 = ofList(source$$3, Array);\n xs$$146 = splitInto$$1(chunks, array$$5);\n xs$$148 = ofArray(xs$$146);\n return map(function f$$63(xs$$147) {\n return ofArray(xs$$147);\n }, xs$$148);\n}\nexport function transpose(lists$$1) {\n let xs$$150;\n let source$$5;\n source$$5 = transpose$$1(lists$$1);\n xs$$150 = map$$1(ofSeq, source$$5);\n return ofSeq(xs$$150);\n}","namespace Elmish\n\n(**\nLog\n---------\nBasic cross-platform logging API.\n\n*)\nmodule internal Log =\n\n#if FABLE_COMPILER\n open Fable.Core.JS\n\n let onError (text: string, ex: exn) = console.error (text,ex)\n let toConsole(text: string, o: #obj) = console.log(text,o)\n\n#else\n#if NETSTANDARD2_0\n let onError (text: string, ex: exn) = System.Diagnostics.Trace.TraceError(\"{0}: {1}\", text, ex)\n let toConsole(text: string, o: #obj) = printfn \"%s: %A\" text o\n#else\n let onError (text: string, ex: exn) = System.Console.Error.WriteLine(\"{0}: {1}\", text, ex)\n let toConsole(text: string, o: #obj) = printfn \"%s: %A\" text o\n#endif\n#endif\n","export class CancellationToken {\n constructor(cancelled = false) {\n this._id = 0;\n this._cancelled = cancelled;\n this._listeners = new Map();\n }\n get isCancelled() {\n return this._cancelled;\n }\n cancel() {\n if (!this._cancelled) {\n this._cancelled = true;\n for (const [, listener] of this._listeners) {\n listener();\n }\n }\n }\n addListener(f) {\n const id = this._id;\n this._listeners.set(this._id++, f);\n return id;\n }\n removeListener(id) {\n return this._listeners.delete(id);\n }\n register(f, state) {\n const $ = this;\n const id = this.addListener(state == null ? f : () => f(state));\n return { Dispose() { $.removeListener(id); } };\n }\n}\nexport class OperationCanceledError extends Error {\n constructor() {\n super(\"The operation was canceled\");\n Object.setPrototypeOf(this, OperationCanceledError.prototype);\n }\n}\nexport class Trampoline {\n constructor() {\n this.callCount = 0;\n }\n static get maxTrampolineCallCount() {\n return 2000;\n }\n incrementAndCheck() {\n return this.callCount++ > Trampoline.maxTrampolineCallCount;\n }\n hijack(f) {\n this.callCount = 0;\n setTimeout(f, 0);\n }\n}\nexport function protectedCont(f) {\n return (ctx) => {\n if (ctx.cancelToken.isCancelled) {\n ctx.onCancel(new OperationCanceledError());\n }\n else if (ctx.trampoline.incrementAndCheck()) {\n ctx.trampoline.hijack(() => {\n try {\n f(ctx);\n }\n catch (err) {\n ctx.onError(err);\n }\n });\n }\n else {\n try {\n f(ctx);\n }\n catch (err) {\n ctx.onError(err);\n }\n }\n };\n}\nexport function protectedBind(computation, binder) {\n return protectedCont((ctx) => {\n computation({\n onSuccess: (x) => {\n try {\n binder(x)(ctx);\n }\n catch (ex) {\n ctx.onError(ex);\n }\n },\n onError: ctx.onError,\n onCancel: ctx.onCancel,\n cancelToken: ctx.cancelToken,\n trampoline: ctx.trampoline,\n });\n });\n}\nexport function protectedReturn(value) {\n return protectedCont((ctx) => ctx.onSuccess(value));\n}\nexport class AsyncBuilder {\n Bind(computation, binder) {\n return protectedBind(computation, binder);\n }\n Combine(computation1, computation2) {\n return this.Bind(computation1, () => computation2);\n }\n Delay(generator) {\n return protectedCont((ctx) => generator()(ctx));\n }\n For(sequence, body) {\n const iter = sequence[Symbol.iterator]();\n let cur = iter.next();\n return this.While(() => !cur.done, this.Delay(() => {\n const res = body(cur.value);\n cur = iter.next();\n return res;\n }));\n }\n Return(value) {\n return protectedReturn(value);\n }\n ReturnFrom(computation) {\n return computation;\n }\n TryFinally(computation, compensation) {\n return protectedCont((ctx) => {\n computation({\n onSuccess: (x) => {\n compensation();\n ctx.onSuccess(x);\n },\n onError: (x) => {\n compensation();\n ctx.onError(x);\n },\n onCancel: (x) => {\n compensation();\n ctx.onCancel(x);\n },\n cancelToken: ctx.cancelToken,\n trampoline: ctx.trampoline,\n });\n });\n }\n TryWith(computation, catchHandler) {\n return protectedCont((ctx) => {\n computation({\n onSuccess: ctx.onSuccess,\n onCancel: ctx.onCancel,\n cancelToken: ctx.cancelToken,\n trampoline: ctx.trampoline,\n onError: (ex) => {\n try {\n catchHandler(ex)(ctx);\n }\n catch (ex2) {\n ctx.onError(ex2);\n }\n },\n });\n });\n }\n Using(resource, binder) {\n return this.TryFinally(binder(resource), () => resource.Dispose());\n }\n While(guard, computation) {\n if (guard()) {\n return this.Bind(computation, () => this.While(guard, computation));\n }\n else {\n return this.Return(void 0);\n }\n }\n Zero() {\n return protectedCont((ctx) => ctx.onSuccess(void 0));\n }\n}\nexport const singleton = new AsyncBuilder();\n//# sourceMappingURL=AsyncBuilder.js.map","import { OperationCanceledError, Trampoline } from \"./AsyncBuilder\";\nimport { CancellationToken } from \"./AsyncBuilder\";\nimport { protectedCont } from \"./AsyncBuilder\";\nimport { protectedBind } from \"./AsyncBuilder\";\nimport { protectedReturn } from \"./AsyncBuilder\";\nimport { choice1, choice2 } from \"./Option\";\nimport { map } from \"./Seq\";\n// Implemented just for type references\nexport default class Async {\n}\nfunction emptyContinuation(_x) {\n // NOP\n}\n// MakeAsync: body:(AsyncActivation<'T> -> AsyncReturn) -> Async<'T>\nexport function makeAsync(body) {\n return body;\n}\n// Invoke: computation: Async<'T> -> ctxt:AsyncActivation<'T> -> AsyncReturn\nexport function invoke(computation, ctx) {\n return computation(ctx);\n}\n// CallThenInvoke: ctxt:AsyncActivation<'T> -> result1:'U -> part2:('U -> Async<'T>) -> AsyncReturn\nexport function callThenInvoke(ctx, result1, part2) {\n return part2(result1)(ctx);\n}\n// Bind: ctxt:AsyncActivation<'T> -> part1:Async<'U> -> part2:('U -> Async<'T>) -> AsyncReturn\nexport function bind(ctx, part1, part2) {\n return protectedBind(part1, part2)(ctx);\n}\nexport function createCancellationToken(arg) {\n const token = new CancellationToken(typeof arg === \"boolean\" ? arg : false);\n if (typeof arg === \"number\") {\n setTimeout(() => { token.cancel(); }, arg);\n }\n return token;\n}\nexport function cancel(token) {\n token.cancel();\n}\nexport function cancelAfter(token, ms) {\n setTimeout(() => { token.cancel(); }, ms);\n}\nexport function isCancellationRequested(token) {\n return token != null && token.isCancelled;\n}\nexport function startChild(computation) {\n const promise = startAsPromise(computation);\n // JS Promises are hot, computation has already started\n // but we delay returning the result\n return protectedCont((ctx) => protectedReturn(awaitPromise(promise))(ctx));\n}\nexport function awaitPromise(p) {\n return fromContinuations((conts) => p.then(conts[0]).catch((err) => (err instanceof OperationCanceledError\n ? conts[2] : conts[1])(err)));\n}\nexport function cancellationToken() {\n return protectedCont((ctx) => ctx.onSuccess(ctx.cancelToken));\n}\nexport const defaultCancellationToken = new CancellationToken();\nexport function catchAsync(work) {\n return protectedCont((ctx) => {\n work({\n onSuccess: (x) => ctx.onSuccess(choice1(x)),\n onError: (ex) => ctx.onSuccess(choice2(ex)),\n onCancel: ctx.onCancel,\n cancelToken: ctx.cancelToken,\n trampoline: ctx.trampoline,\n });\n });\n}\nexport function fromContinuations(f) {\n return protectedCont((ctx) => f([ctx.onSuccess, ctx.onError, ctx.onCancel]));\n}\nexport function ignore(computation) {\n return protectedBind(computation, (_x) => protectedReturn(void 0));\n}\nexport function parallel(computations) {\n return awaitPromise(Promise.all(map((w) => startAsPromise(w), computations)));\n}\nexport function sleep(millisecondsDueTime) {\n return protectedCont((ctx) => {\n let tokenId;\n const timeoutId = setTimeout(() => {\n ctx.cancelToken.removeListener(tokenId);\n ctx.onSuccess(void 0);\n }, millisecondsDueTime);\n tokenId = ctx.cancelToken.addListener(() => {\n clearTimeout(timeoutId);\n ctx.onCancel(new OperationCanceledError());\n });\n });\n}\nexport function start(computation, cancellationToken) {\n return startWithContinuations(computation, cancellationToken);\n}\nexport function startImmediate(computation, cancellationToken) {\n return start(computation, cancellationToken);\n}\nexport function startWithContinuations(computation, continuation, exceptionContinuation, cancellationContinuation, cancelToken) {\n if (typeof continuation !== \"function\") {\n cancelToken = continuation;\n continuation = undefined;\n }\n const trampoline = new Trampoline();\n computation({\n onSuccess: continuation ? continuation : emptyContinuation,\n onError: exceptionContinuation ? exceptionContinuation : emptyContinuation,\n onCancel: cancellationContinuation ? cancellationContinuation : emptyContinuation,\n cancelToken: cancelToken ? cancelToken : defaultCancellationToken,\n trampoline,\n });\n}\nexport function startAsPromise(computation, cancellationToken) {\n return new Promise((resolve, reject) => startWithContinuations(computation, resolve, reject, reject, cancellationToken ? cancellationToken : defaultCancellationToken));\n}\n//# sourceMappingURL=Async.js.map","(**\nCmd\n---------\nCore abstractions for dispatching messages in Elmish.\n\n*)\n\nnamespace Elmish\n\nopen System\n\n/// Dispatch - feed new message into the processing loop\ntype Dispatch<'msg> = 'msg -> unit\n\n/// Subscription - return immediately, but may schedule dispatch of a message at any time\ntype Sub<'msg> = Dispatch<'msg> -> unit\n\n/// Cmd - container for subscriptions that may produce messages\ntype Cmd<'msg> = Sub<'msg> list\n\n/// Cmd module for creating and manipulating commands\n[<RequireQualifiedAccess>]\nmodule Cmd =\n /// Execute the commands using the supplied dispatcher\n let internal exec (dispatch:Dispatch<'msg>) (cmd:Cmd<'msg>) =\n cmd |> List.iter (fun sub -> sub dispatch)\n\n /// None - no commands, also known as `[]`\n let none : Cmd<'msg> =\n []\n\n /// When emitting the message, map to another type\n let map (f: 'a -> 'msg) (cmd: Cmd<'a>) : Cmd<'msg> =\n cmd |> List.map (fun g -> (fun dispatch -> f >> dispatch) >> g)\n\n /// Aggregate multiple commands\n let batch (cmds: #seq<Cmd<'msg>>) : Cmd<'msg> =\n cmds |> List.concat\n\n /// Command to call the subscriber\n let ofSub (sub: Sub<'msg>) : Cmd<'msg> =\n [sub]\n\n module OfFunc =\n /// Command to evaluate a simple function and map the result\n /// into success or error (of exception)\n let either (task: 'a -> _) (arg: 'a) (ofSuccess: _ -> 'msg) (ofError: _ -> 'msg) : Cmd<'msg> =\n let bind dispatch =\n try\n task arg\n |> (ofSuccess >> dispatch)\n with x ->\n x |> (ofError >> dispatch)\n [bind]\n\n /// Command to evaluate a simple function and map the success to a message\n /// discarding any possible error\n let perform (task: 'a -> _) (arg: 'a) (ofSuccess: _ -> 'msg) : Cmd<'msg> =\n let bind dispatch =\n try\n task arg\n |> (ofSuccess >> dispatch)\n with x ->\n ()\n [bind]\n\n /// Command to evaluate a simple function and map the error (in case of exception)\n let attempt (task: 'a -> unit) (arg: 'a) (ofError: _ -> 'msg) : Cmd<'msg> =\n let bind dispatch =\n try\n task arg\n with x ->\n x |> (ofError >> dispatch)\n [bind]\n\n /// Command to issue a specific message\n let result (msg:'msg) : Cmd<'msg> =\n [fun dispatch -> dispatch msg]\n\n module OfAsyncWith =\n /// Command that will evaluate an async block and map the result\n /// into success or error (of exception)\n let either (start: Async<unit> -> unit) \n (task: 'a -> Async<_>)\n (arg: 'a)\n (ofSuccess: _ -> 'msg)\n (ofError: _ -> 'msg) : Cmd<'msg> =\n let bind dispatch =\n async {\n let! r = task arg |> Async.Catch\n dispatch (match r with\n | Choice1Of2 x -> ofSuccess x\n | Choice2Of2 x -> ofError x)\n }\n [bind >> start]\n\n /// Command that will evaluate an async block and map the success\n let perform (start: Async<unit> -> unit) \n (task: 'a -> Async<_>)\n (arg: 'a)\n (ofSuccess: _ -> 'msg) : Cmd<'msg> =\n let bind dispatch =\n async {\n let! r = task arg |> Async.Catch\n match r with\n | Choice1Of2 x -> dispatch (ofSuccess x)\n | _ -> ()\n }\n [bind >> start]\n\n /// Command that will evaluate an async block and map the error (of exception)\n let attempt (start: Async<unit> -> unit) \n (task: 'a -> Async<_>)\n (arg: 'a)\n (ofError: _ -> 'msg) : Cmd<'msg> =\n let bind dispatch =\n async {\n let! r = task arg |> Async.Catch\n match r with\n | Choice2Of2 x -> dispatch (ofError x)\n | _ -> ()\n }\n [bind >> start]\n\n /// Command that will evaluate an async block to the message\n let result (start: Async<unit> -> unit) \n (task: Async<'msg>) : Cmd<'msg> =\n let bind dispatch =\n async {\n let! r = task |> Async.Catch\n match r with\n | Choice1Of2 x -> dispatch x\n | _ -> ()\n }\n [bind >> start]\n\n module OfAsync =\n /// Command that will evaluate an async block and map the result\n /// into success or error (of exception)\n let inline either (task: 'a -> Async<_>)\n (arg: 'a)\n (ofSuccess: _ -> 'msg)\n (ofError: _ -> 'msg) : Cmd<'msg> =\n OfAsyncWith.either Async.Start task arg ofSuccess ofError\n\n /// Command that will evaluate an async block and map the success\n let inline perform (task: 'a -> Async<_>)\n (arg: 'a)\n (ofSuccess: _ -> 'msg) : Cmd<'msg> =\n OfAsyncWith.perform Async.Start task arg ofSuccess\n\n /// Command that will evaluate an async block and map the error (of exception)\n let inline attempt (task: 'a -> Async<_>)\n (arg: 'a)\n (ofError: _ -> 'msg) : Cmd<'msg> =\n OfAsyncWith.attempt Async.Start task arg ofError\n\n /// Command that will evaluate an async block to the message\n let inline result (task: Async<'msg>) : Cmd<'msg> =\n OfAsyncWith.result Async.Start task\n\n module OfAsyncImmediate =\n /// Command that will evaluate an async block and map the result\n /// into success or error (of exception)\n let inline either (task: 'a -> Async<_>)\n (arg: 'a)\n (ofSuccess: _ -> 'msg)\n (ofError: _ -> 'msg) : Cmd<'msg> =\n OfAsyncWith.either Async.StartImmediate task arg ofSuccess ofError\n\n /// Command that will evaluate an async block and map the success\n let inline perform (task: 'a -> Async<_>)\n (arg: 'a)\n (ofSuccess: _ -> 'msg) : Cmd<'msg> =\n OfAsyncWith.perform Async.StartImmediate task arg ofSuccess\n\n /// Command that will evaluate an async block and map the error (of exception)\n let inline attempt (task: 'a -> Async<_>)\n (arg: 'a)\n (ofError: _ -> 'msg) : Cmd<'msg> =\n OfAsyncWith.attempt Async.StartImmediate task arg ofError\n\n /// Command that will evaluate an async block to the message\n let inline result (task: Async<'msg>) : Cmd<'msg> =\n OfAsyncWith.result Async.StartImmediate task\n\n#if FABLE_COMPILER\n module OfPromise =\n /// Command to call `promise` block and map the results\n let either (task: 'a -> Fable.Core.JS.Promise<_>)\n (arg:'a)\n (ofSuccess: _ -> 'msg)\n (ofError: #exn -> 'msg) : Cmd<'msg> =\n let bind dispatch =\n (task arg)\n .``then``(ofSuccess >> dispatch)\n .catch(unbox >> ofError >> dispatch)\n |> ignore\n [bind]\n\n /// Command to call `promise` block and map the success\n let perform (task: 'a -> Fable.Core.JS.Promise<_>)\n (arg:'a)\n (ofSuccess: _ -> 'msg) =\n let bind dispatch =\n (task arg)\n .``then``(ofSuccess >> dispatch)\n |> ignore\n [bind]\n\n /// Command to call `promise` block and map the error\n let attempt (task: 'a -> Fable.Core.JS.Promise<_>)\n (arg:'a)\n (ofError: #exn -> 'msg) : Cmd<'msg> =\n let bind dispatch =\n (task arg)\n .catch(unbox >> ofError >> dispatch)\n |> ignore\n [bind]\n\n /// Command to dispatch the `promise` result\n let result (task: Fable.Core.JS.Promise<'msg>) =\n let bind dispatch =\n task.``then`` dispatch\n |> ignore\n [bind]\n\n [<Obsolete(\"Use `OfPromise.either` instead\")>]\n let inline ofPromise (task: 'a -> Fable.Core.JS.Promise<_>)\n (arg:'a)\n (ofSuccess: _ -> 'msg)\n (ofError: _ -> 'msg) : Cmd<'msg> =\n OfPromise.either task arg ofSuccess ofError \n#else\n open System.Threading.Tasks\n module OfTask =\n /// Command to call a task and map the results\n let inline either (task: 'a -> Task<_>)\n (arg:'a)\n (ofSuccess: _ -> 'msg)\n (ofError: _ -> 'msg) : Cmd<'msg> =\n OfAsync.either (task >> Async.AwaitTask) arg ofSuccess ofError\n\n /// Command to call a task and map the success\n let inline perform (task: 'a -> Task<_>)\n (arg:'a)\n (ofSuccess: _ -> 'msg) : Cmd<'msg> =\n OfAsync.perform (task >> Async.AwaitTask) arg ofSuccess\n\n /// Command to call a task and map the error\n let inline attempt (task: 'a -> Task<_>)\n (arg:'a)\n (ofError: _ -> 'msg) : Cmd<'msg> =\n OfAsync.attempt (task >> Async.AwaitTask) arg ofError\n\n /// Command and map the task success\n let inline result (task: Task<'msg>) : Cmd<'msg> =\n OfAsync.result (task |> Async.AwaitTask)\n\n [<Obsolete(\"Use OfTask.either instead\")>]\n let inline ofTask (task: 'a -> Task<_>)\n (arg:'a)\n (ofSuccess: _ -> 'msg)\n (ofError: _ -> 'msg) : Cmd<'msg> =\n OfTask.either task arg ofSuccess ofError\n#endif\n\n // Synonymous with `OfFunc.result`, may be removed in the future\n let inline ofMsg (msg:'msg) : Cmd<'msg> =\n OfFunc.result msg\n\n [<Obsolete(\"Use `Cmd.OfAsync.either` instead\")>]\n let inline ofAsync (task: 'a -> Async<_>)\n (arg: 'a)\n (ofSuccess: _ -> 'msg)\n (ofError: _ -> 'msg) : Cmd<'msg> =\n OfAsync.either task arg ofSuccess ofError\n\n [<Obsolete(\"Use `Cmd.OfFunc.either` instead\")>]\n let inline ofFunc (task: 'a -> _) (arg: 'a) (ofSuccess: _ -> 'msg) (ofError: _ -> 'msg) : Cmd<'msg> =\n OfFunc.either task arg ofSuccess ofError\n\n [<Obsolete(\"Use `Cmd.OfFunc.perform` instead\")>]\n let inline performFunc (task: 'a -> _) (arg: 'a) (ofSuccess: _ -> 'msg) : Cmd<'msg> =\n OfFunc.perform task arg ofSuccess\n\n [<Obsolete(\"Use `Cmd.OfFunc.attempt` instead\")>]\n let attemptFunc (task: 'a -> unit) (arg: 'a) (ofError: _ -> 'msg) : Cmd<'msg> =\n OfFunc.attempt task arg ofError\n\n","namespace Feliz.Router\r\n\r\nopen System\r\nopen Browser.Dom\r\nopen Fable.React\r\nopen Elmish\r\nopen Fable.Core\r\n\r\ntype IUrlSearchParamters =\r\n abstract entries : unit -> seq<string array>\r\n\r\n/// Determines whether the router will push a new entry to the history of modify the current one.\r\n[<RequireQualifiedAccess>]\r\ntype HistoryMode =\r\n /// A new history will be added to the entries such that if the user clicks the back button,\r\n /// the previous page will be shown, this is the default bahavior of the router.\r\n | PushState = 1\r\n /// Only modifies the current history entry and does not add a new one to the history stack. Clicking the back button will *not* have the effect of retuning to the previous page.\r\n | ReplaceState = 2\r\n\r\n/// Determines whether the router will use path or hash based routes\r\n[<RequireQualifiedAccess>]\r\ntype RouteMode =\r\n | Hash = 1\r\n | Path = 2\r\n\r\n[<RequireQualifiedAccess>]\r\nmodule internal Router =\r\n let customNavigationEvent = \"CUSTOM_NAVIGATION_EVENT\"\r\n let hashPrefix = sprintf \"#/%s\"\r\n let combine xs = String.concat \"/\" xs\r\n\r\n [<Emit(\"encodeURIComponent($0)\")>]\r\n let encodeURIComponent (value: string) : string = jsNative\r\n [<Emit(\"decodeURIComponent($0)\")>]\r\n let decodeURIComponent (value: string) : string = jsNative\r\n\r\n let encodeQueryString queryStringPairs =\r\n queryStringPairs\r\n |> List.map (fun (key, value) -> encodeURIComponent key, encodeURIComponent value)\r\n |> List.map (fun (key, value) -> String.concat \"=\" [ key; value ])\r\n |> String.concat \"&\"\r\n |> function\r\n | \"\" -> \"\"\r\n | pairs -> sprintf \"?%s\" pairs\r\n\r\n let encodeQueryStringInts queryStringIntPairs =\r\n queryStringIntPairs\r\n |> List.map (fun (key, value: int) -> encodeURIComponent key, (string value))\r\n |> List.map (fun (key, value) -> String.concat \"=\" [ key; value ])\r\n |> String.concat \"&\"\r\n |> function\r\n | \"\" -> \"\"\r\n | pairs -> sprintf \"?%s\" pairs\r\n\r\n let encodeParts xs routeMode =\r\n let normalizeRoute : (string -> string) =\r\n if routeMode = RouteMode.Hash then\r\n function\r\n | path when path.StartsWith \"/\" -> sprintf \"#%s\" path\r\n | path when path.StartsWith \"#/\" -> path\r\n | path when path.StartsWith \"#\" -> \"#/\" + path.Substring(1, path.Length - 1)\r\n | path -> sprintf \"#/%s\" path\r\n else\r\n (fun path -> if path.StartsWith \"/\" then path else sprintf \"/%s\" path)\r\n\r\n xs\r\n |> List.map (fun (part: string) ->\r\n if part.Contains \"?\" || part.StartsWith \"#\" || part.StartsWith \"/\"\r\n then part\r\n else encodeURIComponent part)\r\n |> combine\r\n |> normalizeRoute\r\n\r\n let nav xs (mode: HistoryMode) (routeMode: RouteMode) : Elmish.Cmd<_> =\r\n Cmd.ofSub (fun _ ->\r\n if mode = HistoryMode.PushState\r\n then history.pushState ((), \"\", encodeParts xs routeMode)\r\n else history.replaceState((), \"\", encodeParts xs routeMode)\r\n let ev = document.createEvent(\"CustomEvent\")\r\n ev.initEvent (customNavigationEvent, true, true)\r\n window.dispatchEvent ev |> ignore\r\n )\r\n\r\n /// Parses the URL into multiple path segments\r\n let urlSegments (path: string) (mode: RouteMode) =\r\n if path.StartsWith \"#\"\r\n // remove the hash sign\r\n then path.Substring(1, path.Length - 1)\r\n elif mode = RouteMode.Hash && (path.EndsWith \"#\" || path.EndsWith \"#/\")\r\n then \"\"\r\n // return as is\r\n else path\r\n |> fun p -> p.Split '/' // split the url segments\r\n |> List.ofArray\r\n |> List.filter (String.IsNullOrWhiteSpace >> not)\r\n |> List.map (fun segment -> segment.TrimEnd '#')\r\n |> List.collect (fun segment ->\r\n if segment = \"?\"\r\n then [ ]\r\n elif segment.StartsWith \"?\"\r\n then [ segment ]\r\n else\r\n match segment.Split [| '?' |] with\r\n | [| value |] -> [decodeURIComponent value]\r\n | [| value; \"\" |] -> [decodeURIComponent value]\r\n | [| value; query |] -> [ decodeURIComponent value; \"?\" + query ]\r\n | _ -> [])\r\n\r\n [<Emit(\"new URLSearchParams($0)\")>]\r\n let createUrlSearchParams (queryString: string) : IUrlSearchParamters = jsNative\r\n\r\n [<Emit(\"window.navigator.userAgent\")>]\r\n let navigatorUserAgent : string = jsNative\r\n\r\ntype RouterProperties = {\r\n urlChanged: string list -> unit\r\n application: ReactElement\r\n routeMode: RouteMode\r\n}\r\n\r\ntype RouterComponent(props: RouterProperties) =\r\n inherit Fable.React.PureStatelessComponent<RouterProperties>(props)\r\n\r\n override this.render() =\r\n this.props.application\r\n\r\n override this.componentDidMount() =\r\n let onChange (ev: _) =\r\n match window.location.hash with\r\n | \"\" when props.routeMode = RouteMode.Path -> window.location.pathname + window.location.search\r\n | _ -> window.location.hash\r\n |> fun path -> Router.urlSegments path props.routeMode\r\n |> this.props.urlChanged\r\n\r\n // listen to path changes\r\n if Router.navigatorUserAgent.Contains \"Trident\" ||\r\n Router.navigatorUserAgent.Contains \"MSIE\" then\r\n window.addEventListener(\"hashchange\", unbox onChange)\r\n else\r\n window.addEventListener(\"popstate\", unbox onChange)\r\n\r\n // listen to custom navigation events published by `Router.navigate()`\r\n window.addEventListener(Router.customNavigationEvent, unbox onChange)\r\n\r\n override this.componentWillUnmount() =\r\n // clean up when the router isn't in view anymore\r\n window.removeEventListener(\"popstate\", unbox null)\r\n window.removeEventListener(\"hashchange\", unbox null)\r\n window.removeEventListener(Router.customNavigationEvent, unbox null)\r\n\r\n/// Defines a property for the `router` element\r\ntype IRouterProperty = interface end\r\n\r\ntype Router =\r\n /// An event that is triggered when the URL in the address bar changes, whether by hand or programmatically using `Router.navigate(...)`.\r\n /// The event arguments are the parts of the URL, segmented into strings:\r\n ///\r\n /// `segment \"#/\" => [ ]`\r\n ///\r\n /// `segment \"#/home\" => [ \"home\" ]`\r\n ///\r\n /// `segment \"#/home/settings\" => [ \"home\"; \"settings\" ]`\r\n ///\r\n /// `segment \"#/users/1\" => [ \"users\"; \"1\" ]`\r\n ///\r\n /// `segment \"#/users/1/details\" => [ \"users\"; \"1\"; \"details\" ]`\r\n ///\r\n /// with query string parameters\r\n ///\r\n /// `segment \"#/users?id=1\" => [ \"users\"; \"?id=1\" ]`\r\n ///\r\n /// `segment \"#/home/users?id=1\" => [ \"home\"; \"users\"; \"?id=1\" ]`\r\n ///\r\n /// `segment \"#/users?id=1&format=json\" => [ \"users\"; \"?id=1&format=json\" ]`\r\n static member onUrlChanged (eventHandler: string list -> unit) : IRouterProperty = unbox (\"onUrlChanged\", eventHandler)\r\n\r\n /// The element that is rendered inside where the `router` is placed. Usually this contains the root application but it could also be part of another root element.\r\n ///\r\n /// It will keep listening for URL changes as long as the `router` is rendered on screen somewhere.\r\n static member application (app: ReactElement) : IRouterProperty = unbox (\"application\", app)\r\n\r\n /// The content that is rendered inside where the `router` is placed. Usually this contains the root application but it could also be part of another root element.\r\n ///\r\n /// It will keep listening for URL changes as long as the `router` is rendered on screen somewhere.\r\n static member application (app: ReactElement list) : IRouterProperty = unbox (\"application\", Fable.React.Helpers.fragment [ ] app)\r\n\r\n /// Use # based routes (default)\r\n static member hashMode : IRouterProperty = unbox (\"routeMode\", RouteMode.Hash)\r\n\r\n /// Use full (HTML 5) based routes instead of # based.\r\n /// You have to be careful about which requests you want forwarded to the server and which ones should be handled locally.\r\n /// To keep the request local, you have to use the 'Router.navigate' function for all the URL transitions.\r\n static member pathMode : IRouterProperty = unbox (\"routeMode\", RouteMode.Path)\r\n\r\n /// Parses the current URL of the page and returns the cleaned URL segments. This is default when working with hash URLs. When working with path-based URLs, use Router.currentPath() instead.\r\n static member currentUrl() =\r\n Router.urlSegments window.location.hash RouteMode.Hash\r\n\r\n /// Parses the current URL of the page and returns the cleaned URL segments. This is default when working with path URLs. When working with hash-based (#) URLs, use Router.currentUrl() instead.\r\n static member currentPath() =\r\n let fullPath = window.location.pathname + window.location.search\r\n Router.urlSegments fullPath RouteMode.Path\r\n\r\n /// Initializes the router as an element of the page to starts listening to URL changes.\r\n static member router (properties: IRouterProperty list) : ReactElement =\r\n let defaultProperties : RouterProperties =\r\n { urlChanged = fun _ -> ignore()\r\n application = nothing\r\n routeMode = RouteMode.Hash }\r\n\r\n let modifiedProperties =\r\n (defaultProperties, properties)\r\n ||> List.fold (fun state prop ->\r\n let (key, value) = unbox<string * obj> prop\r\n match key with\r\n | \"onUrlChanged\" -> { state with urlChanged = unbox value }\r\n | \"application\" -> { state with application = unbox value }\r\n | \"routeMode\" -> { state with routeMode = unbox value }\r\n | _ -> state)\r\n\r\n ofType<RouterComponent, _, _>(modifiedProperties) [| |]\r\n\r\n static member navigate([<ParamArray>] xs: string array) =\r\n Router.nav (List.ofArray xs) HistoryMode.PushState RouteMode.Hash\r\n static member navigate(segment: string, queryString) : Cmd<_> =\r\n Router.nav [ segment + Router.encodeQueryString queryString ] HistoryMode.PushState RouteMode.Hash\r\n static member navigate(segment: string, queryString, mode) : Cmd<_> =\r\n Router.nav [ segment + Router.encodeQueryString queryString ] mode RouteMode.Hash\r\n static member navigate(segment: string, queryString) : Cmd<_> =\r\n Router.nav [ segment + Router.encodeQueryStringInts queryString ] HistoryMode.PushState RouteMode.Hash\r\n static member navigate(segment: string, queryString, mode) : Cmd<_> =\r\n Router.nav [ segment + Router.encodeQueryStringInts queryString ] mode RouteMode.Hash\r\n static member navigate(segment1: string, segment2: string, queryString) : Cmd<_> =\r\n Router.nav [ segment1; segment2 + Router.encodeQueryString queryString ] HistoryMode.PushState RouteMode.Hash\r\n static member navigate(segment1: string, segment2: string, queryString, mode) : Cmd<_> =\r\n Router.nav [ segment1; segment2 + Router.encodeQueryString queryString ] mode RouteMode.Hash\r\n static member navigate(segment1: string, segment2: string, queryString) : Cmd<_> =\r\n Router.nav [ segment1; segment2 + Router.encodeQueryStringInts queryString ] HistoryMode.PushState RouteMode.Hash\r\n static member navigate(segment1: string, segment2: string, queryString, mode) : Cmd<_> =\r\n Router.nav [ segment1; segment2 + Router.encodeQueryStringInts queryString ] mode RouteMode.Hash\r\n static member navigate(segment1: string, segment2: string, segment3:int, queryString) : Cmd<_> =\r\n Router.nav [ segment1; segment2; string segment3 + Router.encodeQueryString queryString ] HistoryMode.PushState RouteMode.Hash\r\n static member navigate(segment1: string, segment2: string, segment3:int, queryString, mode) : Cmd<_> =\r\n Router.nav [ segment1; segment2;string segment3 + Router.encodeQueryString queryString ] mode RouteMode.Hash\r\n static member navigate(segment1: string, segment2: string, segment3:int, queryString) : Cmd<_> =\r\n Router.nav [ segment1; segment2; string segment3 + Router.encodeQueryStringInts queryString ] HistoryMode.PushState RouteMode.Hash\r\n static member navigate(segment1: string, segment2: string, segment3:int, queryString, mode) : Cmd<_> =\r\n Router.nav [ segment1; segment2; string segment3 + Router.encodeQueryStringInts queryString ] mode RouteMode.Hash\r\n static member navigate(segment1: string, segment2: string, segment3:string, queryString) : Cmd<_> =\r\n Router.nav [ segment1; segment2; segment3 + Router.encodeQueryString queryString ] HistoryMode.PushState RouteMode.Hash\r\n static member navigate(segment1: string, segment2: string, segment3:string, queryString, mode) : Cmd<_> =\r\n Router.nav [ segment1; segment2; segment3 + Router.encodeQueryString queryString ] mode RouteMode.Hash\r\n static member navigate(segment1: string, segment2: string, segment3:string, queryString) : Cmd<_> =\r\n Router.nav [ segment1; segment2; segment3 + Router.encodeQueryStringInts queryString ] HistoryMode.PushState RouteMode.Hash\r\n static member navigate(segment1: string, segment2: string, segment3:string, queryString, mode) : Cmd<_> =\r\n Router.nav [ segment1; segment2; segment3 + Router.encodeQueryStringInts queryString ] mode RouteMode.Hash\r\n static member navigate(segment1: string, segment2: int, segment3:string, queryString) : Cmd<_> =\r\n Router.nav [ segment1; string segment2; segment3 + Router.encodeQueryString queryString ] HistoryMode.PushState RouteMode.Hash\r\n static member navigate(segment1: string, segment2: int, segment3:string, queryString, mode) : Cmd<_> =\r\n Router.nav [ segment1; string segment2; segment3 + Router.encodeQueryString queryString ] mode RouteMode.Hash\r\n static member navigate(segment1: string, segment2: int, segment3:string, queryString) : Cmd<_> =\r\n Router.nav [ segment1; string segment2; segment3 + Router.encodeQueryStringInts queryString ] HistoryMode.PushState RouteMode.Hash\r\n static member navigate(segment1: string, segment2: int, segment3:string, queryString, mode) : Cmd<_> =\r\n Router.nav [ segment1; string segment2; segment3 + Router.encodeQueryStringInts queryString ] mode RouteMode.Hash\r\n static member navigate(segment1: string, segment2: string, segment3:string, segment4: string, queryString) : Cmd<_> =\r\n Router.nav [ segment1; segment2; segment3; segment4 + Router.encodeQueryString queryString ] HistoryMode.PushState RouteMode.Hash\r\n static member navigate(segment1: string, segment2: string, segment3:string, segment4: string, queryString, mode) : Cmd<_> =\r\n Router.nav [ segment1; segment2; segment3; segment4 + Router.encodeQueryString queryString ] mode RouteMode.Hash\r\n static member navigate(segment1: string, segment2: string, segment3:string, segment4: string, queryString) : Cmd<_> =\r\n Router.nav [ segment1; segment2; segment3; segment4 + Router.encodeQueryStringInts queryString ] HistoryMode.PushState RouteMode.Hash\r\n static member navigate(segment1: string, segment2: string, segment3:string, segment4: string, queryString, mode) : Cmd<_> =\r\n Router.nav [ segment1; segment2; segment3; segment4 + Router.encodeQueryStringInts queryString ] mode RouteMode.Hash\r\n static member navigate(segment1: string, segment2: string, segment3:string, segment4: string, segment5, queryString) : Cmd<_> =\r\n Router.nav [ segment1; segment2; segment3; segment4; segment5 + Router.encodeQueryString queryString ] HistoryMode.PushState RouteMode.Hash\r\n static member navigate(segment1: string, segment2: string, segment3:string, segment4: string, segment5, queryString, mode) : Cmd<_> =\r\n Router.nav [ segment1; segment2; segment3; segment4; segment5 + Router.encodeQueryString queryString ] mode RouteMode.Hash\r\n static member navigate(segment1: string, segment2: string, segment3:string, segment4: string, segment5, queryString) : Cmd<_> =\r\n Router.nav [ segment1; segment2; segment3; segment4; segment5 + Router.encodeQueryStringInts queryString ] HistoryMode.PushState RouteMode.Hash\r\n static member navigate(segment1: string, segment2: string, segment3:string, segment4: string, segment5, queryString, mode) : Cmd<_> =\r\n Router.nav [ segment1; segment2; segment3; segment4; segment5 + Router.encodeQueryStringInts queryString ] mode RouteMode.Hash\r\n static member navigate(segment1: string, segment2: int, segment3:string, segment4: string, queryString) : Cmd<_> =\r\n Router.nav [ segment1; string segment2; segment3; segment4 + Router.encodeQueryString queryString ] HistoryMode.PushState RouteMode.Hash\r\n static member navigate(segment1: string, segment2: int, segment3:string, segment4: string, queryString, mode) : Cmd<_> =\r\n Router.nav [ segment1; string segment2; segment3; segment4 + Router.encodeQueryString queryString ] mode RouteMode.Hash\r\n static member navigate(segment1: string, segment2: int, segment3:string, segment4: string, queryString) : Cmd<_> =\r\n Router.nav [ segment1; string segment2; segment3; segment4 + Router.encodeQueryStringInts queryString ] HistoryMode.PushState RouteMode.Hash\r\n static member navigate(segment1: string, segment2: int, segment3:string, segment4: string, queryString, mode) : Cmd<_> =\r\n Router.nav [ segment1; string segment2; segment3; segment4 + Router.encodeQueryStringInts queryString ] mode RouteMode.Hash\r\n static member navigate(segment1: string, segment2: int, segment3:int, segment4: string, queryString) : Cmd<_> =\r\n Router.nav [ segment1; string segment2; string segment3; segment4 + Router.encodeQueryString queryString ] HistoryMode.PushState RouteMode.Hash\r\n static member navigate(segment1: string, segment2: int, segment3:int, segment4: string, queryString, mode) : Cmd<_> =\r\n Router.nav [ segment1; string segment2; string segment3; segment4 + Router.encodeQueryString queryString ] mode RouteMode.Hash\r\n static member navigate(segment1: string, segment2: int, segment3:int, segment4: string, queryString) : Cmd<_> =\r\n Router.nav [ segment1; string segment2; string segment3; segment4 + Router.encodeQueryStringInts queryString ] HistoryMode.PushState RouteMode.Hash\r\n static member navigate(segment1: string, segment2: int, segment3:int, segment4: string, queryString, mode) : Cmd<_> =\r\n Router.nav [ segment1; string segment2; string segment3; segment4 + Router.encodeQueryStringInts queryString ] mode RouteMode.Hash\r\n static member navigate(segment1: string, segment2: int, segment3:int, segment4: string, segment5: string, segment6, queryString) : Cmd<_> =\r\n Router.nav [ segment1; string segment2; string segment3; segment4; segment5; segment6 + Router.encodeQueryString queryString ] HistoryMode.PushState RouteMode.Hash\r\n static member navigate(segment1: string, segment2: int, segment3:int, segment4: string, segment5: string, segment6, queryString, mode) : Cmd<_> =\r\n Router.nav [ segment1; string segment2; string segment3; segment4; segment5; segment6 + Router.encodeQueryString queryString ] mode RouteMode.Hash\r\n static member navigate(segment1: string, segment2: int, segment3:int, segment4: string, segment5: string, segment6, queryString) : Cmd<_> =\r\n Router.nav [ segment1; string segment2; string segment3; segment4; segment5; segment6 + Router.encodeQueryStringInts queryString ] HistoryMode.PushState RouteMode.Hash\r\n static member navigate(segment1: string, segment2: int, segment3:int, segment4: string, segment5: string, segment6, queryString, mode) : Cmd<_> =\r\n Router.nav [ segment1; string segment2; string segment3; segment4; segment5; segment6 + Router.encodeQueryStringInts queryString ] mode RouteMode.Hash\r\n static member navigate(segment1: string, segment2: int, segment3:int, segment4: int, segment5: string, queryString) : Cmd<_> =\r\n Router.nav [ segment1; string segment2; string segment3; string segment4; segment5 + Router.encodeQueryString queryString ] HistoryMode.PushState RouteMode.Hash\r\n static member navigate(segment1: string, segment2: int, segment3:int, segment4: int, segment5: string, queryString, mode) : Cmd<_> =\r\n Router.nav [ segment1; string segment2; string segment3; string segment4; segment5 + Router.encodeQueryString queryString ] mode RouteMode.Hash\r\n static member navigate(segment1: string, segment2: int, segment3:int, segment4: int, segment5: string, queryString) : Cmd<_> =\r\n Router.nav [ segment1; string segment2; string segment3; string segment4; segment5 + Router.encodeQueryStringInts queryString ] HistoryMode.PushState RouteMode.Hash\r\n static member navigate(segment1: string, segment2: int, segment3:int, segment4: int, segment5: string, queryString, mode) : Cmd<_> =\r\n Router.nav [ segment1; string segment2; string segment3; string segment4; segment5 + Router.encodeQueryStringInts queryString ] mode RouteMode.Hash\r\n static member navigate(segment1: string, segment2: int, segment3:string, segment4: int, segment5: string, queryString) : Cmd<_> =\r\n Router.nav [ segment1; string segment2; segment3; string segment4; segment5 + Router.encodeQueryString queryString ] HistoryMode.PushState RouteMode.Hash\r\n static member navigate(segment1: string, segment2: int, segment3:string, segment4: int, segment5: string, queryString, mode) : Cmd<_> =\r\n Router.nav [ segment1; string segment2; segment3; string segment4; segment5 + Router.encodeQueryString queryString ] mode RouteMode.Hash\r\n static member navigate(segment1: string, segment2: int, segment3:string, segment4: int, segment5: string, queryString) : Cmd<_> =\r\n Router.nav [ segment1; string segment2; segment3; string segment4; segment5 + Router.encodeQueryStringInts queryString ] HistoryMode.PushState RouteMode.Hash\r\n static member navigate(segment1: string, segment2: int, segment3:string, segment4: int, segment5: string, queryString, mode) : Cmd<_> =\r\n Router.nav [ segment1; string segment2; segment3; string segment4; segment5 + Router.encodeQueryStringInts queryString ] mode RouteMode.Hash\r\n static member navigate(segment1: string, segment2: int, segment3:string, segment4: string, segment5, queryString) : Cmd<_> =\r\n Router.nav [ segment1; string segment2; segment3; segment4; segment5 + Router.encodeQueryString queryString ] HistoryMode.PushState RouteMode.Hash\r\n static member navigate(segment1: string, segment2: int, segment3:string, segment4: string, segment5, queryString, mode) : Cmd<_> =\r\n Router.nav [ segment1; string segment2; segment3; segment4; segment5 + Router.encodeQueryString queryString ] mode RouteMode.Hash\r\n static member navigate(segment1: string, segment2: int, segment3:string, segment4: string, segment5, queryString) : Cmd<_> =\r\n Router.nav [ segment1; string segment2; segment3; segment4; segment5 + Router.encodeQueryStringInts queryString ] HistoryMode.PushState RouteMode.Hash\r\n static member navigate(segment1: string, segment2: int, segment3:string, segment4: string, segment5, queryString, mode) : Cmd<_> =\r\n Router.nav [ segment1; string segment2; segment3; segment4; segment5 + Router.encodeQueryStringInts queryString ] mode RouteMode.Hash\r\n static member navigate(fullPath: string) : Cmd<_> =\r\n Router.nav [ fullPath ] HistoryMode.PushState RouteMode.Hash\r\n static member navigate(fullPath: string, mode) : Cmd<_> =\r\n Router.nav [ fullPath ] mode RouteMode.Hash\r\n static member navigate(segment: string, value: int) : Cmd<_> =\r\n Router.nav [segment; string value ] HistoryMode.PushState RouteMode.Hash\r\n static member navigate(segment: string, value: int, mode) : Cmd<_> =\r\n Router.nav [segment; string value ] mode RouteMode.Hash\r\n static member navigate(segment1: string, value1: int, value2: int) : Cmd<_> =\r\n Router.nav [segment1; string value1; string value2 ] HistoryMode.PushState RouteMode.Hash\r\n static member navigate(segment1: string, value1: int, value2: int, mode) : Cmd<_> =\r\n Router.nav [segment1; string value1; string value2 ] mode RouteMode.Hash\r\n static member navigate(segment1: string, segment2: string, value1: int) : Cmd<_> =\r\n Router.nav [segment1; segment2; string value1 ] HistoryMode.PushState RouteMode.Hash\r\n static member navigate(segment1: string, segment2: string, value1: int, mode) : Cmd<_> =\r\n Router.nav [segment1; segment2; string value1 ] mode RouteMode.Hash\r\n static member navigate(segment1: string, value1: int, segment2: string) : Cmd<_> =\r\n Router.nav [segment1; string value1; segment2 ] HistoryMode.PushState RouteMode.Hash\r\n static member navigate(segment1: string, value1: int, segment2: string, mode) : Cmd<_> =\r\n Router.nav [segment1; string value1; segment2 ] mode RouteMode.Hash\r\n static member navigate(segment1: string, value1: int, segment2: string, value2: int) : Cmd<_> =\r\n Router.nav [segment1; string value1; segment2; string value2 ] HistoryMode.PushState RouteMode.Hash\r\n static member navigate(segment1: string, value1: int, segment2: string, value2: int, mode) : Cmd<_> =\r\n Router.nav [segment1; string value1; segment2; string value2 ] mode RouteMode.Hash\r\n static member navigate(segment1: string, value1: int, segment2: string, value2: int, segment3: string) : Cmd<_> =\r\n Router.nav [segment1; string value1; segment2; string value2; segment3 ] HistoryMode.PushState RouteMode.Hash\r\n static member navigate(segment1: string, value1: int, segment2: string, value2: int, segment3: string, mode) : Cmd<_> =\r\n Router.nav [segment1; string value1; segment2; string value2; segment3 ] mode RouteMode.Hash\r\n static member navigate(segment1: string, value1: int, segment2: string, value2: int, segment3: string, segment4: string) : Cmd<_> =\r\n Router.nav [segment1; string value1; segment2; string value2; segment3; segment4 ] HistoryMode.PushState RouteMode.Hash\r\n static member navigate(segment1: string, value1: int, segment2: string, value2: int, segment3: string, segment4: string, mode) : Cmd<_> =\r\n Router.nav [segment1; string value1; segment2; string value2; segment3; segment4 ] mode RouteMode.Hash\r\n static member navigate(segment1: string, value1: int, segment2: string, value2: int, segment3: string, value3: int) : Cmd<_> =\r\n Router.nav [segment1; string value1; segment2; string value2; segment3; string value3 ] HistoryMode.PushState RouteMode.Hash\r\n static member navigate(segment1: string, value1: int, segment2: string, value2: int, segment3: string, value3: int, mode) : Cmd<_> =\r\n Router.nav [segment1; string value1; segment2; string value2; segment3; string value3 ] mode RouteMode.Hash\r\n static member navigate(segment1: string, value1: int, value2: int, value3: int) : Cmd<_> =\r\n Router.nav [segment1; string value1; string value2; string value3 ] HistoryMode.PushState RouteMode.Hash\r\n static member navigate(segment1: string, value1: int, value2: int, value3: int, mode) : Cmd<_> =\r\n Router.nav [segment1; string value1; string value2; string value3 ] mode RouteMode.Hash\r\n static member navigate(segment1: string, value1: int, value2: int, segment2: string) : Cmd<_> =\r\n Router.nav [segment1; string value1; string value2; segment2 ] HistoryMode.PushState RouteMode.Hash\r\n static member navigate(segment1: string, value1: int, value2: int, segment2: string, mode) : Cmd<_> =\r\n Router.nav [segment1; string value1; string value2; segment2 ] mode RouteMode.Hash\r\n\r\n static member navigatePath([<ParamArray>] xs: string array) =\r\n Router.nav (List.ofArray xs) HistoryMode.PushState RouteMode.Path\r\n static member navigatePath(segment: string, queryString) : Cmd<_> =\r\n Router.nav [ segment + Router.encodeQueryString queryString ] HistoryMode.PushState RouteMode.Path\r\n static member navigatePath(segment: string, queryString, mode) : Cmd<_> =\r\n Router.nav [ segment + Router.encodeQueryString queryString ] mode RouteMode.Path\r\n static member navigatePath(segment: string, queryString) : Cmd<_> =\r\n Router.nav [ segment + Router.encodeQueryStringInts queryString ] HistoryMode.PushState RouteMode.Path\r\n static member navigatePath(segment: string, queryString, mode) : Cmd<_> =\r\n Router.nav [ segment + Router.encodeQueryStringInts queryString ] mode RouteMode.Path\r\n static member navigatePath(segment1: string, segment2: string, queryString) : Cmd<_> =\r\n Router.nav [ segment1; segment2 + Router.encodeQueryString queryString ] HistoryMode.PushState RouteMode.Path\r\n static member navigatePath(segment1: string, segment2: string, queryString, mode) : Cmd<_> =\r\n Router.nav [ segment1; segment2 + Router.encodeQueryString queryString ] mode RouteMode.Path\r\n static member navigatePath(segment1: string, segment2: string, queryString) : Cmd<_> =\r\n Router.nav [ segment1; segment2 + Router.encodeQueryStringInts queryString ] HistoryMode.PushState RouteMode.Path\r\n static member navigatePath(segment1: string, segment2: string, queryString, mode) : Cmd<_> =\r\n Router.nav [ segment1; segment2 + Router.encodeQueryStringInts queryString ] mode RouteMode.Path\r\n static member navigatePath(segment1: string, segment2: string, segment3:int, queryString) : Cmd<_> =\r\n Router.nav [ segment1; segment2; string segment3 + Router.encodeQueryString queryString ] HistoryMode.PushState RouteMode.Path\r\n static member navigatePath(segment1: string, segment2: string, segment3:int, queryString, mode) : Cmd<_> =\r\n Router.nav [ segment1; segment2;string segment3 + Router.encodeQueryString queryString ] mode RouteMode.Path\r\n static member navigatePath(segment1: string, segment2: string, segment3:int, queryString) : Cmd<_> =\r\n Router.nav [ segment1; segment2; string segment3 + Router.encodeQueryStringInts queryString ] HistoryMode.PushState RouteMode.Path\r\n static member navigatePath(segment1: string, segment2: string, segment3:int, queryString, mode) : Cmd<_> =\r\n Router.nav [ segment1; segment2; string segment3 + Router.encodeQueryStringInts queryString ] mode RouteMode.Path\r\n static member navigatePath(segment1: string, segment2: string, segment3:string, queryString) : Cmd<_> =\r\n Router.nav [ segment1; segment2; segment3 + Router.encodeQueryString queryString ] HistoryMode.PushState RouteMode.Path\r\n static member navigatePath(segment1: string, segment2: string, segment3:string, queryString, mode) : Cmd<_> =\r\n Router.nav [ segment1; segment2; segment3 + Router.encodeQueryString queryString ] mode RouteMode.Path\r\n static member navigatePath(segment1: string, segment2: string, segment3:string, queryString) : Cmd<_> =\r\n Router.nav [ segment1; segment2; segment3 + Router.encodeQueryStringInts queryString ] HistoryMode.PushState RouteMode.Path\r\n static member navigatePath(segment1: string, segment2: string, segment3:string, queryString, mode) : Cmd<_> =\r\n Router.nav [ segment1; segment2; segment3 + Router.encodeQueryStringInts queryString ] mode RouteMode.Path\r\n static member navigatePath(segment1: string, segment2: int, segment3:string, queryString) : Cmd<_> =\r\n Router.nav [ segment1; string segment2; segment3 + Router.encodeQueryString queryString ] HistoryMode.PushState RouteMode.Path\r\n static member navigatePath(segment1: string, segment2: int, segment3:string, queryString, mode) : Cmd<_> =\r\n Router.nav [ segment1; string segment2; segment3 + Router.encodeQueryString queryString ] mode RouteMode.Path\r\n static member navigatePath(segment1: string, segment2: int, segment3:string, queryString) : Cmd<_> =\r\n Router.nav [ segment1; string segment2; segment3 + Router.encodeQueryStringInts queryString ] HistoryMode.PushState RouteMode.Path\r\n static member navigatePath(segment1: string, segment2: int, segment3:string, queryString, mode) : Cmd<_> =\r\n Router.nav [ segment1; string segment2; segment3 + Router.encodeQueryStringInts queryString ] mode RouteMode.Path\r\n static member navigatePath(segment1: string, segment2: string, segment3:string, segment4: string, queryString) : Cmd<_> =\r\n Router.nav [ segment1; segment2; segment3; segment4 + Router.encodeQueryString queryString ] HistoryMode.PushState RouteMode.Path\r\n static member navigatePath(segment1: string, segment2: string, segment3:string, segment4: string, queryString, mode) : Cmd<_> =\r\n Router.nav [ segment1; segment2; segment3; segment4 + Router.encodeQueryString queryString ] mode RouteMode.Path\r\n static member navigatePath(segment1: string, segment2: string, segment3:string, segment4: string, queryString) : Cmd<_> =\r\n Router.nav [ segment1; segment2; segment3; segment4 + Router.encodeQueryStringInts queryString ] HistoryMode.PushState RouteMode.Path\r\n static member navigatePath(segment1: string, segment2: string, segment3:string, segment4: string, queryString, mode) : Cmd<_> =\r\n Router.nav [ segment1; segment2; segment3; segment4 + Router.encodeQueryStringInts queryString ] mode RouteMode.Path\r\n static member navigatePath(segment1: string, segment2: string, segment3:string, segment4: string, segment5, queryString) : Cmd<_> =\r\n Router.nav [ segment1; segment2; segment3; segment4; segment5 + Router.encodeQueryString queryString ] HistoryMode.PushState RouteMode.Path\r\n static member navigatePath(segment1: string, segment2: string, segment3:string, segment4: string, segment5, queryString, mode) : Cmd<_> =\r\n Router.nav [ segment1; segment2; segment3; segment4; segment5 + Router.encodeQueryString queryString ] mode RouteMode.Path\r\n static member navigatePath(segment1: string, segment2: string, segment3:string, segment4: string, segment5, queryString) : Cmd<_> =\r\n Router.nav [ segment1; segment2; segment3; segment4; segment5 + Router.encodeQueryStringInts queryString ] HistoryMode.PushState RouteMode.Path\r\n static member navigatePath(segment1: string, segment2: string, segment3:string, segment4: string, segment5, queryString, mode) : Cmd<_> =\r\n Router.nav [ segment1; segment2; segment3; segment4; segment5 + Router.encodeQueryStringInts queryString ] mode RouteMode.Path\r\n static member navigatePath(segment1: string, segment2: int, segment3:string, segment4: string, queryString) : Cmd<_> =\r\n Router.nav [ segment1; string segment2; segment3; segment4 + Router.encodeQueryString queryString ] HistoryMode.PushState RouteMode.Path\r\n static member navigatePath(segment1: string, segment2: int, segment3:string, segment4: string, queryString, mode) : Cmd<_> =\r\n Router.nav [ segment1; string segment2; segment3; segment4 + Router.encodeQueryString queryString ] mode RouteMode.Path\r\n static member navigatePath(segment1: string, segment2: int, segment3:string, segment4: string, queryString) : Cmd<_> =\r\n Router.nav [ segment1; string segment2; segment3; segment4 + Router.encodeQueryStringInts queryString ] HistoryMode.PushState RouteMode.Path\r\n static member navigatePath(segment1: string, segment2: int, segment3:string, segment4: string, queryString, mode) : Cmd<_> =\r\n Router.nav [ segment1; string segment2; segment3; segment4 + Router.encodeQueryStringInts queryString ] mode RouteMode.Path\r\n static member navigatePath(segment1: string, segment2: int, segment3:int, segment4: string, queryString) : Cmd<_> =\r\n Router.nav [ segment1; string segment2; string segment3; segment4 + Router.encodeQueryString queryString ] HistoryMode.PushState RouteMode.Path\r\n static member navigatePath(segment1: string, segment2: int, segment3:int, segment4: string, queryString, mode) : Cmd<_> =\r\n Router.nav [ segment1; string segment2; string segment3; segment4 + Router.encodeQueryString queryString ] mode RouteMode.Path\r\n static member navigatePath(segment1: string, segment2: int, segment3:int, segment4: string, queryString) : Cmd<_> =\r\n Router.nav [ segment1; string segment2; string segment3; segment4 + Router.encodeQueryStringInts queryString ] HistoryMode.PushState RouteMode.Path\r\n static member navigatePath(segment1: string, segment2: int, segment3:int, segment4: string, queryString, mode) : Cmd<_> =\r\n Router.nav [ segment1; string segment2; string segment3; segment4 + Router.encodeQueryStringInts queryString ] mode RouteMode.Path\r\n static member navigatePath(segment1: string, segment2: int, segment3:int, segment4: string, segment5: string, segment6, queryString) : Cmd<_> =\r\n Router.nav [ segment1; string segment2; string segment3; segment4; segment5; segment6 + Router.encodeQueryString queryString ] HistoryMode.PushState RouteMode.Path\r\n static member navigatePath(segment1: string, segment2: int, segment3:int, segment4: string, segment5: string, segment6, queryString, mode) : Cmd<_> =\r\n Router.nav [ segment1; string segment2; string segment3; segment4; segment5; segment6 + Router.encodeQueryString queryString ] mode RouteMode.Path\r\n static member navigatePath(segment1: string, segment2: int, segment3:int, segment4: string, segment5: string, segment6, queryString) : Cmd<_> =\r\n Router.nav [ segment1; string segment2; string segment3; segment4; segment5; segment6 + Router.encodeQueryStringInts queryString ] HistoryMode.PushState RouteMode.Path\r\n static member navigatePath(segment1: string, segment2: int, segment3:int, segment4: string, segment5: string, segment6, queryString, mode) : Cmd<_> =\r\n Router.nav [ segment1; string segment2; string segment3; segment4; segment5; segment6 + Router.encodeQueryStringInts queryString ] mode RouteMode.Path\r\n static member navigatePath(segment1: string, segment2: int, segment3:int, segment4: int, segment5: string, queryString) : Cmd<_> =\r\n Router.nav [ segment1; string segment2; string segment3; string segment4; segment5 + Router.encodeQueryString queryString ] HistoryMode.PushState RouteMode.Path\r\n static member navigatePath(segment1: string, segment2: int, segment3:int, segment4: int, segment5: string, queryString, mode) : Cmd<_> =\r\n Router.nav [ segment1; string segment2; string segment3; string segment4; segment5 + Router.encodeQueryString queryString ] mode RouteMode.Path\r\n static member navigatePath(segment1: string, segment2: int, segment3:int, segment4: int, segment5: string, queryString) : Cmd<_> =\r\n Router.nav [ segment1; string segment2; string segment3; string segment4; segment5 + Router.encodeQueryStringInts queryString ] HistoryMode.PushState RouteMode.Path\r\n static member navigatePath(segment1: string, segment2: int, segment3:int, segment4: int, segment5: string, queryString, mode) : Cmd<_> =\r\n Router.nav [ segment1; string segment2; string segment3; string segment4; segment5 + Router.encodeQueryStringInts queryString ] mode RouteMode.Path\r\n static member navigatePath(segment1: string, segment2: int, segment3:string, segment4: int, segment5: string, queryString) : Cmd<_> =\r\n Router.nav [ segment1; string segment2; segment3; string segment4; segment5 + Router.encodeQueryString queryString ] HistoryMode.PushState RouteMode.Path\r\n static member navigatePath(segment1: string, segment2: int, segment3:string, segment4: int, segment5: string, queryString, mode) : Cmd<_> =\r\n Router.nav [ segment1; string segment2; segment3; string segment4; segment5 + Router.encodeQueryString queryString ] mode RouteMode.Path\r\n static member navigatePath(segment1: string, segment2: int, segment3:string, segment4: int, segment5: string, queryString) : Cmd<_> =\r\n Router.nav [ segment1; string segment2; segment3; string segment4; segment5 + Router.encodeQueryStringInts queryString ] HistoryMode.PushState RouteMode.Path\r\n static member navigatePath(segment1: string, segment2: int, segment3:string, segment4: int, segment5: string, queryString, mode) : Cmd<_> =\r\n Router.nav [ segment1; string segment2; segment3; string segment4; segment5 + Router.encodeQueryStringInts queryString ] mode RouteMode.Path\r\n static member navigatePath(segment1: string, segment2: int, segment3:string, segment4: string, segment5, queryString) : Cmd<_> =\r\n Router.nav [ segment1; string segment2; segment3; segment4; segment5 + Router.encodeQueryString queryString ] HistoryMode.PushState RouteMode.Path\r\n static member navigatePath(segment1: string, segment2: int, segment3:string, segment4: string, segment5, queryString, mode) : Cmd<_> =\r\n Router.nav [ segment1; string segment2; segment3; segment4; segment5 + Router.encodeQueryString queryString ] mode RouteMode.Path\r\n static member navigatePath(segment1: string, segment2: int, segment3:string, segment4: string, segment5, queryString) : Cmd<_> =\r\n Router.nav [ segment1; string segment2; segment3; segment4; segment5 + Router.encodeQueryStringInts queryString ] HistoryMode.PushState RouteMode.Path\r\n static member navigatePath(segment1: string, segment2: int, segment3:string, segment4: string, segment5, queryString, mode) : Cmd<_> =\r\n Router.nav [ segment1; string segment2; segment3; segment4; segment5 + Router.encodeQueryStringInts queryString ] mode RouteMode.Path\r\n static member navigatePath(fullPath: string) : Cmd<_> =\r\n Router.nav [ fullPath ] HistoryMode.PushState RouteMode.Path\r\n static member navigatePath(fullPath: string, mode) : Cmd<_> =\r\n Router.nav [ fullPath ] mode RouteMode.Path\r\n static member navigatePath(segment: string, value: int) : Cmd<_> =\r\n Router.nav [segment; string value ] HistoryMode.PushState RouteMode.Path\r\n static member navigatePath(segment: string, value: int, mode) : Cmd<_> =\r\n Router.nav [segment; string value ] mode RouteMode.Path\r\n static member navigatePath(segment1: string, value1: int, value2: int) : Cmd<_> =\r\n Router.nav [segment1; string value1; string value2 ] HistoryMode.PushState RouteMode.Path\r\n static member navigatePath(segment1: string, value1: int, value2: int, mode) : Cmd<_> =\r\n Router.nav [segment1; string value1; string value2 ] mode RouteMode.Path\r\n static member navigatePath(segment1: string, segment2: string, value1: int) : Cmd<_> =\r\n Router.nav [segment1; segment2; string value1 ] HistoryMode.PushState RouteMode.Path\r\n static member navigatePath(segment1: string, segment2: string, value1: int, mode) : Cmd<_> =\r\n Router.nav [segment1; segment2; string value1 ] mode RouteMode.Path\r\n static member navigatePath(segment1: string, value1: int, segment2: string) : Cmd<_> =\r\n Router.nav [segment1; string value1; segment2 ] HistoryMode.PushState RouteMode.Path\r\n static member navigatePath(segment1: string, value1: int, segment2: string, mode) : Cmd<_> =\r\n Router.nav [segment1; string value1; segment2 ] mode RouteMode.Path\r\n static member navigatePath(segment1: string, value1: int, segment2: string, value2: int) : Cmd<_> =\r\n Router.nav [segment1; string value1; segment2; string value2 ] HistoryMode.PushState RouteMode.Path\r\n static member navigatePath(segment1: string, value1: int, segment2: string, value2: int, mode) : Cmd<_> =\r\n Router.nav [segment1; string value1; segment2; string value2 ] mode RouteMode.Path\r\n static member navigatePath(segment1: string, value1: int, segment2: string, value2: int, segment3: string) : Cmd<_> =\r\n Router.nav [segment1; string value1; segment2; string value2; segment3 ] HistoryMode.PushState RouteMode.Path\r\n static member navigatePath(segment1: string, value1: int, segment2: string, value2: int, segment3: string, mode) : Cmd<_> =\r\n Router.nav [segment1; string value1; segment2; string value2; segment3 ] mode RouteMode.Path\r\n static member navigatePath(segment1: string, value1: int, segment2: string, value2: int, segment3: string, segment4: string) : Cmd<_> =\r\n Router.nav [segment1; string value1; segment2; string value2; segment3; segment4 ] HistoryMode.PushState RouteMode.Path\r\n static member navigatePath(segment1: string, value1: int, segment2: string, value2: int, segment3: string, segment4: string, mode) : Cmd<_> =\r\n Router.nav [segment1; string value1; segment2; string value2; segment3; segment4 ] mode RouteMode.Path\r\n static member navigatePath(segment1: string, value1: int, segment2: string, value2: int, segment3: string, value3: int) : Cmd<_> =\r\n Router.nav [segment1; string value1; segment2; string value2; segment3; string value3 ] HistoryMode.PushState RouteMode.Path\r\n static member navigatePath(segment1: string, value1: int, segment2: string, value2: int, segment3: string, value3: int, mode) : Cmd<_> =\r\n Router.nav [segment1; string value1; segment2; string value2; segment3; string value3 ] mode RouteMode.Path\r\n static member navigatePath(segment1: string, value1: int, value2: int, value3: int) : Cmd<_> =\r\n Router.nav [segment1; string value1; string value2; string value3 ] HistoryMode.PushState RouteMode.Path\r\n static member navigatePath(segment1: string, value1: int, value2: int, value3: int, mode) : Cmd<_> =\r\n Router.nav [segment1; string value1; string value2; string value3 ] mode RouteMode.Path\r\n static member navigatePath(segment1: string, value1: int, value2: int, segment2: string) : Cmd<_> =\r\n Router.nav [segment1; string value1; string value2; segment2 ] HistoryMode.PushState RouteMode.Path\r\n static member navigatePath(segment1: string, value1: int, value2: int, segment2: string, mode) : Cmd<_> =\r\n Router.nav [segment1; string value1; string value2; segment2 ] mode RouteMode.Path\r\n\r\n static member format([<ParamArray>] xs: string array) =\r\n Router.encodeParts (List.ofArray xs) RouteMode.Hash\r\n static member format(segment: string, queryString) : string =\r\n Router.encodeParts [ segment + Router.encodeQueryString queryString ] RouteMode.Hash\r\n static member format(segment: string, queryString) : string =\r\n Router.encodeParts [ segment + Router.encodeQueryStringInts queryString ] RouteMode.Hash\r\n static member format(segment1: string, segment2: string, queryString) : string =\r\n Router.encodeParts [ segment1; segment2 + Router.encodeQueryString queryString ] RouteMode.Hash\r\n static member format(segment1: string, segment2: string, queryString) : string =\r\n Router.encodeParts [ segment1; segment2 + Router.encodeQueryStringInts queryString ] RouteMode.Hash\r\n static member format(segment1: string, segment2: string, segment3:int, queryString) : string =\r\n Router.encodeParts [ segment1; segment2; string segment3 + Router.encodeQueryString queryString ] RouteMode.Hash\r\n static member format(segment1: string, segment2: string, segment3:int, queryString) : string =\r\n Router.encodeParts [ segment1; segment2; string segment3 + Router.encodeQueryStringInts queryString ] RouteMode.Hash\r\n static member format(segment1: string, segment2: string, segment3:string, queryString) : string =\r\n Router.encodeParts [ segment1; segment2; segment3 + Router.encodeQueryString queryString ] RouteMode.Hash\r\n static member format(segment1: string, segment2: string, segment3:string, queryString) : string =\r\n Router.encodeParts [ segment1; segment2; segment3 + Router.encodeQueryStringInts queryString ] RouteMode.Hash\r\n static member format(segment1: string, segment2: int, segment3:string, queryString) : string =\r\n Router.encodeParts [ segment1; string segment2; segment3 + Router.encodeQueryString queryString ] RouteMode.Hash\r\n static member format(segment1: string, segment2: int, segment3:string, queryString) : string =\r\n Router.encodeParts [ segment1; string segment2; segment3 + Router.encodeQueryStringInts queryString ] RouteMode.Hash\r\n static member format(segment1: string, segment2: string, segment3:string, segment4: string, queryString) : string =\r\n Router.encodeParts [ segment1; segment2; segment3; segment4 + Router.encodeQueryString queryString ] RouteMode.Hash\r\n static member format(segment1: string, segment2: string, segment3:string, segment4: string, queryString) : string =\r\n Router.encodeParts [ segment1; segment2; segment3; segment4 + Router.encodeQueryStringInts queryString ] RouteMode.Hash\r\n static member format(segment1: string, segment2: string, segment3:string, segment4: string, segment5, queryString) : string =\r\n Router.encodeParts [ segment1; segment2; segment3; segment4; segment5 + Router.encodeQueryString queryString ] RouteMode.Hash\r\n static member format(segment1: string, segment2: string, segment3:string, segment4: string, segment5, queryString) : string =\r\n Router.encodeParts [ segment1; segment2; segment3; segment4; segment5 + Router.encodeQueryStringInts queryString ] RouteMode.Hash\r\n static member format(segment1: string, segment2: int, segment3:string, segment4: string, queryString) : string =\r\n Router.encodeParts [ segment1; string segment2; segment3; segment4 + Router.encodeQueryString queryString ] RouteMode.Hash\r\n static member format(segment1: string, segment2: int, segment3:string, segment4: string, queryString) : string =\r\n Router.encodeParts [ segment1; string segment2; segment3; segment4 + Router.encodeQueryStringInts queryString ] RouteMode.Hash\r\n static member format(segment1: string, segment2: int, segment3:int, segment4: string, queryString) : string =\r\n Router.encodeParts [ segment1; string segment2; string segment3; segment4 + Router.encodeQueryString queryString ] RouteMode.Hash\r\n static member format(segment1: string, segment2: int, segment3:int, segment4: string, queryString) : string =\r\n Router.encodeParts [ segment1; string segment2; string segment3; segment4 + Router.encodeQueryStringInts queryString ] RouteMode.Hash\r\n static member format(segment1: string, segment2: int, segment3:int, segment4: string, segment5: string, segment6, queryString) : string =\r\n Router.encodeParts [ segment1; string segment2; string segment3; segment4; segment5; segment6 + Router.encodeQueryString queryString ] RouteMode.Hash\r\n static member format(segment1: string, segment2: int, segment3:int, segment4: string, segment5: string, segment6, queryString) : string =\r\n Router.encodeParts [ segment1; string segment2; string segment3; segment4; segment5; segment6 + Router.encodeQueryStringInts queryString ] RouteMode.Hash\r\n static member format(segment1: string, segment2: int, segment3:int, segment4: int, segment5: string, queryString) : string =\r\n Router.encodeParts [ segment1; string segment2; string segment3; string segment4; segment5 + Router.encodeQueryString queryString ] RouteMode.Hash\r\n static member format(segment1: string, segment2: int, segment3:int, segment4: int, segment5: string, queryString) : string =\r\n Router.encodeParts [ segment1; string segment2; string segment3; string segment4; segment5 + Router.encodeQueryStringInts queryString ] RouteMode.Hash\r\n static member format(segment1: string, segment2: int, segment3:string, segment4: int, segment5: string, queryString) : string =\r\n Router.encodeParts [ segment1; string segment2; segment3; string segment4; segment5 + Router.encodeQueryString queryString ] RouteMode.Hash\r\n static member format(segment1: string, segment2: int, segment3:string, segment4: int, segment5: string, queryString) : string =\r\n Router.encodeParts [ segment1; string segment2; segment3; string segment4; segment5 + Router.encodeQueryStringInts queryString ] RouteMode.Hash\r\n static member format(segment1: string, segment2: int, segment3:string, segment4: string, segment5, queryString) : string =\r\n Router.encodeParts [ segment1; string segment2; segment3; segment4; segment5 + Router.encodeQueryString queryString ] RouteMode.Hash\r\n static member format(segment1: string, segment2: int, segment3:string, segment4: string, segment5, queryString) : string =\r\n Router.encodeParts [ segment1; string segment2; segment3; segment4; segment5 + Router.encodeQueryStringInts queryString ] RouteMode.Hash\r\n static member format(fullPath: string) : string =\r\n Router.encodeParts [ fullPath ] RouteMode.Hash\r\n static member format(fullPath: string list) : string =\r\n Router.encodeParts fullPath RouteMode.Hash\r\n static member format(segment: string, value: int) : string =\r\n Router.encodeParts [segment; string value ] RouteMode.Hash\r\n static member format(segment1: string, value1: int, value2: int) : string =\r\n Router.encodeParts [segment1; string value1; string value2 ] RouteMode.Hash\r\n static member format(segment1: string, segment2: string, value1: int) : string =\r\n Router.encodeParts [segment1; segment2; string value1 ] RouteMode.Hash\r\n static member format(segment1: string, value1: int, segment2: string) : string =\r\n Router.encodeParts [segment1; string value1; segment2 ] RouteMode.Hash\r\n static member format(segment1: string, value1: int, segment2: string, value2: int) : string =\r\n Router.encodeParts [segment1; string value1; segment2; string value2 ] RouteMode.Hash\r\n static member format(segment1: string, value1: int, segment2: string, value2: int, segment3: string) : string =\r\n Router.encodeParts [segment1; string value1; segment2; string value2; segment3 ] RouteMode.Hash\r\n static member format(segment1: string, value1: int, segment2: string, value2: int, segment3: string, segment4: string) : string =\r\n Router.encodeParts [segment1; string value1; segment2; string value2; segment3; segment4 ] RouteMode.Hash\r\n static member format(segment1: string, value1: int, segment2: string, value2: int, segment3: string, value3: int) : string =\r\n Router.encodeParts [segment1; string value1; segment2; string value2; segment3; string value3 ] RouteMode.Hash\r\n static member format(segment1: string, value1: int, value2: int, value3: int) : string =\r\n Router.encodeParts [segment1; string value1; string value2; string value3 ] RouteMode.Hash\r\n static member format(segment1: string, value1: int, value2: int, segment2: string) : string =\r\n Router.encodeParts [segment1; string value1; string value2; segment2 ] RouteMode.Hash\r\n\r\n static member formatPath([<ParamArray>] xs: string array) =\r\n Router.encodeParts (List.ofArray xs) RouteMode.Path\r\n static member formatPath(segment: string, queryString) : string =\r\n Router.encodeParts [ segment + Router.encodeQueryString queryString ] RouteMode.Path\r\n static member formatPath(segment: string, queryString) : string =\r\n Router.encodeParts [ segment + Router.encodeQueryStringInts queryString ] RouteMode.Path\r\n static member formatPath(segment1: string, segment2: string, queryString) : string =\r\n Router.encodeParts [ segment1; segment2 + Router.encodeQueryString queryString ] RouteMode.Path\r\n static member formatPath(segment1: string, segment2: string, queryString) : string =\r\n Router.encodeParts [ segment1; segment2 + Router.encodeQueryStringInts queryString ] RouteMode.Path\r\n static member formatPath(segment1: string, segment2: string, segment3:int, queryString) : string =\r\n Router.encodeParts [ segment1; segment2; string segment3 + Router.encodeQueryString queryString ] RouteMode.Path\r\n static member formatPath(segment1: string, segment2: string, segment3:int, queryString) : string =\r\n Router.encodeParts [ segment1; segment2; string segment3 + Router.encodeQueryStringInts queryString ] RouteMode.Path\r\n static member formatPath(segment1: string, segment2: string, segment3:string, queryString) : string =\r\n Router.encodeParts [ segment1; segment2; segment3 + Router.encodeQueryString queryString ] RouteMode.Path\r\n static member formatPath(segment1: string, segment2: string, segment3:string, queryString) : string =\r\n Router.encodeParts [ segment1; segment2; segment3 + Router.encodeQueryStringInts queryString ] RouteMode.Path\r\n static member formatPath(segment1: string, segment2: int, segment3:string, queryString) : string =\r\n Router.encodeParts [ segment1; string segment2; segment3 + Router.encodeQueryString queryString ] RouteMode.Path\r\n static member formatPath(segment1: string, segment2: int, segment3:string, queryString) : string =\r\n Router.encodeParts [ segment1; string segment2; segment3 + Router.encodeQueryStringInts queryString ] RouteMode.Path\r\n static member formatPath(segment1: string, segment2: string, segment3:string, segment4: string, queryString) : string =\r\n Router.encodeParts [ segment1; segment2; segment3; segment4 + Router.encodeQueryString queryString ] RouteMode.Path\r\n static member formatPath(segment1: string, segment2: string, segment3:string, segment4: string, queryString) : string =\r\n Router.encodeParts [ segment1; segment2; segment3; segment4 + Router.encodeQueryStringInts queryString ] RouteMode.Path\r\n static member formatPath(segment1: string, segment2: string, segment3:string, segment4: string, segment5, queryString) : string =\r\n Router.encodeParts [ segment1; segment2; segment3; segment4; segment5 + Router.encodeQueryString queryString ] RouteMode.Path\r\n static member formatPath(segment1: string, segment2: string, segment3:string, segment4: string, segment5, queryString) : string =\r\n Router.encodeParts [ segment1; segment2; segment3; segment4; segment5 + Router.encodeQueryStringInts queryString ] RouteMode.Path\r\n static member formatPath(segment1: string, segment2: int, segment3:string, segment4: string, queryString) : string =\r\n Router.encodeParts [ segment1; string segment2; segment3; segment4 + Router.encodeQueryString queryString ] RouteMode.Path\r\n static member formatPath(segment1: string, segment2: int, segment3:string, segment4: string, queryString) : string =\r\n Router.encodeParts [ segment1; string segment2; segment3; segment4 + Router.encodeQueryStringInts queryString ] RouteMode.Path\r\n static member formatPath(segment1: string, segment2: int, segment3:int, segment4: string, queryString) : string =\r\n Router.encodeParts [ segment1; string segment2; string segment3; segment4 + Router.encodeQueryString queryString ] RouteMode.Path\r\n static member formatPath(segment1: string, segment2: int, segment3:int, segment4: string, queryString) : string =\r\n Router.encodeParts [ segment1; string segment2; string segment3; segment4 + Router.encodeQueryStringInts queryString ] RouteMode.Path\r\n static member formatPath(segment1: string, segment2: int, segment3:int, segment4: string, segment5: string, segment6, queryString) : string =\r\n Router.encodeParts [ segment1; string segment2; string segment3; segment4; segment5; segment6 + Router.encodeQueryString queryString ] RouteMode.Path\r\n static member formatPath(segment1: string, segment2: int, segment3:int, segment4: string, segment5: string, segment6, queryString) : string =\r\n Router.encodeParts [ segment1; string segment2; string segment3; segment4; segment5; segment6 + Router.encodeQueryStringInts queryString ] RouteMode.Path\r\n static member formatPath(segment1: string, segment2: int, segment3:int, segment4: int, segment5: string, queryString) : string =\r\n Router.encodeParts [ segment1; string segment2; string segment3; string segment4; segment5 + Router.encodeQueryString queryString ] RouteMode.Path\r\n static member formatPath(segment1: string, segment2: int, segment3:int, segment4: int, segment5: string, queryString) : string =\r\n Router.encodeParts [ segment1; string segment2; string segment3; string segment4; segment5 + Router.encodeQueryStringInts queryString ] RouteMode.Path\r\n static member formatPath(segment1: string, segment2: int, segment3:string, segment4: int, segment5: string, queryString) : string =\r\n Router.encodeParts [ segment1; string segment2; segment3; string segment4; segment5 + Router.encodeQueryString queryString ] RouteMode.Path\r\n static member formatPath(segment1: string, segment2: int, segment3:string, segment4: int, segment5: string, queryString) : string =\r\n Router.encodeParts [ segment1; string segment2; segment3; string segment4; segment5 + Router.encodeQueryStringInts queryString ] RouteMode.Path\r\n static member formatPath(segment1: string, segment2: int, segment3:string, segment4: string, segment5, queryString) : string =\r\n Router.encodeParts [ segment1; string segment2; segment3; segment4; segment5 + Router.encodeQueryString queryString ] RouteMode.Path\r\n static member formatPath(segment1: string, segment2: int, segment3:string, segment4: string, segment5, queryString) : string =\r\n Router.encodeParts [ segment1; string segment2; segment3; segment4; segment5 + Router.encodeQueryStringInts queryString ] RouteMode.Path\r\n static member formatPath(fullPath: string) : string =\r\n Router.encodeParts [ fullPath ] RouteMode.Path\r\n static member formatPath(fullPath: string list) : string =\r\n Router.encodeParts fullPath RouteMode.Path\r\n static member formatPath(segment: string, value: int) : string =\r\n Router.encodeParts [segment; string value ] RouteMode.Path\r\n static member formatPath(segment1: string, value1: int, value2: int) : string =\r\n Router.encodeParts [segment1; string value1; string value2 ] RouteMode.Path\r\n static member formatPath(segment1: string, segment2: string, value1: int) : string =\r\n Router.encodeParts [segment1; segment2; string value1 ] RouteMode.Path\r\n static member formatPath(segment1: string, value1: int, segment2: string) : string =\r\n Router.encodeParts [segment1; string value1; segment2 ] RouteMode.Path\r\n static member formatPath(segment1: string, value1: int, segment2: string, value2: int) : string =\r\n Router.encodeParts [segment1; string value1; segment2; string value2 ] RouteMode.Path\r\n static member formatPath(segment1: string, value1: int, segment2: string, value2: int, segment3: string) : string =\r\n Router.encodeParts [segment1; string value1; segment2; string value2; segment3 ] RouteMode.Path\r\n static member formatPath(segment1: string, value1: int, segment2: string, value2: int, segment3: string, segment4: string) : string =\r\n Router.encodeParts [segment1; string value1; segment2; string value2; segment3; segment4 ] RouteMode.Path\r\n static member formatPath(segment1: string, value1: int, segment2: string, value2: int, segment3: string, value3: int) : string =\r\n Router.encodeParts [segment1; string value1; segment2; string value2; segment3; string value3 ] RouteMode.Path\r\n static member formatPath(segment1: string, value1: int, value2: int, value3: int) : string =\r\n Router.encodeParts [segment1; string value1; string value2; string value3 ] RouteMode.Path\r\n static member formatPath(segment1: string, value1: int, value2: int, segment2: string) : string =\r\n Router.encodeParts [segment1; string value1; string value2; segment2 ] RouteMode.Path\r\n\r\nmodule Route =\r\n let (|Int|_|) (input: string) =\r\n match Int32.TryParse input with\r\n | true, value -> Some value\r\n | _ -> None\r\n\r\n let (|Int64|_|) (input: string) =\r\n match Int64.TryParse input with\r\n | true, value -> Some value\r\n | _ -> None\r\n\r\n let (|Guid|_|) (input: string) =\r\n match Guid.TryParse input with\r\n | true, value -> Some value\r\n | _ -> None\r\n\r\n let (|Number|_|) (input: string) =\r\n match Double.TryParse input with\r\n | true, value -> Some value\r\n | _ -> None\r\n\r\n let (|Decimal|_|) (input: string) =\r\n match Decimal.TryParse input with\r\n | true, value -> Some value\r\n | _ -> None\r\n\r\n let (|Bool|_|) (input: string) =\r\n match input.ToLower() with\r\n | (\"1\"|\"true\") -> Some true\r\n | (\"0\"|\"false\") -> Some false\r\n | \"\" -> Some true\r\n | _ -> None\r\n\r\n /// Used to parse the query string parameter of the route.\r\n ///\r\n /// For example to match against\r\n ///\r\n /// `/users?id={value}`\r\n ///\r\n /// You can pattern match:\r\n ///\r\n /// `[ \"users\"; Route.Query [ \"id\", value ] ] -> value`\r\n ///\r\n /// When `{value}` is an integer then you can pattern match:\r\n ///\r\n /// `[ \"users\"; Route.Query [ \"id\", Route.Int userId ] ] -> userId`\r\n let (|Query|_|) (input: string) =\r\n try\r\n let urlParams = Router.createUrlSearchParams input\r\n Some [ for entry in urlParams.entries() -> entry.[0], entry.[1] ]\r\n with | _ -> None\r\n","namespace Feliz\r\n\r\nopen Fable.Core\r\nopen Fable.Core.JsInterop\r\nopen Fable.React\r\nopen Feliz.ReactApi\r\n\r\n[<RequireQualifiedAccess>]\r\nmodule Interop =\r\n let reactApi : IReactApi = importDefault \"react\"\r\n let reactElement (name: string) (props: 'a) : ReactElement = import \"createElement\" \"react\"\r\n let mkAttr (key: string) (value: obj) : IReactProperty = unbox (key, value)\r\n let mkStyle (key: string) (value: obj) : IStyleAttribute = unbox (key, value)\r\n let inline reactElementWithChild (name: string) (child: 'a) =\r\n reactElement name (createObj [ \"children\" ==> [| child |] ])\r\n let inline reactElementWithChildren (name: string) (children: #seq<ReactElement>) = \r\n reactElement name (createObj [ \"children\" ==> reactApi.Children.toArray (unbox<ReactElement list> children) ])\r\n let inline createElement name (properties: IReactProperty list) : ReactElement =\r\n reactElement name (createObj !!properties)\r\n","namespace Feliz\r\n\r\nopen System\r\nopen Fable.Core\r\nopen Fable.Core.JsInterop\r\nopen Browser.Types\r\n\r\nmodule internal ReactInterop =\r\n let useEffectWithDeps (effect: obj) (deps: obj) : unit = import \"useEffectWithDeps\" \"./ReactInterop.js\"\r\n let useEffect (effect: obj) : unit = import \"useEffect\" \"./ReactInterop.js\"\r\n\r\ntype internal Internal() =\r\n static let propsWithKey (withKey: ('props -> string) option) props =\r\n match withKey with\r\n | Some f ->\r\n props?key <- f props\r\n props\r\n | None -> props\r\n static member\r\n functionComponent\r\n (\r\n renderElement: 'props -> ReactElement,\r\n ?name: string,\r\n ?withKey: 'props -> string\r\n )\r\n : Fable.React.FunctionComponent<'props> =\r\n name |> Option.iter (fun name -> renderElement?displayName <- name)\r\n fun props ->\r\n let props = props |> propsWithKey withKey\r\n Interop.reactApi.createElement(renderElement, props)\r\n static member\r\n memo\r\n (\r\n renderElement: 'props -> ReactElement,\r\n ?name: string,\r\n ?areEqual: 'props -> 'props -> bool,\r\n ?withKey: 'props -> string\r\n )\r\n : Fable.React.FunctionComponent<'props> =\r\n let memoElementType = Interop.reactApi.memo(renderElement, (defaultArg areEqual (unbox null)))\r\n name |> Option.iter (fun name -> memoElementType?displayName <- name)\r\n fun props ->\r\n let props = props |> propsWithKey withKey\r\n Interop.reactApi.createElement(memoElementType, props)\r\n\r\ntype React =\r\n /// The `React.fragment` component lets you return multiple elements in your `render()` method without creating an additional DOM element.\r\n static member inline fragment xs = Fable.React.Helpers.fragment [] xs\r\n /// The `React.fragment` component lets you return multiple elements in your `render()` method without creating an additional DOM element.\r\n static member inline keyedFragment(key: int, xs) = Fable.React.Helpers.fragment [ !!(\"key\", key) ] xs\r\n /// The `React.fragment` component lets you return multiple elements in your `render()` method without creating an additional DOM element.\r\n static member inline keyedFragment(key: string, xs) = Fable.React.Helpers.fragment [ !!(\"key\", key) ] xs\r\n /// The `React.fragment` component lets you return multiple elements in your `render()` method without creating an additional DOM element.\r\n static member inline keyedFragment(key: System.Guid, xs) = Fable.React.Helpers.fragment [ !!(\"key\", string key) ] xs\r\n /// The `useState` hook that create a state variable for React function components.\r\n static member useState<'t>(initial: 't) = Interop.reactApi.useState(initial)\r\n static member useReducer(update, initialState) = Interop.reactApi.useReducer update initialState\r\n /// The `useEffect` hook that creates a disposable effect for React function components\r\n /// This effect has no dependencies which means the effect is re-executed on every re-render.\r\n /// To make the effect run once (for example you subscribe once to web sockets) then provide an empty array\r\n /// for the dependencies: `React.useEffect(disposableEffect, [| |])`.\r\n static member useEffect(effect: unit -> IDisposable) : unit = ReactInterop.useEffect(effect)\r\n /// The `useEffect` hook that creates a disposable effect for React function components.\r\n /// This effect takes a array of *dependencies*.\r\n /// Whenever any of these dependencies change, the effect is re-executed. To execute the effect only once,\r\n /// you have to explicitly provide an empty array for the dependencies: `React.useEffect(effect, [| |])`.\r\n static member useEffect(effect: unit -> IDisposable, dependencies: obj []) : unit = ReactInterop.useEffectWithDeps effect dependencies\r\n /// Creates a disposable instance by providing the implementation of the dispose member\r\n static member createDisposable(dispose: unit -> unit) =\r\n { new IDisposable with member this.Dispose() = dispose() }\r\n\r\n /// React hook to define and use an effect only once when a function component renders for the first time.\r\n /// This an alias for `React.useEffect(effect, [| |])` which explicitly provide an empty array for the dependencies of the effect which means the effect will only run once.\r\n static member useEffectOnce(effect: unit -> unit) =\r\n React.useEffect(effect, [| |])\r\n\r\n /// React hook to define and use a disposable effect only once when a function component renders for the first time.\r\n /// This an alias for `React.useEffect(effect, [| |])` which explicitly provide an empty array for the dependencies of the effect which means the effect will only run once.\r\n static member useEffectOnce(effect: unit -> IDisposable) =\r\n React.useEffect(effect, [| |])\r\n /// The `useEffect` hook that creates an effect for React function components.\r\n /// This effect is executed *every time* the function component re-renders.\r\n ///\r\n /// To make the effect run only once, write: `React.useEffect(effect, [| |])` which explicitly states\r\n /// that this effect has no dependencies and should only run once on initial render.\r\n static member useEffect(effect: unit -> unit) : unit =\r\n ReactInterop.useEffect\r\n (fun _ ->\r\n effect()\r\n React.createDisposable(ignore))\r\n\r\n /// The `useEffect` hook that creates an effect for React function components. This effect takes a array of *dependencies*.\r\n /// Whenever any of these dependencies change, the effect is re-executed. To execute the effect only once,\r\n /// you have to explicitly provide an empty array for the dependencies: `React.useEffect(effect, [| |])`.\r\n static member useEffect(effect: unit -> unit, dependencies: obj []) : unit =\r\n ReactInterop.useEffectWithDeps\r\n (fun _ ->\r\n effect()\r\n React.createDisposable(ignore))\r\n dependencies\r\n\r\n /// <summary>\r\n /// The `useCallback` hook. Returns a memoized callback. Pass an inline callback and an array of dependencies.\r\n /// `useCallback` will return a memoized version of the callback that only changes if one of the dependencies has changed.\r\n /// </summary>\r\n /// <param name='callbackFunction'>A callback function to be memoized.</param>\r\n /// <param name='dependencies'>An array of dependencies upon which the callback function depends.\r\n /// If not provided, defaults to empty array, representing dependencies that never change.</param>\r\n static member useCallback(callbackFunction: 'a -> 'b, ?dependencies: obj array) =\r\n Interop.reactApi.useCallback callbackFunction (defaultArg dependencies [||])\r\n\r\n /// Returns a mutable ref object whose .current property is initialized to the passed argument (initialValue). The returned object will persist for the full lifetime of the component.\r\n ///\r\n /// Essentially, useRef is like a container that can hold a mutable value in its .current property.\r\n static member useRef(initialValue) = Interop.reactApi.useRef(initialValue)\r\n\r\n /// A specialized version of React.useRef() that creates a reference to an input element.\r\n /// \r\n /// Useful for controlling the internal properties and methods that element, for example to enable focus().\r\n static member useInputRef() : IRefValue<HTMLInputElement option> = React.useRef(None)\r\n\r\n /// A specialized version of React.useRef() that creates a reference to a button element.\r\n static member useButtonRef() : IRefValue<HTMLButtonElement option> = React.useRef(None)\r\n\r\n /// A specialized version of React.useRef() that creates a reference to a generic HTML element.\r\n /// \r\n /// Useful for controlling the internal properties and methods that element, for integration with third-party libraries that require a Html element.\r\n static member useElementRef() : IRefValue<HTMLElement option> = React.useRef(None)\r\n\r\n /// <summary>\r\n /// The `useMemo` hook. Returns a memoized value. Pass a \"create\" function and an array of dependencies.\r\n /// `useMemo` will only recompute the memoized value when one of the dependencies has changed.\r\n /// </summary>\r\n /// <param name='createFunction'>A create function returning a value to be memoized.</param>\r\n /// <param name='dependencies'>An array of dependencies upon which the create function depends.\r\n /// If not provided, defaults to empty array, representing dependencies that never change.</param>\r\n static member useMemo(createFunction: unit -> 'a, ?dependencies: obj array) =\r\n Interop.reactApi.useMemo createFunction (defaultArg dependencies [||])\r\n\r\n //\r\n // React.functionComponent\r\n //\r\n\r\n /// <summary>\r\n /// Creates a React function component from a function that accepts a \"props\" object and renders a result.\r\n /// A component key can be provided in the props object, or a custom `withKey` function can be provided.\r\n /// </summary>\r\n /// <param name='render'>A render function that returns an element.</param>\r\n static member functionComponent(render: 'props -> ReactElement) =\r\n Internal.functionComponent(render)\r\n\r\n /// <summary>\r\n /// Creates a React function component from a function that accepts a \"props\" object and renders a result.\r\n /// A component key can be provided in the props object, or a custom `withKey` function can be provided.\r\n /// </summary>\r\n /// <param name='name'>The component name to display in the React dev tools.</param>\r\n /// <param name='render'>A render function that returns an element.</param>\r\n static member functionComponent(name: string, render: 'props -> ReactElement) =\r\n Internal.functionComponent(render, name)\r\n\r\n /// <summary>\r\n /// Creates a React function component from a function that accepts a \"props\" object and renders a result.\r\n /// A component key can be provided in the props object, or a custom `withKey` function can be provided.\r\n /// </summary>\r\n /// <param name='withKey'>A function to derive a component key from the props.</param>\r\n /// <param name='render'>A render function that returns an element.</param>\r\n static member functionComponent(withKey: 'props -> string, render: 'props -> ReactElement) =\r\n Internal.functionComponent(render, withKey=withKey)\r\n\r\n /// <summary>\r\n /// Creates a React function component from a function that accepts a \"props\" object and renders a result.\r\n /// A component key can be provided in the props object, or a custom `withKey` function can be provided.\r\n /// </summary>\r\n /// <param name='name'>The component name to display in the React dev tools.</param>\r\n /// <param name='withKey'>A function to derive a component key from the props.</param>\r\n /// <param name='render'>A render function that returns an element.</param>\r\n static member functionComponent(name: string, withKey: 'props -> string, render: 'props -> ReactElement) =\r\n Internal.functionComponent(render, name, withKey=withKey)\r\n\r\n /// <summary>\r\n /// Creates a React function component from a function that accepts a \"props\" object and renders a result.\r\n /// A component key can be provided in the props object, or a custom `withKey` function can be provided.\r\n /// </summary>\r\n /// <param name='render'>A render function that returns a list of elements.</param>\r\n static member functionComponent(render: 'props -> #seq<ReactElement>) =\r\n Internal.functionComponent(render >> React.fragment)\r\n\r\n /// <summary>\r\n /// Creates a React function component from a function that accepts a \"props\" object and renders a result.\r\n /// A component key can be provided in the props object, or a custom `withKey` function can be provided.\r\n /// </summary>\r\n /// <param name='name'>The component name to display in the React dev tools.</param>\r\n /// <param name='render'>A render function that returns a list of elements.</param>\r\n static member functionComponent(name: string, render: 'props -> #seq<ReactElement>) =\r\n Internal.functionComponent(render >> React.fragment, name)\r\n\r\n /// <summary>\r\n /// Creates a React function component from a function that accepts a \"props\" object and renders a result.\r\n /// A component key can be provided in the props object, or a custom `withKey` function can be provided.\r\n /// </summary>\r\n /// <param name='withKey'>A function to derive a component key from the props.</param>\r\n /// <param name='render'>A render function that returns a list of elements.</param>\r\n static member functionComponent(withKey: 'props -> string, render: 'props -> #seq<ReactElement>) =\r\n Internal.functionComponent(render >> React.fragment, withKey=withKey)\r\n\r\n /// <summary>\r\n /// Creates a React function component from a function that accepts a \"props\" object and renders a result.\r\n /// A component key can be provided in the props object, or a custom `withKey` function can be provided.\r\n /// </summary>\r\n /// <param name='name'>The component name to display in the React dev tools.</param>\r\n /// <param name='withKey'>A function to derive a component key from the props.</param>\r\n /// <param name='render'>A render function that returns a list of elements.</param>\r\n static member functionComponent(name: string, withKey: 'props -> string, render: 'props -> #seq<ReactElement>) =\r\n Internal.functionComponent(render >> React.fragment, name, withKey=withKey)\r\n\r\n //\r\n // React.memo\r\n //\r\n\r\n /// <summary>\r\n /// `React.memo` memoizes the result of a function component. Given the same props, React will skip rendering the component, and reuse the last rendered result.\r\n /// By default it will only shallowly compare complex objects in the props object. For more control, a custom `areEqual` function can be provided.\r\n /// A component key can be provided in the props object, or a custom `withKey` function can be provided.\r\n /// </summary>\r\n /// <param name='render'>A render function or a React.functionComponent.</param>\r\n static member memo(render: 'props -> ReactElement) =\r\n Internal.memo(render)\r\n\r\n /// <summary>\r\n /// `React.memo` memoizes the result of a function component. Given the same props, React will skip rendering the component, and reuse the last rendered result.\r\n /// By default it will only shallowly compare complex objects in the props object. For more control, a custom `areEqual` function can be provided.\r\n /// A component key can be provided in the props object, or a custom `withKey` function can be provided.\r\n /// </summary>\r\n /// <param name='name'>The component name to display in the React dev tools.</param>\r\n /// <param name='render'>A render function or a React.functionComponent.</param>\r\n static member memo(name: string, render: 'props -> ReactElement) =\r\n Internal.memo(render, name)\r\n\r\n /// <summary>\r\n /// `React.memo` memoizes the result of a function component. Given the same props, React will skip rendering the component, and reuse the last rendered result.\r\n /// By default it will only shallowly compare complex objects in the props object. For more control, a custom `areEqual` function can be provided.\r\n /// A component key can be provided in the props object, or a custom `withKey` function can be provided.\r\n /// </summary>\r\n /// <param name='areEqual'>A custom comparison function to use instead of React's default shallow compare.</param>\r\n /// <param name='render'>A render function or a React.functionComponent.</param>\r\n static member memo(areEqual: 'props -> 'props -> bool, render: 'props -> ReactElement) =\r\n Internal.memo(render, areEqual=areEqual)\r\n\r\n /// <summary>\r\n /// `React.memo` memoizes the result of a function component. Given the same props, React will skip rendering the component, and reuse the last rendered result.\r\n /// By default it will only shallowly compare complex objects in the props object. For more control, a custom `areEqual` function can be provided.\r\n /// A component key can be provided in the props object, or a custom `withKey` function can be provided.\r\n /// </summary>\r\n /// <param name='withKey'>A function to derive a component key from the props.</param>\r\n /// <param name='render'>A render function or a React.functionComponent.</param>\r\n static member memo(withKey: 'props -> string, render: 'props -> ReactElement) =\r\n Internal.memo(render, withKey=withKey)\r\n\r\n /// <summary>\r\n /// `React.memo` memoizes the result of a function component. Given the same props, React will skip rendering the component, and reuse the last rendered result.\r\n /// By default it will only shallowly compare complex objects in the props object. For more control, a custom `areEqual` function can be provided.\r\n /// A component key can be provided in the props object, or a custom `withKey` function can be provided.\r\n /// </summary>\r\n /// <param name='name'>The component name to display in the React dev tools.</param>\r\n /// <param name='areEqual'>A custom comparison function to use instead of React's default shallow compare.</param>\r\n /// <param name='render'>A render function or a React.functionComponent.</param>\r\n static member memo(name: string, areEqual: 'props -> 'props -> bool, render: 'props -> ReactElement) =\r\n Internal.memo(render, name, areEqual=areEqual)\r\n\r\n /// <summary>\r\n /// `React.memo` memoizes the result of a function component. Given the same props, React will skip rendering the component, and reuse the last rendered result.\r\n /// By default it will only shallowly compare complex objects in the props object. For more control, a custom `areEqual` function can be provided.\r\n /// A component key can be provided in the props object, or a custom `withKey` function can be provided.\r\n /// </summary>\r\n /// <param name='name'>The component name to display in the React dev tools.</param>\r\n /// <param name='withKey'>A function to derive a component key from the props.</param>\r\n /// <param name='render'>A render function or a React.functionComponent.</param>\r\n static member memo(name: string, withKey: 'props -> string, render: 'props -> ReactElement) =\r\n Internal.memo(render, name, withKey=withKey)\r\n\r\n /// <summary>\r\n /// `React.memo` memoizes the result of a function component. Given the same props, React will skip rendering the component, and reuse the last rendered result.\r\n /// By default it will only shallowly compare complex objects in the props object. For more control, a custom `areEqual` function can be provided.\r\n /// A component key can be provided in the props object, or a custom `withKey` function can be provided.\r\n /// </summary>\r\n /// <param name='areEqual'>A custom comparison function to use instead of React's default shallow compare.</param>\r\n /// <param name='withKey'>A function to derive a component key from the props.</param>\r\n /// <param name='render'>A render function or a React.functionComponent.</param>\r\n static member memo(areEqual: 'props -> 'props -> bool, withKey: 'props -> string, render: 'props -> ReactElement) =\r\n Internal.memo(render, areEqual=areEqual, withKey=withKey)\r\n\r\n /// <summary>\r\n /// `React.memo` memoizes the result of a function component. Given the same props, React will skip rendering the component, and reuse the last rendered result.\r\n /// By default it will only shallowly compare complex objects in the props object. For more control, a custom `areEqual` function can be provided.\r\n /// A component key can be provided in the props object, or a custom `withKey` function can be provided.\r\n /// </summary>\r\n /// <param name='name'>The component name to display in the React dev tools.</param>\r\n /// <param name='areEqual'>A custom comparison function to use instead of React's default shallow compare.</param>\r\n /// <param name='withKey'>A function to derive a component key from the props.</param>\r\n /// <param name='render'>A render function or a React.functionComponent.</param>\r\n static member memo(name: string, areEqual: 'props -> 'props -> bool, withKey: 'props -> string, render: 'props -> ReactElement) =\r\n Internal.memo(render, name, areEqual=areEqual, withKey=withKey)\r\n\r\n /// <summary>\r\n /// `React.memo` memoizes the result of a function component. Given the same props, React will skip rendering the component, and reuse the last rendered result.\r\n /// By default it will only shallowly compare complex objects in the props object. For more control, a custom `areEqual` function can be provided.\r\n /// A component key can be provided in the props object, or a custom `withKey` function can be provided.\r\n /// </summary>\r\n /// <param name='render'>A render function that returns a list of elements.</param>\r\n static member memo(render: 'props -> #seq<ReactElement>) =\r\n Internal.memo(render >> React.fragment)\r\n\r\n /// <summary>\r\n /// `React.memo` memoizes the result of a function component. Given the same props, React will skip rendering the component, and reuse the last rendered result.\r\n /// By default it will only shallowly compare complex objects in the props object. For more control, a custom `areEqual` function can be provided.\r\n /// A component key can be provided in the props object, or a custom `withKey` function can be provided.\r\n /// </summary>\r\n /// <param name='name'>The component name to display in the React dev tools.</param>\r\n /// <param name='render'>A render function that returns a list of elements.</param>\r\n static member memo(name: string, render: 'props -> #seq<ReactElement>) =\r\n Internal.memo(render >> React.fragment, name)\r\n\r\n /// <summary>\r\n /// `React.memo` memoizes the result of a function component. Given the same props, React will skip rendering the component, and reuse the last rendered result.\r\n /// By default it will only shallowly compare complex objects in the props object. For more control, a custom `areEqual` function can be provided.\r\n /// A component key can be provided in the props object, or a custom `withKey` function can be provided.\r\n /// </summary>\r\n /// <param name='areEqual'>A custom comparison function to use instead of React's default shallow compare.</param>\r\n /// <param name='render'>A render function that returns a list of elements.</param>\r\n static member memo(areEqual: 'props -> 'props -> bool, render: 'props -> #seq<ReactElement>) =\r\n Internal.memo(render >> React.fragment, areEqual=areEqual)\r\n\r\n /// <summary>\r\n /// `React.memo` memoizes the result of a function component. Given the same props, React will skip rendering the component, and reuse the last rendered result.\r\n /// By default it will only shallowly compare complex objects in the props object. For more control, a custom `areEqual` function can be provided.\r\n /// A component key can be provided in the props object, or a custom `withKey` function can be provided.\r\n /// </summary>\r\n /// <param name='withKey'>A function to derive a component key from the props.</param>\r\n /// <param name='render'>A render function that returns a list of elements.</param>\r\n static member memo(withKey: 'props -> string, render: 'props -> #seq<ReactElement>) =\r\n Internal.memo(render >> React.fragment, withKey=withKey)\r\n\r\n /// <summary>\r\n /// `React.memo` memoizes the result of a function component. Given the same props, React will skip rendering the component, and reuse the last rendered result.\r\n /// By default it will only shallowly compare complex objects in the props object. For more control, a custom `areEqual` function can be provided.\r\n /// A component key can be provided in the props object, or a custom `withKey` function can be provided.\r\n /// </summary>\r\n /// <param name='name'>The component name to display in the React dev tools.</param>\r\n /// <param name='areEqual'>A custom comparison function to use instead of React's default shallow compare.</param>\r\n /// <param name='render'>A render function that returns a list of elements.</param>\r\n static member memo(name: string, areEqual: 'props -> 'props -> bool, render: 'props -> #seq<ReactElement>) =\r\n Internal.memo(render >> React.fragment, name, areEqual=areEqual)\r\n\r\n /// <summary>\r\n /// `React.memo` memoizes the result of a function component. Given the same props, React will skip rendering the component, and reuse the last rendered result.\r\n /// By default it will only shallowly compare complex objects in the props object. For more control, a custom `areEqual` function can be provided.\r\n /// A component key can be provided in the props object, or a custom `withKey` function can be provided.\r\n /// </summary>\r\n /// <param name='name'>The component name to display in the React dev tools.</param>\r\n /// <param name='withKey'>A function to derive a component key from the props.</param>\r\n /// <param name='render'>A render function that returns a list of elements.</param>\r\n static member memo(name: string, withKey: 'props -> string, render: 'props -> #seq<ReactElement>) =\r\n Internal.memo(render >> React.fragment, name, withKey=withKey)\r\n\r\n /// <summary>\r\n /// `React.memo` memoizes the result of a function component. Given the same props, React will skip rendering the component, and reuse the last rendered result.\r\n /// By default it will only shallowly compare complex objects in the props object. For more control, a custom `areEqual` function can be provided.\r\n /// A component key can be provided in the props object, or a custom `withKey` function can be provided.\r\n /// </summary>\r\n /// <param name='areEqual'>A custom comparison function to use instead of React's default shallow compare.</param>\r\n /// <param name='withKey'>A function to derive a component key from the props.</param>\r\n /// <param name='render'>A render function that returns a list of elements.</param>\r\n static member memo(areEqual: 'props -> 'props -> bool, withKey: 'props -> string, render: 'props -> #seq<ReactElement>) =\r\n Internal.memo(render >> React.fragment, areEqual=areEqual, withKey=withKey)\r\n\r\n /// <summary>\r\n /// `React.memo` memoizes the result of a function component. Given the same props, React will skip rendering the component, and reuse the last rendered result.\r\n /// By default it will only shallowly compare complex objects in the props object. For more control, a custom `areEqual` function can be provided.\r\n /// A component key can be provided in the props object, or a custom `withKey` function can be provided.\r\n /// </summary>\r\n /// <param name='name'>The component name to display in the React dev tools.</param>\r\n /// <param name='areEqual'>A custom comparison function to use instead of React's default shallow compare.</param>\r\n /// <param name='withKey'>A function to derive a component key from the props.</param>\r\n /// <param name='render'>A render function that returns a list of elements.</param>\r\n static member memo(name: string, areEqual: 'props -> 'props -> bool, withKey: 'props -> string, render: 'props -> #seq<ReactElement>) =\r\n Internal.memo(render >> React.fragment, name, areEqual=areEqual, withKey=withKey)\r\n\r\n //\r\n // React.useContext\r\n //\r\n\r\n /// <summary>\r\n /// Creates a Context object. When React renders a component that subscribes to this Context object\r\n /// it will read the current context value from the closest matching Provider above it in the tree.\r\n /// </summary>\r\n /// <param name='name'>The component name to display in the React dev tools.</param>\r\n /// <param name='defaultValue'>A default value that is only used when a component does not have a matching Provider above it in the tree.</param>\r\n static member createContext<'a>(?name: string, ?defaultValue: 'a) =\r\n let contextObject = Interop.reactApi.createContext (defaultArg defaultValue Fable.Core.JS.undefined<'a>)\r\n name |> Option.iter (fun name -> contextObject?displayName <- name)\r\n contextObject\r\n\r\n /// <summary>\r\n /// A Provider component that allows consuming components to subscribe to context changes.\r\n /// </summary>\r\n /// <param name='contextObject'>A context object returned from a previous React.createContext call.</param>\r\n /// <param name='contextValue'>The context value to be provided to descendant components.</param>\r\n /// <param name='child'>A child element.</param>\r\n static member contextProvider(contextObject: Fable.React.IContext<'a>, contextValue: 'a, child: ReactElement) : ReactElement =\r\n Interop.reactApi.createElement(contextObject?Provider, createObj [\"value\" ==> contextValue], [child])\r\n /// <summary>\r\n /// A Provider component that allows consuming components to subscribe to context changes.\r\n /// </summary>\r\n /// <param name='contextObject'>A context object returned from a previous React.createContext call.</param>\r\n /// <param name='contextValue'>The context value to be provided to descendant components.</param>\r\n /// <param name='children'>A sequence of child elements.</param>\r\n static member contextProvider(contextObject: Fable.React.IContext<'a>, contextValue: 'a, children: #seq<ReactElement>) : ReactElement =\r\n Interop.reactApi.createElement(contextObject?Provider, createObj [\"value\" ==> contextValue], children)\r\n\r\n /// <summary>\r\n /// A Consumer component that subscribes to context changes.\r\n /// </summary>\r\n /// <param name='contextObject'>A context object returned from a previous React.createContext call.</param>\r\n /// <param name='render'>A render function that returns an element.</param>\r\n static member contextConsumer(contextObject: Fable.React.IContext<'a>, render: 'a -> ReactElement) : ReactElement =\r\n Interop.reactApi.createElement(contextObject?Consumer, null, [!!render])\r\n /// <summary>\r\n /// A Consumer component that subscribes to context changes.\r\n /// </summary>\r\n /// <param name='contextObject'>A context object returned from a previous React.createContext call.</param>\r\n /// <param name='render'>A render function that returns a sequence of elements.</param>\r\n static member contextConsumer(contextObject: Fable.React.IContext<'a>, render: 'a -> #seq<ReactElement>) : ReactElement =\r\n Interop.reactApi.createElement(contextObject?Consumer, null, [!!(render >> React.fragment)])\r\n\r\n /// <summary>\r\n /// The `useContext` hook. Accepts a context object (the value returned from React.createContext) and returns the current context value for that context.\r\n /// The current context value is determined by the value prop of the nearest Provider component above the calling component in the tree.\r\n /// </summary>\r\n /// <param name='contextObject'>A context object returned from a previous React.createContext call.</param>\r\n static member useContext(contextObject: Fable.React.IContext<'a>) = Interop.reactApi.useContext contextObject\r\n","module BlogView\n\nopen Feliz\nopen BlogTypes\nopen Feliz.Markdown\nopen Feliz.Bulma\nopen Option\nopen BlogHelpers\n\n// markdown.escapeHtml = true\n\n// A button which implenets a spinner\nlet hcentered (items:ReactElement list) =\n Html.div [\n prop.classes [\"is-centered\"]\n prop.children items\n ]\n\nlet spinner =\n Bulma.button [\n prop.style [ style.borderWidth 0 ]\n button.isLarge\n button.isLoading ]\n\n\nlet mkVideo (imageDefault:URL) (maybeImage:URL option) (maybeVideo:URL option) =\n let imgURL = defaultValue imageDefault maybeImage \n let video = match maybeVideo with\n | None -> \"\"\n | Some (URL v) -> (sprintf \"<source src=\\\"%s\\\" type=\\\"video/mp4\\\">\" v)\n match imgURL with\n | URL img -> sprintf \"<video poster=\\\"%s\\\" style=\\\"pointer-events: none;\\\" loop autoplay muted playsinline>%s</video>\" img video\n \nlet mkSelfie selfieSize selfiePath =\n Bulma.image [\n selfieSize\n prop.children [\n Html.img [\n Bulma.image.isRounded\n prop.src selfiePath\n ] ] ]\n\nlet langHeader (state : State) dispatch =\n let langTuples = [\n (\"es\", \"spanish 🇪🇸\", Spanish)\n (\"gb\", \"english 🇬🇧\", English)\n (\"de\", \"german 🇩🇪\", German) \n ]\n let mkItems (langTple: string*string*Language) = \n let flag_code, emoji_tag, lang = langTple\n let isActive = match lang.Equals state.lang with\n | true -> \"active\"\n | false -> \"\"\n Html.a [\n prop.classes [\"navbar-item\" ;\"flag\"; isActive]\n prop.children [\n Bulma.navbarItemDiv [\n prop.onClick (fun _ -> lang |> ChangeLanguage |> dispatch |> ignore)\n prop.alt emoji_tag\n prop.children [\n Html.span [\n prop.alt emoji_tag\n prop.className (sprintf \"flag-icon flag-icon-%s css-flag %s\" flag_code isActive)\n ]\n ]\n ]\n ]\n ]\n Bulma.heroHead [\n Bulma.navbar [\n Bulma.navbar.isTransparent\n prop.style []\n prop.children [\n Bulma.navbarBrand [\n prop.children (List.map mkItems langTuples)\n ]\n ]\n ]\n ]\n\nlet header (state : State) dispatch selfiePath backgroundPath post =\n let maybeImage = post |> bind (fun p -> p.picture )\n let maybeVideo = post |> bind (fun p -> p.video )\n let introduction = post |> bind (fun p -> p.introduction ) |> defaultWith (fun () -> \"\")\n let title = defaultValue state.Trans.title (post |> bind (fun p -> Some p.title))\n let subtitle = if post.IsNone then state.Trans.header else \"\"\n let largeMessage = if post.IsNone then \n Bulma.content [ prop.children [\n Html.p state.Trans.subtitle ] ]\n else\n Bulma.container [\n text.hasTextCentered\n prop.children [\n Bulma.content [\n content.isMedium\n prop.children [\n Html.p introduction\n ]\n ]\n Html.img [\n prop.src \"img/scroll-bottom.gif\"\n prop.width 15 ];\n Html.div [\n prop.style [style.color.darkGray]\n prop.children [\n Html.p state.Trans.scrollDown\n ]\n ]\n ] ]\n \n let image = prop.children [ mkSelfie Bulma.image.is128x128 selfiePath ]\n let content = \n let selfie =\n if post.IsNone then \n [Bulma.levelItem [ image ]]\n else\n []\n let sectionHeader = List.append selfie [\n Html.div [\n prop.children [\n Bulma.title title ] ];\n Html.div [\n prop.children [\n Bulma.subtitle subtitle\n largeMessage\n ] ] ]\n prop.children [\n Bulma.container [\n if post.IsSome then \n text.hasTextCentered\n prop.children sectionHeader\n ]\n ]\n\n Html.div [\n prop.children [\n Bulma.hero [\n prop.className \"video\"\n hero.isFullHeight;\n hero.isDark\n prop.children [\n Html.div [\n prop.className \"hero-video is-transparent\"\n prop.children [\n Html.div [\n Html.div [\n prop.dangerouslySetInnerHTML (mkVideo backgroundPath maybeImage maybeVideo)\n ]\n ]\n ]\n ];\n langHeader state dispatch\n Bulma.heroBody [ content ]\n ]\n\n ] ] ]\n\nlet viewPageNotFound (title: string) =\n Bulma.section [\n Bulma.content [\n content.isLarge\n text.hasTextCentered\n prop.style [ style.paddingTop 30 ]\n prop.children [\n Html.p title\n ]\n ]\n ]\n\nlet showPostPreview (post:PostData) =\n match post.ownurl with\n | URL url -> \n Bulma.levelItem [\n Html.a [\n Bulma.size.isSize6\n prop.href (sprintf \"#/post/%s\" url) \n prop.children [\n Html.p post.title\n ]\n ]\n ]\n\nlet currentView url (resource:BlogContents) =\n match resource with\n | Loading -> CurView.FetchingPostsView\n | FailedLoading -> CurView.FailedLoadingView\n | Loaded posts ->\n match url with\n | [] -> CurView.IndexView\n | [ \"post\"; postURL ] ->\n match postByUrl (URL postURL) posts with\n | None -> CurView.PostNotFoundview\n | Some data -> CurView.PostView data\n | _ -> CurView.NotFoundView\n\nlet IndexView state =\n React.functionComponent (fun (post: PostData) ->\n match post.ownurl with\n | URL url -> \n let maybeImage = post.picture\n let maybeVideo = post.video\n let published = post.released.ToShortDateString()\n let background = URL (Option.defaultValue \"\" state.background )\n Html.a [\n prop.href (sprintf \"#/post/%s\" url) \n prop.children [\n Bulma.media [\n prop.children [\n Bulma.mediaLeft [\n prop.children [\n Bulma.mediaContent [\n Bulma.image [\n image.is64x64\n prop.dangerouslySetInnerHTML\n (mkVideo background maybeImage maybeVideo)\n ];\n ]\n ]\n ]\n Bulma.mediaContent [\n text.hasTextLeft\n prop.children [\n Html.text [\n Bulma.size.isSize6\n prop.innerHtml post.title\n ]\n Html.p (state.Trans.published_on published )\n ]]]]]])\n\nlet WholePost =\n React.functionComponent (fun (data: PostData) ->\n let postMSG = data.body |> markdown.source\n Bulma.content [\n // Bulma.content.isSmall\n Bulma.text.hasTextLeft\n prop.children [\n Html.div [\n prop.className \"article-content\"\n prop.children [\n Bulma.title data.title\n Markdown.markdown [ postMSG ]\n ]\n ]\n ]])\n\n\nlet viewLoadingPostList state =\n Html.div [\n prop.style [ style.paddingTop 30 ]\n prop.className [\"buttons\"; \"is-centered\"]\n prop.children [\n spinner\n ]\n ]\n\nlet viewFailedPostList state dispatch =\n Bulma.section [\n Bulma.content [\n content.isLarge\n text.hasTextCentered\n prop.style [ style.paddingTop 30 ]\n prop.children [\n Html.p state.Trans.error_fetch\n Bulma.buttonLink\n [\n prop.innerHtml state.Trans.retryLoad\n prop.onClick (fun _ -> dispatch Reload )\n ]\n ] ] ]\n\nlet viewPosts state posts dispatch =\n Bulma.section [ \n // prop.style [ style.paddingTop 15 ]\n prop.children (Array.map (IndexView state) posts) ]\n\nlet innerPage state dispatch =\n let returnsindex (maybePost:PostData option) page =\n let postControl = []\n (*match maybePost with\n | None -> []\n | Some postData -> [\n Html.hr []\n Bulma.level [\n if postData.next.IsSome then\n Bulma.levelLeft [\n showPostPreview postData.next.Value\n ]\n if postData.previous.IsSome then\n Bulma.levelRight [\n showPostPreview postData.previous.Value\n ]\n ]\n ]*)\n Html.div [\n prop.style [style.paddingTop 10]\n prop.children [\n page\n Html.div [\n Bulma.text.hasTextLeft\n prop.children (List.append postControl [\n Html.hr [];\n Html.a [\n Bulma.size.isSize6\n prop.innerHtml state.Trans.goBackToIndex\n prop.href \"#\" ]\n ])\n ]]]\n Html.div [\n prop.children [\n match currentView state.URL state.Posts with\n | IndexView ->\n match state.Posts with\n | Loaded posts -> viewPosts state posts dispatch\n | _ -> viewFailedPostList state dispatch\n | FailedLoadingView -> viewFailedPostList state dispatch\n | FetchingPostsView -> viewLoadingPostList state\n | PostView post -> scrollToElement(\"body\")\n Bulma.container [\n Bulma.container.isFluid\n prop.style [style.padding 16]\n prop.children [\n WholePost post\n |> returnsindex (Some post)\n ]\n ]\n \n | PostNotFoundview -> viewPageNotFound state.Trans.notfound\n |> returnsindex None\n | NotFoundView -> viewPageNotFound state.Trans.pageNotFound\n |> returnsindex None\n ] ]\n\nlet mainPage (state : State) dispatch =\n let post = match currentView state.URL state.Posts with\n | PostView data -> Some data\n | _ -> None\n let selfie = match state.selfie with\n | None -> \"https://dummyimage.com/64x64/7a7a7a/fff\"\n | Some url -> url\n let background = URL (Option.defaultValue \"\" state.background )\n \n Html.div [\n prop.children [\n Html.div [\n prop.id \"contents\"\n prop.children [\n // Header\n header state dispatch selfie background post\n // Main or main body\n innerPage state dispatch\n ] ]\n // Footer\n Bulma.footer [\n prop.id \"footer\"\n prop.children [\n Bulma.content [\n Bulma.content.isMedium\n Bulma.text.hasTextCentered\n prop.children [\n Html.p \"Víctor R. Escobar\"\n hcentered [\n Html.a [\n prop.href \"https://fsharp.org/\"\n prop.className \"ILoveFSharp\"\n prop.innerHtml (sprintf \"\"\"F# |> <figure class=\"image is-16x16\" style=\"display: inline-block; margin-left: 0; margin-right: 0;\"><img class=\"is-rounded\" style=\"display: inline-block;\" src=\"%s\"></figure> ❤️\"\"\" selfie)\n ]\n ]\n Html.p \"\\n\\n\"\n Html.p state.Trans.cookieFree\n ]\n ]\n ]\n ]\n ] ]\n","namespace Feliz\r\n\r\nopen Browser.Types\r\nopen Fable.Core.JsInterop\r\nopen Fable.Core\r\nopen Feliz.Styles\r\n\r\n[<StringEnum; RequireQualifiedAccess>]\r\ntype AriaDropEffect =\r\n /// A duplicate of the source object will be dropped into the target.\r\n | Copy\r\n /// A function supported by the drop target is executed, using the drag\r\n /// source as an input.\r\n | Execute\r\n /// A reference or shortcut to the dragged object will be created in the\r\n /// target object.\r\n | Link\r\n /// The source object will be removed from its current location and dropped\r\n /// into the target.\r\n | Move\r\n /// No operation can be performed; effectively cancels the drag operation if\r\n /// an attempt is made to drop on this object. Ignored if combined with any\r\n /// other token value. e.g. 'none copy' is equivalent to a 'copy' value.\r\n | None\r\n /// There is a popup menu or dialog that allows the user to choose one of\r\n /// the drag operations (copy, move, link, execute) and any other drag\r\n /// functionality, such as cancel.\r\n | Popup\r\n\r\n[<StringEnum; RequireQualifiedAccess>]\r\ntype AriaRelevant =\r\n /// Element nodes are added to the DOM within the live region.\r\n | Additions\r\n /// Equivalent to the combination of all values, \"additions removals text\".\r\n | All\r\n /// Text or element nodes within the live region are removed from the DOM.\r\n | Removals\r\n /// Text is added to any DOM descendant nodes of the live region.\r\n | Text\r\n\r\n/// Represents the native Html properties.\r\ntype prop =\r\n /// List of types the server accepts, typically a file type.\r\n static member inline accept (value: string) = Interop.mkAttr \"accept\" value\r\n\r\n /// List of supported charsets.\r\n static member inline acceptCharset (value: string) = Interop.mkAttr \"acceptCharset\" value\r\n\r\n /// Defines a keyboard shortcut to activate or add focus to the element.\r\n static member inline accessKey (value: string) = Interop.mkAttr \"accessKey\" value\r\n\r\n /// The URI of a program that processes the information submitted via the form.\r\n static member inline action (value: string) = Interop.mkAttr \"action\" value\r\n\r\n /// Alternative text in case an image can't be displayed.\r\n static member inline alt (value: string) = Interop.mkAttr \"alt\" value\r\n\r\n /// A shorthand for using prop.custom(\"data-testid\", value). Useful for referencing elements when testing React code.\r\n static member inline testId(value: string) = Interop.mkAttr \"data-testid\" value\r\n\r\n /// Identifies the currently active descendant of a `composite` widget.\r\n ///\r\n /// https://www.w3.org/WAI/PF/aria-1.1/states_and_properties#aria-activedescendant\r\n static member inline ariaActiveDescendant (id: string) = Interop.mkAttr \"aria-activedescendant\" id\r\n\r\n /// Indicates whether assistive technologies will present all, or only parts\r\n /// of, the changed region based on the change notifications defined by the\r\n /// `aria-relevant` attribute.\r\n ///\r\n /// https://www.w3.org/WAI/PF/aria-1.1/states_and_properties#aria-atomic\r\n static member inline ariaAtomic (value: bool) = Interop.mkAttr \"aria-atomic\" value\r\n\r\n /// Indicates whether an element, and its subtree, are currently being\r\n /// updated.\r\n ///\r\n /// https://www.w3.org/WAI/PF/aria-1.1/states_and_properties#aria-busy\r\n static member inline ariaBusy (value: bool) = Interop.mkAttr \"aria-busy\" value\r\n\r\n /// Indicates the current \"checked\" state of checkboxes, radio buttons, and\r\n /// other widgets. See related `aria-pressed` and `aria-selected`.\r\n ///\r\n /// https://www.w3.org/WAI/PF/aria-1.1/states_and_properties#aria-checked\r\n static member inline ariaChecked (value: bool) = Interop.mkAttr \"aria-checked\" value\r\n\r\n /// Identifies the element (or elements) whose contents or presence are\r\n /// controlled by the current element. See related `aria-owns`.\r\n ///\r\n /// https://www.w3.org/WAI/PF/aria-1.1/states_and_properties#aria-controls\r\n static member inline ariaControls ([<System.ParamArray>] ids: string []) = Interop.mkAttr \"aria-controls\" (String.concat \" \" ids)\r\n\r\n /// Specifies a URI referencing content that describes the object. See\r\n /// related `aria-describedby`.\r\n ///\r\n /// https://www.w3.org/WAI/PF/aria-1.1/states_and_properties#aria-describedat\r\n static member inline ariaDescribedAt (uri: string) = Interop.mkAttr \"aria-describedat\" uri\r\n\r\n /// Identifies the element (or elements) that describes the object. See\r\n /// related `aria-describedat` and `aria-labelledby`.\r\n ///\r\n /// The `aria-labelledby` attribute is similar to `aria-describedby` in that\r\n /// both reference other elements to calculate a text alternative, but a\r\n /// label should be concise, where a description is intended to provide more\r\n /// verbose information.\r\n ///\r\n /// https://www.w3.org/WAI/PF/aria-1.1/states_and_properties#aria-describedby\r\n static member inline ariaDescribedBy ([<System.ParamArray>] ids: string []) = Interop.mkAttr \"aria-describedby\" (String.concat \" \" ids)\r\n\r\n /// Indicates that the element is perceivable but disabled, so it is not\r\n /// editable or otherwise operable. See related `aria-hidden` and\r\n /// `aria-readonly`.\r\n ///\r\n /// https://www.w3.org/WAI/PF/aria-1.1/states_and_properties#aria-disabled\r\n static member inline ariaDisabled (value: bool) = Interop.mkAttr \"aria-disabled\" value\r\n\r\n /// Indicates what functions can be performed when the dragged object is\r\n /// released on the drop target. This allows assistive technologies to\r\n /// convey the possible drag options available to users, including whether a\r\n /// pop-up menu of choices is provided by the application. Typically, drop\r\n /// effect functions can only be provided once an object has been grabbed\r\n /// for a drag operation as the drop effect functions available are\r\n /// dependent on the object being dragged.\r\n ///\r\n /// https://www.w3.org/WAI/PF/aria-1.1/states_and_properties#aria-dropeffect\r\n static member inline ariaDropEffect ([<System.ParamArray>] values: AriaDropEffect []) = Interop.mkAttr \"aria-dropeffect\" (values |> unbox<string []> |> String.concat \" \")\r\n\r\n /// Indicates whether the element, or another grouping element it controls,\r\n /// is currently expanded or collapsed.\r\n ///\r\n /// https://www.w3.org/WAI/PF/aria-1.1/states_and_properties#aria-expanded\r\n static member inline ariaExpanded (value: bool) = Interop.mkAttr \"aria-expanded\" value\r\n\r\n /// Identifies the next element (or elements) in an alternate reading order\r\n /// of content which, at the user's discretion, allows assistive technology\r\n /// to override the general default of reading in document source order.\r\n ///\r\n /// https://www.w3.org/WAI/PF/aria-1.1/states_and_properties#aria-flowto\r\n static member inline ariaFlowTo ([<System.ParamArray>] ids: string []) = Interop.mkAttr \"aria-flowto\" (String.concat \" \" ids)\r\n\r\n /// Indicates an element's \"grabbed\" state in a drag-and-drop operation.\r\n ///\r\n /// When it is set to true it has been selected for dragging, false\r\n /// indicates that the element can be grabbed for a drag-and-drop operation,\r\n /// but is not currently grabbed, and undefined (or no value) indicates the\r\n /// element cannot be grabbed (default).\r\n ///\r\n /// https://www.w3.org/WAI/PF/aria-1.1/states_and_properties#aria-grabbed\r\n static member inline ariaGrabbed (value: bool) = Interop.mkAttr \"aria-grabbed\" value\r\n\r\n /// Indicates that the element has a popup context menu or sub-level menu.\r\n ///\r\n /// https://www.w3.org/WAI/PF/aria-1.1/states_and_properties#aria-haspopup\r\n static member inline ariaHasPopup (value: bool) = Interop.mkAttr \"aria-haspopup\" value\r\n\r\n /// Indicates that the element and all of its descendants are not visible or\r\n /// perceivable to any user as implemented by the author. See related\r\n /// `aria-disabled`.\r\n ///\r\n /// https://www.w3.org/WAI/PF/aria-1.1/states_and_properties#aria-hidden\r\n static member inline ariaHidden (value: bool) = Interop.mkAttr \"aria-hidden\" value\r\n\r\n /// Indicates the entered value does not conform to the format expected by\r\n /// the application.\r\n ///\r\n /// https://www.w3.org/WAI/PF/aria-1.1/states_and_properties#aria-invalid\r\n static member inline ariaInvalid (value: bool) = Interop.mkAttr \"aria-invalid\" value\r\n\r\n /// Defines a string value that labels the current element. See related\r\n /// `aria-labelledby`.\r\n ///\r\n /// https://www.w3.org/WAI/PF/aria-1.1/states_and_properties#aria-label\r\n static member inline ariaLabel (value: string) = Interop.mkAttr \"aria-label\" value\r\n\r\n /// Defines the hierarchical level of an element within a structure.\r\n ///\r\n /// This can be applied inside trees to tree items, to headings inside a\r\n /// document, to nested grids, nested tablists and to other structural items\r\n /// that may appear inside a container or participate in an ownership\r\n /// hierarchy. The value for `aria-level` is an integer greater than or\r\n /// equal to 1.\r\n ///\r\n /// https://www.w3.org/WAI/PF/aria-1.1/states_and_properties#aria-level\r\n static member inline ariaLevel (value: int) = Interop.mkAttr \"aria-level\" value\r\n\r\n /// Identifies the element (or elements) that labels the current element.\r\n /// See related `aria-label` and `aria-describedby`.\r\n ///\r\n /// https://www.w3.org/WAI/PF/aria-1.1/states_and_properties#aria-labelledby\r\n static member inline ariaLabelledBy ([<System.ParamArray>] ids: string []) = Interop.mkAttr \"aria-labelledby\" (String.concat \" \" ids)\r\n\r\n /// Indicates whether a text box accepts multiple lines of input or only a\r\n /// single line.\r\n ///\r\n /// https://www.w3.org/WAI/PF/aria-1.1/states_and_properties#aria-multiline\r\n static member inline ariaMultiLine (value: bool) = Interop.mkAttr \"aria-multiline\" value\r\n\r\n /// Indicates that the user may select more than one item from the current\r\n /// selectable descendants.\r\n ///\r\n /// https://www.w3.org/WAI/PF/aria-1.1/states_and_properties#aria-multiselectable\r\n static member inline ariaMultiSelectable (value: bool) = Interop.mkAttr \"aria-multiselectable\" value\r\n\r\n /// Identifies an element (or elements) in order to define a visual,\r\n /// functional, or contextual parent/child relationship between DOM elements\r\n /// where the DOM hierarchy cannot be used to represent the relationship.\r\n /// See related `aria-controls`.\r\n ///\r\n /// https://www.w3.org/WAI/PF/aria-1.1/states_and_properties#aria-owns\r\n static member inline ariaOwns ([<System.ParamArray>] ids: string []) = Interop.mkAttr \"aria-owns\" (String.concat \" \" ids)\r\n\r\n /// Indicates the current \"pressed\" state of toggle buttons. See related\r\n /// `aria-checked` and `aria-selected`.\r\n ///\r\n /// https://www.w3.org/WAI/PF/aria-1.1/states_and_properties#aria-pressed\r\n static member inline ariaPressed (value: bool) = Interop.mkAttr \"aria-pressed\" value\r\n\r\n /// Defines an element's number or position in the current set of listitems\r\n /// or treeitems. Not required if all elements in the set are present in the\r\n /// DOM. See related `aria-setsize`.\r\n ///\r\n /// https://www.w3.org/WAI/PF/aria-1.1/states_and_properties#aria-posinset\r\n static member inline ariaPosInSet (value: int) = Interop.mkAttr \"aria-posinset\" value\r\n\r\n /// Indicates that the element is not editable, but is otherwise operable.\r\n /// See related `aria-disabled`.\r\n ///\r\n /// https://www.w3.org/WAI/PF/aria-1.1/states_and_properties#aria-readonly\r\n static member inline ariaReadOnly (value: bool) = Interop.mkAttr \"aria-readonly\" value\r\n\r\n /// Indicates what user agent change notifications (additions, removals,\r\n /// etc.) assistive technologies will receive within a live region. See\r\n /// related `aria-atomic`.\r\n ///\r\n /// https://www.w3.org/WAI/PF/aria-1.1/states_and_properties#aria-relevant\r\n static member inline ariaRelevant ([<System.ParamArray>] values: AriaRelevant []) = Interop.mkAttr \"aria-relevant\" (values |> unbox<string []> |> String.concat \" \")\r\n\r\n /// Indicates that user input is required on the element before a form may\r\n /// be submitted.\r\n ///\r\n /// https://www.w3.org/WAI/PF/aria-1.1/states_and_properties#aria-required\r\n static member inline ariaRequired (value: bool) = Interop.mkAttr \"aria-required\" value\r\n\r\n /// Indicates the current \"selected\" state of various widgets. See related\r\n /// `aria-checked` and `aria-pressed`.\r\n ///\r\n /// https://www.w3.org/WAI/PF/aria-1.1/states_and_properties#aria-selected\r\n static member inline ariaSelected (value: bool) = Interop.mkAttr \"aria-selected\" value\r\n\r\n /// Defines the maximum allowed value for a range widget.\r\n ///\r\n /// https://www.w3.org/WAI/PF/aria-1.1/states_and_properties#aria-valuemax\r\n static member inline ariaValueMax (value: float) = Interop.mkAttr \"aria-valuemax\" value\r\n /// Defines the maximum allowed value for a range widget.\r\n ///\r\n /// https://www.w3.org/WAI/PF/aria-1.1/states_and_properties#aria-valuemax\r\n static member inline ariaValueMax (value: int) = Interop.mkAttr \"aria-valuemax\" value\r\n\r\n /// Defines the minimum allowed value for a range widget.\r\n ///\r\n /// https://www.w3.org/WAI/PF/aria-1.1/states_and_properties#aria-valuemin\r\n static member inline ariaValueMin (value: float) = Interop.mkAttr \"aria-valuemin\" value\r\n /// Defines the minimum allowed value for a range widget.\r\n ///\r\n /// https://www.w3.org/WAI/PF/aria-1.1/states_and_properties#aria-valuemin\r\n static member inline ariaValueMin (value: int) = Interop.mkAttr \"aria-valuemin\" value\r\n\r\n /// Defines the current value for a range widget. See related\r\n /// `aria-valuetext`.\r\n ///\r\n /// https://www.w3.org/WAI/PF/aria-1.1/states_and_properties#aria-valuenow\r\n static member inline ariaValueNow (value: float) = Interop.mkAttr \"aria-valuenow\" value\r\n /// Defines the current value for a range widget. See related\r\n /// `aria-valuetext`.\r\n ///\r\n /// https://www.w3.org/WAI/PF/aria-1.1/states_and_properties#aria-valuenow\r\n static member inline ariaValueNow (value: int) = Interop.mkAttr \"aria-valuenow\" value\r\n\r\n /// Defines the human readable text alternative of `aria-valuenow` for a\r\n /// range widget.\r\n ///\r\n /// https://www.w3.org/WAI/PF/aria-1.1/states_and_properties#aria-valuetext\r\n static member inline ariaValueText (value: string) = Interop.mkAttr \"aria-valuetext\" value\r\n\r\n /// Defines the number of items in the current set of listitems or\r\n /// treeitems. Not required if all elements in the set are present in the\r\n /// DOM. See related `aria-posinset`.\r\n ///\r\n /// https://www.w3.org/WAI/PF/aria-1.1/states_and_properties#aria-setsize\r\n static member inline ariaSetSize (value: int) = Interop.mkAttr \"aria-setsize\" value\r\n\r\n /// Indicates that the script should be executed asynchronously.\r\n static member inline async (value: bool) = Interop.mkAttr \"async\" value\r\n\r\n /// Indicates whether controls in this form can by default have their values automatically completed by the browser.\r\n static member inline autoComplete (value: string) = Interop.mkAttr \"autoComplete\" value\r\n\r\n /// The element should be automatically focused after the page loaded.\r\n static member inline autoFocus (value: bool) = Interop.mkAttr \"autoFocus\" value\r\n\r\n /// The audio or video should play as soon as possible.\r\n static member inline autoPlay (value: bool) = Interop.mkAttr \"autoPlay\" value\r\n\r\n static member inline capture (value: bool) = Interop.mkAttr \"capture\" value\r\n\r\n /// Children of this React element.\r\n static member inline children (value: Fable.React.ReactElement) = Interop.mkAttr \"children\" value\r\n /// Children of this React element.\r\n static member inline children (elems: Fable.React.ReactElement seq) = Interop.mkAttr \"children\" (Interop.reactApi.Children.toArray elems)\r\n\r\n /// A URL that designates a source document or message for the information quoted. This attribute is intended to\r\n /// point to information explaining the context or the reference for the quote.\r\n static member inline cite (value: string) = Interop.mkAttr \"cite\" value\r\n\r\n /// Specifies a CSS class for this element.\r\n static member inline className (value: string) = Interop.mkAttr \"className\" value\r\n /// Takes a list of conditional classes (`predicate:bool` * `className:string`), filters out the ones where the\r\n /// `predicate` is false and joins the rest of them using a space to combine the classses into a single class property.\r\n ///\r\n ///`prop.className [ true, \"one\"; false, \"two\" ]`\r\n ///\r\n /// is the same as\r\n ///\r\n ///`prop.className \"one\"`\r\n ///\r\n static member inline className (classes: #seq<bool * string>) =\r\n classes\r\n |> Seq.filter fst\r\n |> Seq.map snd\r\n |> String.concat \" \"\r\n |> Interop.mkAttr \"className\"\r\n /// Takes a `seq<string>` and joins them using a space to combine the classses into a single class property.\r\n ///\r\n /// `prop.className [ \"one\"; \"two\" ]`\r\n ///\r\n /// is the same as\r\n ///\r\n /// `prop.className \"one two\"`\r\n static member inline className (names: seq<string>) = Interop.mkAttr \"className\" (String.concat \" \" names)\r\n\r\n /// Takes a `seq<string>` and joins them using a space to combine the classses into a single class property.\r\n ///\r\n /// `prop.classes [ \"one\"; \"two\" ]` => `prop.className \"one two\"`\r\n static member inline classes (names: seq<string>) = Interop.mkAttr \"className\" (String.concat \" \" names)\r\n\r\n /// Defines the number of columns in a textarea.\r\n static member inline cols (value: int) = Interop.mkAttr \"cols\" value\r\n\r\n /// Defines the number of columns a cell should span.\r\n static member inline colSpan (value: int) = Interop.mkAttr \"colSpan\" value\r\n\r\n /// A value associated with http-equiv or name depending on the context.\r\n static member inline content (value: string) = Interop.mkAttr \"content\" value\r\n\r\n /// Indicates whether the element's content is editable.\r\n static member inline contentEditable (value: bool) = Interop.mkAttr \"contenteditable\" value\r\n\r\n /// If true, the browser will offer controls to allow the user to control video playback,\r\n /// including volume, seeking, and pause/resume playback.\r\n static member inline controls (value: bool) = Interop.mkAttr \"controls\" value\r\n\r\n /// Create a custom prop\r\n ///\r\n /// You generally shouldn't need to use this, if you notice a core React/Html attribute missing please submit an issue.\r\n static member inline custom (key: string, value: 't) = Interop.mkAttr key value\r\n\r\n /// The SVG cx attribute define the x-axis coordinate of a center point.\r\n ///\r\n /// Three elements are using this attribute: <circle>, <ellipse>, and <radialGradient>\r\n static member inline cx (value: float) = Interop.mkAttr \"cx\" value\r\n /// The SVG cx attribute define the x-axis coordinate of a center point.\r\n ///\r\n /// Three elements are using this attribute: <circle>, <ellipse>, and <radialGradient>\r\n static member inline cx (value: ICssUnit) = Interop.mkAttr \"cx\" value\r\n /// The SVG cx attribute define the x-axis coordinate of a center point.\r\n ///\r\n /// Three elements are using this attribute: <circle>, <ellipse>, and <radialGradient>\r\n static member inline cx (value: int) = Interop.mkAttr \"cx\" value\r\n\r\n /// The SVG cy attribute define the y-axis coordinate of a center point.\r\n ///\r\n /// Three elements are using this attribute: <circle>, <ellipse>, and <radialGradient>\r\n static member inline cy (value: float) = Interop.mkAttr \"cy\" value\r\n /// The SVG cy attribute define the y-axis coordinate of a center point.\r\n ///\r\n /// Three elements are using this attribute: <circle>, <ellipse>, and <radialGradient>\r\n static member inline cy (value: ICssUnit) = Interop.mkAttr \"cy\" value\r\n /// The SVG cy attribute define the y-axis coordinate of a center point.\r\n ///\r\n /// Three elements are using this attribute: <circle>, <ellipse>, and <radialGradient>\r\n static member inline cy (value: int) = Interop.mkAttr \"cy\" value\r\n\r\n /// Sets the inner Html content of the element.\r\n static member inline dangerouslySetInnerHTML (content: string) = Interop.mkAttr \"dangerouslySetInnerHTML\" (createObj [ \"__html\" ==> content ])\r\n\r\n /// This attribute indicates the time and/or date of the element.\r\n static member inline dateTime (value: string) = Interop.mkAttr \"datetime\" value\r\n\r\n /// Sets the DOM defaultChecked value when initially rendered.\r\n ///\r\n /// Typically only used with uncontrolled components.\r\n static member inline defaultChecked (value: bool) = Interop.mkAttr \"defaultChecked\" value\r\n\r\n /// Sets the DOM defaultValue value when initially rendered.\r\n ///\r\n /// Typically only used with uncontrolled components.\r\n static member inline defaultValue (value: bool) = Interop.mkAttr \"defaultValue\" value\r\n /// Sets the DOM defaultValue value when initially rendered.\r\n ///\r\n /// Typically only used with uncontrolled components.\r\n static member inline defaultValue (value: float) = Interop.mkAttr \"defaultValue\" value\r\n /// Sets the DOM defaultValue value when initially rendered.\r\n ///\r\n /// Typically only used with uncontrolled components.\r\n static member inline defaultValue (value: int) = Interop.mkAttr \"defaultValue\" value\r\n /// Sets the DOM defaultValue value when initially rendered.\r\n ///\r\n /// Typically only used with uncontrolled components.\r\n static member inline defaultValue (value: string) = Interop.mkAttr \"defaultValue\" value\r\n\r\n /// Indicates to a browser that the script is meant to be executed after the document\r\n /// has been parsed, but before firing DOMContentLoaded.\r\n ///\r\n /// Scripts with the defer attribute will prevent the DOMContentLoaded event from\r\n /// firing until the script has loaded and finished evaluating.\r\n ///\r\n /// This attribute must not be used if the src attribute is absent (i.e. for inline scripts),\r\n /// in this case it would have no effect.\r\n static member inline defer (value: bool) = Interop.mkAttr \"defer\" value\r\n\r\n /// Sets the directionality of the element.\r\n static member inline dirName (value: string) = Interop.mkAttr \"dirName\" value\r\n\r\n /// Indicates whether the user can interact with the element.\r\n static member inline disabled (value: bool) = Interop.mkAttr \"disabled\" value\r\n\r\n /// This attribute, if present, indicates that the author intends the hyperlink to be used for downloading a resource.\r\n static member inline download (value: bool) = Interop.mkAttr \"download\" value\r\n\r\n /// Indicates whether the the element can be dragged.\r\n static member inline draggable (value: bool) = Interop.mkAttr \"draggable\" value\r\n\r\n /// SVG attribute to indicate a shift along the y-axis on the position of an element or its content.\r\n static member inline dy (value: float) = Interop.mkAttr \"dy\" value\r\n /// SVG attribute to indicate a shift along the y-axis on the position of an element or its content.\r\n static member inline dy (value: int) = Interop.mkAttr \"dy\" value\r\n\r\n /// Defines the files that will be uploaded when using an input element of the file type.\r\n static member inline files (value: FileList) = Interop.mkAttr \"files\" value\r\n\r\n /// The fill attribute has two different meanings. For shapes and text it's a presentation\r\n /// attribute that defines the color (or any SVG paint servers like gradients or patterns)\r\n /// used to paint the element; for animation it defines the final state of the animation.\r\n ///\r\n /// As a presentation attribute, it can be applied to any element but it only has an effect\r\n /// on the following eleven elements: <altGlyph>, <circle>, <ellipse>, <path>, <polygon>,\r\n /// <polyline>, <rect>, <text>, <textPath>, <tref>, and <tspan>.\r\n ///\r\n /// For animation five elements are using this attribute: <animate>, <animateColor>,\r\n /// <animateMotion>, <animateTransform>, and <set>.\r\n static member inline fill (color: string) = Interop.mkAttr \"fill\" color\r\n\r\n /// SVG attribute to define the opacity of the paint server (color, gradient, pattern, etc) applied to a shape.\r\n static member inline fillOpacity (value: float) = Interop.mkAttr \"fillOpacity\" value\r\n /// SVG attribute to define the opacity of the paint server (color, gradient, pattern, etc) applied to a shape.\r\n static member inline fillOpacity (value: int) = Interop.mkAttr \"fillOpacity\" value\r\n\r\n /// SVG attribute to define the size of the font from baseline to baseline when multiple\r\n /// lines of text are set solid in a multiline layout environment.\r\n static member inline fontSize (value: float) = Interop.mkAttr \"fontSize\" value\r\n /// SVG attribute to define the size of the font from baseline to baseline when multiple\r\n /// lines of text are set solid in a multiline layout environment.\r\n static member inline fontSize (value: int) = Interop.mkAttr \"fontSize\" value\r\n\r\n /// A space-separated list of other elements’ ids, indicating that those elements contributed input\r\n /// values to (or otherwise affected) the calculation.\r\n static member inline for' (value: string) = Interop.mkAttr \"for\" value\r\n /// A space-separated list of other elements’ ids, indicating that those elements contributed input\r\n /// values to (or otherwise affected) the calculation.\r\n static member inline for' (ids: #seq<string>) = Interop.mkAttr \"for\" (ids |> String.concat \" \")\r\n\r\n /// The <form> element to associate the <meter> element with (its form owner). The value of this\r\n /// attribute must be the id of a <form> in the same document. If this attribute is not set, the\r\n /// <button> is associated with its ancestor <form> element, if any. This attribute is only used\r\n /// if the <meter> element is being used as a form-associated element, such as one displaying a\r\n /// range corresponding to an <input type=\"number\">.\r\n static member inline form (value: string) = Interop.mkAttr \"form\" value\r\n\r\n /// Prevents rendering of given element, while keeping child elements, e.g. script elements, active.\r\n static member inline hidden (value: bool) = Interop.mkAttr \"hidden\" value\r\n\r\n /// Specifies the height of elements listed here. For all other elements, use the CSS height property.\r\n ///\r\n /// <canvas>, <embed>, <iframe>, <img>, <input>, <object>, <video>\r\n static member inline height (value: int) = Interop.mkAttr \"height\" value\r\n\r\n /// The lower numeric bound of the high end of the measured range. This must be less than the\r\n /// maximum value (max attribute), and it also must be greater than the low value and minimum\r\n /// value (low attribute and min attribute, respectively), if any are specified. If unspecified,\r\n /// or if greater than the maximum value, the high value is equal to the maximum value.\r\n static member inline high (value: float) = Interop.mkAttr \"high\" value\r\n /// The lower numeric bound of the high end of the measured range. This must be less than the\r\n /// maximum value (max attribute), and it also must be greater than the low value and minimum\r\n /// value (low attribute and min attribute, respectively), if any are specified. If unspecified,\r\n /// or if greater than the maximum value, the high value is equal to the maximum value.\r\n static member inline high (value: int) = Interop.mkAttr \"high\" value\r\n\r\n /// The URL of a linked resource.\r\n static member inline href (value: string) = Interop.mkAttr \"href\" value\r\n\r\n /// Indicates the language of the linked resource. Allowed values are determined by BCP47.\r\n ///\r\n /// Use this attribute only if the href attribute is present.\r\n static member inline hrefLang (value: string) = Interop.mkAttr \"hreflang\" value\r\n\r\n static member inline htmlFor (value: string) = Interop.mkAttr \"htmlFor\" value\r\n\r\n /// Often used with CSS to style a specific element. The value of this attribute must be unique.\r\n static member inline id (value: int) = Interop.mkAttr \"id\" (string value)\r\n /// Often used with CSS to style a specific element. The value of this attribute must be unique.\r\n static member inline id (value: string) = Interop.mkAttr \"id\" value\r\n\r\n /// Alias for `dangerouslySetInnerHTML`, sets the inner Html content of the element.\r\n static member inline innerHtml (content: string) = Interop.mkAttr \"dangerouslySetInnerHTML\" (createObj [ \"__html\" ==> content ])\r\n\r\n /// Contains inline metadata that a user agent can use to verify that a fetched resource\r\n /// has been delivered free of unexpected manipulation.\r\n static member inline integrity (value: string) = Interop.mkAttr \"integrity\" value\r\n\r\n /// Sets the checked attribute for an element.\r\n static member inline isChecked (value: bool) = Interop.mkAttr \"checked\" value\r\n\r\n /// Sets the open attribute for an element.\r\n static member inline isOpen (value: bool) = Interop.mkAttr \"open\" value\r\n\r\n /// A special string attribute you need to include when creating arrays of elements.\r\n /// Keys help React identify which items have changed, are added, or are removed.\r\n /// Keys should be given to the elements inside an array to give the elements a stable identity.\r\n ///\r\n /// Keys only need to be unique among sibling elements in the same array. They don’t need to\r\n /// be unique across the whole application or even a single component.\r\n static member inline key (value: System.Guid) = Interop.mkAttr \"value\" (string value)\r\n /// A special string attribute you need to include when creating arrays of elements. Keys help\r\n /// React identify which items have changed, are added, or are removed. Keys should be given\r\n /// to the elements inside an array to give the elements a stable identity.\r\n ///\r\n /// Keys only need to be unique among sibling elements in the same array. They don’t need to\r\n /// be unique across the whole application or even a single component.\r\n static member inline key (value: int) = Interop.mkAttr \"key\" value\r\n /// A special string attribute you need to include when creating arrays of elements. Keys\r\n /// help React identify which\r\n /// items have changed, are added, or are removed. Keys should be given to the elements\r\n /// inside an array to give the elements a stable identity.\r\n ///\r\n /// Keys only need to be unique among sibling elements in the same array. They don’t need to\r\n /// be unique across the whole application or even a single component.\r\n static member inline key (value: string) = Interop.mkAttr \"key\" value\r\n\r\n /// Helps define the language of an element: the language that non-editable elements are\r\n /// written in, or the language that the editable elements should be written in by the user.\r\n static member inline lang (value: string) = Interop.mkAttr \"lang\" value\r\n\r\n /// If true, the browser will automatically seek back to the start upon reaching the end of the video.\r\n static member inline loop (value: bool) = Interop.mkAttr \"loop\" value\r\n\r\n /// The upper numeric bound of the low end of the measured range. This must be greater than\r\n /// the minimum value (min attribute), and it also must be less than the high value and\r\n /// maximum value (high attribute and max attribute, respectively), if any are specified.\r\n /// If unspecified, or if less than the minimum value, the low value is equal to the minimum value.\r\n static member inline low (value: float) = Interop.mkAttr \"low\" value\r\n /// The upper numeric bound of the low end of the measured range. This must be greater than\r\n /// the minimum value (min attribute), and it also must be less than the high value and\r\n /// maximum value (high attribute and max attribute, respectively), if any are specified.\r\n /// If unspecified, or if less than the minimum value, the low value is equal to the minimum value.\r\n static member inline low (value: int) = Interop.mkAttr \"low\" value\r\n\r\n /// Indicates the maximum value allowed.\r\n static member inline max (value: float) = Interop.mkAttr \"max\" value\r\n /// Indicates the maximum value allowed.\r\n static member inline max (value: int) = Interop.mkAttr \"max\" value\r\n\r\n /// Defines the maximum number of characters allowed in the element.\r\n static member inline maxLength (value: int) = Interop.mkAttr \"maxLength\" value\r\n\r\n /// This attribute specifies the media that the linked resource applies to.\r\n /// Its value must be a media type / media query. This attribute is mainly useful\r\n /// when linking to external stylesheets — it allows the user agent to pick the\r\n /// best adapted one for the device it runs on.\r\n ///\r\n /// In HTML 4, this can only be a simple white-space-separated list of media\r\n /// description literals, i.e., media types and groups, where defined and allowed\r\n /// as values for this attribute, such as print, screen, aural, braille. HTML5\r\n /// extended this to any kind of media queries, which are a superset of the allowed\r\n /// values of HTML 4.\r\n ///\r\n /// Browsers not supporting CSS3 Media Queries won't necessarily recognize the adequate\r\n /// link; do not forget to set fallback links, the restricted set of media queries\r\n /// defined in HTML 4.\r\n static member inline media (value: string) = Interop.mkAttr \"media\" value\r\n\r\n /// Indicates the minimum value allowed.\r\n static member inline min (value: float) = Interop.mkAttr \"min\" value\r\n /// Indicates the minimum value allowed.\r\n static member inline min (value: int) = Interop.mkAttr \"min\" value\r\n\r\n /// Defines the minimum number of characters allowed in the element.\r\n static member inline minLength (value: int) = Interop.mkAttr \"minlength\" value\r\n\r\n /// Defines which HTTP method to use when submitting the form. Can be GET (default) or POST.\r\n static member inline method (value: string) = Interop.mkAttr \"method\" value\r\n\r\n /// Indicates whether multiple values can be entered in an input of the type email or file.\r\n static member inline multiple (value: bool) = Interop.mkAttr \"multiple\" value\r\n\r\n /// Indicates whether the audio will be initially silenced on page load.\r\n static member inline muted (value: bool) = Interop.mkAttr \"muted\" value\r\n\r\n /// Name of the element.\r\n ///\r\n /// For example used by the server to identify the fields in form submits.\r\n static member inline name (value: string) = Interop.mkAttr \"name\" value\r\n\r\n /// This Boolean attribute is set to indicate that the script should not be executed in\r\n /// browsers that support ES2015 modules — in effect, this can be used to serve fallback\r\n /// scripts to older browsers that do not support modular JavaScript code.\r\n static member inline nomodule (value: bool) = Interop.mkAttr \"nomodule\" value\r\n\r\n /// A cryptographic nonce (number used once) to whitelist scripts in a script-src\r\n /// Content-Security-Policy. The server must generate a unique nonce value each time\r\n /// it transmits a policy. It is critical to provide a nonce that cannot be guessed\r\n /// as bypassing a resource's policy is otherwise trivial.\r\n static member inline nonce (value: string) = Interop.mkAttr \"nonce\" value\r\n\r\n /// SVG attribute to define where the gradient color will begin or end.\r\n static member inline offset (value: float) = Interop.mkAttr \"offset\" value\r\n /// SVG attribute to define where the gradient color will begin or end.\r\n static member inline offset (value: ICssUnit) = Interop.mkAttr \"offset\" value\r\n /// SVG attribute to define where the gradient color will begin or end.\r\n static member inline offset (value: int) = Interop.mkAttr \"offset\" value\r\n\r\n /// Fires when a media event is aborted.\r\n static member inline onAbort (handler: Event -> unit) = Interop.mkAttr \"onAbort\" handler\r\n\r\n /// Fires when animation ends.\r\n static member inline onAnimationEnd (handler: AnimationEvent -> unit) = Interop.mkAttr \"onAnimationEnd\" handler\r\n\r\n /// Fires when animation iterates.\r\n static member inline onAnimationIteration (handler: AnimationEvent -> unit) = Interop.mkAttr \"onAnimationIteration\" handler\r\n\r\n /// Fires when animation starts.\r\n static member inline onAnimationStart (handler: AnimationEvent -> unit) = Interop.mkAttr \"onAnimationStart\" handler\r\n\r\n /// Fires the moment that the element loses focus.\r\n static member inline onBlur (handler: FocusEvent -> unit) = Interop.mkAttr \"onBlur\" handler\r\n\r\n /// Fires when a file is ready to start playing (when it has buffered enough to begin).\r\n static member inline onCanPlay (handler: Event -> unit) = Interop.mkAttr \"onCanPlay\" handler\r\n\r\n /// Fires when a file can be played all the way to the end without pausing for buffering\r\n static member inline onCanPlayThrough (handler: Event -> unit) = Interop.mkAttr \"onCanPlayThrough\" handler\r\n\r\n /// Same as `onChange` that takes an event as input but instead let's you deal with the `checked` value changed from the `input` element\r\n /// directly when it is defined as a checkbox with `prop.inputType.checkbox`.\r\n static member inline onChange (handler: bool -> unit) = Interop.mkAttr \"onChange\" (fun (ev: Event) -> handler (!!ev.target?``checked``))\r\n /// Fires the moment when the value of the element is changed\r\n static member inline onChange (handler: Event -> unit) = Interop.mkAttr \"onChange\" handler\r\n /// Same as `onChange` that takes an event as input but instead lets you deal with the selected file directly from the `input` element when it is defined as a checkbox with `prop.type'.file`.\r\n static member inline onChange (handler: File -> unit) =\r\n let fileHandler (ev: Event) : unit =\r\n let files : FileList = ev?target?files\r\n if not (isNullOrUndefined files) && files.length > 0 then handler (files.item 0)\r\n Interop.mkAttr \"onChange\" fileHandler\r\n /// Same as `onChange` that takes an event as input but instead lets you deal with the selected files directly from the `input` element when it is defined as a checkbox with `prop.type'.file` and `prop.multiple true`.\r\n static member inline onChange (handler: File list -> unit) =\r\n let fileHandler (ev: Event) : unit =\r\n let fileList : FileList = ev?target?files\r\n if not (isNullOrUndefined fileList) then handler [ for i in 0 .. fileList.length - 1 -> fileList.item i ]\r\n Interop.mkAttr \"onChange\" fileHandler\r\n /// Same as `onChange` that takes an event as input but instead let's you deal with the text changed from the `input` element directly\r\n /// instead of extracting it from the event arguments.\r\n static member inline onChange (handler: string -> unit) = Interop.mkAttr \"onChange\" (fun (ev: Event) -> handler (!!ev.target?value))\r\n\r\n /// Same as `onChange` but let's you deal with the `checked` value that has changed from the `input` element directly instead of extracting it from the event arguments.\r\n static member inline onCheckedChange (handler: bool -> unit) = Interop.mkAttr \"onChange\" (fun (ev: Event) -> handler (!!ev.target?``checked``))\r\n\r\n /// Fires on a mouse click on the element.\r\n static member inline onClick (handler: MouseEvent -> unit) = Interop.mkAttr \"onClick\" handler\r\n\r\n /// Fires when composition ends.\r\n static member inline onCompositionEnd (handler: CompositionEvent -> unit) = Interop.mkAttr \"onCompositionEnd\" handler\r\n\r\n /// Fires when composition starts.\r\n static member inline onCompositionStart (handler: CompositionEvent -> unit) = Interop.mkAttr \"onCompositionStart\" handler\r\n\r\n /// Fires when composition changes.\r\n static member inline onCompositionUpdate (handler: CompositionEvent -> unit) = Interop.mkAttr \"onCompositionUpdate\" handler\r\n\r\n /// Fires when a context menu is triggered.\r\n static member inline onContextMenu (handler: MouseEvent -> unit) = Interop.mkAttr \"onContextMenu\" handler\r\n\r\n /// Fires when the user copies the content of an element.\r\n static member inline onCopy (handler: ClipboardEvent -> unit) = Interop.mkAttr \"onCopy\" handler\r\n\r\n /// Fires when the user cuts the content of an element.\r\n static member inline onCut (handler: ClipboardEvent -> unit) = Interop.mkAttr \"onCut\" handler\r\n\r\n /// Fires when a mouse is double clicked on the element.\r\n static member inline onDoubleClick (handler: MouseEvent -> unit) = Interop.mkAttr \"onDoubleClick\" handler\r\n\r\n /// Fires when an element is dragged.\r\n static member inline onDrag (handler: DragEvent -> unit) = Interop.mkAttr \"onDrag\" handler\r\n\r\n /// Fires when the a drag operation has ended.\r\n static member inline onDragEnd (handler: DragEvent -> unit) = Interop.mkAttr \"onDragEnd\" handler\r\n\r\n /// Fires when an element has been dragged to a valid drop target.\r\n static member inline onDragEnter (handler: DragEvent -> unit) = Interop.mkAttr \"onDragEnter\" handler\r\n\r\n static member inline onDragExit (handler: DragEvent -> unit) = Interop.mkAttr \"onDragExit\" handler\r\n\r\n /// Fires when an element leaves a valid drop target.\r\n static member inline onDragLeave (handler: DragEvent -> unit) = Interop.mkAttr \"onDragLeave\" handler\r\n\r\n /// Fires when an element is being dragged over a valid drop target.\r\n static member inline onDragOver (handler: DragEvent -> unit) = Interop.mkAttr \"onDragOver\" handler\r\n\r\n /// Fires when the a drag operation has begun.\r\n static member inline onDragStart (handler: DragEvent -> unit) = Interop.mkAttr \"onDragStart\" handler\r\n\r\n /// Fires when dragged element is being dropped.\r\n static member inline onDrop (handler: DragEvent -> unit) = Interop.mkAttr \"onDrop\" handler\r\n\r\n /// Fires when the length of the media changes.\r\n static member inline onDurationChange (handler: Event -> unit) = Interop.mkAttr \"onDurationChange\" handler\r\n\r\n /// Fires when something bad happens and the file is suddenly unavailable (like unexpectedly disconnects).\r\n static member inline onEmptied (handler: Event -> unit) = Interop.mkAttr \"onEmptied\" handler\r\n\r\n static member inline onEncrypted (handler: Event -> unit) = Interop.mkAttr \"onEncrypted\" handler\r\n\r\n /// Fires when the media has reach the end (a useful event for messages like \"thanks for listening\").\r\n static member inline onEnded (handler: Event -> unit) = Interop.mkAttr \"onEnded\" handler\r\n\r\n /// Fires when an error occurs.\r\n static member inline onError (handler: Event -> unit) = Interop.mkAttr \"onError\" handler\r\n\r\n /// Fires the moment when the element gets focus.\r\n static member inline onFocus (handler: FocusEvent -> unit) = Interop.mkAttr \"onFocus\" handler\r\n\r\n /// Fires when an element gets user input.\r\n static member inline onInput (handler: Event -> unit) = Interop.mkAttr \"onInput\" handler\r\n\r\n /// Fires when a user is pressing a key.\r\n static member inline onKeyDown (handler: KeyboardEvent -> unit) = Interop.mkAttr \"onKeyDown\" handler\r\n\r\n /// Fires when a user pressing a key.\r\n static member inline onKeyDown (key: IKeyboardKey, handler: KeyboardEvent -> unit) =\r\n Interop.mkAttr \"onKeyDown\" <| fun (ev: KeyboardEvent) ->\r\n let (pressedKey: string, ctrl: bool, shift: bool) = unbox key\r\n match ctrl, shift with\r\n | true, true when pressedKey.ToLower() = ev.key.ToLower() && ev.ctrlKey && ev.shiftKey -> handler ev\r\n | true, false when pressedKey.ToLower() = ev.key.ToLower() && ev.ctrlKey -> handler ev\r\n | false, true when pressedKey.ToLower() = ev.key.ToLower() && ev.shiftKey -> handler ev\r\n | false, false -> if pressedKey.ToLower() = ev.key.ToLower() then handler ev\r\n | _, _ -> ignore()\r\n\r\n /// Fires when a user presses a key.\r\n static member inline onKeyPress (handler: KeyboardEvent -> unit) = Interop.mkAttr \"onKeyPress\" handler\r\n\r\n /// Fires when a user presses a key.\r\n static member inline onKeyPress (key: IKeyboardKey, handler: KeyboardEvent -> unit) =\r\n Interop.mkAttr \"onKeyPress\" <| fun (ev: KeyboardEvent) ->\r\n let (pressedKey: string, ctrl: bool, shift: bool) = unbox key\r\n match ctrl, shift with\r\n | true, true when pressedKey.ToLower() = ev.key.ToLower() && ev.ctrlKey && ev.shiftKey -> handler ev\r\n | true, false when pressedKey.ToLower() = ev.key.ToLower() && ev.ctrlKey -> handler ev\r\n | false, true when pressedKey.ToLower() = ev.key.ToLower() && ev.shiftKey -> handler ev\r\n | false, false -> if pressedKey.ToLower() = ev.key.ToLower() then handler ev\r\n | _, _ -> ignore()\r\n\r\n /// Fires when a user releases a key.\r\n static member inline onKeyUp (handler: KeyboardEvent -> unit) = Interop.mkAttr \"onKeyUp\" handler\r\n\r\n /// Fires when a user releases a key.\r\n static member inline onKeyUp (key: IKeyboardKey, handler: KeyboardEvent -> unit) =\r\n Interop.mkAttr \"onKeyUp\" <| fun (ev: KeyboardEvent) ->\r\n let (pressedKey: string, ctrl: bool, shift: bool) = unbox key\r\n match ctrl, shift with\r\n | true, true when pressedKey.ToLower() = ev.key.ToLower() && ev.ctrlKey && ev.shiftKey -> handler ev\r\n | true, false when pressedKey.ToLower() = ev.key.ToLower() && ev.ctrlKey -> handler ev\r\n | false, true when pressedKey.ToLower() = ev.key.ToLower() && ev.shiftKey -> handler ev\r\n | false, false -> if pressedKey.ToLower() = ev.key.ToLower() then handler ev\r\n | _, _ -> ignore()\r\n\r\n /// Fires after the page is finished loading.\r\n static member inline onLoad (handler: Event -> unit) = Interop.mkAttr \"onLoad\" handler\r\n\r\n /// Fires when media data is loaded.\r\n static member inline onLoadedData (handler: Event -> unit) = Interop.mkAttr \"onLoadedData\" handler\r\n\r\n /// Fires when meta data (like dimensions and duration) are loaded.\r\n static member inline onLoadedMetadata (handler: Event -> unit) = Interop.mkAttr \"onLoadedMetadata\" handler\r\n\r\n /// Fires when the file begins to load before anything is actually loaded.\r\n static member inline onLoadStart (handler: Event -> unit) = Interop.mkAttr \"onLoadStart\" handler\r\n\r\n /// Fires when a mouse button is pressed down on an element.\r\n static member inline onMouseDown (handler: MouseEvent -> unit) = Interop.mkAttr \"onMouseDown\" handler\r\n\r\n /// Fires when a pointer enters an element.\r\n static member inline onMouseEnter (handler: MouseEvent -> unit) = Interop.mkAttr \"onMouseEnter\" handler\r\n\r\n /// Fires when a pointer leaves an element.\r\n static member inline onMouseLeave (handler: MouseEvent -> unit) = Interop.mkAttr \"onMouseLeave\" handler\r\n\r\n /// Fires when the mouse pointer is moving while it is over an element.\r\n static member inline onMouseMove (handler: MouseEvent -> unit) = Interop.mkAttr \"onMouseMove\" handler\r\n\r\n /// Fires when the mouse pointer moves out of an element.\r\n static member inline onMouseOut (handler: MouseEvent -> unit) = Interop.mkAttr \"onMouseOut\" handler\r\n\r\n /// Fires when the mouse pointer moves over an element.\r\n static member inline onMouseOver (handler: MouseEvent -> unit) = Interop.mkAttr \"onMouseOver\" handler\r\n\r\n /// Fires when the user pastes some content in an element.\r\n static member inline onPaste (handler: ClipboardEvent -> unit) = Interop.mkAttr \"onPaste\" handler\r\n\r\n /// Fires when the media is paused either by the user or programmatically.\r\n static member inline onPause (handler: Event -> unit) = Interop.mkAttr \"onPause\" handler\r\n\r\n /// Fires when the media is ready to start playing.\r\n static member inline onPlay (handler: Event -> unit) = Interop.mkAttr \"onPlay\" handler\r\n\r\n /// Fires when the media actually has started playing\r\n static member inline onPlaying (handler: Event -> unit) = Interop.mkAttr \"onPlaying\" handler\r\n\r\n /// Fires when the browser is in the process of getting the media data.\r\n static member inline onProgress (handler: Event -> unit) = Interop.mkAttr \"onProgress\" handler\r\n\r\n /// Fires when the playback rate changes (like when a user switches to a slow motion or fast forward mode).\r\n static member inline onRateChange (handler: Event -> unit) = Interop.mkAttr \"onRateChange\" handler\r\n\r\n /// Fires when the Reset button in a form is clicked.\r\n static member inline onReset (handler: Event -> unit) = Interop.mkAttr \"onReset\" handler\r\n\r\n /// Fires when an element's scrollbar is being scrolled.\r\n static member inline onScroll (handler: UIEvent -> unit) = Interop.mkAttr \"onScroll\" handler\r\n\r\n /// Fires when the seeking attribute is set to false indicating that seeking has ended.\r\n static member inline onSeeked (handler: Event -> unit) = Interop.mkAttr \"onSeeked\" handler\r\n\r\n /// Fires when the seeking attribute is set to true indicating that seeking is active.\r\n static member inline onSeeking (handler: Event -> unit) = Interop.mkAttr \"onSeeking\" handler\r\n\r\n /// Fires after some text has been selected in an element.\r\n static member inline onSelect (handler: Event -> unit) = Interop.mkAttr \"onSelect\" handler\r\n\r\n /// Fires when the browser is unable to fetch the media data for whatever reason.\r\n static member inline onStalled (handler: Event -> unit) = Interop.mkAttr \"onStalled\" handler\r\n\r\n /// Fires when fetching the media data is stopped before it is completely loaded for whatever reason.\r\n static member inline onSuspend (handler: Event -> unit) = Interop.mkAttr \"onSuspend\" handler\r\n\r\n /// Fires when a form is submitted.\r\n static member inline onSubmit (handler: Event -> unit) = Interop.mkAttr \"onSubmit\" handler\r\n\r\n /// Same as `onChange` but let's you deal with the text changed from the `input` element directly\r\n /// instead of extracting it from the event arguments.\r\n static member inline onTextChange (handler: string -> unit) = Interop.mkAttr \"onChange\" (fun (ev: Event) -> handler (!!ev.target?value))\r\n\r\n /// Fires when the playing position has changed (like when the user fast forwards to a different point in the media).\r\n static member inline onTimeUpdate (handler: Event -> unit) = Interop.mkAttr \"onTimeUpdate\" handler\r\n\r\n static member inline onTouchCancel (handler: TouchEvent -> unit) = Interop.mkAttr \"onTouchCancel\" handler\r\n\r\n static member inline onTouchEnd (handler: TouchEvent -> unit) = Interop.mkAttr \"onTouchEnd\" handler\r\n\r\n static member inline onTouchMove (handler: TouchEvent -> unit) = Interop.mkAttr \"onTouchMove\" handler\r\n\r\n static member inline onTouchStart (handler: TouchEvent -> unit) = Interop.mkAttr \"onTouchStart\" handler\r\n\r\n static member inline onTransitionEnd (handler: TransitionEvent -> unit) = Interop.mkAttr \"onTransitionEnd\" handler\r\n\r\n /// Fires when the volume is changed which (includes setting the volume to \"mute\").\r\n static member inline onVolumeChange (handler: Event -> unit) = Interop.mkAttr \"onVolumeChange\" handler\r\n\r\n /// Fires when the media has paused but is expected to resume (like when the media pauses to buffer more data).\r\n static member inline onWaiting (handler: Event -> unit) = Interop.mkAttr \"onWaiting\" handler\r\n\r\n /// Fires when the mouse wheel rolls up or down over an element.\r\n static member inline onWheel (handler: WheelEvent -> unit) = Interop.mkAttr \"onWheel\" handler\r\n\r\n /// This attribute indicates the optimal numeric value. It must be within the range (as defined by the min\r\n /// attribute and max attribute). When used with the low attribute and high attribute, it gives an indication\r\n /// where along the range is considered preferable. For example, if it is between the min attribute and the\r\n /// low attribute, then the lower range is considered preferred.\r\n static member inline optimum (value: float) = Interop.mkAttr \"optimum\" value\r\n /// This attribute indicates the optimal numeric value. It must be within the range (as defined by the min\r\n /// attribute and max attribute). When used with the low attribute and high attribute, it gives an indication\r\n /// where along the range is considered preferable. For example, if it is between the min attribute and the\r\n /// low attribute, then the lower range is considered preferred.\r\n static member inline optimum (value: int) = Interop.mkAttr \"optimum\" value\r\n\r\n /// Sets the input field allowed input.\r\n ///\r\n /// This attribute only applies when the value of the type attribute is text, search, tel, url or email.\r\n static member inline pattern (value: System.Text.RegularExpressions.Regex) = Interop.mkAttr \"pattern\" value\r\n\r\n /// Provides a hint to the user of what can be entered in the field.\r\n static member inline placeholder (value: string) = Interop.mkAttr \"placeholder\" value\r\n\r\n /// Indicating that the video is to be played \"inline\", that is within the element's playback area.\r\n ///\r\n /// Note that the absence of this attribute does not imply that the video will always be played in fullscreen.\r\n static member inline playsInline (value: bool) = Interop.mkAttr \"playsinline\" value\r\n\r\n /// Contains a space-separated list of URLs to which, when the hyperlink is followed,\r\n /// POST requests with the body PING will be sent by the browser (in the background).\r\n ///\r\n /// Typically used for tracking.\r\n static member inline ping (value: string) = Interop.mkAttr \"ping\" value\r\n /// Contains a space-separated list of URLs to which, when the hyperlink is followed,\r\n /// POST requests with the body PING will be sent by the browser (in the background).\r\n ///\r\n /// Typically used for tracking.\r\n static member inline ping (urls: #seq<string>) = Interop.mkAttr \"ping\" (urls |> String.concat \" \")\r\n\r\n /// SVG attribute to define a list of points.\r\n static member inline points (value: string) = Interop.mkAttr \"points\" value\r\n\r\n /// A URL for an image to be shown while the video is downloading. If this attribute isn't specified, nothing\r\n /// is displayed until the first frame is available, then the first frame is shown as the poster frame.\r\n static member inline poster (value: string) = Interop.mkAttr \"poster\" value\r\n\r\n /// SVG attribute to define the radius of a circle\r\n static member inline r (value: float) = Interop.mkAttr \"r\" value\r\n /// SVG attribute to define the radius of a circle\r\n static member inline r (value: ICssUnit) = Interop.mkAttr \"r\" value\r\n /// SVG attribute to define the radius of a circle\r\n static member inline r (value: int) = Interop.mkAttr \"r\" value\r\n\r\n /// Indicates whether the element can be edited.\r\n static member inline readOnly (value: bool) = Interop.mkAttr \"readOnly\" value\r\n\r\n /// Used to reference a DOM element or class component from within a parent component.\r\n static member inline ref (handler: Element -> unit) = Interop.mkAttr \"ref\" handler\r\n /// Used to reference a DOM element or class component from within a parent component.\r\n static member inline ref (ref: IRefValue<#HTMLElement option>) = Interop.mkAttr \"ref\" ref\r\n\r\n /// For anchors containing the href attribute, this attribute specifies the relationship\r\n /// of the target object to the link object. The value is a space-separated list of link\r\n /// types values. The values and their semantics will be registered by some authority that\r\n /// might have meaning to the document author. The default relationship, if no other is\r\n /// given, is void.\r\n ///\r\n /// Use this attribute only if the href attribute is present.\r\n static member inline rel (value: bool) = Interop.mkAttr \"rel\" value\r\n\r\n /// Indicates whether this element is required to fill out or not.\r\n static member inline required (value: bool) = Interop.mkAttr \"required\" value\r\n\r\n /// Sets the aria role\r\n ///\r\n /// https://www.w3.org/WAI/PF/aria-1.1/roles\r\n static member inline role ([<System.ParamArray>] roles: string []) = Interop.mkAttr \"role\" (String.concat \" \" roles)\r\n\r\n /// Defines the number of rows in a text area.\r\n static member inline rows (value: int) = Interop.mkAttr \"rows\" value\r\n\r\n /// Defines the number of rows a table cell should span over.\r\n static member inline rowSpan (value: int) = Interop.mkAttr \"rowSpan\" value\r\n\r\n /// The SVG rx attribute defines a radius on the x-axis.\r\n ///\r\n /// Two elements are using this attribute: <ellipse>, and <rect>\r\n static member inline rx (value: float) = Interop.mkAttr \"rx\" value\r\n /// The SVG rx attribute defines a radius on the x-axis.\r\n ///\r\n /// Two elements are using this attribute: <ellipse>, and <rect>\r\n static member inline rx (value: ICssUnit) = Interop.mkAttr \"rx\" value\r\n /// The SVG rx attribute defines a radius on the x-axis.\r\n ///\r\n /// Two elements are using this attribute: <ellipse>, and <rect>\r\n static member inline rx (value: int) = Interop.mkAttr \"rx\" value\r\n\r\n /// The SVG ry attribute defines a radius on the y-axis.\r\n ///\r\n /// Two elements are using this attribute: <ellipse>, and <rect>\r\n static member inline ry (value: float) = Interop.mkAttr \"ry\" value\r\n /// The SVG ry attribute defines a radius on the y-axis.\r\n ///\r\n /// Two elements are using this attribute: <ellipse>, and <rect>\r\n static member inline ry (value: ICssUnit) = Interop.mkAttr \"ry\" value\r\n /// The SVG ry attribute defines a radius on the y-axis.\r\n ///\r\n /// Two elements are using this attribute: <ellipse>, and <rect>\r\n static member inline ry (value: int) = Interop.mkAttr \"ry\" value\r\n\r\n /// Applies extra restrictions to the content in the frame.\r\n ///\r\n /// The value of the attribute can either be empty to apply all restrictions,\r\n /// or space-separated tokens to lift particular restrictions\r\n static member inline sandbox (values: #seq<string>) = Interop.mkAttr \"sandbox\" (values |> String.concat \" \")\r\n\r\n /// Defines a value which will be selected on page load.\r\n static member inline selected (value: bool) = Interop.mkAttr \"selected\" value\r\n\r\n /// Sets the beginning index of the selected text.\r\n ///\r\n /// When nothing is selected, this returns the position of the text input cursor (caret) inside of the <input> element.\r\n static member inline selectionStart (value: int) = Interop.mkAttr \"selectionStart\" value\r\n\r\n /// Sets the end index of the selected text.\r\n ///\r\n /// When there's no selection, this returns the offset of the character immediately following the current text input cursor position.\r\n static member inline selectionEnd (value: int) = Interop.mkAttr \"selectionStart\" value\r\n\r\n /// Sets the *visual* size of the control.\r\n ///\r\n /// The value is in pixels unless the value of type is text or password, in which case, it is the number of characters.\r\n ///\r\n /// This attribute only applies when type is set to text, search, tel, url, email, or password.\r\n static member inline size (value: int) = Interop.mkAttr \"size\" value\r\n\r\n /// Defines the sizes of the icons for visual media contained in the resource.\r\n /// It must be present only if the rel contains a value of icon or a non-standard\r\n /// type such as Apple's apple-touch-icon.\r\n ///\r\n /// It may have the following values:\r\n ///\r\n /// `any`, meaning that the icon can be scaled to any size as it is in a vector\r\n /// format, like image/svg+xml.\r\n ///\r\n /// A white-space separated list of sizes, each in the format `<width in pixels>x<height in pixels>`\r\n /// or `<width in pixels>X<height in pixels>`. Each of these sizes must be contained in the resource.\r\n static member inline sizes (value: string) = Interop.mkAttr \"sizes\" value\r\n\r\n /// Defines whether the element may be checked for spelling errors.\r\n static member inline spellcheck (value: bool) = Interop.mkAttr \"spellcheck\" value\r\n\r\n /// This attribute contains a positive integer indicating the number of consecutive\r\n /// columns the <col> element spans. If not present, its default value is 1.\r\n static member inline spam (value: int) = Interop.mkAttr \"span\" value\r\n\r\n /// The URL of the embeddable content.\r\n static member inline src (value: string) = Interop.mkAttr \"src\" value\r\n\r\n /// Language of the track text data. It must be a valid BCP 47 language tag.\r\n ///\r\n /// If the kind attribute is set to subtitles, then srclang must be defined.\r\n static member inline srcLang (value: string) = Interop.mkAttr \"srclang\" value\r\n\r\n /// One or more responsive image candidates.\r\n static member inline srcset (value: string) = Interop.mkAttr \"srcset\" value\r\n\r\n /// Defines the first number if other than 1.\r\n static member inline start (value: string) = Interop.mkAttr \"start\" value\r\n\r\n /// Indicates the stepping interval.\r\n static member inline step (value: float) = Interop.mkAttr \"step\" value\r\n /// Indicates the stepping interval.\r\n static member inline step (value: int) = Interop.mkAttr \"step\" value\r\n\r\n /// SVG attribute to indicate what color to use at a gradient stop.\r\n static member inline stopColor (value: string) = Interop.mkAttr \"stopColor\" value\r\n\r\n /// SVG attribute to define the opacity of a given color gradient stop.\r\n static member inline stopOpacity (value: float) = Interop.mkAttr \"stopOpacity\" value\r\n /// SVG attribute to define the opacity of a given color gradient stop.\r\n static member inline stopOpacity (value: int) = Interop.mkAttr \"stopOpacity\" value\r\n\r\n /// SVG attribute to define the color (or any SVG paint servers like gradients or patterns) used to paint the outline of the shape.\r\n static member inline stroke (color: string) = Interop.mkAttr \"stroke\" color\r\n\r\n /// SVG attribute to define the width of the stroke to be applied to the shape.\r\n static member inline strokeWidth (value: float) = Interop.mkAttr \"strokeWidth\" value\r\n /// SVG attribute to define the width of the stroke to be applied to the shape.\r\n static member inline strokeWidth (value: ICssUnit) = Interop.mkAttr \"strokeWidth\" value\r\n /// SVG attribute to define the width of the stroke to be applied to the shape.\r\n static member inline strokeWidth (value: int) = Interop.mkAttr \"strokeWidth\" value\r\n\r\n static member inline style (properties: #IStyleAttribute list) = Interop.mkAttr \"style\" (createObj !!properties)\r\n static member style (properties: (bool * IStyleAttribute list) list) =\r\n properties\r\n |> List.filter fst\r\n |> List.collect snd\r\n |> unbox\r\n |> createObj\r\n |> Interop.mkAttr \"style\"\r\n\r\n /// The `tabindex` global attribute indicates that its element can be focused,\r\n /// and where it participates in sequential keyboard navigation (usually with the Tab key, hence the name).\r\n static member inline tabIndex (index: int) = Interop.mkAttr \"tabindex\" index\r\n\r\n /// Controls browser behavior when opening a link.\r\n static member inline target (frameName: string) = Interop.mkAttr \"target\" frameName\r\n\r\n /// Defines the text content of the element. Alias for `children [ Html.text value ]`\r\n static member inline text (value: float) = Interop.mkAttr \"children\" value\r\n /// Defines the text content of the element. Alias for `children [ Html.text value ]`\r\n static member inline text (value: int) = Interop.mkAttr \"children\" value\r\n /// Defines the text content of the element. Alias for `children [ Html.text value ]`\r\n static member inline text (value: string) = Interop.mkAttr \"children\" value\r\n\r\n /// The title global attribute contains text representing advisory information related to the element it belongs to.\r\n static member inline title (value: string) = Interop.mkAttr \"title\" value\r\n\r\n /// Sets the `type` attribute for the element.\r\n static member inline type' (value: string) = Interop.mkAttr \"type\" value\r\n\r\n /// A hash-name reference to a <map> element; that is a '#' followed by the value of a name of a map element.\r\n static member inline usemap (value: string) = Interop.mkAttr \"usemap\" value\r\n\r\n /// Sets the value of a React controlled component.\r\n static member inline value (value: bool) = Interop.mkAttr \"value\" value\r\n /// Sets the value of a React controlled component.\r\n static member inline value (value: float) = Interop.mkAttr \"value\" value\r\n /// Sets the value of a React controlled component.\r\n static member inline value (value: System.Guid) = Interop.mkAttr \"value\" (string value)\r\n /// Sets the value of a React controlled component.\r\n static member inline value (value: int) = Interop.mkAttr \"value\" value\r\n /// Sets the value of a React controlled component.\r\n static member inline value (value: string) = Interop.mkAttr \"value\" value\r\n\r\n /// The value of the element, interpreted as a date, or null if conversion is not possible.\r\n static member inline valueAsDate (value: System.DateTime) = Interop.mkAttr \"valueAsDate\" value\r\n /// The value of the element, interpreted as a date, or null if conversion is not possible.\r\n static member inline valueAsDate (value: System.DateTime option) = Interop.mkAttr \"valueAsDate\" value\r\n\r\n /// The value of the element, interpreted as a time value, number, or NaN if conversion is impossible.\r\n static member inline valueAsNumber (value: float) = Interop.mkAttr \"valueAsNumber\" value\r\n /// The value of the element, interpreted as a time value, number, or NaN if conversion is impossible.\r\n static member inline valueAsNumber (value: float option) = Interop.mkAttr \"valueAsNumber\" value\r\n /// The value of the element, interpreted as a time value, number, or NaN if conversion is impossible.\r\n static member inline valueAsNumber (value: int) = Interop.mkAttr \"valueAsNumber\" value\r\n /// The value of the element, interpreted as a time value, number, or NaN if conversion is impossible.\r\n static member inline valueAsNumber (value: int option) = Interop.mkAttr \"valueAsNumber\" value\r\n\r\n /// `prop.ref` callback that sets the value of an input after DOM element is created.\r\n /// Can be used instead of `prop.defaultValue` and `prop.value` props to override input value.\r\n static member inline valueOrDefault (value: bool) =\r\n prop.ref (fun e -> if e |> isNull |> not && !!e?value <> !!value then e?value <- !!value)\r\n /// `prop.ref` callback that sets the value of an input after DOM element is created.\r\n /// Can be used instead of `prop.defaultValue` and `prop.value` props to override input value.\r\n static member inline valueOrDefault (value: float) =\r\n prop.ref (fun e -> if e |> isNull |> not && !!e?value <> !!value then e?value <- !!value)\r\n /// `prop.ref` callback that sets the value of an input after DOM element is created.\r\n /// Can be used instead of `prop.defaultValue` and `prop.value` props to override input value.\r\n static member inline valueOrDefault (value: System.Guid) =\r\n prop.ref (fun e -> if e |> isNull |> not && !!e?value <> !!value then e?value <- !!value)\r\n /// `prop.ref` callback that sets the value of an input after DOM element is created.\r\n /// Can be used instead of `prop.defaultValue` and `prop.value` props to override input value.\r\n static member inline valueOrDefault (value: int) =\r\n prop.ref (fun e -> if e |> isNull |> not && !!e?value <> !!value then e?value <- !!value)\r\n /// `prop.ref` callback that sets the value of an input after DOM element is created.\r\n /// Can be used instead of `prop.defaultValue` and `prop.value` props to override input box value.\r\n static member inline valueOrDefault (value: string) =\r\n prop.ref (fun e -> if e |> isNull |> not && !!e?value <> !!value then e?value <- !!value)\r\n\r\n /// Set visible area of the SVG image.\r\n static member inline viewPort (x: int, y: int, height: int, width: int) =\r\n Interop.mkAttr \"viewport\"\r\n ((unbox<string> x) + \" \" +\r\n (unbox<string> y) + \" \" +\r\n (unbox<string> height) + \" \" +\r\n (unbox<string> width))\r\n\r\n /// Specifies the width of elements listed here. For all other elements, use the CSS height property.\r\n ///\r\n /// <canvas>, <embed>, <iframe>, <img>, <input>, <object>, <video>\r\n static member inline width (value: int) = Interop.mkAttr \"width\" value\r\n\r\n /// SVG attribute to define a x-axis coordinate in the user coordinate system.\r\n static member inline x (value: float) = Interop.mkAttr \"x\" value\r\n /// SVG attribute to define a x-axis coordinate in the user coordinate system.\r\n static member inline x (value: ICssUnit) = Interop.mkAttr \"x\" value\r\n /// SVG attribute to define a x-axis coordinate in the user coordinate system.\r\n static member inline x (value: int) = Interop.mkAttr \"x\" value\r\n\r\n /// The x1 attribute is used to specify the first x-coordinate for drawing an SVG element that\r\n /// requires more than one coordinate. Elements that only need one coordinate use the x attribute instead.\r\n ///\r\n /// Two elements are using this attribute: <line>, and <linearGradient>\r\n static member inline x1 (value: float) = Interop.mkAttr \"x1\" value\r\n /// The x1 attribute is used to specify the first x-coordinate for drawing an SVG element that\r\n /// requires more than one coordinate. Elements that only need one coordinate use the x attribute instead.\r\n ///\r\n /// Two elements are using this attribute: <line>, and <linearGradient>\r\n static member inline x1 (value: ICssUnit) = Interop.mkAttr \"x1\" value\r\n /// The x1 attribute is used to specify the first x-coordinate for drawing an SVG element that\r\n /// requires more than one coordinate. Elements that only need one coordinate use the x attribute instead.\r\n ///\r\n /// Two elements are using this attribute: <line>, and <linearGradient>\r\n static member inline x1 (value: int) = Interop.mkAttr \"x1\" value\r\n\r\n /// The x2 attribute is used to specify the second x-coordinate for drawing an SVG element that requires\r\n /// more than one coordinate. Elements that only need one coordinate use the x attribute instead.\r\n ///\r\n /// Two elements are using this attribute: <line>, and <linearGradient>\r\n static member inline x2 (value: float) = Interop.mkAttr \"x2\" value\r\n /// The x2 attribute is used to specify the second x-coordinate for drawing an SVG element that requires\r\n /// more than one coordinate. Elements that only need one coordinate use the x attribute instead.\r\n ///\r\n /// Two elements are using this attribute: <line>, and <linearGradient>\r\n static member inline x2 (value: ICssUnit) = Interop.mkAttr \"x2\" value\r\n /// The x2 attribute is used to specify the second x-coordinate for drawing an SVG element that requires\r\n /// more than one coordinate. Elements that only need one coordinate use the x attribute instead.\r\n ///\r\n /// Two elements are using this attribute: <line>, and <linearGradient>\r\n static member inline x2 (value: int) = Interop.mkAttr \"x2\" value\r\n\r\n /// Specifies the XML Namespace of the document.\r\n ///\r\n /// Default value is \"http://www.w3.org/1999/xhtml\".\r\n ///\r\n /// This is required in documents parsed with XML parsers, and optional in text/html documents.\r\n static member inline xmlns (value: string) = Interop.mkAttr \"xmlns\" value\r\n\r\n /// SVG attribute to define a y-axis coordinate in the user coordinate system.\r\n static member inline y (value: float) = Interop.mkAttr \"y\" value\r\n /// SVG attribute to define a y-axis coordinate in the user coordinate system.\r\n static member inline y (value: ICssUnit) = Interop.mkAttr \"y\" value\r\n /// SVG attribute to define a y-axis coordinate in the user coordinate system.\r\n static member inline y (value: int) = Interop.mkAttr \"y\" value\r\n\r\n /// The y1 attribute is used to specify the first y-coordinate for drawing an SVG element that requires\r\n /// more than one coordinate. Elements that only need one coordinate use the y attribute instead.\r\n ///\r\n /// Two elements are using this attribute: <line>, and <linearGradient>\r\n static member inline y1 (value: float) = Interop.mkAttr \"y1\" value\r\n /// The y1 attribute is used to specify the first y-coordinate for drawing an SVG element that requires\r\n /// more than one coordinate. Elements that only need one coordinate use the y attribute instead.\r\n ///\r\n /// Two elements are using this attribute: <line>, and <linearGradient>\r\n static member inline y1 (value: ICssUnit) = Interop.mkAttr \"y1\" value\r\n /// The y1 attribute is used to specify the first y-coordinate for drawing an SVG element that requires\r\n /// more than one coordinate. Elements that only need one coordinate use the y attribute instead.\r\n ///\r\n /// Two elements are using this attribute: <line>, and <linearGradient>\r\n static member inline y1 (value: int) = Interop.mkAttr \"y1\" value\r\n\r\n /// The y2 attribute is used to specify the second y-coordinate for drawing an SVG element that requires\r\n /// more than one coordinate. Elements that only need one coordinate use the y attribute instead.\r\n ///\r\n /// Two elements are using this attribute: <line>, and <linearGradient>\r\n static member inline y2 (value: float) = Interop.mkAttr \"y2\" value\r\n /// The y2 attribute is used to specify the second y-coordinate for drawing an SVG element that requires\r\n /// more than one coordinate. Elements that only need one coordinate use the y attribute instead.\r\n ///\r\n /// Two elements are using this attribute: <line>, and <linearGradient>\r\n static member inline y2 (value: ICssUnit) = Interop.mkAttr \"y2\" value\r\n /// The y2 attribute is used to specify the second y-coordinate for drawing an SVG element that requires\r\n /// more than one coordinate. Elements that only need one coordinate use the y attribute instead.\r\n ///\r\n /// Two elements are using this attribute: <line>, and <linearGradient>\r\n static member inline y2 (value: int) = Interop.mkAttr \"y2\" value\r\n\r\nmodule prop =\r\n /// Indicates whether user input completion suggestions are provided.\r\n ///\r\n /// https://www.w3.org/WAI/PF/aria-1.1/states_and_properties#aria-autocomplete\r\n [<Erase>]\r\n type ariaAutocomplete =\r\n /// A list of choices appears and the currently selected suggestion also\r\n /// appears inline.\r\n static member inline both = Interop.mkAttr \"aria-autocomplete\" \"both\"\r\n /// The system provides text after the caret as a suggestion for how to\r\n /// complete the field.\r\n static member inline inlinedAfterCaret = Interop.mkAttr \"aria-autocomplete\" \"inline\"\r\n /// A list of choices appears from which the user can choose.\r\n static member inline list = Interop.mkAttr \"aria-autocomplete\" \"list\"\r\n /// No input completion suggestions are provided.\r\n static member inline none = Interop.mkAttr \"aria-autocomplete\" \"none\"\r\n\r\n /// Indicates the current \"checked\" state of checkboxes, radio buttons, and\r\n /// other widgets. See related `aria-pressed` and `aria-selected`.\r\n ///\r\n /// https://www.w3.org/WAI/PF/aria-1.1/states_and_properties#aria-checked\r\n [<Erase>]\r\n type ariaChecked =\r\n /// Indicates a mixed mode value for a tri-state checkbox or\r\n /// `menuitemcheckbox`.\r\n static member inline mixed = Interop.mkAttr \"aria-checked\" \"mixed\"\r\n\r\n /// Indicates what functions can be performed when the dragged object is\r\n /// released on the drop target. This allows assistive technologies to\r\n /// convey the possible drag options available to users, including whether a\r\n /// pop-up menu of choices is provided by the application. Typically, drop\r\n /// effect functions can only be provided once an object has been grabbed\r\n /// for a drag operation as the drop effect functions available are\r\n /// dependent on the object being dragged.\r\n ///\r\n /// https://www.w3.org/WAI/PF/aria-1.1/states_and_properties#aria-dropeffect\r\n [<Erase>]\r\n type ariaDropEffect =\r\n /// A duplicate of the source object will be dropped into the target.\r\n static member inline copy = Interop.mkAttr \"aria-dropeffect\" \"copy\"\r\n /// A function supported by the drop target is executed, using the drag\r\n /// source as an input.\r\n static member inline execute = Interop.mkAttr \"aria-dropeffect\" \"execute\"\r\n /// A reference or shortcut to the dragged object will be created in the\r\n /// target object.\r\n static member inline link = Interop.mkAttr \"aria-dropeffect\" \"link\"\r\n /// The source object will be removed from its current location and\r\n /// dropped into the target.\r\n static member inline move = Interop.mkAttr \"aria-dropeffect\" \"move\"\r\n /// No operation can be performed; effectively cancels the drag\r\n /// operation if an attempt is made to drop on this object. Ignored if\r\n /// combined with any other token value. e.g. 'none copy' is equivalent\r\n /// to a 'copy' value.\r\n static member inline none = Interop.mkAttr \"aria-dropeffect\" \"none\"\r\n /// There is a popup menu or dialog that allows the user to choose one\r\n /// of the drag operations (copy, move, link, execute) and any other\r\n /// drag functionality, such as cancel.\r\n static member inline popup = Interop.mkAttr \"aria-dropeffect\" \"popup\"\r\n\r\n /// Indicates the entered value does not conform to the format expected by\r\n /// the application.\r\n ///\r\n /// https://www.w3.org/WAI/PF/aria-1.1/states_and_properties#aria-invalid\r\n [<Erase>]\r\n type ariaInvalid =\r\n /// A grammatical error was detected.\r\n static member inline grammar = Interop.mkAttr \"aria-invalid\" \"grammar\"\r\n /// A spelling error was detected.\r\n static member inline spelling = Interop.mkAttr \"aria-invalid\" \"spelling\"\r\n\r\n /// Indicates that an element will be updated, and describes the types of\r\n /// updates the user agents, assistive technologies, and user can expect\r\n /// from the live region.\r\n ///\r\n /// https://www.w3.org/WAI/PF/aria-1.1/states_and_properties#aria-live\r\n [<Erase>]\r\n type ariaLive =\r\n /// Indicates that updates to the region have the highest priority and\r\n /// should be presented the user immediately.\r\n static member inline assertive = Interop.mkAttr \"aria-live\" \"assertive\"\r\n /// Indicates that updates to the region should not be presented to the\r\n /// user unless the used is currently focused on that region.\r\n static member inline off = Interop.mkAttr \"aria-live\" \"off\"\r\n /// Indicates that updates to the region should be presented at the next\r\n /// graceful opportunity, such as at the end of speaking the current\r\n /// sentence or when the user pauses typing.\r\n static member inline polite = Interop.mkAttr \"aria-live\" \"polite\"\r\n\r\n /// Indicates whether the element and orientation is horizontal or vertical.\r\n ///\r\n /// https://www.w3.org/WAI/PF/aria-1.1/states_and_properties#aria-orientation\r\n [<Erase>]\r\n type ariaOrientation =\r\n /// The element is oriented horizontally.\r\n static member inline horizontal = Interop.mkAttr \"aria-orientation\" \"horizontal\"\r\n /// The element is oriented vertically.\r\n static member inline vertical = Interop.mkAttr \"aria-orientation\" \"vertical\"\r\n\r\n /// Indicates the current \"pressed\" state of toggle buttons. See related\r\n /// `aria-checked` and `aria-selected`.\r\n ///\r\n /// https://www.w3.org/WAI/PF/aria-1.1/states_and_properties#aria-pressed\r\n [<Erase>]\r\n type ariaPressed =\r\n /// Indicates a mixed mode value for a tri-state toggle button.\r\n static member inline mixed = Interop.mkAttr \"aria-pressed\" \"mixed\"\r\n\r\n /// Indicates what user agent change notifications (additions, removals,\r\n /// etc.) assistive technologies will receive within a live region. See\r\n /// related `aria-atomic`.\r\n ///\r\n /// https://www.w3.org/WAI/PF/aria-1.1/states_and_properties#aria-relevant\r\n [<Erase>]\r\n type ariaRelevant =\r\n /// Element nodes are added to the DOM within the live region.\r\n static member inline additions = Interop.mkAttr \"aria-relevant\" \"additions\"\r\n /// Equivalent to the combination of all values, \"additions removals\r\n /// text\".\r\n static member inline all = Interop.mkAttr \"aria-relevant\" \"all\"\r\n /// Text or element nodes within the live region are removed from the\r\n /// DOM.\r\n static member inline removals = Interop.mkAttr \"aria-relevant\" \"removals\"\r\n /// Text is added to any DOM descendant nodes of the live region.\r\n static member inline text = Interop.mkAttr \"aria-relevant\" \"text\"\r\n\r\n /// Indicates if items in a table or grid are sorted in ascending or\r\n /// descending order.\r\n ///\r\n /// https://www.w3.org/WAI/PF/aria-1.1/states_and_properties#aria-sort\r\n [<Erase>]\r\n type ariaSort =\r\n /// Items are sorted in ascending order by this column.\r\n static member inline ascending = Interop.mkAttr \"aria-sort\" \"ascending\"\r\n /// Items are sorted in descending order by this column.\r\n static member inline descending = Interop.mkAttr \"aria-sort\" \"descending\"\r\n /// There is no defined sort applied to the column.\r\n static member inline none = Interop.mkAttr \"aria-sort\" \"none\"\r\n /// A sort algorithm other than ascending or descending has been\r\n /// applied.\r\n static member inline other = Interop.mkAttr \"aria-sort\" \"other\"\r\n\r\n /// This attribute is only used when rel=\"preload\" or rel=\"prefetch\" has been set on the <link> element.\r\n /// It specifies the type of content being loaded by the <link>, which is necessary for request matching,\r\n /// application of correct content security policy, and setting of correct Accept request header.\r\n /// Furthermore, rel=\"preload\" uses this as a signal for request prioritization.\r\n [<Erase>]\r\n type as' =\r\n /// Applies to <audio> elements.\r\n static member inline audio = Interop.mkAttr \"as\" \"audio\"\r\n /// Applies to <iframe> and <frame> elements.\r\n static member inline document = Interop.mkAttr \"as\" \"document\"\r\n /// Applies to <embed> elements.\r\n static member inline embed = Interop.mkAttr \"as\" \"embed\"\r\n /// Applies to fetch and XHR.\r\n ///\r\n /// This value also requires <link> to contain the crossorigin attribute.\r\n static member inline fetch = Interop.mkAttr \"as\" \"fetch\"\r\n /// Applies to CSS @font-face.\r\n static member inline font = Interop.mkAttr \"as\" \"font\"\r\n /// Applies to <img> and <picture> elements with srcset or imageset attributes,\r\n /// SVG <image> elements, and CSS *-image rules.\r\n static member inline image = Interop.mkAttr \"as\" \"image\"\r\n /// Applies to <object> elements.\r\n static member inline object = Interop.mkAttr \"as\" \"object\"\r\n /// Applies to <script> elements, Worker importScripts.\r\n static member inline script = Interop.mkAttr \"as\" \"script\"\r\n /// Applies to <link rel=stylesheet> elements, and CSS @import.\r\n static member inline style = Interop.mkAttr \"as\" \"style\"\r\n /// Applies to <track> elements.\r\n static member inline track = Interop.mkAttr \"as\" \"track\"\r\n /// Applies to <video> elements.\r\n static member inline video = Interop.mkAttr \"as\" \"video\"\r\n /// Applies to Worker and SharedWorker.\r\n static member inline worker = Interop.mkAttr \"as\" \"worker\"\r\n\r\n [<Erase>]\r\n type autoCapitalize =\r\n /// All letters should default to uppercase\r\n static member inline characters = Interop.mkAttr \"autoCapitalize\" \"characters\"\r\n /// No autocapitalization is applied (all letters default to lowercase)\r\n static member inline off = Interop.mkAttr \"autoCapitalize\" \"off\"\r\n /// The first letter of each sentence defaults to a capital letter; all other letters default to lowercase\r\n static member inline on' = Interop.mkAttr \"autoCapitalize\" \"on\"\r\n /// The first letter of each word defaults to a capital letter; all other letters default to lowercase\r\n static member inline words = Interop.mkAttr \"autoCapitalize\" \"words\"\r\n\r\n /// A set of values specifying the coordinates of the hot-spot region.\r\n ///\r\n /// The number and meaning of the values depend upon the value specified for the shape attribute\r\n [<Erase>]\r\n type coords =\r\n static member inline rect (left: int, top: int, right: int, bottom: int) =\r\n Interop.mkAttr \"coords\"\r\n ((unbox<string> left) + \",\" +\r\n (unbox<string> top) + \",\" +\r\n (unbox<string> right) + \",\" +\r\n (unbox<string> bottom))\r\n static member inline circle (x: int, y: int, r: int) =\r\n Interop.mkAttr \"coords\"\r\n ((unbox<string> x) + \",\" +\r\n (unbox<string> y) + \",\" +\r\n (unbox<string> r))\r\n static member inline poly (x1: int, y1: int, x2: int, y2: int, x3: int, y3: int) =\r\n Interop.mkAttr \"coords\"\r\n ((unbox<string> x1) + \",\" +\r\n (unbox<string> y1) + \",\" +\r\n (unbox<string> x2) + \",\" +\r\n (unbox<string> y2) + \",\" +\r\n (unbox<string> x3) + \",\" +\r\n (unbox<string> y3))\r\n\r\n /// Indicates whether CORS must be used when fetching the resource.\r\n [<Erase>]\r\n type crossOrigin =\r\n /// A cross-origin request (i.e. with an Origin HTTP header) is performed, but no credential\r\n /// is sent (i.e. no cookie, X.509 certificate, or HTTP Basic authentication). If the server\r\n /// does not give credentials to the origin site (by not setting the Access-Control-Allow-Origin\r\n /// HTTP header) the resource will be tainted and its usage restricted.\r\n static member inline anonymous = Interop.mkAttr \"crossorigin\" \"anonymous\"\r\n /// A cross-origin request (i.e. with an Origin HTTP header) is performed along with a credential\r\n /// sent (i.e. a cookie, certificate, and/or HTTP Basic authentication is performed). If the server\r\n /// does not give credentials to the origin site (through Access-Control-Allow-Credentials HTTP\r\n /// header), the resource will be tainted and its usage restricted.\r\n static member inline useCredentials = Interop.mkAttr \"crossorigin\" \"use-credentials\"\r\n\r\n /// Indicates the directionality of the element's text.\r\n [<Erase>]\r\n type dir =\r\n /// Lets the user agent decide.\r\n static member inline auto = Interop.mkAttr \"dir\" \"auto\"\r\n /// Left to right - for languages that are written from left to right.\r\n static member inline ltr = Interop.mkAttr \"dir\" \"ltr\"\r\n /// Right to left - for languages that are written from right to left.\r\n static member inline rtl = Interop.mkAttr \"dir\" \"rtl\"\r\n\r\n /// The `dominantBaseline` attribute specifies the dominant baseline, which is the baseline used to align the box’s text\r\n /// and inline-level contents. It also indicates the default alignment baseline of any boxes participating in baseline\r\n /// alignment in the box’s alignment context. It is used to determine or re-determine a scaled-baseline-table. A\r\n /// scaled-baseline-table is a compound value with three components: a baseline-identifier for the dominant-baseline, a\r\n /// baseline-table and a baseline-table font-size. Some values of the property re-determine all three values; other only\r\n /// re-establish the baseline-table font-size. When the initial value, auto, would give an undesired result, this property\r\n /// can be used to explicitly set the desired scaled-baseline-table.\r\n /// If there is no baseline table in the nominal font or if the baseline table lacks an entry for the desired baseline,\r\n /// then the browser may use heuristics to determine the position of the desired baseline.\r\n [<Erase>]\r\n type dominantBaseline =\r\n /// The baseline-identifier for the dominant-baseline is set to be alphabetic, the derived baseline-table is constructed\r\n /// using the alphabetic baseline-table in the font, and the baseline-table font-size is changed to the value of the\r\n /// font-size attribute on this element.\r\n static member inline alphabetic = Interop.mkAttr \"dominantBaseline\" \"alphabetic\"\r\n /// If this property occurs on a <text> element, then the computed value depends on the value of the writing-mode attribute.\r\n ///\r\n /// If the writing-mode is horizontal, then the value of the dominant-baseline component is alphabetic, else if the writing-mode\r\n /// is vertical, then the value of the dominant-baseline component is central.\r\n ///\r\n /// If this property occurs on a <tspan>, <tref>,\r\n /// <altGlyph> or <textPath> element, then the dominant-baseline and the baseline-table components remain the same as those of\r\n /// the parent text content element.\r\n ///\r\n /// If the computed baseline-shift value actually shifts the baseline, then the baseline-table\r\n /// font-size component is set to the value of the font-size attribute on the element on which the dominant-baseline attribute\r\n /// occurs, otherwise the baseline-table font-size remains the same as that of the element.\r\n ///\r\n /// If there is no parent text content\r\n /// element, the scaled-baseline-table value is constructed as above for <text> elements.\r\n static member inline auto = Interop.mkAttr \"dominantBaseline\" \"auto\"\r\n /// The baseline-identifier for the dominant-baseline is set to be central. The derived baseline-table is constructed from the\r\n /// defined baselines in a baseline-table in the font. That font baseline-table is chosen using the following priority order of\r\n /// baseline-table names: ideographic, alphabetic, hanging, mathematical. The baseline-table font-size is changed to the value\r\n /// of the font-size attribute on this element.\r\n static member inline central = Interop.mkAttr \"dominantBaseline\" \"central\"\r\n /// The baseline-identifier for the dominant-baseline is set to be hanging, the derived baseline-table is constructed using the\r\n /// hanging baseline-table in the font, and the baseline-table font-size is changed to the value of the font-size attribute on\r\n /// this element.\r\n static member inline hanging = Interop.mkAttr \"dominantBaseline\" \"hanging\"\r\n /// The baseline-identifier for the dominant-baseline is set to be ideographic, the derived baseline-table is constructed using\r\n /// the ideographic baseline-table in the font, and the baseline-table font-size is changed to the value of the font-size\r\n /// attribute on this element.\r\n static member inline ideographic = Interop.mkAttr \"dominantBaseline\" \"ideographic\"\r\n /// The baseline-identifier for the dominant-baseline is set to be mathematical, the derived baseline-table is constructed using\r\n /// the mathematical baseline-table in the font, and the baseline-table font-size is changed to the value of the font-size\r\n /// attribute on this element.\r\n static member inline mathematical = Interop.mkAttr \"dominantBaseline\" \"mathematical\"\r\n /// The baseline-identifier for the dominant-baseline is set to be middle. The derived baseline-table is constructed from the\r\n /// defined baselines in a baseline-table in the font. That font baseline-table is chosen using the following priority order\r\n /// of baseline-table names: alphabetic, ideographic, hanging, mathematical. The baseline-table font-size is changed to the value\r\n /// of the font-size attribute on this element.\r\n static member inline middle = Interop.mkAttr \"dominantBaseline\" \"middle\"\r\n /// The baseline-identifier for the dominant-baseline is set to be text-after-edge. The derived baseline-table is constructed\r\n /// from the defined baselines in a baseline-table in the font. The choice of which font baseline-table to use from the\r\n /// baseline-tables in the font is browser dependent. The baseline-table font-size is changed to the value of the font-size\r\n /// attribute on this element.\r\n static member inline textAfterEdge = Interop.mkAttr \"dominantBaseline\" \"text-after-edge\"\r\n /// The baseline-identifier for the dominant-baseline is set to be text-before-edge. The derived baseline-table is constructed\r\n /// from the defined baselines in a baseline-table in the font. The choice of which baseline-table to use from the baseline-tables\r\n /// in the font is browser dependent. The baseline-table font-size is changed to the value of the font-size attribute on this element.\r\n static member inline textBeforeEdge = Interop.mkAttr \"dominantBaseline\" \"text-before-edge\"\r\n /// This value uses the top of the em box as the baseline.\r\n static member inline textTop = Interop.mkAttr \"dominantBaseline\" \"text-top\"\r\n\r\n /// Provides a hint to browsers as to the type of virtual keyboard configuration to use when editing this element or its contents.\r\n [<Erase>]\r\n type inputMode =\r\n static member inline decimal = Interop.mkAttr \"inputmode\" \"decimal\"\r\n static member inline email = Interop.mkAttr \"inputmode\" \"email\"\r\n static member inline none = Interop.mkAttr \"inputmode\" \"none\"\r\n static member inline numeric = Interop.mkAttr \"inputmode\" \"numeric\"\r\n static member inline search = Interop.mkAttr \"inputmode\" \"search\"\r\n static member inline tel = Interop.mkAttr \"inputmode\" \"tel\"\r\n static member inline url = Interop.mkAttr \"inputmode\" \"url\"\r\n\r\n /// How the text track is meant to be used.\r\n [<Erase>]\r\n type kind =\r\n /// Subtitles provide translation of content that cannot be understood by the viewer. For example dialogue\r\n /// or text that is not English in an English language film.\r\n ///\r\n /// Subtitles may contain additional content, usually extra background information. For example the text\r\n /// at the beginning of the Star Wars films, or the date, time, and location of a scene.\r\n static member inline subtitles = Interop.mkAttr \"kind\" \"subtitles\"\r\n /// Closed captions provide a transcription and possibly a translation of audio.\r\n ///\r\n /// It may include important non-verbal information such as music cues or sound effects.\r\n /// It may indicate the cue's source (e.g. music, text, character).\r\n ///\r\n /// Suitable for users who are deaf or when the sound is muted.\r\n static member inline captions = Interop.mkAttr \"kind\" \"captions\"\r\n /// Textual description of the video content.\r\n ///\r\n /// Suitable for users who are blind or where the video cannot be seen.\r\n static member inline descriptions = Interop.mkAttr \"kind\" \"descriptions\"\r\n /// Chapter titles are intended to be used when the user is navigating the media resource.\r\n static member inline chapters = Interop.mkAttr \"kind\" \"chapters\"\r\n /// Tracks used by scripts. Not visible to the user.\r\n static member inline metadata = Interop.mkAttr \"kind\" \"metadata\"\r\n\r\n /// Provide a hint to the browser about what the author thinks will lead to the best user experience with regards\r\n /// to what content is loaded before the video is played.\r\n [<Erase>]\r\n type preload =\r\n /// Indicates that the whole video file can be downloaded, even if the user is not expected to use it.\r\n static member inline auto = Interop.mkAttr \"preload\" \"auto\"\r\n /// Indicates that only video metadata (e.g. length) is fetched.\r\n static member inline metadata = Interop.mkAttr \"preload\" \"metadata\"\r\n /// Indicates that the video should not be preloaded.\r\n static member inline none = Interop.mkAttr \"preload\" \"none\"\r\n\r\n /// Indicates which referrer to send when fetching the script, or resources fetched by the script\r\n [<Erase>]\r\n type referrerPolicy =\r\n /// The Referer header will not be sent.\r\n static member inline noReferrer = Interop.mkAttr \"referrerpolicy\" \"no-referrer\"\r\n /// The Referer header will not be sent to origins without TLS (HTTPS).\r\n static member inline noReferrerWhenDowngrade = Interop.mkAttr \"referrerpolicy\" \"no-referrer-when-downgrade\"\r\n /// The sent referrer will be limited to the origin of the referring page: its scheme, host, and port.\r\n static member inline origin = Interop.mkAttr \"referrerpolicy\" \"origin\"\r\n /// The referrer sent to other origins will be limited to the scheme, the host, and the port.\r\n /// Navigations on the same origin will still include the path.\r\n static member inline originWhenCrossOrigin = Interop.mkAttr \"referrerpolicy\" \"origin-when-cross-origin\"\r\n /// A referrer will be sent for same origin, but cross-origin requests will contain no referrer information.\r\n static member inline sameOrigin = Interop.mkAttr \"referrerpolicy\" \"same-origin\"\r\n /// Only send the origin of the document as the referrer when the protocol security level stays the same\r\n /// (e.g. HTTPS→HTTPS), but don't send it to a less secure destination (e.g. HTTPS→HTTP).\r\n static member inline strictOrigin = Interop.mkAttr \"referrerpolicy\" \"strict-origin\"\r\n /// Send a full URL when performing a same-origin request, but only send the origin when the protocol security\r\n /// level stays the same (e.g.HTTPS→HTTPS), and send no header to a less secure destination (e.g. HTTPS→HTTP).\r\n static member inline strictOriginWhenCrossOrigin = Interop.mkAttr \"referrerpolicy\" \"strict-origin-when-cross-origin\"\r\n /// The referrer will include the origin and the path (but not the fragment, password, or username). This value is unsafe,\r\n /// because it leaks origins and paths from TLS-protected resources to insecure origins.\r\n static member inline unsafeUrl = Interop.mkAttr \"referrerpolicy\" \"unsafe-url\"\r\n\r\n /// https://www.w3.org/WAI/PF/aria-1.1/roles\r\n [<Erase>]\r\n type role =\r\n /// A message with important, and usually time-sensitive, information.\r\n /// See related `alertdialog` and `status`.\r\n ///\r\n /// https://www.w3.org/WAI/PF/aria-1.1/roles#alert\r\n static member inline alert = Interop.mkAttr \"role\" \"alert\"\r\n /// A type of dialog that contains an alert message, where initial focus\r\n /// goes to an element within the dialog. See related `alert` and\r\n /// `dialog`.\r\n ///\r\n /// https://www.w3.org/WAI/PF/aria-1.1/roles#alertdialog\r\n static member inline alertDialog = Interop.mkAttr \"role\" \"alertdialog\"\r\n /// A region declared as a web application, as opposed to a web\r\n /// `document`.\r\n ///\r\n /// https://www.w3.org/WAI/PF/aria-1.1/roles#application\r\n static member inline application = Interop.mkAttr \"role\" \"application\"\r\n /// A section of a page that consists of a composition that forms an\r\n /// independent part of a document, page, or site.\r\n ///\r\n /// https://www.w3.org/WAI/PF/aria-1.1/roles#article\r\n static member inline article = Interop.mkAttr \"role\" \"article\"\r\n /// A region that contains mostly site-oriented content, rather than\r\n /// page-specific content.\r\n ///\r\n /// https://www.w3.org/WAI/PF/aria-1.1/roles#banner\r\n static member inline banner = Interop.mkAttr \"role\" \"banner\"\r\n /// An input that allows for user-triggered actions when clicked or\r\n /// pressed. See related `link`.\r\n ///\r\n /// https://www.w3.org/WAI/PF/aria-1.1/roles#button\r\n static member inline button = Interop.mkAttr \"role\" \"button\"\r\n /// A checkable input that has three possible values: `true`, `false`,\r\n /// or `mixed`.\r\n ///\r\n /// https://www.w3.org/WAI/PF/aria-1.1/roles#checkbox\r\n static member inline checkbox = Interop.mkAttr \"role\" \"checkbox\"\r\n /// A cell containing header information for a column.\r\n ///\r\n /// https://www.w3.org/WAI/PF/aria-1.1/roles#columnheader\r\n static member inline columnHeader = Interop.mkAttr \"role\" \"columnheader\"\r\n /// A presentation of a `select`; usually similar to a `textbox` where\r\n /// users can type ahead to select an option, or type to enter arbitrary\r\n /// text as a new item in the list. See related `listbox`.\r\n ///\r\n /// https://www.w3.org/WAI/PF/aria-1.1/roles#combobox\r\n static member inline comboBox = Interop.mkAttr \"role\" \"combobox\"\r\n /// A supporting section of the document, designed to be complementary\r\n /// to the main content at a similar level in the DOM hierarchy, but\r\n /// remains meaningful when separated from the main content.\r\n ///\r\n /// https://www.w3.org/WAI/PF/aria-1.1/roles#complementary\r\n static member inline complementary = Interop.mkAttr \"role\" \"complementary\"\r\n /// A large perceivable region that contains information about the\r\n /// parent document.\r\n ///\r\n /// https://www.w3.org/WAI/PF/aria-1.1/roles#contentinfo\r\n static member inline contentInfo = Interop.mkAttr \"role\" \"contentinfo\"\r\n /// A definition of a term or concept.\r\n ///\r\n /// https://www.w3.org/WAI/PF/aria-1.1/roles#definition\r\n static member inline definition = Interop.mkAttr \"role\" \"definition\"\r\n /// A dialog is an application window that is designed to interrupt the\r\n /// current processing of an application in order to prompt the user to\r\n /// enter information or require a response. See related `alertdialog`.\r\n ///\r\n /// https://www.w3.org/WAI/PF/aria-1.1/roles#dialog\r\n static member inline dialog = Interop.mkAttr \"role\" \"dialog\"\r\n /// A list of references to members of a group, such as a static table\r\n /// of contents.\r\n ///\r\n /// https://www.w3.org/WAI/PF/aria-1.1/roles#directory\r\n static member inline directory = Interop.mkAttr \"role\" \"directory\"\r\n /// A region containing related information that is declared as document\r\n /// content, as opposed to a web application.\r\n ///\r\n /// https://www.w3.org/WAI/PF/aria-1.1/roles#document\r\n static member inline document = Interop.mkAttr \"role\" \"document\"\r\n /// A `landmark` region that contains a collection of items and objects\r\n /// that, as a whole, combine to create a form. See related search.\r\n ///\r\n /// https://www.w3.org/WAI/PF/aria-1.1/roles#form\r\n static member inline form = Interop.mkAttr \"role\" \"form\"\r\n /// A grid is an interactive control which contains cells of tabular\r\n /// data arranged in rows and columns, like a table.\r\n ///\r\n /// https://www.w3.org/WAI/PF/aria-1.1/roles#grid\r\n static member inline grid = Interop.mkAttr \"role\" \"grid\"\r\n /// A cell in a grid or treegrid.\r\n ///\r\n /// https://www.w3.org/WAI/PF/aria-1.1/roles#gridcell\r\n static member inline gridCell = Interop.mkAttr \"role\" \"gridcell\"\r\n /// A set of user interface objects which are not intended to be\r\n /// included in a page summary or table of contents by assistive\r\n /// technologies.\r\n ///\r\n /// https://www.w3.org/WAI/PF/aria-1.1/roles#group\r\n static member inline group = Interop.mkAttr \"role\" \"group\"\r\n /// A heading for a section of the page.\r\n ///\r\n /// https://www.w3.org/WAI/PF/aria-1.1/roles#heading\r\n static member inline heading = Interop.mkAttr \"role\" \"heading\"\r\n /// A container for a collection of elements that form an image.\r\n ///\r\n /// https://www.w3.org/WAI/PF/aria-1.1/roles#img\r\n static member inline img = Interop.mkAttr \"role\" \"img\"\r\n /// An interactive reference to an internal or external resource that,\r\n /// when activated, causes the user agent to navigate to that resource.\r\n /// See related `button`.\r\n ///\r\n /// https://www.w3.org/WAI/PF/aria-1.1/roles#link\r\n static member inline link = Interop.mkAttr \"role\" \"link\"\r\n /// A group of non-interactive list items. See related `listbox`.\r\n ///\r\n /// https://www.w3.org/WAI/PF/aria-1.1/roles#list\r\n static member inline list = Interop.mkAttr \"role\" \"list\"\r\n /// A widget that allows the user to select one or more items from a\r\n /// list of choices. See related `combobox` and `list`.\r\n ///\r\n /// https://www.w3.org/WAI/PF/aria-1.1/roles#listbox\r\n static member inline listBox = Interop.mkAttr \"role\" \"listbox\"\r\n /// A single item in a list or directory.\r\n ///\r\n /// https://www.w3.org/WAI/PF/aria-1.1/roles#listitem\r\n static member inline listItem = Interop.mkAttr \"role\" \"listitem\"\r\n /// A type of live region where new information is added in meaningful\r\n /// order and old information may disappear. See related `marquee`.\r\n ///\r\n /// https://www.w3.org/WAI/PF/aria-1.1/roles#log\r\n static member inline log = Interop.mkAttr \"role\" \"log\"\r\n /// The main content of a document.\r\n ///\r\n /// https://www.w3.org/WAI/PF/aria-1.1/roles#main\r\n static member inline main = Interop.mkAttr \"role\" \"main\"\r\n /// A type of live region where non-essential information changes\r\n /// frequently. See related `log`.\r\n ///\r\n /// https://www.w3.org/WAI/PF/aria-1.1/roles#marquee\r\n static member inline marquee = Interop.mkAttr \"role\" \"marquee\"\r\n /// Content that represents a mathematical expression.\r\n ///\r\n /// https://www.w3.org/WAI/PF/aria-1.1/roles#math\r\n static member inline math = Interop.mkAttr \"role\" \"math\"\r\n /// A type of widget that offers a list of choices to the user.\r\n ///\r\n /// https://www.w3.org/WAI/PF/aria-1.1/roles#menu\r\n static member inline menu = Interop.mkAttr \"role\" \"menu\"\r\n /// A presentation of `menu` that usually remains visible and is usually\r\n /// presented horizontally.\r\n ///\r\n /// https://www.w3.org/WAI/PF/aria-1.1/roles#menubar\r\n static member inline menuBar = Interop.mkAttr \"role\" \"menubar\"\r\n /// An option in a set of choices contained by a `menu` or `menubar`.\r\n ///\r\n /// https://www.w3.org/WAI/PF/aria-1.1/roles#menuitem\r\n static member inline menuItem = Interop.mkAttr \"role\" \"menuitem\"\r\n /// A `menuitem` with a checkable state whose possible values are\r\n /// `true`, `false`, or `mixed`.\r\n ///\r\n /// https://www.w3.org/WAI/PF/aria-1.1/roles#menuitemcheckbox\r\n static member inline menuItemCheckbox = Interop.mkAttr \"role\" \"menuitemcheckbox\"\r\n /// A checkable menuitem in a set of elements with role `menuitemradio`,\r\n /// only one of which can be checked at a time.\r\n ///\r\n /// https://www.w3.org/WAI/PF/aria-1.1/roles#menuitemradio\r\n static member inline menuItemRadio = Interop.mkAttr \"role\" \"menuitemradio\"\r\n /// A collection of navigational elements (usually links) for navigating\r\n /// the document or related documents.\r\n ///\r\n /// https://www.w3.org/WAI/PF/aria-1.1/roles#navigation\r\n static member inline navigation = Interop.mkAttr \"role\" \"navigation\"\r\n /// A section whose content is parenthetic or ancillary to the main\r\n /// content of the resource.\r\n ///\r\n /// https://www.w3.org/WAI/PF/aria-1.1/roles#note\r\n static member inline note = Interop.mkAttr \"role\" \"note\"\r\n /// A selectable item in a `select` list.\r\n ///\r\n /// https://www.w3.org/WAI/PF/aria-1.1/roles#option\r\n static member inline option = Interop.mkAttr \"role\" \"option\"\r\n /// An element whose implicit native role semantics will not be mapped\r\n /// to the accessibility API.\r\n ///\r\n /// https://www.w3.org/WAI/PF/aria-1.1/roles#presentation\r\n static member inline presentation = Interop.mkAttr \"role\" \"presentation\"\r\n /// An element that displays the progress status for tasks that take a\r\n /// long time.\r\n ///\r\n /// https://www.w3.org/WAI/PF/aria-1.1/roles#progressbar\r\n static member inline progressBar = Interop.mkAttr \"role\" \"progressbar\"\r\n /// A checkable input in a group of elements with role radio, only one\r\n /// of which can be checked at a time.\r\n ///\r\n /// https://www.w3.org/WAI/PF/aria-1.1/roles#radio\r\n static member inline radio = Interop.mkAttr \"role\" \"radio\"\r\n /// A group of radio buttons.\r\n ///\r\n /// https://www.w3.org/WAI/PF/aria-1.1/roles#radiogroup\r\n static member inline radioGroup = Interop.mkAttr \"role\" \"radiogroup\"\r\n /// A large perceivable section of a web page or document, that is\r\n /// important enough to be included in a page summary or table of\r\n /// contents, for example, an area of the page containing live sporting\r\n /// event statistics.\r\n ///\r\n /// https://www.w3.org/WAI/PF/aria-1.1/roles#region\r\n static member inline region = Interop.mkAttr \"role\" \"region\"\r\n /// A row of cells in a grid.\r\n ///\r\n /// https://www.w3.org/WAI/PF/aria-1.1/roles#row\r\n static member inline row = Interop.mkAttr \"role\" \"row\"\r\n /// A group containing one or more row elements in a grid.\r\n ///\r\n /// https://www.w3.org/WAI/PF/aria-1.1/roles#rowgroup\r\n static member inline rowGroup = Interop.mkAttr \"role\" \"rowgroup\"\r\n /// A cell containing header information for a row in a grid.\r\n ///\r\n /// https://www.w3.org/WAI/PF/aria-1.1/roles#rowheader\r\n static member inline rowHeader = Interop.mkAttr \"role\" \"rowheader\"\r\n /// A graphical object that controls the scrolling of content within a\r\n /// viewing area, regardless of whether the content is fully displayed\r\n /// within the viewing area.\r\n ///\r\n /// https://www.w3.org/WAI/PF/aria-1.1/roles#scrollbar\r\n static member inline scrollBar = Interop.mkAttr \"role\" \"scrollbar\"\r\n /// A divider that separates and distinguishes sections of content or\r\n /// groups of menuitems.\r\n ///\r\n /// https://www.w3.org/WAI/PF/aria-1.1/roles#separator\r\n static member inline separator = Interop.mkAttr \"role\" \"separator\"\r\n /// A `landmark` region that contains a collection of items and objects\r\n /// that, as a whole, combine to create a search facility. See related\r\n /// `form`.\r\n ///\r\n /// https://www.w3.org/WAI/PF/aria-1.1/roles#search\r\n static member inline search = Interop.mkAttr \"role\" \"search\"\r\n /// A user input where the user selects a value from within a given\r\n /// range.\r\n ///\r\n /// https://www.w3.org/WAI/PF/aria-1.1/roles#slider\r\n static member inline slider = Interop.mkAttr \"role\" \"slider\"\r\n /// A form of `range` that expects the user to select from among\r\n /// discrete choices.\r\n ///\r\n /// https://www.w3.org/WAI/PF/aria-1.1/roles#spinbutton\r\n static member inline spinButton = Interop.mkAttr \"role\" \"spinbutton\"\r\n /// A container whose content is advisory information for the user but\r\n /// is not important enough to justify an alert, often but not\r\n /// necessarily presented as a status bar. See related `alert`.\r\n ///\r\n /// https://www.w3.org/WAI/PF/aria-1.1/roles#status\r\n static member inline status = Interop.mkAttr \"role\" \"status\"\r\n /// A grouping label providing a mechanism for selecting the tab content\r\n /// that is to be rendered to the user.\r\n ///\r\n /// https://www.w3.org/WAI/PF/aria-1.1/roles#tab\r\n static member inline tab = Interop.mkAttr \"role\" \"tab\"\r\n /// A list of `tab` elements, which are references to `tabpanel`\r\n /// elements.\r\n ///\r\n /// https://www.w3.org/WAI/PF/aria-1.1/roles#tablist\r\n static member inline tabList = Interop.mkAttr \"role\" \"tablist\"\r\n /// A container for the resources associated with a `tab`, where each\r\n /// `tab` is contained in a `tablist`.\r\n ///\r\n /// https://www.w3.org/WAI/PF/aria-1.1/roles#tabpanel\r\n static member inline tabPanel = Interop.mkAttr \"role\" \"tabpanel\"\r\n /// Input that allows free-form text as its value.\r\n ///\r\n /// https://www.w3.org/WAI/PF/aria-1.1/roles#textbox\r\n static member inline textBox = Interop.mkAttr \"role\" \"textbox\"\r\n /// A type of live region containing a numerical counter which indicates\r\n /// an amount of elapsed time from a start point, or the time remaining\r\n /// until an end point.\r\n ///\r\n /// https://www.w3.org/WAI/PF/aria-1.1/roles#timer\r\n static member inline timer = Interop.mkAttr \"role\" \"timer\"\r\n /// A collection of commonly used function buttons or controls\r\n /// represented in compact visual form.\r\n ///\r\n /// https://www.w3.org/WAI/PF/aria-1.1/roles#toolbar\r\n static member inline toolbar = Interop.mkAttr \"role\" \"toolbar\"\r\n /// A contextual popup that displays a description for an element.\r\n ///\r\n /// https://www.w3.org/WAI/PF/aria-1.1/roles#tooltip\r\n static member inline tooltip = Interop.mkAttr \"role\" \"tooltip\"\r\n /// A type of `list` that may contain sub-level nested groups that can\r\n /// be collapsed and expanded.\r\n ///\r\n /// https://www.w3.org/WAI/PF/aria-1.1/roles#tree\r\n static member inline tree = Interop.mkAttr \"role\" \"tree\"\r\n /// A `grid` whose rows can be expanded and collapsed in the same manner\r\n /// as for a `tree`.\r\n ///\r\n /// https://www.w3.org/WAI/PF/aria-1.1/roles#treegrid\r\n static member inline treeGrid = Interop.mkAttr \"role\" \"treegrid\"\r\n /// An option item of a `tree`. This is an element within a tree that\r\n /// may be expanded or collapsed if it contains a sub-level group of\r\n /// `treeitem` elements.\r\n ///\r\n /// https://www.w3.org/WAI/PF/aria-1.1/roles#treeitem\r\n static member inline treeItem = Interop.mkAttr \"role\" \"treeitem\"\r\n\r\n [<Erase>]\r\n type selectionDirection =\r\n /// For the opposite direction.\r\n static member inline backward = Interop.mkAttr \"selectionDirection\" \"backward\"\r\n /// If selection was performed in the start-to-end direction of the current locale.\r\n static member inline forward = Interop.mkAttr \"selectionDirection\" \"forward\"\r\n /// If the direction is unknown.\r\n static member inline none = Interop.mkAttr \"selectionDirection\" \"none\"\r\n\r\n /// The shape of the associated hot spot.\r\n [<Erase>]\r\n type shape =\r\n static member inline rect = Interop.mkAttr \"shape\" \"rect\"\r\n static member inline circle = Interop.mkAttr \"shape\" \"circle\"\r\n static member inline poly = Interop.mkAttr \"shape\" \"poly\"\r\n\r\n [<Erase>]\r\n type target =\r\n /// Opens the linked document in a new window or tab.\r\n static member inline blank = Interop.mkAttr \"target\" \"_blank\"\r\n /// Opens the linked document in the parent frame.\r\n static member inline parent = Interop.mkAttr \"target\" \"_parent\"\r\n /// Opens the linked document in the same frame as it was clicked (this is default).\r\n static member inline self = Interop.mkAttr \"target\" \"_self\"\r\n /// Opens the linked document in the full body of the window.\r\n static member inline top = Interop.mkAttr \"target\" \"_top\"\r\n\r\n /// The `text-anchor` attribute is used to align (start-, middle- or\r\n /// end-alignment) a string of pre-formatted text or auto-wrapped text where\r\n /// the wrapping area is determined from the `inline-size` property relative\r\n /// to a given point. It is not applicable to other types of auto-wrapped\r\n /// text. For those cases you should use `text-align`. For multi-line text,\r\n /// the alignment takes place for each line.\r\n ///\r\n /// The `text-anchor` attribute is applied to each individual text chunk\r\n /// within a given `<text>` element. Each text chunk has an initial current\r\n /// text position, which represents the point in the user coordinate system\r\n /// resulting from (depending on context) application of the `x` and `y`\r\n /// attributes on the `<text>` element, any `x` or `y` attribute values on a\r\n /// `<tspan>`, `<tref>` or `<altGlyph>` element assigned explicitly to the\r\n /// first rendered character in a text chunk, or determination of the\r\n /// initial current text position for a `<textPath>` element.\r\n [<Erase>]\r\n type textAnchor =\r\n /// The rendered characters are shifted such that the end of the\r\n /// resulting rendered text (final current text position before applying\r\n /// the `text-anchor` property) is at the initial current text position.\r\n /// For an element with a `direction` property value of `ltr` (typical\r\n /// for most European languages), the right side of the text is rendered\r\n /// at the initial text position. For an element with a `direction`\r\n /// property value of `rtl` (typical for Arabic and Hebrew), the left\r\n /// side of the text is rendered at the initial text position. For an\r\n /// element with a vertical primary text direction (often typical for\r\n /// Asian text), the bottom of the text is rendered at the initial text\r\n /// position.\r\n static member inline endOfText = Interop.mkAttr \"textAnchor\" \"end\"\r\n /// The rendered characters are aligned such that the middle of the text\r\n /// string is at the current text position. (For text on a path,\r\n /// conceptually the text string is first laid out in a straight line.\r\n /// The midpoint between the start of the text string and the end of the\r\n /// text string is determined. Then, the text string is mapped onto the\r\n /// path with this midpoint placed at the current text position.)\r\n static member inline middle = Interop.mkAttr \"textAnchor\" \"middle\"\r\n /// The rendered characters are aligned such that the start of the text\r\n /// string is at the initial current text position. For an element with\r\n /// a `direction` property value of `ltr` (typical for most European\r\n /// languages), the left side of the text is rendered at the initial\r\n /// text position. For an element with a `direction` property value of\r\n /// `rtl` (typical for Arabic and Hebrew), the right side of the text is\r\n /// rendered at the initial text position. For an element with a\r\n /// vertical primary text direction (often typical for Asian text), the\r\n /// top side of the text is rendered at the initial text position.\r\n static member inline startOfText = Interop.mkAttr \"textAnchor\" \"start\"\r\n\r\n [<Erase>]\r\n type transform =\r\n /// Defines a 2D transformation, using a matrix of six values.\r\n static member inline matrix(x1: int, y1: int, z1: int, x2: int, y2: int, z2: int) =\r\n Interop.mkAttr \"transform\" (\r\n \"matrix(\" +\r\n (unbox<string> x1) + \",\" +\r\n (unbox<string> y1) + \",\" +\r\n (unbox<string> z1) + \",\" +\r\n (unbox<string> x2) + \",\" +\r\n (unbox<string> y2) + \",\" +\r\n (unbox<string> z2) + \")\"\r\n )\r\n /// Defines that there should be no transformation.\r\n static member inline none = Interop.mkAttr \"transform\" \"none\"\r\n /// Defines a perspective view for a 3D transformed element\r\n static member inline perspective(n: int) =\r\n Interop.mkAttr \"transform\" (\"perspective(\" + (unbox<string> n) + \")\")\r\n /// Defines a 2D rotation, the angle is specified in the parameter.\r\n static member inline rotate(deg: int) =\r\n Interop.mkAttr \"transform\" (\"rotate(\" + (unbox<string> deg) + \"deg)\")\r\n /// Defines a 2D rotation, the angle is specified in the parameter.\r\n static member inline rotate(deg: float) =\r\n Interop.mkAttr \"transform\" (\"rotate(\" + (unbox<string> deg) + \"deg)\")\r\n /// Defines a 3D rotation along the X-axis.\r\n static member inline rotateX(deg: float) =\r\n Interop.mkAttr \"transform\" (\"rotateX(\" + (unbox<string> deg) + \"deg)\")\r\n /// Defines a 3D rotation along the X-axis.\r\n static member inline rotateX(deg: int) =\r\n Interop.mkAttr \"transform\" (\"rotateX(\" + (unbox<string> deg) + \"deg)\")\r\n /// Defines a 3D rotation along the Y-axis\r\n static member inline rotateY(deg: float) =\r\n Interop.mkAttr \"transform\" (\"rotateY(\" + (unbox<string> deg) + \"deg)\")\r\n /// Defines a 3D rotation along the Y-axis\r\n static member inline rotateY(deg: int) =\r\n Interop.mkAttr \"transform\" (\"rotateY(\" + (unbox<string> deg) + \"deg)\")\r\n /// Defines a 3D rotation along the Z-axis\r\n static member inline rotateZ(deg: float) =\r\n Interop.mkAttr \"transform\" (\"rotateZ(\" + (unbox<string> deg) + \"deg)\")\r\n /// Defines a 3D rotation along the Z-axis\r\n static member inline rotateZ(deg: int) =\r\n Interop.mkAttr \"transform\" (\"rotateZ(\" + (unbox<string> deg) + \"deg)\")\r\n /// Defines a 2D scale transformation.\r\n static member inline scale(x: int, y: int) =\r\n Interop.mkAttr \"transform\" (\r\n \"scale(\" + (unbox<string> x) + \",\" + (unbox<string> y) + \")\"\r\n )\r\n /// Defines a 3D scale transformation\r\n static member inline scale3D(x: int, y: int, z: int) =\r\n Interop.mkAttr \"transform\" (\r\n \"scale3d(\" + (unbox<string> x) + \",\" + (unbox<string> y) + \",\" + (unbox<string> z) + \")\"\r\n )\r\n /// Defines a scale transformation by giving a value for the X-axis.\r\n static member inline scaleX(x: int) =\r\n Interop.mkAttr \"transform\" (\"scaleX(\" + (unbox<string> x) + \")\")\r\n /// Defines a scale transformation by giving a value for the Y-axis.\r\n static member inline scaleY(y: int) =\r\n Interop.mkAttr \"transform\" (\"scaleY(\" + (unbox<string> y) + \")\")\r\n /// Defines a 3D translation, using only the value for the Z-axis\r\n static member inline scaleZ(z: int) =\r\n Interop.mkAttr \"transform\" (\"scaleZ(\" + (unbox<string> z) + \")\")\r\n /// Defines a 2D skew transformation along the X- and the Y-axis.\r\n static member inline skew(xAngle: int, yAngle: int) =\r\n Interop.mkAttr \"transform\" (\"skew(\" + (unbox<string> xAngle) + \"deg,\" + (unbox<string> yAngle) + \"deg)\")\r\n /// Defines a 2D skew transformation along the X- and the Y-axis.\r\n static member inline skew(xAngle: float, yAngle: float) =\r\n Interop.mkAttr \"transform\" (\"skew(\" + (unbox<string> xAngle) + \"deg,\" + (unbox<string> yAngle) + \"deg)\")\r\n /// Defines a 2D skew transformation along the X-axis\r\n static member inline skewX(xAngle: int) =\r\n Interop.mkAttr \"transform\" (\"skewX(\" + (unbox<string> xAngle) + \"deg)\")\r\n /// Defines a 2D skew transformation along the X-axis\r\n static member inline skewX(xAngle: float) =\r\n Interop.mkAttr \"transform\" (\"skewX(\" + (unbox<string> xAngle) + \"deg)\")\r\n /// Defines a 2D skew transformation along the Y-axis\r\n static member inline skewY(xAngle: int) =\r\n Interop.mkAttr \"transform\" (\"skewY(\" + (unbox<string> xAngle) + \"deg)\")\r\n /// Defines a 2D skew transformation along the Y-axis\r\n static member inline skewY(xAngle: float) =\r\n Interop.mkAttr \"transform\" (\"skewY(\" + (unbox<string> xAngle) + \"deg)\")\r\n /// Defines a 2D translation.\r\n static member inline translate(x: int, y: int) =\r\n Interop.mkAttr \"transform\" (\r\n \"translate(\" + (unbox<string> x) + \",\" + (unbox<string> y) + \")\"\r\n )\r\n static member inline translate(x: float, y: float) =\r\n Interop.mkAttr \"transform\" (\r\n \"translate(\" + (unbox<string> x) + \",\" + (unbox<string> y) + \")\"\r\n )\r\n /// Defines that there should be no transformation.\r\n static member inline translate3D(x: int, y: int, z: int) =\r\n Interop.mkAttr \"transform\" (\r\n \"translate3d(\" + (unbox<string> x) + \",\" + (unbox<string> y) + \",\" + (unbox<string> z) + \")\"\r\n )\r\n /// Defines a translation, using only the value for the X-axis.\r\n static member inline translateX(x: int) =\r\n Interop.mkAttr \"transform\" (\"translateX(\" + (unbox<string> x) + \")\")\r\n /// Defines a translation, using only the value for the Y-axis\r\n static member inline translateY(y: int) =\r\n Interop.mkAttr \"transform\" (\"translateY(\" + (unbox<string> y) + \")\")\r\n /// Defines a 3D translation, using only the value for the Z-axis\r\n static member inline translateZ(z: int) =\r\n Interop.mkAttr \"transform\" (\"translateZ(\" + (unbox<string> z) + \")\")\r\n\r\n [<Erase>]\r\n type type' =\r\n /// Defines a clickable button (mostly used with a JavaScript code to activate a script)\r\n static member inline button = Interop.mkAttr \"type\" \"button\"\r\n /// Defines a checkbox\r\n static member inline checkbox = Interop.mkAttr \"type\" \"checkbox\"\r\n /// Defines a color picker\r\n static member inline color = Interop.mkAttr \"type\" \"color\"\r\n /// Defines a date control with year, month and day (no time)\r\n static member inline date = Interop.mkAttr \"type\" \"date\"\r\n /// Defines a date and time control (year, month, day, time (no timezone)\r\n static member inline dateTimeLocal = Interop.mkAttr \"type\" \"datetime-local\"\r\n /// Defines a field for an e-mail address\r\n static member inline email = Interop.mkAttr \"type\" \"email\"\r\n /// Defines a file-select field and a \"Browse\" button (for file uploads)\r\n static member inline file = Interop.mkAttr \"type\" \"file\"\r\n /// Defines a hidden input field\r\n static member inline hidden = Interop.mkAttr \"type\" \"hidden\"\r\n /// Defines an image as the submit button\r\n static member inline image = Interop.mkAttr \"type\" \"image\"\r\n /// Defines a month and year control (no timezone)\r\n static member inline month = Interop.mkAttr \"type\" \"month\"\r\n /// Defines a field for entering a number\r\n static member inline number = Interop.mkAttr \"type\" \"number\"\r\n /// Defines a password field\r\n static member inline password = Interop.mkAttr \"type\" \"password\"\r\n /// Defines a radio button\r\n static member inline radio = Interop.mkAttr \"type\" \"radio\"\r\n /// Defines a range control (like a slider control)\r\n static member inline range = Interop.mkAttr \"type\" \"range\"\r\n /// Defines a reset button\r\n static member inline reset = Interop.mkAttr \"type\" \"reset\"\r\n /// Defines a text field for entering a search string\r\n static member inline search = Interop.mkAttr \"type\" \"search\"\r\n /// Defines a submit button\r\n static member inline submit = Interop.mkAttr \"type\" \"submit\"\r\n /// Defines a field for entering a telephone number\r\n static member inline tel = Interop.mkAttr \"type\" \"tel\"\r\n /// Default. Defines a single-line text field\r\n static member inline text = Interop.mkAttr \"type\" \"text\"\r\n /// Defines a control for entering a time (no timezone)\r\n static member inline time = Interop.mkAttr \"type\" \"time\"\r\n /// Defines a field for entering a URL\r\n static member inline url = Interop.mkAttr \"type\" \"url\"\r\n /// Defines a week and year control (no timezone)\r\n static member inline week = Interop.mkAttr \"type\" \"week\"\r\n","module Blog\n\nopen Feliz\nopen Elmish\nopen BlogTypes\nopen BlogTypes.Conversions\nopen BlogHelpers\nopen BlogView\nopen BlogLang\nopen Feliz.Router\nopen Fable.Core\n\nopen Thoth.Json\nopen Firebase\n\nlet postLoadCommand lang =\n let prom = fun _ -> getPosts lang\n Cmd.OfPromise.either prom ()\n UpdatePosts\n (fun err ->\n printfn \"Error fetching posts: %s\" err.Message\n FailedLoadingPosts);\nlet init() =\n {\n lang = defaultLang\n selfie = None\n background = None\n Posts = Loading\n URL = Router.currentUrl()\n Trans = loadLang defaultLang\n }, Cmd.batch[\n Cmd.ofMsg (ResolvePicture ((pickRandomFile \"img/hero-backgrounds\"), (SetBackground)))\n postLoadCommand defaultLang\n ]\nlet update (msg: Msg) (state: State) =\n let segments = Router.currentUrl()\n\n match msg with\n | Nothing -> state, Cmd.none\n | Reload -> init()\n | SetSelfie newSelfie ->\n { state with selfie = Some newSelfie}, Cmd.none\n | SetBackground pic ->\n { state with background = Some pic}, Cmd.none\n | ResolvePicture (pr, event) ->\n let prom () = pr\n state, Cmd.OfPromise.either prom ()\n event\n (fun err -> printfn \"Error fetching selfie: %A\" err\n Nothing)\n | URLChanged segments ->\n { state with background = state.background\n URL = segments\n }, Cmd.ofMsg (ResolvePicture ((pickRandomFile \"img/selfies\"), SetSelfie) ) // new selfie :)\n | ChangeLanguage newlang ->\n setUserLang newlang\n let shouldReload = match newlang.Equals(state.lang) with\n | true -> Cmd.none\n | false -> postLoadCommand newlang;\n { state with lang = newlang\n Trans = loadLang newlang}, shouldReload\n | FailedLoadingPosts ->\n { state with Posts = ResourceFetch.FailedLoading }, Cmd.none\n | UpdatePosts dbposts ->\n let posts = dbposts\n |> Array.map postDB2postdata \n |> Array.choose id\n |> Array.sortByDescending (fun post -> post.released.ToUniversalTime())\n { state with Posts = Loaded posts },\n Cmd.ofMsg (ResolvePicture ((pickRandomFile \"img/selfies\"), SetSelfie) )\n \n\nlet render (state: State) (dispatch: Msg -> unit) =\n Router.router\n [\n trackScreen state.lang >> URLChanged >> dispatch\n |> Router.onUrlChanged\n mainPage state dispatch\n |> Router.application\n ]\n","namespace Elmish\nopen System\n\n[<Struct>]\ntype internal RingState<'item> =\n | Writable of wx:'item array * ix:int\n | ReadWritable of rw:'item array * wix:int * rix:int\n\ntype internal RingBuffer<'item>(size) =\n let doubleSize ix (items: 'item array) =\n seq { yield! items |> Seq.skip ix\n yield! items |> Seq.take ix\n for _ in 0..items.Length do\n yield Unchecked.defaultof<'item> }\n |> Array.ofSeq\n\n let mutable state : 'item RingState =\n Writable (Array.zeroCreate (max size 10), 0)\n\n member __.Pop() =\n match state with\n | ReadWritable (items, wix, rix) ->\n let rix' = (rix + 1) % items.Length\n match rix' = wix with\n | true -> \n state <- Writable(items, wix)\n | _ ->\n state <- ReadWritable(items, wix, rix')\n Some items.[rix]\n | _ ->\n None\n\n member __.Push (item:'item) =\n match state with\n | Writable (items, ix) ->\n items.[ix] <- item\n let wix = (ix + 1) % items.Length\n state <- ReadWritable(items, wix, ix)\n | ReadWritable (items, wix, rix) ->\n items.[wix] <- item\n let wix' = (wix + 1) % items.Length\n match wix' = rix with\n | true -> \n state <- ReadWritable(items |> doubleSize rix, items.Length, 0)\n | _ -> \n state <- ReadWritable(items, wix', rix)","(**\nProgram\n---------\nCore abstractions for creating and running the dispatch loop.\n\n*)\n\nnamespace Elmish\n\n\n/// Program type captures various aspects of program behavior\ntype Program<'arg, 'model, 'msg, 'view> = private {\n init : 'arg -> 'model * Cmd<'msg>\n update : 'msg -> 'model -> 'model * Cmd<'msg>\n subscribe : 'model -> Cmd<'msg>\n view : 'model -> Dispatch<'msg> -> 'view\n setState : 'model -> Dispatch<'msg> -> unit\n onError : (string*exn) -> unit\n syncDispatch: Dispatch<'msg> -> Dispatch<'msg>\n}\n\n/// Program module - functions to manipulate program instances\n[<RequireQualifiedAccess>]\n[<CompilationRepresentation(CompilationRepresentationFlags.ModuleSuffix)>]\nmodule Program =\n /// Typical program, new commands are produced by `init` and `update` along with the new state.\n let mkProgram \n (init : 'arg -> 'model * Cmd<'msg>) \n (update : 'msg -> 'model -> 'model * Cmd<'msg>)\n (view : 'model -> Dispatch<'msg> -> 'view) =\n { init = init\n update = update\n view = view\n setState = fun model -> view model >> ignore\n subscribe = fun _ -> Cmd.none\n onError = Log.onError\n syncDispatch = id }\n\n /// Simple program that produces only new state with `init` and `update`.\n let mkSimple \n (init : 'arg -> 'model) \n (update : 'msg -> 'model -> 'model)\n (view : 'model -> Dispatch<'msg> -> 'view) =\n { init = init >> fun state -> state,Cmd.none\n update = fun msg -> update msg >> fun state -> state,Cmd.none\n view = view\n setState = fun model -> view model >> ignore\n subscribe = fun _ -> Cmd.none\n onError = Log.onError\n syncDispatch = id }\n\n /// Subscribe to external source of events.\n /// The subscription is called once - with the initial model, but can dispatch new messages at any time.\n let withSubscription (subscribe : 'model -> Cmd<'msg>) (program: Program<'arg, 'model, 'msg, 'view>) =\n let sub model =\n Cmd.batch [ program.subscribe model\n subscribe model ]\n { program with subscribe = sub }\n\n /// Trace all the updates to the console\n let withConsoleTrace (program: Program<'arg, 'model, 'msg, 'view>) =\n let traceInit (arg:'arg) =\n let initModel,cmd = program.init arg\n Log.toConsole (\"Initial state:\", initModel)\n initModel,cmd\n\n let traceUpdate msg model =\n Log.toConsole (\"New message:\", msg)\n let newModel,cmd = program.update msg model\n Log.toConsole (\"Updated state:\", newModel)\n newModel,cmd\n\n { program with\n init = traceInit \n update = traceUpdate }\n\n /// Trace all the messages as they update the model\n let withTrace trace (program: Program<'arg, 'model, 'msg, 'view>) =\n let update msg model =\n let state,cmd = program.update msg model\n trace msg state\n state,cmd\n { program\n with update = update }\n\n /// Handle dispatch loop exceptions\n let withErrorHandler onError (program: Program<'arg, 'model, 'msg, 'view>) =\n { program\n with onError = onError }\n\n /// For library authors only: map existing error handler and return new `Program` \n let mapErrorHandler map (program: Program<'arg, 'model, 'msg, 'view>) =\n { program\n with onError = map program.onError }\n\n /// For library authors only: get the current error handler \n let onError (program: Program<'arg, 'model, 'msg, 'view>) =\n program.onError\n\n /// For library authors only: function to render the view with the latest state \n let withSetState (setState:'model -> Dispatch<'msg> -> unit)\n (program: Program<'arg, 'model, 'msg, 'view>) = \n { program\n with setState = setState }\n\n /// For library authors only: return the function to render the state \n let setState (program: Program<'arg, 'model, 'msg, 'view>) = \n program.setState\n\n /// For library authors only: return the view function \n let view (program: Program<'arg, 'model, 'msg, 'view>) = \n program.view\n\n /// For library authors only: function to synchronize the dispatch function\n let withSyncDispatch (syncDispatch:Dispatch<'msg> -> Dispatch<'msg>)\n (program: Program<'arg, 'model, 'msg, 'view>) = \n { program\n with syncDispatch = syncDispatch }\n\n /// For library authors only: map the program type\n let map mapInit mapUpdate mapView mapSetState mapSubscribe\n (program: Program<'arg, 'model, 'msg, 'view>) =\n { init = mapInit program.init\n update = mapUpdate program.update\n view = mapView program.view\n setState = mapSetState program.setState\n subscribe = mapSubscribe program.subscribe\n onError = program.onError\n syncDispatch = id }\n\n /// Start the program loop.\n /// arg: argument to pass to the init() function.\n /// program: program created with 'mkSimple' or 'mkProgram'.\n let runWith (arg: 'arg) (program: Program<'arg, 'model, 'msg, 'view>) =\n let (model,cmd) = program.init arg\n let rb = RingBuffer 10\n let mutable reentered = false\n let mutable state = model \n let rec dispatch msg = \n if reentered then\n rb.Push msg\n else\n reentered <- true\n let mutable nextMsg = Some msg\n while Option.isSome nextMsg do\n let msg = nextMsg.Value\n try\n let (model',cmd') = program.update msg state\n program.setState model' syncDispatch\n cmd' |> Cmd.exec syncDispatch\n state <- model'\n with ex ->\n program.onError (sprintf \"Unable to process the message: %A\" msg, ex)\n nextMsg <- rb.Pop()\n reentered <- false\n and syncDispatch = program.syncDispatch dispatch \n\n program.setState model syncDispatch\n let sub = \n try \n program.subscribe model \n with ex ->\n program.onError (\"Unable to subscribe:\", ex)\n Cmd.none\n sub @ cmd |> Cmd.exec syncDispatch\n\n /// Start the dispatch loop with `unit` for the init() function.\n let run (program: Program<unit, 'model, 'msg, 'view>) = runWith () program\n","module Main\r\n\r\nopen Fable.Core.JsInterop\r\n\r\nimportAll \"../styles/main.scss\"\r\n\r\nopen Elmish\r\nopen Elmish.React\r\nopen Elmish.Debug\r\nopen Elmish.HMR\r\n\r\n// App\r\nProgram.mkProgram Blog.init Blog.update Blog.render\r\n#if DEBUG\r\n// |> Program.withConsoleTrace\r\n|> Program.withDebugger\r\n#endif\r\n|> Program.withReactBatched \"vrescobar-blogapp\"\r\n|> Program.run","namespace Elmish.React\n\nopen Fable.React\nopen Elmish\n\ntype LazyProps<'model> = {\n model:'model\n render:unit->ReactElement\n equal:'model->'model->bool\n}\n\nmodule Components =\n type LazyView<'model>(props) =\n inherit Component<LazyProps<'model>,obj>(props)\n\n override this.shouldComponentUpdate(nextProps, _nextState) =\n not <| this.props.equal this.props.model nextProps.model\n\n override this.render () =\n this.props.render ()\n\n[<AutoOpen>]\nmodule Common =\n /// Avoid rendering the view unless the model has changed.\n /// equal: function to compare the previous and the new states\n /// view: function to render the model\n /// state: new state to render\n let lazyViewWith (equal:'model->'model->bool)\n (view:'model->ReactElement)\n (state:'model) =\n ofType<Components.LazyView<_>,_,_>\n { render = fun () -> view state\n equal = equal\n model = state }\n []\n\n /// Avoid rendering the view unless the model has changed.\n /// equal: function to compare the previous and the new states\n /// view: function to render the model using the dispatch\n /// state: new state to render\n /// dispatch: dispatch function\n let lazyView2With (equal:'model->'model->bool)\n (view:'model->'msg Dispatch->ReactElement)\n (state:'model)\n (dispatch:'msg Dispatch) =\n ofType<Components.LazyView<_>,_,_>\n { render = fun () -> view state dispatch\n equal = equal\n model = state }\n []\n\n /// Avoid rendering the view unless the model has changed.\n /// equal: function to compare the previous and the new model (a tuple of two states)\n /// view: function to render the model using the dispatch\n /// state1: new state to render\n /// state2: new state to render\n /// dispatch: dispatch function\n let lazyView3With (equal:_->_->bool) (view:_->_->_->ReactElement) state1 state2 (dispatch:'msg Dispatch) =\n ofType<Components.LazyView<_>,_,_>\n { render = fun () -> view state1 state2 dispatch\n equal = equal\n model = (state1,state2) }\n []\n\n /// Avoid rendering the view unless the model has changed.\n /// view: function of model to render the view\n let lazyView (view:'model->ReactElement) =\n lazyViewWith (=) view\n\n /// Avoid rendering the view unless the model has changed.\n /// view: function of two arguments to render the model using the dispatch\n let lazyView2 (view:'model->'msg Dispatch->ReactElement) =\n lazyView2With (=) view\n\n /// Avoid rendering the view unless the model has changed.\n /// view: function of three arguments to render the model using the dispatch\n let lazyView3 (view:_->_->_->ReactElement) =\n lazyView3With (=) view\n\n\n","namespace Elmish.React\n\n[<AutoOpen>]\nmodule Helpers =\n open Fable.React.Props\n open Fable.Core.JsInterop\n\n /// `Ref` callback that sets the value of an input textbox after DOM element is created.\n /// Can be used instead of `DefaultValue` and `Value` props to override input box value.\n let inline valueOrDefault value =\n Ref <| (fun e -> if e |> isNull |> not && !!e?value <> !!value then e?value <- !!value)\n\n[<RequireQualifiedAccess>]\nmodule Program =\n\n module Internal =\n\n open Fable.React\n open Browser\n open Elmish\n\n let withReactBatchedUsing lazyView2With placeholderId (program:Program<_,_,_,_>) =\n let mutable lastRequest = None\n let setState model dispatch =\n match lastRequest with\n | Some r -> window.cancelAnimationFrame r\n | _ -> ()\n\n lastRequest <- Some (window.requestAnimationFrame (fun _ ->\n ReactDom.render(\n lazyView2With (fun x y -> obj.ReferenceEquals(x,y)) (Program.view program) model dispatch,\n document.getElementById placeholderId\n )))\n\n program\n |> Program.withSetState setState\n\n let withReactSynchronousUsing lazyView2With placeholderId (program:Elmish.Program<_,_,_,_>) =\n let setState model dispatch =\n ReactDom.render(\n lazyView2With (fun x y -> obj.ReferenceEquals(x,y)) (Program.view program) model dispatch,\n document.getElementById placeholderId\n )\n\n program\n |> Program.withSetState setState\n\n let withReactHydrateUsing lazyView2With placeholderId (program:Elmish.Program<_,_,_,_>) =\n let setState model dispatch =\n ReactDom.hydrate(\n lazyView2With (fun x y -> obj.ReferenceEquals(x,y)) (Program.view program) model dispatch,\n document.getElementById placeholderId\n )\n\n program\n |> Program.withSetState setState\n\n\n /// Renders React root component inside html element identified by placeholderId.\n /// Uses `requestAnimationFrame` to batch updates to prevent drops in frame rate.\n /// NOTE: This may have unexpected effects in React controlled inputs, see https://github.com/elmish/react/issues/12\n let withReactBatched placeholderId (program:Elmish.Program<_,_,_,_>) =\n Internal.withReactBatchedUsing lazyView2With placeholderId program\n\n /// Renders React root component inside html element identified by placeholderId.\n /// New renders are triggered immediately after an update.\n let withReactSynchronous placeholderId (program:Elmish.Program<_,_,_,_>) =\n Internal.withReactSynchronousUsing lazyView2With placeholderId program\n\n [<System.Obsolete(\"Use withReactBatched\")>]\n let withReact placeholderId (program:Elmish.Program<_,_,_,_>) =\n Internal.withReactBatchedUsing lazyView2With placeholderId program\n\n [<System.Obsolete(\"Use withReactSynchronous\")>]\n let withReactUnoptimized placeholderId (program:Elmish.Program<_,_,_,_>) =\n Internal.withReactSynchronousUsing lazyView2With placeholderId program\n\n /// Renders React root component inside html element identified by placeholderId using `React.hydrate`.\n let withReactHydrate placeholderId (program:Elmish.Program<_,_,_,_>) =\n Internal.withReactHydrateUsing lazyView2With placeholderId program\n"],"sourceRoot":""}